Index: base3.10/.settings/org.eclipse.wst.common.project.facet.core.xml
===================================================================
--- base3.10/.settings/org.eclipse.wst.common.project.facet.core.xml (nonexistent)
+++ base3.10/.settings/org.eclipse.wst.common.project.facet.core.xml (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <runtime name="Apache Tomcat v8.0"/>
+ <fixed facet="wst.jsdt.web"/>
+ <installed facet="jst.jsf" version="2.2"/>
+ <installed facet="jst.jaxrs" version="2.0"/>
+ <installed facet="wst.jsdt.web" version="1.0"/>
+ <installed facet="jst.web" version="3.1"/>
+ <installed facet="java" version="1.8"/>
+</faceted-project>
Property changes on: base3.10/.settings/org.eclipse.wst.common.project.facet.core.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/.settings/org.eclipse.wst.jsdt.ui.superType.name
===================================================================
--- base3.10/.settings/org.eclipse.wst.jsdt.ui.superType.name (nonexistent)
+++ base3.10/.settings/org.eclipse.wst.jsdt.ui.superType.name (revision 7)
@@ -0,0 +1 @@
+Window
\ No newline at end of file
Index: base3.10/.settings/org.eclipse.wst.common.component
===================================================================
--- base3.10/.settings/org.eclipse.wst.common.component (nonexistent)
+++ base3.10/.settings/org.eclipse.wst.common.component (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
+ <wb-module deploy-name="egovframework-all-in-one">
+ <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
+ <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
+ <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+ <property name="java-output-path" value="/allinone/build/classes"/>
+ <property name="context-root" value="/"/>
+ </wb-module>
+</project-modules>
Index: base3.10/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
===================================================================
--- base3.10/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml (nonexistent)
+++ base3.10/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml (revision 7)
@@ -0,0 +1,12 @@
+<root>
+ <facet id="jst.jsf">
+ <node name="libprov">
+ <attribute name="provider-id" value="jsf-no-op-library-provider"/>
+ </node>
+ </facet>
+ <facet id="jst.jaxrs">
+ <node name="libprov">
+ <attribute name="provider-id" value="jaxrs-no-op-library-provider"/>
+ </node>
+ </facet>
+</root>
Property changes on: base3.10/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/.settings/org.eclipse.wst.validation.prefs
===================================================================
--- base3.10/.settings/org.eclipse.wst.validation.prefs (nonexistent)
+++ base3.10/.settings/org.eclipse.wst.validation.prefs (revision 7)
@@ -0,0 +1,2 @@
+disabled=06target
+eclipse.preferences.version=1
Property changes on: base3.10/.settings/org.eclipse.wst.validation.prefs
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- base3.10/.settings/org.eclipse.jdt.core.prefs (nonexistent)
+++ base3.10/.settings/org.eclipse.jdt.core.prefs (revision 7)
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
Property changes on: base3.10/.settings/org.eclipse.jdt.core.prefs
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/.settings/org.eclipse.core.resources.prefs
===================================================================
--- base3.10/.settings/org.eclipse.core.resources.prefs (nonexistent)
+++ base3.10/.settings/org.eclipse.core.resources.prefs (revision 7)
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
Property changes on: base3.10/.settings/org.eclipse.core.resources.prefs
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/.settings/org.eclipse.wst.jsdt.ui.superType.container
===================================================================
--- base3.10/.settings/org.eclipse.wst.jsdt.ui.superType.container (nonexistent)
+++ base3.10/.settings/org.eclipse.wst.jsdt.ui.superType.container (revision 7)
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
Index: base3.10/.settings/.jsdtscope
===================================================================
--- base3.10/.settings/.jsdtscope (nonexistent)
+++ base3.10/.settings/.jsdtscope (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="src/main/webapp"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+ <attributes>
+ <attribute name="hide" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+ <classpathentry kind="output" path=""/>
+</classpath>
Index: base3.10/src/test/java/allinone/EgovEnvCryptoAlgorithmCreateTest.java
===================================================================
--- base3.10/src/test/java/allinone/EgovEnvCryptoAlgorithmCreateTest.java (nonexistent)
+++ base3.10/src/test/java/allinone/EgovEnvCryptoAlgorithmCreateTest.java (revision 7)
@@ -0,0 +1,33 @@
+package allinone;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import egovframework.rte.fdl.cryptography.EgovPasswordEncoder;
+
+public class EgovEnvCryptoAlgorithmCreateTest {
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovEnvCryptoAlgorithmCreateTest.class);
+
+ // 계정암호화키 키
+ public String algorithmKey = "egovframe";
+
+ // 계정암호화 알고리즘(MD5, SHA-1, SHA-256)
+ public String algorithm = "SHA-256";
+
+ // 계정암호화키 블럭사이즈
+ public int algorithmBlockSize = 1024;
+
+ public static void main(String[] args) {
+ EgovEnvCryptoAlgorithmCreateTest cryptoTest = new EgovEnvCryptoAlgorithmCreateTest();
+
+ EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder();
+ egovPasswordEncoder.setAlgorithm(cryptoTest.algorithm);
+
+ LOGGER.info("------------------------------------------------------");
+ LOGGER.info("알고리즘(algorithm) : " + cryptoTest.algorithm);
+ LOGGER.info("알고리즘 키(algorithmKey) : " + cryptoTest.algorithmKey);
+ LOGGER.info("알고리즘 키 Hash(algorithmKeyHash) : " + egovPasswordEncoder.encryptPassword(cryptoTest.algorithmKey));
+ LOGGER.info("알고리즘 블럭사이즈(algorithmBlockSize) :" + cryptoTest.algorithmBlockSize);
+
+ }
+}
Property changes on: base3.10/src/test/java/allinone/EgovEnvCryptoAlgorithmCreateTest.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/test/java/allinone/EgovEnvCryptoUserTest.java
===================================================================
--- base3.10/src/test/java/allinone/EgovEnvCryptoUserTest.java (nonexistent)
+++ base3.10/src/test/java/allinone/EgovEnvCryptoUserTest.java (revision 7)
@@ -0,0 +1,49 @@
+package allinone;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import egovframework.rte.fdl.cryptography.EgovEnvCryptoService;
+import egovframework.rte.fdl.cryptography.impl.EgovEnvCryptoServiceImpl;
+
+public class EgovEnvCryptoUserTest {
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovEnvCryptoUserTest.class);
+
+ public static void main(String[] args) {
+
+ String[] arrCryptoString = { "allinone", // 데이터베이스 접속 계정 설정
+ "knit#1234", // 데이터베이스 접속 패드워드 설정
+ "jdbc:postgresql://127.0.0.1:15432/allinone", // 데이터베이스 접속 주소 설정
+ "org.postgresql.Driver" // 데이터베이스 드라이버
+ };
+
+ LOGGER.info("------------------------------------------------------");
+ ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:/egovframework/spring/com/test-context-crypto.xml" });
+ EgovEnvCryptoService cryptoService = context.getBean(EgovEnvCryptoServiceImpl.class);
+ LOGGER.info("------------------------------------------------------");
+
+ String label = "";
+ try {
+ for (int i = 0; i < arrCryptoString.length; i++) {
+ if (i == 0)
+ label = "사용자 아이디";
+ if (i == 1)
+ label = "사용자 비밀번호";
+ if (i == 2)
+ label = "접속 주소";
+ if (i == 3)
+ label = "데이터 베이스 드라이버";
+ LOGGER.info(label + " 원본(orignal):" + arrCryptoString[i]);
+ LOGGER.info(label + " 인코딩(encrypted):" + cryptoService.encrypt(arrCryptoString[i]));
+ LOGGER.info("------------------------------------------------------");
+ }
+ } catch (IllegalArgumentException e) {
+ LOGGER.error("[" + e.getClass() + "] IllegalArgumentException : " + e.getMessage());
+ } catch (Exception e) {
+ LOGGER.error("[" + e.getClass() + "] Exception : " + e.getMessage());
+ }
+
+ }
+}
Property changes on: base3.10/src/test/java/allinone/EgovEnvCryptoUserTest.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/s3/S3Config.java
===================================================================
--- base3.10/src/main/java/froala/editor/s3/S3Config.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/s3/S3Config.java (revision 7)
@@ -0,0 +1,16 @@
+package froala.editor.s3;
+
+/**
+ * Amazon S3 config string. JSON like class
+ *
+ * @author florin@froala.com
+ */
+public class S3Config {
+
+ public String bucket;
+ public String region;
+ public String keyStart;
+ public String acl;
+ public String accessKey;
+ public String secretKey;
+}
Property changes on: base3.10/src/main/java/froala/editor/s3/S3Config.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/utils/FileUtil.java
===================================================================
--- base3.10/src/main/java/froala/editor/utils/FileUtil.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/utils/FileUtil.java (revision 7)
@@ -0,0 +1,271 @@
+package froala.editor.utils;
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+
+import org.apache.pdfbox.rendering.ImageType;
+import org.apache.pdfbox.rendering.PDFRenderer;
+import org.apache.tika.Tika;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.mortennobel.imagescaling.AdvancedResizeOp;
+import com.mortennobel.imagescaling.MultiStepRescaleOp;
+
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import froala.editor.Utils;
+import net.coobird.thumbnailator.Thumbnails;
+
+public class FileUtil {
+ private static final Logger LOGGER = LoggerFactory.getLogger(FileUtil.class);
+
+ /**
+ * 첨부파일을 서버에 저장한다.
+ *
+ * @param files
+ * @param uploadDir
+ * @return
+ * @throws EgovBizException
+ */
+ public static List<Map<String, Object>> writeUploadFile(List<MultipartFile> files, String uploadDir)
+ throws EgovBizException {
+
+ File saveFolder = new File(uploadDir);
+ saveFolder.setExecutable(true);
+ saveFolder.setReadable(true);
+ saveFolder.setWritable(true);
+ if (!saveFolder.exists() || saveFolder.isFile()) {
+ saveFolder.mkdirs();
+ }
+
+ List<Map<String, Object>> resultfiles = new ArrayList<Map<String, Object>>();
+ for (MultipartFile file : files) {
+ if (file.isEmpty())
+ continue;
+ String origin_file_nm = file.getOriginalFilename();
+
+ String mime = "";
+ Tika tika = new Tika();
+ try {
+ mime = tika.detect(file.getInputStream());
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil writeUploadFile : {}", e);
+ }
+
+ int index = origin_file_nm.lastIndexOf(".");
+ String file_extsn = file.getOriginalFilename().substring(index + 1);
+ Long file_size = file.getSize();
+ String sys_file_nm;
+ try {
+ sys_file_nm = Utils.generateUniqueString() + "." + file_extsn;
+ } catch (NoSuchAlgorithmException e) {
+ throw new EgovBizException("NoSuchAlgorithmException!");
+ }
+ FileOutputStream fos = null;
+ try {
+ fos = new FileOutputStream(uploadDir + sys_file_nm);
+ FileCopyUtils.copy(file.getInputStream(), fos);
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil writeUploadFile : {}", e);
+ } finally {
+ try {
+ if (fos != null)
+ fos.close();
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil writeUploadFile : {}", e);
+ }
+ }
+
+ // 이미지 파일일 경우 썸네일 저장
+ String thumb_nm = null;
+ if (ImageCheck(mime)) {
+ thumb_nm = "thumb_" + sys_file_nm;
+ try {
+ Thumbnails.of(file.getInputStream()).size(147, 108).toFile(uploadDir + thumb_nm);
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil writeUploadFile : {}", e);
+ thumb_nm = sys_file_nm;
+ }
+ }
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("file_extsn", file_extsn);
+ map.put("origin_file_nm", origin_file_nm);
+ map.put("sys_file_nm", sys_file_nm);
+ map.put("uploadDir", uploadDir);
+ map.put("file_size", file_size);
+ map.put("mime", mime);
+ if (thumb_nm != null) {
+ map.put("thumb_nm", thumb_nm);
+ }
+ resultfiles.add(map);
+ }
+ return resultfiles;
+ };
+
+ public File convert(MultipartFile file) throws EgovBizException {
+ File convFile = null;
+ FileOutputStream fos = null;
+
+ try {
+ convFile = new File(file.getOriginalFilename());
+ fos = new FileOutputStream(convFile);
+ convFile.createNewFile();
+ fos.write(file.getBytes());
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil convert : {}", e);
+ } finally {
+ EgovResourceCloseHelper.close(fos);
+ }
+
+ return convFile;
+ }
+
+ public File multipartToFile(MultipartFile multipart) throws IllegalStateException, IOException {
+ File convFile = new File(multipart.getOriginalFilename());
+ multipart.transferTo(convFile);
+ return convFile;
+ }
+
+ public static String deleteFile(String filePath) {
+ File file = new File(filePath);
+
+ // 이미지 파일일 경우 썸네일 삭제
+ String mime = "";
+ Tika tika = new Tika();
+ try {
+ mime = tika.detect(file);
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil multipartToFile : {}", e);
+ }
+ String thumb_nm = null;
+ if (ImageCheck(mime)) {
+ String[] arr = filePath.split("/");
+ arr[arr.length - 1] = "thumb_" + arr[arr.length - 1];
+ thumb_nm = CommonUtil.arrayJoin("/", arr);
+ File thumb_file = new File(thumb_nm);
+ thumb_file.delete();
+ }
+
+ file.delete();
+
+ return filePath;
+ }
+
+ public static boolean ImageCheck(String mime) {
+ if (mime.equals("image/jpeg") || mime.equals("image/x-ms-bmp") || mime.equals("image/png")
+ || mime.equals("image/gif")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * 이미지 변환(회전)
+ *
+ * @Author : 임종호
+ * @Date : 2020. 6. 15.
+ * @Method Name : transRotate
+ * @return : String
+ */
+ public static String transRotate(Integer rotate, BufferedImage oldImage, String path) {
+ BufferedImage newImage = null;
+
+ int oldType = oldImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : oldImage.getType();
+
+ if (180 == rotate) {
+ newImage = new BufferedImage(oldImage.getWidth(), oldImage.getHeight(), oldType);
+ } else {
+ newImage = new BufferedImage(oldImage.getHeight(), oldImage.getWidth(), oldType);
+ }
+
+ Graphics2D graphics = (Graphics2D) newImage.getGraphics();
+
+ graphics.rotate(Math.toRadians(rotate), newImage.getWidth() / 2, newImage.getHeight() / 2);
+
+ if (180 != rotate) {
+ graphics.translate((newImage.getWidth() - oldImage.getWidth()) / 2,
+ (newImage.getHeight() - oldImage.getHeight()) / 2); // 90, 270도일때만 사용
+ }
+
+ graphics.drawImage(oldImage, 0, 0, oldImage.getWidth(), oldImage.getHeight(), null);
+
+ FileOutputStream fos = null;
+
+ try {
+ fos = new FileOutputStream(new java.io.File(path + "_" + rotate));
+ ImageIO.write(newImage, "png", fos);
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil transRotate : {}", e);
+ } finally {
+ if (fos != null)
+ try {
+ fos.close();
+ } catch (IOException e) {
+ LOGGER.error(e.getCause().getMessage());
+ }
+ }
+
+ return path + "_" + rotate;
+ }
+
+ /**
+ * 이미지 리사이즈
+ *
+ * @Author : 임종호
+ * @Date : 2020. 9. 17.
+ * @Method Name : ImageResize
+ * @return : BufferedImage
+ */
+ public static BufferedImage ImageResize(BufferedImage image, float stdrSize) {
+ int width = image.getWidth();
+ int height = image.getHeight();
+ float rate = (float) (Math.round(width / stdrSize * 1000) / 1000.0);
+ // 최소, 최대 비율 지정
+ if (rate < 1) {
+ rate = 1.0f;
+ } else if (rate > 4) {
+ rate = 4.0f;
+ }
+ // 이미지 리사이즈
+ MultiStepRescaleOp rescale = new MultiStepRescaleOp(Math.round(width / rate), Math.round(height / rate));
+ rescale.setUnsharpenMask(AdvancedResizeOp.UnsharpenMask.Soft);
+ return rescale.filter(image, null);
+ }
+
+ /**
+ * PDF 파일을 읽어 이미지를 생성한다.
+ *
+ * @Author : 임종호
+ * @Date : 2020. 9. 18.
+ * @Method Name : imageWrite
+ * @return : void
+ */
+ public static void pdfImageWrite(PDFRenderer pdfRenderer, int i, String imgFileName) {
+ try {
+ BufferedImage image;
+ image = pdfRenderer.renderImageWithDPI(i, 300, ImageType.RGB);
+ ImageIO.write(FileUtil.ImageResize(image, 5000.0f), "png", new java.io.File(imgFileName));
+ } catch (IOException e) {
+ LOGGER.error("fail to process FileUtil pdfImageWrite : {}", e);
+ java.io.File file = new java.io.File(imgFileName);
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/utils/FileUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/utils/CommonUtil.java
===================================================================
--- base3.10/src/main/java/froala/editor/utils/CommonUtil.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/utils/CommonUtil.java (revision 7)
@@ -0,0 +1,429 @@
+package froala.editor.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.Key;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Map;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import egovframework.com.cmm.service.EgovProperties;
+import froala.editor.file.FileOptions;
+import froala.editor.image.ImageOptions;
+
+public class CommonUtil {
+ private static Logger logger = LoggerFactory.getLogger(CommonUtil.class);
+
+ /**
+ * 배열을 문자열로 바꿈
+ *
+ * @param glue 구분자
+ * @param array 배열
+ * @return
+ */
+ public static String arrayJoin(String glue, String array[]) {
+ String result = "";
+ for (int i = 0; i < array.length; i++) {
+ result += array[i];
+ if (i < array.length - 1)
+ result += glue;
+ }
+ return result;
+ }
+
+ /**
+ * 파라메터 확인용
+ *
+ * @param request
+ */
+ public static void viewRequestParams(HttpServletRequest request) {
+ Enumeration<String> e = request.getParameterNames();
+ String name = "";
+ while (e.hasMoreElements()) {
+ name = e.nextElement();
+ logger.info("{} : {}", name, request.getParameter(name));
+ }
+ }
+
+ /**
+ * 시간유틸
+ *
+ * @author simplys
+ *
+ */
+ private static class TIME_MAXIMUM {
+ public static final int SEC = 60;
+ public static final int MIN = 60;
+ public static final int HOUR = 24;
+ public static final int DAY = 30;
+ public static final int MONTH = 12;
+ }
+
+ public static String formatTimeString(Date tempDate) {
+ if (tempDate != null) {
+ long curTime = System.currentTimeMillis();
+ long regTime = tempDate.getTime();
+ long diffTime = (curTime - regTime) / 1000;
+
+ String msg = null;
+ if (diffTime < TIME_MAXIMUM.SEC) {
+ // sec
+ msg = "방금 전";
+ } else if ((diffTime /= TIME_MAXIMUM.SEC) < TIME_MAXIMUM.MIN) {
+ // min
+ msg = diffTime + "분 전";
+ } else if ((diffTime /= TIME_MAXIMUM.MIN) < TIME_MAXIMUM.HOUR) {
+ // hour
+ msg = (diffTime) + "시간 전";
+ } else if ((diffTime /= TIME_MAXIMUM.HOUR) < TIME_MAXIMUM.DAY) {
+ // day
+ msg = (diffTime) + "일 전";
+ } else if ((diffTime /= TIME_MAXIMUM.DAY) < TIME_MAXIMUM.MONTH) {
+ // day
+ msg = (diffTime) + "달 전";
+ } else {
+ msg = (diffTime) + "년 전";
+ }
+
+ return msg;
+ } else {
+ return null;
+ }
+ }
+
+ private static String makeLink(String url, Integer p, Map<String, Object> param) {
+ StringBuffer ret = new StringBuffer();
+ if (url.startsWith("/")) {
+ ret.append(url + "?page=" + p);
+ if (param != null)
+ for (String key : param.keySet())
+ ret.append("&" + key + "=" + (param.get(key) == null ? "" : param.get(key)));
+ } else {
+ ret.append(String.format("javascript:%s(%d", url, p));
+ if (param != null)
+ for (String key : param.keySet())
+ if (param.get(key) instanceof Integer)
+ ret.append(", " + param.get(key));
+ else
+ ret.append(", '" + param.get(key) + "'");
+ ret.append(")");
+ }
+ return ret.toString();
+ }
+
+ /**
+ * 페이징 생성
+ *
+ * @param page 페이지 번호
+ * @param limit 한 페이지에 보여줄 목록 수
+ * @param pagelimit 한 줄에 보여줄 페이지 갯수
+ * @param allRowCount 전체 검색 레코드 갯수
+ * @param url 한 페이지에 걸릴 url 링크
+ * @param param URL 뒤에 queryString
+ * @return
+ */
+ public static String pagePopupList(Integer page, Integer limit, Integer pagelimit, Integer allRowCount, String url,
+ Map<String, Object> param) {
+ StringBuffer sb = new StringBuffer();
+ Integer lastpage = (int) Math.ceil((allRowCount * 1.0) / (limit * 1.0));
+
+ sb.append(" <div class='aC'>");
+ sb.append(" <div class='pagination'>");
+ sb.append(" <ul>");
+ if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
+ // sb.append(" <li><a href='"+makeLink(url, 1, param)+"'>시작</a></li>");
+ } else {
+ // sb.append(" <li><a href='#'>시작</a></li>");
+ }
+
+ if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
+ sb.append(" <li><a href='" + makeLink(url, ((page - 1) / pagelimit * pagelimit), param)
+ + "'>이전</a></li>");
+ } else {
+ sb.append(" <li><a href='#'>이전</a></li>");
+ }
+
+ if (lastpage == 0) {
+ sb.append(" <li class='active'><span>1</span></li> \n");
+ }
+
+ for (int i = (page - 1) / pagelimit * pagelimit + 1, j = 0; i <= lastpage && j < pagelimit; i++, j++) {
+ if (i == page) {
+ sb.append(" <li class='active'><span>" + i + "</span></li> \n");
+ } else {
+ sb.append(" <li><a href=\"").append(makeLink(url, i, param)).append("\">").append(i)
+ .append("</a></li> \n");
+ }
+ }
+
+ if ((int) ((page - 1) / pagelimit) < (int) (allRowCount / limit) / pagelimit) {
+ sb.append(" <li class='next'><a href='"
+ + makeLink(url, (((page - 1) / pagelimit + 1) * pagelimit + 1), param) + "'>다음</a></li> \n");
+ } else {
+ sb.append(" <li class='next'><a href='#'>다음</a></li> \n");
+ }
+
+ if (page < (int) Math.ceil((lastpage * 1.0) / (pagelimit * 1.0)) * pagelimit - (pagelimit - 1)) {
+ // sb.append(" <li><a href='"+makeLink(url, lastpage, param)+"'>끝</a></li> \n");
+ } else {
+ // sb.append(" <li><a href='#'>끝</a></li> \n");
+ }
+
+ sb.append(" </ul> \n").append(" </div> \n").append(" </div> \n");
+
+ return sb.toString();
+ }
+
+ /**
+ * 페이징 생성
+ *
+ * @param page 페이지 번호
+ * @param limit 한 페이지에 보여줄 목록 수
+ * @param pagelimit 한 줄에 보여줄 페이지 갯수
+ * @param allRowCount 전체 검색 레코드 갯수
+ * @param url 한 페이지에 걸릴 url 링크
+ * @param param URL 뒤에 queryString
+ * @return
+ */
+ public static String pageList(Integer page, Integer limit, Integer pagelimit, Integer allRowCount, String url,
+ Map<String, Object> param) {
+ StringBuffer sb = new StringBuffer();
+ Integer lastpage = (int) Math.ceil((allRowCount * 1.0) / (limit * 1.0));
+
+ sb.append(" <div class='pagination pagination-large pagination-centered'>");
+ sb.append(" <ul>");
+ if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
+ // sb.append(" <li><a href='"+makeLink(url, 1, param)+"'>시작</a></li>");
+ } else {
+ // sb.append(" <li><a href='#'>시작</a></li>");
+ }
+
+ if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
+ sb.append(" <li><a href='" + makeLink(url, ((page - 1) / pagelimit * pagelimit), param)
+ + "'>이전</a></li>");
+ } else {
+ sb.append(" <li><a href='#'>이전</a></li>");
+ }
+
+ if (lastpage == 0) {
+ sb.append(" <li class='active'><a href='#'>1</a></li> \n");
+ }
+
+ for (int i = (page - 1) / pagelimit * pagelimit + 1, j = 0; i <= lastpage && j < pagelimit; i++, j++) {
+ if (i == page) {
+ sb.append(" <li class='active'><a href='#'>" + i + "</a></li> \n");
+ } else {
+ sb.append(" <li><a href=\"").append(makeLink(url, i, param)).append("\">").append(i)
+ .append("</a></li> \n");
+ }
+ }
+
+ if ((int) ((page - 1) / pagelimit) < (int) (allRowCount / limit) / pagelimit) {
+ sb.append(" <li class='next'><a href='"
+ + makeLink(url, (((page - 1) / pagelimit + 1) * pagelimit + 1), param) + "'>다음</a></li> \n");
+ } else {
+ sb.append(" <li class='next'><a href='#'>다음</a></li> \n");
+ }
+
+ if (page < (int) Math.ceil((lastpage * 1.0) / (pagelimit * 1.0)) * pagelimit - (pagelimit - 1)) {
+ // sb.append(" <li><a href='"+makeLink(url, lastpage, param)+"'>끝</a></li> \n");
+ } else {
+ // sb.append(" <li><a href='#'>끝</a></li> \n");
+ }
+ sb.append(" </ul> \n").append(" </div> \n");
+
+ return sb.toString();
+ }
+
+ public static String getURL(HttpServletRequest request) {
+ Enumeration<?> param = request.getParameterNames();
+
+ StringBuffer strParam = new StringBuffer();
+ StringBuffer strURL = new StringBuffer();
+
+ if (param.hasMoreElements()) {
+ strParam.append("?");
+ }
+
+ while (param.hasMoreElements()) {
+ String name = (String) param.nextElement();
+ String value = request.getParameter(name);
+
+ strParam.append(name + "=" + value);
+
+ if (param.hasMoreElements()) {
+ strParam.append("&");
+ }
+ }
+
+ strURL.append(request.getRequestURI());
+ strURL.append(strParam);
+
+ return strURL.toString();
+ }
+
+ public static Boolean setTimeout(int delayTime) {
+ long now = System.currentTimeMillis();
+ long currentTime = 0;
+
+ while (currentTime - now < delayTime) {
+ currentTime = System.currentTimeMillis();
+ }
+ return true;
+ }
+
+ public static String arrayToString(String[] str, String argDelimiter) {
+ String rString = "";
+ if (str == null)
+ return "";
+ int cntArray = str.length;
+ for (int i = 0; i < cntArray; i++) {
+ if (i > 0 && i < cntArray)
+ rString += argDelimiter;
+ rString += str[i];
+ }
+ return rString;
+ }
+
+ public static String hashSHA256(String str) {
+ String SHA = "";
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-256");
+ sh.update(str.getBytes());
+ byte byteData[] = sh.digest();
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < byteData.length; i++) {
+ sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
+ }
+ SHA = sb.toString();
+ } catch (NoSuchAlgorithmException e) {
+ logger.error("fail to process hashSHA256 {}", e);
+ SHA = null;
+ }
+ return SHA;
+ }
+
+ /**
+ * 에디터 내용 변경(contextpath)
+ *
+ * @Author : 임종호
+ * @Date : 2021. 11. 3.
+ * @Method Name : convertEditorCn
+ * @return : String
+ */
+ public static String convertEditorCn(String cn, HttpServletRequest request) {
+ String contextPath = request.getContextPath();
+ String convertCn = cn
+ .replace("src=\"" + ImageOptions.downloadDefault, "src=\"" + contextPath + ImageOptions.downloadDefault)
+ .replace("src=\"/vtsp" + ImageOptions.downloadDefault,
+ "src=\"" + contextPath + ImageOptions.downloadDefault)
+ .replace("href=\"" + FileOptions.downloadDefault, "href=\"" + contextPath + FileOptions.downloadDefault)
+ .replace("href=\"/vtsp" + FileOptions.downloadDefault,
+ "href=\"" + contextPath + FileOptions.downloadDefault);
+ return convertCn;
+ }
+
+ /**
+ * 모바일 체크
+ *
+ * @Author : 임종호
+ * @Date : 2021. 11. 8.
+ * @Method Name : isMobile
+ * @return : boolean
+ */
+ public static boolean isMobile(HttpServletRequest request) {
+ String userAgent = request.getHeader("user-agent");
+ boolean mobile1 = userAgent.matches(
+ ".*(iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson).*");
+ boolean mobile2 = userAgent.matches(".*(LG|SAMSUNG|Samsung).*");
+ if (mobile1 || mobile2) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * AES256 암호화 - URL 인코딩
+ * @Author : 임종호
+ * @Date : 2021. 11. 16.
+ * @Method Name : encryptAES256
+ * @return : String
+ */
+ public static String encryptAES256(String str) {
+ if (StringUtils.isBlank(str)) {
+ return "";
+ }
+ String enStr = "";
+
+ String keyStr = EgovProperties.getProperty("ctm.egovfilescrty.key").trim();
+ String ivStr = EgovProperties.getProperty("ctm.egovfilescrty.iv").trim();
+
+ Key key = new SecretKeySpec(keyStr.getBytes(), "AES");
+ IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
+ Cipher c;
+ try {
+ c = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ c.init(Cipher.ENCRYPT_MODE, key, iv);
+ byte[] encrypted;
+ encrypted = c.doFinal(str.getBytes("UTF-8"));
+ enStr = new String(Base64.encodeBase64(encrypted));
+ enStr = URLEncoder.encode(enStr, "UTF-8");
+ } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | UnsupportedEncodingException
+ | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
+ logger.error(e.getCause().getMessage());
+ return "";
+ }
+ return enStr;
+ }
+
+ /**
+ * AES256 복호화 - URL 인코딩
+ * @Author : 임종호
+ * @Date : 2021. 11. 16.
+ * @Method Name : decryptAES256
+ * @return : String
+ */
+ public static String decryptAES256(String str) {
+ if (StringUtils.isBlank(str)) {
+ return "";
+ }
+ String deStr = "";
+ String keyStr = EgovProperties.getProperty("ctm.egovfilescrty.key").trim();
+ String ivStr = EgovProperties.getProperty("ctm.egovfilescrty.iv").trim();
+
+ Key key = new SecretKeySpec(keyStr.getBytes(), "AES");
+ IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
+ Cipher c;
+
+ try {
+ c = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ c.init(Cipher.DECRYPT_MODE, key, iv);
+ byte[] decrypted = Base64.decodeBase64(str);
+ deStr = new String(c.doFinal(decrypted), "UTF-8");
+ } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | UnsupportedEncodingException
+ | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
+ logger.error(e.getCause().getMessage());
+ return "";
+ }
+
+ return deStr;
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/utils/CommonUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/utils/view/ImageView.java
===================================================================
--- base3.10/src/main/java/froala/editor/utils/view/ImageView.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/utils/view/ImageView.java (revision 7)
@@ -0,0 +1,107 @@
+package froala.editor.utils.view;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.view.AbstractView;
+
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+@Component
+public class ImageView extends AbstractView{
+ private static final Logger LOGGER = LoggerFactory.getLogger(ImageView.class);
+
+ @Override
+ protected void renderMergedOutputModel(Map<String, Object> model,
+ HttpServletRequest request, HttpServletResponse response) throws IOException {
+ String path = (String) model.get("path");
+
+ Path source = Paths.get(path);
+
+ // 응답의 타입이 이미지임을 알려줍니다.
+ response.setContentType(Files.probeContentType(source));
+
+ // 한글 파일명일 경우를 위해 파일명 인코딩
+ String filename = (String) model.get("origin_file_nm");
+ if (StringUtils.isBlank(filename)) {
+ filename = source.getFileName().toString();
+ }
+// String filename = source.getFileName().toString();
+ String userAgent = request.getHeader("User-Agent");
+ String conVstr = null;
+
+ if (userAgent.contains("MSIE")) {
+ conVstr = URLEncoder.encode(filename,"UTF-8");
+ } else if (userAgent.contains("Trident")) {
+ conVstr = URLEncoder.encode(filename,"UTF-8");
+ } else if(userAgent.contains("Chrome")) {
+ conVstr = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
+ } else if(userAgent.contains("Opera")) {
+ conVstr = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
+ } else if (userAgent.contains("Mozilla")){
+ conVstr = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
+ } else {
+ conVstr = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
+ }
+
+ // 웹브라우저 상에서 이미지 저장시 파일명을 지정합니다.
+ response.setHeader("Content-Disposition", "attachment; filename=" + conVstr + ";");
+
+ // 파일로부터 byte를 읽음
+ byte[] bytes = readFile(path);
+ if (bytes != null) {
+ write(response, bytes);
+ }
+ }
+
+ /**
+ * 파일로부터 byte 배열 읽어오기
+ */
+ private byte[] readFile(String path) throws IOException {
+ BufferedInputStream bis = null;
+ byte[] bytes = null;
+ FileInputStream fis = null;
+ try {
+ File file = new File(path);
+ if (Boolean.FALSE.equals(file.exists())) {
+ return null;
+ }
+ fis = new FileInputStream(path);
+ bis = new BufferedInputStream(fis);
+ int length = bis.available();
+ bytes = new byte[length];
+ bis.read(bytes);
+ }
+ catch(IOException e){
+ LOGGER.error("fail to process imageView readFile {}", e);
+ } finally {
+ EgovResourceCloseHelper.close(fis, bis);
+ }
+
+ return bytes;
+ }
+
+ /**
+ * 응답 OutputStream에 파일 내용 쓰기
+ */
+ private void write(HttpServletResponse response, byte[] bytes) throws IOException {
+ OutputStream output = response.getOutputStream();
+ output.write(bytes);
+ output.flush();
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/utils/view/ImageView.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/utils/view/VideoView.java
===================================================================
--- base3.10/src/main/java/froala/editor/utils/view/VideoView.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/utils/view/VideoView.java (revision 7)
@@ -0,0 +1,52 @@
+package froala.editor.utils.view;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.view.AbstractView;
+
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import froala.editor.video.StreamingUtil;
+
+/**
+ * 동영상 View
+ * @since 2021. 6. 18.
+ * @author 임종호
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2021. 6. 18. 임종호 : 최초작성
+ * </PRE>
+ */
+@Component
+public class VideoView extends AbstractView {
+ private final static Logger LOGGER = LoggerFactory.getLogger(VideoView.class);
+
+ @Override
+ protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
+ HttpServletResponse response) throws EgovBizException, IOException {
+ String path = (String) request.getAttribute("path");
+ path = path.replaceAll("\\.", "").replaceAll("/", "").replaceAll("\\\\", "");
+ if (StringUtils.isEmpty(path)) {
+ throw new EgovBizException("파일 경로가 올바르지 않습니다.");
+ }
+
+ File file = new File(path);
+ if (!file.exists()) {
+ throw new FileNotFoundException();
+ }
+ StreamingUtil su = new StreamingUtil();
+ OutputStream out = response.getOutputStream();
+ su.streaming(file, request, response, out);
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/utils/view/VideoView.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/utils/view/DownloadView.java
===================================================================
--- base3.10/src/main/java/froala/editor/utils/view/DownloadView.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/utils/view/DownloadView.java (revision 7)
@@ -0,0 +1,83 @@
+package froala.editor.utils.view;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tika.Tika;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.servlet.view.AbstractView;
+
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+
+@Component
+public class DownloadView extends AbstractView {
+ private final static Logger LOGGER = LoggerFactory.getLogger(DownloadView.class);
+
+ @Override
+ protected void renderMergedOutputModel(Map<String, Object> model,
+ HttpServletRequest request, HttpServletResponse response) throws EgovBizException, IOException {
+ String path = (String) model.get("path");
+ String mime = (String) model.get("mime");
+
+ File file = new File(path);
+
+ response.setContentLength((int)file.length());
+
+ String filename = (String) model.get("origin_file_nm");
+ String userAgent = request.getHeader("User-Agent");
+ String conVstr = null;
+
+ if (userAgent.contains("MSIE")) {
+ conVstr = URLEncoder.encode(filename,"UTF-8");
+ } else if (userAgent.contains("Trident")) {
+ conVstr = URLEncoder.encode(filename,"UTF-8");
+ } else if(userAgent.contains("Chrome")) {
+ conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
+ } else if(userAgent.contains("Opera")) {
+ conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
+ } else if (userAgent.contains("Mozilla")){
+ conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
+ } else {
+ conVstr = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
+ }
+
+ // PDF 파일일 경우 바로 열기
+ Tika tika = new Tika();
+ mime = mime == null ? tika.detect(file) : mime;
+ switch (mime) {
+ // pdf로 다운로드 받도록 하기 위해 주석
+// case "application/pdf":
+// response.setContentType("application/pdf");
+// break;
+
+ default:
+ response.setHeader("Content-Disposition", "attachment; fileName=\"" + conVstr + "\";");
+ response.setContentType("application/octet-stream;charset=UTF-8");
+ break;
+ }
+ response.setHeader("Content-Transfer-Encoding", "binary");
+
+ OutputStream out = response.getOutputStream();
+ FileInputStream fis = null;
+
+ try{
+ fis = new FileInputStream(file);
+ FileCopyUtils.copy(fis, out);
+ } finally {
+ EgovResourceCloseHelper.close(fis);
+ }
+ out.flush();
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/utils/view/DownloadView.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/File.java
===================================================================
--- base3.10/src/main/java/froala/editor/File.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/File.java (revision 7)
@@ -0,0 +1,570 @@
+package froala.editor;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import froala.editor.file.FileOptions;
+import froala.editor.image.ImageOptions;
+import net.coobird.thumbnailator.Thumbnails;
+import net.coobird.thumbnailator.Thumbnails.Builder;
+
+/**
+ * File functionality.
+ *
+ * @author florin@froala.com
+ */
+@Component
+public final class File {
+ private static final Logger LOGGER = LoggerFactory.getLogger(File.class);
+ /**
+ * Content type string used in http multipart.
+ */
+ public static final String multipartContentType = "multipart/form-data";
+
+ /**
+ * Private constructor.
+ */
+ private File() {
+
+ }
+
+ /**
+ * File default options.
+ */
+ public static final FileOptions defaultOptions = new FileOptions();
+
+ /**
+ * Uploads a file to disk.
+ *
+ * @param req
+ * Servlet HTTP request.
+ * @param fileRoute
+ * Route Server route where the file will be uploaded. This route
+ * must be public to be accesed by the editor.
+ * @return Object with link.
+ * @throws EgovBizException
+ */
+ public static EditorFileVO upload(HttpServletRequest req, String fileRoute) throws EgovBizException {
+ return upload(req, fileRoute, defaultOptions);
+ }
+
+ /**
+ * Uploads a file to disk.
+ *
+ * @param req
+ * Servlet HTTP request.
+ * @param fileRoute
+ * Server route where the file will be uploaded. This route must
+ * be public to be accesed by the editor.
+ * @param options
+ * File options. Defaults to {@link #defaultOptions} which has
+ * </br>
+ * Fieldname: "file" </br>
+ * Validation:
+ * <ul>
+ * <li>Extensions: "txt", "pdf", "doc"</li>
+ * <li>Mime Types: "text/plain", "application/msword",
+ * "application/x-pdf", "application/pdf"</li>
+ * </ul>
+ * @return Object with link.
+ * @throws EgovBizException
+ */
+ public static EditorFileVO upload(HttpServletRequest req, String fileRoute, FileOptions options) throws EgovBizException {
+
+ if (options == null) {
+ options = defaultOptions;
+ }
+
+ if (req.getContentType() == null || req.getContentType().toLowerCase().indexOf(multipartContentType) == -1) {
+ throw new EgovBizException("Invalid contentType. It must be " + multipartContentType);
+ }
+
+ MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)req;
+ MultipartFile file = multipartHttpServletRequest.getFile(options.getFieldname());
+
+ // servlet 3.0
+ //Part filePart = req.getPart(options.getFieldname());
+
+ if (file == null) {
+ throw new EgovBizException("Fieldname is not correct. It must be: " + options.getFieldname());
+ }
+
+ // Generate random name.
+ String file_extsn = FilenameUtils.getExtension(Utils.getFileName(file)).toLowerCase();
+ String extension = file_extsn;
+ extension = (extension != null && extension != "") ? "." + extension : extension;
+ String name;
+ try {
+ name = Utils.generateUniqueString() + extension;
+ } catch (NoSuchAlgorithmException e) {
+ // return null;
+ throw new EgovBizException("NoSuchAlgorithmException!");
+ }
+
+ String fullPath = fileRoute + name;
+
+ InputStream fileContent;
+ try {
+ fileContent = file.getInputStream();
+ } catch (IOException e) {
+ throw new EgovBizException("IOException!");
+ }
+ String absoluteServerPath = getAbsoluteServerPath(req, fullPath);
+// String absoluteServerPath = linkName;
+ java.io.File targetFile = null;
+ if (absoluteServerPath != null && !absoluteServerPath.equals("")) {
+ targetFile = new java.io.File(absoluteServerPath);
+ } else {
+ return null;
+ }
+
+ // Resize image.
+ if (options instanceof ImageOptions && ((ImageOptions) options).getResizeOptions() != null) {
+
+ ImageOptions.ResizeOptions imageOptions = ((ImageOptions) options).getResizeOptions();
+
+ Builder<? extends InputStream> thumbnailsBuilder = Thumbnails.of(fileContent);
+
+ // Check aspect ratio.
+ int newWidth = imageOptions.getNewWidth();
+ int newHeight = imageOptions.getNewHeight();
+ if (imageOptions.getKeepAspectRatio()) {
+ thumbnailsBuilder = thumbnailsBuilder.size(newWidth, newHeight);
+ } else {
+ thumbnailsBuilder = thumbnailsBuilder.forceSize(newWidth, newHeight);
+ }
+
+ try {
+ thumbnailsBuilder.toFile(targetFile);
+ } catch (IOException e) {
+ LOGGER.error(e.getCause().getMessage());
+ }
+ } else {
+ try {
+ FileUtils.copyInputStreamToFile(fileContent, targetFile);
+ } catch (IOException e) {
+ LOGGER.error(e.getCause().getMessage());
+ }
+ }
+
+ if (options.getValidation() != null
+ && !options.getValidation().check(absoluteServerPath, file.getContentType())) {
+
+ delete(req, fullPath);
+ throw new EgovBizException("File does not meet the validation.");
+ }
+
+ // 정보 셋팅
+ EditorFileVO fileVO = new EditorFileVO();
+ fileVO.setLink(options.getDownloadUrl());
+ fileVO.setFullPath(fullPath);
+ fileVO.setFileExtsn(file_extsn);
+ fileVO.setOriginFileNm(file.getOriginalFilename());
+ fileVO.setSysFileNm(name);
+ fileVO.setUploadDir(fileRoute);
+ fileVO.setFileSize(file.getSize());
+ fileVO.setMime(file.getContentType());
+ return fileVO;
+ }
+
+ /**
+ * Get absolute server path.
+ *
+ * @param req
+ * Used to get the servlet context.
+ * @param relativePath
+ * Relative path.
+ * @return Absolute path.
+ */
+ public static String getAbsoluteServerPath(HttpServletRequest req, String relativePath) {
+// return req.getServletContext().getRealPath(relativePath);
+ return relativePath;
+ }
+
+ /**
+ * Delete a file from disk.
+ *
+ * @param req
+ * Used to get the servlet context.
+ * @param src
+ * Server file path.
+ */
+ public static void delete(HttpServletRequest req, String src) {
+ String filePath = getAbsoluteServerPath(req, src);
+
+ java.io.File file = new java.io.File(filePath);
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+
+ /**
+ * 압축파일(zip) 파일 업로드 - 압축해제 후 저장
+ * @param req
+ * @param fileRoute
+ * @param options
+ * @return
+ * @throws EgovBizException
+ * @throws NoSuchAlgorithmException
+ */
+ public static List<EditorFileVO> zipUpload(HttpServletRequest req, String fileRoute, FileOptions options)
+ throws EgovBizException, NoSuchAlgorithmException {
+
+ if (options == null) {
+ options = defaultOptions;
+ }
+
+ if (req.getContentType() == null || req.getContentType().toLowerCase().indexOf(multipartContentType) == -1) {
+ throw new EgovBizException("Invalid contentType. It must be " + multipartContentType);
+ }
+
+ MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) req;
+ MultipartFile file = multipartHttpServletRequest.getFile(options.getFieldname());
+
+ if (file == null) {
+ throw new EgovBizException("Fieldname is not correct. It must be: " + options.getFieldname());
+ }
+
+ List<EditorFileVO> fileMap = new ArrayList<>();
+
+ ZipArchiveInputStream zin = null;
+ ZipArchiveEntry entry = null;
+ try {
+ zin = new ZipArchiveInputStream(file.getInputStream(), "EUC-KR", false);
+
+ java.io.File dir = new java.io.File(fileRoute);
+ dir.setExecutable(true);
+ dir.setReadable(true);
+ dir.setWritable(true);
+ if (!dir.exists()) {
+
+ boolean result = false;
+ try{
+ dir.mkdirs();
+ result = true;
+ }
+ catch(SecurityException se){
+ LOGGER.error("fail to process create Dir {}", se);
+ }
+
+ if(result) {
+ LOGGER.info("Dir created");
+ }
+ }
+
+ try {
+ while ((entry = zin.getNextZipEntry()) != null) {
+ // Generate random name.
+ String file_extsn = FilenameUtils.getExtension(entry.getName());
+ String extension = file_extsn;
+ extension = (extension != null && extension != "") ? "." + extension : extension;
+ String sysFileNm = Utils.generateUniqueString() + extension;
+ String fullPath = fileRoute + sysFileNm;
+ Path source = Paths.get(fullPath);
+ OutputStream zout = null;
+
+ try {
+ zout = new FileOutputStream(source.toFile());
+
+ //버퍼
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = zin.read(buf)) > 0) {
+ zout.write(buf, 0, len);
+ }
+
+ // 정보 셋팅
+ EditorFileVO fileVO = new EditorFileVO();
+ fileVO.setLink(options.getDownloadUrl());
+ fileVO.setFullPath(fullPath);
+ fileVO.setFileExtsn(file_extsn);
+ fileVO.setOriginFileNm(entry.getName());
+ fileVO.setSysFileNm(sysFileNm);
+ fileVO.setUploadDir(fileRoute);
+ fileVO.setFileSize(entry.getSize());
+ fileVO.setMime(Files.probeContentType(source));
+
+ fileMap.add(fileVO);
+ } catch (IOException e) {
+ LOGGER.error("fail to process zipUpload File {}", e);
+ } finally {
+ EgovResourceCloseHelper.close(zout);
+ }
+ }
+ } catch (IOException e) {
+ LOGGER.error("fail to process zipUpload File {}", e);
+ } finally {
+ EgovResourceCloseHelper.close(zin);
+ }
+ } catch (IOException e) {
+ LOGGER.error("fail to process zipUpload File {}", e);
+ }
+
+ return fileMap;
+ }
+
+ /**
+ * 디렉토리 하위파일 및 디렉토리 삭제
+ * @param path
+ */
+ public static void deleteDirFileFn(String path) {
+ java.io.File file = new java.io.File(path); // 매개변수로 받은 경로를 파일객체선언 (/home/nation909/test 경로의 폴더를 지정함)
+ java.io.File[] files = file.listFiles(); // 해당 폴더 안의 파일들을 files 변수에 담음
+ if(files.length > 0) { // 파일, 폴더가 1개라도 있을경우 실행
+ for (int i=0; i<files.length; i++) { // 개수만큼 루프
+ if(files[i].isFile()) { // 파일일경우 해당파일 삭제
+ files[i].delete();
+ }
+ else { // 폴더일경우 재귀함수로 해당폴더의 경로를 전달함
+ deleteDirFileFn(files[i].getPath()); // 재귀함수
+ }
+ files[i].delete(); // 폴더일경우 재귀함수가 다돌고나서, 즉 폴더안의 파일이 다지워지고 나서 해당폴더를 삭제함
+ }
+ file.delete();
+ }
+ }
+
+ /**
+ * 파일을 복사하여 복사한 파일 정보를 리턴
+ * @param tempFile
+ * - 복사할 파일 VO 정보
+ * @param copyPath
+ * - 복사할 디렉토리 위치 정보
+ * @param options
+ * - 파일 옵션
+ * @return
+ * @throws IOException
+ */
+ public static EditorFileVO fileCopy(EditorFileVO tempFile, String copyPath, FileOptions options) throws IOException {
+ java.io.File file = new java.io.File(tempFile.getFullPath());
+ java.io.File mfile = null;
+ String copyFullPath = "";
+ if(file.exists()) {
+ java.io.File directory = new java.io.File(copyPath);
+ directory.setExecutable(true);
+ directory.setReadable(true);
+ directory.setWritable(true);
+ if (!directory.exists()) {
+
+ boolean result = false;
+ try{
+ directory.mkdirs();
+ result = true;
+ }
+ catch(SecurityException se){
+ LOGGER.error("fail to process fileCopy create Dir {}", se);
+ }
+
+ if(result) {
+ LOGGER.info("Dir created");
+ }
+ }
+
+ copyFullPath = copyPath + tempFile.getSysFileNm();
+ mfile = new java.io.File(copyFullPath);
+ }
+
+ InputStream inStream = null;
+ OutputStream outStream = null;
+ EditorFileVO vo = null;
+ try{
+ inStream = new FileInputStream(file); //원본파일
+ outStream = new FileOutputStream(mfile); //이동시킬 위치
+
+ byte[] buffer = new byte[1024];
+ int length;
+
+ while ((length = inStream.read(buffer)) > 0){
+ outStream.write(buffer, 0, length);
+ }
+
+ vo = new EditorFileVO();
+ vo.setLink(options.getDownloadUrl());
+ vo.setFullPath(copyFullPath);
+ vo.setFileExtsn(tempFile.getFileExtsn());
+ vo.setOriginFileNm(tempFile.getOriginFileNm());
+ vo.setSysFileNm(tempFile.getSysFileNm());
+ vo.setUploadDir(copyPath);
+ vo.setFileSize(tempFile.getFileSize());
+ vo.setMime(tempFile.getMime());
+ } catch(IOException e) {
+ LOGGER.error("fail to process fileCopy {}", e);
+ } finally {
+ EgovResourceCloseHelper.close(inStream, outStream);
+ }
+
+ return vo;
+ }
+
+ /**
+ * List 파일객체를 받아 다수의 파일을 압축파일로 압축 후 다운로드
+ * @param req
+ * - HttpServletRequest
+ * @param res
+ * - HttpServletResponse
+ * @param fileList
+ * - 파일 정보를 담은 객체
+ * @param fileRoute
+ * - 파일을 저장할 경로
+ * @throws EgovBizException
+ */
+ public static void zipDown(HttpServletRequest req
+ , HttpServletResponse res
+ , List<EditorFileVO> fileList
+ , String fileRoute) throws EgovBizException {
+ //추가 temp 경로 생성
+ String zipFilePath = Utils.getAddTempRoute(fileRoute);
+ // 파일명 생성 시 날짜
+ Calendar cal = Calendar.getInstance();
+ //현재 년도, 월, 일
+ int year = cal.get(Calendar.YEAR);
+ int month = cal.get(Calendar.MONTH) + 1;
+ int date = cal.get(Calendar.DATE);
+ String downloadFileName = year + "_" + month + "_" + date;
+ String zipFileNm = downloadFileName + ".zip";
+ String fullPath = zipFilePath + zipFileNm;
+ java.io.File file = new java.io.File(fullPath);
+
+ try {
+ //디렉토리 가져오기
+ java.io.File dir = new java.io.File(zipFilePath);
+ dir.setExecutable(true);
+ dir.setReadable(true);
+ dir.setWritable(true);
+ if (!dir.exists()) {
+
+ boolean result = false;
+ try{
+ dir.mkdirs();
+ result = true;
+ }
+ catch(SecurityException se){
+ LOGGER.error("fail to process create Dir {}", se);
+ }
+
+ if(result) {
+ LOGGER.info("Dir created");
+ }
+ }
+
+ // ZipOutputStream을 FileOutputStream 으로 감쌈
+ FileOutputStream fout = null;
+ ZipArchiveOutputStream zout = null;
+ FileInputStream fin = null;
+
+ try {
+ fout = new FileOutputStream(file);
+ zout = new ZipArchiveOutputStream(fout);
+
+ for (EditorFileVO vo : fileList) {
+ try {
+ //본래 파일명 유지
+ ZipArchiveEntry zipEntry = new ZipArchiveEntry(vo.getOriginFileNm());
+ zout.putArchiveEntry(zipEntry);
+
+ //경로포함 압축
+ //zout.putNextEntry(new ZipEntry(sourceFiles.get(i)));
+
+ java.io.File voFile = new java.io.File(vo.getFullPath());
+ fin = new FileInputStream(voFile);
+ byte[] buf = new byte[1024];
+ int len;
+
+ // input file을 1024바이트로 읽음, zip stream에 읽은 바이트를 씀
+ while((len = fin.read(buf)) > 0) {
+ zout.write(buf, 0, len);
+ }
+ } catch (IOException e) {
+ LOGGER.error("fail to process zipDown file {}", e);
+// throw new Exception(e.getMessage());
+ } finally {
+ EgovResourceCloseHelper.close(fin, zout);
+ }
+ }
+ } catch (IOException e) {
+ LOGGER.error("fail to process zipDown file {}", e);
+ } finally {
+ EgovResourceCloseHelper.close(zout);
+ }
+
+ String userAgent = req.getHeader("User-Agent");
+ String conVstr = null;
+
+ if (userAgent.contains("MSIE")) {
+ conVstr = URLEncoder.encode(zipFileNm,"UTF-8");
+ } else if (userAgent.contains("Trident")) {
+ conVstr = URLEncoder.encode(zipFileNm,"UTF-8");
+ } else if(userAgent.contains("Chrome")) {
+ conVstr = new String(zipFileNm.getBytes("UTF-8"), "ISO-8859-1");
+ } else if(userAgent.contains("Opera")) {
+ conVstr = new String(zipFileNm.getBytes("UTF-8"), "ISO-8859-1");
+ } else if (userAgent.contains("Mozilla")){
+ conVstr = new String(zipFileNm.getBytes("UTF-8"), "ISO-8859-1");
+ } else {
+ conVstr = new String(zipFileNm.getBytes("UTF-8"), "ISO-8859-1");
+ }
+
+ res.setHeader("Content-Disposition", "attachment; fileName=\"" + conVstr + "\";");
+ res.setContentType("application/octet-stream;charset=UTF-8");
+ res.setHeader("Content-Transfer-Encoding", "binary");
+
+ FileInputStream fis = null;
+ BufferedInputStream bis = null;
+ ServletOutputStream so = null;
+ BufferedOutputStream bos = null;
+
+ try {
+ fis = new FileInputStream(file);
+ bis = new BufferedInputStream(fis);
+ so = res.getOutputStream();
+ bos = new BufferedOutputStream(so);
+
+ byte[] data = new byte[2048];
+ int input=0;
+
+ while((input=bis.read(data))!=-1){
+ bos.write(data,0,input);
+ bos.flush();
+ }
+ } catch (IOException e) {
+ LOGGER.error("fail to process zipDown file {}", e);
+ } finally {
+ EgovResourceCloseHelper.close(fis, bis, so, bos);
+ }
+ } catch (IOException e) {
+ LOGGER.error("fail to process zipDown file {}", e);
+ } finally {
+ File.deleteDirFileFn(zipFilePath);
+ }
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/File.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/web/EditorController.java
===================================================================
--- base3.10/src/main/java/froala/editor/web/EditorController.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/web/EditorController.java (revision 7)
@@ -0,0 +1,409 @@
+package froala.editor.web;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.google.gson.Gson;
+
+import egovframework.com.cmm.AjaxWrapper;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import froala.editor.EditorFileVO;
+import froala.editor.File;
+import froala.editor.Image;
+import froala.editor.Utils;
+import froala.editor.Video;
+import froala.editor.file.FileOptions;
+import froala.editor.image.ImageOptions;
+import froala.editor.service.EditorService;
+import froala.editor.utils.CommonUtil;
+import froala.editor.video.VideoOptions;
+
+/**
+ * froala editor Controller
+ */
+@Controller
+public class EditorController {
+ private static final Logger logger = LoggerFactory.getLogger(EditorController.class);
+
+ private static final String FILE_ROUTE = EgovProperties.getProperty("editor.fileRoute");
+ private static final String TEMP_FILE_ROUTE = EgovProperties.getProperty("editor.fileTempRoute");
+
+ /** EgovSampleService */
+ @Resource(name = "editorService")
+ private EditorService editorService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /**
+ * 에디터용 파일 업로드
+ *
+ * @param request
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/editor/uploadFile.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String editorUploadFile(HttpServletRequest request) {
+
+ FileOptions options = new FileOptions();
+ options.setValidation(null);
+
+ EditorFileVO fileVO = new EditorFileVO();
+ try {
+ fileVO = File.upload(request, Utils.getAddDateRoute(FILE_ROUTE), options);
+
+ // DB부분
+ String fileId = editorService.insertEditorFile(fileVO);
+
+ fileVO.setFileId(fileId);
+ fileVO.setFullPath(null);
+ fileVO.setUploadDir(null);
+ fileVO.setSysFileNm(null);
+ String contextPath = request.getContextPath();
+ fileVO.setLink(contextPath + fileVO.getLink());
+ } catch (EgovBizException e) {
+ logger.error("fail to process EditorController upload_file {}", e);
+ Map<String, Object> responseData = new HashMap<>();
+ responseData.put("error", "fail to process Editor 파일업로드");
+ }
+ Gson gson = new Gson();
+ return gson.toJson(fileVO);
+ }
+
+ /**
+ * 에디터용 이미지 업로드
+ *
+ * @param request
+ * @return
+ * @throws EgovBizException
+ * @throws UnsupportedEncodingException
+ */
+ @RequestMapping(value = "/editor/uploadImage.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String uploadImage(HttpServletRequest request) throws EgovBizException, UnsupportedEncodingException {
+ ImageOptions options = new ImageOptions();
+ options.setValidation(null);
+
+ EditorFileVO fileVO = new EditorFileVO();
+ try {
+ fileVO = Image.upload(request, Utils.getAddDateRoute(FILE_ROUTE), options);
+
+ // DB부분
+ String fileId = editorService.insertEditorFile(fileVO);
+
+ fileVO.setFileId(null);
+ fileVO.setFullPath(null);
+ fileVO.setUploadDir(null);
+ fileVO.setSysFileNm(null);
+ String contextPath = request.getContextPath();
+ fileVO.setLink(contextPath + fileVO.getLink());
+ } catch (EgovBizException e) {
+ logger.error("fail to process EditorController upload_image {}", e);
+ Map<Object, Object> responseData = new HashMap<>();
+ responseData.put("error", "fail to process Editor 이미지 업로드");
+ }
+ Gson gson = new Gson();
+ return gson.toJson(fileVO);
+ }
+
+ /**
+ * 에디터 파일 삭제 DB, 파일 삭제 하지 않음(다른 두개의 게시물에 파일 링크를 넣고 어느 한쪽에서 지우면 다른 한쪽의 파일이 없어지는
+ * 문제)
+ *
+ * @param request
+ * @return
+ * @throws IOException
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/editor/deleteFile.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String deleteFile(HttpServletRequest request, HttpServletResponse response)
+ throws EgovBizException, IOException {
+ FileOptions options = new FileOptions();
+
+ String src = request.getParameter("src");
+ String contextPath = request.getContextPath();
+ src = src.replace(contextPath, "");
+ String fileId = src.replace(options.getDownloadUrl(), "");
+ fileId = URLDecoder.decode(fileId, "UTF-8");
+ fileId = CommonUtil.decryptAES256(fileId);
+
+ EditorFileVO fileVO = new EditorFileVO();
+ try {
+ // DB부분
+ fileVO = editorService.selectEditorFile(fileId);
+// editorService.deleteEditorFile(fileId);
+
+ // 파일 삭제하지 않음
+// File.delete(request, fileVO.getFullPath());
+ } catch (EgovBizException e) {
+ logger.error("fail to process EditorController delete_file {}", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ Gson gson = new Gson();
+ return gson.toJson(fileVO);
+ }
+
+ /**
+ * 에디터 이미지 삭제 파일 삭제와 같은 문제로 실제 DB, 파일은 삭제하지 않음
+ *
+ * @param request
+ * @return
+ * @throws IOException
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/editor/deleteImage.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String deleteImage(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ ImageOptions options = new ImageOptions();
+
+ String src = request.getParameter("src");
+ if (src.startsWith("blob:")) {
+ return null;
+ }
+ String fileId = src.replace(options.getDownloadUrl(), "");
+
+ EditorFileVO fileVO = new EditorFileVO();
+ try {
+ // DB부분
+ fileVO = editorService.selectEditorFile(fileId);
+// editorService.deleteEditorFile(fileId);
+
+ // 파일 삭제하지 않음
+// File.delete(request, fileVO.getFullPath());
+ } catch (EgovBizException e) {
+ logger.error("fail to process EditorController deleteImage {}", e);
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ Gson gson = new Gson();
+ return gson.toJson(fileVO);
+ }
+
+ /**
+ * 첨부파일 목록 정보
+ *
+ * @param fileVO fileId형식 : EFI_0000~~,EFI_0000~~
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/editor/fileList.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String fileList(@ModelAttribute EditorFileVO fileVO, HttpServletRequest request) throws EgovBizException {
+ String fileId = fileVO.getFileId();
+ List<EditorFileVO> list = new ArrayList<>();
+ if (StringUtils.isNotBlank(fileId)) {
+ String contextPath = request.getContextPath();
+ for (String tmp : fileId.split(",")) {
+ EditorFileVO vo = editorService.selectEditorFile(tmp);
+ vo.setLink(contextPath + vo.getLink());
+ list.add(vo);
+ }
+ }
+ Gson gson = new Gson();
+ return gson.toJson(list);
+ }
+
+ /**
+ * pdf, tiff, tif 해당 파일에 대한 전체 페이지 수를 가져온다
+ *
+ * @param fileVO
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/editor/fileMaxSizeInfo.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String fileMaxSizeInfo(@ModelAttribute EditorFileVO fileVO) throws EgovBizException {
+ fileVO = editorService.selectEditorFile(fileVO.getFileId());
+ String fileExtSn = fileVO.getFileExtsn();
+ int pageCount = 1;
+ if ("pdf".indexOf(fileExtSn) > -1) {
+ if (fileExtSn.equals("pdf")) {
+ try {
+ java.io.File file = new java.io.File(fileVO.getFullPath());
+ PDDocument pdfDoc = PDDocument.load(file); // Document 생성
+ pageCount = pdfDoc.getPages().getCount();
+ } catch (IOException e) {
+ logger.error("fail to process EditorController fileMaxSizeInfo {}", e);
+ }
+ }
+ }
+
+ Gson gson = new Gson();
+ return gson.toJson(pageCount);
+ }
+
+ /**
+ * 에디터용 동영상 업로드
+ *
+ * @param request
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/editor/uploadVideo.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String uploadVideo(HttpServletRequest request) {
+
+ VideoOptions options = new VideoOptions();
+ // options.setValidation(new VideoValidation ());
+
+ EditorFileVO fileVO = new EditorFileVO();
+ try {
+ fileVO = Video.upload(request, FILE_ROUTE, options);
+ // DB부분
+ String fileId = editorService.insertEditorFile(fileVO);
+ fileVO.setFileId(fileId);
+ } catch (EgovBizException | NoSuchAlgorithmException | IOException e) {
+ logger.error("fail to process EditorController upload_video {}", e);
+ Map<String, Object> responseData = new HashMap<>();
+ responseData.put("error", "fail to process Edtior 동영상 업로드");
+ }
+ // fileVO 전체를 리턴하면 불필요한 데이터가 노출되어 link만 리턴
+ EditorFileVO resultVO = new EditorFileVO();
+ resultVO.setLink(fileVO.getLink());
+ Gson gson = new Gson();
+ return gson.toJson(resultVO);
+ }
+
+ /**
+ * 첨부파일 목록 import용
+ *
+ * @param fileVO
+ * @param displayType simple: 간단히, detail: 상세
+ * @param title
+ * @param divId
+ * @param model
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/editor/fileListView.do")
+ public String fileListView(@ModelAttribute EditorFileVO fileVO, @RequestParam(required = false) String viewType,
+ @RequestParam("authorType") String authorType, Model model, HttpServletRequest request) throws EgovBizException {
+ String fileId = fileVO.getFileId();
+ List<EditorFileVO> list = new ArrayList<>();
+ if (StringUtils.isNotBlank(fileId)) {
+ String contextPath = request.getContextPath();
+ for (String tmp : fileId.split(",")) {
+ EditorFileVO vo = editorService.selectEditorFile(tmp);
+ vo.setLink(contextPath + vo.getLink());
+ list.add(vo);
+ }
+ }
+ model.addAttribute("resultList", list);
+ model.addAttribute("authorType", authorType);
+ if (viewType != null && viewType.equals("image")) {
+ return "egovframework/com/cmm/fms/EgovImgFileList";
+ } else {
+ return "egovframework/com/cmm/fms/EgovFileList";
+ }
+ }
+
+ /**
+ * 파일 업로드
+ *
+ * @param request
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/uploadFile.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String uploadFile(HttpServletRequest request) {
+
+ FileOptions options = new FileOptions();
+ options.setValidation(null);
+
+ EditorFileVO fileVO = new EditorFileVO();
+ AjaxWrapper aw;
+ try {
+ fileVO = File.upload(request, Utils.getAddDateRoute(FILE_ROUTE), options);
+ // DB부분
+ String fileId = editorService.insertEditorFile(fileVO);
+ fileVO.setFileId(fileId);
+
+ fileVO.setFullPath(null);
+ fileVO.setUploadDir(null);
+ fileVO.setSysFileNm(null);
+ aw = new AjaxWrapper(AjaxWrapper.SUCCESS, fileVO);
+ } catch (EgovBizException e) {
+ aw = new AjaxWrapper(AjaxWrapper.FAIL, e.getCause().getMessage());
+ }
+ Gson gson = new Gson();
+ return gson.toJson(aw);
+ }
+
+ /**
+ * 첨부파일 목록 정보
+ *
+ * @param fileVO fileId형식 : EFI_0000~~,EFI_0000~~
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/fileList/selectJson.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String selectFileListJson(@ModelAttribute EditorFileVO fileVO) {
+ AjaxWrapper aw;
+ String fileId = fileVO.getFileId();
+ List<EditorFileVO> list = new ArrayList<>();
+ if (StringUtils.isNotBlank(fileId)) {
+ try {
+ for (String tmp : fileId.split(",")) {
+ EditorFileVO vo = editorService.selectEditorFile(tmp);
+
+ // 불필요 파일 null 처리
+ vo.setFullPath(null);
+ vo.setUploadDir(null);
+ vo.setSysFileNm(null);
+ list.add(vo);
+ }
+ aw = new AjaxWrapper(AjaxWrapper.SUCCESS, list);
+ } catch (EgovBizException e) {
+ aw = new AjaxWrapper(AjaxWrapper.FAIL, e.getCause().getMessage());
+ }
+ } else {
+ aw = new AjaxWrapper();
+ }
+
+ Gson gson = new Gson();
+ return gson.toJson(aw);
+ }
+
+ /**
+ * 파일 업로드 팝업
+ *
+ * @Author : 임종호
+ * @Date : 2021. 8. 11.
+ * @Method Name : uploadFilePopup
+ * @return : String
+ */
+ @RequestMapping(value = "/uploadFile/popup.do")
+ public String uploadFilePopup(@ModelAttribute EditorFileVO fileVO, Model model) throws EgovBizException {
+ return "ctm/cmm/file/uploadFilePopup";
+ }
+
+}
Property changes on: base3.10/src/main/java/froala/editor/web/EditorController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/web/ViewController.java
===================================================================
--- base3.10/src/main/java/froala/editor/web/ViewController.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/web/ViewController.java (revision 7)
@@ -0,0 +1,265 @@
+package froala.editor.web;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.rendering.PDFRenderer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import froala.editor.EditorFileVO;
+import froala.editor.File;
+import froala.editor.service.EditorService;
+import froala.editor.service.ParallelExcutorService;
+import froala.editor.utils.CommonUtil;
+import froala.editor.utils.FileUtil;
+import froala.editor.utils.view.DownloadView;
+import froala.editor.utils.view.ImageView;
+import froala.editor.utils.view.VideoView;
+
+/**
+ * 각종 뷰 컨트롤러
+ */
+@Controller
+public class ViewController {
+
+ private static final Logger logger = LoggerFactory.getLogger(ViewController.class);
+
+ private static final String tempFileRoute = EgovProperties.getProperty("editor.fileTempRoute");
+
+ /** EgovSampleService */
+ @Resource(name = "editorService")
+ private EditorService editorService;
+
+ /**
+ * 이미지를 호출한다.
+ *
+ * @param request
+ * @param path
+ * @param model
+ * @return
+ */
+ @RequestMapping(value = "/imageview.do", method = RequestMethod.GET)
+ public ImageView imageView(HttpServletRequest request, @RequestParam String fileId, Model model) throws EgovBizException {
+ String deStr = CommonUtil.decryptAES256(fileId);
+ EditorFileVO fileVO = editorService.selectEditorFile(deStr);
+
+ model.addAttribute("path", fileVO.getFullPath());
+ model.addAttribute("origin_file_nm", fileVO.getOriginFileNm());
+ return new ImageView();
+ }
+
+ /**
+ * 파일을 다운로드 한다.
+ *
+ * @param request
+ * @param path
+ * @param origin_file_nm
+ * @param model
+ * @return
+ */
+ @RequestMapping(value = "/download.do", method = RequestMethod.GET)
+ public DownloadView fileDownload(HttpServletRequest request, @RequestParam String fileId, Model model) throws EgovBizException {
+ // CommonUtil.viewRequestParams(request);
+ String deStr = CommonUtil.decryptAES256(fileId);
+ EditorFileVO fileVO = editorService.selectEditorFile(deStr);
+
+ model.addAttribute("path", fileVO.getFullPath());
+ model.addAttribute("origin_file_nm", fileVO.getOriginFileNm());
+ return new DownloadView();
+ }
+
+ /**
+ * 멀티 파일을 zip으로 압축 후 다운로드 한다.
+ *
+ * @Author : 임종호
+ * @Date : 2020. 8. 18.
+ * @Method Name : multiDownload
+ * @return : void
+ */
+ @RequestMapping(value = "/multiDownload.do", method = RequestMethod.GET)
+ public void multiDownload(@RequestParam String fileId, HttpServletRequest request, HttpServletResponse response) throws EgovBizException {
+ List<EditorFileVO> list = new ArrayList<>();
+ if (fileId != null && fileId != "") {
+ for (String tmp : fileId.split(",")) {
+ EditorFileVO fileVO = editorService.selectEditorFile(tmp);
+ if (fileVO != null) {
+ list.add(fileVO);
+ }
+ }
+ ;
+ }
+ // 압축파일 생성 후 다운로드
+ // fileTempRoute - 임시파일 경로
+ File.zipDown(request, response, list, tempFileRoute);
+ }
+
+ /**
+ * pdf, tiff, tif에 대한 이미지를 렌더링 하여 호출한다.
+ *
+ * @param request
+ * @param fileId
+ * @param pageSn
+ * @param model
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/multiImageview.do", method = RequestMethod.GET)
+ public ImageView tmpImageView(HttpServletRequest request, @RequestParam String fileId, @RequestParam Integer pageSn, @RequestParam(required = false) Boolean print, Model model) throws EgovBizException {
+ EditorFileVO fileVO = editorService.selectEditorFile(fileId);
+ String fileExtSn = fileVO.getFileExtsn();
+ if ("pdf".indexOf(fileExtSn) > -1) {
+ if (fileExtSn.equals("pdf")) {
+ try {
+ String returnFileRoute = tempFileRoute + fileVO.getSysFileNm();
+ String returnFilePath = returnFileRoute + "/" + fileVO.getSysFileNm() + '_' + pageSn + ".png";
+ // 기존파일생성 확인
+ java.io.File existCheck = new java.io.File(returnFilePath);
+
+ // 기존파일이 없을 시 PDF를 PNG로 변환한다.
+ if (!existCheck.exists()) {
+ Files.createDirectories(Paths.get(returnFileRoute)); // PDF 2 Img에서는 경로가 없는 경우 이미지 파일이 생성이 안되기 때문에 디렉토리를 만들어준다.
+
+ java.io.File file = new java.io.File(fileVO.getFullPath());
+ PDDocument pdfDoc = PDDocument.load(file); // Document 생성
+ int pageCount = pdfDoc.getNumberOfPages();
+
+ PDFRenderer pdfRenderer = new PDFRenderer(pdfDoc);
+
+ // 첫페이지 생성, 이미지 리사이즈 이후 저장
+ FileUtil.pdfImageWrite(pdfRenderer, pageSn - 1, returnFilePath);
+
+ // 쓰레드 각 service마다 3개씩 처리
+ ParallelExcutorService service = new ParallelExcutorService();
+ service.pdfSubmit("job1", pageSn, 3, pageCount, pdfRenderer, returnFileRoute + "/" + fileVO.getSysFileNm());
+ service.pdfSubmit("job2", pageSn + 1, 3, pageCount, pdfRenderer, returnFileRoute + "/" + fileVO.getSysFileNm());
+ service.pdfSubmit("job3", pageSn + 2, 3, pageCount, pdfRenderer, returnFileRoute + "/" + fileVO.getSysFileNm());
+ service.close();
+ // pdfDoc.close(); // 모두 사용한 PDF 문서는 닫는다.
+ }
+ model.addAttribute("path", returnFilePath);
+ } catch (IOException e) {
+ logger.error("fail to process PDF Render {}", e);
+ }
+ }
+ } else {
+ String imgFileName = fileVO.getFullPath();
+ // BufferedImage image = ImageIO.read(new java.io.File(fileVO.getFullPath()));
+ // int width = image.getWidth();
+ // int height = image.getHeight();
+ // if (print != null && print && width > height) {
+ // // 프린트용 이미지 크기가 세로보다 가로가 클 경우 회전
+ // imgFileName = FileUtil.transRotate(90, image, imgFileName);
+ // }
+ model.addAttribute("path", imgFileName);
+ }
+ return new ImageView();
+ }
+
+ /**
+ * 임시파일을 다운로드 한다.
+ *
+ * @param request
+ * @param fileId
+ * @param model
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/tempDownload.do", method = RequestMethod.GET)
+ public DownloadView tempFileDownload(HttpServletRequest request, @RequestParam String fileId, Model model) throws EgovBizException {
+ // CommonUtil.viewRequestParams(request);
+ String deStr = CommonUtil.decryptAES256(fileId);
+ EditorFileVO fileVO = editorService.selectTmpFile(deStr);
+
+ model.addAttribute("path", fileVO.getFullPath());
+ model.addAttribute("origin_file_nm", fileVO.getOriginFileNm());
+ model.addAttribute("mime", "application/octet-stream");
+ return new DownloadView();
+ }
+
+ /**
+ * 동영상 스트리밍
+ *
+ * @param fileId
+ * @param model
+ * @return
+ * @throws EgovBizException
+ */
+ @RequestMapping(value = "/streaming.do", method = RequestMethod.GET)
+ public VideoView streaming(@RequestParam("fileId") String fileId, Model model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException {
+ String deStr = CommonUtil.decryptAES256(fileId);
+ EditorFileVO fileVO = editorService.selectEditorFile(deStr);
+ request.setAttribute("path", fileVO.getFullPath());
+ request.setAttribute("originFileNm", fileVO.getOriginFileNm());
+ return new VideoView();
+ }
+
+ /**
+ * 이미지파일 인쇄
+ *
+ * @Author : 임종호
+ * @Date : 2020. 6. 15.
+ * @Method Name : print
+ * @return : String
+ * @throws IOException
+ */
+ @RequestMapping(value = "/imagePrint/{paperSize}.do")
+ public String imagePrint(ModelMap model, @PathVariable("paperSize") String paperSize, @RequestParam(value = "fileId", required = false) String fileId, @ModelAttribute EditorFileVO editorFileVO) throws EgovBizException, IOException {
+ // 리턴 메시지
+ String resultMsg = "";
+
+ // 파일 데이터 세팅
+ List<EditorFileVO> list = new ArrayList<EditorFileVO>();
+ for (EditorFileVO tmp : editorFileVO.getFileList()) {
+ EditorFileVO resultVO = editorService.selectEditorFile(tmp.getFileId());
+ String fileExtSn = resultVO.getFileExtsn().toLowerCase();
+ if ("pdf,png,jpg,jpeg".indexOf(fileExtSn) > -1) {
+ // 페이지수(pdf,tif,tiff)
+ if (fileExtSn.equals("pdf")) {
+ java.io.File file = new java.io.File(resultVO.getFullPath());
+ PDDocument pdfDoc = PDDocument.load(file); // Document 생성
+ resultVO.setPageCnt(pdfDoc.getPages().getCount());
+ } else {
+ resultVO.setPageCnt(1);
+ }
+ list.add(resultVO);
+ } else {
+ resultMsg += resultVO.getOriginFileNm() + " ";
+ }
+ }
+ ;
+
+ if (!resultMsg.equals("")) {
+ resultMsg += "파일은 인쇄 할 수 없습니다.";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ model.addAttribute("resultList", list);
+
+ Map<String, Object> SizeVO = new HashMap<>();
+ SizeVO.put("paperSize", paperSize);
+
+ // 용지 크기 세팅
+ model.addAttribute("SizeVO", SizeVO);
+ return "egovframework/custom/com/print";
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/web/ViewController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/Image.java
===================================================================
--- base3.10/src/main/java/froala/editor/Image.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/Image.java (revision 7)
@@ -0,0 +1,163 @@
+package froala.editor;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang.ArrayUtils;
+
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import froala.editor.image.ImageOptions;
+import froala.editor.image.ImageValidation;
+
+/**
+ * Image functionality.
+ *
+ * @author florin@froala.com
+ */
+public final class Image {
+
+ /**
+ * Private constructor.
+ */
+ private Image() {
+
+ }
+
+ /**
+ * File default options.
+ */
+ public static final ImageOptions defaultOptions = new ImageOptions();
+
+ /**
+ * Uploads an image to disk.
+ *
+ * @param req
+ * Servlet HTTP request.
+ * @param fileRoute
+ * Route Server route where the file will be uploaded. This route
+ * must be public to be accesed by the editor.
+ * @return Object with link.
+ * @throws EgovBizException
+ */
+ public static EditorFileVO upload(HttpServletRequest req, String fileRoute) throws EgovBizException {
+
+ return upload(req, fileRoute, defaultOptions);
+ }
+
+ /**
+ * Uploads an image to disk.
+ *
+ * @param req
+ * Servlet HTTP request.
+ * @param fileRoute
+ * Server route where the file will be uploaded. This route must
+ * be public to be accesed by the editor.
+ * @param options
+ * Image options. Defaults to {@link #defaultOptions} which has
+ * </br>
+ * Fieldname: "file" </br>
+ * Validation:
+ * <ul>
+ * <li>Extensions: "gif", "jpeg", "jpg", "png", "svg",
+ * "blob"</li>
+ * <li>Mime Types: "image/gif", "image/jpeg", "image/pjpeg",
+ * "image/x-png", "image/png", "image/svg+xml"</li>
+ * </ul>
+ *
+ * @return Object with link.
+ * @throws EgovBizException
+ */
+ public static EditorFileVO upload(HttpServletRequest req, String fileRoute, ImageOptions options)
+ throws EgovBizException {
+
+ if (options == null) {
+ options = defaultOptions;
+ }
+
+ return File.upload(req, fileRoute, options);
+ }
+
+ /**
+ * Delete an image from disk.
+ *
+ * @param req
+ * Used to get the servlet context.
+ * @param src
+ * Server file path.
+ */
+ public static void delete(HttpServletRequest req, String src) {
+
+ File.delete(req, src);
+ }
+
+ /**
+ * List images from disk.
+ *
+ * @param req
+ * Used to get the servlet context.
+ * @param folderPath
+ * Server folder path.
+ * @return Array of image objects.
+ * @throws EgovBizException
+ */
+ public static ArrayList<Object> list(HttpServletRequest req, String folderPath) throws EgovBizException {
+ return list(req, folderPath, folderPath);
+ }
+
+ /**
+ * List images from disk.
+ *
+ * @param req
+ * Used to get the servlet context.
+ * @param folderPath
+ * Server folder path.
+ * @param thumbPath
+ * Optional. Server thumb path.
+ * @return Array of image objects.
+ * @throws EgovBizException
+ */
+ public static ArrayList<Object> list(HttpServletRequest req, String folderPath, String thumbPath) throws EgovBizException {
+
+ // Use thumbPath as folderPath.
+ if (thumbPath == null) {
+ thumbPath = folderPath;
+ }
+
+ // Array of image objects to return.
+ ArrayList<Object> response = new ArrayList<Object>();
+
+ String absolutePath = File.getAbsoluteServerPath(req, folderPath);
+
+ String[] imageMimetypes = ImageValidation.allowedImageMimeTypesDefault;
+
+ java.io.File folder = new java.io.File(absolutePath);
+
+ // Add images.
+// for (java.io.File fileEntry : folder.listFiles()) {
+// if (fileEntry.isFile()) {
+//
+// String filename = fileEntry.getName();
+//
+// String mimeType = req.getServletContext().getMimeType(folderPath + filename);
+// if (mimeType == null) {
+// continue;
+// }
+//
+// if (ArrayUtils.contains(imageMimetypes, mimeType)) {
+//
+// Map<Object, Object> imageObj = new HashMap<Object, Object>();
+// imageObj.put("url", folderPath + filename);
+// imageObj.put("thumb", thumbPath + filename);
+// imageObj.put("name", filename);
+// response.add(imageObj);
+// }
+// }
+// }
+
+ return response;
+ }
+
+}
Property changes on: base3.10/src/main/java/froala/editor/Image.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/Video.java
===================================================================
--- base3.10/src/main/java/froala/editor/Video.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/Video.java (revision 7)
@@ -0,0 +1,161 @@
+package froala.editor;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.NoSuchAlgorithmException;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import froala.editor.video.VideoOptions;
+
+/**
+ * Video functionality.
+ *
+ * @author florin@froala.com
+ */
+public final class Video {
+ public static final String multipartContentType = "multipart/form-data";
+
+ /**
+ * Private constructor.
+ */
+ private Video() {
+
+ }
+
+ /**
+ * File default options.
+ */
+ public static final VideoOptions defaultOptions = new VideoOptions ();
+
+ /**
+ * Uploads a video to disk.
+ *
+ * @param req
+ * Servlet HTTP request.
+ * @param fileRoute
+ * Route Server route where the file will be uploaded. This route
+ * must be public to be accesed by the editor.
+ * @return Object with link.
+ * @throws EgovBizException
+ * @throws IOException
+ * @throws NoSuchAlgorithmException
+ */
+ public static EditorFileVO upload (HttpServletRequest req, String fileRoute) throws EgovBizException, NoSuchAlgorithmException, IOException {
+ return upload (req, fileRoute, defaultOptions);
+ }
+
+ /**
+ * Uploads a video to disk.
+ *
+ * @param req
+ * Servlet HTTP request.
+ * @param fileRoute
+ * Server route where the file will be uploaded. This route must be
+ * public to be accesed by the editor.
+ * @param options
+ * Video options. Defaults to {@link #defaultOptions} which has
+ * </br>
+ * Fieldname: "file" </br>
+ * Validation:
+ * <ul>
+ * <li>Extensions: ".mp4", ".webm", ".ogg"</li>
+ * <li>Mime Types: "video/mp4", "video/webm", "video/ogg"</li>
+ * </ul>
+ * @return Object with link.
+ * @throws NoSuchAlgorithmException
+ * @throws EgovBizException
+ * @throws IOException
+ */
+ public static EditorFileVO upload (HttpServletRequest req, String fileRoute, VideoOptions options) throws EgovBizException, NoSuchAlgorithmException, IOException {
+
+ if (options == null) {
+ options = defaultOptions;
+ }
+
+ if (req.getContentType () == null || req.getContentType ().toLowerCase ().indexOf (multipartContentType) == -1) {
+
+ throw new EgovBizException ("Invalid contentType. It must be " + multipartContentType);
+ }
+
+ MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) req;
+ MultipartFile file = multipartHttpServletRequest.getFile (options.getFieldname ());
+
+ // servlet 3.0
+ //Part filePart = req.getPart(options.getFieldname());
+
+ if (file == null) {
+ throw new EgovBizException ("Fieldname is not correct. It must be: " + options.getFieldname ());
+ }
+
+ // Generate random name.
+ String file_extsn = FilenameUtils.getExtension (Utils.getFileName (file));
+ String extension = file_extsn;
+ extension = (extension != null && extension != "") ? "." + extension : extension;
+ String name = Utils.generateUniqueString () + extension;
+
+ String linkName = fileRoute + name;
+
+ InputStream fileContent = file.getInputStream ();
+ String absoluteServerPath = getAbsoluteServerPath (req, linkName);
+ // String absoluteServerPath = linkName;
+ java.io.File targetFile = null;
+ if (absoluteServerPath != null && !absoluteServerPath.equals("")) {
+ targetFile = new java.io.File(absoluteServerPath);
+ FileUtils.copyInputStreamToFile (fileContent, targetFile);
+ } else {
+ return null;
+ }
+
+ if (options.getValidation () != null && !options.getValidation ().check (absoluteServerPath, file.getContentType ())) {
+
+ delete (req, linkName);
+ throw new EgovBizException ("File does not meet the validation.");
+ }
+
+ // 정보 셋팅
+ EditorFileVO fileVO = new EditorFileVO ();
+ fileVO.setLink (options.getStreamingUrl ());
+ fileVO.setFullPath (linkName);
+ fileVO.setFileExtsn (file_extsn);
+ fileVO.setOriginFileNm (file.getOriginalFilename ());
+ fileVO.setSysFileNm (name);
+ fileVO.setUploadDir (fileRoute);
+ fileVO.setFileSize (file.getSize ());
+ fileVO.setMime (file.getContentType ());
+ return fileVO;
+ }
+
+ /**
+ * Get absolute server path.
+ *
+ * @param req
+ * Used to get the servlet context.
+ * @param relativePath
+ * Relative path.
+ * @return Absolute path.
+ */
+ public static String getAbsoluteServerPath (HttpServletRequest req, String relativePath) {
+ // return req.getServletContext().getRealPath(relativePath);
+ return relativePath;
+ }
+
+ /**
+ * Delete a video from disk.
+ *
+ * @param req
+ * Used to get the servlet context.
+ * @param src
+ * Server file path.
+ */
+ public static void delete (HttpServletRequest req, String src) {
+ File.delete (req, src);
+ }
+
+}
Property changes on: base3.10/src/main/java/froala/editor/Video.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/service/impl/EditorServiceImpl.java
===================================================================
--- base3.10/src/main/java/froala/editor/service/impl/EditorServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/service/impl/EditorServiceImpl.java (revision 7)
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2008-2009 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package froala.editor.service.impl;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import froala.editor.EditorFileVO;
+import froala.editor.service.EditorService;
+import froala.editor.utils.CommonUtil;
+
+/**
+ * 파일 ServiceImpl
+ * @author 임종호
+ *
+ */
+@Service("editorService")
+public class EditorServiceImpl extends EgovAbstractServiceImpl implements EditorService {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EditorServiceImpl.class);
+
+ @Resource(name = "EditorDAO")
+ private EditorDAO editorDao;
+
+ /** ID Generation */
+ @Resource(name = "editorFileIdGnrService")
+ private EgovIdGnrService egovIdGnrService;
+
+
+ @Override
+ public String insertEditorFile(EditorFileVO paramVO) throws EgovBizException {
+ try {
+ paramVO.setFileId(egovIdGnrService.getNextStringId());
+ } catch (FdlException e) {
+ LOGGER.error("insertEditorFile egovIdGnrService.getNextStringId() ERROR!");
+ return null;
+ }
+ String link = paramVO.getLink();
+ String fileId = paramVO.getFileId();
+ String enStr = CommonUtil.encryptAES256(fileId);
+ paramVO.setLink(link.concat(enStr));
+
+ editorDao.insertEditorFile(paramVO);
+ return paramVO.getFileId();
+ }
+
+ @Override
+ public EditorFileVO selectEditorFile(String fileId) throws EgovBizException {
+ return editorDao.selectEditorFile(fileId);
+ }
+
+ @Override
+ public void deleteEditorFile(String fileId) throws EgovBizException {
+ editorDao.deleteEditorFile(fileId);
+ }
+
+ @Override
+ public String insertTmpFile(EditorFileVO paramVO) throws EgovBizException {
+ editorDao.insertTmpFile(paramVO);
+
+ String link = paramVO.getLink();
+ String fileId = paramVO.getFileId();
+ paramVO.setLink(link.concat(fileId));
+ editorDao.updateTmpFile(paramVO);
+ return paramVO.getFileId();
+ }
+
+ @Override
+ public EditorFileVO selectTmpFile(String fileId) throws EgovBizException {
+ return editorDao.selectTmpFile(fileId);
+ }
+
+ @Override
+ public void deleteTmpFile(String fileId) throws EgovBizException {
+ editorDao.deleteTmpFile(fileId);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/froala/editor/service/impl/EditorServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/service/impl/EditorDAO.java
===================================================================
--- base3.10/src/main/java/froala/editor/service/impl/EditorDAO.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/service/impl/EditorDAO.java (revision 7)
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2008-2009 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package froala.editor.service.impl;
+
+import org.springframework.dao.DataAccessException;
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import froala.editor.EditorFileVO;
+
+/**
+ * 파일 DAO
+ * @author 임종호
+ *
+ */
+@Repository("EditorDAO")
+public class EditorDAO extends EgovComAbstractDAO {
+
+ /**
+ * 에디터파일 정보를 등록한다.
+ * @param paramVO
+ * @throws DataAccessException
+ */
+ public void insertEditorFile(EditorFileVO paramVO) throws DataAccessException {
+ insert("Editor.insertEditorFile", paramVO);
+ }
+
+ /**
+ * 에디터파일 정보를 조회한다.
+ * @param fileId
+ * @return EditorFileVO 에디터파일 정보
+ * @throws DataAccessException
+ */
+ public EditorFileVO selectEditorFile(String fileId) throws DataAccessException {
+ return (EditorFileVO) selectOne("Editor.selectEditorFile", fileId);
+ }
+
+ /**
+ * 에디터파일 정보를 수정한다.
+ * @param paramVO
+ * @throws DataAccessException
+ */
+ public void updateEditorFile(EditorFileVO paramVO) throws DataAccessException {
+ update("Editor.updateEditorFile", paramVO);
+ }
+
+ /**
+ * 에디터파일 정보를 삭제한다.
+ * @param fileId
+ * @throws DataAccessException
+ */
+ public void deleteEditorFile(String fileId) throws DataAccessException {
+ delete("Editor.deleteEditorFile", fileId);
+ }
+
+ /**
+ * 임시파일 정보를 등록한다.
+ * @param paramVO
+ * @throws DataAccessException
+ */
+ public void insertTmpFile(EditorFileVO paramVO) throws DataAccessException {
+ insert("Editor.insertTmpFile", paramVO);
+ }
+
+ /**
+ * 임시파일 정보를 조회한다.
+ * @param fileId
+ * @return TmpFileVO 임시파일 정보
+ * @throws DataAccessException
+ */
+ public EditorFileVO selectTmpFile(String fileId) throws DataAccessException {
+ return (EditorFileVO) selectOne("Editor.selectTmpFile", fileId);
+ }
+
+ /**
+ * 임시파일 정보를 수정한다.
+ * @param paramVO
+ * @throws DataAccessException
+ */
+ public void updateTmpFile(EditorFileVO paramVO) throws DataAccessException {
+ update("Editor.updateTmpFile", paramVO);
+ }
+
+ /**
+ * 임시파일 정보를 삭제한다.
+ * @param fileId
+ * @throws DataAccessException
+ */
+ public void deleteTmpFile(String fileId) throws DataAccessException {
+ delete("Editor.deleteTmpFile", fileId);
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/service/impl/EditorDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/service/ParallelExcutorService.java
===================================================================
--- base3.10/src/main/java/froala/editor/service/ParallelExcutorService.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/service/ParallelExcutorService.java (revision 7)
@@ -0,0 +1,87 @@
+package froala.editor.service;
+
+import java.util.List;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.apache.pdfbox.rendering.PDFRenderer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import froala.editor.utils.FileUtil;
+
+/**
+ * 다중 쓰레드 파일 업로드
+ *
+ * @since 2020. 8. 29.
+ * @author 임종호
+ *
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2020. 8. 29. 임종호 : 최초작성
+ * </PRE>
+ */
+public class ParallelExcutorService {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ParallelExcutorService.class);
+// private final int maxCore = Runtime.getRuntime().availableProcessors();
+// private final ExecutorService executor = Executors.newFixedThreadPool(maxCore);
+ private final ExecutorService executor = Executors.newCachedThreadPool();
+ private final BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
+
+ public ParallelExcutorService() {
+ }
+
+ /**
+ * start : 시작번호, repeat : 반복횟수, max : pdf파일 최대번호, pdfRenderer : PDFBox 객체,
+ * returnFileRoute : 이미지 파일저장경로
+ *
+ * @Author : 임종호
+ * @Date : 2020. 8. 29.
+ * @Method Name : submit
+ * @return : void
+ */
+ public void pdfSubmit(String job, int start, int repeat, int max, PDFRenderer pdfRenderer, String returnFileRoute) {
+ executor.submit(() -> {
+ for (int i = start; i < repeat * 3 + start;) {
+ int fileIndex = i + 1;
+ if (max < fileIndex) {
+ break;
+ }
+ String imgFileName = returnFileRoute + '_' + fileIndex + ".png";
+ java.io.File existCheck2 = new java.io.File(imgFileName);
+ if (!existCheck2.exists()) {
+ // 순회하며 이미지로 변환 처리
+ FileUtil.pdfImageWrite(pdfRenderer, i, imgFileName);
+ }
+ i += repeat;
+ }
+ String threadName = Thread.currentThread().getName();
+ String result = job + ", " + threadName;
+ try {
+ queue.put(result);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ });
+ }
+
+ public String take() {
+ try {
+ return queue.take();
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ throw new IllegalStateException(e);
+ }
+ }
+
+ public void close() {
+ List<Runnable> unfinishedTasks = executor.shutdownNow();
+ if (!unfinishedTasks.isEmpty()) {
+ LOGGER.error("Not all tasks finished before calling close: " + unfinishedTasks.size());
+ }
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/froala/editor/service/ParallelExcutorService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/service/EditorService.java
===================================================================
--- base3.10/src/main/java/froala/editor/service/EditorService.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/service/EditorService.java (revision 7)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2008-2009 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package froala.editor.service;
+
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import froala.editor.EditorFileVO;
+
+/**
+ * 파일 Service
+ * @author 임종호
+ *
+ */
+public interface EditorService {
+ String insertEditorFile(EditorFileVO paramVO) throws EgovBizException;
+
+ EditorFileVO selectEditorFile(String fileId) throws EgovBizException;
+
+ void deleteEditorFile(String fileId) throws EgovBizException;
+
+ String insertTmpFile(EditorFileVO paramVO) throws EgovBizException;
+
+ EditorFileVO selectTmpFile(String fileId) throws EgovBizException;
+
+ void deleteTmpFile(String fileId) throws EgovBizException;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/froala/editor/service/EditorService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/CustomValidation.java
===================================================================
--- base3.10/src/main/java/froala/editor/CustomValidation.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/CustomValidation.java (revision 7)
@@ -0,0 +1,11 @@
+package froala.editor;
+
+/**
+ * Provides custom validation.
+ *
+ * @author florin@froala.com
+ */
+public interface CustomValidation {
+
+ boolean validate(String filePath, String mimeType);
+}
Property changes on: base3.10/src/main/java/froala/editor/CustomValidation.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/EditorVO.java
===================================================================
--- base3.10/src/main/java/froala/editor/EditorVO.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/EditorVO.java (revision 7)
@@ -0,0 +1,36 @@
+package froala.editor;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+/**
+ * 에디터 VO
+ * @author 임종호
+ *
+ */
+public class EditorVO {
+ private Long id;
+ private String contents;
+
+ public Long getId() {
+ return id;
+ }
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public String getContents() {
+ return StringEscapeUtils.unescapeHtml(contents);
+ }
+ public void setContents(String contents) {
+ this.contents = contents;
+ }
+
+ public Map<String, Object> convertMap() {
+ Map<String, Object> rMap = new HashMap<>();
+ rMap.put("id", id);
+ rMap.put("contents", contents);
+ return rMap;
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/EditorVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/image/ImageValidation.java
===================================================================
--- base3.10/src/main/java/froala/editor/image/ImageValidation.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/image/ImageValidation.java (revision 7)
@@ -0,0 +1,65 @@
+package froala.editor.image;
+
+import froala.editor.CustomValidation;
+import froala.editor.file.FileValidation;
+
+/**
+ * Image Validation.
+ *
+ * @author florin@froala.com
+ */
+public class ImageValidation extends FileValidation {
+
+ /**
+ * Allowed image validation default extensions.
+ */
+ public static final String[] allowedImageExtsDefault = new String[] { "gif", "jpeg", "jpg", "png", "svg", "blob", "tif", "tiff" };
+
+ /**
+ * Allowed image validation default mimetypes.
+ */
+ public static final String[] allowedImageMimeTypesDefault = new String[] { "image/gif", "image/jpeg", "image/pjpeg",
+ "image/x-png", "image/png", "image/svg+xml", "image/tiff" };
+
+ /**
+ * Init default image validation settings.
+ */
+ @Override
+ protected void initDefault() {
+
+ allowedExts = allowedImageExtsDefault;
+ allowedMimeTypes = allowedImageMimeTypesDefault;
+ }
+
+ /**
+ * Constructor. Validates default images with: - allowed file extensions:
+ * "gif", "jpeg", "jpg", "png", "svg", "blob" - allowed mime types:
+ * "image/gif", "image/jpeg", "image/pjpeg", "image/x-png", "image/png",
+ * "image/svg+xml"
+ */
+ public ImageValidation() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param allowedExts
+ * Allowed validation image extensions.
+ * @param allowedMimeTypes
+ * Allowed validation image mimetypes.
+ */
+ public ImageValidation(String[] allowedExts, String[] allowedMimeTypes) {
+ super(allowedExts, allowedMimeTypes);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param customValidation
+ * Custom validation.
+ */
+ public ImageValidation(CustomValidation customValidation) {
+ super(customValidation);
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/image/ImageValidation.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/image/ImageOptions.java
===================================================================
--- base3.10/src/main/java/froala/editor/image/ImageOptions.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/image/ImageOptions.java (revision 7)
@@ -0,0 +1,108 @@
+package froala.editor.image;
+
+import egovframework.com.cmm.service.EgovProperties;
+import froala.editor.file.FileOptions;
+
+/**
+ * Image Options used for uploading.
+ *
+ * @author florin@froala.com
+ */
+public class ImageOptions extends FileOptions {
+
+ public static final String downloadDefault = "/imageview.do?fileId=";
+ /**
+ * Init default image upload settings.
+ */
+ @Override
+ protected void initDefault() {
+ setValidation(new ImageValidation());
+ setDownloadUrl(downloadDefault);
+ }
+
+ /**
+ * Image resize options.
+ *
+ * @author florin@froala.com
+ *
+ */
+ public class ResizeOptions {
+
+ private int newWidth;
+
+ public int getNewWidth() {
+ return newWidth;
+ }
+
+ public void setNewWidth(int newWidth) {
+ this.newWidth = newWidth;
+ }
+
+ private int newHeight;
+
+ public int getNewHeight() {
+ return newHeight;
+ }
+
+ public void setNewHeight(int newHeight) {
+ this.newHeight = newHeight;
+ }
+
+ private boolean keepAspectRatio;
+
+ public boolean getKeepAspectRatio() {
+ return keepAspectRatio;
+ }
+
+ public void setKeepAspectRatio(boolean keepAspectRatio) {
+ this.keepAspectRatio = keepAspectRatio;
+ }
+ }
+
+ /**
+ * Options for resizing an image.
+ */
+ private ResizeOptions resizeOptions;
+
+ /**
+ * Get the options for resizing an image.
+ *
+ * @return
+ */
+ public ResizeOptions getResizeOptions() {
+ return resizeOptions;
+ }
+
+ /**
+ * Set the options for resizing an image.
+ *
+ * @param resizeOptions
+ */
+ public void setResizeOptions(ResizeOptions resizeOptions) {
+ this.resizeOptions = resizeOptions;
+ }
+
+ /**
+ * Set the options for resizing an image.
+ *
+ * @param newWidth
+ * @param newHeight
+ * @param keepAspectRatio
+ */
+ public void setResize(int newWidth, int newHeight, boolean keepAspectRatio) {
+
+ this.resizeOptions = new ResizeOptions();
+ resizeOptions.setNewWidth(newWidth);
+ resizeOptions.setNewHeight(newHeight);
+ resizeOptions.setKeepAspectRatio(keepAspectRatio);
+ }
+
+ /**
+ * Constructor. Uses default options: - fieldname "file" - validation
+ * default ImageValidation. To change them, use getters and setters.
+ */
+ public ImageOptions() {
+ super();
+ }
+
+}
Property changes on: base3.10/src/main/java/froala/editor/image/ImageOptions.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/video/Range.java
===================================================================
--- base3.10/src/main/java/froala/editor/video/Range.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/video/Range.java (revision 7)
@@ -0,0 +1,72 @@
+package froala.editor.video;
+
+/**
+ * 부분 전송 VO
+ * @since 2021. 6. 18.
+ * @author 임종호
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2021. 6. 18. 임종호 : 최초작성
+ * </PRE>
+ */
+public class Range {
+ private long start;
+ private long end;
+ private long total;
+ private long partSize;
+ private boolean isPart = false;
+
+ public Range(Long start, Long end, Long total) {
+ super();
+ this.start = start;
+ this.end = end;
+ this.total = total;
+ }
+
+ public Range(Long start, Long end) {
+ super();
+ this.start = start;
+ this.end = end;
+ }
+
+ public long getStart() {
+ return start;
+ }
+
+ public void setStart(long start) {
+ this.start = start;
+ }
+
+ public long getEnd() {
+ return end;
+ }
+
+ public void setEnd(long end) {
+ this.end = end;
+ }
+
+ public long getTotal() {
+ return total;
+ }
+
+ public void setTotal(long total) {
+ this.total = total;
+ }
+
+ public long getPartSize() {
+ return partSize;
+ }
+
+ public void setPartSize(long partSize) {
+ this.partSize = partSize;
+ }
+
+ public boolean isPart() {
+ return isPart;
+ }
+
+ public void setPart(boolean isPart) {
+ this.isPart = isPart;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/froala/editor/video/Range.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/video/StreamingUtil.java
===================================================================
--- base3.10/src/main/java/froala/editor/video/StreamingUtil.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/video/StreamingUtil.java (revision 7)
@@ -0,0 +1,63 @@
+package froala.editor.video;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.RandomAccessFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import froala.editor.utils.view.VideoView;
+
+/**
+ * 동영상 스트리밍 유틸
+ * @since 2021. 6. 18.
+ * @author 임종호
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2021. 6. 18. 임종호 : 최초작성
+ * </PRE>
+ */
+public class StreamingUtil {
+ private final static Logger LOGGER = LoggerFactory.getLogger(VideoView.class);
+
+ public void streaming(File file, HttpServletRequest request, HttpServletResponse response, OutputStream out)
+ throws IOException {
+ StreamingResponse streamingResponse = new StreamingResponse();
+ Range range = streamingResponse.write(file, request, response);
+ copyStreaming(file, out, range);
+ }
+
+ private void copyStreaming(File file, OutputStream output, Range range) {
+ RandomAccessFile randomFile = null;
+ long partSize = range.getPartSize();
+ try {
+ randomFile = new RandomAccessFile(file, "r");
+ randomFile.seek(range.getStart());
+ byte[] buf = new byte[StreamingResponse.DEFAULT_BUFFER_SIZE];
+ do {
+ int block = 0;
+ if (partSize > StreamingResponse.DEFAULT_BUFFER_SIZE) {
+ block = StreamingResponse.DEFAULT_BUFFER_SIZE;
+ } else {
+ block = (int) partSize;
+ }
+ int len = randomFile.read(buf, 0, block);
+ output.write(buf, 0, len);
+ output.flush();
+ partSize -= block;
+ } while (partSize > 0);
+ } catch (IOException e) {
+ LOGGER.error("User canceled streaming request {}", e.getCause().getMessage());
+ } finally {
+ IOUtils.closeQuietly(randomFile);
+ }
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/video/StreamingUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/video/VideoValidation.java
===================================================================
--- base3.10/src/main/java/froala/editor/video/VideoValidation.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/video/VideoValidation.java (revision 7)
@@ -0,0 +1,53 @@
+package froala.editor.video;
+
+import froala.editor.file.FileValidation;
+
+/**
+ * Video Validation.
+ *
+ * @author florin@froala.com
+ */
+public class VideoValidation extends FileValidation {
+
+ /**
+ * Allowed video validation default extensions.
+ */
+ public static final String[] allowedVideoExtsDefault = new String[] { "mp4", "webm", "ogg" };
+
+ /**
+ * Allowed video validation default mimetypes.
+ */
+ public static final String[] allowedVideoMimeTypesDefault = new String[] { "video/mp4", "video/webm", "video/ogg" };
+
+ /**
+ * Init default video validation settings.
+ */
+ @Override
+ protected void initDefault() {
+
+ allowedExts = allowedVideoExtsDefault;
+ allowedMimeTypes = allowedVideoMimeTypesDefault;
+ }
+
+ /**
+ * Constructor. Validates default videos with: - allowed file extensions:
+ * ".mp4", ".webm", ".ogg" - allowed mime types:
+ * "video/mp4", "video/webm", "video/ogg"
+ */
+ public VideoValidation() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param allowedExts
+ * Allowed validation video extensions.
+ * @param allowedMimeTypes
+ * Allowed validation video mimetypes.
+ */
+ public VideoValidation(String[] allowedExts, String[] allowedMimeTypes) {
+ super(allowedExts, allowedMimeTypes);
+ }
+
+}
Property changes on: base3.10/src/main/java/froala/editor/video/VideoValidation.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/video/StreamingResponse.java
===================================================================
--- base3.10/src/main/java/froala/editor/video/StreamingResponse.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/video/StreamingResponse.java (revision 7)
@@ -0,0 +1,76 @@
+package froala.editor.video;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.tika.Tika;
+
+/**
+ * 동영상 스트리밍 전송
+ * @since 2021. 6. 18.
+ * @author 임종호
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2021. 6. 18. 임종호 : 최초작성
+ * </PRE>
+ */
+public class StreamingResponse {
+ public static final int DEFAULT_BUFFER_SIZE = 204800;
+
+ private static final long DEFAULT_EXPIRE_TIME = 604800000L;
+
+ public Range write(File file, HttpServletRequest request, HttpServletResponse response) throws IOException {
+ Range range = null;
+ String fileName = (String) request.getAttribute("originFileNm");
+ String rangeStr = request.getHeader("range");
+
+ if (rangeStr != null) {
+ if (rangeStr.endsWith("-")) {
+ rangeStr = rangeStr + (file.length() - 1);
+ }
+
+ int idxm = rangeStr.trim().indexOf("-");
+ range = new Range(Long.parseLong(rangeStr.substring(6, idxm)), Long.parseLong(rangeStr.substring(idxm + 1)), file.length());
+ long partSize = 0;
+ if (range.getStart() > 0) {
+ range.setPart(true);
+ }
+ range.setPartSize(partSize);
+ } else {
+ range = new Range(0L, file.length() - 1, file.length());
+ }
+ range.setPartSize(range.getEnd() - range.getStart() + 1);
+ if (range.getEnd() == 0) {
+ range.setEnd(range.getStart() + DEFAULT_BUFFER_SIZE - 1);
+ }
+
+ if (range.getEnd() > range.getTotal() - 1) {
+ range.setEnd(range.getTotal() - 1);
+ }
+
+ String eTag = file.getName() + "_" + file.lastModified();
+
+ // mime type 지정
+ Tika tika = new Tika();
+ String mime = tika.detect(file);
+ response.setContentType(mime);
+
+ response.reset();
+ response.setStatus(range.isPart() ? HttpServletResponse.SC_PARTIAL_CONTENT : HttpServletResponse.SC_OK);
+ response.setHeader("Content-Range", "bytes " + range.getStart() + "-" + range.getEnd() + "/" + range.getTotal());
+ response.setHeader("Accept-Ranges", "bytes");
+ response.setHeader("Content-Length", "" + range.getPartSize());
+ response.setBufferSize(DEFAULT_BUFFER_SIZE);
+ response.setHeader("Content-Disposition", "inline;filename=\"" + fileName + "\"");
+ response.setHeader("ETag", eTag);
+ response.setDateHeader("Last-Modified", file.lastModified());
+ response.setDateHeader("Expires", System.currentTimeMillis() + DEFAULT_EXPIRE_TIME);
+
+ return range;
+
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/video/StreamingResponse.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/video/VideoOptions.java
===================================================================
--- base3.10/src/main/java/froala/editor/video/VideoOptions.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/video/VideoOptions.java (revision 7)
@@ -0,0 +1,42 @@
+package froala.editor.video;
+
+import egovframework.com.cmm.service.EgovProperties;
+import froala.editor.file.FileOptions;
+
+/**
+ * Video Options used for uploading.
+ *
+ * @author florin@froala.com
+ */
+public class VideoOptions extends FileOptions {
+ public static final String streamingDefault = "/streaming.do?fileId=";
+
+ private String streamingUrl;
+
+ public String getStreamingUrl () {
+ return streamingUrl;
+ }
+
+ public void setStreamingUrl (String streamingUrl) {
+ this.streamingUrl = streamingUrl;
+ }
+
+ /**
+ * Init default video upload settings.
+ */
+ @Override
+ protected void initDefault () {
+ setValidation (new VideoValidation ());
+ }
+
+ /**
+ * Constructor. Uses default options: - fieldname "file" - validation default
+ * VideoValidation. To change them, use getters and setters.
+ */
+ public VideoOptions() {
+ // super ();
+ setStreamingUrl (streamingDefault);
+ initDefault ();
+ }
+
+}
Property changes on: base3.10/src/main/java/froala/editor/video/VideoOptions.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/file/FileValidation.java
===================================================================
--- base3.10/src/main/java/froala/editor/file/FileValidation.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/file/FileValidation.java (revision 7)
@@ -0,0 +1,120 @@
+package froala.editor.file;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang.ArrayUtils;
+
+import froala.editor.CustomValidation;
+
+/**
+ * File validation.
+ *
+ * @author florin@froala.com
+ */
+public class FileValidation {
+
+ /**
+ * Allowed file validation default extensions.
+ */
+ public static final String[] allowedFileExtsDefault = new String[] { "txt", "pdf", "doc", "hwp" };
+
+ /**
+ * Allowed file validation default mimetypes.
+ */
+ public static final String[] allowedFileMimeTypesDefault = new String[] { "text/plain", "application/msword",
+ "application/x-pdf", "application/pdf", "application/haansofthwp" };
+
+ /**
+ * Allowed validation extensions.
+ */
+ protected String[] allowedExts;
+
+ /**
+ * Allowed validation mimetypes.
+ */
+ protected String[] allowedMimeTypes;
+
+ /**
+ * Custom file validation.
+ */
+ protected CustomValidation customValidation;
+
+ /**
+ * Init default file validation settings.
+ */
+ protected void initDefault() {
+
+ allowedExts = allowedFileExtsDefault;
+ allowedMimeTypes = allowedFileMimeTypesDefault;
+ }
+
+ /**
+ * Constructor. Validates default files with: - allowed file extensions:
+ * "txt", "pdf", "doc" - allowed mime types: "text/plain",
+ * "application/msword", "application/x-pdf", "application/pdf"
+ */
+ public FileValidation() {
+
+ initDefault();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param allowedExts
+ * Allowed validation file extensions.
+ * @param allowedMimeTypes
+ * Allowed validation file mimetypes.
+ */
+ public FileValidation(String[] allowedExts, String[] allowedMimeTypes) {
+
+ initDefault();
+
+ if (allowedExts != null) {
+ int cnt = allowedExts.length;
+ this.allowedExts = new String[cnt];
+ for (int i = 0; i < cnt; i++) {
+ this.allowedExts[i] = allowedExts[i];
+ }
+ }
+
+ if (allowedMimeTypes != null) {
+ int cnt = allowedMimeTypes.length;
+ this.allowedMimeTypes = new String[cnt];
+ for (int i = 0; i < cnt; i++) {
+ this.allowedMimeTypes[i] = allowedMimeTypes[i];
+ }
+ }
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param customValidation
+ * Custom validation.
+ */
+ public FileValidation(CustomValidation customValidation) {
+
+ initDefault();
+ this.customValidation = customValidation;
+ }
+
+ /**
+ * Check if file is valid. Use only the custom function if provided. Else
+ * check if the file has an allowed extension and mimetype.
+ *
+ * @param filePath
+ * File path.
+ * @param mimeType
+ * File mimetype
+ * @return
+ */
+ public boolean check(String filePath, String mimeType) {
+
+ if (customValidation != null) {
+ return customValidation.validate(filePath, mimeType);
+ }
+
+ return ArrayUtils.contains(allowedExts, FilenameUtils.getExtension(filePath).toLowerCase())
+ && ArrayUtils.contains(allowedMimeTypes, mimeType.toLowerCase());
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/file/FileValidation.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/file/FileOptions.java
===================================================================
--- base3.10/src/main/java/froala/editor/file/FileOptions.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/file/FileOptions.java (revision 7)
@@ -0,0 +1,89 @@
+package froala.editor.file;
+
+import egovframework.com.cmm.service.EgovProperties;
+
+/**
+ * File Options used for uploading.
+ *
+ * @author florin@froala.com
+ */
+public class FileOptions {
+
+ // Download Url
+ public String downloadUrl;
+
+ public String getDownloadUrl() {
+ return downloadUrl;
+ }
+
+ public void setDownloadUrl(String downloadUrl) {
+ this.downloadUrl = downloadUrl;
+ }
+
+ public static final String downloadDefault = "/download.do?fileId=";
+ /**
+ * Default Froala Editor tag name that points to the file.
+ */
+ public static final String fieldnameDefault = "file";
+
+ /**
+ * Tag name that points to the file.
+ */
+ private String fieldname;
+
+ /**
+ * Get tag name that points to the file.
+ */
+ public String getFieldname() {
+ return fieldname;
+ }
+
+ /**
+ * Set tag name that points to the file.
+ */
+ public void setFieldname(String fieldname) {
+ this.fieldname = fieldname;
+ }
+
+ /**
+ * File validation.
+ */
+ private FileValidation validation;
+
+ /**
+ * Get file validation.
+ */
+ public FileValidation getValidation() {
+ return validation;
+ }
+
+ /**
+ * Set file validation.
+ */
+ public void setValidation(FileValidation validation) {
+ this.validation = validation;
+ }
+
+ /**
+ * Init default file upload settings.
+ */
+ protected void initDefault() {
+ setValidation(new FileValidation());
+ }
+
+ /**
+ * Constructor. Uses default options: - fieldname "file" - validation
+ * default FileValidation. To change them, use getters and setters.
+ */
+ public FileOptions() {
+
+ // Set default fieldname.
+ setFieldname(fieldnameDefault);
+
+ // Set default filetype;
+ setDownloadUrl(downloadDefault);
+
+ // Init default settings.
+ initDefault();
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/file/FileOptions.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/EditorFileVO.java
===================================================================
--- base3.10/src/main/java/froala/editor/EditorFileVO.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/EditorFileVO.java (revision 7)
@@ -0,0 +1,136 @@
+package froala.editor;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 에디터파일 VO
+ * @author 임종호
+ *
+ */
+@SuppressWarnings("serial")
+public class EditorFileVO implements Serializable{
+ // 파일ID
+ private String fileId;
+ //링크
+ private String link;
+ // 총경로
+ private String fullPath;
+ // 파일확장자
+ private String fileExtsn;
+ // 원본파일명
+ private String originFileNm;
+ // 저장파일명
+ private String sysFileNm;
+ // 업로드경로
+ private String uploadDir;
+ // 파일크기
+ private Long fileSize;
+ // 파일확장자
+ private String mime;
+ // 등록자
+ private String registerId;
+ // 등록일시
+ private String registPnttm;
+ // 페이지수(pdf,tif,tiff)
+ private Integer pageCnt;
+
+ private List<EditorFileVO> fileList;
+
+ public String getFileId() {
+ return fileId;
+ }
+ public void setFileId(String fileId) {
+ this.fileId = fileId;
+ }
+ public String getLink() {
+ return link;
+ }
+ public void setLink(String link) {
+ this.link = link;
+ }
+ public String getFullPath() {
+ return fullPath;
+ }
+ public void setFullPath(String fullPath) {
+ this.fullPath = fullPath;
+ }
+ public String getFileExtsn() {
+ return fileExtsn;
+ }
+ public void setFileExtsn(String fileExtsn) {
+ this.fileExtsn = fileExtsn;
+ }
+ public String getOriginFileNm() {
+ return originFileNm;
+ }
+ public void setOriginFileNm(String originFileNm) {
+ this.originFileNm = originFileNm;
+ }
+ public String getSysFileNm() {
+ return sysFileNm;
+ }
+ public void setSysFileNm(String sysFileNm) {
+ this.sysFileNm = sysFileNm;
+ }
+ public String getUploadDir() {
+ return uploadDir;
+ }
+ public void setUploadDir(String uploadDir) {
+ this.uploadDir = uploadDir;
+ }
+ public Long getFileSize() {
+ return fileSize;
+ }
+ public void setFileSize(Long fileSize) {
+ this.fileSize = fileSize;
+ }
+ public String getMime() {
+ return mime;
+ }
+ public void setMime(String mime) {
+ this.mime = mime;
+ }
+ public EditorFileVO(String link) {
+ super();
+ this.link = link;
+ }
+ public String getRegisterId() {
+ return registerId;
+ }
+ public void setRegisterId(String registerId) {
+ this.registerId = registerId;
+ }
+ public String getRegistPnttm() {
+ return registPnttm;
+ }
+ public void setRegistPnttm(String registPnttm) {
+ this.registPnttm = registPnttm;
+ }
+ public Integer getPageCnt() {
+ return pageCnt;
+ }
+ public void setPageCnt(Integer pageCnt) {
+ this.pageCnt = pageCnt;
+ }
+ public List<EditorFileVO> getFileList() {
+ if (this.fileList == null) {
+ return null;
+ } else {
+ List<EditorFileVO> list = this.fileList;
+ return list;
+ }
+ }
+ public void setFileList(List<EditorFileVO> fileList) {
+ if (fileList != null) {
+ this.fileList = new ArrayList<EditorFileVO>();
+ for (EditorFileVO vo : fileList) {
+ this.fileList.add(vo);
+ }
+ }
+ }
+ public EditorFileVO() {
+ super();
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/froala/editor/EditorFileVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/froala/editor/Utils.java
===================================================================
--- base3.10/src/main/java/froala/editor/Utils.java (nonexistent)
+++ base3.10/src/main/java/froala/editor/Utils.java (revision 7)
@@ -0,0 +1,114 @@
+package froala.editor;
+
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Calendar;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.commons.codec.binary.Hex;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.multipart.MultipartFile;
+
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+
+/**
+ * Basic utils.
+ *
+ * @author florin@froala.com
+ *
+ */
+public final class Utils {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class);
+
+ /**
+ * Private constructor.
+ */
+ private Utils() {
+
+ }
+
+ public static String generateUniqueString() throws NoSuchAlgorithmException {
+
+ String miliseconds = System.currentTimeMillis() + "";
+ MessageDigest d = null;
+ d = java.security.MessageDigest.getInstance("SHA-256");
+ d.reset();
+ d.update(miliseconds.getBytes());
+ return bytesToHex(d.digest());
+ }
+
+ public static String bytesToHex(byte[] in) {
+ StringBuilder builder = new StringBuilder();
+ for (byte b : in) {
+ builder.append(String.format("%02x", b));
+ }
+ return builder.toString();
+ }
+
+// public static String getFileName(Part part) {
+// for (String cd : part.getHeader("content-disposition").split(";")) {
+// if (cd.trim().startsWith("filename")) {
+// return cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
+// }
+// }
+// return null;
+// }
+
+ public static String getFileName(MultipartFile file) {
+ if( !file.isEmpty() ) {
+ return file.getOriginalFilename();
+ };
+ return null;
+ }
+
+ public static byte[] hmac(byte[] key, String data) {
+ Mac sha256_HMAC;
+ byte[] result = null;
+ try {
+ sha256_HMAC = Mac.getInstance("HmacSHA256");
+ SecretKeySpec secret_key = new SecretKeySpec(key, "HmacSHA256");
+ sha256_HMAC.init(secret_key);
+ result = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
+ } catch (NoSuchAlgorithmException | InvalidKeyException | IllegalStateException | UnsupportedEncodingException e) {
+ return null;
+ }
+ return result;
+ }
+
+ public static String hmac_hex(byte[] key, String data) throws EgovBizException {
+ return new String(Hex.encodeHex(hmac(key, data)));
+ }
+
+ public static String getAddDateRoute(String route) {
+ if( route == null ) return "";
+
+ // 파일 저장 경로에 날짜 추가
+ Calendar cal = Calendar.getInstance();
+ //현재 년도, 월, 일
+ int year = cal.get(Calendar.YEAR);
+ int month = cal.get(Calendar.MONTH) + 1;
+ int date = cal.get(Calendar.DATE);
+ return route + year + "/" + month + "/" + date + "/";
+ }
+
+ public static String getAddTempRoute(String route) {
+ if( route == null ) return "";
+
+ // 파일 저장 경로에 임시경로 추가
+ String directory = null;
+ try {
+ directory = Utils.generateUniqueString();
+ } catch (NoSuchAlgorithmException e) {
+ LOGGER.error("NoSuchAlgorithmException! {}", e);
+ directory = "";
+ }
+
+ return route + directory + "/";
+ }
+}
Property changes on: base3.10/src/main/java/froala/editor/Utils.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLoginFilter.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLoginFilter.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLoginFilter.java (revision 7)
@@ -0,0 +1,304 @@
+package egovframework.com.sec.security.filter;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.config.EgovLoginConfig;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.uat.uia.service.EgovLoginService;
+import egovframework.rte.psl.dataaccess.util.EgovMap;
+
+/**
+ *
+ * @author 공통서비스 개발팀 서준식
+ * @since 2011. 8. 29.
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * 개정이력(Modification Information)
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2011.08.29 서준식 최초생성
+ * 2011.12.12 유지보수 사용자 로그인 정보 간섭 가능성 문제(멤버 변수 EgovUserDetails userDetails를 로컬변수로 변경)
+ * 2014.03.07 유지보수 로그인된 상태에서 다시 로그인 시 미처리 되는 문제 수정 (로그인 처리 URL 파라미터화)
+ * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2017.07.10 장동한 실행환경 v3.7(Spring Security 4.0.3 적용)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ * 2020.06.25 신용호 로그인 메시지 처리 수정
+ *
+ * </pre>
+ */
+
+public class EgovSpringSecurityLoginFilter implements Filter {
+
+ private FilterConfig config;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovSpringSecurityLoginFilter.class);
+
+ public void destroy() {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+
+ LOGGER.info("EgovSpringSecurityLoginFilter called...");
+
+ // 로그인 URL
+ String loginURL = config.getInitParameter("loginURL");
+ loginURL = loginURL.replaceAll("\r", "").replaceAll("\n", "");
+
+ String loginProcessURL = config.getInitParameter("loginProcessURL");
+ loginProcessURL = loginProcessURL.replaceAll("\r", "").replaceAll("\n", "");
+
+ ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
+ EgovLoginService loginService = (EgovLoginService) act.getBean("loginService");
+ EgovLoginConfig egovLoginConfig = (EgovLoginConfig) act.getBean("egovLoginConfig");
+
+ EgovMessageSource egovMessageSource = (EgovMessageSource) act.getBean("egovMessageSource");
+
+ HttpServletRequest httpRequest = (HttpServletRequest) request;
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+ HttpSession session = httpRequest.getSession();
+ //String isLocallyAuthenticated = (String)session.getAttribute("isLocallyAuthenticated");
+ String isRemotelyAuthenticated = (String) session.getAttribute("isRemotelyAuthenticated");
+
+ String requestURL = ((HttpServletRequest) request).getRequestURI();
+
+ //스프링 시큐리티 인증이 처리 되었는지 EgovUserDetailsHelper.getAuthenticatedUser() 메서드를 통해 확인한다.
+ //context-common.xml 빈 설정에 egovUserDetailsSecurityService를 등록 해서 사용해야 정상적으로 동작한다.
+ if (EgovUserDetailsHelper.getAuthenticatedUser() == null || requestURL.contains(loginProcessURL)) {
+
+ if (isRemotelyAuthenticated != null && isRemotelyAuthenticated.equals("true")) {
+ try {
+ //세션 토큰 정보를 가지고 DB로부터 사용자 정보를 가져옴
+ LoginVO loginVO = (LoginVO) session.getAttribute("loginVOForDBAuthentication");
+ loginVO = loginService.actionLoginByEsntlId(loginVO);
+
+ if (loginVO != null && loginVO.getId() != null && !loginVO.getId().equals("")) {
+ //세션 로그인
+ session.setAttribute("loginVO", loginVO);
+
+ //로컬 인증결과 세션에 저장
+ session.setAttribute("isLocallyAuthenticated", "true");
+
+ //스프링 시큐리티 로그인
+ //httpResponse.sendRedirect(httpRequest.getContextPath() + "/j_spring_security_check?j_username=" + loginVO.getUserSe() + loginVO.getId() + "&j_password=" + loginVO.getUniqId());
+
+ UsernamePasswordAuthenticationFilter springSecurity = null;
+
+ Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
+ if (beans.size() > 0) {
+ springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
+ springSecurity.setUsernameParameter("egov_security_username");
+ springSecurity.setPasswordParameter("egov_security_password");
+ springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() +"/egov_security_login", "POST"));
+ } else {
+ LOGGER.error("No AuthenticationProcessingFilter");
+ throw new IllegalStateException("No AuthenticationProcessingFilter");
+ }
+ //springSecurity.setContinueChainBeforeSuccessfulAuthentication(false); // false 이면 chain 처리 되지 않음.. (filter가 아닌 경우 false로...)
+
+ LOGGER.debug("before security filter call....");
+ springSecurity.doFilter(new RequestWrapperForSecurity(httpRequest, loginVO.getUserSe() + loginVO.getId(), loginVO.getUniqId()), httpResponse, chain);
+ LOGGER.debug("after security filter call....");
+
+ }
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ } catch(IllegalArgumentException e) {
+ LOGGER.error("[IllegalArgumentException] Try/Catch...usingParameters Runing : "+ e.getMessage());
+ } catch(Exception e) {
+ LOGGER.error("["+e.getClass()+"] Try/Catch...Exception : " + e.getMessage());
+ }
+
+ } else if (isRemotelyAuthenticated == null) {
+ if (requestURL.contains(loginProcessURL)) {
+
+ String password = httpRequest.getParameter("password");
+ String id = httpRequest.getParameter("id");
+
+ // 보안점검 후속 조치(Password 검증)
+ if ((id == null || "".equals(id)) && (password == null || "".equals(password))) {
+ RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(loginURL);
+ httpRequest.setAttribute("loginMessage", "");
+ dispatcher.forward(httpRequest, httpResponse);
+ //chain.doFilter(request, response);
+ return;
+ }
+ else if (password == null || password.equals("") || password.length() < 8 || password.length() > 20) {
+ httpRequest.setAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login.password",request.getLocale()));
+ RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(loginURL);
+
+ dispatcher.forward(httpRequest, httpResponse);
+ //chain.doFilter(request, response);
+ return;
+ }
+
+ LoginVO loginVO = new LoginVO();
+
+ loginVO.setId(httpRequest.getParameter("id"));
+ loginVO.setPassword(password);
+ loginVO.setUserSe(httpRequest.getParameter("userSe"));
+
+ //------------------------------------------------------------------
+ // 로그인시 로그인인증제한 활성화 처리
+ //------------------------------------------------------------------
+ if(egovLoginConfig.isLock()){
+ try{
+ Map<?,?> mapLockUserInfo = (EgovMap)loginService.selectLoginIncorrect(loginVO);
+ if(mapLockUserInfo != null){
+ //로그인인증제한 처리
+ String sLoginIncorrectCode = loginService.processLoginIncorrect(loginVO, mapLockUserInfo);
+ if(!sLoginIncorrectCode.equals("E")){
+ if(sLoginIncorrectCode.equals("L")){
+ request.setAttribute("loginMessage", egovMessageSource.getMessageArgs("fail.common.loginIncorrect", new Object[] {egovLoginConfig.getLockCount(),request.getLocale()}));
+ }else if(sLoginIncorrectCode.equals("C")){
+ request.setAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ }
+ httpRequest.getRequestDispatcher(loginURL).forward(request, response);
+ return;
+ }
+ }else{
+ request.setAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ httpRequest.getRequestDispatcher(loginURL).forward(request, response);
+ return;
+ }
+ } catch(IllegalArgumentException e) {
+ LOGGER.error("[IllegalArgumentException] : "+ e.getMessage());
+ } catch(Exception ex) {
+ LOGGER.error("Login Exception : {}", ex.getCause(), ex);
+ httpRequest.setAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(loginURL);
+ dispatcher.forward(httpRequest, httpResponse);
+ }
+ }
+
+ //------------------------------------------------------------------
+ // 사용자 로그인 처리
+ //------------------------------------------------------------------
+ try {
+ //사용자 입력 id, password로 DB 인증을 실행함
+ loginVO = loginService.actionLogin(loginVO);
+ //사용자 IP 기록
+ loginVO.setIp(request.getRemoteAddr());
+ if (loginVO != null && loginVO.getId() != null && !loginVO.getId().equals("")) {
+ //세션 로그인
+ session.setAttribute("loginVO", loginVO);
+
+ //로컬 인증결과 세션에 저장
+ session.setAttribute("isLocallyAuthenticated", "true");
+
+ //스프링 시큐리티 로그인
+ //httpResponse.sendRedirect(httpRequest.getContextPath() + "/j_spring_security_check?j_username=" + loginVO.getUserSe() + loginVO.getId() + "&j_password=" + loginVO.getUniqId());
+
+ UsernamePasswordAuthenticationFilter springSecurity = null;
+
+ Map<String, UsernamePasswordAuthenticationFilter> beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class);
+ if (beans.size() > 0) {
+ springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0];
+ springSecurity.setUsernameParameter("egov_security_username");
+ springSecurity.setPasswordParameter("egov_security_password");
+ springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(request.getServletContext().getContextPath() +"/egov_security_login", "POST"));
+ } else {
+ LOGGER.error("No AuthenticationProcessingFilter");
+ throw new IllegalStateException("No AuthenticationProcessingFilter");
+ }
+ //springSecurity.setContinueChainBeforeSuccessfulAuthentication(false); // false 이면 chain 처리 되지 않음.. (filter가 아닌 경우 false로...)
+
+ LOGGER.debug("before security filter call....");
+ springSecurity.doFilter(new RequestWrapperForSecurity(httpRequest, loginVO.getUserSe() + loginVO.getId(), loginVO.getUniqId()), httpResponse, chain);
+ LOGGER.debug("after security filter call....");
+
+ } else {
+ //사용자 정보가 없는 경우 로그인 화면으로 redirect 시킴
+ httpRequest.setAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(loginURL);
+ dispatcher.forward(httpRequest, httpResponse);
+
+ //chain.doFilter(request, response);
+
+ return;
+
+ }
+ } catch(IllegalArgumentException e) {
+ LOGGER.error("[IllegalArgumentException] : "+ e.getMessage());
+ } catch (Exception ex) {
+ //DB인증 예외가 발생할 경우 로그인 화면으로 redirect 시킴
+ LOGGER.error("Login Exception : {}", ex.getCause(), ex);
+ httpRequest.setAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(loginURL);
+ dispatcher.forward(httpRequest, httpResponse);
+ //chain.doFilter(request, response);
+
+ return;
+
+ }
+ return;
+ }
+
+ }
+ }
+
+ chain.doFilter(request, response);
+ }
+
+ public void init(FilterConfig filterConfig) throws ServletException {
+ this.config = filterConfig;
+ }
+}
+
+class RequestWrapperForSecurity extends HttpServletRequestWrapper {
+ private String username = null;
+ private String password = null;
+
+ public RequestWrapperForSecurity(HttpServletRequest request, String username, String password) {
+ super(request);
+
+ this.username = username;
+ this.password = password;
+ }
+
+ @Override
+ public String getServletPath() {
+ return ((HttpServletRequest) super.getRequest()).getContextPath() + "/egov_security_login";
+ }
+
+ @Override
+ public String getRequestURI() {
+ return ((HttpServletRequest) super.getRequest()).getContextPath() + "/egov_security_login";
+ }
+
+ @Override
+ public String getParameter(String name) {
+ if (name.equals("egov_security_username")) {
+ return username;
+ }
+
+ if (name.equals("egov_security_password")) {
+ return password;
+ }
+
+ return super.getParameter(name);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLoginFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLogoutFilter.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLogoutFilter.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLogoutFilter.java (revision 7)
@@ -0,0 +1,62 @@
+package egovframework.com.sec.security.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ *
+ * @author 공통서비스 개발팀 서준식
+ * @since 2011. 8. 29.
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * 개정이력(Modification Information)
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011. 8. 29. 서준식 최초생성
+ * 2017.07.10 장동한 실행환경 v3.7(Spring Security 4.0.3 적용)
+ *
+ * </pre>
+ */
+
+public class EgovSpringSecurityLogoutFilter implements Filter{
+
+ @SuppressWarnings("unused")
+ private FilterConfig config;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovSpringSecurityLogoutFilter.class);
+
+ public void destroy() {}
+
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+
+ String requestURL = ((HttpServletRequest)request).getRequestURI();
+ LOGGER.debug(requestURL);
+
+ ((HttpServletRequest)request).getSession().setAttribute("loginVO", null);
+ ((HttpServletResponse)response).sendRedirect(((HttpServletRequest)request).getContextPath() + "/egov_security_logout");
+
+ }
+
+ public void init(FilterConfig filterConfig) throws ServletException {
+
+ this.config = filterConfig;
+
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/security/filter/EgovSpringSecurityLogoutFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/security/common/EgovSessionMapping.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/security/common/EgovSessionMapping.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/security/common/EgovSessionMapping.java (revision 7)
@@ -0,0 +1,82 @@
+package egovframework.com.sec.security.common;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import egovframework.com.cmm.LoginVO;
+
+import egovframework.rte.fdl.security.userdetails.EgovUserDetails;
+import egovframework.rte.fdl.security.userdetails.jdbc.EgovUsersByUsernameMapping;
+
+import javax.sql.DataSource;
+
+/**
+ * mapRow 결과를 사용자 EgovUserDetails Object 에 정의한다.
+ *
+ * @author ByungHun Woo
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2009.03.10 ByungHun Woo 최초 생성
+ * 2009.03.20 이문준 UPDATE
+ *
+ * </pre>
+ */
+
+public class EgovSessionMapping extends EgovUsersByUsernameMapping {
+
+ /**
+ * 사용자정보를 테이블에서 조회하여 EgovUsersByUsernameMapping 에 매핑한다.
+ * @param ds DataSource
+ * @param usersByUsernameQuery String
+ */
+ public EgovSessionMapping(DataSource ds, String usersByUsernameQuery) {
+ super(ds, usersByUsernameQuery);
+ }
+
+ /**
+ * mapRow Override
+ * @param rs ResultSet 결과
+ * @param rownum row num
+ * @return Object EgovUserDetails
+ * @exception SQLException
+ */
+ @Override
+ protected EgovUserDetails mapRow(ResultSet rs, int rownum) throws SQLException {
+ logger.debug("## EgovUsersByUsernameMapping mapRow ##");
+
+ String strUserId = rs.getString("user_id");
+ String strPassWord = rs.getString("password");
+ boolean strEnabled = rs.getBoolean("enabled");
+
+ String strUserNm = rs.getString("user_nm");
+ String strUserSe = rs.getString("user_se");
+ String strUserEmail = rs.getString("user_email");
+ String strOrgnztId = rs.getString("orgnzt_id");
+ String strUniqId = rs.getString("esntl_id");
+ /**2010.06.30 *이용 *조직명 추가 */
+ String strOrgnztNm = rs.getString("orgnzt_nm");
+
+
+
+ // 세션 항목 설정
+ LoginVO loginVO = new LoginVO();
+ loginVO.setId(strUserId);
+ loginVO.setPassword(strPassWord);
+ loginVO.setName(strUserNm);
+ loginVO.setUserSe(strUserSe);
+ loginVO.setEmail(strUserEmail);
+ loginVO.setOrgnztId(strOrgnztId);
+ loginVO.setUniqId(strUniqId);
+ /**2010.06.30 *이용 *조직명 추가 */
+ loginVO.setOrgnztNm(strOrgnztNm);
+
+ return new EgovUserDetails(strUserId, strPassWord, strEnabled, loginVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/security/common/EgovSessionMapping.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rgm/web/EgovAuthorGroupController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rgm/web/EgovAuthorGroupController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rgm/web/EgovAuthorGroupController.java (revision 7)
@@ -0,0 +1,168 @@
+package egovframework.com.sec.rgm.web;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.SessionVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sec.ram.service.AuthorManageVO;
+import egovframework.com.sec.ram.service.EgovAuthorManageService;
+import egovframework.com.sec.rgm.service.AuthorGroup;
+import egovframework.com.sec.rgm.service.AuthorGroupVO;
+import egovframework.com.sec.rgm.service.EgovAuthorGroupService;
+
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.SessionAttributes;
+/**
+ * 권한그룹에 관한 controller 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2011.08.04 서준식 mberTyCodes 구분자 부분 추가
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * </pre>
+ */
+
+
+@Controller
+@SessionAttributes(types=SessionVO.class)
+public class EgovAuthorGroupController {
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "egovAuthorGroupService")
+ private EgovAuthorGroupService egovAuthorGroupService;
+
+ @Resource(name = "egovAuthorManageService")
+ private EgovAuthorManageService egovAuthorManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /**
+ * 권한 목록화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/rgm/EgovAuthorGroupListView.do")
+ public String selectAuthorGroupListView() throws Exception {
+
+ return "egovframework/com/sec/rgm/EgovAuthorGroupManage";
+ }
+
+ /**
+ * 그룹별 할당된 권한 목록 조회
+ * @param authorGroupVO AuthorGroupVO
+ * @param authorManageVO AuthorManageVO
+ * @return String
+ * @exception Exception
+ */
+ @IncludedInfo(name="권한그룹관리", listUrl="/sec/rgm/EgovAuthorGroupList.do", order = 70,gid = 20)
+ @RequestMapping(value="/sec/rgm/EgovAuthorGroupList.do")
+ public String selectAuthorGroupList(@ModelAttribute("authorGroupVO") AuthorGroupVO authorGroupVO,
+ @ModelAttribute("authorManageVO") AuthorManageVO authorManageVO,
+ ModelMap model) throws Exception {
+
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(authorGroupVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(authorGroupVO.getPageUnit());
+ paginationInfo.setPageSize(authorGroupVO.getPageSize());
+
+ authorGroupVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ authorGroupVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ authorGroupVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ authorGroupVO.setAuthorGroupList(egovAuthorGroupService.selectAuthorGroupList(authorGroupVO));
+ model.addAttribute("authorGroupList", authorGroupVO.getAuthorGroupList());
+
+ int totCnt = egovAuthorGroupService.selectAuthorGroupListTotCnt(authorGroupVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorAllList(authorManageVO));
+ model.addAttribute("authorManageList", authorManageVO.getAuthorManageList());
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/sec/rgm/EgovAuthorGroupManage";
+ }
+
+ /**
+ * 그룹에 권한정보를 할당하여 데이터베이스에 등록
+ * @param userIds String
+ * @param authorCodes String
+ * @param regYns String
+ * @param authorGroup AuthorGroup
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/rgm/EgovAuthorGroupInsert.do")
+ public String insertAuthorGroup(@RequestParam("userIds") String userIds,
+ @RequestParam("authorCodes") String authorCodes,
+ @RequestParam("regYns") String regYns,
+ @RequestParam("mberTyCodes") String mberTyCodes,// 2011.08.04 수정 부분
+ @ModelAttribute("authorGroup") AuthorGroup authorGroup,
+ ModelMap model) throws Exception {
+
+ String [] strUserIds = userIds.split(";");
+ String [] strAuthorCodes = authorCodes.split(";");
+ String [] strRegYns = regYns.split(";");
+ String [] strMberTyCodes = mberTyCodes.split(";");// 2011.08.04 수정 부분
+
+ for(int i=0; i<strUserIds.length;i++) {
+ authorGroup.setUniqId(strUserIds[i]);
+ authorGroup.setAuthorCode(strAuthorCodes[i]);
+ authorGroup.setMberTyCode(strMberTyCodes[i]);// 2011.08.04 수정 부분
+ if(strRegYns[i].equals("N"))
+ egovAuthorGroupService.insertAuthorGroup(authorGroup);
+ else
+ egovAuthorGroupService.updateAuthorGroup(authorGroup);
+ }
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.insert"));
+ return "forward:/sec/rgm/EgovAuthorGroupList.do";
+ }
+
+ /**
+ * 그룹별 할당된 시스템 메뉴 접근권한을 삭제
+ * @param userIds String
+ * @param authorGroup AuthorGroup
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/rgm/EgovAuthorGroupDelete.do")
+ public String deleteAuthorGroup(@RequestParam("userIds") String userIds,
+ @ModelAttribute("authorGroup") AuthorGroup authorGroup,
+ ModelMap model) throws Exception {
+
+ String [] strUserIds = userIds.split(";");
+ for(int i=0; i<strUserIds.length;i++) {
+ authorGroup.setUniqId(strUserIds[i]);
+ egovAuthorGroupService.deleteAuthorGroup(authorGroup);
+ }
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/sec/rgm/EgovAuthorGroupList.do";
+ }
+
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rgm/web/EgovAuthorGroupController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java (revision 7)
@@ -0,0 +1,78 @@
+package egovframework.com.sec.rgm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sec.rgm.service.AuthorGroup;
+import egovframework.com.sec.rgm.service.AuthorGroupVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 권한그룹에 대한 DAO 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Repository("authorGroupDAO")
+public class AuthorGroupDAO extends EgovComAbstractDAO {
+
+ /**
+ * 그룹별 할당된 권한 목록 조회
+ * @param authorGroupVO AuthorGroupVO
+ * @return List<AuthorGroupVO>
+ * @exception Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<AuthorGroupVO> selectAuthorGroupList(AuthorGroupVO authorGroupVO) throws Exception {
+ return (List<AuthorGroupVO>) list("authorGroupDAO.selectAuthorGroupList", authorGroupVO);
+ }
+
+ /**
+ * 그룹에 권한정보를 할당하여 데이터베이스에 등록
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void insertAuthorGroup(AuthorGroup authorGroup) throws Exception {
+ insert("authorGroupDAO.insertAuthorGroup", authorGroup);
+ }
+
+ /**
+ * 화면에 조회된 그룹권한정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void updateAuthorGroup(AuthorGroup authorGroup) throws Exception {
+ update("authorGroupDAO.updateAuthorGroup", authorGroup);
+ }
+
+ /**
+ * 그룹별 할당된 시스템 메뉴 접근권한을 삭제
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void deleteAuthorGroup(AuthorGroup authorGroup) throws Exception {
+ delete("authorGroupDAO.deleteAuthorGroup", authorGroup);
+ }
+
+ /**
+ * 그룹권한목록 총 갯수를 조회한다.
+ * @param authorGroupVO AuthorGroupVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorGroupListTotCnt(AuthorGroupVO authorGroupVO) throws Exception {
+ return (Integer)selectOne("authorGroupDAO.selectAuthorGroupListTotCnt", authorGroupVO);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/AuthorGroupDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/EgovAuthorGroupServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/EgovAuthorGroupServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/EgovAuthorGroupServiceImpl.java (revision 7)
@@ -0,0 +1,85 @@
+package egovframework.com.sec.rgm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.sec.rgm.service.AuthorGroup;
+import egovframework.com.sec.rgm.service.AuthorGroupVO;
+import egovframework.com.sec.rgm.service.EgovAuthorGroupService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 권한그룹에 관한 ServiceImpl 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Service("egovAuthorGroupService")
+public class EgovAuthorGroupServiceImpl extends EgovAbstractServiceImpl implements EgovAuthorGroupService {
+
+ @Resource(name="authorGroupDAO")
+ private AuthorGroupDAO authorGroupDAO;
+
+ /**
+ * 그룹별 할당된 권한 목록 조회
+ * @param authorGroupVO AuthorGroupVO
+ * @return List<AuthorGroupVO>
+ * @exception Exception
+ */
+ public List<AuthorGroupVO> selectAuthorGroupList(AuthorGroupVO authorGroupVO) throws Exception{
+ return authorGroupDAO.selectAuthorGroupList(authorGroupVO);
+ }
+
+ /**
+ * 그룹에 권한정보를 할당하여 데이터베이스에 등록
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void insertAuthorGroup(AuthorGroup authorGroup) throws Exception{
+ authorGroupDAO.insertAuthorGroup(authorGroup);
+ }
+
+ /**
+ * 화면에 조회된 그룹권한정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void updateAuthorGroup(AuthorGroup authorGroup) throws Exception{
+ authorGroupDAO.updateAuthorGroup(authorGroup);
+ }
+
+ /**
+ * 그룹별 할당된 시스템 메뉴 접근권한을 삭제
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void deleteAuthorGroup(AuthorGroup authorGroup) throws Exception {
+ authorGroupDAO.deleteAuthorGroup(authorGroup);
+ }
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param authorGroupVO AuthorGroupVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorGroupListTotCnt(AuthorGroupVO authorGroupVO) throws Exception {
+ return authorGroupDAO.selectAuthorGroupListTotCnt(authorGroupVO);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rgm/service/impl/EgovAuthorGroupServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroupVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroupVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroupVO.java (revision 7)
@@ -0,0 +1,44 @@
+package egovframework.com.sec.rgm.service;
+
+import java.util.List;
+
+/**
+ * 권한그룹에 대한 Vo 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class AuthorGroupVO extends AuthorGroup {
+
+ private static final long serialVersionUID = 1L;
+
+ List <AuthorGroupVO> authorGroupList;
+
+ /**
+ * authorGroupList attribute 를 리턴한다.
+ * @return List<AuthorGroupVO>
+ */
+ public List<AuthorGroupVO> getAuthorGroupList() {
+ return authorGroupList;
+ }
+ /**
+ * authorGroupList attribute 값을 설정한다.
+ * @param authorGroupList List<AuthorGroupVO>
+ */
+ public void setAuthorGroupList(List<AuthorGroupVO> authorGroupList) {
+ this.authorGroupList = authorGroupList;
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroupVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rgm/service/EgovAuthorGroupService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rgm/service/EgovAuthorGroupService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rgm/service/EgovAuthorGroupService.java (revision 7)
@@ -0,0 +1,62 @@
+package egovframework.com.sec.rgm.service;
+
+import java.util.List;
+
+
+/**
+ * 권한그룹에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public interface EgovAuthorGroupService {
+
+ /**
+ * 그룹별 할당된 시스템 메뉴 접근권한을 삭제
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void deleteAuthorGroup(AuthorGroup authorGroup) throws Exception;
+
+ /**
+ * 그룹에 권한정보를 할당하여 데이터베이스에 등록
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void insertAuthorGroup(AuthorGroup authorGroup) throws Exception;
+
+ /**
+ * 그룹별 할당된 권한 목록 조회
+ * @param authorGroupVO AuthorGroupVO
+ * @return List<AuthorGroupVO>
+ * @exception Exception
+ */
+ public List<AuthorGroupVO> selectAuthorGroupList(AuthorGroupVO authorGroupVO) throws Exception;
+
+ /**
+ * 화면에 조회된 그룹권한정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param authorGroup AuthorGroup
+ * @exception Exception
+ */
+ public void updateAuthorGroup(AuthorGroup authorGroup) throws Exception;
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param authorGroupVO AuthorGroupVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorGroupListTotCnt(AuthorGroupVO authorGroupVO) throws Exception;
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rgm/service/EgovAuthorGroupService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroup.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroup.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroup.java (revision 7)
@@ -0,0 +1,195 @@
+package egovframework.com.sec.rgm.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+
+/**
+ * 권한그룹에 대한 model 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class AuthorGroup extends ComDefaultVO {
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 권한그룹관리
+ */
+ private AuthorGroup authorGroup;
+ /**
+ * 설정대상 사용자 ID
+ */
+ private String userId;
+ /**
+ * 설정대상 사용자 명
+ */
+ private String userNm;
+ /**
+ * 설정대상 그룹 ID
+ */
+ private String groupId;
+ /**
+ * 설정대상 사용자 유형 코드
+ */
+ private String mberTyCode;
+ /**
+ * 설정대상 사용자 유형 명
+ */
+ private String mberTyNm;
+ /**
+ * 권한코드
+ */
+ private String authorCode;
+ /**
+ * 등록 여부
+ */
+ private String regYn;
+ /**
+ * Uniq ID
+ */
+ private String uniqId;
+
+ /**
+ * authorGroup attribute 를 리턴한다.
+ * @return AuthorGroup
+ */
+ public AuthorGroup getAuthorGroup() {
+ return authorGroup;
+ }
+ /**
+ * authorGroup attribute 값을 설정한다.
+ * @param authorGroup AuthorGroup
+ */
+ public void setAuthorGroup(AuthorGroup authorGroup) {
+ this.authorGroup = authorGroup;
+ }
+ /**
+ * userId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUserId() {
+ return userId;
+ }
+ /**
+ * userId attribute 값을 설정한다.
+ * @param userId String
+ */
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+ /**
+ * userNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUserNm() {
+ return userNm;
+ }
+ /**
+ * userNm attribute 값을 설정한다.
+ * @param userNm String
+ */
+ public void setUserNm(String userNm) {
+ this.userNm = userNm;
+ }
+ /**
+ * groupId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getGroupId() {
+ return groupId;
+ }
+ /**
+ * groupId attribute 값을 설정한다.
+ * @param groupId String
+ */
+ public void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+ /**
+ * mberTyCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getMberTyCode() {
+ return mberTyCode;
+ }
+ /**
+ * mberTyCode attribute 값을 설정한다.
+ * @param mberTyCode String
+ */
+ public void setMberTyCode(String mberTyCode) {
+ this.mberTyCode = mberTyCode;
+ }
+ /**
+ * mberTyNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getMberTyNm() {
+ return mberTyNm;
+ }
+ /**
+ * mberTyNm attribute 값을 설정한다.
+ * @param mberTyNm String
+ */
+ public void setMberTyNm(String mberTyNm) {
+ this.mberTyNm = mberTyNm;
+ }
+ /**
+ * authorCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ /**
+ * authorCode attribute 값을 설정한다.
+ * @param authorCode String
+ */
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+ /**
+ * regYn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRegYn() {
+ return regYn;
+ }
+ /**
+ * regYn attribute 값을 설정한다.
+ * @param regYn String
+ */
+ public void setRegYn(String regYn) {
+ this.regYn = regYn;
+ }
+ /**
+ * uniqId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+ /**
+ * uniqId attribute 값을 설정한다.
+ * @param uniqId String
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+
+
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rgm/service/AuthorGroup.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rmt/web/EgovRoleManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rmt/web/EgovRoleManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rmt/web/EgovRoleManageController.java (revision 7)
@@ -0,0 +1,273 @@
+package egovframework.com.sec.rmt.web;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.SessionVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.sec.ram.service.AuthorManageVO;
+import egovframework.com.sec.ram.service.EgovAuthorManageService;
+import egovframework.com.sec.rmt.service.EgovRoleManageService;
+import egovframework.com.sec.rmt.service.RoleManage;
+import egovframework.com.sec.rmt.service.RoleManageVO;
+
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.SessionAttributes;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+/**
+ * 롤관리에 관한 controller 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ *
+ * </pre>
+ */
+
+
+@Controller
+@SessionAttributes(types=SessionVO.class)
+public class EgovRoleManageController {
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "egovRoleManageService")
+ private EgovRoleManageService egovRoleManageService;
+
+ @Resource(name = "EgovCmmUseService")
+ EgovCmmUseService egovCmmUseService;
+
+ @Resource(name = "egovAuthorManageService")
+ private EgovAuthorManageService egovAuthorManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** Message ID Generation */
+ @Resource(name="egovRoleIdGnrService")
+ private EgovIdGnrService egovRoleIdGnrService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 롤 목록화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/rmt/EgovRoleListView.do")
+ public String selectRoleListView()
+ throws Exception {
+ return "egovframework/com/sec/rmt/EgovRoleManage";
+ }
+
+ /**
+ * 등록된 롤 정보 목록 조회
+ * @param roleManageVO RoleManageVO
+ * @return String
+ * @exception Exception
+ */
+ @IncludedInfo(name="롤관리", listUrl="/sec/rmt/EgovRoleList.do", order = 90,gid = 20)
+ @RequestMapping(value="/sec/rmt/EgovRoleList.do")
+ public String selectRoleList(@ModelAttribute("roleManageVO") RoleManageVO roleManageVO,
+ ModelMap model) throws Exception {
+
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(roleManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(roleManageVO.getPageUnit());
+ paginationInfo.setPageSize(roleManageVO.getPageSize());
+
+ roleManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ roleManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ roleManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ roleManageVO.setRoleManageList(egovRoleManageService.selectRoleList(roleManageVO));
+ model.addAttribute("roleList", roleManageVO.getRoleManageList());
+
+ int totCnt = egovRoleManageService.selectRoleListTotCnt(roleManageVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/sec/rmt/EgovRoleManage";
+ }
+
+ /**
+ * 등록된 롤 정보 조회
+ * @param roleCode String
+ * @param roleManageVO RoleManageVO
+ * @param authorManageVO AuthorManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/rmt/EgovRole.do")
+ public String selectRole(@RequestParam("roleCode") String roleCode,
+ @ModelAttribute("roleManageVO") RoleManageVO roleManageVO,
+ @ModelAttribute("authorManageVO") AuthorManageVO authorManageVO,
+ ModelMap model) throws Exception {
+
+ roleManageVO.setRoleCode(roleCode);
+
+ authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorAllList(authorManageVO));
+
+ model.addAttribute("roleManage", egovRoleManageService.selectRole(roleManageVO));
+ model.addAttribute("authorManageList", authorManageVO.getAuthorManageList());
+ model.addAttribute("cmmCodeDetailList", getCmmCodeDetailList(new ComDefaultCodeVO(),"COM029"));
+
+ return "egovframework/com/sec/rmt/EgovRoleUpdate";
+ }
+
+ /**
+ * 롤 등록화면 이동
+ * @param authorManageVO AuthorManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/rmt/EgovRoleInsertView.do")
+ public String insertRoleView(@ModelAttribute("authorManageVO") AuthorManageVO authorManageVO,
+ @ModelAttribute("roleManage") RoleManage roleManage,
+ ModelMap model) throws Exception {
+
+ authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorAllList(authorManageVO));
+ model.addAttribute("authorManageList", authorManageVO.getAuthorManageList());
+ model.addAttribute("cmmCodeDetailList", getCmmCodeDetailList(new ComDefaultCodeVO(),"COM029"));
+
+ return "egovframework/com/sec/rmt/EgovRoleInsert";
+ }
+
+ /**
+ * 공통코드 호출
+ * @param comDefaultCodeVO ComDefaultCodeVO
+ * @param codeId String
+ * @return List
+ * @exception Exception
+ */
+ public List<?> getCmmCodeDetailList(ComDefaultCodeVO comDefaultCodeVO, String codeId) throws Exception {
+ comDefaultCodeVO.setCodeId(codeId);
+ return egovCmmUseService.selectCmmCodeDetail(comDefaultCodeVO);
+ }
+
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 등록
+ * @param roleManage RoleManage
+ * @param roleManageVO RoleManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/rmt/EgovRoleInsert.do")
+ public String insertRole(@ModelAttribute("roleManage") RoleManage roleManage,
+ @ModelAttribute("roleManageVO") RoleManageVO roleManageVO,
+ BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ beanValidator.validate(roleManage, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sec/rmt/EgovRoleInsert";
+ } else {
+ String roleTyp = roleManage.getRoleTyp();
+ if("method".equals(roleTyp))//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ roleTyp = "mtd";
+ else if("pointcut".equals(roleTyp))//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ roleTyp = "pct";
+ else roleTyp = "web";
+
+ roleManage.setRoleCode(roleTyp.concat("-").concat(egovRoleIdGnrService.getNextStringId()));
+ roleManageVO.setRoleCode(roleManage.getRoleCode());
+
+ model.addAttribute("cmmCodeDetailList", getCmmCodeDetailList(new ComDefaultCodeVO(),"COM029"));
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.insert"));
+ model.addAttribute("roleManage", egovRoleManageService.insertRole(roleManage, roleManageVO));
+
+ //return "egovframework/com/sec/rmt/EgovRoleUpdate";
+ return "forward:/sec/rmt/EgovRoleList.do";
+ }
+ }
+
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 수정
+ * @param roleManage RoleManage
+ * @param bindingResult BindingResult
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/rmt/EgovRoleUpdate.do")
+ public String updateRole(@ModelAttribute("roleManage") RoleManage roleManage,
+ BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ beanValidator.validate(roleManage, bindingResult); //validation 수행
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sec/rmt/EgovRoleUpdate";
+ } else {
+ egovRoleManageService.updateRole(roleManage);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.update"));
+ //return "forward:/sec/rmt/EgovRole.do";
+ return "forward:/sec/rmt/EgovRoleList.do";
+ }
+ }
+
+ /**
+ * 불필요한 롤정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param roleManage RoleManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/rmt/EgovRoleDelete.do")
+ public String deleteRole(@ModelAttribute("roleManage") RoleManage roleManage,
+ ModelMap model) throws Exception {
+ egovRoleManageService.deleteRole(roleManage);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/sec/rmt/EgovRoleList.do";
+
+ }
+
+ /**
+ * 불필요한 그룹정보 목록을 화면에 조회하여 데이터베이스에서 삭제
+ * @param roleCodes String
+ * @param roleManage RoleManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/rmt/EgovRoleListDelete.do")
+ public String deleteRoleList(@RequestParam("roleCodes") String roleCodes,
+ @ModelAttribute("roleManage") RoleManage roleManage,
+ Model model) throws Exception {
+ String [] strRoleCodes = roleCodes.split(";");
+ for(int i=0; i<strRoleCodes.length;i++) {
+ roleManage.setRoleCode(strRoleCodes[i]);
+ egovRoleManageService.deleteRole(roleManage);
+ }
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/sec/rmt/EgovRoleList.do";
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rmt/web/EgovRoleManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/RoleManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/RoleManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/RoleManageDAO.java (revision 7)
@@ -0,0 +1,98 @@
+package egovframework.com.sec.rmt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sec.rmt.service.RoleManage;
+import egovframework.com.sec.rmt.service.RoleManageVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 롤관리에 대한 DAO 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Repository("roleManageDAO")
+public class RoleManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 등록된 롤 정보 조회
+ * @param roleManageVO RoleManageVO
+ * @return RoleManageVO
+ * @exception Exception
+ */
+ public RoleManageVO selectRole(RoleManageVO roleManageVO) throws Exception {
+ return (RoleManageVO) selectOne("roleManageDAO.selectRole", roleManageVO);
+ }
+
+ /**
+ * 등록된 롤 정보 목록 조회
+ * @param roleManageVO RoleManageVO
+ * @return List<RoleManageVO>
+ * @exception Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<RoleManageVO> selectRoleList(RoleManageVO roleManageVO) throws Exception {
+ return (List<RoleManageVO>) list("roleManageDAO.selectRoleList", roleManageVO);
+ }
+
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 등록
+ * @param roleManage RoleManage
+ * @exception Exception
+ */
+ public void insertRole(RoleManage roleManage) throws Exception {
+ insert("roleManageDAO.insertRole", roleManage);
+ }
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 수정
+ * @param roleManage RoleManage
+ * @exception Exception
+ */
+ public void updateRole(RoleManage roleManage) throws Exception {
+ update("roleManageDAO.updateRole", roleManage);
+ }
+ /**
+ * 불필요한 롤정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param roleManage RoleManage
+ * @exception Exception
+ */
+ public void deleteRole(RoleManage roleManage) throws Exception {
+ delete("roleManageDAO.deleteRole", roleManage);
+ }
+
+ /**
+ * 롤목록 총 갯수를 조회한다.
+ * @param roleManageVO RoleManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectRoleListTotCnt(RoleManageVO roleManageVO) throws Exception {
+ return (Integer)selectOne("roleManageDAO.selectAuthorListTotCnt", roleManageVO);
+ }
+
+ /**
+ * 등록된 모든 롤 정보 목록 조회
+ * @param roleManageVO RoleManageVO
+ * @return List<RoleManageVO>
+ * @exception Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<RoleManageVO> selectRoleAllList(RoleManageVO roleManageVO) throws Exception {
+ return (List<RoleManageVO>) list("roleManageDAO.selectRoleAllList", roleManageVO);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/RoleManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/EgovRoleManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/EgovRoleManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/EgovRoleManageServiceImpl.java (revision 7)
@@ -0,0 +1,109 @@
+package egovframework.com.sec.rmt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.sec.rmt.service.EgovRoleManageService;
+import egovframework.com.sec.rmt.service.RoleManage;
+import egovframework.com.sec.rmt.service.RoleManageVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 롤관리에 관한 ServiceImpl 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Service("egovRoleManageService")
+public class EgovRoleManageServiceImpl extends EgovAbstractServiceImpl implements EgovRoleManageService {
+
+ @Resource(name="roleManageDAO")
+ public RoleManageDAO roleManageDAO;
+
+ /**
+ * 등록된 롤 정보 조회
+ * @param roleManageVO RoleManageVO
+ * @return RoleManageVO
+ * @exception Exception
+ */
+ public RoleManageVO selectRole(RoleManageVO roleManageVO) throws Exception {
+ return roleManageDAO.selectRole(roleManageVO);
+ }
+
+ /**
+ * 등록된 롤 정보 목록 조회
+ * @param roleManageVO RoleManageVO
+ * @return List<RoleManageVO>
+ * @exception Exception
+ */
+ public List<RoleManageVO> selectRoleList(RoleManageVO roleManageVO) throws Exception {
+ return roleManageDAO.selectRoleList(roleManageVO);
+ }
+
+ /**
+ * 불필요한 롤정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param roleManage RoleManage
+ * @exception Exception
+ */
+ public void deleteRole(RoleManage roleManage) throws Exception {
+ roleManageDAO.deleteRole(roleManage);
+ }
+
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 수정
+ * @param roleManage RoleManage
+ * @exception Exception
+ */
+ public void updateRole(RoleManage roleManage) throws Exception {
+ roleManageDAO.updateRole(roleManage);
+ }
+
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 등록
+ * @param roleManage RoleManage
+ * @param roleManageVO RoleManageVO
+ * @return RoleManageVO
+ * @exception Exception
+ */
+ public RoleManageVO insertRole(RoleManage roleManage, RoleManageVO roleManageVO) throws Exception {
+ roleManageDAO.insertRole(roleManage);
+ roleManageVO.setRoleCode(roleManage.getRoleCode());
+ return roleManageDAO.selectRole(roleManageVO);
+ }
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param roleManageVO RoleManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectRoleListTotCnt(RoleManageVO roleManageVO) throws Exception {
+ return roleManageDAO.selectRoleListTotCnt(roleManageVO);
+ }
+
+ /**
+ * 등록된 모든 롤 정보 목록 조회
+ * @param roleManageVO - 등록할 정보가 담긴 RoleManageVO
+ * @return List
+ * @exception Exception
+ */
+ public List<RoleManageVO> selectRoleAllList(RoleManageVO roleManageVO) throws Exception {
+ return roleManageDAO.selectRoleAllList(roleManageVO);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rmt/service/impl/EgovRoleManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManage.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManage.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManage.java (revision 7)
@@ -0,0 +1,192 @@
+package egovframework.com.sec.rmt.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 롤관리에 대한 model 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class RoleManage extends ComDefaultVO {
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 롤 관리
+ */
+ private RoleManage roleManage;
+ /**
+ * 롤코드
+ */
+ private String roleCode;
+ /**
+ * 롤명
+ */
+ private String roleNm;
+ /**
+ * 롤패턴
+ */
+ private String rolePtn;
+ /**
+ * 롤 설명
+ */
+ private String roleDc;
+ /**
+ * 롤 타입
+ */
+ private String roleTyp;
+ /**
+ * 롤 Sort
+ */
+ private String roleSort;
+ /**
+ * 롤 등록일시
+ */
+ private String roleCreatDe;
+ /**
+ * 권한 코드
+ */
+ private String authorCode;
+
+ /**
+ * roleManage attribute 를 리턴한다.
+ * @return RoleManage
+ */
+ public RoleManage getRoleManage() {
+ return roleManage;
+ }
+ /**
+ * roleManage attribute 값을 설정한다.
+ * @param roleManage RoleManage
+ */
+ public void setRoleManage(RoleManage roleManage) {
+ this.roleManage = roleManage;
+ }
+ /**
+ * roleCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleCode() {
+ return roleCode;
+ }
+ /**
+ * roleCode attribute 값을 설정한다.
+ * @param roleCode String
+ */
+ public void setRoleCode(String roleCode) {
+ this.roleCode = roleCode;
+ }
+ /**
+ * roleNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleNm() {
+ return roleNm;
+ }
+ /**
+ * roleNm attribute 값을 설정한다.
+ * @param roleNm String
+ */
+ public void setRoleNm(String roleNm) {
+ this.roleNm = roleNm;
+ }
+ /**
+ * rolePtn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRolePtn() {
+ return rolePtn;
+ }
+ /**
+ * rolePtn attribute 값을 설정한다.
+ * @param rolePtn String
+ */
+ public void setRolePtn(String rolePtn) {
+ this.rolePtn = rolePtn;
+ }
+ /**
+ * roleDc attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleDc() {
+ return roleDc;
+ }
+ /**
+ * roleDc attribute 값을 설정한다.
+ * @param roleDc String
+ */
+ public void setRoleDc(String roleDc) {
+ this.roleDc = roleDc;
+ }
+ /**
+ * roleTyp attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleTyp() {
+ return roleTyp;
+ }
+ /**
+ * roleTyp attribute 값을 설정한다.
+ * @param roleTyp String
+ */
+ public void setRoleTyp(String roleTyp) {
+ this.roleTyp = roleTyp;
+ }
+ /**
+ * roleSort attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleSort() {
+ return roleSort;
+ }
+ /**
+ * roleSort attribute 값을 설정한다.
+ * @param roleSort String
+ */
+ public void setRoleSort(String roleSort) {
+ this.roleSort = roleSort;
+ }
+ /**
+ * roleCreatDe attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleCreatDe() {
+ return roleCreatDe;
+ }
+ /**
+ * roleCreatDe attribute 값을 설정한다.
+ * @param roleCreatDe String
+ */
+ public void setRoleCreatDe(String roleCreatDe) {
+ this.roleCreatDe = roleCreatDe;
+ }
+ /**
+ * authorCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ /**
+ * authorCode attribute 값을 설정한다.
+ * @param authorCode String
+ */
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManage.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManageVO.java (revision 7)
@@ -0,0 +1,66 @@
+package egovframework.com.sec.rmt.service;
+
+import java.util.List;
+
+/**
+ * 롤관리에 대한 Vo 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class RoleManageVO extends RoleManage {
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 롤 목록
+ */
+ List <RoleManageVO> roleManageList;
+ /**
+ * 삭제대상 목록
+ */
+ String[] delYn;
+
+ /**
+ * roleManageList attribute 를 리턴한다.
+ * @return List<RoleManageVO>
+ */
+ public List<RoleManageVO> getRoleManageList() {
+ return roleManageList;
+ }
+ /**
+ * roleManageList attribute 값을 설정한다.
+ * @param roleManageList List<RoleManageVO>
+ */
+ public void setRoleManageList(List<RoleManageVO> roleManageList) {
+ this.roleManageList = roleManageList;
+ }
+ /**
+ * delYn attribute 를 리턴한다.
+ * @return String[]
+ */
+ public String[] getDelYn() {
+ return delYn;
+ }
+ /**
+ * delYn attribute 값을 설정한다.
+ * @param delYn String[]
+ */
+ public void setDelYn(String[] delYn) {
+ this.delYn = delYn;
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rmt/service/RoleManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/rmt/service/EgovRoleManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/rmt/service/EgovRoleManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/rmt/service/EgovRoleManageService.java (revision 7)
@@ -0,0 +1,81 @@
+package egovframework.com.sec.rmt.service;
+
+import java.util.List;
+
+
+/**
+ * 롤관리에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public interface EgovRoleManageService {
+
+ /**
+ * 등록된 롤 정보 조회
+ * @param roleManageVO RoleManageVO
+ * @return RoleManageVO
+ * @exception Exception
+ */
+ public RoleManageVO selectRole(RoleManageVO roleManageVO) throws Exception;
+
+ /**
+ * 등록된 롤 정보 목록 조회
+ * @param roleManageVO RoleManageVO
+ * @return List<RoleManageVO>
+ * @exception Exception
+ */
+ public List<RoleManageVO> selectRoleList(RoleManageVO roleManageVO) throws Exception;
+
+ /**
+ * 불필요한 롤정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param roleManage RoleManage
+ * @exception Exception
+ */
+ public void deleteRole(RoleManage roleManage) throws Exception;
+
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 수정
+ * @param roleManage RoleManage
+ * @exception Exception
+ */
+ public void updateRole(RoleManage roleManage) throws Exception;
+
+ /**
+ * 시스템 메뉴에 따른 접근권한, 데이터 입력, 수정, 삭제의 권한 롤을 등록
+ * @param roleManage RoleManage
+ * @param roleManageVO RoleManageVO
+ * @return RoleManageVO
+ * @exception Exception
+ */
+ public RoleManageVO insertRole(RoleManage roleManage, RoleManageVO roleManageVO) throws Exception;
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param roleManageVO RoleManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectRoleListTotCnt(RoleManageVO roleManageVO) throws Exception;
+
+ /**
+ * 등록된 모든 롤 정보 목록 조회
+ * @param roleManageVO RoleManageVO
+ * @return List<RoleManageVO>
+ * @exception Exception
+ */
+ public List<RoleManageVO> selectRoleAllList(RoleManageVO roleManageVO) throws Exception;
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/rmt/service/EgovRoleManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/gmt/web/EgovGroupManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/gmt/web/EgovGroupManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/gmt/web/EgovGroupManageController.java (revision 7)
@@ -0,0 +1,259 @@
+package egovframework.com.sec.gmt.web;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.SessionVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sec.gmt.service.EgovGroupManageService;
+import egovframework.com.sec.gmt.service.GroupManage;
+import egovframework.com.sec.gmt.service.GroupManageVO;
+
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.SessionAttributes;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+/**
+ * 그룹관리에 관한 controller 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ *
+ * </pre>
+ */
+
+
+@Controller
+@SessionAttributes(types=SessionVO.class)
+public class EgovGroupManageController {
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "egovGroupManageService")
+ private EgovGroupManageService egovGroupManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** Message ID Generation */
+ @Resource(name="egovGroupIdGnrService")
+ private EgovIdGnrService egovGroupIdGnrService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 그룹 목록화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/gmt/EgovGroupListView.do")
+ public String selectGroupListView()
+ throws Exception {
+ return "egovframework/com/sec/gmt/EgovGroupManage";
+ }
+
+ /**
+ * 시스템사용 목적별 그룹 목록 조회
+ * @param groupManageVO GroupManageVO
+ * @return String
+ * @exception Exception
+ */
+ @IncludedInfo(name="그룹관리", listUrl="/sec/gmt/EgovGroupList.do", order = 80,gid = 20)
+ @RequestMapping(value="/sec/gmt/EgovGroupList.do")
+ public String selectGroupList(@ModelAttribute("groupManageVO") GroupManageVO groupManageVO,
+ ModelMap model) throws Exception {
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(groupManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(groupManageVO.getPageUnit());
+ paginationInfo.setPageSize(groupManageVO.getPageSize());
+
+ groupManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ groupManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ groupManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ groupManageVO.setGroupManageList(egovGroupManageService.selectGroupList(groupManageVO));
+ model.addAttribute("groupList", groupManageVO.getGroupManageList());
+
+ int totCnt = egovGroupManageService.selectGroupListTotCnt(groupManageVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/sec/gmt/EgovGroupManage";
+ }
+
+ /**
+ * 검색조건에 따른 그룹정보를 조회
+ * @param groupManageVO GroupManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/gmt/EgovGroup.do")
+ public String selectGroup(@ModelAttribute("groupManageVO") GroupManageVO groupManageVO,
+ @ModelAttribute("groupManage") GroupManage groupManage,
+ ModelMap model) throws Exception {
+
+ model.addAttribute("groupManage", egovGroupManageService.selectGroup(groupManageVO));
+ return "egovframework/com/sec/gmt/EgovGroupUpdate";
+ }
+
+ /**
+ * 그룹 등록화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/gmt/EgovGroupInsertView.do")
+ public String insertGroupView(@ModelAttribute("groupManage") GroupManage groupManage)
+ throws Exception {
+ return "egovframework/com/sec/gmt/EgovGroupInsert";
+ }
+
+ /**
+ * 그룹 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param groupManage GroupManage
+ * @param groupManageVO GroupManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/gmt/EgovGroupInsert.do")
+ public String insertGroup(@ModelAttribute("groupManage") GroupManage groupManage,
+ @ModelAttribute("groupManageVO") GroupManageVO groupManageVO,
+ BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ beanValidator.validate(groupManage, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sec/gmt/EgovGroupInsert";
+ } else {
+ groupManage.setGroupId(egovGroupIdGnrService.getNextStringId());
+ groupManageVO.setGroupId(groupManage.getGroupId());
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.insert"));
+ model.addAttribute("groupManage", egovGroupManageService.insertGroup(groupManage, groupManageVO));
+ return "forward:/sec/gmt/EgovGroupList.do";
+ }
+ }
+
+ /**
+ * 화면에 조회된 그룹의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param groupManage GroupManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/gmt/EgovGroupUpdate.do")
+ public String updateGroup(@ModelAttribute("groupManage") GroupManage groupManage,
+ BindingResult bindingResult,
+ Model model) throws Exception {
+
+ beanValidator.validate(groupManage, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sec/gmt/EgovGroupUpdate";
+ } else {
+ egovGroupManageService.updateGroup(groupManage);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.update"));
+ return "forward:/sec/gmt/EgovGroupList.do";
+ }
+ }
+
+ /**
+ * 불필요한 그룹정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param groupManage GroupManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/gmt/EgovGroupDelete.do")
+ public String deleteGroup(@ModelAttribute("groupManage") GroupManage groupManage,
+ Model model) throws Exception {
+ egovGroupManageService.deleteGroup(groupManage);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/sec/gmt/EgovGroupList.do";
+ }
+
+ /**
+ * 불필요한 그룹정보 목록을 화면에 조회하여 데이터베이스에서 삭제
+ * @param groupIds String
+ * @param groupManage GroupManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/gmt/EgovGroupListDelete.do")
+ public String deleteGroupList(@RequestParam("groupIds") String groupIds,
+ @ModelAttribute("groupManage") GroupManage groupManage,
+ Model model) throws Exception {
+ String [] strGroupIds = groupIds.split(";");
+ for(int i=0; i<strGroupIds.length;i++) {
+ groupManage.setGroupId(strGroupIds[i]);
+ egovGroupManageService.deleteGroup(groupManage);
+ }
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/sec/gmt/EgovGroupList.do";
+ }
+
+ /**
+ * 그룹팝업 화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/gmt/EgovGroupSearchView.do")
+ public String selectGroupSearchView()
+ throws Exception {
+ return "egovframework/com/sec/gmt/EgovGroupSearch";
+ }
+
+ /**
+ * 시스템사용 목적별 그룹 목록 조회
+ * @param groupManageVO GroupManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/gmt/EgovGroupSearchList.do")
+ public String selectGroupSearchList(@ModelAttribute("groupManageVO") GroupManageVO groupManageVO,
+ ModelMap model) throws Exception {
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(groupManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(groupManageVO.getPageUnit());
+ paginationInfo.setPageSize(groupManageVO.getPageSize());
+
+ groupManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ groupManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ groupManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ groupManageVO.setGroupManageList(egovGroupManageService.selectGroupList(groupManageVO));
+ model.addAttribute("groupList", groupManageVO.getGroupManageList());
+
+ int totCnt = egovGroupManageService.selectGroupListTotCnt(groupManageVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/sec/gmt/EgovGroupSearch";
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/gmt/web/EgovGroupManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/GroupManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/GroupManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/GroupManageDAO.java (revision 7)
@@ -0,0 +1,88 @@
+package egovframework.com.sec.gmt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sec.gmt.service.GroupManage;
+import egovframework.com.sec.gmt.service.GroupManageVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 그룹관리에 대한 DAO 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Repository("groupManageDAO")
+public class GroupManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 검색조건에 따른 그룹정보를 조회
+ * @param groupManageVO GroupManageVO
+ * @return GroupManageVO
+ * @exception Exception
+ */
+ public GroupManageVO selectGroup(GroupManageVO groupManageVO) throws Exception {
+ return (GroupManageVO) selectOne("groupManageDAO.selectGroup", groupManageVO);
+ }
+
+ /**
+ * 시스템사용 목적별 그룹 목록 조회
+ * @param groupManageVO GroupManageVO
+ * @return GroupManageVO
+ * @exception Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<GroupManageVO> selectGroupList(GroupManageVO groupManageVO) throws Exception {
+ return (List<GroupManageVO>) list("groupManageDAO.selectGroupList", groupManageVO);
+ }
+
+ /**
+ * 그룹 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param groupManage GroupManage
+ * @exception Exception
+ */
+ public void insertGroup(GroupManage groupManage) throws Exception {
+ insert("groupManageDAO.insertGroup", groupManage);
+ }
+
+ /**
+ * 화면에 조회된 그룹의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param groupManage GroupManage
+ * @exception Exception
+ */
+ public void updateGroup(GroupManage groupManage) throws Exception {
+ update("groupManageDAO.updateGroup", groupManage);
+ }
+
+ /**
+ * 불필요한 그룹정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param groupManage GroupManage
+ * @exception Exception
+ */
+ public void deleteGroup(GroupManage groupManage) throws Exception {
+ delete("groupManageDAO.deleteGroup", groupManage);
+ }
+
+ /**
+ * 롤목록 총 갯수를 조회한다.
+ * @param groupManageVO GroupManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectGroupListTotCnt(GroupManageVO groupManageVO) throws Exception {
+ return (Integer)selectOne("groupManageDAO.selectGroupListTotCnt", groupManageVO);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/GroupManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/EgovGroupManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/EgovGroupManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/EgovGroupManageServiceImpl.java (revision 7)
@@ -0,0 +1,98 @@
+package egovframework.com.sec.gmt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.sec.gmt.service.EgovGroupManageService;
+import egovframework.com.sec.gmt.service.GroupManage;
+import egovframework.com.sec.gmt.service.GroupManageVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 그룹관리에 관한 ServiceImpl 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Service("egovGroupManageService")
+public class EgovGroupManageServiceImpl extends EgovAbstractServiceImpl implements EgovGroupManageService {
+
+ @Resource(name="groupManageDAO")
+ private GroupManageDAO groupManageDAO;
+
+ /**
+ * 시스템사용 목적별 그룹 목록 조회
+ * @param groupManageVO GroupManageVO
+ * @return List<GroupManageVO>
+ * @exception Exception
+ */
+ public List<GroupManageVO> selectGroupList(GroupManageVO groupManageVO) throws Exception {
+ return groupManageDAO.selectGroupList(groupManageVO);
+ }
+
+ /**
+ * 검색조건에 따른 그룹정보를 조회
+ * @param groupManageVO GroupManageVO
+ * @return GroupManageVO
+ * @exception Exception
+ */
+ public GroupManageVO selectGroup(GroupManageVO groupManageVO) throws Exception {
+ return groupManageDAO.selectGroup(groupManageVO);
+ }
+
+ /**
+ * 그룹 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param groupManage GroupManage
+ * @param groupManageVO GroupManageVO
+ * @return GroupManageVO
+ * @exception Exception
+ */
+ public GroupManageVO insertGroup(GroupManage groupManage, GroupManageVO groupManageVO) throws Exception {
+ groupManageDAO.insertGroup(groupManage);
+ groupManageVO.setGroupId(groupManage.getGroupId());
+ return groupManageDAO.selectGroup(groupManageVO);
+ }
+
+ /**
+ * 화면에 조회된 그룹의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param groupManage GroupManage
+ * @exception Exception
+ */
+ public void updateGroup(GroupManage groupManage) throws Exception {
+ groupManageDAO.updateGroup(groupManage);
+ }
+
+ /**
+ * 불필요한 그룹정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param groupManage GroupManage
+ * @exception Exception
+ */
+ public void deleteGroup(GroupManage groupManage) throws Exception {
+ groupManageDAO.deleteGroup(groupManage);
+ }
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param groupManageVO GroupManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectGroupListTotCnt(GroupManageVO groupManageVO) throws Exception {
+ return groupManageDAO.selectGroupListTotCnt(groupManageVO);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/gmt/service/impl/EgovGroupManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManageVO.java (revision 7)
@@ -0,0 +1,71 @@
+package egovframework.com.sec.gmt.service;
+
+import java.util.List;
+
+
+
+/**
+ * 그룹관리에 대한 Vo 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class GroupManageVO extends GroupManage {
+
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 그룹 목록
+ */
+ List <GroupManageVO> groupManageList;
+ /**
+ * 삭제대상 목록
+ */
+ String[] delYn;
+
+ /**
+ * groupManageList attribute 를 리턴한다.
+ * @return List<GroupManageVO>
+ */
+ public List<GroupManageVO> getGroupManageList() {
+ return groupManageList;
+ }
+
+ /**
+ * groupManageList attribute 값을 설정한다.
+ * @param groupManageList List<GroupManageVO>
+ */
+ public void setGroupManageList(List<GroupManageVO> groupManageList) {
+ this.groupManageList = groupManageList;
+ }
+
+ /**
+ * delYn attribute 를 리턴한다.
+ * @return String[]
+ */
+ public String[] getDelYn() {
+ return delYn;
+ }
+
+ /**
+ * delYn attribute 값을 설정한다.
+ * @param delYn String[]
+ */
+ public void setDelYn(String[] delYn) {
+ this.delYn = delYn;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/gmt/service/EgovGroupManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/gmt/service/EgovGroupManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/gmt/service/EgovGroupManageService.java (revision 7)
@@ -0,0 +1,69 @@
+package egovframework.com.sec.gmt.service;
+
+import java.util.List;
+
+/**
+ * 그룹관리에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public interface EgovGroupManageService {
+
+ /**
+ * 검색조건에 따른 그룹정보를 조회
+ * @param groupManageVO GroupManageVO
+ * @return GroupManageVO
+ * @exception Exception
+ */
+ public GroupManageVO selectGroup(GroupManageVO groupManageVO) throws Exception;
+
+ /**
+ * 시스템사용 목적별 그룹 목록 조회
+ * @param groupManageVO GroupManageVO
+ * @return List<GroupManageVO>
+ * @exception Exception
+ */
+ public List<GroupManageVO> selectGroupList(GroupManageVO groupManageVO) throws Exception;
+
+ /**
+ * 그룹 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param groupManage GroupManage
+ * @param groupManageVO GroupManageVO
+ * @return GroupManageVO
+ * @exception Exception
+ */
+ public GroupManageVO insertGroup(GroupManage groupManage, GroupManageVO groupManageVO) throws Exception;
+ /**
+ * 화면에 조회된 그룹의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param groupManage GroupManage
+ * @exception Exception
+ */
+ public void updateGroup(GroupManage groupManage) throws Exception;
+
+ /**
+ * 불필요한 그룹정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param groupManage GroupManage
+ * @exception Exception
+ */
+ public void deleteGroup(GroupManage groupManage) throws Exception;
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param groupManageVO GroupManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectGroupListTotCnt(GroupManageVO groupManageVO) throws Exception;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/gmt/service/EgovGroupManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManage.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManage.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManage.java (revision 7)
@@ -0,0 +1,121 @@
+package egovframework.com.sec.gmt.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 그룹관리에 대한 model 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class GroupManage extends ComDefaultVO {
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 그룹 관리
+ */
+ private GroupManage groupManage;
+ /**
+ * 그룹 ID
+ */
+ private String groupId;
+ /**
+ * 그룹명
+ */
+ private String groupNm;
+ /**
+ * 그룹등록일시
+ */
+ private String groupCreatDe;
+ /**
+ * 그룹설명
+ */
+ private String groupDc;
+
+ /**
+ * groupManage attribute 를 리턴한다.
+ * @return GroupManage
+ */
+ public GroupManage getGroupManage() {
+ return groupManage;
+ }
+ /**
+ * groupManage attribute 값을 설정한다.
+ * @param groupManage GroupManage
+ */
+ public void setGroupManage(GroupManage groupManage) {
+ this.groupManage = groupManage;
+ }
+ /**
+ * groupId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getGroupId() {
+ return groupId;
+ }
+ /**
+ * groupId attribute 값을 설정한다.
+ * @param groupId String
+ */
+ public void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+ /**
+ * groupNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getGroupNm() {
+ return groupNm;
+ }
+ /**
+ * groupNm attribute 값을 설정한다.
+ * @param groupNm String
+ */
+ public void setGroupNm(String groupNm) {
+ this.groupNm = groupNm;
+ }
+ /**
+ * groupCreatDe attribute 를 리턴한다.
+ * @return String
+ */
+ public String getGroupCreatDe() {
+ return groupCreatDe;
+ }
+ /**
+ * groupCreatDe attribute 값을 설정한다.
+ * @param groupCreatDe String
+ */
+ public void setGroupCreatDe(String groupCreatDe) {
+ this.groupCreatDe = groupCreatDe;
+ }
+ /**
+ * groupDc attribute 를 리턴한다.
+ * @return String
+ */
+ public String getGroupDc() {
+ return groupDc;
+ }
+ /**
+ * groupDc attribute 값을 설정한다.
+ * @param groupDc String
+ */
+ public void setGroupDc(String groupDc) {
+ this.groupDc = groupDc;
+ }
+
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/gmt/service/GroupManage.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/pki/web/EgovCryptoController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/pki/web/EgovCryptoController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/pki/web/EgovCryptoController.java (revision 7)
@@ -0,0 +1,124 @@
+package egovframework.com.sec.pki.web;
+
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.rte.fdl.cryptography.EgovEnvCryptoService;
+import egovframework.rte.fdl.cryptography.EgovPasswordEncoder;
+
+/**
+ * 암호화/복호화 관한 controller 클래스를 정의한다.
+ * @author 공통서비스 개발팀 신용호
+ * @since 2018.12.03
+ * @version 3.8
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2018.12.03 신용호 최초 생성
+ * </pre>
+ */
+
+@Controller
+public class EgovCryptoController {
+
+ /** 로그설정 */
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovCryptoController.class);
+
+ /** 암호화서비스 */
+ @Resource(name = "egovEnvCryptoService")
+ EgovEnvCryptoService cryptoService;
+
+ @Resource(name = "egovEnvPasswordEncoderService")
+ EgovPasswordEncoder egovPasswordEncoder;
+
+ /** EgovMessageSource */
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ /**
+ * 암호화/복호화 입력 및 요청 페이지를 호출한다.
+ *
+ * @return
+ */
+ @IncludedInfo(name="암호화/복호화", listUrl="/sec/pki/EgovCryptoInfo.do", order = 2200 ,gid = 90)
+ @RequestMapping(value="/sec/pki/EgovCryptoInfo.do")
+ public String displayCryptoInfo( @RequestParam Map<?, ?> commandMap,
+ ModelMap model) throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ String plainText = (String)commandMap.get("plainText");
+
+ if ( plainText != null ) {
+
+ int plainTextLen = plainText.length();
+ String cryptText = encrypt(plainText);
+ String decryptText = decrypt(cryptText);
+ int decryptTextLen = decryptText.length();
+
+ model.addAttribute("plainText", plainText);
+ model.addAttribute("plainTextLen", plainTextLen);
+ model.addAttribute("cryptText", cryptText);
+ model.addAttribute("decryptText", decryptText);
+ model.addAttribute("decryptTextLen", decryptTextLen);
+ }
+
+ return "egovframework/com/sec/pki/EgovCryptoInfo";
+ }
+
+ /**
+ * 암호화
+ *
+ * @param encrypt
+ */
+ private String encrypt(String encrypt) {
+
+ try {
+ //return cryptoService.encrypt(encrypt); // Handles URLEncoding.
+ return cryptoService.encryptNone(encrypt); // Does not handle URLEncoding.
+ } catch(IllegalArgumentException e) {
+ LOGGER.error("[IllegalArgumentException] Try/Catch...usingParameters Runing : "+ e.getMessage());
+ } catch (Exception e) {
+ LOGGER.error("[" + e.getClass() +"] :" + e.getMessage());
+ }
+ return encrypt;
+ }
+
+ /**
+ * 복호화
+ *
+ * @param decrypt
+ */
+ private String decrypt(String decrypt){
+
+ try {
+ //return cryptoService.decrypt(decrypt); // Handles URLDecoding.
+ return cryptoService.decryptNone(decrypt); // Does not handle URLDecoding.
+ } catch(IllegalArgumentException e) {
+ LOGGER.error("[IllegalArgumentException] Try/Catch...usingParameters Runing : "+ e.getMessage());
+ } catch (Exception e) {
+ LOGGER.error("[" + e.getClass() +"] :" + e.getMessage());
+ }
+ return decrypt;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/pki/web/EgovCryptoController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorRoleController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorRoleController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorRoleController.java (revision 7)
@@ -0,0 +1,134 @@
+package egovframework.com.sec.ram.web;
+
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.sec.ram.service.AuthorRoleManage;
+import egovframework.com.sec.ram.service.AuthorRoleManageVO;
+import egovframework.com.sec.ram.service.EgovAuthorRoleManageService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 권한별 롤관리에 관한 controller 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2011.09.07 서준식 롤 등록시 이미 등록된 경우 데이터 중복 에러 발생 문제 수정
+ * </pre>
+ */
+@Controller
+public class EgovAuthorRoleController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovAuthorRoleController.class);
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "egovAuthorRoleManageService")
+ private EgovAuthorRoleManageService egovAuthorRoleManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /**
+ * 권한 롤 관계 화면 이동
+ * @return "egovframework/com/sec/ram/EgovDeptAuthorList"
+ * @exception Exception
+ */
+ @RequestMapping("/sec/ram/EgovAuthorRoleListView.do")
+ public String selectAuthorRoleListView() throws Exception {
+
+ return "egovframework/com/sec/ram/EgovAuthorRoleManage";
+ }
+
+ /**
+ * 권한별 할당된 롤 목록 조회
+ *
+ * @param authorRoleManageVO AuthorRoleManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/ram/EgovAuthorRoleList.do")
+ public String selectAuthorRoleList(@ModelAttribute("authorRoleManageVO") AuthorRoleManageVO authorRoleManageVO,
+ ModelMap model) throws Exception {
+
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(authorRoleManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(authorRoleManageVO.getPageUnit());
+ paginationInfo.setPageSize(authorRoleManageVO.getPageSize());
+
+ authorRoleManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ authorRoleManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ authorRoleManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ authorRoleManageVO.setAuthorRoleList(egovAuthorRoleManageService.selectAuthorRoleList(authorRoleManageVO));
+ model.addAttribute("authorRoleList", authorRoleManageVO.getAuthorRoleList());
+ model.addAttribute("searchVO", authorRoleManageVO);
+
+ int totCnt = egovAuthorRoleManageService.selectAuthorRoleListTotCnt(authorRoleManageVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/sec/ram/EgovAuthorRoleManage";
+ }
+
+ /**
+ * 권한정보에 롤을 할당하여 데이터베이스에 등록
+ * @param authorCode String
+ * @param roleCodes String
+ * @param regYns String
+ * @param authorRoleManage AuthorRoleManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/ram/EgovAuthorRoleInsert.do")
+ public String insertAuthorRole(@RequestParam("authorCode") String authorCode,
+ @RequestParam("roleCodes") String roleCodes,
+ @RequestParam("regYns") String regYns,
+ @RequestParam Map<?, ?> commandMap,
+ @ModelAttribute("authorRoleManage") AuthorRoleManage authorRoleManage,
+ ModelMap model) throws Exception {
+
+ String [] strRoleCodes = roleCodes.split(";");
+ String [] strRegYns = regYns.split(";");
+
+ authorRoleManage.setRoleCode(authorCode);
+
+ for(int i=0; i<strRoleCodes.length;i++) {
+
+ authorRoleManage.setRoleCode(strRoleCodes[i]);
+ authorRoleManage.setRegYn(strRegYns[i]);
+ if(strRegYns[i].equals("Y")){
+ egovAuthorRoleManageService.deleteAuthorRole(authorRoleManage);//2011.09.07
+ egovAuthorRoleManageService.insertAuthorRole(authorRoleManage);
+ }else {
+ egovAuthorRoleManageService.deleteAuthorRole(authorRoleManage);
+ }
+ }
+
+ return "redirect:/sec/ram/EgovAuthorRoleList.do?searchKeyword="+authorCode;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorRoleController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorManageController.java (revision 7)
@@ -0,0 +1,232 @@
+package egovframework.com.sec.ram.web;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.SessionVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sec.ram.service.AuthorManage;
+import egovframework.com.sec.ram.service.AuthorManageVO;
+import egovframework.com.sec.ram.service.EgovAuthorManageService;
+
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.SessionAttributes;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+/**
+ * 권한관리에 관한 controller 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2011.8.26 정진오 IncludedInfo annotation 추가s
+ *
+ * </pre>
+ */
+
+
+@Controller
+@SessionAttributes(types=SessionVO.class)
+public class EgovAuthorManageController {
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "egovAuthorManageService")
+ private EgovAuthorManageService egovAuthorManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 권한 목록화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/ram/EgovAuthorListView.do")
+ public String selectAuthorListView()
+ throws Exception {
+ return "egovframework/com/sec/ram/EgovAuthorManage";
+ }
+
+ /**
+ * 권한 목록을 조회한다
+ * @param authorManageVO AuthorManageVO
+ * @return String
+ * @exception Exception
+ */
+ @IncludedInfo(name="권한관리", listUrl="/sec/ram/EgovAuthorList.do", order = 60,gid = 20)
+ @RequestMapping(value="/sec/ram/EgovAuthorList.do")
+ public String selectAuthorList(@ModelAttribute("authorManageVO") AuthorManageVO authorManageVO,
+ ModelMap model)
+ throws Exception {
+
+ /** EgovPropertyService.sample */
+ //authorManageVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ //authorManageVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(authorManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(authorManageVO.getPageUnit());
+ paginationInfo.setPageSize(authorManageVO.getPageSize());
+
+ authorManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ authorManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ authorManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO));
+ model.addAttribute("authorList", authorManageVO.getAuthorManageList());
+
+ int totCnt = egovAuthorManageService.selectAuthorListTotCnt(authorManageVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/sec/ram/EgovAuthorManage";
+ }
+
+ /**
+ * 권한 세부정보를 조회한다.
+ * @param authorCode String
+ * @param authorManageVO AuthorManageVO
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/ram/EgovAuthor.do")
+ public String selectAuthor(@RequestParam("authorCode") String authorCode,
+ @ModelAttribute("authorManageVO") AuthorManageVO authorManageVO,
+ ModelMap model) throws Exception {
+
+ authorManageVO.setAuthorCode(authorCode);
+
+ model.addAttribute("authorManage", egovAuthorManageService.selectAuthor(authorManageVO));
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+ return "egovframework/com/sec/ram/EgovAuthorUpdate";
+ }
+
+ /**
+ * 권한 등록화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/ram/EgovAuthorInsertView.do")
+ public String insertAuthorView(@ModelAttribute("authorManage") AuthorManage authorManage)
+ throws Exception {
+ return "egovframework/com/sec/ram/EgovAuthorInsert";
+ }
+
+ /**
+ * 권한 세부정보를 등록한다.
+ * @param authorManage AuthorManage
+ * @param bindingResult BindingResult
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/ram/EgovAuthorInsert.do")
+ public String insertAuthor(@ModelAttribute("authorManage") AuthorManage authorManage,
+ BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ beanValidator.validate(authorManage, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sec/ram/EgovAuthorInsert";
+ } else {
+ egovAuthorManageService.insertAuthor(authorManage);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.insert"));
+ return "forward:/sec/ram/EgovAuthorList.do";
+ }
+ }
+
+ /**
+ * 권한 세부정보를 수정한다.
+ * @param authorManage AuthorManage
+ * @param bindingResult BindingResult
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/ram/EgovAuthorUpdate.do")
+ public String updateAuthor(@ModelAttribute("authorManage") AuthorManage authorManage,
+ BindingResult bindingResult,
+ Model model) throws Exception {
+
+ beanValidator.validate(authorManage, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sec/ram/EgovAuthorUpdate";
+ } else {
+ egovAuthorManageService.updateAuthor(authorManage);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.update"));
+ return "forward:/sec/ram/EgovAuthorList.do";
+ }
+ }
+
+ /**
+ * 권한 세부정보를 삭제한다.
+ * @param authorManage AuthorManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/ram/EgovAuthorDelete.do")
+ public String deleteAuthor(@ModelAttribute("authorManage") AuthorManage authorManage,
+ Model model) throws Exception {
+
+ egovAuthorManageService.deleteAuthor(authorManage);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/sec/ram/EgovAuthorList.do";
+ }
+
+ /**
+ * 권한목록을 삭제한다.
+ * @param authorCodes String
+ * @param authorManage AuthorManage
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/sec/ram/EgovAuthorListDelete.do")
+ public String deleteAuthorList(@RequestParam("authorCodes") String authorCodes,
+ @ModelAttribute("authorManage") AuthorManage authorManage,
+ Model model) throws Exception {
+
+ String [] strAuthorCodes = authorCodes.split(";");
+ for(int i=0; i<strAuthorCodes.length;i++) {
+ authorManage.setAuthorCode(strAuthorCodes[i]);
+ egovAuthorManageService.deleteAuthor(authorManage);
+ }
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/sec/ram/EgovAuthorList.do";
+ }
+
+ /**
+ * 권한제한 화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping("/sec/ram/accessDenied.do")
+ public String accessDenied()
+ throws Exception {
+ return "egovframework/com/sec/accessDenied";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/web/EgovAuthorManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManage.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManage.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManage.java (revision 7)
@@ -0,0 +1,124 @@
+package egovframework.com.sec.ram.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 권한관리에 대한 model 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class AuthorManage extends ComDefaultVO {
+
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 권한관리
+ */
+ private AuthorManage authorManage;
+ /**
+ * 권한코드
+ */
+ private String authorCode;
+ /**
+ * 권한등록일자
+ */
+ private String authorCreatDe;
+ /**
+ * 권한코드설명
+ */
+ private String authorDc;
+ /**
+ * 권한 명
+ */
+ private String authorNm;
+
+ /**
+ * authorManage attribute 를 리턴한다.
+ * @return AuthorManage
+ */
+ public AuthorManage getAuthorManage() {
+ return authorManage;
+ }
+ /**
+ * authorManage attribute 값을 설정한다.
+ * @param authorManage AuthorManage
+ */
+ public void setAuthorManage(AuthorManage authorManage) {
+ this.authorManage = authorManage;
+ }
+ /**
+ * authorCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ /**
+ * authorCode attribute 값을 설정한다.
+ * @param authorCode String
+ */
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+ /**
+ * authorCreatDe attribute 를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCreatDe() {
+ return authorCreatDe;
+ }
+ /**
+ * authorCreatDe attribute 값을 설정한다.
+ * @param authorCreatDe String
+ */
+ public void setAuthorCreatDe(String authorCreatDe) {
+ this.authorCreatDe = authorCreatDe;
+ }
+ /**
+ * authorDc attribute 를 리턴한다.
+ * @return String
+ */
+ public String getAuthorDc() {
+ return authorDc;
+ }
+ /**
+ * authorDc attribute 값을 설정한다.
+ * @param authorDc String
+ */
+ public void setAuthorDc(String authorDc) {
+ this.authorDc = authorDc;
+ }
+ /**
+ * authorNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getAuthorNm() {
+ return authorNm;
+ }
+ /**
+ * authorNm attribute 값을 설정한다.
+ * @param authorNm String
+ */
+ public void setAuthorNm(String authorNm) {
+ this.authorNm = authorNm;
+ }
+
+
+
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManage.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorRoleManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorRoleManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorRoleManageDAO.java (revision 7)
@@ -0,0 +1,71 @@
+package egovframework.com.sec.ram.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sec.ram.service.AuthorRoleManage;
+import egovframework.com.sec.ram.service.AuthorRoleManageVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 권한별 롤관리에 대한 DAO 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- --------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2021.02-09 신용호 updateAuthorRole 삭제
+ *
+ * </pre>
+ */
+
+@Repository("authorRoleManageDAO")
+public class AuthorRoleManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 권한 롤 관계정보 목록 조회
+ * @param authorRoleManageVO AuthorRoleManageVO
+ * @return List<AuthorRoleManageVO>
+ * @exception Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<AuthorRoleManageVO> selectAuthorRoleList(AuthorRoleManageVO authorRoleManageVO) throws Exception {
+ return (List<AuthorRoleManageVO>) list("authorRoleManageDAO.selectAuthorRoleList", authorRoleManageVO);
+ }
+
+ /**
+ * 권한 롤 관계정보를 화면에서 입력하여 입력항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param authorRoleManage AuthorRoleManage
+ * @exception Exception
+ */
+ public void insertAuthorRole(AuthorRoleManage authorRoleManage) throws Exception {
+ insert("authorRoleManageDAO.insertAuthorRole", authorRoleManage);
+ }
+
+ /**
+ * 권한 롤 관계정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param authorRoleManage AuthorRoleManage
+ * @exception Exception
+ */
+ public void deleteAuthorRole(AuthorRoleManage authorRoleManage) throws Exception {
+ delete("authorRoleManageDAO.deleteAuthorRole", authorRoleManage);
+ }
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param authorRoleManageVO AuthorRoleManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorRoleListTotCnt(AuthorRoleManageVO authorRoleManageVO) throws Exception {
+ return (Integer)selectOne("authorRoleManageDAO.selectAuthorRoleListTotCnt", authorRoleManageVO);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorRoleManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorManageServiceImpl.java (revision 7)
@@ -0,0 +1,107 @@
+package egovframework.com.sec.ram.service.impl;
+
+import java.util.List;
+
+import egovframework.com.sec.ram.service.AuthorManage;
+import egovframework.com.sec.ram.service.AuthorManageVO;
+import egovframework.com.sec.ram.service.EgovAuthorManageService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 권한관리에 관한 ServiceImpl 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Service("egovAuthorManageService")
+public class EgovAuthorManageServiceImpl extends EgovAbstractServiceImpl implements EgovAuthorManageService {
+
+ @Resource(name="authorManageDAO")
+ private AuthorManageDAO authorManageDAO;
+
+ /**
+ * 권한 목록을 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return List<AuthorManageVO>
+ * @exception Exception
+ */
+ public List<AuthorManageVO> selectAuthorList(AuthorManageVO authorManageVO) throws Exception {
+ return authorManageDAO.selectAuthorList(authorManageVO);
+ }
+
+ /**
+ * 권한을 등록한다.
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void insertAuthor(AuthorManage authorManage) throws Exception {
+ authorManageDAO.insertAuthor(authorManage);
+ }
+
+ /**
+ * 권한을 수정한다.
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void updateAuthor(AuthorManage authorManage) throws Exception {
+ authorManageDAO.updateAuthor(authorManage);
+ }
+
+ /**
+ * 권한을 삭제한다.
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void deleteAuthor(AuthorManage authorManage) throws Exception {
+ authorManageDAO.deleteAuthor(authorManage);
+ }
+
+ /**
+ * 권한을 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return AuthorManageVO
+ * @exception Exception
+ */
+ public AuthorManageVO selectAuthor(AuthorManageVO authorManageVO) throws Exception {
+ AuthorManageVO resultVO = authorManageDAO.selectAuthor(authorManageVO);
+ if (resultVO == null)
+ throw processException("info.nodata.msg");
+ return resultVO;
+ }
+
+ /**
+ * 권한 목록 카운트를 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorListTotCnt(AuthorManageVO authorManageVO) throws Exception {
+ return authorManageDAO.selectAuthorListTotCnt(authorManageVO);
+ }
+
+ /**
+ * 모든 권한목록을 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return List<AuthorManageVO>
+ * @exception Exception
+ */
+ public List<AuthorManageVO> selectAuthorAllList(AuthorManageVO authorManageVO) throws Exception {
+ return authorManageDAO.selectAuthorAllList(authorManageVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovUserDetailsSecurityServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovUserDetailsSecurityServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovUserDetailsSecurityServiceImpl.java (revision 7)
@@ -0,0 +1,65 @@
+package egovframework.com.sec.ram.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.EgovUserDetailsService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
+
+/**
+ *권한관리 인증에 대한 ServiceImpl 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class EgovUserDetailsSecurityServiceImpl extends EgovAbstractServiceImpl implements EgovUserDetailsService {
+
+
+ /**
+ * 인증된 사용자객체를 VO형식으로 가져온다.
+ * @return Object - 사용자 ValueObject
+ */
+ public Object getAuthenticatedUser() {
+
+ // 이 메소드의 경우 인증이 되지 않더라고 null을 리턴하지 않기 때문에
+ // 명시적으로 인증되지 않은 경우 null을 리턴하도록 수정함
+
+ if (EgovUserDetailsHelper.isAuthenticated()) {
+ return EgovUserDetailsHelper.getAuthenticatedUser();
+ }
+
+ return null;
+ }
+
+
+ /**
+ * 인증된 사용자의 권한 정보를 가져온다.
+ * 예) [ROLE_ADMIN, ROLE_USER, ROLE_A, ROLE_B, ROLE_RESTRICTED, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_ANONYMOUSLY]
+ * @return List - 사용자 권한정보 목록
+ */
+ public List<String> getAuthorities() {
+ return EgovUserDetailsHelper.getAuthorities();
+ }
+
+ /**
+ * 인증된 사용자 여부를 체크한다.
+ * @return Boolean - 인증된 사용자 여부(TRUE / FALSE)
+ */
+
+ public Boolean isAuthenticated() {
+ return EgovUserDetailsHelper.isAuthenticated();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovUserDetailsSecurityServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorRoleManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorRoleManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorRoleManageServiceImpl.java (revision 7)
@@ -0,0 +1,76 @@
+package egovframework.com.sec.ram.service.impl;
+
+import java.util.List;
+
+import egovframework.com.sec.ram.service.AuthorRoleManage;
+import egovframework.com.sec.ram.service.AuthorRoleManageVO;
+import egovframework.com.sec.ram.service.EgovAuthorRoleManageService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 권한별 롤관리에 대한 DAO 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- --------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2021.02-09 신용호 updateAuthorRole 삭제
+ *
+ * </pre>
+ */
+
+@Service("egovAuthorRoleManageService")
+public class EgovAuthorRoleManageServiceImpl extends EgovAbstractServiceImpl implements EgovAuthorRoleManageService {
+
+ @Resource(name="authorRoleManageDAO")
+ private AuthorRoleManageDAO authorRoleManageDAO;
+
+ /**
+ * 권한 롤 관계정보 목록 조회
+ * @param authorRoleManageVO AuthorRoleManageVO
+ * @return List<AuthorRoleManageVO>
+ * @exception Exception
+ */
+ public List<AuthorRoleManageVO> selectAuthorRoleList(AuthorRoleManageVO authorRoleManageVO) throws Exception {
+ return authorRoleManageDAO.selectAuthorRoleList(authorRoleManageVO);
+ }
+
+ /**
+ * 권한 롤 관계정보를 화면에서 입력하여 입력항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param authorRoleManage AuthorRoleManage
+ * @exception Exception
+ */
+ public void insertAuthorRole(AuthorRoleManage authorRoleManage) throws Exception {
+ authorRoleManageDAO.insertAuthorRole(authorRoleManage);
+ }
+
+ /**
+ * 권한 롤 관계정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param authorRoleManage AuthorRoleManage
+ * @exception Exception
+ */
+ public void deleteAuthorRole(AuthorRoleManage authorRoleManage) throws Exception {
+ authorRoleManageDAO.deleteAuthorRole(authorRoleManage);
+ }
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param authorRoleManageVO AuthorRoleManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorRoleListTotCnt(AuthorRoleManageVO authorRoleManageVO) throws Exception {
+ return authorRoleManageDAO.selectAuthorRoleListTotCnt(authorRoleManageVO);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/EgovAuthorRoleManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorManageDAO.java (revision 7)
@@ -0,0 +1,99 @@
+package egovframework.com.sec.ram.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sec.ram.service.AuthorManage;
+import egovframework.com.sec.ram.service.AuthorManageVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 권한관리에 대한 DAO 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+@Repository("authorManageDAO")
+public class AuthorManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 권한목록을 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return List<AuthorManageVO>
+ * @exception Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<AuthorManageVO> selectAuthorList(AuthorManageVO authorManageVO) throws Exception {
+ return (List<AuthorManageVO>) list("authorManageDAO.selectAuthorList", authorManageVO);
+ }
+
+ /**
+ * 권한을 등록한다.
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void insertAuthor(AuthorManage authorManage) throws Exception {
+ insert("authorManageDAO.insertAuthor", authorManage);
+ }
+
+ /**
+ * 권한을 수정한다.
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void updateAuthor(AuthorManage authorManage) throws Exception {
+ update("authorManageDAO.updateAuthor", authorManage);
+ }
+
+ /**
+ * 권한을 삭제한다.
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void deleteAuthor(AuthorManage authorManage) throws Exception {
+ delete("authorManageDAO.deleteAuthor", authorManage);
+ }
+
+ /**
+ * 권한을 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return AuthorManageVO
+ * @exception Exception
+ */
+ public AuthorManageVO selectAuthor(AuthorManageVO authorManageVO) throws Exception {
+ return (AuthorManageVO) selectOne("authorManageDAO.selectAuthor", authorManageVO);
+ }
+
+ /**
+ * 권한목록 총 갯수를 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorListTotCnt(AuthorManageVO authorManageVO) throws Exception {
+ return (Integer)selectOne("authorManageDAO.selectAuthorListTotCnt", authorManageVO);
+ }
+
+ /**
+ * 모든 권한목록을 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return List<AuthorManageVO>
+ * @exception Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<AuthorManageVO> selectAuthorAllList(AuthorManageVO authorManageVO) throws Exception {
+ return (List<AuthorManageVO>) list("authorManageDAO.selectAuthorAllList", authorManageVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/impl/AuthorManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManageVO.java (revision 7)
@@ -0,0 +1,46 @@
+package egovframework.com.sec.ram.service;
+
+import java.util.List;
+
+/**
+ * 권한별 롤 관리에 대한 Vo 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class AuthorRoleManageVO extends AuthorRoleManage {
+
+ private static final long serialVersionUID = 1L;
+
+ List <AuthorRoleManageVO> authorRoleList;
+
+ /**
+ * authorRoleList attribute 를 리턴한다.
+ * @return List<AuthorRoleManageVO>
+ */
+ public List<AuthorRoleManageVO> getAuthorRoleList() {
+ return authorRoleList;
+ }
+
+ /**
+ * authorRoleList attribute 값을 설정한다.
+ * @param authorRoleList List<AuthorRoleManageVO>
+ */
+ public void setAuthorRoleList(List<AuthorRoleManageVO> authorRoleList) {
+ this.authorRoleList = authorRoleList;
+ }
+
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorManageService.java (revision 7)
@@ -0,0 +1,75 @@
+package egovframework.com.sec.ram.service;
+
+import java.util.List;
+
+/**
+ * 권한관리에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public interface EgovAuthorManageService {
+ /**
+ * 모든 권한목록을 조회한다.
+ * @param authorManageVO AuthorManageVO
+ * @return List<AuthorManageVO>
+ * @exception Exception
+ */
+ public List<AuthorManageVO> selectAuthorAllList(AuthorManageVO authorManageVO) throws Exception;
+
+ /**
+ * 시스템 사용자중 불필요한 시스템권한정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void deleteAuthor(AuthorManage authorManage) throws Exception;
+
+ /**
+ * 사용자의 시스테접근권한를 화면에서 입력하여 입력항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void insertAuthor(AuthorManage authorManage) throws Exception;
+
+ /**
+ * 개별사용자에게 할당된 권한 조회
+ * @param authorManageVO AuthorManageVO
+ * @exception Exception
+ */
+ public AuthorManageVO selectAuthor(AuthorManageVO authorManageVO) throws Exception;
+
+ /**
+ * 개별사용자에게 할당된 권한리스트 조회
+ * @param authorManageVO AuthorManageVO
+ * @return List<AuthorManageVO>
+ * @exception Exception
+ */
+ public List<AuthorManageVO> selectAuthorList(AuthorManageVO authorManageVO) throws Exception;
+
+ /**
+ * 화면에 조회된 사용자권한정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param authorManage AuthorManage
+ * @exception Exception
+ */
+ public void updateAuthor(AuthorManage authorManage) throws Exception;
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param authorManageVO AuthorManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorListTotCnt(AuthorManageVO authorManageVO) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManageVO.java (revision 7)
@@ -0,0 +1,47 @@
+package egovframework.com.sec.ram.service;
+
+import java.util.List;
+
+/**
+ * 권한관리에 대한 Vo 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class AuthorManageVO extends AuthorManage {
+
+ private static final long serialVersionUID = 1L;
+
+ List <AuthorManageVO> authorManageList;
+
+
+ /**
+ * authorManageList attribute 를 리턴한다.
+ * @return List<AuthorManageVO>
+ */
+ public List<AuthorManageVO> getAuthorManageList() {
+ return authorManageList;
+ }
+
+ /**
+ * authorManageList attribute 값을 설정한다.
+ * @param authorManageList List<AuthorManageVO>
+ */
+ public void setAuthorManageList(List<AuthorManageVO> authorManageList) {
+ this.authorManageList = authorManageList;
+ }
+
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManage.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManage.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManage.java (revision 7)
@@ -0,0 +1,210 @@
+package egovframework.com.sec.ram.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 권한별 롤 관리에 대한 model 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ *
+ * </pre>
+ */
+
+public class AuthorRoleManage extends ComDefaultVO {
+
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 권한 롤 관리
+ */
+ private AuthorRoleManage authorRole;
+ /**
+ * 권한코드
+ */
+ private String authorCode;
+ /**
+ * 롤코드
+ */
+ private String roleCode;
+ /**
+ * 롤명
+ */
+ private String roleNm;
+ /**
+ * 롤 패턴
+ */
+ private String rolePtn;
+ /**
+ * 롤 설명
+ */
+ private String roleDc;
+ /**
+ * 롤 타입
+ */
+ private String roleTyp;
+ /**
+ * 롤 순서정렬
+ */
+ private String roleSort;
+ /**
+ * 롤 등록여부
+ */
+ private String regYn;
+ /**
+ * 등록일자
+ */
+ private String creatDt;
+ /**
+ * authorRole attribute 를 리턴한다.
+ * @return AuthorRoleManage
+ */
+ public AuthorRoleManage getAuthorRole() {
+ return authorRole;
+ }
+ /**
+ * authorRole attribute 값을 설정한다.
+ * @param authorRole AuthorRoleManage
+ */
+ public void setAuthorRole(AuthorRoleManage authorRole) {
+ this.authorRole = authorRole;
+ }
+ /**
+ * authorCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ /**
+ * authorCode attribute 값을 설정한다.
+ * @param authorCode String
+ */
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+ /**
+ * roleCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleCode() {
+ return roleCode;
+ }
+ /**
+ * roleCode attribute 값을 설정한다.
+ * @param roleCode String
+ */
+ public void setRoleCode(String roleCode) {
+ this.roleCode = roleCode;
+ }
+ /**
+ * roleNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleNm() {
+ return roleNm;
+ }
+ /**
+ * roleNm attribute 값을 설정한다.
+ * @param roleNm String
+ */
+ public void setRoleNm(String roleNm) {
+ this.roleNm = roleNm;
+ }
+ /**
+ * rolePtn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRolePtn() {
+ return rolePtn;
+ }
+ /**
+ * rolePtn attribute 값을 설정한다.
+ * @param rolePtn String
+ */
+ public void setRolePtn(String rolePtn) {
+ this.rolePtn = rolePtn;
+ }
+ /**
+ * roleDc attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleDc() {
+ return roleDc;
+ }
+ /**
+ * roleDc attribute 값을 설정한다.
+ * @param roleDc String
+ */
+ public void setRoleDc(String roleDc) {
+ this.roleDc = roleDc;
+ }
+ /**
+ * roleTyp attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleTyp() {
+ return roleTyp;
+ }
+ /**
+ * roleTyp attribute 값을 설정한다.
+ * @param roleTyp String
+ */
+ public void setRoleTyp(String roleTyp) {
+ this.roleTyp = roleTyp;
+ }
+ /**
+ * roleSort attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRoleSort() {
+ return roleSort;
+ }
+ /**
+ * roleSort attribute 값을 설정한다.
+ * @param roleSort String
+ */
+ public void setRoleSort(String roleSort) {
+ this.roleSort = roleSort;
+ }
+ /**
+ * regYn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getRegYn() {
+ return regYn;
+ }
+ /**
+ * regYn attribute 값을 설정한다.
+ * @param regYn String
+ */
+ public void setRegYn(String regYn) {
+ this.regYn = regYn;
+ }
+ /**
+ * creatDt attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCreatDt() {
+ return creatDt;
+ }
+ /**
+ * creatDt attribute 값을 설정한다.
+ * @param creatDt String
+ */
+ public void setCreatDt(String creatDt) {
+ this.creatDt = creatDt;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/AuthorRoleManage.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorRoleManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorRoleManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorRoleManageService.java (revision 7)
@@ -0,0 +1,55 @@
+package egovframework.com.sec.ram.service;
+
+import java.util.List;
+
+/**
+ * 권한별 롤 관리에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- --------- ---------------------------
+ * 2009.03.20 이문준 최초 생성
+ * 2021.02-09 신용호 updateAuthorRole 삭제
+ *
+ * </pre>
+ */
+
+public interface EgovAuthorRoleManageService {
+
+ /**
+ * 권한 롤 관계정보 목록 조회
+ * @param authorRoleManageVO AuthorRoleManageVO
+ * @return List<AuthorRoleManageVO>
+ * @exception Exception
+ */
+ public List<AuthorRoleManageVO> selectAuthorRoleList(AuthorRoleManageVO authorRoleManageVO) throws Exception;
+
+ /**
+ * 권한 롤 관계정보를 화면에서 입력하여 입력항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param authorRoleManage AuthorRoleManage
+ * @exception Exception
+ */
+ public void insertAuthorRole(AuthorRoleManage authorRoleManage) throws Exception;
+
+ /**
+ * 권한 롤 관계정보를 화면에 조회하여 데이터베이스에서 삭제
+ * @param authorRoleManage AuthorRoleManage
+ * @exception Exception
+ */
+ public void deleteAuthorRole(AuthorRoleManage authorRoleManage) throws Exception;
+
+ /**
+ * 목록조회 카운트를 반환한다
+ * @param authorRoleManageVO AuthorRoleManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectAuthorRoleListTotCnt(AuthorRoleManageVO authorRoleManageVO) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sec/ram/service/EgovAuthorRoleManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java (revision 7)
@@ -0,0 +1,181 @@
+package egovframework.com.cmm.config;
+
+import javax.servlet.FilterRegistration;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+import org.springframework.web.filter.DelegatingFilterProxy;
+import org.springframework.web.filter.HiddenHttpMethodFilter;
+import org.springframework.web.multipart.support.MultipartFilter;
+import org.springframework.web.servlet.DispatcherServlet;
+
+import egovframework.com.cmm.filter.HTMLTagFilter;
+import egovframework.com.cmm.filter.SessionTimeoutCookieFilter;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter;
+import egovframework.com.sec.security.filter.EgovSpringSecurityLogoutFilter;
+import egovframework.com.uat.uap.filter.EgovLoginPolicyFilter;
+
+
+/**
+ * EgovWebApplicationInitializer 클래스
+ * <Notice>
+ * 사용자 인증 권한처리를 분리(session, spring security) 하기 위해서 web.xml의 기능을
+ * Servlet3.x WebApplicationInitializer 기능으로 처리
+ * <Disclaimer>
+ * N/A
+ *
+ * @author 장동한
+ * @since 2016.06.23
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2016.06.23 장동한 최초 생성
+ * 2018.10.02 신용호 Facebook 관련 HiddenHttpMethodFilter 추가
+ * 2018.10.26 신용호 EgovLoginPolicyFilter 추가 (IP접근처리)
+ * 2018.12.03 신용호 springMultipartFilter,HTMLTagFilter 추가 (XSS방지처리)
+ * </pre>
+ */
+
+
+public class EgovWebApplicationInitializer implements WebApplicationInitializer {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovWebApplicationInitializer.class);
+ @Override
+ public void onStartup(ServletContext servletContext) throws ServletException {
+ LOGGER.debug("EgovWebApplicationInitializer START-============================================");
+
+ //-------------------------------------------------------------
+ // Egov Web ServletContextListener 설정
+ //-------------------------------------------------------------
+ servletContext.addListener(new egovframework.com.cmm.context.EgovWebServletContextListener());
+
+ //-------------------------------------------------------------
+ // Spring CharacterEncodingFilter 설정
+ //-------------------------------------------------------------
+ FilterRegistration.Dynamic characterEncoding = servletContext.addFilter("encodingFilter", new org.springframework.web.filter.CharacterEncodingFilter());
+ characterEncoding.setInitParameter("encoding", "UTF-8");
+ characterEncoding.setInitParameter("forceEncoding", "true");
+ characterEncoding.addMappingForUrlPatterns(null, false, "*.do");
+ //characterEncoding.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "*.do");
+
+ //-------------------------------------------------------------
+ // Lucy-xss-servlet-filter(XssEscapeServletFilter) 설정
+ //-------------------------------------------------------------
+ FilterRegistration.Dynamic xssEscape = servletContext.addFilter("xssEscapeServletFilter", new com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilter());
+ xssEscape.addMappingForUrlPatterns(null, false, "/*");
+
+ //-------------------------------------------------------------
+ // Spring ServletContextListener 설정
+ //-------------------------------------------------------------
+ XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
+ rootContext.setConfigLocations(new String[] { "classpath*:egovframework/spring/com/**/context-*.xml" });
+ //rootContext.setConfigLocations(new String[] { "classpath*:egovframework/spring/com/context-*.xml","classpath*:egovframework/spring/com/*/context-*.xml" });
+ rootContext.refresh();
+ rootContext.start();
+
+ servletContext.addListener(new ContextLoaderListener(rootContext));
+
+ //-------------------------------------------------------------
+ // Spring ServletContextListener 설정
+ //-------------------------------------------------------------
+ XmlWebApplicationContext xmlWebApplicationContext = new XmlWebApplicationContext();
+ xmlWebApplicationContext.setConfigLocation("/WEB-INF/config/egovframework/springmvc/egov-com-*.xml");
+ ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(xmlWebApplicationContext));
+ dispatcher.addMapping("*.do");
+// dispatcher.addMapping("/"); // Facebook OAuth 사용시 변경
+ dispatcher.setLoadOnStartup(1);
+
+ if("security".equals(EgovProperties.getProperty("Globals.Auth").trim())) {
+
+ //-------------------------------------------------------------
+ // springSecurityFilterChain 설정
+ //-------------------------------------------------------------
+ FilterRegistration.Dynamic springSecurityFilterChain = servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy());
+ springSecurityFilterChain.addMappingForUrlPatterns(null, false, "*");
+ //servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain")).addMappingForUrlPatterns(null, false, "/*");
+
+ //-------------------------------------------------------------
+ // HttpSessionEventPublisher 설정
+ //-------------------------------------------------------------
+ servletContext.addListener(new org.springframework.security.web.session.HttpSessionEventPublisher());
+
+ //-------------------------------------------------------------
+ // EgovSpringSecurityLoginFilter 설정
+ //-------------------------------------------------------------
+ FilterRegistration.Dynamic egovSpringSecurityLoginFilter = servletContext.addFilter("egovSpringSecurityLoginFilter", new EgovSpringSecurityLoginFilter());
+ //로그인 실패시 반활 될 URL설정
+ egovSpringSecurityLoginFilter.setInitParameter("loginURL", "/uat/uia/egovLoginUsr.do");
+ //로그인 처리 URL설정
+ egovSpringSecurityLoginFilter.setInitParameter("loginProcessURL", "/uat/uia/actionLogin.do");
+ //처리 Url Pattern
+ egovSpringSecurityLoginFilter.addMappingForUrlPatterns(null, false, "*.do");
+
+ //-------------------------------------------------------------
+ // EgovSpringSecurityLogoutFilter 설정
+ //-------------------------------------------------------------
+ FilterRegistration.Dynamic egovSpringSecurityLogoutFilter = servletContext.addFilter("egovSpringSecurityLogoutFilter", new EgovSpringSecurityLogoutFilter());
+ egovSpringSecurityLogoutFilter.addMappingForUrlPatterns(null, false, "/uat/uia/actionLogout.do");
+
+ } else if("session".equals(EgovProperties.getProperty("Globals.Auth").trim())) {
+ //-------------------------------------------------------------
+ // EgovLoginPolicyFilter 설정
+ //-------------------------------------------------------------
+ FilterRegistration.Dynamic egovLoginPolicyFilter = servletContext.addFilter("LoginPolicyFilter", new EgovLoginPolicyFilter());
+ egovLoginPolicyFilter.addMappingForUrlPatterns(null, false, "/uat/uia/actionLogin.do");
+
+ }
+
+ //-------------------------------------------------------------
+ // HiddenHttpMethodFilter 설정 (Facebook OAuth 사용시 설정)
+ //-------------------------------------------------------------
+// FilterRegistration.Dynamic hiddenHttpMethodFilter = servletContext.addFilter("hiddenHttpMethodFilter", new HiddenHttpMethodFilter());
+// hiddenHttpMethodFilter.addMappingForUrlPatterns(null, false, "/*");
+
+ //-------------------------------------------------------------
+ // Tomcat의 경우 allowCasualMultipartParsing="true" 추가
+ // <Context docBase="" path="/" reloadable="true" allowCasualMultipartParsing="true">
+ //-------------------------------------------------------------
+ MultipartFilter springMultipartFilter = new MultipartFilter();
+ springMultipartFilter.setMultipartResolverBeanName("multipartResolver");
+ FilterRegistration.Dynamic multipartFilter = servletContext.addFilter("springMultipartFilter", springMultipartFilter);
+ multipartFilter.addMappingForUrlPatterns(null, false, "*.do");
+
+ //-------------------------------------------------------------
+ // HTMLTagFilter의 경우는 파라미터에 대하여 XSS 오류 방지를 위한 변환을 처리합니다.
+ //-------------------------------------------------------------
+ // HTMLTagFIlter의 경우는 JSP의 <c:out /> 등을 사용하지 못하는 특수한 상황에서 사용하시면 됩니다.
+ // (<c:out />의 경우 뷰단에서 데이터 출력시 XSS 방지 처리가 됨)
+ // Ajax 파일 미 대응으로 lucy 필터 사용
+// FilterRegistration.Dynamic htmlTagFilter = servletContext.addFilter("htmlTagFilter", new HTMLTagFilter());
+// htmlTagFilter.addMappingForUrlPatterns(null, false, "*.do");
+
+ //-------------------------------------------------------------
+ // SessionTimeoutCookieFilter는 쿠키에 타임아웃 시간을 기록한다.
+ //-------------------------------------------------------------
+ // latestServerTime - 서버 최근 시간
+ // expireSessionTime - 세션이 만료되는 시간
+ FilterRegistration.Dynamic sessionTimeoutFilter = servletContext.addFilter("sessionTimeoutFilter", new SessionTimeoutCookieFilter());
+ sessionTimeoutFilter.addMappingForUrlPatterns(null, false, "*.do");
+
+ //-------------------------------------------------------------
+ // Spring RequestContextListener 설정
+ //-------------------------------------------------------------
+ servletContext.addListener(new org.springframework.web.context.request.RequestContextListener());
+
+ LOGGER.debug("EgovWebApplicationInitializer END-============================================");
+
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/config/EgovWebApplicationInitializer.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/config/EgovLoginConfig.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/config/EgovLoginConfig.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/config/EgovLoginConfig.java (revision 7)
@@ -0,0 +1,46 @@
+package egovframework.com.cmm.config;
+
+/**
+ * EgovLoginConfig 클래스
+ * <Notice>
+ * 사용자 인증수행제한에 대한 설정을 관리하는 클래스
+ * <Disclaimer>
+ * N/A
+ *
+ * @author 장동한
+ * @since 2017.07.17
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2016.07.17 장동한 최초 생성
+ * </pre>
+ */
+
+
+public class EgovLoginConfig {
+ //로그인 인증 제한 여부
+ boolean lock = false;
+ //로그인 인증 제한 횟수
+ int lockCount = 0;
+
+ public boolean isLock() {
+ return lock;
+ }
+
+ public void setLock(boolean lock) {
+ this.lock = lock;
+ }
+
+ public int getLockCount() {
+ return lockCount;
+ }
+
+ public void setLockCount(int lockCount) {
+ this.lockCount = lockCount;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/config/EgovLoginConfig.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovDoubleSubmitHelper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovDoubleSubmitHelper.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovDoubleSubmitHelper.java (revision 7)
@@ -0,0 +1,80 @@
+package egovframework.com.cmm.util;
+
+import java.util.Map;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+/**
+ * Utility class to support to double submit preventer
+ * @author Vincent Han
+ * @since 2014.08.07
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2014.08.07 표준프레임워크센터 최초 생성
+ *
+ * </pre>
+ */
+public class EgovDoubleSubmitHelper {
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovDoubleSubmitHelper.class);
+
+ public final static String SESSION_TOKEN_KEY = "egovframework.double.submit.preventer.session.key";
+
+ public final static String PARAMETER_NAME = "egovframework.double.submit.preventer.parameter.name";
+
+ public final static String DEFAULT_TOKEN_KEY = "DEFAULT";
+
+ public static String getNewUUID() {
+ return UUID.randomUUID().toString().toUpperCase();
+ }
+
+ public static boolean checkAndSaveToken() {
+ return checkAndSaveToken(DEFAULT_TOKEN_KEY);
+ }
+
+ public static boolean checkAndSaveToken(String tokenKey) {
+
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+ HttpSession session = request.getSession();
+
+ // check session...
+ if (session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY) == null) {
+ throw new RuntimeException("Double Submit Preventer TagLig isn't set. Check JSP.");
+ }
+
+ String parameter = request.getParameter(EgovDoubleSubmitHelper.PARAMETER_NAME);
+
+ // check parameter
+ if (parameter == null) {
+ throw new RuntimeException("Double Submit Preventer parameter isn't set. Check JSP.");
+ }
+
+ @SuppressWarnings("unchecked")
+ Map<String, String> map = (Map<String, String>) session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY);
+
+ if (parameter.equals(map.get(tokenKey))) {
+
+ LOGGER.debug("[Double Submit] session token ({}) equals to parameter token.", tokenKey);
+
+ map.put(tokenKey, getNewUUID());
+
+ return true;
+ }
+
+ LOGGER.debug("[Double Submit] session token ({}) isn't equal to parameter token.", tokenKey);
+
+ return false;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovDoubleSubmitHelper.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovResourceCloseHelper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovResourceCloseHelper.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovResourceCloseHelper.java (revision 7)
@@ -0,0 +1,146 @@
+package egovframework.com.cmm.util;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Wrapper;
+
+/**
+ * Utility class to support to close resources
+ * @author Vincent Han
+ * @since 2014.09.18
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2014.09.18 표준프레임워크센터 최초 생성
+ *
+ * </pre>
+ */
+public class EgovResourceCloseHelper {
+ /**
+ * Resource close 처리.
+ * @param resources
+ */
+ public static void close(Closeable ... resources) {
+ for (Closeable resource : resources) {
+ if (resource != null) {
+ try {
+ resource.close();
+ } catch (IOException ignore) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ EgovBasicLogger.ignore("Occurred IOException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
+ }
+ }
+ }
+ }
+
+ /**
+ * JDBC 관련 resource 객체 close 처리
+ * @param objects
+ */
+ public static void closeDBObjects(Wrapper ... objects) {
+ for (Object object : objects) {
+ if (object != null) {
+ if (object instanceof ResultSet) {
+ try {
+ ((ResultSet)object).close();
+ } catch (SQLException ignore) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ EgovBasicLogger.ignore("Occurred SQLException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
+ }
+ } else if (object instanceof Statement) {
+ try {
+ ((Statement)object).close();
+ } catch (SQLException ignore) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ EgovBasicLogger.ignore("Occurred SQLException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
+ }
+ } else if (object instanceof Connection) {
+ try {
+ ((Connection)object).close();
+ } catch (SQLException ignore) {
+ EgovBasicLogger.ignore("Occurred SQLException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
+ }
+ } else {
+ throw new IllegalArgumentException("Wrapper type is not found : " + object.toString());
+ }
+ }
+ }
+ }
+
+ /**
+ * Socket 관련 resource 객체 close 처리
+ * @param objects
+ */
+ public static void closeSocketObjects(Socket socket, ServerSocket server) {
+ if (socket != null) {
+ try {
+ socket.shutdownOutput();
+ } catch (IOException ignore) {
+ EgovBasicLogger.ignore("Occurred IOException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!");
+ }
+
+ try {
+ socket.close();
+ } catch (IOException ignore) {
+ EgovBasicLogger.ignore("Occurred IOException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!");
+ }
+ }
+
+ if (server != null) {
+ try {
+ server.close();
+ } catch (IOException ignore) {
+ EgovBasicLogger.ignore("Occurred IOException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!");
+ }
+ }
+ }
+
+ /**
+ * Socket 관련 resource 객체 close 처리
+ *
+ * @param sockets
+ */
+ public static void closeSockets(Socket ... sockets) {
+ for (Socket socket : sockets) {
+ if (socket != null) {
+ try {
+ socket.shutdownOutput();
+ } catch (IOException ignore) {
+ EgovBasicLogger.ignore("Occurred IOException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!");
+ }
+
+ try {
+ socket.close();
+ } catch (IOException ignore) {
+ EgovBasicLogger.ignore("Occurred IOException to close resource is ingored!!");
+ } catch (Exception ignore) {
+ EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!");
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovResourceCloseHelper.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/Authory.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/Authory.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/Authory.java (revision 7)
@@ -0,0 +1,25 @@
+package egovframework.com.cmm.util;
+
+/**
+ * 권한
+ * @since 2022. 1. 27.
+ * @author 임종호
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2022. 1. 27. 임종호 : 최초작성
+ * </PRE>
+ */
+public class Authory {
+
+ private Authory() {
+ throw new IllegalStateException("Authory class");
+ }
+
+ /** 익명 */
+ public static final String ROLE_ANONYMOUS = "ROLE_ANONYMOUS";
+ /** 관리자 */
+ public static final String ROLE_ADMIN = "ROLE_ADMIN";
+ /** 일반사용자 */
+ public static final String ROLE_USER = "ROLE_USER";
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/Authory.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovUrlRewriteFilter.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovUrlRewriteFilter.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovUrlRewriteFilter.java (revision 7)
@@ -0,0 +1,112 @@
+package egovframework.com.cmm.util;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.util.AntPathMatcher;
+
+import egovframework.com.cmm.EgovWebUtil;
+
+/**
+ * @Class Name : UrlRewriteFilter.java
+ * @Description : UrlRewriteFilter Class
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- --------- -------------------------------
+ * @ 2014.09.30 최초생성
+ * @ 2020.11.02 신용호 KISA 보안약점 조치 (CRLF 제거 조치)
+ *
+ * @author 전자정부 표준프레임워크 유지보수
+ * @since 2014. 09.30
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) by MOPAS All right reserved.
+ */
+public class EgovUrlRewriteFilter implements Filter {
+
+ @SuppressWarnings("unused")
+ private FilterConfig config;
+
+ private String targetURI;
+ private String httpsPort;
+ private String httpPort;
+
+ private String[] uriPatterns;
+
+ @Override
+ public void init(FilterConfig config) throws ServletException {
+
+ String delimiter = ",";
+ this.config = config;
+
+ this.targetURI = config.getInitParameter("targetURI");
+ this.httpsPort = config.getInitParameter("httpsPort");
+ this.httpPort = config.getInitParameter("httpPort");
+
+ this.uriPatterns = targetURI.split(delimiter);
+
+ }
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
+
+ HttpServletRequest req = (HttpServletRequest) request;
+ HttpServletResponse res = (HttpServletResponse) response;
+
+ String uri = req.getRequestURI();
+ String getProtocol = req.getScheme();
+ String getDomain = req.getServerName();
+
+ AntPathMatcher pm = new AntPathMatcher();
+
+ for (String uriPattern : uriPatterns) {
+
+ if (pm.match(uriPattern.trim(), uri)) {
+
+ if (getProtocol.toLowerCase().equals("http")) {
+
+ response.setContentType("text/html");
+
+ String httpsPath = "https" + "://" + getDomain + ":" + httpsPort + uri;
+ String site = new String(httpsPath);
+ res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
+ res.setHeader("Location", EgovWebUtil.removeCRLF(site));
+
+ }
+
+ }else if(getProtocol.toLowerCase().equals("https")){
+
+ response.setContentType("text/html");
+
+ String httpPath = "http" + "://" + getDomain + ":" + httpPort + uri;
+
+ String site = new String(httpPath);
+ res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
+ res.setHeader("Location", EgovWebUtil.removeCRLF(site));
+
+ }
+ }
+
+ chain.doFilter(req, res);
+
+ }
+
+ @Override
+ public void destroy() {
+ this.targetURI = null;
+ this.httpsPort = null;
+ this.httpPort = null;
+ this.uriPatterns = null;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovUrlRewriteFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovHttpRequestHelper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovHttpRequestHelper.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovHttpRequestHelper.java (revision 7)
@@ -0,0 +1,56 @@
+package egovframework.com.cmm.util;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+/**
+ * @Class Name : EgovHttpRequestHelper.java
+ * @Description : HTTP Request 정보 취득 Helper 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2014.09.11 표준프레임워크 최초생성
+* @author Vincent Han
+ * @since 2014.09.11
+ * @version 3.5
+ * @see <pre>
+ * web.xml 상에 다음과 같은 Listener 등록 필요
+ * <listener>
+ * <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
+ * </listener>
+ * </pre>
+ */
+public class EgovHttpRequestHelper {
+
+ public static boolean isInHttpRequest() {
+ try {
+ getCurrentRequest();
+ } catch (IllegalStateException ise) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public static HttpServletRequest getCurrentRequest() {
+ ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
+
+ return sra.getRequest();
+ }
+
+ public static String getRequestIp() {
+ return getCurrentRequest().getRemoteAddr();
+ }
+
+ public static String getRequestURI() {
+ return getCurrentRequest().getRequestURI();
+ }
+
+ public static HttpSession getCurrentSession() {
+ return getCurrentRequest().getSession();
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovHttpRequestHelper.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java (revision 7)
@@ -0,0 +1,158 @@
+package egovframework.com.cmm.util;
+
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import egovframework.com.cmm.service.EgovUserDetailsService;
+
+/**
+ * EgovUserDetails Helper 클래스
+ *
+ * @author sjyoon
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2009.03.10 sjyoon 최초 생성
+ * 2011.07.01 서준식 interface 생성후 상세 로직의 분리
+ * </pre>
+ */
+
+public class EgovUserDetailsHelper {
+
+ private static final String LOGIN_URL = "redirect:/uat/uia/egovLoginUsr.do";
+ private static final String INDEX_URL = "redirect:/index.do";
+ private static final String ADMIN_URL = "redirect:/admin/index.do";
+ private static final String LOGIN_ADMIN_URL = "redirect:/EpLogin.do";
+
+ static EgovUserDetailsService egovUserDetailsService;
+
+ public EgovUserDetailsService getEgovUserDetailsService() {
+ return egovUserDetailsService;
+ }
+
+ public void setEgovUserDetailsService(EgovUserDetailsService egovUserDetailsService) {
+ EgovUserDetailsHelper.egovUserDetailsService = egovUserDetailsService;
+ }
+
+ /**
+ * 인증된 사용자객체를 VO형식으로 가져온다.
+ * @return Object - 사용자 ValueObject
+ */
+ public static Object getAuthenticatedUser() {
+ return egovUserDetailsService.getAuthenticatedUser();
+ }
+
+ /**
+ * 인증된 사용자의 권한 정보를 가져온다.
+ *
+ * @return List - 사용자 권한정보 목록
+ */
+ public static List<String> getAuthorities() {
+ return egovUserDetailsService.getAuthorities();
+ }
+
+ /**
+ * 인증된 사용자 여부를 체크한다.
+ * @return Boolean - 인증된 사용자 여부(TRUE / FALSE)
+ */
+ public static Boolean isAuthenticated() {
+ return egovUserDetailsService.isAuthenticated();
+ }
+
+ /**
+ * 특정 권한 여부를 체크한다.
+ * @Author : 임종호
+ * @Date : 2021. 7. 5.
+ * @Method Name : isRole
+ * @return : Boolean - 특정 권한 여부 (true / false)
+ */
+ public static Boolean isRole(final String strAutho) {
+ if (StringUtils.isBlank(strAutho)) {
+ return false;
+ }
+ List<String> authorList = getAuthorities ();
+ if (authorList != null) {
+ for (String s : authorList) {
+ if (s.indexOf (strAutho) != -1) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 특정 권한 배열 여부를 체크한다.
+ * @Author : 임종호
+ * @Date : 2021. 7. 5.
+ * @Method Name : isRole
+ * @return : Boolean - 특정 권한 여부 (true / false)
+ */
+ public static Boolean isRole(final String[] arrAutho) {
+ if (arrAutho.length == 0) {
+ return false;
+ }
+ List<String> authorList = getAuthorities ();
+ if (authorList != null) {
+ for (String s : authorList) {
+ for (String a : arrAutho) {
+ if (s.indexOf (a) != -1) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 로그인 페이지 이동
+ * @Author : 임종호
+ * @Date : 2021. 7. 5.
+ * @Method Name : getLoginPage
+ * @return : String
+ */
+ public static String getLoginPage() {
+ return LOGIN_URL;
+ }
+
+ /**
+ * Index 페이지 이동
+ * @Author : 임종호
+ * @Date : 2021. 9. 27.
+ * @Method Name : getIndexPage
+ * @return : String
+ */
+ public static String getIndexPage() {
+ return INDEX_URL;
+ }
+
+ /**
+ * 관리자 페이지 이동
+ * @Author : 임종호
+ * @Date : 2021. 9. 27.
+ * @Method Name : getAdminPage
+ * @return : String
+ */
+ public static String getAdminPage() {
+ return ADMIN_URL;
+ }
+
+ /**
+ * 관리자 로그인 이동
+ * @Author : 임종호
+ * @Date : 2021. 9. 27.
+ * @Method Name : getAdminLogin
+ * @return : String
+ */
+ public static String getAdminLogin() {
+ return LOGIN_ADMIN_URL;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovWildcardReloadableResourceBundleMessageSource.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovWildcardReloadableResourceBundleMessageSource.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovWildcardReloadableResourceBundleMessageSource.java (revision 7)
@@ -0,0 +1,96 @@
+package egovframework.com.cmm.util;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+
+/**
+ * @Class Name : EgovWildcardReloadableResourceBundleMessageSource
+ * @Description : 다국어 properties 파일을 팩키지 구조의 폴더로 읽어드리는 MessageSource
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2016.06.10 장동한 최초 생성
+ *
+ * @author 2016 표준프레임워크 유지보수 장동한
+ * @since 2016.06.10
+ * @version 1.0
+ * @see
+ *
+ */
+
+public class EgovWildcardReloadableResourceBundleMessageSource extends
+ org.springframework.context.support.ReloadableResourceBundleMessageSource {
+ private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
+
+ public void setEgovBasenames(String... basenames) {
+ if (basenames != null) {
+ List<String> baseNames = new ArrayList<String>();
+ for (int i = 0; i < basenames.length; i++) {
+
+ String basename = StringUtils.trimToEmpty(basenames[i]);
+ if(basename.indexOf("classpath:/") > -1 ){
+ baseNames.add(basename);
+ }else if(StringUtils.isNotBlank(basename)) {
+ try {
+
+ Resource[] resources = resourcePatternResolver.getResources(basename);
+
+ for (int j = 0; j < resources.length; j++) {
+ Resource resource = resources[j];
+ String uri = resource.getURI().toString();
+ String baseName = null;
+
+ if(uri.indexOf(".properties") == -1){continue;}
+
+ if (resource instanceof FileSystemResource) {
+ baseName = "classpath:" + StringUtils.substringBetween(uri, "/classes/", ".properties");
+ baseName = baseName.substring(0,baseName.indexOf("_"));
+ baseName = baseName.replaceAll("classpath:", "classpath:/");
+ if(baseNames.indexOf(baseName) > -1){continue;};
+
+ } else if (resource instanceof ClassPathResource) {
+ baseName = StringUtils.substringBefore(uri, ".properties");
+ baseName = baseName.substring(0,baseName.indexOf("_"));
+ baseName = baseName.replaceAll("classpath:", "classpath:/");
+ } else if (resource instanceof UrlResource) {
+ baseName = "classpath:" + StringUtils.substringBetween(uri, ".jar!/", ".properties");
+ baseName = baseName.substring(0,baseName.indexOf("_"));
+ baseName = baseName.replaceAll("classpath:", "classpath:/");
+ }
+ if (baseName != null) {
+ String fullName = processBasename(baseName);
+ baseNames.add(fullName);
+ }
+ }
+ } catch (IOException e) {
+ logger.debug("No message source files found for basename " + basename + ".");
+ }
+ }
+
+
+ }
+
+ logger.debug("EgovWildcardReloadableResourceBundleMessageSource>>basenames>["+baseNames+"}");
+ setBasenames(baseNames.toArray(new String[baseNames.size()]));
+ }
+ }
+
+ String processBasename(String baseName) {
+ String prefix = StringUtils.substringBeforeLast(baseName, "/");
+ String name = StringUtils.substringAfterLast(baseName, "/");
+ do {
+ name = StringUtils.substringBeforeLast(name, "_");
+ } while (name.contains("_"));
+ return prefix + "/" + name;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovWildcardReloadableResourceBundleMessageSource.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovMybaitsUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovMybaitsUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovMybaitsUtil.java (revision 7)
@@ -0,0 +1,135 @@
+package egovframework.com.cmm.util;
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * EgovMybaitsUtil 클래스
+ *
+ * @author 장동한
+ * @since 2016.06.07
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2016.06.07 장동한 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-오류 메시지를 통한 정보노출[CWE-209]
+ * 2017.07.21 장동한 isEquals에서 String Character 비교 가능하도록
+ *
+ * </pre>
+ */
+
+
+public class EgovMybaitsUtil {
+
+ private static final Logger logger = LoggerFactory.getLogger(EgovMybaitsUtil.class);
+
+ /**
+ * Empty 여부를 확인한다.
+ * @param o Object
+ * @return boolean
+ * @exception IllegalArgumentException
+ */
+ public static boolean isEmpty(Object o) throws IllegalArgumentException {
+ try {
+ if(o == null) return true;
+
+ if(o instanceof String) {
+ if(((String)o).length() == 0){
+ return true;
+ }
+ } else if(o instanceof Collection) {
+ if(((Collection)o).isEmpty()){
+ return true;
+ }
+ } else if(o.getClass().isArray()) {
+ if(Array.getLength(o) == 0){
+ return true;
+ }
+ } else if(o instanceof Map) {
+ if(((Map)o).isEmpty()){
+ return true;
+ }
+ }else {
+ return false;
+ }
+
+ return false;
+ //2017.03.03 조성원 시큐어코딩(ES)-오류 메시지를 통한 정보노출[CWE-209]
+ } catch(IllegalArgumentException e) {
+ logger.error("[IllegalArgumentException] Try/Catch...usingParameters Runing : "+ e.getMessage());
+ } catch(Exception e) {
+ logger.error("["+e.getClass()+"] Try/Catch...Exception : " + e.getMessage());
+ }
+ return false;
+ }
+
+ /**
+ * Not Empty 여부를 확인한다.
+ * @param o Object
+ * @return boolean
+ * @exception IllegalArgumentException
+ */
+ public static boolean isNotEmpty(Object o) {
+ return !isEmpty(o);
+ }
+
+ /**
+ * Equal 여부를 확인한다.
+ * @param obj Object, obj Object
+ * @return boolean
+ */
+
+ public static boolean isEquals(Object obj, Object obj2){
+ if(isEmpty(obj)) return false;
+
+ if(obj instanceof String && obj2 instanceof String) {
+ if( (String.valueOf(obj)).equals( String.valueOf(obj2) )){
+ return true;
+ }
+ }else if(obj instanceof String && obj2 instanceof Character) {
+ if( (String.valueOf(obj) ).equals( String.valueOf(obj2) )){
+ return true;
+ }
+ }else if(obj instanceof String && obj2 instanceof Integer) {
+ if( (String.valueOf(obj)).equals( String.valueOf((Integer)obj2) )){
+ return true;
+ }
+
+ }else if(obj instanceof Integer && obj2 instanceof String) {
+ if( (String.valueOf(obj2)).equals( String.valueOf((Integer)obj) )){
+ return true;
+ }
+ } else if(obj instanceof Integer && obj instanceof Integer) {
+ if((Integer)obj == (Integer)obj2){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * String의 Equal 여부를 확인한다.
+ * @param obj Object, obj Object
+ * @return boolean
+ */
+ public static boolean isEqualsStr(Object obj, String s){
+ if(isEmpty(obj)) return false;
+
+ if(s.equals(String.valueOf(obj))){
+ return true;
+ }
+ return false;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovMybaitsUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovXssChecker.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovXssChecker.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovXssChecker.java (revision 7)
@@ -0,0 +1,78 @@
+package egovframework.com.cmm.util;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.exception.EgovXssException;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+
+/**
+ * EgovXssChecker 클래스
+ *
+ * @author 장동한
+ * @since 2016.10.27
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2016.10.17 장동한 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-오류 메시지를 통한 정보노출[CWE-209]
+ * </pre>
+ */
+
+
+public class EgovXssChecker {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovXssChecker.class);
+
+ /**
+ * 사용자에 대한 크로스사이트스크립트(Xss) 확인한다.
+ * 수정, 상세조회, 삭제시 사용
+ * @param uniqId Stirng
+ * @return boolean
+ * @exception IllegalArgumentException
+ */
+ public static boolean checkerUserXss(HttpServletRequest request, String sUniqId) throws Exception {
+
+ boolean bLog = false;
+
+ try {
+ //@ 공통모듈을 이용한 권한체크
+ LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ if(bLog){
+ LOGGER.debug("@Step1. XSS Check uniqId : {}", sUniqId);
+ LOGGER.debug("Step2. XSS Session uniqId : {}", loginVO.getId());
+ LOGGER.debug("Step3. XSS Session getUniqId : {}", loginVO.getUniqId());
+ LOGGER.debug("Step4. XSS Session getAuthorities : {}", EgovUserDetailsHelper.getAuthorities());
+ }
+
+ //체크 값에 대한 무결성 체크
+ if(sUniqId == null || (loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getUniqId())) == null){
+ throw new EgovXssException("XSS00001", "errors.xss.checkerUser");
+ } else if (loginVO.getUniqId().equals("")) { // KISA 보안약점 조치 (2018-12-11, 신용호)
+ throw new EgovXssException("XSS00001", "errors.xss.checkerUser");
+ }
+
+ //사용자에에 대한 Xss 체크
+ if(!sUniqId.equals(loginVO.getUniqId())){
+ throw new EgovXssException("XSS00002", "errors.xss.checkerUser");
+ }
+ //2017.03.03 조성원 시큐어코딩(ES)-오류 메시지를 통한 정보노출[CWE-209]
+ } catch(IllegalArgumentException e) {
+ LOGGER.error("[IllegalArgumentException] Try/Catch...usingParameters Runing : "+ e.getMessage());
+ } catch(Exception e) {
+ LOGGER.error("["+e.getClass()+"] Try/Catch...Exception : " + e.getMessage());
+ }
+ return true;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovXssChecker.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovBasicLogger.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovBasicLogger.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovBasicLogger.java (revision 7)
@@ -0,0 +1,83 @@
+package egovframework.com.cmm.util;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Utility class to support to logging information
+ * @author Vincent Han
+ * @since 2014.09.18
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2014.09.18 표준프레임워크센터 최초 생성
+ *
+ * </pre>
+ */
+public class EgovBasicLogger {
+ private static final Level IGNORE_INFO_LEVEL = Level.OFF;
+ private static final Level DEBUG_INFO_LEVEL = Level.FINEST;
+ private static final Level INFO_INFO_LEVEL = Level.INFO;
+
+ private static final Logger ignoreLogger = Logger.getLogger("ignore");
+ private static final Logger debugLogger = Logger.getLogger("debug");
+ private static final Logger infoLogger = Logger.getLogger("info");
+
+ /**
+ * 기록이나 처리가 불필요한 경우 사용.
+ * @param message
+ * @param exception
+ */
+ public static void ignore(String message, Exception exception) {
+ if (exception == null) {
+ ignoreLogger.log(IGNORE_INFO_LEVEL, message);
+ } else {
+ ignoreLogger.log(IGNORE_INFO_LEVEL, message, exception);
+ }
+ }
+
+ /**
+ * 기록이나 처리가 불필요한 경우 사용.
+ * @param message
+ * @param exception
+ */
+ public static void ignore(String message) {
+ ignore(message, null);
+ }
+
+ /**
+ * 디버그 정보를 기록하는 경우 사용.
+ * @param message
+ * @param exception
+ */
+ public static void debug(String message, Exception exception) {
+ if (exception == null) {
+ debugLogger.log(DEBUG_INFO_LEVEL, message);
+ } else {
+ debugLogger.log(DEBUG_INFO_LEVEL, message, exception);
+ }
+ }
+
+ /**
+ * 디버그 정보를 기록하는 경우 사용.
+ * @param message
+ * @param exception
+ */
+ public static void debug(String message) {
+ debug(message, null);
+ }
+
+ /**
+ * 일반적이 정보를 기록하는 경우 사용.
+ * @param message
+ * @param exception
+ */
+ public static void info(String message) {
+ infoLogger.log(INFO_INFO_LEVEL, message);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/util/EgovBasicLogger.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/SessionVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/SessionVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/SessionVO.java (revision 7)
@@ -0,0 +1,120 @@
+package egovframework.com.cmm;
+
+import java.io.Serializable;
+
+/**
+ * 세션 VO 클래스
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.06 박지욱 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class SessionVO implements Serializable {
+
+ /** 아이디 */
+ private String sUserId;
+ /** 이름 */
+ private String sUserNm;
+ /** 이메일 */
+ private String sEmail;
+ /** 사용자구분 */
+ private String sUserSe;
+ /** 조직(부서)ID */
+ private String orgnztId;
+ /** 고유아이디 */
+ private String uniqId;
+ /**
+ * sUserId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSUserId() {
+ return sUserId;
+ }
+ /**
+ * sUserId attribute 값을 설정한다.
+ * @param sUserId String
+ */
+ public void setSUserId(String userId) {
+ sUserId = userId;
+ }
+ /**
+ * sUserNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSUserNm() {
+ return sUserNm;
+ }
+ /**
+ * sUserNm attribute 값을 설정한다.
+ * @param sUserNm String
+ */
+ public void setSUserNm(String userNm) {
+ sUserNm = userNm;
+ }
+ /**
+ * sEmail attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSEmail() {
+ return sEmail;
+ }
+ /**
+ * sEmail attribute 값을 설정한다.
+ * @param sEmail String
+ */
+ public void setSEmail(String email) {
+ sEmail = email;
+ }
+ /**
+ * sUserSe attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSUserSe() {
+ return sUserSe;
+ }
+ /**
+ * sUserSe attribute 값을 설정한다.
+ * @param sUserSe String
+ */
+ public void setSUserSe(String userSe) {
+ sUserSe = userSe;
+ }
+ /**
+ * orgnztId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getOrgnztId() {
+ return orgnztId;
+ }
+ /**
+ * orgnztId attribute 값을 설정한다.
+ * @param orgnztId String
+ */
+ public void setOrgnztId(String orgnztId) {
+ this.orgnztId = orgnztId;
+ }
+ /**
+ * uniqId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+ /**
+ * uniqId attribute 값을 설정한다.
+ * @param uniqId String
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/SessionVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/LoginVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/LoginVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/LoginVO.java (revision 7)
@@ -0,0 +1,250 @@
+package egovframework.com.cmm;
+
+import java.io.Serializable;
+
+/**
+ * @Class Name : LoginVO.java
+ * @Description : Login VO class
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.03 박지욱 최초 생성
+ *
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.03
+ * @version 1.0
+ * @see
+ *
+ */
+public class LoginVO implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8274004534207618049L;
+
+ /** 아이디 */
+ private String id;
+ /** 이름 */
+ private String name;
+ /** 주민등록번호 */
+ private String ihidNum;
+ /** 이메일주소 */
+ private String email;
+ /** 비밀번호 */
+ private String password;
+ /** 비밀번호 힌트 */
+ private String passwordHint;
+ /** 비밀번호 정답 */
+ private String passwordCnsr;
+ /** 사용자구분 */
+ private String userSe;
+ /** 조직(부서)ID */
+ private String orgnztId;
+ /** 조직(부서)명 */
+ private String orgnztNm;
+ /** 고유아이디 */
+ private String uniqId;
+ /** 로그인 후 이동할 페이지 */
+ private String url;
+ /** 사용자 IP정보 */
+ private String ip;
+ /** GPKI인증 DN */
+ private String dn;
+ /**
+ * id attribute 를 리턴한다.
+ * @return String
+ */
+ public String getId() {
+ return id;
+ }
+ /**
+ * id attribute 값을 설정한다.
+ * @param id String
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+ /**
+ * name attribute 를 리턴한다.
+ * @return String
+ */
+ public String getName() {
+ return name;
+ }
+ /**
+ * name attribute 값을 설정한다.
+ * @param name String
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+ /**
+ * ihidNum attribute 를 리턴한다.
+ * @return String
+ */
+ public String getIhidNum() {
+ return ihidNum;
+ }
+ /**
+ * ihidNum attribute 값을 설정한다.
+ * @param ihidNum String
+ */
+ public void setIhidNum(String ihidNum) {
+ this.ihidNum = ihidNum;
+ }
+ /**
+ * email attribute 를 리턴한다.
+ * @return String
+ */
+ public String getEmail() {
+ return email;
+ }
+ /**
+ * email attribute 값을 설정한다.
+ * @param email String
+ */
+ public void setEmail(String email) {
+ this.email = email;
+ }
+ /**
+ * password attribute 를 리턴한다.
+ * @return String
+ */
+ public String getPassword() {
+ return password;
+ }
+ /**
+ * password attribute 값을 설정한다.
+ * @param password String
+ */
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ /**
+ * passwordHint attribute 를 리턴한다.
+ * @return String
+ */
+ public String getPasswordHint() {
+ return passwordHint;
+ }
+ /**
+ * passwordHint attribute 값을 설정한다.
+ * @param passwordHint String
+ */
+ public void setPasswordHint(String passwordHint) {
+ this.passwordHint = passwordHint;
+ }
+ /**
+ * passwordCnsr attribute 를 리턴한다.
+ * @return String
+ */
+ public String getPasswordCnsr() {
+ return passwordCnsr;
+ }
+ /**
+ * passwordCnsr attribute 값을 설정한다.
+ * @param passwordCnsr String
+ */
+ public void setPasswordCnsr(String passwordCnsr) {
+ this.passwordCnsr = passwordCnsr;
+ }
+ /**
+ * userSe attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUserSe() {
+ return userSe;
+ }
+ /**
+ * userSe attribute 값을 설정한다.
+ * @param userSe String
+ */
+ public void setUserSe(String userSe) {
+ this.userSe = userSe;
+ }
+ /**
+ * orgnztId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getOrgnztId() {
+ return orgnztId;
+ }
+ /**
+ * orgnztId attribute 값을 설정한다.
+ * @param orgnztId String
+ */
+ public void setOrgnztId(String orgnztId) {
+ this.orgnztId = orgnztId;
+ }
+ /**
+ * uniqId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+ /**
+ * uniqId attribute 값을 설정한다.
+ * @param uniqId String
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+ /**
+ * url attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUrl() {
+ return url;
+ }
+ /**
+ * url attribute 값을 설정한다.
+ * @param url String
+ */
+ public void setUrl(String url) {
+ this.url = url;
+ }
+ /**
+ * ip attribute 를 리턴한다.
+ * @return String
+ */
+ public String getIp() {
+ return ip;
+ }
+ /**
+ * ip attribute 값을 설정한다.
+ * @param ip String
+ */
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+ /**
+ * dn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getDn() {
+ return dn;
+ }
+ /**
+ * dn attribute 값을 설정한다.
+ * @param dn String
+ */
+ public void setDn(String dn) {
+ this.dn = dn;
+ }
+ /**
+ * @return the orgnztNm
+ */
+ public String getOrgnztNm() {
+ return orgnztNm;
+ }
+ /**
+ * @param orgnztNm the orgnztNm to set
+ */
+ public void setOrgnztNm(String orgnztNm) {
+ this.orgnztNm = orgnztNm;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/LoginVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/CustomDefaultVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/CustomDefaultVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/CustomDefaultVO.java (revision 7)
@@ -0,0 +1,257 @@
+package egovframework.com.cmm;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 기본 VO
+ *
+ * @since 2020. 6. 17.
+ * @author 손희문
+ *
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2020. 6. 17. 손희문 : 최초작성
+ * </PRE>
+ */
+public class CustomDefaultVO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 등록자 */
+ String registerId;
+
+ /** 등록일시 */
+ String registPnttm;
+
+ /** 수정자 */
+ String updusrId;
+
+ /** 수정일시 */
+ String updtPnttm;
+
+ /** 검색조건 */
+ private String searchCondition = "";
+
+ /** 검색Keyword */
+ private String searchKeyword = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 검색시작날짜 */
+ private String searchBgnPnttm;
+
+ /** 검색종료날짜 */
+ private String searchEndPnttm;
+
+ /** 페이징 사용 유무 */
+ private boolean pagingAt = true;
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 한 페이지 갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /** 검색KeywordFrom */
+ private String searchKeywordFrom = "";
+
+ /** 검색KeywordTo */
+ private String searchKeywordTo = "";
+
+ /**
+ * 리다이렉트 시 검색 조건 get으로 붙이기
+ *
+ * @Author : 손희문
+ * @Date : 2021. 5. 31.
+ * @Method Name : searchParam
+ * @return : String
+ * @throws UnsupportedEncodingException
+ */
+ public String searchParam(int i) {
+ String search = "";
+ try {
+ switch (i) {
+ case 1:
+ search += "pageIndex=" + this.getPageIndex();
+ break;
+ case 2:
+ search += "pageIndex=" + this.getPageIndex();
+
+ search += "&searchKeyword=" + URLEncoder.encode(this.getSearchKeyword(), StandardCharsets.UTF_8.name());
+ break;
+ case 3:
+ search += "pageIndex=" + this.getPageIndex();
+ search += "&searchKeyword=" + URLEncoder.encode(this.getSearchKeyword(), StandardCharsets.UTF_8.name());
+ search += "&searchCondition=" + URLEncoder.encode(this.getSearchCondition(), StandardCharsets.UTF_8.name());
+ break;
+ default:
+ break;
+ }
+ } catch (UnsupportedEncodingException e) {
+ e.getCause().getMessage();
+ }
+ return search;
+ }
+
+ public String getRegisterId() {
+ return registerId;
+ }
+
+ public void setRegisterId(String registerId) {
+ this.registerId = registerId;
+ }
+
+ public String getRegistPnttm() {
+ return registPnttm;
+ }
+
+ public void setRegistPnttm(String registPnttm) {
+ this.registPnttm = registPnttm;
+ }
+
+ public String getUpdusrId() {
+ return updusrId;
+ }
+
+ public void setUpdusrId(String updusrId) {
+ this.updusrId = updusrId;
+ }
+
+ public String getUpdtPnttm() {
+ return updtPnttm;
+ }
+
+ public void setUpdtPnttm(String updtPnttm) {
+ this.updtPnttm = updtPnttm;
+ }
+
+ public String getSearchCondition() {
+ return searchCondition;
+ }
+
+ public void setSearchCondition(String searchCondition) {
+ this.searchCondition = searchCondition;
+ }
+
+ public String getSearchKeyword() {
+ return searchKeyword;
+ }
+
+ public void setSearchKeyword(String searchKeyword) {
+ this.searchKeyword = searchKeyword;
+ }
+
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ public boolean isPagingAt() {
+ return pagingAt;
+ }
+
+ public void setPagingAt(boolean pagingAt) {
+ this.pagingAt = pagingAt;
+ }
+
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ public String getSearchKeywordFrom() {
+ return searchKeywordFrom;
+ }
+
+ public void setSearchKeywordFrom(String searchKeywordFrom) {
+ this.searchKeywordFrom = searchKeywordFrom;
+ }
+
+ public String getSearchKeywordTo() {
+ return searchKeywordTo;
+ }
+
+ public void setSearchKeywordTo(String searchKeywordTo) {
+ this.searchKeywordTo = searchKeywordTo;
+ }
+
+ public String getSearchBgnPnttm() {
+ return searchBgnPnttm;
+ }
+
+ public void setSearchBgnPnttm(String searchBgnPnttm) {
+ this.searchBgnPnttm = searchBgnPnttm;
+ }
+
+ public String getSearchEndPnttm() {
+ return searchEndPnttm;
+ }
+
+ public void setSearchEndPnttm(String searchEndPnttm) {
+ this.searchEndPnttm = searchEndPnttm;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cmm/CustomDefaultVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/EgovBrowserUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/EgovBrowserUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/EgovBrowserUtil.java (revision 7)
@@ -0,0 +1,184 @@
+package egovframework.com.cmm;
+
+import java.net.URLEncoder;
+import java.util.HashMap;
+import javax.servlet.http.HttpServletRequest;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 웹브라우저 종류및 버전 파악하기 ( IE및 Edge, Safari, Chrome, Firefox, Opera )
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ----------- -------- ---------------------------
+ * 2018.08.27 신용호 최초 생성
+ *
+ * </pre>
+ */
+
+public class EgovBrowserUtil {
+
+ public static final String FIREFOX = "Firefox";
+ public static final String SAFARI = "Safari";
+ public static final String CHROME = "Chrome";
+ public static final String OPERA = "Opera";
+ public static final String MSIE = "MSIE";
+ public static final String EDGE = "Edge";
+ public static final String OTHER = "Other";
+
+ public static final String TYPEKEY = "type";
+ public static final String VERSIONKEY = "version";
+
+ public static HashMap<String,String> getBrowser(String userAgent) {
+
+ HashMap<String,String> result = new HashMap<String,String>();
+ Pattern pattern = null;
+ Matcher matcher = null;
+ //System.out.println("=====>>>>> userAgent = "+userAgent);
+
+ pattern = Pattern.compile("MSIE ([0-9]{1,2}.[0-9])");
+ matcher = pattern.matcher(userAgent);
+ if (matcher.find())
+ {
+ result.put(TYPEKEY,MSIE);
+ result.put(VERSIONKEY,matcher.group(1));
+ return result;
+ }
+
+ if (userAgent.indexOf("Trident/7.0") > -1) {
+ result.put(TYPEKEY,MSIE);
+ result.put(VERSIONKEY,"11.0");
+ return result;
+ }
+
+ pattern = Pattern.compile("Edge/([0-9]{1,3}.[0-9]{1,5})");
+ matcher = pattern.matcher(userAgent);
+ if (matcher.find())
+ {
+ result.put(TYPEKEY,EDGE);
+ result.put(VERSIONKEY,matcher.group(1));
+ return result;
+ }
+
+ pattern = Pattern.compile("Firefox/([0-9]{1,3}.[0-9]{1,3})");
+ matcher = pattern.matcher(userAgent);
+ if (matcher.find())
+ {
+ result.put(TYPEKEY,FIREFOX);
+ result.put(VERSIONKEY,matcher.group(1));
+ return result;
+ }
+
+ pattern = Pattern.compile("OPR/([0-9]{1,3}.[0-9]{1,3})");
+ matcher = pattern.matcher(userAgent);
+ if (matcher.find())
+ {
+ result.put(TYPEKEY,OPERA);
+ result.put(VERSIONKEY,matcher.group(1));
+ return result;
+ }
+
+ pattern = Pattern.compile("Chrome/([0-9]{1,3}.[0-9]{1,3})");
+ matcher = pattern.matcher(userAgent);
+ if (matcher.find())
+ {
+ result.put(TYPEKEY,CHROME);
+ result.put(VERSIONKEY,matcher.group(1));
+ return result;
+ }
+
+ pattern = Pattern.compile("Version/([0-9]{1,2}.[0-9]{1,3})");
+ matcher = pattern.matcher(userAgent);
+ if (matcher.find())
+ {
+ result.put(TYPEKEY,SAFARI);
+ result.put(VERSIONKEY,matcher.group(1));
+ return result;
+ }
+
+ result.put(TYPEKEY,OTHER);
+ result.put(VERSIONKEY,"0.0");
+ return result;
+ }
+
+ public static String getDisposition(String filename, String userAgent, String charSet) throws Exception {
+
+ String encodedFilename = null;
+ HashMap<String,String> result = EgovBrowserUtil.getBrowser(userAgent);
+ float version = Float.parseFloat(result.get(EgovBrowserUtil.VERSIONKEY));
+ //System.out.println("=====>>>>> browser type = "+result.get(TYPEKEY));
+ //System.out.println("=====>>>>> browser version = "+result.get(VERSIONKEY));
+ //System.out.println("=====>>>>> filename = "+filename);
+
+ if ( EgovBrowserUtil.MSIE.equals(result.get(EgovBrowserUtil.TYPEKEY)) && version <= 8.0f ) {
+ encodedFilename = "Content-Disposition: attachment; filename="+URLEncoder.encode(filename, charSet).replaceAll("\\+", "%20");
+ } else if ( EgovBrowserUtil.OTHER.equals(result.get(EgovBrowserUtil.TYPEKEY)) ) {
+ throw new RuntimeException("Not supported browser");
+ } else {
+ encodedFilename = "attachment; filename*="+charSet+"''"+URLEncoder.encode(filename, charSet);
+ }
+
+ return encodedFilename;
+ }
+
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+/* public static void main(String[] args) {
+ // TODO Auto-generated method stub
+ String testUserAgent[] = {
+ // IE 7.0
+ "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
+ ,"Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)"
+ // IE 8.0
+ ,"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
+ // IE 9.0
+ ,"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
+ // IE 10.0
+ ,"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"
+ // IE 11.0
+ ,"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
+ // Chrome 68.0.3440.106
+ ,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
+ // Edge 17.17134
+ ,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
+ // Opera 55.0.2994.44
+ ,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.44"
+ ,"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60"
+ // Firefox 61.0
+ ,"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"
+ // Safari 11.1.2
+ ,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15"
+ // iPhone 11.0
+ ,"Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1"
+ // iPad 9.0
+ ,"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1"
+ // Window Pohone 10
+ ,"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Nokia; Lumia 520) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0"
+ // Window Pohone 8.1
+ ,"Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537"
+ // Window Pohone 8
+ ,"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch)"
+ // Window Pohone 7
+ ,"Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)"
+ // XBOX One
+ ,"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Xbox; Xbox One)"
+ // XBOX 360
+ ,"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox)"
+ };
+
+ HashMap<String,String> result = null;
+ for (int i = 0; i < testUserAgent.length; i++) {
+ result = getBrowser(testUserAgent[i]);
+ System.out.println("1. User Agent : "+testUserAgent[i]);
+ System.out.println("2. Browser Type : "+result.get(TYPEKEY));
+ System.out.println("2. Browser Version : "+result.get(VERSIONKEY));
+ //System.out.println("2. Browser Version convert: "+Float.parseFloat(result.get(VERSIONKEY)));
+ System.out.println("");
+ }
+
+ }*/
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/EgovBrowserUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java (revision 7)
@@ -0,0 +1,48 @@
+package egovframework.com.cmm;
+
+import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @Class Name : EgovComExcepHndlr.java
+ * @Description : 공통서비스의 exception 처리 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 13. 이삼섭
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 13.
+ * @version
+ * @see
+ *
+ */
+public class EgovComExcepHndlr implements ExceptionHandler {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovComExcepHndlr.class);
+
+ /*
+ @Resource(name = "otherSSLMailSender")
+ private SimpleSSLMail mailSender;
+ */
+ /**
+ * 발생된 Exception을 처리한다.
+ */
+ public void occur(Exception ex, String packageName) {
+ //log.debug(" EgovServiceExceptionHandler run...............");
+
+ /*
+ try {
+ mailSender. send(ex, packageName);
+ log.debug(" sending a alert mail is completed ");
+ } catch (Exception e) {
+ LOGGER.error(packageName, ex);
+ }
+ */
+
+ LOGGER.error(packageName, ex);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/exception/EgovXssException.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/exception/EgovXssException.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/exception/EgovXssException.java (revision 7)
@@ -0,0 +1,39 @@
+package egovframework.com.cmm.exception;
+
+import egovframework.rte.fdl.cmmn.exception.BaseRuntimeException;
+
+/**
+ * EgovXssException 클래스
+ *
+ * @author 장동한
+ * @since 2016.10.27
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2016.10.17 장동한 최초 생성
+ * </pre>
+ */
+
+public class EgovXssException extends BaseRuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * EgovXssException 생성자.
+ *
+ * @param defaultMessage 메세지 지정
+ * @param wrappedException 원인 Exception
+ */
+ public EgovXssException(String message, String messageKey) {
+ this.messageKey = messageKey;
+ this.messageParameters = null;
+ this.message = message;
+ this.wrappedException = null;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/exception/EgovXssException.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/RegacyPaginationRenderer.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/RegacyPaginationRenderer.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/RegacyPaginationRenderer.java (revision 7)
@@ -0,0 +1,48 @@
+package egovframework.com.cmm;
+
+import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer;
+
+import javax.servlet.ServletContext;
+
+import org.springframework.web.context.ServletContextAware;
+/**
+ * ImagePaginationRenderer.java 클래스
+ *
+ * @author 서준식
+ * @since 2011. 9. 16.
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2011. 9. 16. 서준식 이미지 경로에 ContextPath추가
+ * 2016. 6. 17. 장동한 표준프레임워크 v3.6 리뉴얼
+ * </pre>
+ */
+public class RegacyPaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{
+
+ private ServletContext servletContext;
+
+ public RegacyPaginationRenderer() {
+
+ }
+
+ public void initVariables(){
+
+ firstPageLabel = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/icon/icon_prevend.gif\" alt=\"처음\" border=\"0\"/></a> ";
+ previousPageLabel = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/icon/icon_prev.gif\" alt=\"이전\" border=\"0\"/></a> ";
+ currentPageLabel = "<strong>{0}</strong> ";
+ otherPageLabel = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">{2}</a> ";
+ nextPageLabel = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/icon/icon_next.gif\" alt=\"다음\" border=\"0\"/></a> ";
+ lastPageLabel = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/icon/icon_nextend.gif\" alt=\"마지막\" border=\"0\"/></a> ";
+ }
+
+ public void setServletContext(ServletContext servletContext) {
+ this.servletContext = servletContext;
+ initVariables();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/RegacyPaginationRenderer.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java (revision 7)
@@ -0,0 +1,165 @@
+package egovframework.com.cmm.web;
+
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cmm.service.EgovFileMngService;
+import egovframework.com.cmm.service.FileVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 파일 조회, 삭제, 다운로드 처리를 위한 컨트롤러 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.3.25 이삼섭 최초 생성
+ * 2016.10.13 장동한 deleteFileInf 메소드 return 방식 수정
+ *
+ * </pre>
+ */
+@Controller
+public class EgovFileMngController {
+
+ @Resource(name = "EgovFileMngService")
+ private EgovFileMngService fileService;
+
+ /**
+ * 첨부파일에 대한 목록을 조회한다.
+ *
+ * @param fileVO
+ * @param atchFileId
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cmm/fms/selectFileInfs.do")
+ public String selectFileInfs(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
+ String atchFileId = (String)commandMap.get("param_atchFileId");
+
+ fileVO.setAtchFileId(atchFileId);
+ List<FileVO> result = fileService.selectFileInfs(fileVO);
+
+ model.addAttribute("fileList", result);
+ model.addAttribute("updateFlag", "N");
+ model.addAttribute("fileListCnt", result.size());
+ model.addAttribute("atchFileId", atchFileId);
+
+ return "egovframework/com/cmm/fms/EgovFileList";
+ }
+
+ /**
+ * 첨부파일 변경을 위한 수정페이지로 이동한다.
+ *
+ * @param fileVO
+ * @param atchFileId
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cmm/fms/selectFileInfsForUpdate.do")
+ public String selectFileInfsForUpdate(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map<String, Object> commandMap,
+ //SessionVO sessionVO,
+ ModelMap model) throws Exception {
+
+ String atchFileId = (String)commandMap.get("param_atchFileId");
+
+ fileVO.setAtchFileId(atchFileId);
+
+ List<FileVO> result = fileService.selectFileInfs(fileVO);
+
+ model.addAttribute("fileList", result);
+ model.addAttribute("updateFlag", "Y");
+ model.addAttribute("fileListCnt", result.size());
+ model.addAttribute("atchFileId", atchFileId);
+
+ return "egovframework/com/cmm/fms/EgovFileList";
+ }
+
+ /**
+ * 첨부파일에 대한 삭제를 처리한다.
+ *
+ * @param fileVO
+ * @param returnUrl
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cmm/fms/deleteFileInfs.do")
+ public String deleteFileInf(@ModelAttribute("searchVO") FileVO fileVO,
+ //SessionVO sessionVO,
+ HttpServletRequest request,
+ ModelMap model) throws Exception {
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if (isAuthenticated) {
+ fileService.deleteFileInf(fileVO);
+ }
+
+ return "blank";
+
+ //--------------------------------------------
+ // contextRoot가 있는 경우 제외 시켜야 함
+ //--------------------------------------------
+ ////return "forward:/cmm/fms/selectFileInfs.do";
+ //return "forward:" + returnUrl;
+ /* *******************************************************
+ * modify by jdh
+ *******************************************************
+ if ("".equals(request.getContextPath()) || "/".equals(request.getContextPath())) {
+ return "forward:" + returnUrl;
+ }
+
+ if (returnUrl.startsWith(request.getContextPath())) {
+ return "forward:" + returnUrl.substring(returnUrl.indexOf("/", 1));
+ } else {
+ return "forward:" + returnUrl;
+ }
+ */
+ ////------------------------------------------
+ }
+
+ /**
+ * 이미지 첨부파일에 대한 목록을 조회한다.
+ *
+ * @param fileVO
+ * @param atchFileId
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cmm/fms/selectImageFileInfs.do")
+ public String selectImageFileInfs(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map<String, Object> commandMap,
+ //SessionVO sessionVO,
+ ModelMap model) throws Exception {
+
+ String atchFileId = (String)commandMap.get("atchFileId");
+
+ fileVO.setAtchFileId(atchFileId);
+ List<FileVO> result = fileService.selectImageFileList(fileVO);
+
+ model.addAttribute("fileList", result);
+
+ return "egovframework/com/cmm/fms/EgovImgFileList";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java (revision 7)
@@ -0,0 +1,154 @@
+package egovframework.com.cmm.web;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.cmm.EgovBrowserUtil;
+import egovframework.com.cmm.service.EgovFileMngService;
+import egovframework.com.cmm.service.FileVO;
+import egovframework.com.cmm.util.EgovBasicLogger;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+
+/**
+ * 파일 다운로드를 위한 컨트롤러 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------------ -------- ---------------------------
+ * 2009.03.25 이삼섭 최초 생성
+ * 2014.02.24 이기하 IE11 브라우저 한글 파일 다운로드시 에러 수정
+ * 2018.08.28 신용호 Safari, Chrome, Firefox, Opera 한글파일 다운로드 처리 수정 (macOS에서 확장자 exe붙는 문제 처리)
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ * </pre>
+ */
+@Controller
+public class EgovFileDownloadController {
+
+ @Resource(name = "EgovFileMngService")
+ private EgovFileMngService fileService;
+
+ /**
+ * 브라우저 구분 얻기.
+ *
+ * @param request
+ * @return
+ */
+ private String getBrowser(HttpServletRequest request) {
+ String header = request.getHeader("User-Agent");
+ if (header.indexOf("MSIE") > -1) {
+ return "MSIE";
+ } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지
+ return "Trident";
+ } else if (header.indexOf("Chrome") > -1) {
+ return "Chrome";
+ } else if (header.indexOf("Opera") > -1) {
+ return "Opera";
+ }
+ return "Firefox";
+ }
+
+ /**
+ * 첨부파일로 등록된 파일에 대하여 다운로드를 제공한다.
+ *
+ * @param commandMap
+ * @param response
+ * @throws Exception
+ */
+ @RequestMapping(value = "/cmm/fms/FileDown.do")
+ public void cvplFileDownload(@RequestParam Map<String, Object> commandMap, HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ String atchFileId = (String) commandMap.get("atchFileId");
+ String fileSn = (String) commandMap.get("fileSn");
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if (isAuthenticated) {
+
+ FileVO fileVO = new FileVO();
+ fileVO.setAtchFileId(atchFileId);
+ fileVO.setFileSn(fileSn);
+ FileVO fvo = fileService.selectFileInf(fileVO);
+
+ File uFile = new File(fvo.getFileStreCours(), fvo.getStreFileNm());
+ long fSize = uFile.length();
+
+ if (fSize > 0) {
+ String mimetype = "application/x-msdownload";
+
+ String userAgent = request.getHeader("User-Agent");
+ HashMap<String,String> result = EgovBrowserUtil.getBrowser(userAgent);
+ if ( !EgovBrowserUtil.MSIE.equals(result.get(EgovBrowserUtil.TYPEKEY)) ) {
+ mimetype = "application/x-stuff";
+ }
+
+ String contentDisposition = EgovBrowserUtil.getDisposition(fvo.getOrignlFileNm(),userAgent,"UTF-8");
+ //response.setBufferSize(fSize); // OutOfMemeory 발생
+ response.setContentType(mimetype);
+ //response.setHeader("Content-Disposition", "attachment; filename=\"" + contentDisposition + "\"");
+ response.setHeader("Content-Disposition", contentDisposition);
+ response.setContentLengthLong(fSize);
+
+ /*
+ * FileCopyUtils.copy(in, response.getOutputStream());
+ * in.close();
+ * response.getOutputStream().flush();
+ * response.getOutputStream().close();
+ */
+ BufferedInputStream in = null;
+ BufferedOutputStream out = null;
+
+ try {
+ in = new BufferedInputStream(new FileInputStream(uFile));
+ out = new BufferedOutputStream(response.getOutputStream());
+
+ FileCopyUtils.copy(in, out);
+ out.flush();
+ } catch (IOException ex) {
+ // 다음 Exception 무시 처리
+ // Connection reset by peer: socket write error
+ EgovBasicLogger.ignore("IO Exception", ex);
+ } finally {
+ EgovResourceCloseHelper.close(in, out);
+ }
+
+ } else {
+ response.setContentType("application/x-msdownload");
+
+ PrintWriter printwriter = response.getWriter();
+
+ printwriter.println("<html>");
+ printwriter.println("<br><br><br><h2>Could not get file name:<br>" + fvo.getOrignlFileNm() + "</h2>");
+ printwriter.println("<br><br><br><center><h3><a href='javascript: history.go(-1)'>Back</a></h3></center>");
+ printwriter.println("<br><br><br>© webAccess");
+ printwriter.println("</html>");
+
+ printwriter.flush();
+ printwriter.close();
+ }
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java (revision 7)
@@ -0,0 +1,134 @@
+package egovframework.com.cmm.web;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Map;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.SessionVO;
+import egovframework.com.cmm.service.EgovFileMngService;
+import egovframework.com.cmm.service.FileVO;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+
+/**
+ * @Class Name : EgovImageProcessController.java
+ * @Description :
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ---------- --------- -------------------
+ * 2009.04.02 이삼섭 최초생성
+ * 2014.03.31 유지보수 fileSn 오류수정
+ * 2018.08.31 이정은 MimeType 중복설정 제거
+ * 2019.11.29 신용호 KISA 보안약점 조치 : HTTP응답분할(HTTP_Response_Splitting,CRLF)취약점 조치
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 4. 2.
+ * @version
+ * @see
+ *
+ */
+@SuppressWarnings("serial")
+@Controller
+public class EgovImageProcessController extends HttpServlet {
+
+ @Resource(name = "EgovFileMngService")
+ private EgovFileMngService fileService;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovImageProcessController.class);
+
+ /**
+ * 첨부된 이미지에 대한 미리보기 기능을 제공한다.
+ *
+ * @param atchFileId
+ * @param fileSn
+ * @param sessionVO
+ * @param model
+ * @param response
+ * @throws Exception
+ */
+ @RequestMapping("/cmm/fms/getImage.do")
+ public void getImageInf(SessionVO sessionVO, ModelMap model, @RequestParam Map<String, Object> commandMap, HttpServletResponse response) throws Exception {
+
+ //@RequestParam("atchFileId") String atchFileId,
+ //@RequestParam("fileSn") String fileSn,
+ String atchFileId = (String)commandMap.get("atchFileId");
+ String fileSn = (String)commandMap.get("fileSn");
+
+ FileVO vo = new FileVO();
+
+ vo.setAtchFileId(atchFileId);
+ vo.setFileSn(fileSn);
+
+ //------------------------------------------------------------
+ // fileSn이 없는 경우 마지막 파일 참조
+ //------------------------------------------------------------
+ if (fileSn == null || fileSn.equals("")) {
+ int newMaxFileSN = fileService.getMaxFileSN(vo);
+ vo.setFileSn(Integer.toString(newMaxFileSN - 1));
+ }
+ //------------------------------------------------------------
+
+ FileVO fvo = fileService.selectFileInf(vo);
+
+ //String fileLoaction = fvo.getFileStreCours() + fvo.getStreFileNm();
+
+ File file = null;
+ FileInputStream fis = null;
+
+ BufferedInputStream in = null;
+ ByteArrayOutputStream bStream = null;
+
+ try {
+ file = new File(fvo.getFileStreCours(), fvo.getStreFileNm());
+ fis = new FileInputStream(file);
+
+ in = new BufferedInputStream(fis);
+ bStream = new ByteArrayOutputStream();
+
+ int imgByte;
+ while ((imgByte = in.read()) != -1) {
+ bStream.write(imgByte);
+ }
+
+ String type = "";
+
+ if (fvo.getFileExtsn() != null && !"".equals(fvo.getFileExtsn())) {
+ if ("jpg".equals(fvo.getFileExtsn().toLowerCase())) {
+ type = "image/jpeg";
+ } else {
+ type = "image/" + fvo.getFileExtsn().toLowerCase();
+ }
+ /*type = "image/" + fvo.getFileExtsn().toLowerCase();*/
+
+ } else {
+ LOGGER.debug("Image fileType is null.");
+ }
+
+ response.setHeader("Content-Type", EgovWebUtil.removeCRLF(type));
+ response.setContentLength(bStream.size());
+
+ bStream.writeTo(response.getOutputStream());
+
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+
+ } finally {
+ EgovResourceCloseHelper.close(bStream, in, fis);
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java (revision 7)
@@ -0,0 +1,149 @@
+package egovframework.com.cmm.web;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the ";License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS"; BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+import org.apache.commons.fileupload.FileItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartException;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.utl.fcc.service.EgovFileUploadUtil;
+
+/**
+ * 실행환경의 파일업로드 처리를 위한 기능 클래스
+ *
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.03.25 이삼섭 최초 생성
+ * 2011.06.11 서준식 스프링 3.0 업그레이드 API변경으로인한 수정
+ * 2020.10.27 신용호 예외처리 수정
+ * 2020.10.29 신용호 허용되지 않는 확장자 업로드 제한 (globals.properties > Globals.fileUpload.Extensions)
+ *
+ * </pre>
+ */
+public class EgovMultipartResolver extends CommonsMultipartResolver {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovMultipartResolver.class);
+
+ public EgovMultipartResolver() {
+ }
+
+ /**
+ * 첨부파일 처리를 위한 multipart resolver를 생성한다.
+ *
+ * @param servletContext
+ */
+ public EgovMultipartResolver(ServletContext servletContext) {
+ super(servletContext);
+ }
+
+ /**
+ * multipart에 대한 parsing을 처리한다.
+ */
+ @Override
+ protected MultipartParsingResult parseFileItems(List<FileItem> fileItems, String encoding) {
+
+ // 스프링 3.0변경으로 수정한 부분
+ MultiValueMap<String, MultipartFile> multipartFiles = new LinkedMultiValueMap<String, MultipartFile>();
+ Map<String, String[]> multipartParameters = new HashMap<String, String[]>();
+ String whiteListFileUploadExtensions = EgovProperties.getProperty("Globals.fileUpload.Extensions");
+
+ // Extract multipart files and multipart parameters.
+ for (Iterator<FileItem> it = fileItems.iterator(); it.hasNext();) {
+ FileItem fileItem = it.next();
+
+ if (fileItem.isFormField()) {
+
+ String value = null;
+ if (encoding != null) {
+ try {
+ value = fileItem.getString(encoding);
+ } catch (UnsupportedEncodingException ex) {
+ LOGGER.warn("Could not decode multipart item '{}' with encoding '{}': using platform default",
+ fileItem.getFieldName(), encoding);
+ value = fileItem.getString();
+ }
+ } else {
+ value = fileItem.getString();
+ }
+ String[] curParam = (String[]) multipartParameters.get(fileItem.getFieldName());
+ if (curParam == null) {
+ // simple form field
+ multipartParameters.put(fileItem.getFieldName(), new String[] { value });
+ } else {
+ // array of simple form fields
+ String[] newParam = StringUtils.addStringToArray(curParam, value);
+ multipartParameters.put(fileItem.getFieldName(), newParam);
+ }
+ } else {
+
+ CommonsMultipartFile file = createMultipartFile(fileItem);
+ multipartFiles.add(file.getName(), file);
+
+ LOGGER.debug("Found multipart file [{" + file.getName() + "}] of size {" + file.getSize()
+ + "} bytes with original filename [{" + file.getOriginalFilename() + "}], stored {"
+ + file.getStorageDescription() + "}");
+
+ String fileName = file.getOriginalFilename();
+ String fileExtension = EgovFileUploadUtil.getFileExtension(fileName);
+ LOGGER.debug("Found File Extension = "+fileExtension);
+ if (whiteListFileUploadExtensions == null || "".equals(whiteListFileUploadExtensions)) {
+ LOGGER.debug("The file extension whitelist has not been set.");
+ } else {
+ if (fileName == null || "".equals(fileName)) {
+ LOGGER.debug("No file name.");
+ } else {
+ if ("".equals(fileExtension)) { // 확장자 없는 경우 처리 불가
+ throw new SecurityException("[No file extension] File extension not allowed.");
+ }
+ if ((whiteListFileUploadExtensions+".").contains("."+fileExtension.toLowerCase()+".")) {
+ LOGGER.debug("File extension allowed.");
+ } else {
+ throw new SecurityException("["+fileExtension+"] File extension not allowed.");
+ }
+ }
+ }
+
+ }
+ }
+
+ return new MultipartParsingResult(multipartFiles, multipartParameters, null);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java (revision 7)
@@ -0,0 +1,22 @@
+package egovframework.com.cmm.web;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.springframework.beans.propertyeditors.CustomDateEditor;
+import org.springframework.beans.propertyeditors.StringTrimmerEditor;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.support.WebBindingInitializer;
+import org.springframework.web.context.request.WebRequest;
+
+public class EgovBindingInitializer implements WebBindingInitializer {
+
+
+ public void initBinder(WebDataBinder binder, WebRequest request) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ dateFormat.setLenient(false);
+ binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
+ binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java (revision 7)
@@ -0,0 +1,208 @@
+package egovframework.com.cmm.web;
+
+/**
+ * 컴포넌트 설치 후 설치된 컴포넌트들을 IncludedInfo annotation을 통해 찾아낸 후
+ * 화면에 표시할 정보를 처리하는 Controller 클래스
+ * <Notice>
+ * 개발시 메뉴 구조가 잡히기 전에 배포파일들에 포함된 공통 컴포넌트들의 목록성 화면에
+ * URL을 제공하여 개발자가 편하게 활용하도록 하기 위해 작성된 것으로,
+ * 실제 운영되는 시스템에서는 적용해서는 안 됨
+ * 실 운영 시에는 삭제해서 배포해도 좋음
+ * <Disclaimer>
+ * 운영시에 본 컨트롤을 사용하여 메뉴를 구성하는 경우 성능 문제를 일으키거나
+ * 사용자별 메뉴 구성에 오류를 발생할 수 있음
+ * @author 공통컴포넌트 정진오
+ * @since 2011.08.26
+ * @version 2.0.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2011.08.26 정진오 최초 생성
+ * 2011.09.16 서준식 컨텐츠 페이지 생성
+ * 2011.09.26 이기하 header, footer 페이지 생성
+ * 2019.12.04 신용호 KISA 보안코드 점검 : Map<Integer, IncludedCompInfoVO> map를 지역변수로 수정
+ * 2020.07.08 신용호 비밀번호를 수정한후 경과한 날짜 조회
+ * 2020.08.28 정진호 표준프레임워크 v3.10 개선
+ * </pre>
+ */
+
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import egovframework.com.cmm.IncludedCompInfoVO;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.uat.uia.service.EgovLoginService;
+
+@Controller
+public class EgovComIndexController implements ApplicationContextAware, InitializingBean {
+
+ private ApplicationContext applicationContext;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovComIndexController.class);
+
+ public void afterPropertiesSet() throws Exception {}
+
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ this.applicationContext = applicationContext;
+
+ LOGGER.info("EgovComIndexController setApplicationContext method has called!");
+ }
+
+ /** EgovLoginService */
+ @Resource(name = "loginService")
+ private EgovLoginService loginService;
+
+ @RequestMapping("/index.do")
+ public String index(ModelMap model) {
+ return "egovframework/com/cmm/EgovUnitMain";
+ }
+
+ @RequestMapping("/EgovTop.do")
+ public String top() {
+ return "egovframework/com/cmm/EgovUnitTop";
+ }
+
+ @RequestMapping("/EgovBottom.do")
+ public String bottom() {
+ return "egovframework/com/cmm/EgovUnitBottom";
+ }
+
+ @RequestMapping("/EgovContent.do")
+ public String setContent(ModelMap model) throws Exception {
+
+ // 설정된 비밀번호 유효기간을 가져온다. ex) 180이면 비밀번호 변경후 만료일이 앞으로 180일
+ String propertyExpirePwdDay = EgovProperties.getProperty("Globals.ExpirePwdDay");
+ int expirePwdDay = 0 ;
+ try {
+ expirePwdDay = Integer.parseInt(propertyExpirePwdDay);
+ } catch (Exception e) {
+ LOGGER.debug("convert expirePwdDay Err : "+e.getMessage());
+ }
+
+ model.addAttribute("expirePwdDay", expirePwdDay);
+
+ // 비밀번호 설정일로부터 몇일이 지났는지 확인한다. ex) 3이면 비빌번호 설정후 3일 경과
+ LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+ model.addAttribute("loginVO", loginVO);
+ int passedDayChangePWD = 0;
+ if ( loginVO != null ) {
+ LOGGER.debug("===>>> loginVO.getId() = "+loginVO.getId());
+ LOGGER.debug("===>>> loginVO.getUniqId() = "+loginVO.getUniqId());
+ LOGGER.debug("===>>> loginVO.getUserSe() = "+loginVO.getUserSe());
+ // 비밀번호 변경후 경과한 일수
+ passedDayChangePWD = loginService.selectPassedDayChangePWD(loginVO);
+ LOGGER.debug("===>>> passedDayChangePWD = "+passedDayChangePWD);
+ model.addAttribute("passedDay", passedDayChangePWD);
+ }
+
+ // 만료일자로부터 경과한 일수 => ex)1이면 만료일에서 1일 경과
+ model.addAttribute("elapsedTimeExpiration", passedDayChangePWD - expirePwdDay);
+
+ return "egovframework/com/cmm/EgovUnitContent";
+ }
+
+ @RequestMapping("/EgovLeft.do")
+ public String setLeftMenu(ModelMap model) {
+
+ Map<Integer, IncludedCompInfoVO> map = new TreeMap<Integer, IncludedCompInfoVO>();
+ RequestMapping rmAnnotation;
+ IncludedInfo annotation;
+ IncludedCompInfoVO zooVO;
+
+ /*
+ * EgovLoginController가 AOP Proxy되는 바람에 클래스를 reflection으로 가져올 수 없음
+ */
+ try {
+ Class<?> loginController = Class.forName("egovframework.com.uat.uia.web.EgovLoginController");
+ Method[] methods = loginController.getMethods();
+ for (int i = 0; i < methods.length; i++) {
+ annotation = methods[i].getAnnotation(IncludedInfo.class);
+
+ if (annotation != null) {
+ LOGGER.debug("Found @IncludedInfo Method : {}", methods[i]);
+ zooVO = new IncludedCompInfoVO();
+ zooVO.setName(annotation.name());
+ zooVO.setOrder(annotation.order());
+ zooVO.setGid(annotation.gid());
+
+ rmAnnotation = methods[i].getAnnotation(RequestMapping.class);
+ if ("".equals(annotation.listUrl()) && rmAnnotation != null) {
+ zooVO.setListUrl(rmAnnotation.value()[0]);
+ } else {
+ zooVO.setListUrl(annotation.listUrl());
+ }
+ map.put(zooVO.getOrder(), zooVO);
+ }
+ }
+ } catch (ClassNotFoundException e) {
+ LOGGER.error("No egovframework.com.uat.uia.web.EgovLoginController!!");
+ }
+ /* 여기까지 AOP Proxy로 인한 코드 */
+
+ /*@Controller Annotation 처리된 클래스를 모두 찾는다.*/
+ Map<String, Object> myZoos = applicationContext.getBeansWithAnnotation(Controller.class);
+ LOGGER.debug("How many Controllers : ", myZoos.size());
+ for (final Object myZoo : myZoos.values()) {
+ Class<? extends Object> zooClass = myZoo.getClass();
+
+ Method[] methods = zooClass.getMethods();
+ LOGGER.debug("Controller Detected {}", zooClass);
+ for (int i = 0; i < methods.length; i++) {
+ annotation = methods[i].getAnnotation(IncludedInfo.class);
+
+ if (annotation != null) {
+ //LOG.debug("Found @IncludedInfo Method : " + methods[i] );
+ zooVO = new IncludedCompInfoVO();
+ zooVO.setName(annotation.name());
+ zooVO.setOrder(annotation.order());
+ zooVO.setGid(annotation.gid());
+ /*
+ * 목록형 조회를 위한 url 매핑은 @IncludedInfo나 @RequestMapping에서 가져온다
+ */
+ rmAnnotation = methods[i].getAnnotation(RequestMapping.class);
+ if ("".equals(annotation.listUrl())) {
+ zooVO.setListUrl(rmAnnotation.value()[0]);
+ } else {
+ zooVO.setListUrl(annotation.listUrl());
+ }
+
+ map.put(zooVO.getOrder(), zooVO);
+ }
+ }
+ }
+
+ model.addAttribute("resultList", map.values());
+
+ LOGGER.debug("EgovComIndexController index is called ");
+
+ return "egovframework/com/cmm/EgovUnitLeft";
+ }
+
+ // context-security.xml 설정
+ // csrf="true"인 경우 csrf Token이 없는경우 이동하는 페이지
+ // csrfAccessDeniedUrl="/egovCSRFAccessDenied.do"
+ @RequestMapping("/egovCSRFAccessDenied.do")
+ public String egovCSRFAccessDenied() {
+ return "egovframework/com/cmm/error/csrfAccessDenied";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java (revision 7)
@@ -0,0 +1,93 @@
+package egovframework.com.cmm.web;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.rte.fdl.property.EgovPropertyService;
+
+/**
+ * @Class Name : EgovComUtlController.java
+ * @Description : 공통유틸리티성 작업을 위한 Controller
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * 2009.03.02 조재영 최초 생성
+ * 2011.10.07 이기하 .action -> .do로 변경하면서 동일 매핑이 되어 삭제처리
+ * 2015.11.12 김연호 한국인터넷진흥원 웹 취약점 개선
+ * 2019.04.25 신용호 moveToPage() 화이트리스트 처리
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+@Controller
+public class EgovComUtlController {
+
+ //@Resource(name = "egovUserManageService")
+ //private EgovUserManageService egovUserManageService;
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovComUtlController.class);
+
+ @Resource(name = "egovPageLinkWhitelist")
+ protected List<String> egovWhitelist;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /**
+ * JSP 호출작업만 처리하는 공통 함수
+ */
+ @RequestMapping(value="/EgovPageLink.do")
+ public String moveToPage(@RequestParam("link") String linkPage){
+ String link = linkPage;
+ link = link.replace(";", "");
+ link = link.replace(".", "");
+
+ // service 사용하여 리턴할 결과값 처리하는 부분은 생략하고 단순 페이지 링크만 처리함
+ if (linkPage==null || linkPage.equals("")){
+ link="egovframework/com/cmm/egovError";
+ }
+
+ // 화이트 리스트 처리
+ // whitelist목록에 있는 경우 결과가 true, 결과가 false인경우 FAIL처리
+ if (egovWhitelist.contains(linkPage) == false) {
+ LOGGER.debug("Page Link WhiteList Error! Please check whitelist!");
+ link="egovframework/com/cmm/egovError";
+ }
+
+ // 안전한 경로 문자열로 조치
+ link = EgovWebUtil.filePathBlackList(link);
+
+ return link;
+ }
+
+ /**
+ * 모달조회
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/EgovModal.do")
+ public String selectUtlJsonInquire() throws Exception {
+ return "egovframework/com/cmm/EgovModal";
+ }
+
+ /**
+ * validato rule dynamic Javascript
+ */
+ @RequestMapping("/validator.do")
+ public String validate(){
+ return "egovframework/com/cmm/validator";
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java (revision 7)
@@ -0,0 +1,121 @@
+package egovframework.com.cmm;
+/*
+ * Copyright 2002-2005 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.IOException;
+import java.io.Reader;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.support.lob.LobCreator;
+import org.springframework.jdbc.support.lob.LobHandler;
+
+import egovframework.rte.psl.orm.ibatis.support.AbstractLobTypeHandler;
+
+/**
+ * iBATIS TypeHandler implementation for Strings that get mapped to CLOBs.
+ * Retrieves the LobHandler to use from SqlMapClientFactoryBean at config time.
+ *
+ * <p>Particularly useful for storing Strings with more than 4000 characters in an
+ * Oracle database (only possible via CLOBs), in combination with OracleLobHandler.
+ *
+ * <p>Can also be defined in generic iBATIS mappings, as DefaultLobCreator will
+ * work with most JDBC-compliant database drivers. In this case, the field type
+ * does not have to be BLOB: For databases like MySQL and MS SQL Server, any
+ * large enough binary type will work.
+ *
+ * @author Juergen Hoeller
+ * @since 1.1.5
+ * @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#setLobHandler
+ *
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ *
+ *
+ */
+@SuppressWarnings("deprecation")
+public class AltibaseClobStringTypeHandler extends AbstractLobTypeHandler {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AltibaseClobStringTypeHandler.class);
+
+ /**
+ * Constructor used by iBATIS: fetches config-time LobHandler from
+ * SqlMapClientFactoryBean.
+ * @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#getConfigTimeLobHandler
+ */
+ public AltibaseClobStringTypeHandler() {
+ super();
+ }
+
+ /**
+ * Constructor used for testing: takes an explicit LobHandler.
+ */
+ protected AltibaseClobStringTypeHandler(LobHandler lobHandler) {
+ super(lobHandler);
+ }
+
+ protected void setParameterInternal(
+ PreparedStatement ps, int index, Object value, String jdbcType, LobCreator lobCreator)
+ throws SQLException {
+ lobCreator.setClobAsString(ps, index, (String) value);
+ }
+
+
+ protected Object getResultInternal(ResultSet rs, int index, LobHandler lobHandler)
+ throws SQLException {
+
+ StringBuffer read_data = new StringBuffer("");
+ int read_length;
+
+ char [] buf = new char[1024];
+
+ Reader rd = lobHandler.getClobAsCharacterStream(rs, index);
+ try {
+ while( (read_length=rd.read(buf)) != -1) {
+ read_data.append(buf, 0, read_length);
+ }
+ } catch (IOException ie) {
+ SQLException sqle = new SQLException(ie.getMessage());
+ throw sqle;
+ // 2011.10.10 보안점검 후속조치
+ } finally {
+ if (rd != null) {
+ try {
+ rd.close();
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ } catch (IOException ignore) {
+ LOGGER.error("[IOException] : Connection Close");
+ } catch (Exception ignore) {
+ LOGGER.error("["+ ignore.getClass() +"] Connection Close : " + ignore.getMessage());
+ }
+ }
+ }
+
+ return read_data.toString();
+
+ //return lobHandler.getClobAsString(rs, index);
+ }
+
+ public Object valueOf(String s) {
+ return s;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/ComDefaultVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/ComDefaultVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/ComDefaultVO.java (revision 7)
@@ -0,0 +1,166 @@
+package egovframework.com.cmm;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * @Class Name : ComDefaultVO.java
+ * @Description : ComDefaultVO class
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 조재영 최초 생성
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+@SuppressWarnings("serial")
+public class ComDefaultVO implements Serializable {
+
+ /** 검색조건 */
+ private String searchCondition = "";
+
+ /** 검색Keyword */
+ private String searchKeyword = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /** 검색KeywordFrom */
+ private String searchKeywordFrom = "";
+
+ /** 검색KeywordTo */
+ private String searchKeywordTo = "";
+
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ public String getSearchCondition() {
+ return searchCondition;
+ }
+
+ public void setSearchCondition(String searchCondition) {
+ this.searchCondition = searchCondition;
+ }
+
+ public String getSearchKeyword() {
+ return searchKeyword;
+ }
+
+ public void setSearchKeyword(String searchKeyword) {
+ this.searchKeyword = searchKeyword;
+ }
+
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+
+ /**
+ * searchKeywordFrom attribute를 리턴한다.
+ * @return String
+ */
+ public String getSearchKeywordFrom() {
+ return searchKeywordFrom;
+ }
+
+ /**
+ * searchKeywordFrom attribute 값을 설정한다.
+ * @param searchKeywordFrom String
+ */
+ public void setSearchKeywordFrom(String searchKeywordFrom) {
+ this.searchKeywordFrom = searchKeywordFrom;
+ }
+
+ /**
+ * searchKeywordTo attribute를 리턴한다.
+ * @return String
+ */
+ public String getSearchKeywordTo() {
+ return searchKeywordTo;
+ }
+
+ /**
+ * searchKeywordTo attribute 값을 설정한다.
+ * @param searchKeywordTo String
+ */
+ public void setSearchKeywordTo(String searchKeywordTo) {
+ this.searchKeywordTo = searchKeywordTo;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/ComDefaultVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/EgovMessageSource.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/EgovMessageSource.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/EgovMessageSource.java (revision 7)
@@ -0,0 +1,87 @@
+package egovframework.com.cmm;
+
+import java.util.Locale;
+
+import org.springframework.context.MessageSource;
+import org.springframework.context.support.ReloadableResourceBundleMessageSource;
+
+/**
+ * 메시지 리소스 사용을 위한 MessageSource 인터페이스 및 ReloadableResourceBundleMessageSource 클래스의 구현체
+ * @author 공통서비스 개발팀 이문준
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이문준 최초 생성
+ * 2017.07.21 장동한 args, locale 설정
+ *
+ * </pre>
+ */
+
+public class EgovMessageSource extends ReloadableResourceBundleMessageSource implements MessageSource {
+
+ private ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource;
+
+ /**
+ * getReloadableResourceBundleMessageSource()
+ * @param reloadableResourceBundleMessageSource - resource MessageSource
+ * @return ReloadableResourceBundleMessageSource
+ */
+ public void setReloadableResourceBundleMessageSource(ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource) {
+ this.reloadableResourceBundleMessageSource = reloadableResourceBundleMessageSource;
+ }
+
+ /**
+ * getReloadableResourceBundleMessageSource()
+ * @return ReloadableResourceBundleMessageSource
+ */
+ public ReloadableResourceBundleMessageSource getReloadableResourceBundleMessageSource() {
+ return reloadableResourceBundleMessageSource;
+ }
+
+ /**
+ * 정의된 메세지 조회
+ * @param code - 메세지 코드
+ * @return String
+ */
+ public String getMessage(String code) {
+ return getReloadableResourceBundleMessageSource().getMessage(code, null, Locale.getDefault());
+ }
+
+ /**
+ * 정의된 메세지 조회
+ * @param code - 메세지 코드
+ * @param locale - 로케일
+ * @return String
+ */
+ public String getMessage(String code, Locale locale) {
+ return getReloadableResourceBundleMessageSource().getMessage(code, null, locale);
+ }
+
+ /**
+ * 정의된 메세지 조회
+ * @param code - 메세지 코드
+ * @param args - 매개변수
+ * @return String
+ */
+ public String getMessageArgs(String code, Object[] args) {
+ return getReloadableResourceBundleMessageSource().getMessage(code, args, Locale.getDefault());
+ }
+
+ /**
+ * 정의된 메세지 조회
+ * @param code - 메세지 코드
+ * @param args - 매개변수
+ * @param locale - 로케일
+ * @return String
+ */
+ public String getMessageArgsLocale(String code, Object[] args, Locale locale) {
+ return getReloadableResourceBundleMessageSource().getMessage(code, args, locale);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/EgovMessageSource.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/taglibs/DoubleSubmitTag.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/taglibs/DoubleSubmitTag.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/taglibs/DoubleSubmitTag.java (revision 7)
@@ -0,0 +1,88 @@
+package egovframework.com.cmm.taglibs;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import egovframework.com.cmm.util.EgovDoubleSubmitHelper;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * TagSupport to support to double submit preventer
+ * @author Vincent Han
+ * @since 2014.08.07
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2014.08.07 표준프레임워크센터 최초 생성
+ *
+ * </pre>
+ */
+public class DoubleSubmitTag extends TagSupport {
+ private static final Logger LOGGER = LoggerFactory.getLogger(DoubleSubmitTag.class);
+
+ /**
+ * Generated Serial Version UID
+ */
+ private static final long serialVersionUID = 5242217605452312594L;
+
+ private String tokenKey = EgovDoubleSubmitHelper.DEFAULT_TOKEN_KEY;
+
+ public String getTokenKey() {
+ return tokenKey;
+ }
+
+ public void setTokenKey(String tokenKey) {
+ this.tokenKey = tokenKey;
+ }
+
+ @SuppressWarnings("unchecked")
+ public int doStartTag() throws JspException {
+ StringBuilder buffer = new StringBuilder();
+
+ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
+ HttpSession session = request.getSession();
+
+ Map<String, String> map = null;
+
+ if (session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY) == null) {
+ map = new HashMap<String, String>();
+
+ session.setAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY, map);
+ } else {
+ map = (Map<String, String>) session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY);
+ }
+
+ // First call (check session)
+ if (map.get(tokenKey) == null) {
+
+ map.put(tokenKey, EgovDoubleSubmitHelper.getNewUUID());
+
+ LOGGER.debug("[Double Submit] session token created({}) : {}", tokenKey, map.get(tokenKey));
+ }
+
+ buffer.append("<input type='hidden' name='").append(EgovDoubleSubmitHelper.PARAMETER_NAME).append("' value='").append(map.get(tokenKey)).append("'/>");
+
+ try {
+ pageContext.getOut().print(buffer.toString());
+ } catch (IOException e) {
+ throw new JspTagException("Error: IOException while writing to the user");
+ }
+
+ return SKIP_BODY;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/taglibs/DoubleSubmitTag.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java (revision 7)
@@ -0,0 +1,185 @@
+package egovframework.com.cmm;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.3.11 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class ComDefaultCodeVO implements Serializable {
+ /** 코드 ID */
+ private String codeId = "";
+
+ /** 상세코드 */
+ private String code = "";
+
+ /** 코드명 */
+ private String codeNm = "";
+
+ /** 코드설명 */
+ private String codeDc = "";
+
+ /** 특정테이블명 */
+ private String tableNm = ""; //특정테이블에서 코드정보를추출시 사용
+
+ /** 상세 조건 여부 */
+ private String haveDetailCondition = "N";
+
+ /** 상세 조건 */
+ private String detailCondition = "";
+
+ /**
+ * codeId attribute를 리턴한다.
+ *
+ * @return the codeId
+ */
+ public String getCodeId() {
+ return codeId;
+ }
+
+ /**
+ * codeId attribute 값을 설정한다.
+ *
+ * @param codeId
+ * the codeId to set
+ */
+ public void setCodeId(String codeId) {
+ this.codeId = codeId;
+ }
+
+ /**
+ * code attribute를 리턴한다.
+ *
+ * @return the code
+ */
+ public String getCode() {
+ return code;
+ }
+
+ /**
+ * code attribute 값을 설정한다.
+ *
+ * @param code
+ * the code to set
+ */
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ /**
+ * codeNm attribute를 리턴한다.
+ *
+ * @return the codeNm
+ */
+ public String getCodeNm() {
+ return codeNm;
+ }
+
+ /**
+ * codeNm attribute 값을 설정한다.
+ *
+ * @param codeNm
+ * the codeNm to set
+ */
+ public void setCodeNm(String codeNm) {
+ this.codeNm = codeNm;
+ }
+
+ /**
+ * codeDc attribute를 리턴한다.
+ *
+ * @return the codeDc
+ */
+ public String getCodeDc() {
+ return codeDc;
+ }
+
+ /**
+ * codeDc attribute 값을 설정한다.
+ *
+ * @param codeDc
+ * the codeDc to set
+ */
+ public void setCodeDc(String codeDc) {
+ this.codeDc = codeDc;
+ }
+
+ /**
+ * tableNm attribute를 리턴한다.
+ *
+ * @return the tableNm
+ */
+ public String getTableNm() {
+ return tableNm;
+ }
+
+ /**
+ * tableNm attribute 값을 설정한다.
+ *
+ * @param tableNm
+ * the tableNm to set
+ */
+ public void setTableNm(String tableNm) {
+ this.tableNm = tableNm;
+ }
+
+ /**
+ * haveDetailCondition attribute를 리턴한다.
+ *
+ * @return the haveDetailCondition
+ */
+ public String getHaveDetailCondition() {
+ return haveDetailCondition;
+ }
+
+ /**
+ * haveDetailCondition attribute 값을 설정한다.
+ *
+ * @param haveDetailCondition
+ * the haveDetailCondition to set
+ */
+ public void setHaveDetailCondition(String haveDetailCondition) {
+ this.haveDetailCondition = haveDetailCondition;
+ }
+
+ /**
+ * detailCondition attribute를 리턴한다.
+ *
+ * @return the detailCondition
+ */
+ public String getDetailCondition() {
+ return detailCondition;
+ }
+
+ /**
+ * detailCondition attribute 값을 설정한다.
+ *
+ * @param detailCondition
+ * the detailCondition to set
+ */
+ public void setDetailCondition(String detailCondition) {
+ this.detailCondition = detailCondition;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/EgovWebUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/EgovWebUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/EgovWebUtil.java (revision 7)
@@ -0,0 +1,125 @@
+package egovframework.com.cmm;
+
+import java.util.regex.Pattern;
+
+/**
+ * 교차접속 스크립트 공격 취약성 방지(파라미터 문자열 교체)
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ----------- -------- ---------------------------
+ * 2011.10.10 한성곤 최초 생성
+ * 2017-02-07 이정은 시큐어코딩(ES) - 시큐어코딩 경로 조작 및 자원 삽입[CWE-22, CWE-23, CWE-95, CWE-99]
+ * 2018.08.17 신용호 filePathBlackList 수정
+ * 2018.10.10 신용호 . => \\.으로 수정
+ * </pre>
+ */
+
+public class EgovWebUtil {
+ public static String clearXSSMinimum(String value) {
+ if (value == null || value.trim().equals("")) {
+ return "";
+ }
+
+ String returnValue = value;
+
+ returnValue = returnValue.replaceAll("&", "&");
+ returnValue = returnValue.replaceAll("<", "<");
+ returnValue = returnValue.replaceAll(">", ">");
+ returnValue = returnValue.replaceAll("\"", """);
+ returnValue = returnValue.replaceAll("\'", "'");
+ returnValue = returnValue.replaceAll("\\.", ".");
+ returnValue = returnValue.replaceAll("%2E", ".");
+ returnValue = returnValue.replaceAll("%2F", "/");
+ return returnValue;
+ }
+
+ public static String clearXSSMaximum(String value) {
+ String returnValue = value;
+ returnValue = clearXSSMinimum(returnValue);
+
+ returnValue = returnValue.replaceAll("%00", null);
+
+ returnValue = returnValue.replaceAll("%", "%");
+
+ // \\. => .
+
+ returnValue = returnValue.replaceAll("\\.\\./", ""); // ../
+ returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\
+ returnValue = returnValue.replaceAll("\\./", ""); // ./
+ returnValue = returnValue.replaceAll("%2F", "");
+
+ return returnValue;
+ }
+
+ public static String filePathBlackList(String value) {
+ String returnValue = value;
+ if (returnValue == null || returnValue.trim().equals("")) {
+ return "";
+ }
+
+ returnValue = returnValue.replaceAll("\\.\\.", "");
+
+ return returnValue;
+ }
+
+ /**
+ * 행안부 보안취약점 점검 조치 방안.
+ *
+ * @param value
+ * @return
+ */
+ public static String filePathReplaceAll(String value) {
+ String returnValue = value;
+ if (returnValue == null || returnValue.trim().equals("")) {
+ return "";
+ }
+
+ returnValue = returnValue.replaceAll("/", "");
+ returnValue = returnValue.replaceAll("\\", "");
+ returnValue = returnValue.replaceAll("\\.\\.", ""); // ..
+ returnValue = returnValue.replaceAll("&", "");
+
+ return returnValue;
+ }
+
+ public static String fileInjectPathReplaceAll(String value) {
+ String returnValue = value;
+ if (returnValue == null || returnValue.trim().equals("")) {
+ return "";
+ }
+
+
+ returnValue = returnValue.replaceAll("/", "");
+ returnValue = returnValue.replaceAll("\\..", ""); // ..
+ returnValue = returnValue.replaceAll("\\\\", "");// \
+ returnValue = returnValue.replaceAll("&", "");
+
+ return returnValue;
+ }
+
+ public static String filePathWhiteList(String value) {
+ return value;
+ }
+
+ public static boolean isIPAddress(String str) {
+ Pattern ipPattern = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
+
+ return ipPattern.matcher(str).matches();
+ }
+
+ public static String removeCRLF(String parameter) {
+ return parameter.replaceAll("\r", "").replaceAll("\n", "");
+ }
+
+ public static String removeSQLInjectionRisk(String parameter) {
+ return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("%", "").replaceAll(";", "").replaceAll("-", "").replaceAll("\\+", "").replaceAll(",", "");
+ }
+
+ public static String removeOSCmdRisk(String parameter) {
+ return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("|", "").replaceAll(";", "");
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cmm/EgovWebUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java (revision 7)
@@ -0,0 +1,16 @@
+package egovframework.com.cmm;
+
+import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class EgovComOthersExcepHndlr implements ExceptionHandler {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovComOthersExcepHndlr.class);
+
+ public void occur(Exception exception, String packageName) {
+ //log.debug(" EgovServiceExceptionHandler run...............");
+ LOGGER.error(packageName, exception);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/interceptor/IpObtainInterceptor.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/interceptor/IpObtainInterceptor.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/interceptor/IpObtainInterceptor.java (revision 7)
@@ -0,0 +1,42 @@
+package egovframework.com.cmm.interceptor;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+/**
+ * 사용자IP 체크 인터셉터
+ * @author 유지보수팀 이기하
+ * @since 2013.03.28
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2013.03.28 이기하 최초 생성
+ * </pre>
+ */
+
+public class IpObtainInterceptor extends HandlerInterceptorAdapter {
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+ String clientIp = request.getRemoteAddr();
+
+ LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ if (loginVO != null) {
+ loginVO.setIp(clientIp);
+ }
+
+ return true;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/interceptor/IpObtainInterceptor.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java (revision 7)
@@ -0,0 +1,91 @@
+package egovframework.com.cmm.interceptor;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.ModelAndViewDefiningException;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+
+/**
+ * 인증여부 체크 인터셉터
+ * @author 공통서비스 개발팀 서준식
+ * @since 2011.07.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011.07.01 서준식 최초 생성
+ * 2011.09.07 서준식 인증이 필요없는 URL을 패스하는 로직 추가
+ * 2017.08.31 장동한 인증된 사용자 체크로직 변경 및 관리자 권한 체크 로직 추가
+ * </pre>
+ */
+
+
+public class AuthenticInterceptor extends HandlerInterceptorAdapter {
+
+ @Autowired
+ private Environment environment;
+
+ /** log */
+ private static final Logger LOGGER = LoggerFactory.getLogger(AuthenticInterceptor.class);
+
+ /** 관리자 접근 권한 패턴 목록 */
+ private List<String> adminAuthPatternList;
+
+ public List<String> getAdminAuthPatternList() {
+ return adminAuthPatternList;
+ }
+
+ public void setAdminAuthPatternList(List<String> adminAuthPatternList) {
+ this.adminAuthPatternList = adminAuthPatternList;
+ }
+
+ /**
+ * 인증된 사용자 여부로 인증 여부를 체크한다.
+ * 관리자 권한에 따라 접근 페이지 권한을 체크한다.
+ */
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ //인증된사용자 여부
+ boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ //미민증사용자 체크
+ if(!isAuthenticated) {
+ ModelAndView modelAndView = new ModelAndView("redirect:/uat/uia/egovLoginUsr.do");
+ throw new ModelAndViewDefiningException(modelAndView);
+ }
+ //인증된 권한 목록
+ List<String> authList = (List<String>)EgovUserDetailsHelper.getAuthorities();
+ //관리자인증여부
+ boolean adminAuthUrlPatternMatcher = false;
+ //AntPathRequestMatcher
+ AntPathRequestMatcher antPathRequestMatcher = null;
+ //관리자가 아닐때 체크함
+ for(String adminAuthPattern : adminAuthPatternList){
+ antPathRequestMatcher = new AntPathRequestMatcher(adminAuthPattern);
+ if(antPathRequestMatcher.matches(request)){
+ adminAuthUrlPatternMatcher = true;
+ }
+ }
+ //관리자 권한 체크
+ if(adminAuthUrlPatternMatcher && !authList.contains("ADMIN")){
+ ModelAndView modelAndView = new ModelAndView("redirect:/uat/uia/egovLoginUsr.do?auth_error=1");
+ throw new ModelAndViewDefiningException(modelAndView);
+ }
+ return true;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/EgovComponentChecker.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/EgovComponentChecker.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/EgovComponentChecker.java (revision 7)
@@ -0,0 +1,65 @@
+package egovframework.com.cmm;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * EgovComUtil 클래스
+ *
+ * @author 서준식
+ * @since 2011.09.15
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2011.09.15 서준식 최초 생성
+ * </pre>
+ */
+
+@Service("egovUtil")
+public class EgovComponentChecker extends EgovAbstractServiceImpl implements ApplicationContextAware{
+
+
+ public static ApplicationContext context;
+
+ @SuppressWarnings("static-access")
+ public void setApplicationContext(ApplicationContext context)
+ throws BeansException {
+
+ this.context = context;
+ }
+
+
+ /**
+ * Spring MVC에서 설정한 빈이 아닌 서비스 빈(컴포넌트)만을 검색할 수 있음
+ *
+ */
+ public static boolean hasComponent(String componentName){
+
+ try{
+ Object component = context.getBean(componentName);
+
+ if(component == null){
+ return false;
+ }else{
+ return true;
+ }
+
+ }catch(NoSuchBeanDefinitionException ex){// 해당 컴포넌트를 찾을 수없을 경우 false반환
+ return false;
+ }
+ }
+
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/EgovComponentChecker.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java (revision 7)
@@ -0,0 +1,33 @@
+package egovframework.com.cmm.annotation;
+
+/**
+ * 컴포넌트의 포함 정보 표현을 위한 annotation 클래스
+ * 기본적으로 Controller 클래스에 annotation을 부여하되,
+ * 하나의 Controller에 여러 개의 목록성 url mapping이 제공되는 경우에는
+ * 메소드에 annotation을 부여한다.
+ * @author 공통컴포넌트 정진오
+ * @since 2011.08.26
+ * @version 2.0.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011.08.26 정진오 최초 생성
+ *
+ * </pre>
+ */
+
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface IncludedInfo {
+ String name() default ""; // 컴포넌트의 한글 이름
+ String listUrl() default ""; // 컴포넌트의 목록정보조회를 위한 URL
+ int order() default 0; // 자동 생성되는 메뉴 목록에 표시되는 순서
+ int gid() default 0; // 컴포넌트의 Group ID(대분류 구분)
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/context/EgovWebServletContextListener.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/context/EgovWebServletContextListener.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/context/EgovWebServletContextListener.java (revision 7)
@@ -0,0 +1,66 @@
+package egovframework.com.cmm.context;
+
+import egovframework.com.cmm.service.EgovProperties;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * EgovWebServletContextListener 클래스
+ * <Notice>
+ * 데이터베이스 설정을 spring.profiles.active 방식으로 처리
+ * (공통컴포넌트 특성상 데이터베이스별 분리/개발,검증,운영서버로 분리 가능)
+ * <Disclaimer>
+ * N/A
+ *
+ * @author 장동한
+ * @since 2016.06.23
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2016.06.23 장동한 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-오류 메시지를 통한 정보노출[CWE-209]
+ * </pre>
+ */
+
+public class EgovWebServletContextListener implements ServletContextListener {
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovWebServletContextListener.class);
+
+ public EgovWebServletContextListener(){
+ setEgovProfileSetting();
+ }
+
+ public void contextInitialized(ServletContextEvent event){
+ if(System.getProperty("spring.profiles.active") == null){
+ setEgovProfileSetting();
+ }
+ }
+
+ public void contextDestroyed(ServletContextEvent event) {
+ if(System.getProperty("spring.profiles.active") != null){
+ System.setProperty("spring.profiles.active", null);
+ }
+ }
+
+ public void setEgovProfileSetting(){
+ try {
+ LOGGER.debug("===========================Start EgovServletContextLoad START ===========");
+ System.setProperty("spring.profiles.active", EgovProperties.getProperty("Globals.DbType")+","+EgovProperties.getProperty("Globals.Auth"));
+ LOGGER.debug("Setting spring.profiles.active>"+System.getProperty("spring.profiles.active"));
+ LOGGER.debug("===========================END EgovServletContextLoad END ===========");
+ //2017.03.03 조성원 시큐어코딩(ES)-오류 메시지를 통한 정보노출[CWE-209]
+ } catch(IllegalArgumentException e) {
+ LOGGER.error("[IllegalArgumentException] Try/Catch...usingParameters Runing : "+ e.getMessage());
+ } catch (Exception e) {
+ LOGGER.error("[" + e.getClass() +"] search fail : " + e.getMessage());
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/context/EgovWebServletContextListener.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java (revision 7)
@@ -0,0 +1,53 @@
+package egovframework.com.cmm;
+
+import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer;
+
+import javax.servlet.ServletContext;
+
+import org.springframework.web.context.ServletContextAware;
+/**
+ * ImagePaginationRenderer.java 클래스
+ *
+ * @author 서준식
+ * @since 2011. 9. 16.
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2011. 9. 16. 서준식 이미지 경로에 ContextPath추가
+ * 2016. 6. 17. 장동한 표준프레임워크 v3.6 리뉴얼
+ * </pre>
+ */
+public class ImagePaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{
+
+ private ServletContext servletContext;
+
+ public ImagePaginationRenderer() {
+
+ }
+
+ public void initVariables(){
+
+ firstPageLabel = "<li class=\"first\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">첫 페이지</a></li>";
+ previousPageLabel = "<li class=\"prev\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">이전 페이지</a></li>";
+
+ currentPageLabel = "<li class=\"current\"><a onClick=\"return false;\">{0}</a></li>";
+ otherPageLabel = "<li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">{2}</a></li>";
+
+ nextPageLabel = "<li class=\"next\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">다음 페이지</a></li>";
+ lastPageLabel = "<li class=\"last\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">끝 페이지</a></li>";
+
+ }
+
+
+
+ public void setServletContext(ServletContext servletContext) {
+ this.servletContext = servletContext;
+ initVariables();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java (revision 7)
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2008-2009 MOPAS(MINISTRY OF SECURITY AND PUBLIC ADMINISTRATION).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package egovframework.com.cmm.filter;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+/**
+*
+* HTMLTagFilterRequestWrapper
+* @author 공통컴포넌트 팀 신용호
+* @since 2018.03.21
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2018.03.21 신용호 getParameterMap()구현 추가
+* 2019.01.31 신용호 whiteList 태그 추가
+*
+*/
+
+public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper {
+
+ // Tag 화이트 리스트 ( 허용할 태그 등록 )
+ static private String[] whiteListTag = { "<p>","</p>","<br />" };
+
+ public HTMLTagFilterRequestWrapper(HttpServletRequest request) {
+ super(request);
+ }
+
+ public String[] getParameterValues(String parameter) {
+
+ String[] values = super.getParameterValues(parameter);
+
+ if(values==null){
+ return null;
+ }
+
+ for (int i = 0; i < values.length; i++) {
+ if (values[i] != null) {
+ values[i] = getSafeParamData(values[i]);
+ //System.out.println( "[HTMLTagFilter getParameterValues] "+ parameter + "===>>>"+values[i] );
+ } else {
+ values[i] = null;
+ }
+ }
+
+ return values;
+ }
+
+ public String getParameter(String parameter) {
+
+ String value = super.getParameter(parameter);
+
+ if(value==null){
+ return null;
+ }
+
+ value = getSafeParamData(value);
+ //System.out.println( "[HTMLTagFilter getParameter] "+ parameter + "===>>>"+value );
+ return value;
+ }
+
+ /**
+ * Map으로 바인딩된 경우를 처리한다.
+ *
+ * @return Map - String Type Key / String배열타입 값
+ */
+ public Map<String, String[]> getParameterMap() {
+ Map<String, String[]> valueMap = super.getParameterMap();
+
+ String[] values;
+ for( String key : valueMap.keySet() ){
+ values = valueMap.get(key);
+
+ for (int i = 0; i < values.length; i++) {
+ if (values[i] != null) {
+ values[i] = getSafeParamData(values[i]);
+ //System.out.println( "[HTMLTagFilter getParameterMap] "+ key + "===>>>"+values[i] );
+ } else {
+ values[i] = null;
+ }
+ }
+
+ //System.out.println( String.format("키 : %s, 값 : %s", key, valueMap.get(key)) );
+ }
+
+ return valueMap;
+ }
+
+ private String getSafeParamData(String value) {
+ StringBuffer strBuff = new StringBuffer();
+
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+ switch (c) {
+ case '<':
+ if ( checkNextWhiteListTag(i, value) == false )
+ strBuff.append("<");
+ else
+ strBuff.append(c);
+ //System.out.println("checkNextWhiteListTag = "+checkNextWhiteListTag(i, value));
+ break;
+ case '>':
+ if ( checkPrevWhiteListTag(i, value) == false )
+ strBuff.append(">");
+ else
+ strBuff.append(c);
+ //System.out.println("checkPrevWhiteListTag = "+checkPrevWhiteListTag(i, value));
+ break;
+ //case '&':
+ // strBuff.append("&");
+ // break;
+ case '"':
+ strBuff.append(""");
+ break;
+ case '\'':
+ strBuff.append("'");
+ break;
+ default:
+ strBuff.append(c);
+ break;
+ }
+ }
+
+ value = strBuff.toString();
+ return value;
+ }
+
+ private boolean checkNextWhiteListTag(int index, String data) {
+ String extractData = "";
+ //int beginIndex = 0;
+ int endIndex = 0;
+ for(String whiteListData: whiteListTag) {
+ //System.out.println("===>>> whiteListData="+whiteListData);
+ endIndex = index+whiteListData.length();
+ if ( data.length() > endIndex )
+ extractData = data.substring(index, endIndex);
+ else
+ extractData = "";
+ //System.out.println("extractData="+extractData);
+ if ( whiteListData.equals(extractData) ) return true; // whiteList 대상으로 판정
+ }
+
+ return false;
+ }
+
+ private boolean checkPrevWhiteListTag(int index, String data) {
+ String extractData = "";
+ int beginIndex = 0;
+ int endIndex = 0;
+ for(String whiteListData: whiteListTag) {
+ //System.out.println("===>>> whiteListData="+whiteListData);
+ beginIndex = index-whiteListData.length()+1;
+ endIndex = index+1;
+ //System.out.println(" range ["+beginIndex+" ~ "+endIndex+"]");
+ if ( beginIndex >= 0 )
+ extractData = data.substring(beginIndex, endIndex);
+ else
+ extractData = "";
+ //System.out.println("extractData="+extractData);
+ if ( whiteListData.equals(extractData) ) return true; // whiteList 대상으로 판정
+ }
+
+ return false;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java (revision 7)
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2008-2009 MOPAS(MINISTRY OF SECURITY AND PUBLIC ADMINISTRATION).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package egovframework.com.cmm.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+public class HTMLTagFilter implements Filter{
+
+ @SuppressWarnings("unused")
+ private FilterConfig config;
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+
+ chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response);
+ }
+
+ public void init(FilterConfig config) throws ServletException {
+ this.config = config;
+ }
+
+ public void destroy() {
+
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/filter/SessionTimeoutCookieFilter.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/filter/SessionTimeoutCookieFilter.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/filter/SessionTimeoutCookieFilter.java (revision 7)
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2008-2009 MOPAS(MINISTRY OF SECURITY AND PUBLIC ADMINISTRATION).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package egovframework.com.cmm.filter;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+*
+* SessionTimeoutCookieFilter
+* @author 공통컴포넌트 팀 신용호
+* @since 2020.06.17
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ---------- -------- ---------------------------
+* 2020.06.17 신용호 최초 생성
+*
+*/
+
+public class SessionTimeoutCookieFilter implements Filter{
+
+ @SuppressWarnings("unused")
+ private FilterConfig config;
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+ HttpServletRequest httpRequest = (HttpServletRequest) request;
+ long serverTime = System.currentTimeMillis();
+ long sessionExpireTime = serverTime + httpRequest.getSession().getMaxInactiveInterval() * 1000;
+ Cookie cookie = new Cookie("egovLatestServerTime", "" + serverTime);
+ //cookie.setSecure(true);
+ cookie.setPath("/");
+ httpResponse.addCookie(cookie);
+ cookie = new Cookie("egovExpireSessionTime", "" + sessionExpireTime);
+ cookie.setPath("/");
+
+ Date dateServer = new Date(serverTime);
+ Date dateExpiry = new Date(sessionExpireTime);
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ String serverYMD = format.format(dateServer);
+ String expiryYMD = format.format(dateExpiry);
+ //System.out.println("=====>>> serverYMD = "+serverYMD);
+ //System.out.println("=====>>> expiryYMD = "+expiryYMD);
+ //System.out.println("=====>>> server TimeStamp = "+serverTime);
+ //System.out.println("=====>>> expire TimeStamp = "+sessionExpireTime);
+
+ httpResponse.addCookie(cookie);
+
+ chain.doFilter(request, response);
+ }
+
+ public void init(FilterConfig config) throws ServletException {
+ this.config = config;
+ }
+
+ public void destroy() {
+
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/filter/SessionTimeoutCookieFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java (revision 7)
@@ -0,0 +1,405 @@
+package egovframework.com.cmm;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.BodyTagSupport;
+
+import org.apache.taglibs.standard.tag.common.core.Util;
+
+/**
+ * Cross-Site Scripting 체크하여 값을 되돌려 받는 핸들러 JSP TLD, 자바에서 사용가능
+ *
+ * @author 공통서비스 장동한
+ * @since 2010.11.09
+ * @version 1.0
+ * @see <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2010.11.09 장동한 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class EgovComCrossSiteHndlr extends BodyTagSupport {
+
+ /*
+ * (One almost wishes XML and JSP could support "anonymous tags," given the
+ * amount of trouble we had naming this one!) :-) - sb
+ */
+
+ // *********************************************************************
+ // Internal state
+
+ protected Object value; // tag attribute
+ protected String def; // tag attribute
+ protected boolean escapeXml; // tag attribute
+ private boolean needBody; // non-space body needed?
+
+ // *********************************************************************
+ // Construction and initialization
+
+ private final String m_sDiffChar ="()[]{}\"',:;= \t\r\n%!+-";
+ //private String m_sDiffChar ="()[]{}\"',:;=%!+-";
+ private final String m_sArrDiffChar [] = {
+ "(",")",
+ "[","]",
+ "{","}",
+ ""","'",
+ ",",":",
+ ";","=",
+ " ","\t", //" ","\t",
+ "\r","\n", //"\r","\n",
+ "%","!",
+ "+","-"
+ };
+
+ /**
+ * Constructs a new handler. As with TagSupport, subclasses should not
+ * provide other constructors and are expected to call the superclass
+ * constructor.
+ */
+ public EgovComCrossSiteHndlr() {
+ super();
+ init();
+ }
+
+ // resets local state
+ private void init() {
+ value = def = null;
+ escapeXml = true;
+ needBody = false;
+ }
+
+ // Releases any resources we may have (or inherit)
+ public void release() {
+ super.release();
+ init();
+ }
+
+ // *********************************************************************
+ // Tag logic
+
+ // evaluates 'value' and determines if the body should be evaluted
+ public int doStartTag() throws JspException {
+
+ needBody = false; // reset state related to 'default'
+ this.bodyContent = null; // clean-up body (just in case container is
+ // pooling tag handlers)
+
+ JspWriter out = pageContext.getOut();
+ //System.out.println("EgovComCrossSiteFilter> ============================");
+ try {
+ // print value if available; otherwise, try 'default'
+ if (value != null) {
+ //System.out.println("EgovComCrossSiteFilter> =value");
+ String sWriteEscapedXml = getWriteEscapedXml();
+ //System.out.println("EgovComCrossSiteFilter sWriteEscapedXml>" + sWriteEscapedXml);
+ out.print(sWriteEscapedXml);
+ return SKIP_BODY;
+ } else {
+ // if we don't have a 'default' attribute, just go to the body
+ if (def == null) {
+ needBody = true;
+ return EVAL_BODY_BUFFERED;
+ }
+
+ //System.out.println("EgovComCrossSiteFilter def> ="+def);
+
+ // if we do have 'default', print it
+ if (def != null) {
+ // good 'default'
+ out(pageContext, escapeXml, def);
+ //System.out.println("EgovComCrossSiteFilter> ="+def);
+ }
+ return SKIP_BODY;
+ }
+ } catch (IOException ex) {
+ throw new JspException(ex.toString(), ex);
+ }
+ }
+
+ // prints the body if necessary; reports errors
+ public int doEndTag() throws JspException {
+ try {
+ //System.out.println("EgovComCrossSiteFilter ==== doEndTag");
+ if (!needBody){
+ return EVAL_PAGE; // nothing more to do
+ }
+
+ // trim and print out the body
+ if (bodyContent != null && bodyContent.getString() != null){
+ //String sWriteEscapedXml = getWriteEscapedXml();
+ //out2(pageContext, escapeXml, sWriteEscapedXml.toString());
+ //System.out.println("EgovComCrossSiteFilter> end");
+ //System.out.println("EgovComCrossSiteFilter sWriteEscapedXml > sWriteEscapedXml");
+ out(pageContext, escapeXml, bodyContent.getString().trim());
+
+ }
+ return EVAL_PAGE;
+ } catch (IOException ex) {
+ throw new JspException(ex.toString(), ex);
+ }
+ }
+
+ // *********************************************************************
+ // Public utility methods
+
+ /**
+ * Outputs <tt>text</tt> to <tt>pageContext</tt>'s current JspWriter. If
+ * <tt>escapeXml</tt> is true, performs the following substring replacements
+ * (to facilitate output to XML/HTML pages):
+ *
+ * & -> & < -> < > -> > " -> " ' -> '
+ *
+ * See also Util.escapeXml().
+ */
+ public static void out(PageContext pageContext, boolean escapeXml,
+ Object obj) throws IOException {
+ JspWriter w = pageContext.getOut();
+
+ if (!escapeXml) {
+ // write chars as is
+ if (obj instanceof Reader) {
+ Reader reader = (Reader) obj;
+ char[] buf = new char[4096];
+ int count;
+ while ((count = reader.read(buf, 0, 4096)) != -1) {
+ w.write(buf, 0, count);
+ }
+ } else {
+ w.write(obj.toString());
+ }
+ } else {
+ // escape XML chars
+ if (obj instanceof Reader) {
+ Reader reader = (Reader) obj;
+ char[] buf = new char[4096];
+ int count;
+ while ((count = reader.read(buf, 0, 4096)) != -1) {
+ writeEscapedXml(buf, count, w);
+ }
+ } else {
+ String text = obj.toString();
+ writeEscapedXml(text.toCharArray(), text.length(), w);
+ }
+ }
+
+ }
+ public static void out2(PageContext pageContext, boolean escapeXml,
+ Object obj) throws IOException {
+ JspWriter w = pageContext.getOut();
+
+ w.write(obj.toString());
+
+ }
+
+ /**
+ *
+ * Optimized to create no extra objects and write directly to the JspWriter
+ * using blocks of escaped and unescaped characters
+ *
+ */
+ private static void writeEscapedXml(char[] buffer, int length, JspWriter w)
+ throws IOException {
+ int start = 0;
+
+ for (int i = 0; i < length; i++) {
+ char c = buffer[i];
+ if (c <= Util.HIGHEST_SPECIAL) {
+ char[] escaped = Util.specialCharactersRepresentation[c];
+ if (escaped != null) {
+ // add unescaped portion
+ if (start < i) {
+ w.write(buffer, start, i - start);
+ }
+ // add escaped xml
+ w.write(escaped);
+ start = i + 1;
+ }
+ }
+ }
+ // add rest of unescaped portion
+ if (start < length) {
+ w.write(buffer, start, length - start);
+ }
+ }
+
+ /**
+ *
+ * Optimized to create no extra objects and write directly to the JspWriter
+ * using blocks of escaped and unescaped characters
+ *
+ */
+ @SuppressWarnings("unused")
+ private String getWriteEscapedXml() throws IOException {
+ String sRtn = "";
+
+ Object obj = this.value;
+
+ int start = 0;
+ String text = obj.toString();
+
+ int length = text.length();
+ char[] buffer = text.toCharArray();
+ boolean booleanDiff = false;
+ //String sDiffChar
+ //String sArrDiffChar
+ char[] cDiffChar = this.m_sDiffChar.toCharArray();
+
+ for(int i = 0; i < length; i++) {
+ char c = buffer[i];
+
+ booleanDiff = false;
+
+ for(int k = 0; k < cDiffChar.length; k++){
+ if(c == cDiffChar[k]){
+ sRtn = sRtn + m_sArrDiffChar[k];
+ booleanDiff = true;
+ continue;
+ }
+ }
+
+ if(booleanDiff) continue;
+
+ if (c <= Util.HIGHEST_SPECIAL) {
+ char[] escaped = Util.specialCharactersRepresentation[c];
+ if (escaped != null) {
+ // add unescaped portion
+ //if (start < i) {
+ // sRtn = sRtn + text.substring(start, i - start);
+ //}
+ // add escaped xml
+ //sRtn = sRtn + escaped;
+ //System.out.println(buffer[i]+" :: " + escaped);
+ for (int j = 0; j < escaped.length; j++) {
+ //System.out.println(buffer[i]+" :>: " + escaped[j]);
+ sRtn = sRtn + escaped[j];
+ }
+ //sRtn = sRtn+ escaped.toString();
+ //sRtn = sRtn + String.valueOf(buffer[i]);
+ start = i + 1;
+ }else{
+ sRtn = sRtn + c;
+ }
+ }else{
+ sRtn = sRtn + c;
+ }
+ }
+
+ return sRtn;
+ }
+
+ /**
+ *
+ * Optimized to create no extra objects and write directly to the JspWriter
+ * using blocks of escaped and unescaped characters
+ *
+ */
+ @SuppressWarnings("unused")
+ private String getWriteEscapedXml(String sWriteString) throws IOException {
+
+ String sRtn = "";
+
+ Object obj = sWriteString;
+
+ int start = 0;
+ String text = obj.toString();
+
+ int length = text.length();
+ char[] buffer = text.toCharArray();
+ boolean booleanDiff = false;
+ //String sDiffChar
+ //String sArrDiffChar
+ char[] cDiffChar = this.m_sDiffChar.toCharArray();
+
+ for(int i = 0; i < length; i++) {
+ char c = buffer[i];
+
+ booleanDiff = false;
+
+ for(int k = 0; k < cDiffChar.length; k++){
+ if(c == cDiffChar[k]){
+ sRtn = sRtn + m_sArrDiffChar[k];
+ booleanDiff = true;
+ continue;
+ }
+ }
+
+ if(booleanDiff) continue;
+
+ if (c <= Util.HIGHEST_SPECIAL) {
+ char[] escaped = Util.specialCharactersRepresentation[c];
+ if (escaped != null) {
+ // add unescaped portion
+ //if (start < i) {
+ // sRtn = sRtn + text.substring(start, i - start);
+ //}
+ // add escaped xml
+ //sRtn = sRtn + escaped;
+ //System.out.println(buffer[i]+" :: " + escaped);
+ for (int j = 0; j < escaped.length; j++) {
+ //System.out.println(buffer[i]+" :>: " + escaped[j]);
+ sRtn = sRtn + escaped[j];
+ }
+ //sRtn = sRtn+ escaped.toString();
+ //sRtn = sRtn + String.valueOf(buffer[i]);
+ start = i + 1;
+ }else{
+ sRtn = sRtn + c;
+ }
+ }else{
+ sRtn = sRtn + c;
+ }
+ }
+
+ return sRtn;
+ }
+
+ // for tag attribute
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+ // for tag attribute
+ public void setDefault(String def) {
+ this.def = def;
+ }
+
+ // for tag attribute
+ public void setEscapeXml(boolean escapeXml) {
+ this.escapeXml = escapeXml;
+ }
+
+ /** 2011.10.10 cmd 라인상에서 편의제공을 위해 제공, 필요없을시 삭제하여도 무방함
+ public static void main(String[] args) throws IOException
+ {
+
+ EgovComCrossSiteHndlr egovComCrossSiteHndlr = new EgovComCrossSiteHndlr();
+
+ egovComCrossSiteHndlr.value = "TRNSMIT";
+
+ String sCrossSiteHndlr = egovComCrossSiteHndlr.getWriteEscapedXml();
+ //System.out.println("writeEscapedXml " + egovComCrossSiteHndlr.getWriteEscapedXml());
+ /*
+ System.out.println("sCrossSiteHndlr|"+ sCrossSiteHndlr + "|");
+
+ try{
+ System.out.println("TRY TEST 1");
+ throw new Exception();
+ }catch(Exception e){
+ System.out.println("TRY TEST 2");
+ }finally{
+ System.out.println("TRY TEST 3");
+
+ }
+ }
+ */
+ }
+
+
Property changes on: base3.10/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java (revision 7)
@@ -0,0 +1,50 @@
+package egovframework.com.cmm;
+
+/**
+ * IncludedInfo annotation을 바탕으로 화면에 표시할 정보를 구성하기 위한 VO 클래스
+ * @author 공통컴포넌트 정진오
+ * @since 2011.08.26
+ * @version 2.0.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011.08.26 정진오 최초 생성
+ *
+ * </pre>
+ */
+public class IncludedCompInfoVO {
+
+ private String name;
+ private String listUrl;
+ private int order;
+ private int gid;
+
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getListUrl() {
+ return listUrl;
+ }
+ public void setListUrl(String listUrl) {
+ this.listUrl = listUrl;
+ }
+ public int getOrder() {
+ return order;
+ }
+ public void setOrder(int order) {
+ this.order = order;
+ }
+ public int getGid() {
+ return gid;
+ }
+ public void setGid(int gid) {
+ this.gid = gid;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/Globals.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/Globals.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/Globals.java (revision 7)
@@ -0,0 +1,59 @@
+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");
+
+ //SMS 정보 프로퍼티 위치
+ public static final String SMSDB_CONF_PATH = EgovProperties.getPathProperty("Globals.SmsDbConfPath");
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/Globals.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java (revision 7)
@@ -0,0 +1,62 @@
+package egovframework.com.cmm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.service.CmmnDetailCode;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Class Name : CmmUseDAO.java
+ * @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 데이터 접근 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Repository("cmmUseDAO")
+public class CmmUseDAO extends EgovComAbstractDAO {
+
+ /**
+ * 주어진 조건에 따른 공통코드를 불러온다.
+ *
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception {
+ return (List<CmmnDetailCode>) list("CmmUseDAO.selectCmmCodeDetail", vo);
+ }
+
+ /**
+ * 공통코드로 사용할 조직정보를 를 불러온다.
+ *
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception {
+ return (List<CmmnDetailCode>) list("CmmUseDAO.selectOgrnztIdDetail", vo);
+ }
+
+ /**
+ * 공통코드로 사용할그룹정보를 를 불러온다.
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception {
+ return (List<CmmnDetailCode>) list("CmmUseDAO.selectGroupIdDetail", vo);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java (revision 7)
@@ -0,0 +1,54 @@
+package egovframework.com.cmm.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import egovframework.com.cmm.service.EgovUserDetailsService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.access.service.EgovUserDetailsHelper;
+
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+
+/**
+ *
+ * @author 공통서비스 개발팀 서준식
+ * @since 2011. 6. 25.
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * 개정이력(Modification Information)
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011. 8. 12. 서준식 최초생성
+ *
+ * </pre>
+ */
+
+public class EgovUserDetailsSessionServiceImpl extends EgovAbstractServiceImpl implements EgovUserDetailsService {
+
+ /**
+ * 인증된 사용자객체를 VO형식으로 가져온다.
+ * @return Object - 사용자 ValueObject
+ */
+ public Object getAuthenticatedUser() {
+ if (EgovUserDetailsHelper.isAuthenticated()) {
+ return EgovUserDetailsHelper.getAuthenticatedUser();
+ }
+ return null;
+ }
+
+ public List<String> getAuthorities() {
+ // 권한 설정을 리턴한다.
+ return EgovUserDetailsHelper.getAuthorities();
+ }
+
+ public Boolean isAuthenticated() {
+ // 인증된 유저인지 확인한다.
+ return EgovUserDetailsHelper.isAuthenticated();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgoDummyUserDetailsServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/impl/EgoDummyUserDetailsServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/EgoDummyUserDetailsServiceImpl.java (revision 7)
@@ -0,0 +1,70 @@
+package egovframework.com.cmm.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.service.EgovUserDetailsService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+/**
+ *
+ * @author 공통서비스 개발팀 서준식
+ * @since 2011. 8. 12.
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * 개정이력(Modification Information)
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011. 8. 12. 서준식 최초생성
+ * 2017. 9. 04. 장동한 클래스 이름 변경(EgovTestUserDetailsServiceImpl > EgovUserDetailsService)
+ *
+ *
+ * </pre>
+ */
+
+public class EgoDummyUserDetailsServiceImpl extends EgovAbstractServiceImpl implements
+ EgovUserDetailsService {
+
+ //로그인 객체
+ LoginVO loginVO = new LoginVO();
+ //권한목록 객체
+ List<String> listAuth = new ArrayList<String>();
+
+ @Override
+ public Object getAuthenticatedUser() {
+ loginVO.setId("TEST1");
+ loginVO.setPassword("raHLBnHFcunwNzcDcfad4PhD11hHgXSUr7fc1Jk9uoQ=");
+ loginVO.setUserSe("USR");
+ loginVO.setEmail("egovframe@nia.or.kr");
+ loginVO.setIhidNum("");
+ loginVO.setName("더미사용자");
+ loginVO.setOrgnztId("ORGNZT_0000000000000");
+ loginVO.setUniqId("USRCNFRM_00000000000");
+ return loginVO;
+ }
+
+ @Override
+ public List<String> getAuthorities() {
+ // 권한 설정을 리턴한다.
+ listAuth.add("IS_AUTHENTICATED_ANONYMOUSLY");
+ listAuth.add("IS_AUTHENTICATED_FULLY");
+ listAuth.add("IS_AUTHENTICATED_REMEMBERED");
+ listAuth.add("ROLE_ADMIN");
+ listAuth.add("ROLE_ANONYMOUS");
+ listAuth.add("ROLE_RESTRICTED");
+ listAuth.add("ROLE_USER");
+ return listAuth;
+ }
+
+ @Override
+ public Boolean isAuthenticated() {
+ // 인증된 유저인지 확인한다.
+ return true;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgoDummyUserDetailsServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java (revision 7)
@@ -0,0 +1,91 @@
+package egovframework.com.cmm.service.impl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.service.CmmnDetailCode;
+import egovframework.com.cmm.service.EgovCmmUseService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovCmmUseServiceImpl.java
+ * @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 서비스 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Service("EgovCmmUseService")
+public class EgovCmmUseServiceImpl extends EgovAbstractServiceImpl implements EgovCmmUseService {
+
+ @Resource(name = "cmmUseDAO")
+ private CmmUseDAO cmmUseDAO;
+
+ /**
+ * 공통코드를 조회한다.
+ *
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception {
+ return cmmUseDAO.selectCmmCodeDetail(vo);
+ }
+
+ /**
+ * ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
+ *
+ * @param voList
+ * @return
+ * @throws Exception
+ */
+ public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List<?> voList) throws Exception {
+ ComDefaultCodeVO vo;
+ Map<String, List<CmmnDetailCode>> map = new HashMap<String, List<CmmnDetailCode>>();
+
+ Iterator<?> iter = voList.iterator();
+ while (iter.hasNext()) {
+ vo = (ComDefaultCodeVO)iter.next();
+ map.put(vo.getCodeId(), cmmUseDAO.selectCmmCodeDetail(vo));
+ }
+
+ return map;
+ }
+
+ /**
+ * 조직정보를 코드형태로 리턴한다.
+ *
+ * @param 조회조건정보 vo
+ * @return 조직정보 List
+ * @throws Exception
+ */
+ public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception {
+ return cmmUseDAO.selectOgrnztIdDetail(vo);
+ }
+
+ /**
+ * 그룹정보를 코드형태로 리턴한다.
+ *
+ * @param 조회조건정보 vo
+ * @return 그룹정보 List
+ * @throws Exception
+ */
+ public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception {
+ return cmmUseDAO.selectGroupIdDetail(vo);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java (revision 7)
@@ -0,0 +1,306 @@
+/**
+ *
+ */
+package egovframework.com.cmm.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import org.apache.ibatis.session.ResultHandler;
+import org.apache.ibatis.session.RowBounds;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import egovframework.rte.psl.dataaccess.EgovAbstractMapper;
+/**
+ * EgovComAbstractDAO.java 클래스
+ *
+ * @author 서준식
+ * @since 2011. 9. 23.
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------------- ----------------------
+ * 2011. 9. 23. 서준식 최초 생성
+ * 2016. 5. 11. 장동한 myBatis 방식 적용
+ * </pre>
+ */
+public abstract class EgovComAbstractDAO extends EgovAbstractMapper{
+
+ private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
+
+ @Resource(name="egov.sqlSession")
+ public void setSqlSessionFactory(SqlSessionFactory sqlSession) {
+ super.setSqlSessionFactory(sqlSession);
+ }
+
+ /**
+ * 입력 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 입력 처리 SQL mapping 쿼리 ID
+ *
+ * @return DBMS가 지원하는 경우 insert 적용 결과 count
+ */
+ @Override
+ public int insert(String queryId) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().insert(queryId);
+ }
+
+ /**
+ * 입력 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 입력 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 입력 처리 SQL mapping 입력 데이터를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ *
+ * @return DBMS가 지원하는 경우 insert 적용 결과 count
+ */
+ @Override
+ public int insert(String queryId, Object parameterObject) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().insert(queryId, parameterObject);
+ }
+
+ /**
+ * 수정 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 수정 처리 SQL mapping 쿼리 ID
+ *
+ * @return DBMS가 지원하는 경우 update 적용 결과 count
+ */
+ @Override
+ public int update(String queryId) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().update(queryId);
+ }
+
+ /**
+ * 수정 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 수정 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 수정 처리 SQL mapping 입력 데이터(key 조건 및 변경 데이터)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ *
+ * @return DBMS가 지원하는 경우 update 적용 결과 count
+ */
+ @Override
+ public int update(String queryId, Object parameterObject) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().update(queryId, parameterObject);
+ }
+
+ /**
+ * 삭제 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 삭제 처리 SQL mapping 쿼리 ID
+ *
+ * @return DBMS가 지원하는 경우 delete 적용 결과 count
+ */
+ @Override
+ public int delete(String queryId) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().delete(queryId);
+ }
+
+ /**
+ * 삭제 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 삭제 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 삭제 처리 SQL mapping 입력 데이터(일반적으로 key 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ *
+ * @return DBMS가 지원하는 경우 delete 적용 결과 count
+ */
+ @Override
+ public int delete(String queryId, Object parameterObject) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().delete(queryId, parameterObject);
+ }
+
+ //CHECKSTYLE:OFF
+ /**
+ * 명명규칙에 맞춰 selectOne()로 변경한다.
+ * @deprecated select() 메소드로 대체
+ *
+ * @see EgovAbstractMapper.selectOne()
+ */
+ //CHECKSTYLE:ON
+ @Deprecated
+ public Object selectByPk(String queryId, Object parameterObject) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectOne(queryId, parameterObject);
+ }
+
+ /**
+ * 단건조회 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID
+ *
+ * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)
+ */
+ @Override
+ public <T> T selectOne(String queryId) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectOne(queryId);
+ }
+
+ /**
+ * 단건조회 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 단건 조회 처리 SQL mapping 입력 데이터(key)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ *
+ * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)
+ */
+ @Override
+ public <T> T selectOne(String queryId, Object parameterObject) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectOne(queryId, parameterObject);
+ }
+
+ /**
+ * 결과 목록을 Map 을 변환한다.
+ * 모든 구문이 파라미터를 필요로 하지는 않기 때문에, 파라미터 객체를 요구하지 않는 형태로 오버로드되었다.
+ *
+ * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID
+ * @param mapKey - 결과 객체의 프로퍼티 중 하나를 키로 사용
+ *
+ * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)의 Map
+ */
+ @Override
+ public <K, V> Map<K, V> selectMap(String queryId, String mapKey) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectMap(queryId, mapKey);
+ }
+
+ /**
+ * 결과 목록을 Map 을 변환한다.
+ * 모든 구문이 파라미터를 필요로 하지는 않기 때문에, 파라미터 객체를 요구하지 않는 형태로 오버로드되었다.
+ *
+ * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 맵 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ * @param mapKey - 결과 객체의 프로퍼티 중 하나를 키로 사용
+ *
+ * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)의 Map
+ */
+ @Override
+ public <K, V> Map<K, V> selectMap(String queryId, Object parameterObject, String mapKey) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectMap(queryId, parameterObject, mapKey);
+ }
+
+ /**
+ * 결과 목록을 Map 을 변환한다.
+ * 모든 구문이 파라미터를 필요로 하지는 않기 때문에, 파라미터 객체를 요구하지 않는 형태로 오버로드되었다.
+ *
+ * @param queryId - 단건 조회 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 맵 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ * @param mapKey - 결과 객체의 프로퍼티 중 하나를 키로 사용
+ * @param rowBounds - 특정 개수 만큼의 레코드를 건너띄게 함
+ *
+ * @return 결과 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 단일 결과 객체(보통 VO 또는 Map)의 Map
+ */
+ @Override
+ public <K, V> Map<K, V> selectMap(String queryId, Object parameterObject, String mapKey, RowBounds rowBounds) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectMap(queryId, parameterObject, mapKey, rowBounds);
+ }
+
+ //CHECKSTYLE:OFF
+ /**
+ * 명명규칙에 맞춰 selectList()로 변경한다.
+ *
+ * @see EgovAbstractMapper.selectList()
+ * @deprecated List<?> 메소드로 대체
+ */
+ //CHECKSTYLE:ON
+ @Deprecated
+ public List<?> list(String queryId, Object parameterObject) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectList(queryId, parameterObject);
+ }
+
+ /**
+ * 리스트 조회 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID
+ *
+ * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List
+ */
+ @Override
+ public <E> List<E> selectList(String queryId) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectList(queryId);
+ }
+
+ /**
+ * 리스트 조회 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ *
+ * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List
+ */
+ @Override
+ public <E> List<E> selectList(String queryId, Object parameterObject) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectList(queryId, parameterObject);
+ }
+
+ /**
+ * 리스트 조회 처리 SQL mapping 을 실행한다.
+ *
+ * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ * @param rowBounds - 특정 개수 만큼의 레코드를 건너띄게 함
+ *
+ * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List
+ */
+ @Override
+ public <E> List<E> selectList(String queryId, Object parameterObject, RowBounds rowBounds) {
+ LOGGER.debug("queryId = "+queryId);
+ return getSqlSession().selectList(queryId, parameterObject, rowBounds);
+ }
+
+ /**
+ * 부분 범위 리스트 조회 처리 SQL mapping 을 실행한다.
+ * (부분 범위 - pageIndex 와 pageSize 기반으로 현재 부분 범위 조회를 위한 skipResults, maxResults 를 계산하여 ibatis 호출)
+ *
+ * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID
+ * @param parameterObject - 리스트 조회 처리 SQL mapping 입력 데이터(조회 조건)를 세팅한 파라메터 객체(보통 VO 또는 Map)
+ * @param pageIndex - 현재 페이지 번호
+ * @param pageSize - 한 페이지 조회 수(pageSize)
+ *
+ * @return 부분 범위 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 부분 범위 결과 객체(보통 VO 또는 Map) List
+ */
+ @Override
+ public List<?> listWithPaging(String queryId, Object parameterObject, int pageIndex, int pageSize) {
+ LOGGER.debug("queryId = "+queryId);
+ int skipResults = pageIndex * pageSize;
+ //int maxResults = (pageIndex * pageSize) + pageSize;
+
+ RowBounds rowBounds = new RowBounds(skipResults, pageSize);
+
+ return getSqlSession().selectList(queryId, parameterObject, rowBounds);
+ }
+
+ /**
+ * SQL 조회 결과를 ResultHandler를 이용해서 출력한다.
+ * ResultHandler를 상속해 구현한 커스텀 핸들러의 handleResult() 메서드에 따라 실행된다.
+ *
+ * @param queryId - 리스트 조회 처리 SQL mapping 쿼리 ID
+ * @param handler - 조회 결과를 제어하기 위해 구현한 ResultHandler
+ * @return
+ *
+ * @return 결과 List 객체 - SQL mapping 파일에서 지정한 resultType/resultMap 에 의한 결과 객체(보통 VO 또는 Map)의 List
+ */
+ @Override
+ public void listToOutUsingResultHandler(String queryId, ResultHandler handler) {
+ LOGGER.debug("queryId = "+queryId);
+ getSqlSession().select(queryId, handler);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java (revision 7)
@@ -0,0 +1,156 @@
+package egovframework.com.cmm.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cmm.service.EgovFileMngService;
+import egovframework.com.cmm.service.FileVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovFileMngServiceImpl.java
+ * @Description : 파일정보의 관리를 위한 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 25. 이삼섭 최초생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 25.
+ * @version
+ * @see
+ *
+ */
+@Service("EgovFileMngService")
+public class EgovFileMngServiceImpl extends EgovAbstractServiceImpl implements EgovFileMngService {
+
+ @Resource(name = "FileManageDAO")
+ private FileManageDAO fileMngDAO;
+
+ /**
+ * 여러 개의 파일을 삭제한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#deleteFileInfs(java.util.List)
+ */
+ public void deleteFileInfs(List<?> fvoList) throws Exception {
+ fileMngDAO.deleteFileInfs(fvoList);
+ }
+
+ /**
+ * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#insertFileInf(egovframework.com.cmm.service.FileVO)
+ */
+ public String insertFileInf(FileVO fvo) throws Exception {
+ String atchFileId = fvo.getAtchFileId();
+
+ fileMngDAO.insertFileInf(fvo);
+
+ return atchFileId;
+ }
+
+ /**
+ * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#insertFileInfs(java.util.List)
+ */
+ public String insertFileInfs(List<?> fvoList) throws Exception {
+ String atchFileId = "";
+
+ if (fvoList.size() != 0) {
+ atchFileId = fileMngDAO.insertFileInfs(fvoList);
+ }
+ if (atchFileId == "") {
+ atchFileId = null;
+ }
+ return atchFileId;
+ }
+
+ /**
+ * 파일에 대한 목록을 조회한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#selectFileInfs(egovframework.com.cmm.service.FileVO)
+ */
+ public List<FileVO> selectFileInfs(FileVO fvo) throws Exception {
+ return fileMngDAO.selectFileInfs(fvo);
+ }
+
+ /**
+ * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#updateFileInfs(java.util.List)
+ */
+ public void updateFileInfs(List<?> fvoList) throws Exception {
+ //Delete & Insert
+ fileMngDAO.updateFileInfs(fvoList);
+ }
+
+ /**
+ * 하나의 파일을 삭제한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#deleteFileInf(egovframework.com.cmm.service.FileVO)
+ */
+ public void deleteFileInf(FileVO fvo) throws Exception {
+ fileMngDAO.deleteFileInf(fvo);
+ }
+
+ /**
+ * 파일에 대한 상세정보를 조회한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#selectFileInf(egovframework.com.cmm.service.FileVO)
+ */
+ public FileVO selectFileInf(FileVO fvo) throws Exception {
+ return fileMngDAO.selectFileInf(fvo);
+ }
+
+ /**
+ * 파일 구분자에 대한 최대값을 구한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#getMaxFileSN(egovframework.com.cmm.service.FileVO)
+ */
+ public int getMaxFileSN(FileVO fvo) throws Exception {
+ return fileMngDAO.getMaxFileSN(fvo);
+ }
+
+ /**
+ * 전체 파일을 삭제한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#deleteAllFileInf(egovframework.com.cmm.service.FileVO)
+ */
+ public void deleteAllFileInf(FileVO fvo) throws Exception {
+ fileMngDAO.deleteAllFileInf(fvo);
+ }
+
+ /**
+ * 파일명 검색에 대한 목록을 조회한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#selectFileListByFileNm(egovframework.com.cmm.service.FileVO)
+ */
+ public Map<String, Object> selectFileListByFileNm(FileVO fvo) throws Exception {
+ List<FileVO> result = fileMngDAO.selectFileListByFileNm(fvo);
+ int cnt = fileMngDAO.selectFileListCntByFileNm(fvo);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ /**
+ * 이미지 파일에 대한 목록을 조회한다.
+ *
+ * @see egovframework.com.cmm.service.EgovFileMngService#selectImageFileList(egovframework.com.cmm.service.FileVO)
+ */
+ public List<FileVO> selectImageFileList(FileVO vo) throws Exception {
+ return fileMngDAO.selectImageFileList(vo);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java (revision 7)
@@ -0,0 +1,181 @@
+package egovframework.com.cmm.service.impl;
+
+import java.util.Iterator;
+import java.util.List;
+
+import egovframework.com.cmm.service.FileVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Class Name : EgovFileMngDAO.java
+ * @Description : 파일정보 관리를 위한 데이터 처리 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 25. 이삼섭 최초생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 25.
+ * @version
+ * @see
+ *
+ */
+@Repository("FileManageDAO")
+public class FileManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다.
+ *
+ * @param fileList
+ * @return
+ * @throws Exception
+ */
+ public String insertFileInfs(List<?> fileList) throws Exception {
+ FileVO vo = (FileVO) fileList.get(0);
+ String atchFileId = vo.getAtchFileId();
+
+ insert("FileManageDAO.insertFileMaster", vo);
+
+ Iterator<?> iter = fileList.iterator();
+ while (iter.hasNext()) {
+ vo = (FileVO) iter.next();
+
+ insert("FileManageDAO.insertFileDetail", vo);
+ }
+
+ return atchFileId;
+ }
+
+ /**
+ * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다.
+ *
+ * @param vo
+ * @throws Exception
+ */
+ public void insertFileInf(FileVO vo) throws Exception {
+ insert("FileManageDAO.insertFileMaster", vo);
+ insert("FileManageDAO.insertFileDetail", vo);
+ }
+
+ /**
+ * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
+ *
+ * @param fileList
+ * @throws Exception
+ */
+ public void updateFileInfs(List<?> fileList) throws Exception {
+ FileVO vo;
+ Iterator<?> iter = fileList.iterator();
+ while (iter.hasNext()) {
+ vo = (FileVO) iter.next();
+ insert("FileManageDAO.insertFileDetail", vo);
+ }
+ }
+
+ /**
+ * 여러 개의 파일을 삭제한다.
+ *
+ * @param fileList
+ * @throws Exception
+ */
+ public void deleteFileInfs(List<?> fileList) throws Exception {
+ Iterator<?> iter = fileList.iterator();
+ FileVO vo;
+ while (iter.hasNext()) {
+ vo = (FileVO) iter.next();
+
+ delete("FileManageDAO.deleteFileDetail", vo);
+ }
+ }
+
+ /**
+ * 하나의 파일을 삭제한다.
+ *
+ * @param fvo
+ * @throws Exception
+ */
+ public void deleteFileInf(FileVO fvo) throws Exception {
+ delete("FileManageDAO.deleteFileDetail", fvo);
+ }
+
+ /**
+ * 파일에 대한 목록을 조회한다.
+ *
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<FileVO> selectFileInfs(FileVO vo) throws Exception {
+ return (List<FileVO>) list("FileManageDAO.selectFileList", vo);
+ }
+
+ /**
+ * 파일 구분자에 대한 최대값을 구한다.
+ *
+ * @param fvo
+ * @return
+ * @throws Exception
+ */
+ public int getMaxFileSN(FileVO fvo) throws Exception {
+ return (Integer) selectOne("FileManageDAO.getMaxFileSN", fvo);
+ }
+
+ /**
+ * 파일에 대한 상세정보를 조회한다.
+ *
+ * @param fvo
+ * @return
+ * @throws Exception
+ */
+ public FileVO selectFileInf(FileVO fvo) throws Exception {
+ return (FileVO) selectOne("FileManageDAO.selectFileInf", fvo);
+ }
+
+ /**
+ * 전체 파일을 삭제한다.
+ *
+ * @param fvo
+ * @throws Exception
+ */
+ public void deleteAllFileInf(FileVO fvo) throws Exception {
+ update("FileManageDAO.deleteCOMTNFILE", fvo);
+ }
+
+ /**
+ * 파일명 검색에 대한 목록을 조회한다.
+ *
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<FileVO> selectFileListByFileNm(FileVO fvo) throws Exception {
+ return (List<FileVO>) list("FileManageDAO.selectFileListByFileNm", fvo);
+ }
+
+ /**
+ * 파일명 검색에 대한 목록 전체 건수를 조회한다.
+ *
+ * @param fvo
+ * @return
+ * @throws Exception
+ */
+ public int selectFileListCntByFileNm(FileVO fvo) throws Exception {
+ return (Integer) selectOne("FileManageDAO.selectFileListCntByFileNm", fvo);
+ }
+
+ /**
+ * 이미지 파일에 대한 목록을 조회한다.
+ *
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<FileVO> selectImageFileList(FileVO vo) throws Exception {
+ return (List<FileVO>) list("FileManageDAO.selectImageFileList", vo);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/EgovProperties.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/EgovProperties.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/EgovProperties.java (revision 7)
@@ -0,0 +1,223 @@
+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 egovframework.com.utl.fcc.service.EgovStringUtil;
+
+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("") == null ? "" : 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() == null ? "" : EgovStringUtil.isNullToString(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;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/EgovProperties.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java (revision 7)
@@ -0,0 +1,217 @@
+package egovframework.com.cmm.service;
+
+import java.io.Serializable;
+
+/**
+ * 공통상세코드 모델 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.01 이중호 최초 생성
+ * 2017.09.07 이정은 표준프레임워크 v3.7 개선(clCode 추가)
+ *
+ * </pre>
+ */
+public class CmmnDetailCode implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /*
+ * 분류코드
+ */
+ private String clCode = "";
+
+ /*
+ * 코드ID
+ */
+ private String codeId = "";
+
+ /*
+ * 코드ID명
+ */
+ private String codeIdNm = "";
+
+ /*
+ * 상세코드
+ */
+ private String code = "";
+
+ /*
+ * 상세코드명
+ */
+ private String codeNm = "";
+
+ /*
+ * 상세코드설명
+ */
+ private String codeDc = "";
+
+ /*
+ * 사용여부
+ */
+ private String useAt = "";
+
+ /*
+ * 최초등록자ID
+ */
+ private String frstRegisterId = "";
+
+ /*
+ * 최종수정자ID
+ */
+ private String lastUpdusrId = "";
+
+
+ /**
+ * clCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getClCode() {
+ return clCode;
+ }
+
+ /**
+ * clCode attribute 값을 설정한다.
+ * @param clCode String
+ */
+ public void setClCode(String clCode) {
+ this.clCode = clCode;
+ }
+
+ /**
+ * codeId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCodeId() {
+ return codeId;
+ }
+
+ /**
+ * codeId attribute 값을 설정한다.
+ * @param codeId String
+ */
+ public void setCodeId(String codeId) {
+ this.codeId = codeId;
+ }
+
+ /**
+ * codeIdNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCodeIdNm() {
+ return codeIdNm;
+ }
+
+ /**
+ * codeIdNm attribute 값을 설정한다.
+ * @param codeIdNm String
+ */
+ public void setCodeIdNm(String codeIdNm) {
+ this.codeIdNm = codeIdNm;
+ }
+
+ /**
+ * code attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCode() {
+ return code;
+ }
+
+ /**
+ * code attribute 값을 설정한다.
+ * @param code String
+ */
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ /**
+ * codeNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCodeNm() {
+ return codeNm;
+ }
+
+ /**
+ * codeNm attribute 값을 설정한다.
+ * @param codeNm String
+ */
+ public void setCodeNm(String codeNm) {
+ this.codeNm = codeNm;
+ }
+
+ /**
+ * codeDc attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCodeDc() {
+ return codeDc;
+ }
+
+ /**
+ * codeDc attribute 값을 설정한다.
+ * @param codeDc String
+ */
+ public void setCodeDc(String codeDc) {
+ this.codeDc = codeDc;
+ }
+
+ /**
+ * useAt attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ * @param useAt String
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * frstRegisterId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ * @param frstRegisterId String
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * lastUpdusrId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ * @param lastUpdusrId String
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java (revision 7)
@@ -0,0 +1,64 @@
+package egovframework.com.cmm.service;
+
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+
+
+
+/**
+ *
+ * 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기 위한 서비스 인터페이스
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.11 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+public interface EgovCmmUseService {
+
+ /**
+ * 공통코드를 조회한다.
+ *
+ * @param vo
+ * @return List(코드)
+ * @throws Exception
+ */
+ public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception;
+
+ /**
+ * ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
+ *
+ * @param voList
+ * @return Map(코드)
+ * @throws Exception
+ */
+ public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List<?> voList) throws Exception;
+
+ /**
+ * 조직정보를 코드형태로 리턴한다.
+ *
+ * @param 조회조건정보 vo
+ * @return 조직정보 List
+ * @throws Exception
+ */
+ public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception;
+
+ /**
+ * 그룹정보를 코드형태로 리턴한다.
+ *
+ * @param 조회조건정보 vo
+ * @return 그룹정보 List
+ * @throws Exception
+ */
+ public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java (revision 7)
@@ -0,0 +1,26 @@
+package egovframework.com.cmm.service;
+
+import java.util.List;
+
+public interface EgovUserDetailsService {
+
+ /**
+ * 인증된 사용자객체를 VO형식으로 가져온다.
+ * @return Object - 사용자 ValueObject
+ */
+ public Object getAuthenticatedUser();
+
+ /**
+ * 인증된 사용자의 권한 정보를 가져온다.
+ * 예) [ROLE_ADMIN, ROLE_USER, ROLE_A, ROLE_B, ROLE_RESTRICTED, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_ANONYMOUSLY]
+ * @return List - 사용자 권한정보 목록
+ */
+ public List<String> getAuthorities();
+
+ /**
+ * 인증된 사용자 여부를 체크한다.
+ * @return Boolean - 인증된 사용자 여부(TRUE / FALSE)
+ */
+ public Boolean isAuthenticated();
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/FileVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/FileVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/FileVO.java (revision 7)
@@ -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);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/FileVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java (revision 7)
@@ -0,0 +1,115 @@
+package egovframework.com.cmm.service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Class Name : EgovFileMngService.java
+ * @Description : 파일정보의 관리를 위한 서비스 인터페이스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 25. 이삼섭 최초생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 25.
+ * @version
+ * @see
+ *
+ */
+public interface EgovFileMngService {
+
+ /**
+ * 파일에 대한 목록을 조회한다.
+ *
+ * @param fvo
+ * @return
+ * @throws Exception
+ */
+ public List<FileVO> selectFileInfs(FileVO fvo) throws Exception;
+
+ /**
+ * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다.
+ *
+ * @param fvo
+ * @throws Exception
+ */
+ public String insertFileInf(FileVO fvo) throws Exception;
+
+ /**
+ * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다.
+ *
+ * @param fvoList
+ * @throws Exception
+ */
+ public String insertFileInfs(List<?> fvoList) throws Exception;
+
+ /**
+ * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
+ *
+ * @param fvoList
+ * @throws Exception
+ */
+ public void updateFileInfs(List<?> fvoList) throws Exception;
+
+ /**
+ * 여러 개의 파일을 삭제한다.
+ *
+ * @param fvoList
+ * @throws Exception
+ */
+ public void deleteFileInfs(List<?> fvoList) throws Exception;
+
+ /**
+ * 하나의 파일을 삭제한다.
+ *
+ * @param fvo
+ * @throws Exception
+ */
+ public void deleteFileInf(FileVO fvo) throws Exception;
+
+ /**
+ * 파일에 대한 상세정보를 조회한다.
+ *
+ * @param fvo
+ * @return
+ * @throws Exception
+ */
+ public FileVO selectFileInf(FileVO fvo) throws Exception;
+
+ /**
+ * 파일 구분자에 대한 최대값을 구한다.
+ *
+ * @param fvo
+ * @return
+ * @throws Exception
+ */
+ public int getMaxFileSN(FileVO fvo) throws Exception;
+
+ /**
+ * 전체 파일을 삭제한다.
+ *
+ * @param fvo
+ * @throws Exception
+ */
+ public void deleteAllFileInf(FileVO fvo) throws Exception;
+
+ /**
+ * 파일명 검색에 대한 목록을 조회한다.
+ *
+ * @param fvo
+ * @return
+ * @throws Exception
+ */
+ public Map<String, Object> selectFileListByFileNm(FileVO fvo) throws Exception;
+
+ /**
+ * 이미지 파일에 대한 목록을 조회한다.
+ *
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ public List<FileVO> selectImageFileList(FileVO vo) throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java (revision 7)
@@ -0,0 +1,519 @@
+package egovframework.com.cmm.service;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @Class Name : EgovFileMngUtil.java
+ * @Description : 메시지 처리 관련 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.02.13 이삼섭 최초 생성
+ * 2011.08.09 서준식 utl.fcc패키지와 Dependency제거를 위해 getTimeStamp()메서드 추가
+ * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2020.10.26 신용호 parseFileInf(List<MultipartFile> files ...) 추가
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 02. 13
+ * @version 1.0
+ * @see
+ *
+ */
+@Component("EgovFileMngUtil")
+public class EgovFileMngUtil {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileMngUtil.class);
+
+ public static final int BUFF_SIZE = 2048;
+
+ @Resource(name = "egovFileIdGnrService")
+ private EgovIdGnrService idgenService;
+
+ /**
+ * 첨부파일에 대한 목록 정보를 취득한다.
+ *
+ * @param files
+ * @return
+ * @throws Exception
+ */
+ public List<FileVO> parseFileInf(Map<String, MultipartFile> files, String KeyStr, int fileKeyParam, String atchFileId, String storePath) throws Exception {
+ int fileKey = fileKeyParam;
+
+ String storePathString = "";
+ String atchFileIdString = "";
+
+ if ("".equals(storePath) || storePath == null) {
+ storePathString = EgovProperties.getProperty("Globals.fileStorePath");
+ } else {
+ storePathString = EgovProperties.getProperty(storePath);
+ }
+
+ if ("".equals(atchFileId) || atchFileId == null) {
+ atchFileIdString = idgenService.getNextStringId();
+ } else {
+ atchFileIdString = atchFileId;
+ }
+
+ File saveFolder = new File(EgovWebUtil.filePathBlackList(storePathString));
+
+ if (!saveFolder.exists() || saveFolder.isFile()) {
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if (saveFolder.mkdirs()){
+ LOGGER.debug("[file.mkdirs] saveFolder : Creation Success ");
+ }else{
+ LOGGER.error("[file.mkdirs] saveFolder : Creation Fail ");
+ }
+ }
+
+ Iterator<Entry<String, MultipartFile>> itr = files.entrySet().iterator();
+ MultipartFile file;
+ String filePath = "";
+ List<FileVO> result = new ArrayList<FileVO>();
+ FileVO fvo;
+
+ 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;
+ long size = file.getSize();
+
+ if (!"".equals(orginFileName)) {
+ filePath = storePathString + File.separator + newName;
+ 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++;
+ }
+
+ return result;
+ }
+
+ /**
+ * 첨부파일에 대한 목록 정보를 취득한다.
+ *
+ * @param files
+ * @return
+ * @throws Exception
+ */
+ public List<FileVO> parseFileInf(List<MultipartFile> files, String KeyStr, int fileKeyParam, String atchFileId, String storePath) throws Exception {
+ int fileKey = fileKeyParam;
+
+ String storePathString = "";
+ String atchFileIdString = "";
+
+ if ("".equals(storePath) || storePath == null) {
+ storePathString = EgovProperties.getProperty("Globals.fileStorePath");
+ } else {
+ storePathString = EgovProperties.getProperty(storePath);
+ }
+
+ if ("".equals(atchFileId) || atchFileId == null) {
+ atchFileIdString = idgenService.getNextStringId();
+ } else {
+ atchFileIdString = atchFileId;
+ }
+
+ File saveFolder = new File(EgovWebUtil.filePathBlackList(storePathString));
+
+ if (!saveFolder.exists() || saveFolder.isFile()) {
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if (saveFolder.mkdirs()){
+ LOGGER.debug("[file.mkdirs] saveFolder : Creation Success ");
+ }else{
+ LOGGER.error("[file.mkdirs] saveFolder : Creation Fail ");
+ }
+ }
+
+ String filePath = "";
+ List<FileVO> result = new ArrayList<FileVO>();
+ FileVO fvo;
+
+ for (MultipartFile file : files ) {
+
+ 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;
+ long size = file.getSize();
+
+ if (!"".equals(orginFileName)) {
+ filePath = storePathString + File.separator + newName;
+ 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++;
+ }
+
+ return result;
+ }
+
+ /**
+ * 첨부파일을 서버에 저장한다.
+ *
+ * @param file
+ * @param newName
+ * @param stordFilePath
+ * @throws Exception
+ */
+ protected void writeUploadedFile(MultipartFile file, String newName, String stordFilePath) throws Exception {
+ InputStream stream = null;
+ OutputStream bos = null;
+
+ try {
+ stream = file.getInputStream();
+ File cFile = new File(stordFilePath);
+
+ if (!cFile.isDirectory()) {
+ boolean _flag = cFile.mkdir();
+ if (!_flag) {
+ throw new IOException("Directory creation Failed ");
+ }
+ }
+
+ bos = new FileOutputStream(stordFilePath + File.separator + newName);
+
+ int bytesRead = 0;
+ byte[] buffer = new byte[BUFF_SIZE];
+
+ while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) {
+ bos.write(buffer, 0, bytesRead);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(bos, stream);
+ }
+ }
+
+ /**
+ * 서버의 파일을 다운로드한다.
+ *
+ * @param request
+ * @param response
+ * @throws Exception
+ */
+ public static void downFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ String downFileName = "";
+ String orgFileName = "";
+
+ if ((String) request.getAttribute("downFile") == null) {
+ downFileName = "";
+ } else {
+ downFileName = (String) request.getAttribute("downFile");
+ }
+
+ if ((String) request.getAttribute("orgFileName") == null) {
+ orgFileName = "";
+ } else {
+ orgFileName = (String) request.getAttribute("orginFile");
+ }
+
+ orgFileName = orgFileName.replaceAll("\r", "").replaceAll("\n", "");
+
+ File file = new File(EgovWebUtil.filePathBlackList(downFileName));
+
+ if (!file.exists()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ if (!file.isFile()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ byte[] buffer = new byte[BUFF_SIZE]; //buffer size 2K.
+
+ response.setContentType("application/x-msdownload");
+ response.setHeader("Content-Disposition:", "attachment; filename=" + new String(orgFileName.getBytes(), "UTF-8"));
+ response.setHeader("Content-Transfer-Encoding", "binary");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Expires", "0");
+
+ BufferedInputStream fin = null;
+ BufferedOutputStream outs = null;
+
+ try {
+ fin = new BufferedInputStream(new FileInputStream(file));
+ outs = new BufferedOutputStream(response.getOutputStream());
+ int read = 0;
+
+ while ((read = fin.read(buffer)) != -1) {
+ outs.write(buffer, 0, read);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(outs, fin);
+ }
+ }
+
+ /**
+ * 첨부로 등록된 파일을 서버에 업로드한다.
+ *
+ * @param file
+ * @return
+ * @throws Exception
+ */
+ public static HashMap<String, String> uploadFile(MultipartFile file) throws Exception {
+
+ HashMap<String, String> map = new HashMap<String, String>();
+ //Write File 이후 Move File????
+ String newName = "";
+ String stordFilePath = EgovProperties.getProperty("Globals.fileStorePath");
+ String orginFileName = file.getOriginalFilename();
+
+ int index = orginFileName.lastIndexOf(".");
+ //String fileName = orginFileName.substring(0, _index);
+ String fileExt = orginFileName.substring(index + 1);
+ long size = file.getSize();
+
+ //newName 은 Naming Convention에 의해서 생성
+ newName = getTimeStamp(); // 2012.11 KISA 보안조치
+ writeFile(file, newName, stordFilePath);
+ //storedFilePath는 지정
+ map.put(Globals.ORIGIN_FILE_NM, orginFileName);
+ map.put(Globals.UPLOAD_FILE_NM, newName);
+ map.put(Globals.FILE_EXT, fileExt);
+ map.put(Globals.FILE_PATH, stordFilePath);
+ map.put(Globals.FILE_SIZE, String.valueOf(size));
+
+ return map;
+ }
+
+ /**
+ * 파일을 실제 물리적인 경로에 생성한다.
+ *
+ * @param file
+ * @param newName
+ * @param stordFilePath
+ * @throws Exception
+ */
+ protected static void writeFile(MultipartFile file, String newName, String stordFilePath) throws Exception {
+ InputStream stream = null;
+ OutputStream bos = null;
+
+ try {
+ stream = file.getInputStream();
+ File cFile = new File(EgovWebUtil.filePathBlackList(stordFilePath));
+
+ if (!cFile.isDirectory()){
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if (cFile.mkdirs()){
+ LOGGER.debug("[file.mkdirs] saveFolder : Creation Success ");
+ }else{
+ LOGGER.error("[file.mkdirs] saveFolder : Creation Fail ");
+ }
+ }
+
+ bos = new FileOutputStream(EgovWebUtil.filePathBlackList(stordFilePath + File.separator + newName));
+
+ int bytesRead = 0;
+ byte[] buffer = new byte[BUFF_SIZE];
+
+ while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) {
+ bos.write(buffer, 0, bytesRead);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(bos, stream);
+ }
+ }
+
+ /**
+ * 서버 파일에 대하여 다운로드를 처리한다.
+ *
+ * @param response
+ * @param streFileNm 파일저장 경로가 포함된 형태
+ * @param orignFileNm
+ * @throws Exception
+ */
+ public void downFile(HttpServletResponse response, String streFileNm, String orignFileNm) throws Exception {
+ String downFileName = streFileNm;
+ String orgFileName = orignFileNm;
+
+ File file = new File(downFileName);
+
+ if (!file.exists()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ if (!file.isFile()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ int fSize = (int) file.length();
+ if (fSize > 0) {
+ BufferedInputStream in = null;
+
+ try {
+ in = new BufferedInputStream(new FileInputStream(file));
+
+ String mimetype = "application/x-msdownload";
+
+ //response.setBufferSize(fSize);
+ response.setContentType(mimetype);
+ response.setHeader("Content-Disposition:", "attachment; filename=" + orgFileName);
+ response.setContentLength(fSize);
+ //response.setHeader("Content-Transfer-Encoding","binary");
+ //response.setHeader("Pragma","no-cache");
+ //response.setHeader("Expires","0");
+ FileCopyUtils.copy(in, response.getOutputStream());
+ } finally {
+ EgovResourceCloseHelper.close(in);
+ }
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ }
+
+ /*
+ String uploadPath = propertiesService.getString("fileDir");
+
+ File uFile = new File(uploadPath, requestedFile);
+ int fSize = (int) uFile.length();
+
+ if (fSize > 0) {
+ BufferedInputStream in = new BufferedInputStream(new FileInputStream(uFile));
+
+ String mimetype = "text/html";
+
+ //response.setBufferSize(fSize);
+ response.setContentType(mimetype);
+ response.setHeader("Content-Disposition", "attachment; filename=\"" + requestedFile + "\"");
+ response.setContentLength(fSize);
+
+ FileCopyUtils.copy(in, response.getOutputStream());
+ in.close();
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+ } else {
+ response.setContentType("text/html");
+ PrintWriter printwriter = response.getWriter();
+ printwriter.println("<html>");
+ printwriter.println("<br><br><br><h2>Could not get file name:<br>" + requestedFile + "</h2>");
+ printwriter.println("<br><br><br><center><h3><a href='javascript: history.go(-1)'>Back</a></h3></center>");
+ printwriter.println("<br><br><br>© webAccess");
+ printwriter.println("</html>");
+ printwriter.flush();
+ printwriter.close();
+ }
+ //*/
+
+ /*
+ response.setContentType("application/x-msdownload");
+ response.setHeader("Content-Disposition:", "attachment; filename=" + new String(orgFileName.getBytes(),"UTF-8" ));
+ response.setHeader("Content-Transfer-Encoding","binary");
+ response.setHeader("Pragma","no-cache");
+ response.setHeader("Expires","0");
+
+ BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file));
+ BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
+ int read = 0;
+
+ while ((read = fin.read(b)) != -1) {
+ outs.write(b,0,read);
+ }
+ log.debug(this.getClass().getName()+" BufferedOutputStream Write Complete!!! ");
+
+ outs.close();
+ fin.close();
+ //*/
+ }
+
+ /**
+ * 공통 컴포넌트 utl.fcc 패키지와 Dependency제거를 위해 내부 메서드로 추가 정의함
+ * 응용어플리케이션에서 고유값을 사용하기 위해 시스템에서17자리의TIMESTAMP값을 구하는 기능
+ *
+ * @param
+ * @return Timestamp 값
+ * @see
+ */
+ private 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;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cmm/AjaxWrapper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/AjaxWrapper.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/AjaxWrapper.java (revision 7)
@@ -0,0 +1,38 @@
+package egovframework.com.cmm;
+
+public class AjaxWrapper {
+
+ public static final String SUCCESS = "success";
+ public static final String DUPLICATION = "duplication";
+ public static final String FAIL = "fail";
+
+ private String sttus;
+ private Object result;
+
+ public AjaxWrapper() {}
+
+ public AjaxWrapper(String sttus) {
+ this.sttus = sttus;
+ }
+
+ public AjaxWrapper(String sttus, Object result) {
+ this.sttus = sttus;
+ this.result = result;
+ }
+
+ public String getSttus() {
+ return sttus;
+ }
+
+ public void setSttus(String sttus) {
+ this.sttus = sttus;
+ }
+
+ public Object getResult() {
+ return result;
+ }
+
+ public void setResult(Object result) {
+ this.result = result;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cmm/AjaxWrapper.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopViewController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopViewController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopViewController.java (revision 7)
@@ -0,0 +1,67 @@
+package egovframework.com.cop.com.web;
+
+import java.util.Map;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 협업 비로그인 유저용 컨트롤러 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.4.10 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+@Controller
+public class EgovCopViewController {
+
+ /**
+ * 팝업 페이지를 호출한다.
+ *
+ * @param userVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/com/openPopup.do")
+ public String openPopupWindow(@RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
+
+ String requestUrl = (String) commandMap.get("requestUrl");
+ String trgetId = (String) commandMap.get("trgetId");
+ String width = (String) commandMap.get("width");
+ String height = (String) commandMap.get("height");
+ String typeFlag = (String) commandMap.get("typeFlag");
+
+ if (trgetId != null && trgetId != "") {
+ if (typeFlag != null && typeFlag != "") {
+ model.addAttribute("requestUrl", requestUrl + "?trgetId=" + trgetId + "&PopFlag=Y&typeFlag=" + typeFlag);
+ } else {
+ model.addAttribute("requestUrl", requestUrl + "?trgetId=" + trgetId + "&PopFlag=Y");
+ }
+ } else {
+ if (typeFlag != null && typeFlag != "") {
+ model.addAttribute("requestUrl", requestUrl + "?PopFlag=Y&typeFlag=" + typeFlag);
+ } else {
+ model.addAttribute("requestUrl", requestUrl + "?PopFlag=Y");
+ }
+
+ }
+
+ model.addAttribute("width", width);
+ model.addAttribute("height", height);
+
+ return "egovframework/com/cop/com/EgovModalPopupFrame";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopViewController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopUserInfController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopUserInfController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopUserInfController.java (revision 7)
@@ -0,0 +1,90 @@
+package egovframework.com.cop.com.web;
+
+import java.util.Map;
+
+import egovframework.com.cop.com.service.EgovUserInfManageService;
+import egovframework.com.cop.com.service.UserInfVO;
+
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 협업기능에서 활용하는 사용자 정보 조회용 컨트롤러 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.4.6 이삼섭 최초 생성
+ * 2011.07.21 안민정 커뮤니티 관련 메소드 분리 (->EgovCmyUserInfController)
+ *
+ * </pre>
+ */
+@Controller
+public class EgovCopUserInfController {
+
+ @Resource(name = "EgovUserInfManageService")
+ private EgovUserInfManageService userInfService;
+
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertyService;
+
+ /**
+ * 사용자 정보에 대한 목록을 조회한다.
+ *
+ * @param userVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/com/selectUserList.do")
+ public String selectUserList(@ModelAttribute("searchVO") UserInfVO userVO, @RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
+ String popFlag = (String) commandMap.get("PopFlag");
+ String returnUrl = "egovframework/com/cop/com/EgovUserList";
+
+ if ("Y".equals(popFlag)) {
+ returnUrl = "egovframework/com/cop/com/EgovUserListPop";
+ }
+
+ userVO.setPageUnit(propertyService.getInt("pageUnit"));
+ userVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(userVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(userVO.getPageUnit());
+ paginationInfo.setPageSize(userVO.getPageSize());
+
+ userVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ userVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ userVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = userInfService.selectUserList(userVO);
+ int totCnt = Integer.parseInt((String) map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("targetMethod", "selectUserList");
+ model.addAttribute("trgetId", "");
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return returnUrl;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/com/web/EgovCopUserInfController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java (revision 7)
@@ -0,0 +1,167 @@
+package egovframework.com.cop.com.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.cop.com.service.UserInfVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 협업 활용 사용자 정보 조회를 위한 데이터 접근 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.4.6 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+@Repository("EgovUserInfManageDAO")
+public class EgovUserInfManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 사용자 정보에 대한 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<UserInfVO> selectUserList(UserInfVO userVO) throws Exception {
+ return selectList("EgovUserInfManageDAO.selectUserList", userVO);
+ }
+
+ /**
+ * 사용자 정보에 대한 목록 전체 건수를 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public int selectUserListCnt(UserInfVO userVO) throws Exception {
+ return (Integer) selectOne("EgovUserInfManageDAO.selectUserListCnt", userVO);
+ }
+
+ /**
+ * 커뮤니티 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<UserInfVO> selectCmmntyUserList(UserInfVO userVO) throws Exception {
+ return selectList("EgovUserInfManageDAO.selectCmmntyUserList", userVO);
+ }
+
+ /**
+ * 커뮤니티 사용자 목록에 대한 전체 건수를 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public int selectCmmntyUserListCnt(UserInfVO userVO) throws Exception {
+ return (Integer) selectOne("EgovUserInfManageDAO.selectCmmntyUserListCnt", userVO);
+ }
+
+ /**
+ * 커뮤니티 관리자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<UserInfVO> selectCmmntyMngrList(UserInfVO userVO) throws Exception {
+ return selectList("EgovUserInfManageDAO.selectCmmntyMngrList", userVO);
+ }
+
+ /**
+ * 커뮤니티 관리자 목록에 대한 전체 건수를 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public int selectCmmntyMngrListCnt(UserInfVO userVO) throws Exception {
+ return (Integer) selectOne("EgovUserInfManageDAO.selectCmmntyMngrListCnt", userVO);
+ }
+
+ /**
+ * 동호회 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<UserInfVO> selectClubUserList(UserInfVO userVO) throws Exception {
+ return selectList("EgovUserInfManageDAO.selectClubUserList", userVO);
+ }
+
+ /**
+ * 동호회 사용자 목록에 대한 전체 건수를 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public int selectClubUserListCnt(UserInfVO userVO) throws Exception {
+ return (Integer) selectOne("EgovUserInfManageDAO.selectClubUserListCnt", userVO);
+ }
+
+ /**
+ * 동호회 운영자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<UserInfVO> selectClubOprtrList(UserInfVO userVO) throws Exception {
+ return selectList("EgovUserInfManageDAO.selectClubOprtrList", userVO);
+ }
+
+ /**
+ * 동호회 운영자 목록에 대한 전체 건수를 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public int selectClubOprtrListCnt(UserInfVO userVO) throws Exception {
+ return (Integer) selectOne("EgovUserInfManageDAO.selectClubOprtrListCnt", userVO);
+ }
+
+ /**
+ * 동호회에 대한 모든 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<UserInfVO> selectAllClubUser(UserInfVO userVO) throws Exception {
+ return selectList("EgovUserInfManageDAO.selectAllClubUser", userVO);
+ }
+
+ /**
+ * 커뮤니티에 대한 모든 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<UserInfVO> selectAllCmmntyUser(UserInfVO userVO) throws Exception {
+ return selectList("EgovUserInfManageDAO.selectAllCmmntyUser", userVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageServiceImpl.java (revision 7)
@@ -0,0 +1,147 @@
+package egovframework.com.cop.com.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cop.com.service.EgovUserInfManageService;
+import egovframework.com.cop.com.service.UserInfVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 협업에서 사용할 사용자 조회 서비스 기능 구현 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.4.6 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+@Service("EgovUserInfManageService")
+public class EgovUserInfManageServiceImpl extends EgovAbstractServiceImpl implements EgovUserInfManageService {
+
+ @Resource(name = "EgovUserInfManageDAO")
+ private EgovUserInfManageDAO userInfDAO;
+
+ /**
+ * 동호회 운영자 목록을 조회한다.
+ *
+ * @see egovframework.com.cop.com.service.EgovUserInfManageService#selectClubOprtrList(egovframework.com.cop.com.service.UserInfVO)
+ */
+ @Override
+ public Map<String, Object> selectClubOprtrList(UserInfVO userVO) throws Exception {
+ List<UserInfVO> result = userInfDAO.selectClubOprtrList(userVO);
+ int cnt = userInfDAO.selectClubOprtrListCnt(userVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ /**
+ * 동호회 사용자 목록을 조회한다.
+ *
+ * @see egovframework.com.cop.com.service.EgovUserInfManageService#selectClubUserList(egovframework.com.cop.com.service.UserInfVO)
+ */
+ @Override
+ public Map<String, Object> selectClubUserList(UserInfVO userVO) throws Exception {
+ List<UserInfVO> result = userInfDAO.selectClubUserList(userVO);
+ int cnt = userInfDAO.selectClubUserListCnt(userVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ /**
+ * 커뮤니티 관리자 목록을 조회한다.
+ *
+ * @see egovframework.com.cop.com.service.EgovUserInfManageService#selectCmmntyMngrList(egovframework.com.cop.com.service.UserInfVO)
+ */
+ @Override
+ public Map<String, Object> selectCmmntyMngrList(UserInfVO userVO) throws Exception {
+ List<UserInfVO> result = userInfDAO.selectCmmntyMngrList(userVO);
+ int cnt = userInfDAO.selectCmmntyMngrListCnt(userVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ /**
+ * 커뮤니티 사용자 목록을 조회한다.
+ *
+ * @see egovframework.com.cop.com.service.EgovUserInfManageService#selectCmmntyUserList(egovframework.com.cop.com.service.UserInfVO)
+ */
+ @Override
+ public Map<String, Object> selectCmmntyUserList(UserInfVO userVO) throws Exception {
+ List<UserInfVO> result = userInfDAO.selectCmmntyUserList(userVO);
+ int cnt = userInfDAO.selectCmmntyUserListCnt(userVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ /**
+ * 사용자 정보에 대한 목록을 조회한다.
+ *
+ * @see egovframework.com.cop.com.service.EgovUserInfManageService#selectUserList(egovframework.com.cop.com.service.UserInfVO)
+ */
+ @Override
+ public Map<String, Object> selectUserList(UserInfVO userVO) throws Exception {
+ List<UserInfVO> result = userInfDAO.selectUserList(userVO);
+ int cnt = userInfDAO.selectUserListCnt(userVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ /**
+ * 동호회에 대한 모든 사용자 목록을 조회한다.
+ *
+ * @see egovframework.com.cop.com.service.EgovUserInfManageService#selectAllClubUser(egovframework.com.cop.com.service.UserInfVO)
+ */
+ @Override
+ public List<UserInfVO> selectAllClubUser(UserInfVO userVO) throws Exception {
+ return userInfDAO.selectAllClubUser(userVO);
+ }
+
+ /**
+ * 커뮤니티에 대한 모든 사용자 목록을 조회한다.
+ *
+ * @see egovframework.com.cop.com.service.EgovUserInfManageService#selectAllCmmntyUser(egovframework.com.cop.com.service.UserInfVO)
+ */
+ @Override
+ public List<UserInfVO> selectAllCmmntyUser(UserInfVO userVO) throws Exception {
+ return userInfDAO.selectAllCmmntyUser(userVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/com/service/impl/EgovUserInfManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/com/service/UserInfVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/com/service/UserInfVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/com/service/UserInfVO.java (revision 7)
@@ -0,0 +1,561 @@
+package egovframework.com.cop.com.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 사용자 정보 조회를 위한 VO 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.4.6 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class UserInfVO implements Serializable {
+
+ /** 유일 아이디 */
+ private String uniqId = "";
+
+ /** 사용자 아이디 */
+ private String userId = "";
+
+ /** 사용자 명 */
+ private String userNm = "";
+
+ /** 사용자 우편번호 */
+ private String userZip = "";
+
+ /** 사용자 주소 */
+ private String userAdres = "";
+
+ /** 사용자 이메일 */
+ private String userEmail = "";
+
+ /** 검색시작일 */
+ private String searchBgnDe = "";
+
+ /** 검색조건 */
+ private String searchCnd = "";
+
+ /** 검색종료일 */
+ private String searchEndDe = "";
+
+ /** 검색단어 */
+ private String searchWrd = "";
+
+ /** 정렬순서(DESC,ASC) */
+ private String sortOrdr = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** 첫페이지 인덱스 */
+ private int firstIndex = 1;
+
+ /** 마지막페이지 인덱스 */
+ private int lastIndex = 1;
+
+ /** 페이지당 레코드 개수 */
+ private int recordCountPerPage = 10;
+
+ /** 레코드 번호 */
+ private int rowNo = 0;
+
+ /** 대상 아이디 */
+ private String trgetId = "";
+
+ /** 사용여부 */
+ private String useAt = "Y";
+
+ /** 커뮤니티 아이디 */
+ private String cmmntyId = "";
+
+ /** 동호회 아이디 */
+ private String clubId = "";
+
+ /** 대상 중지 여부 (커뮤니티 또는 동호회) */
+ private String deletedAt = "N";
+
+ /**
+ * uniqId attribute를 리턴한다.
+ *
+ * @return the uniqId
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+
+ /**
+ * uniqId attribute 값을 설정한다.
+ *
+ * @param uniqId
+ * the uniqId to set
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+
+ /**
+ * userId attribute를 리턴한다.
+ *
+ * @return the userId
+ */
+ public String getUserId() {
+ return userId;
+ }
+
+ /**
+ * userId attribute 값을 설정한다.
+ *
+ * @param userId
+ * the userId to set
+ */
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ /**
+ * userNm attribute를 리턴한다.
+ *
+ * @return the userNm
+ */
+ public String getUserNm() {
+ return userNm;
+ }
+
+ /**
+ * userNm attribute 값을 설정한다.
+ *
+ * @param userNm
+ * the userNm to set
+ */
+ public void setUserNm(String userNm) {
+ this.userNm = userNm;
+ }
+
+ /**
+ * userZip attribute를 리턴한다.
+ *
+ * @return the userZip
+ */
+ public String getUserZip() {
+ return userZip;
+ }
+
+ /**
+ * userZip attribute 값을 설정한다.
+ *
+ * @param userZip
+ * the userZip to set
+ */
+ public void setUserZip(String userZip) {
+ this.userZip = userZip;
+ }
+
+ /**
+ * userAdres attribute를 리턴한다.
+ *
+ * @return the userAdres
+ */
+ public String getUserAdres() {
+ return userAdres;
+ }
+
+ /**
+ * userAdres attribute 값을 설정한다.
+ *
+ * @param userAdres
+ * the userAdres to set
+ */
+ public void setUserAdres(String userAdres) {
+ this.userAdres = userAdres;
+ }
+
+ /**
+ * userEmail attribute를 리턴한다.
+ *
+ * @return the userEmail
+ */
+ public String getUserEmail() {
+ return userEmail;
+ }
+
+ /**
+ * userEmail attribute 값을 설정한다.
+ *
+ * @param userEmail
+ * the userEmail to set
+ */
+ public void setUserEmail(String userEmail) {
+ this.userEmail = userEmail;
+ }
+
+ /**
+ * searchBgnDe attribute를 리턴한다.
+ *
+ * @return the searchBgnDe
+ */
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ /**
+ * searchBgnDe attribute 값을 설정한다.
+ *
+ * @param searchBgnDe
+ * the searchBgnDe to set
+ */
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ /**
+ * searchCnd attribute를 리턴한다.
+ *
+ * @return the searchCnd
+ */
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ /**
+ * searchCnd attribute 값을 설정한다.
+ *
+ * @param searchCnd
+ * the searchCnd to set
+ */
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ /**
+ * searchEndDe attribute를 리턴한다.
+ *
+ * @return the searchEndDe
+ */
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ /**
+ * searchEndDe attribute 값을 설정한다.
+ *
+ * @param searchEndDe
+ * the searchEndDe to set
+ */
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ /**
+ * searchWrd attribute를 리턴한다.
+ *
+ * @return the searchWrd
+ */
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ /**
+ * searchWrd attribute 값을 설정한다.
+ *
+ * @param searchWrd
+ * the searchWrd to set
+ */
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ *
+ * @return the sortOrdr
+ */
+ public String getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ *
+ * @param sortOrdr
+ * the sortOrdr to set
+ */
+ public void setSortOrdr(String sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * searchUseYn attribute를 리턴한다.
+ *
+ * @return the searchUseYn
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ *
+ * @param searchUseYn
+ * the searchUseYn to set
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute를 리턴한다.
+ *
+ * @return the pageIndex
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ *
+ * @param pageIndex
+ * the pageIndex to set
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute를 리턴한다.
+ *
+ * @return the pageUnit
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ *
+ * @param pageUnit
+ * the pageUnit to set
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute를 리턴한다.
+ *
+ * @return the pageSize
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ *
+ * @param pageSize
+ * the pageSize to set
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute를 리턴한다.
+ *
+ * @return the firstIndex
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ *
+ * @param firstIndex
+ * the firstIndex to set
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute를 리턴한다.
+ *
+ * @return the lastIndex
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ *
+ * @param lastIndex
+ * the lastIndex to set
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute를 리턴한다.
+ *
+ * @return the recordCountPerPage
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ *
+ * @param recordCountPerPage
+ * the recordCountPerPage to set
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ /**
+ * rowNo attribute를 리턴한다.
+ *
+ * @return the rowNo
+ */
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ /**
+ * rowNo attribute 값을 설정한다.
+ *
+ * @param rowNo
+ * the rowNo to set
+ */
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+ /**
+ * trgetId attribute를 리턴한다.
+ *
+ * @return the trgetId
+ */
+ public String getTrgetId() {
+ return trgetId;
+ }
+
+ /**
+ * trgetId attribute 값을 설정한다.
+ *
+ * @param trgetId
+ * the trgetId to set
+ */
+ public void setTrgetId(String trgetId) {
+ this.trgetId = trgetId;
+ }
+
+ /**
+ * useAt attribute를 리턴한다.
+ *
+ * @return the useAt
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ *
+ * @param useAt
+ * the useAt to set
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * cmmntyId attribute를 리턴한다.
+ *
+ * @return the cmmntyId
+ */
+ public String getCmmntyId() {
+ return cmmntyId;
+ }
+
+ /**
+ * cmmntyId attribute 값을 설정한다.
+ *
+ * @param cmmntyId
+ * the cmmntyId to set
+ */
+ public void setCmmntyId(String cmmntyId) {
+ this.cmmntyId = cmmntyId;
+ }
+
+ /**
+ * clubId attribute를 리턴한다.
+ *
+ * @return the clubId
+ */
+ public String getClubId() {
+ return clubId;
+ }
+
+ /**
+ * clubId attribute 값을 설정한다.
+ *
+ * @param clubId
+ * the clubId to set
+ */
+ public void setClubId(String clubId) {
+ this.clubId = clubId;
+ }
+
+ /**
+ * deletedAt attribute를 리턴한다.
+ *
+ * @return the deletedAt
+ */
+ public String getDeletedAt() {
+ return deletedAt;
+ }
+
+ /**
+ * deletedAt attribute 값을 설정한다.
+ *
+ * @param deletedAt
+ * the deletedAt to set
+ */
+ public void setDeletedAt(String deletedAt) {
+ this.deletedAt = deletedAt;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/com/service/UserInfVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/com/service/EgovUserInfManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/com/service/EgovUserInfManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/com/service/EgovUserInfManageService.java (revision 7)
@@ -0,0 +1,86 @@
+package egovframework.com.cop.com.service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 협업 기능에서 사용자 정보를 관리하기 위한 서비스 인터페이스 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.4.6 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+public interface EgovUserInfManageService {
+
+ /**
+ * 사용자 정보에 대한 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public Map<String, Object> selectUserList(UserInfVO userVO) throws Exception;
+
+ /**
+ * 커뮤니티 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public Map<String, Object> selectCmmntyUserList(UserInfVO userVO) throws Exception;
+
+ /**
+ * 커뮤니티 관리자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public Map<String, Object> selectCmmntyMngrList(UserInfVO userVO) throws Exception;
+
+ /**
+ * 동호회 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public Map<String, Object> selectClubUserList(UserInfVO userVO) throws Exception;
+
+ /**
+ * 동호회 운영자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public Map<String, Object> selectClubOprtrList(UserInfVO userVO) throws Exception;
+
+ /**
+ * 동호회에 대한 모든 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public List<UserInfVO> selectAllClubUser(UserInfVO userVO) throws Exception;
+
+ /**
+ * 커뮤니티에 대한 모든 사용자 목록을 조회한다.
+ *
+ * @param userVO
+ * @return
+ * @throws Exception
+ */
+ public List<UserInfVO> selectAllCmmntyUser(UserInfVO userVO) throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/com/service/EgovUserInfManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleManageController.java (revision 7)
@@ -0,0 +1,629 @@
+package egovframework.com.cop.bbs.web;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.service.EgovFileMngService;
+import egovframework.com.cmm.service.EgovFileMngUtil;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.cmm.util.EgovXssChecker;
+import egovframework.com.cop.bbs.service.Board;
+import egovframework.com.cop.bbs.service.BoardMaster;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+import egovframework.com.cop.bbs.service.BoardVO;
+import egovframework.com.cop.bbs.service.EgovArticleService;
+import egovframework.com.cop.bbs.service.EgovBBSMasterService;
+import egovframework.com.cop.cmt.service.EgovArticleCommentService;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+import froala.editor.file.FileOptions;
+import froala.editor.image.ImageOptions;
+import froala.editor.utils.CommonUtil;
+
+/**
+ *
+ * @since 2021. 5. 7.
+ * @author 임종호
+ * <PRE>
+ * -----------------------
+ * 개정이력
+ * 2021. 5. 7. 임종호 : 최초작성
+ * </PRE>
+ */
+
+@Controller
+public class EgovArticleManageController {
+private static final Logger LOGGER = LoggerFactory.getLogger(EgovArticleManageController.class);
+
+ @Resource(name = "EgovArticleService")
+ private EgovArticleService egovArticleService;
+
+ @Resource(name = "EgovBBSMasterService")
+ private EgovBBSMasterService egovBBSMasterService;
+
+ @Resource(name = "EgovFileMngService")
+ private EgovFileMngService fileMngService;
+
+ @Resource(name = "EgovFileMngUtil")
+ private EgovFileMngUtil fileUtil;
+
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertyService;
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "EgovArticleCommentService")
+ protected EgovArticleCommentService egovArticleCommentService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ //protected Logger log = Logger.getLogger(this.getClass());
+
+ /**
+ * XSS 방지 처리.
+ *
+ * @param data
+ * @return
+ */
+ protected String unscript(String data) {
+ if (data == null || data.trim().equals("")) {
+ return "";
+ }
+
+ String ret = data;
+
+ ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script");
+ ret = ret.replaceAll("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "</script");
+
+ ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "<object");
+ ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "</object");
+
+ ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "<applet");
+ ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "</applet");
+
+ ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
+ ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
+
+ ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "<form");
+ ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "<form");
+
+ return ret;
+ }
+
+ /**
+ * 게시물에 대한 목록을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/selectArticleList.do")
+ public String selectArticleList(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model, @PathVariable String bbsId) throws Exception {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ BoardMasterVO vo = new BoardMasterVO();
+
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ BoardMasterVO master = egovBBSMasterService.selectBBSMasterInf(vo);
+
+ boardVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
+ paginationInfo.setPageSize(boardVO.getPageSize());
+
+ boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleService.selectArticleList(boardVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ //공지사항 추출
+ List<BoardVO> noticeList = egovArticleService.selectNoticeArticleList(boardVO);
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ if(user != null) {
+ model.addAttribute("sessionUniqId", user.getUniqId());
+ }
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", totCnt);
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", master);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("noticeList", noticeList);
+ return ".adminLayout/게시물목록/com/cop/bbs/EgovArticleManageList";
+ }
+
+
+
+ /**
+ * 게시물에 대한 상세 정보를 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/selectArticleDetail.do")
+ public String selectArticleDetail(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model, @PathVariable String bbsId, HttpServletRequest request) throws Exception {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ boardVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ // 에디터 내용 이미지, 파일다운로드 대응(contextpath)
+ vo.setNttCn(CommonUtil.convertEditorCn(vo.getNttCn(), request));
+
+ model.addAttribute("result", vo);
+ model.addAttribute("sessionUniqId", (user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO master = new BoardMasterVO();
+
+ master.setBbsId(boardVO.getBbsId());
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO masterVo = egovBBSMasterService.selectBBSMasterInf(master);
+
+
+ //----------------------------
+ // 2009.06.29 : 2단계 기능 추가
+ // 2011.07.01 : 댓글, 만족도 조사 기능의 종속성 제거
+ //----------------------------
+ if (egovArticleCommentService != null){
+ if (egovArticleCommentService.canUseComment(boardVO.getBbsId())) {
+ model.addAttribute("useComment", "true");
+ }
+ }
+ ////--------------------------
+
+ // 에디터 내용 이미지, 파일다운로드 대응(contextpath)
+// masterVo.setBbsForm(CommonUtil.convertEditorCn(masterVo.getBbsForm(), request));
+ model.addAttribute("boardMasterVO", masterVo);
+
+ return ".adminLayout/게시글상세/com/cop/bbs/EgovArticleManageDetail";
+ }
+
+ /**
+ * 게시물 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param boardVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/insertArticleView.do")
+ public String insertArticleView(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model, @PathVariable String bbsId
+ , HttpServletRequest request) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ BoardMasterVO bdMstr = new BoardMasterVO();
+ if (isAuthenticated) {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+
+ BoardMasterVO vo = new BoardMasterVO();
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ bdMstr = egovBBSMasterService.selectBBSMasterInf(vo);
+ }
+
+ // 기본양식 지정
+// if(!StringUtils.isEmpty(bdMstr.getBbsForm())) {
+//
+// // 에디터 내용 이미지, 파일다운로드 대응(contextpath)
+// boardVO.setNttCn(CommonUtil.convertEditorCn(bdMstr.getBbsForm(), request));
+// //boardVO.setNttCn(bdMstr.getBbsForm());
+// }
+
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", bdMstr);
+
+ return ".adminLayout/게시글등록/com/cop/bbs/EgovArticleManageRegist";
+ }
+
+ /**
+ * 게시물을 등록한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/insertArticle.do")
+ public String insertArticle(@ModelAttribute("searchVO") BoardVO boardVO, @PathVariable String bbsId,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, @ModelAttribute("board") BoardVO board, BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ BoardMasterVO master = new BoardMasterVO();
+
+ master.setBbsId(boardVO.getBbsId());
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ master = egovBBSMasterService.selectBBSMasterInf(master);
+ model.addAttribute("boardMasterVO", master);
+
+ return ".adminLayout/게시글등록/com/cop/bbs/EgovArticleRegist";
+ }
+
+ if (isAuthenticated) {
+ board.setAtchFileId(boardVO.getAtchFileId());
+ board.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ board.setBbsId(boardVO.getBbsId());
+ board.setBlogId(boardVO.getBlogId());
+
+
+ //익명등록 처리
+ if(board.getAnonymousAt() != null && board.getAnonymousAt().equals("Y")){
+ board.setNtcrId("anonymous"); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm("익명"); //게시물 통계 집계를 위해 등록자 Name 저장
+ board.setFrstRegisterId("anonymous");
+
+ } else {
+ board.setNtcrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId()); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm((user == null || user.getName() == null) ? "" : user.getName()); //게시물 통계 집계를 위해 등록자 Name 저장
+
+ }
+
+ board.setNttCn(unscript(board.getNttCn())); // XSS 방지
+ egovArticleService.insertArticle(board);
+ }
+ return "redirect:/cop/bbs/manage/"+bbsId+"/selectArticleList.do?"+boardVO.searchParam(3);
+ }
+
+ /**
+ * 엑셀 다운로드
+ * @Author : 이다솜
+ * @Date : 2021. 10. 6.
+ * @Method Name : selectCopBbsManageDownloadExcel
+ * @return : String
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/downloadExcel.do")
+ public String selectCopBbsManageDownloadExcel(@PathVariable String bbsId, @ModelAttribute("searchVO") BoardVO boardVO
+ , Model model, HttpServletRequest request, RedirectAttributes attributes) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ BoardMasterVO vo = new BoardMasterVO();
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ BoardMasterVO master = egovBBSMasterService.selectBBSMasterInf(vo);
+
+ model.addAttribute("fileName", master.getBbsNm() + " 정보현황");
+// model.addAttribute("excel", egovArticleService.selectCopBbsManageDownloadExcel(boardVO));
+
+ return "excelDownloadView";
+ }
+ /**
+ * 게시물에 대한 답변 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param boardVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/replyArticleView.do")
+ public String addReplyBoardArticle(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model, @PathVariable String bbsId) throws Exception {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();//KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ BoardMasterVO master = new BoardMasterVO();
+ BoardVO articleVO = new BoardVO();
+ master.setBbsId("BBSMSTR_".concat(bbsId));
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ master = egovBBSMasterService.selectBBSMasterInf(master);
+ boardVO = egovArticleService.selectArticleDetail(boardVO);
+
+ // 기본양식 지정
+// if(!StringUtils.isEmpty(master.getBbsForm())) {
+// boardVO.setNttCn(master.getBbsForm());
+// }
+
+ model.addAttribute("boardMasterVO", master);
+ model.addAttribute("result", boardVO);
+
+ model.addAttribute("articleVO", articleVO);
+
+ return ".adminLayout/게시글답글/com/cop/bbs/EgovArticleManageReply";
+ }
+
+ /**
+ * 게시물에 대한 답변을 등록한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/replyArticle.do")
+ public String replyBoardArticle(@ModelAttribute("searchVO") BoardVO boardVO,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, @ModelAttribute("board") BoardVO board, BindingResult bindingResult, ModelMap model
+ , @PathVariable String bbsId) throws Exception {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+ BoardMasterVO master = new BoardMasterVO();
+
+ master.setBbsId(boardVO.getBbsId());
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ master = egovBBSMasterService.selectBBSMasterInf(master);
+
+
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", master);
+ ////-----------------------------
+
+ return ".adminLayout/게시글답글/com/cop/bbs/EgovArticleReply";
+ }
+
+ if (isAuthenticated) {
+ board.setAtchFileId(boardVO.getAtchFileId());
+ board.setReplyAt("Y");
+ board.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ board.setBbsId(board.getBbsId());
+ board.setParnts(Long.toString(boardVO.getNttId()));
+ board.setSortOrdr(boardVO.getSortOrdr());
+ board.setReplyLc(Integer.toString(Integer.parseInt(boardVO.getReplyLc()) + 1));
+
+ //익명등록 처리
+ if(board.getAnonymousAt() != null && board.getAnonymousAt().equals("Y")){
+ board.setNtcrId("anonymous"); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm("익명"); //게시물 통계 집계를 위해 등록자 Name 저장
+ board.setFrstRegisterId("anonymous");
+
+ } else {
+ board.setNtcrId((user == null || user.getId() == null) ? "" : user.getId()); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm((user == null || user.getName() == null) ? "" : user.getName()); //게시물 통계 집계를 위해 등록자 Name 저장
+
+ }
+ board.setNttCn(unscript(board.getNttCn())); // XSS 방지
+
+ egovArticleService.insertArticle(board);
+ }
+ return "redirect:/cop/bbs/manage/"+bbsId+"/selectArticleList.do?"+boardVO.searchParam(3);
+ }
+
+ /**
+ * 게시물 수정을 위한 수정페이지로 이동한다.
+ *
+ * @param boardVO
+ * @param vo
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/updateArticleView.do")
+ public String updateArticleView(@ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("board") BoardVO vo, ModelMap model, @PathVariable String bbsId
+ , HttpServletRequest request )
+ throws Exception {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ boardVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO bmvo = new BoardMasterVO();
+ BoardVO bdvo = new BoardVO();
+
+ vo.setBbsId(boardVO.getBbsId());
+
+ bmvo.setBbsId(boardVO.getBbsId());
+ bmvo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ if (isAuthenticated) {
+ bmvo = egovBBSMasterService.selectBBSMasterInf(bmvo);
+ bdvo = egovArticleService.selectArticleDetail(boardVO);
+ }
+
+ //익명 등록글인 경우 수정 불가
+ if(bdvo.getNtcrId().equals("anonymous")){
+ model.addAttribute("result", bdvo);
+ model.addAttribute("boardMasterVO", bmvo);
+ return ".adminLayout/게시글상세/com/cop/bbs/EgovArticleDetail";
+ }
+
+ // 에디터 내용 이미지, 파일다운로드 대응(contextpath)
+ bdvo.setNttCn(CommonUtil.convertEditorCn(bdvo.getNttCn(), request));
+// bmvo.setBbsForm(CommonUtil.convertEditorCn(bmvo.getBbsForm(), request));
+
+ model.addAttribute("articleVO", bdvo);
+ model.addAttribute("boardMasterVO", bmvo);
+
+ return ".adminLayout/게시글수정/com/cop/bbs/EgovArticleManageUpdt";
+
+ }
+
+ /**
+ * 게시물에 대한 내용을 수정한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/updateArticle.do")
+ public String updateBoardArticle(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, @ModelAttribute("board") Board board, BindingResult bindingResult, ModelMap model, @PathVariable String bbsId)
+ throws Exception {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ //--------------------------------------------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 START
+ // param1 : 사용자고유ID(uniqId,esntlId)
+ //--------------------------------------------------------
+ LOGGER.debug("@ XSS 권한체크 START ----------------------------------------------");
+ //step1 DB에서 해당 게시물의 uniqId 조회
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ //step2 EgovXssChecker 공통모듈을 이용한 권한체크
+ EgovXssChecker.checkerUserXss(request, vo.getFrstRegisterId());
+ LOGGER.debug("@ XSS 권한체크 END ------------------------------------------------");
+ //--------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 END
+ //--------------------------------------------------------------------------------------------
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ boardVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO bmvo = new BoardMasterVO();
+ BoardVO bdvo = new BoardVO();
+
+ bmvo.setBbsId(boardVO.getBbsId());
+ bmvo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ bmvo = egovBBSMasterService.selectBBSMasterInf(bmvo);
+ bdvo = egovArticleService.selectArticleDetail(boardVO);
+
+ model.addAttribute("articleVO", bdvo);
+ model.addAttribute("boardMasterVO", bmvo);
+
+ return ".adminLayout/게시글수정/com/cop/bbs/EgovArticleManageUpdt";
+ }
+
+ if (isAuthenticated) {
+
+ board.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ board.setNtcrNm(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
+ board.setPassword(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
+
+ board.setNttCn(unscript(board.getNttCn())); // XSS 방지
+
+ egovArticleService.updateArticle(board);
+ }
+
+ return "redirect:/cop/bbs/manage/"+bbsId+"/selectArticleList.do?"+boardVO.searchParam(3);
+ }
+
+ /**
+ * 게시물에 대한 내용을 삭제한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/manage/{bbsId}/deleteArticle.do")
+ public String deleteBoardArticle(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("board") Board board,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, ModelMap model, @PathVariable String bbsId) throws Exception {
+ boardVO.setBbsId("BBSMSTR_".concat(bbsId));
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ //--------------------------------------------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 START
+ // param1 : 사용자고유ID(uniqId,esntlId)
+ //--------------------------------------------------------
+ LOGGER.debug("@ XSS 권한체크 START ----------------------------------------------");
+ //step1 DB에서 해당 게시물의 uniqId 조회
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ //step2 EgovXssChecker 공통모듈을 이용한 권한체크
+ EgovXssChecker.checkerUserXss(request, vo.getFrstRegisterId());
+ LOGGER.debug("@ XSS 권한체크 END ------------------------------------------------");
+ //--------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 END
+ //--------------------------------------------------------------------------------------------
+
+ BoardVO bdvo = egovArticleService.selectArticleDetail(boardVO);
+ //익명 등록글인 경우 수정 불가
+ if(bdvo.getNtcrId().equals("anonymous")){
+ model.addAttribute("result", bdvo);
+ model.addAttribute("boardMasterVO", bdMstr);
+ return ".adminLayout/게시물상세/com/cop/bbs/EgovArticleDetail";
+ }
+
+ if (isAuthenticated) {
+ board.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ egovArticleService.deleteArticle(board);
+ }
+
+ return "redirect:/cop/bbs/manage/"+bbsId+"/selectArticleList.do?"+boardVO.searchParam(3);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleController.java (revision 7)
@@ -0,0 +1,1368 @@
+package egovframework.com.cop.bbs.web;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.service.EgovFileMngService;
+import egovframework.com.cmm.service.EgovFileMngUtil;
+import egovframework.com.cmm.service.FileVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.cmm.util.EgovXssChecker;
+import egovframework.com.cop.bbs.service.BlogVO;
+import egovframework.com.cop.bbs.service.Board;
+import egovframework.com.cop.bbs.service.BoardMaster;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+import egovframework.com.cop.bbs.service.BoardVO;
+import egovframework.com.cop.bbs.service.EgovArticleService;
+import egovframework.com.cop.bbs.service.EgovBBSMasterService;
+import egovframework.com.cop.cmt.service.CommentVO;
+import egovframework.com.cop.cmt.service.EgovArticleCommentService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 게시물 관리를 위한 컨트롤러 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- ------- ---------------------------
+ * 2009.03.19 이삼섭 최초 생성
+ * 2009.06.29 한성곤 2단계 기능 추가 (댓글관리, 만족도조사)
+ * 2011.07.01 안민정 댓글, 스크랩, 만족도 조사 기능의 종속성 제거
+ * 2011.08.26 정진오 IncludedInfo annotation 추가
+ * 2011.09.07 서준식 유효 게시판 게시일 지나도 게시물이 조회되던 오류 수정
+ * 2016.06.13 김연호 표준프레임워크 3.6 개선
+ * 2019.05.17 신용호 KISA 취약점 조치 및 보완
+ * 2020.10.27 신용호 파일 업로드 수정 (multiRequest.getFiles)
+ *
+ * </pre>
+ */
+
+@Controller
+public class EgovArticleController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovArticleController.class);
+
+ @Resource(name = "EgovArticleService")
+ private EgovArticleService egovArticleService;
+
+ @Resource(name = "EgovBBSMasterService")
+ private EgovBBSMasterService egovBBSMasterService;
+
+ @Resource(name = "EgovFileMngService")
+ private EgovFileMngService fileMngService;
+
+ @Resource(name = "EgovFileMngUtil")
+ private EgovFileMngUtil fileUtil;
+
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertyService;
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "EgovArticleCommentService")
+ protected EgovArticleCommentService egovArticleCommentService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ //protected Logger log = Logger.getLogger(this.getClass());
+
+ /**
+ * XSS 방지 처리.
+ *
+ * @param data
+ * @return
+ */
+ protected String unscript(String data) {
+ if (data == null || data.trim().equals("")) {
+ return "";
+ }
+
+ String ret = data;
+
+ ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script");
+ ret = ret.replaceAll("</(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "</script");
+
+ ret = ret.replaceAll("<(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "<object");
+ ret = ret.replaceAll("</(O|o)(B|b)(J|j)(E|e)(C|c)(T|t)", "</object");
+
+ ret = ret.replaceAll("<(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "<applet");
+ ret = ret.replaceAll("</(A|a)(P|p)(P|p)(L|l)(E|e)(T|t)", "</applet");
+
+ ret = ret.replaceAll("<(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
+ ret = ret.replaceAll("</(E|e)(M|m)(B|b)(E|e)(D|d)", "<embed");
+
+ ret = ret.replaceAll("<(F|f)(O|o)(R|r)(M|m)", "<form");
+ ret = ret.replaceAll("</(F|f)(O|o)(R|r)(M|m)", "<form");
+
+ return ret;
+ }
+
+ /**
+ * 게시물에 대한 목록을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectArticleList.do")
+ public String selectArticleList(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ BoardMasterVO vo = new BoardMasterVO();
+
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ BoardMasterVO master = egovBBSMasterService.selectBBSMasterInf(vo);
+
+ //방명록은 방명록 게시판으로 이동
+ if(master.getBbsTyCode().equals("BBST03")){
+ return "forward:/cop/bbs/selectGuestArticleList.do";
+ }
+
+
+ boardVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
+ paginationInfo.setPageSize(boardVO.getPageSize());
+
+ boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleService.selectArticleList(boardVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ //공지사항 추출
+ List<BoardVO> noticeList = egovArticleService.selectNoticeArticleList(boardVO);
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ //-------------------------------
+ // 기본 BBS template 지정
+ //-------------------------------
+ if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) {
+ master.setTmplatCours("/css/egovframework/com/cop/tpl/egovBaseTemplate.css");
+ }
+ ////-----------------------------
+
+ if(user != null) {
+ model.addAttribute("sessionUniqId", user.getUniqId());
+ }
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", master);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("noticeList", noticeList);
+ return "egovframework/com/cop/bbs/EgovArticleList";
+ }
+
+
+
+ /**
+ * 게시물에 대한 상세 정보를 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectArticleDetail.do")
+ public String selectArticleDetail(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+
+ boardVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ model.addAttribute("result", vo);
+ model.addAttribute("sessionUniqId", (user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ //비밀글은 작성자만 볼수 있음
+ if(!EgovStringUtil.isEmpty(vo.getSecretAt()) && vo.getSecretAt().equals("Y") && !((user == null || user.getUniqId() == null) ? "" : user.getUniqId()).equals(vo.getFrstRegisterId()))
+ return"forward:/cop/bbs/selectArticleList.do";
+
+ //----------------------------
+ // template 처리 (기본 BBS template 지정 포함)
+ //----------------------------
+ BoardMasterVO master = new BoardMasterVO();
+
+ master.setBbsId(boardVO.getBbsId());
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO masterVo = egovBBSMasterService.selectBBSMasterInf(master);
+
+ if (masterVo.getTmplatCours() == null || masterVo.getTmplatCours().equals("")) {
+ masterVo.setTmplatCours("/css/egovframework/com/cop/tpl/egovBaseTemplate.css");
+ }
+
+ ////-----------------------------
+
+ //----------------------------
+ // 2009.06.29 : 2단계 기능 추가
+ // 2011.07.01 : 댓글, 만족도 조사 기능의 종속성 제거
+ //----------------------------
+ if (egovArticleCommentService != null){
+ if (egovArticleCommentService.canUseComment(boardVO.getBbsId())) {
+ model.addAttribute("useComment", "true");
+ }
+ }
+ ////--------------------------
+
+ model.addAttribute("boardMasterVO", masterVo);
+
+ return "egovframework/com/cop/bbs/EgovArticleDetail";
+ }
+
+ /**
+ * 게시물 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param boardVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/insertArticleView.do")
+ public String insertArticleView(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ BoardMasterVO bdMstr = new BoardMasterVO();
+ BoardVO board = new BoardVO();
+ if (isAuthenticated) {
+
+ BoardMasterVO vo = new BoardMasterVO();
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ bdMstr = egovBBSMasterService.selectBBSMasterInf(vo);
+ }
+
+ //----------------------------
+ // 기본 BBS template 지정
+ //----------------------------
+ if (bdMstr.getTmplatCours() == null || bdMstr.getTmplatCours().equals("")) {
+ bdMstr.setTmplatCours("/css/egovframework/com/cop/tpl/egovBaseTemplate.css");
+ }
+
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", bdMstr);
+ ////-----------------------------
+
+ return "egovframework/com/cop/bbs/EgovArticleRegist";
+ }
+
+ /**
+ * 게시물을 등록한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/insertArticle.do")
+ public String insertArticle(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, @ModelAttribute("board") BoardVO board, BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ BoardMasterVO master = new BoardMasterVO();
+
+ master.setBbsId(boardVO.getBbsId());
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ master = egovBBSMasterService.selectBBSMasterInf(master);
+
+
+ //----------------------------
+ // 기본 BBS template 지정
+ //----------------------------
+ if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) {
+ master.setTmplatCours("css/egovframework/com/cop/tpl/egovBaseTemplate.css");
+ }
+
+ model.addAttribute("boardMasterVO", master);
+ ////-----------------------------
+
+ return "egovframework/com/cop/bbs/EgovArticleRegist";
+ }
+
+ if (isAuthenticated) {
+ List<FileVO> result = null;
+ String atchFileId = "";
+
+ //final Map<String, MultipartFile> files = multiRequest.getFileMap();
+ final List<MultipartFile> files = multiRequest.getFiles("file_1");
+ if (!files.isEmpty()) {
+ result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
+ atchFileId = fileMngService.insertFileInfs(result);
+ }
+ board.setAtchFileId(atchFileId);
+ board.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ board.setBbsId(boardVO.getBbsId());
+ board.setBlogId(boardVO.getBlogId());
+
+
+ //익명등록 처리
+ if(board.getAnonymousAt() != null && board.getAnonymousAt().equals("Y")){
+ board.setNtcrId("anonymous"); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm("익명"); //게시물 통계 집계를 위해 등록자 Name 저장
+ board.setFrstRegisterId("anonymous");
+
+ } else {
+ board.setNtcrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId()); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm((user == null || user.getName() == null) ? "" : user.getName()); //게시물 통계 집계를 위해 등록자 Name 저장
+
+ }
+
+ board.setNttCn(unscript(board.getNttCn())); // XSS 방지
+ egovArticleService.insertArticle(board);
+ }
+ //status.setComplete();
+ if(boardVO.getBlogAt().equals("Y")){
+ return "forward:/cop/bbs/selectArticleBlogList.do";
+ }else{
+ return "forward:/cop/bbs/selectArticleList.do";
+ }
+
+ }
+
+ /**
+ * 게시물에 대한 답변 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param boardVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/replyArticleView.do")
+ public String addReplyBoardArticle(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();//KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ BoardMasterVO master = new BoardMasterVO();
+ BoardVO articleVO = new BoardVO();
+ master.setBbsId(boardVO.getBbsId());
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ master = egovBBSMasterService.selectBBSMasterInf(master);
+ boardVO = egovArticleService.selectArticleDetail(boardVO);
+
+ //----------------------------
+ // 기본 BBS template 지정
+ //----------------------------
+ if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) {
+ master.setTmplatCours("/css/egovframework/com/cop/tpl/egovBaseTemplate.css");
+ }
+
+ model.addAttribute("boardMasterVO", master);
+ model.addAttribute("result", boardVO);
+
+ model.addAttribute("articleVO", articleVO);
+
+ if(boardVO.getBlogAt().equals("chkBlog")){
+ return "egovframework/com/cop/bbs/EgovArticleBlogReply";
+ }else{
+ return "egovframework/com/cop/bbs/EgovArticleReply";
+ }
+ }
+
+ /**
+ * 게시물에 대한 답변을 등록한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/replyArticle.do")
+ public String replyBoardArticle(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, @ModelAttribute("board") BoardVO board, BindingResult bindingResult, ModelMap model
+ ) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+ BoardMasterVO master = new BoardMasterVO();
+
+ master.setBbsId(boardVO.getBbsId());
+ master.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ master = egovBBSMasterService.selectBBSMasterInf(master);
+
+
+ //----------------------------
+ // 기본 BBS template 지정
+ //----------------------------
+ if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) {
+ master.setTmplatCours("/css/egovframework/com/cop/tpl/egovBaseTemplate.css");
+ }
+
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", master);
+ ////-----------------------------
+
+ return "egovframework/com/cop/bbs/EgovArticleReply";
+ }
+
+ if (isAuthenticated) {
+ //final Map<String, MultipartFile> files = multiRequest.getFileMap();
+ final List<MultipartFile> files = multiRequest.getFiles("file_1");
+ String atchFileId = "";
+
+ if (!files.isEmpty()) {
+ List<FileVO> result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
+ atchFileId = fileMngService.insertFileInfs(result);
+ }
+
+ board.setAtchFileId(atchFileId);
+ board.setReplyAt("Y");
+ board.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ board.setBbsId(board.getBbsId());
+ board.setParnts(Long.toString(boardVO.getNttId()));
+ board.setSortOrdr(boardVO.getSortOrdr());
+ board.setReplyLc(Integer.toString(Integer.parseInt(boardVO.getReplyLc()) + 1));
+
+ //익명등록 처리
+ if(board.getAnonymousAt() != null && board.getAnonymousAt().equals("Y")){
+ board.setNtcrId("anonymous"); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm("익명"); //게시물 통계 집계를 위해 등록자 Name 저장
+ board.setFrstRegisterId("anonymous");
+
+ } else {
+ board.setNtcrId((user == null || user.getId() == null) ? "" : user.getId()); //게시물 통계 집계를 위해 등록자 ID 저장
+ board.setNtcrNm((user == null || user.getName() == null) ? "" : user.getName()); //게시물 통계 집계를 위해 등록자 Name 저장
+
+ }
+ board.setNttCn(unscript(board.getNttCn())); // XSS 방지
+
+ egovArticleService.insertArticle(board);
+ }
+
+ return "forward:/cop/bbs/selectArticleList.do";
+ }
+
+ /**
+ * 게시물 수정을 위한 수정페이지로 이동한다.
+ *
+ * @param boardVO
+ * @param vo
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/updateArticleView.do")
+ public String updateArticleView(@ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("board") BoardVO vo, ModelMap model)
+ throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ boardVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO bmvo = new BoardMasterVO();
+ BoardVO bdvo = new BoardVO();
+
+ vo.setBbsId(boardVO.getBbsId());
+
+ bmvo.setBbsId(boardVO.getBbsId());
+ bmvo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ if (isAuthenticated) {
+ bmvo = egovBBSMasterService.selectBBSMasterInf(bmvo);
+ bdvo = egovArticleService.selectArticleDetail(boardVO);
+ }
+
+ //----------------------------
+ // 기본 BBS template 지정
+ //----------------------------
+ if (bmvo.getTmplatCours() == null || bmvo.getTmplatCours().equals("")) {
+ bmvo.setTmplatCours("/css/egovframework/com/cop/tpl/egovBaseTemplate.css");
+ }
+
+ //익명 등록글인 경우 수정 불가
+ if(bdvo.getNtcrId().equals("anonymous")){
+ model.addAttribute("result", bdvo);
+ model.addAttribute("boardMasterVO", bmvo);
+ return "egovframework/com/cop/bbs/EgovArticleDetail";
+ }
+
+ model.addAttribute("articleVO", bdvo);
+ model.addAttribute("boardMasterVO", bmvo);
+
+ if(boardVO.getBlogAt().equals("chkBlog")){
+ return "egovframework/com/cop/bbs/EgovArticleBlogUpdt";
+ }else{
+ return "egovframework/com/cop/bbs/EgovArticleUpdt";
+ }
+
+ }
+
+ /**
+ * 게시물에 대한 내용을 수정한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/updateArticle.do")
+ public String updateBoardArticle(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, @ModelAttribute("board") Board board, BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ //--------------------------------------------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 START
+ // param1 : 사용자고유ID(uniqId,esntlId)
+ //--------------------------------------------------------
+ LOGGER.debug("@ XSS 권한체크 START ----------------------------------------------");
+ //step1 DB에서 해당 게시물의 uniqId 조회
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ //step2 EgovXssChecker 공통모듈을 이용한 권한체크
+ EgovXssChecker.checkerUserXss(multiRequest, vo.getFrstRegisterId());
+ LOGGER.debug("@ XSS 권한체크 END ------------------------------------------------");
+ //--------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 END
+ //--------------------------------------------------------------------------------------------
+
+ String atchFileId = boardVO.getAtchFileId();
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ boardVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO bmvo = new BoardMasterVO();
+ BoardVO bdvo = new BoardVO();
+
+ bmvo.setBbsId(boardVO.getBbsId());
+ bmvo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ bmvo = egovBBSMasterService.selectBBSMasterInf(bmvo);
+ bdvo = egovArticleService.selectArticleDetail(boardVO);
+
+ model.addAttribute("articleVO", bdvo);
+ model.addAttribute("boardMasterVO", bmvo);
+
+ return "egovframework/com/cop/bbs/EgovArticleUpdt";
+ }
+
+ if (isAuthenticated) {
+
+ //final Map<String, MultipartFile> files = multiRequest.getFileMap();
+ final List<MultipartFile> files = multiRequest.getFiles("file_1");
+ if (!files.isEmpty()) {
+ if (atchFileId == null || "".equals(atchFileId)) {
+ List<FileVO> result = fileUtil.parseFileInf(files, "BBS_", 0, atchFileId, "");
+ atchFileId = fileMngService.insertFileInfs(result);
+ board.setAtchFileId(atchFileId);
+ } else {
+ FileVO fvo = new FileVO();
+ fvo.setAtchFileId(atchFileId);
+ int cnt = fileMngService.getMaxFileSN(fvo);
+ List<FileVO> _result = fileUtil.parseFileInf(files, "BBS_", cnt, atchFileId, "");
+ fileMngService.updateFileInfs(_result);
+ }
+ }
+
+ board.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ board.setNtcrNm(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
+ board.setPassword(""); // dummy 오류 수정 (익명이 아닌 경우 validator 처리를 위해 dummy로 지정됨)
+
+ board.setNttCn(unscript(board.getNttCn())); // XSS 방지
+
+ egovArticleService.updateArticle(board);
+ }
+
+ return "forward:/cop/bbs/selectArticleList.do";
+ }
+
+ /**
+ * 게시물에 대한 내용을 삭제한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/deleteArticle.do")
+ public String deleteBoardArticle(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("board") Board board,
+ @ModelAttribute("bdMstr") BoardMaster bdMstr, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ //--------------------------------------------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 START
+ // param1 : 사용자고유ID(uniqId,esntlId)
+ //--------------------------------------------------------
+ LOGGER.debug("@ XSS 권한체크 START ----------------------------------------------");
+ //step1 DB에서 해당 게시물의 uniqId 조회
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ //step2 EgovXssChecker 공통모듈을 이용한 권한체크
+ EgovXssChecker.checkerUserXss(request, vo.getFrstRegisterId());
+ LOGGER.debug("@ XSS 권한체크 END ------------------------------------------------");
+ //--------------------------------------------------------
+ // @ XSS 대응 권한체크 체크 END
+ //--------------------------------------------------------------------------------------------
+
+ BoardVO bdvo = egovArticleService.selectArticleDetail(boardVO);
+ //익명 등록글인 경우 수정 불가
+ if(bdvo.getNtcrId().equals("anonymous")){
+ model.addAttribute("result", bdvo);
+ model.addAttribute("boardMasterVO", bdMstr);
+ return "egovframework/com/cop/bbs/EgovArticleDetail";
+ }
+
+ if (isAuthenticated) {
+ board.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ egovArticleService.deleteArticle(board);
+ }
+
+ if(boardVO.getBlogAt().equals("chkBlog")){
+ return "forward:/cop/bbs/selectArticleBlogList.do";
+ }else{
+ return "forward:/cop/bbs/selectArticleList.do";
+ }
+ }
+
+ /**
+ * 방명록에 대한 목록을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectGuestArticleList.do")
+ public String selectGuestArticleList(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ // 수정 및 삭제 기능 제어를 위한 처리
+ model.addAttribute("sessionUniqId", (user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardVO vo = new BoardVO();
+
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setBbsNm(boardVO.getBbsNm());
+ vo.setNtcrNm((user == null || user.getName() == null) ? "" : user.getName());
+ vo.setNtcrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO masterVo = new BoardMasterVO();
+
+ masterVo.setBbsId(vo.getBbsId());
+ masterVo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO mstrVO = egovBBSMasterService.selectBBSMasterInf(masterVo);
+
+ vo.setPageIndex(boardVO.getPageIndex());
+ vo.setPageUnit(propertyService.getInt("pageUnit"));
+ vo.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(vo.getPageIndex());
+ paginationInfo.setRecordCountPerPage(vo.getPageUnit());
+ paginationInfo.setPageSize(vo.getPageSize());
+
+ vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ vo.setLastIndex(paginationInfo.getLastRecordIndex());
+ vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleService.selectGuestArticleList(vo);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("user", user);
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("boardMasterVO", mstrVO);
+ model.addAttribute("articleVO", vo);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/cop/bbs/EgovGuestArticleList";
+ }
+
+
+ /**
+ * 방명록에 대한 내용을 등록한다.
+ *
+ * @param boardVO
+ * @param board
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/insertGuestArticle.do")
+ public String insertGuestList(@ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("Board") Board board, BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ BoardVO vo = new BoardVO();
+
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setBbsNm(boardVO.getBbsNm());
+ vo.setNtcrNm(user == null ? "" : EgovStringUtil.isNullToString(user.getName()));
+ vo.setNtcrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO masterVo = new BoardMasterVO();
+
+ masterVo.setBbsId(vo.getBbsId());
+ masterVo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO mstrVO = egovBBSMasterService.selectBBSMasterInf(masterVo);
+
+ vo.setPageUnit(propertyService.getInt("pageUnit"));
+ vo.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(vo.getPageIndex());
+ paginationInfo.setRecordCountPerPage(vo.getPageUnit());
+ paginationInfo.setPageSize(vo.getPageSize());
+
+ vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ vo.setLastIndex(paginationInfo.getLastRecordIndex());
+ vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleService.selectGuestArticleList(vo);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("boardMasterVO", mstrVO);
+ model.addAttribute("articleVO", vo);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/cop/bbs/EgovGuestArticleList";
+
+ }
+
+ if (isAuthenticated) {
+ board.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ egovArticleService.insertArticle(board);
+
+ boardVO.setNttCn("");
+ boardVO.setPassword("");
+ boardVO.setNtcrId("");
+ boardVO.setNttId(0);
+ }
+
+ return "forward:/cop/bbs/selectGuestArticleList.do";
+ }
+
+ /**
+ * 방명록에 대한 내용을 삭제한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/deleteGuestArticle.do")
+ public String deleteGuestList(@ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("articleVO") Board board, ModelMap model) throws Exception {
+ @SuppressWarnings("unused")
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if (isAuthenticated) {
+ egovArticleService.deleteArticle(boardVO);
+ }
+
+ return "forward:/cop/bbs/selectGuestArticleList.do";
+ }
+
+ /**
+ * 방명록 수정을 위한 특정 내용을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/updateGuestArticleView.do")
+ public String updateGuestArticleView(@ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("boardMasterVO") BoardMasterVO brdMstrVO,
+ ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ // 수정 및 삭제 기능 제어를 위한 처리
+ model.addAttribute("sessionUniqId", (user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ boardVO.setBbsId(boardVO.getBbsId());
+ boardVO.setBbsNm(boardVO.getBbsNm());
+ boardVO.setNtcrNm((user == null || user.getName() == null) ? "" : user.getName());
+
+ boardVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
+ paginationInfo.setPageSize(boardVO.getPageSize());
+
+ boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleService.selectGuestArticleList(boardVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("articleVO", vo);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/cop/bbs/EgovGuestArticleList";
+ }
+
+ /**
+ * 방명록을 수정하고 게시판 메인페이지를 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/updateGuestArticle.do")
+ public String updateGuestArticle(@ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute Board board, BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ //BBST02, BBST04
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(board, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ BoardVO vo = new BoardVO();
+
+ vo.setBbsId(boardVO.getBbsId());
+ vo.setBbsNm(boardVO.getBbsNm());
+ vo.setNtcrNm((user == null || user.getName() == null) ? "" : user.getName());
+ vo.setNtcrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO masterVo = new BoardMasterVO();
+
+ masterVo.setBbsId(vo.getBbsId());
+ masterVo.setUniqId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ BoardMasterVO mstrVO = egovBBSMasterService.selectBBSMasterInf(masterVo);
+
+ vo.setPageUnit(propertyService.getInt("pageUnit"));
+ vo.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(vo.getPageIndex());
+ paginationInfo.setRecordCountPerPage(vo.getPageUnit());
+ paginationInfo.setPageSize(vo.getPageSize());
+
+ vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ vo.setLastIndex(paginationInfo.getLastRecordIndex());
+ vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleService.selectGuestArticleList(vo);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("boardMasterVO", mstrVO);
+ model.addAttribute("articleVO", vo);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/cop/bbs/EgovGuestArticleList";
+ }
+
+ if (isAuthenticated) {
+ egovArticleService.updateArticle(board);
+ boardVO.setNttCn("");
+ boardVO.setPassword("");
+ boardVO.setNtcrId("");
+ boardVO.setNttId(0);
+ }
+
+ return "forward:/cop/bbs/selectGuestArticleList.do";
+ }
+
+ /*********************
+ * 블로그관련
+ * ********************/
+
+ /**
+ * 블로그 게시판에 대한 목록을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectArticleBlogList.do")
+ public String selectArticleBlogList(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ BlogVO blogVo = new BlogVO();
+ blogVo.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ blogVo.setBbsId(boardVO.getBbsId());
+ blogVo.setBlogId(boardVO.getBlogId());
+ BlogVO master = egovBBSMasterService.selectBlogDetail(blogVo);
+
+ boardVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ //블로그 카테고리관리 권한(로그인 한 사용자만 가능)
+ int loginUserCnt = egovArticleService.selectLoginUser(boardVO);
+
+ //블로그 게시판 제목 추출
+ List<BoardVO> blogNameList = egovArticleService.selectBlogNmList(boardVO);
+
+ if(user != null) {
+ model.addAttribute("sessionUniqId", (user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ }
+
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", master);
+ model.addAttribute("blogNameList", blogNameList);
+ model.addAttribute("loginUserCnt", loginUserCnt);
+
+ return "egovframework/com/cop/bbs/EgovArticleBlogList";
+ }
+
+ /**
+ * 블로그 게시물에 대한 상세 타이틀을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectArticleBlogDetail.do")
+ public ModelAndView selectArticleBlogDetail(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ throw new IllegalAccessException("Login Required!");
+ }
+
+ BoardVO vo = new BoardVO();
+
+ boardVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ boardVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
+ paginationInfo.setPageSize(boardVO.getPageSize());
+
+ boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<BoardVO> blogSubJectList = egovArticleService.selectArticleDetailDefault(boardVO);
+ vo = egovArticleService.selectArticleCnOne(boardVO);
+
+ int totCnt = egovArticleService.selectArticleDetailDefaultCnt(boardVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ ModelAndView mav = new ModelAndView("jsonView");
+ mav.addObject("blogSubJectList", blogSubJectList);
+ mav.addObject("paginationInfo", paginationInfo);
+
+ if(vo.getNttCn() != null){
+ mav.addObject("blogCnOne", vo);
+ }
+
+ //비밀글은 작성자만 볼수 있음
+ if(!EgovStringUtil.isEmpty(vo.getSecretAt()) && vo.getSecretAt().equals("Y") && !((user == null || user.getUniqId() == null) ? "" : user.getUniqId()).equals(vo.getFrstRegisterId()))
+ mav.setViewName("forward:/cop/bbs/selectArticleList.do");
+ return mav;
+ }
+
+ /**
+ * 블로그 게시물에 대한 상세 내용을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectArticleBlogDetailCn.do")
+ public ModelAndView selectArticleBlogDetailCn(@ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("commentVO") CommentVO commentVO, ModelMap model) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ boardVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ if(!isAuthenticated) {
+ throw new IllegalAccessException("Login Required!");
+ }
+
+ BoardVO vo = egovArticleService.selectArticleDetail(boardVO);
+
+ //----------------------------
+ // 댓글 처리
+ //----------------------------
+ CommentVO articleCommentVO = new CommentVO();
+ commentVO.setWrterNm((user == null || user.getName() == null) ? "" : user.getName());
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(commentVO.getSubPageIndex());
+ paginationInfo.setRecordCountPerPage(commentVO.getSubPageUnit());
+ paginationInfo.setPageSize(commentVO.getSubPageSize());
+
+ commentVO.setSubFirstIndex(paginationInfo.getFirstRecordIndex());
+ commentVO.setSubLastIndex(paginationInfo.getLastRecordIndex());
+ commentVO.setSubRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleCommentService.selectArticleCommentList(commentVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ //댓글 처리 END
+ //----------------------------
+
+ List<BoardVO> blogCnList = egovArticleService.selectArticleDetailCn(boardVO);
+ ModelAndView mav = new ModelAndView("jsonView");
+
+ // 수정 처리된 후 댓글 등록 화면으로 처리되기 위한 구현
+ if (commentVO.isModified()) {
+ commentVO.setCommentNo("");
+ commentVO.setCommentCn("");
+ }
+
+ // 수정을 위한 처리
+ if (!commentVO.getCommentNo().equals("")) {
+ mav.setViewName ("forward:/cop/cmt/updateArticleCommentView.do");
+ }
+
+ mav.addObject("blogCnList", blogCnList);
+ mav.addObject("resultUnder", vo);
+ mav.addObject("paginationInfo", paginationInfo);
+ mav.addObject("resultList", map.get("resultList"));
+ mav.addObject("resultCnt", map.get("resultCnt"));
+ mav.addObject("articleCommentVO", articleCommentVO); // validator 용도
+
+ commentVO.setCommentCn(""); // 등록 후 댓글 내용 처리
+
+ //비밀글은 작성자만 볼수 있음
+ if(!EgovStringUtil.isEmpty(vo.getSecretAt()) && vo.getSecretAt().equals("Y") && !((user == null || user.getUniqId() == null) ? "" : user.getUniqId()).equals(vo.getFrstRegisterId()))
+ mav.setViewName("forward:/cop/bbs/selectArticleList.do");
+ return mav;
+
+ }
+
+ /**
+ * 개인블로그 관리
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectBlogListManager.do")
+ public String selectBlogMasterList(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+
+ boardVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
+ paginationInfo.setPageSize(boardVO.getPageSize());
+
+ boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+ boardVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ Map<String, Object> map = egovArticleService.selectBlogListManager(boardVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/cop/bbs/EgovBlogListManager";
+ }
+
+ /**
+ * 템플릿에 대한 미리보기용 게시물 목록을 조회한다.
+ *
+ * @param boardVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/previewBoardList.do")
+ public String previewBoardArticles(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+ //LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ String template = boardVO.getSearchWrd(); // 템플릿 URL
+
+ BoardMasterVO master = new BoardMasterVO();
+
+ master.setBbsNm("미리보기 게시판");
+
+ boardVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
+ paginationInfo.setPageSize(boardVO.getPageSize());
+
+ boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ BoardVO target = null;
+ List<BoardVO> list = new ArrayList<BoardVO>();
+
+ target = new BoardVO();
+ target.setNttSj("게시판 기능 설명");
+ target.setFrstRegisterId("ID");
+ target.setFrstRegisterNm("관리자");
+ target.setFrstRegisterPnttm("2019-01-01");
+ target.setInqireCo(7);
+ target.setParnts("0");
+ target.setReplyAt("N");
+ target.setReplyLc("0");
+ target.setUseAt("Y");
+
+ list.add(target);
+
+ target = new BoardVO();
+ target.setNttSj("게시판 부가 기능 설명");
+ target.setFrstRegisterId("ID");
+ target.setFrstRegisterNm("관리자");
+ target.setFrstRegisterPnttm("2019-01-01");
+ target.setInqireCo(7);
+ target.setParnts("0");
+ target.setReplyAt("N");
+ target.setReplyLc("0");
+ target.setUseAt("Y");
+
+ list.add(target);
+
+ boardVO.setSearchWrd("");
+
+ int totCnt = list.size();
+
+ //공지사항 추출
+ List<BoardVO> noticeList = egovArticleService.selectNoticeArticleList(boardVO);
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ master.setTmplatCours(template);
+
+ model.addAttribute("resultList", list);
+ model.addAttribute("resultCnt", Integer.toString(totCnt));
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", master);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("noticeList", noticeList);
+
+ model.addAttribute("preview", "true");
+
+ return "egovframework/com/cop/bbs/EgovArticleList";
+ }
+
+ /**
+ * 미리보기 커뮤니티 메인페이지를 조회한다.
+ *
+ * @param cmmntyVO
+ * @param sessionVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/previewBlogMainPage.do")
+ public String previewBlogMainPage(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); //KISA 보안취약점 조치 (2018-12-10, 이정은)
+
+ String tmplatCours = boardVO.getSearchWrd();
+
+ BlogVO master = new BlogVO();
+ master.setBlogNm("미리보기 블로그");
+ master.setBlogIntrcn("미리보기를 위한 블로그입니다.");
+ master.setUseAt("Y");
+ master.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ boardVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+
+ //블로그 카테고리관리 권한(로그인 한 사용자만 가능)
+ int loginUserCnt = egovArticleService.selectLoginUser(boardVO);
+
+ //블로그 게시판 제목 추출
+ List<BoardVO> blogNameList = new ArrayList<BoardVO>();
+
+ BoardVO target = null;
+ target = new BoardVO();
+ target.setBbsNm("블로그게시판#1");
+
+ blogNameList.add(target);
+
+
+ if(user != null) {
+ model.addAttribute("sessionUniqId", user.getUniqId());
+ }
+
+ model.addAttribute("articleVO", boardVO);
+ model.addAttribute("boardMasterVO", master);
+ model.addAttribute("blogNameList", blogNameList);
+ model.addAttribute("loginUserCnt", 1);
+
+ model.addAttribute("preview", "true");
+
+ return "egovframework/com/cmm/egovError";
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovBBSMasterController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovBBSMasterController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovBBSMasterController.java (revision 7)
@@ -0,0 +1,509 @@
+package egovframework.com.cop.bbs.web;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.EgovComponentChecker;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.cop.bbs.service.Blog;
+import egovframework.com.cop.bbs.service.BlogUserVO;
+import egovframework.com.cop.bbs.service.BlogVO;
+import egovframework.com.cop.bbs.service.BoardMaster;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+import egovframework.com.cop.bbs.service.EgovBBSMasterService;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+
+/**
+ * 게시판 속성관리를 위한 컨트롤러 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.3.12 이삼섭 최초 생성
+ * 2009.06.26 한성곤 2단계 기능 추가 (댓글관리, 만족도조사)
+ * 2011.07.21 안민정 커뮤니티 관련 메소드 분리 (->EgovBBSAttributeManageController)
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * 2011.09.15 서준식 2단계 기능 추가 (댓글관리, 만족도조사) 적용방법 변경
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * </pre>
+ */
+
+@Controller
+public class EgovBBSMasterController {
+
+ @Resource(name = "EgovBBSMasterService")
+ private EgovBBSMasterService egovBBSMasterService;
+
+ @Resource(name = "EgovCmmUseService")
+ private EgovCmmUseService cmmUseService;
+
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertyService;
+
+ @Resource(name = "egovBBSMstrIdGnrService")
+ private EgovIdGnrService idgenServiceBbs;
+
+ @Resource(name = "egovBlogIdGnrService")
+ private EgovIdGnrService idgenServiceBlog;
+
+ /** EgovMessageSource */
+ @Resource(name = "egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ //Logger log = Logger.getLogger(this.getClass());
+
+ /**
+ * 신규 게시판 마스터 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param boardMasterVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/insertBBSMasterView.do")
+ public String insertBBSMasterView(@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model) throws Exception {
+ BoardMasterVO boardMaster = new BoardMasterVO();
+ //공통코드(게시판유형)
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+ vo.setCodeId("COM101");
+ List<?> codeResult = cmmUseService.selectCmmCodeDetail(vo);
+ model.addAttribute("bbsTyCode", codeResult);
+ model.addAttribute("boardMasterVO", boardMaster);
+
+
+ //---------------------------------
+ // 2011.09.15 : 2단계 기능 추가 반영 방법 변경
+ //---------------------------------
+
+
+ if(EgovComponentChecker.hasComponent("EgovArticleCommentService")){
+ model.addAttribute("useComment", "true");
+ }
+
+ return "egovframework/com/cop/bbs/EgovBBSMasterRegist";
+ }
+
+ /**
+ * 신규 게시판 마스터 정보를 등록한다.
+ *
+ * @param boardMasterVO
+ * @param boardMaster
+ * @param status
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/insertBBSMaster.do")
+ public String insertBBSMaster(@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, @ModelAttribute("boardMaster") BoardMaster boardMaster,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ beanValidator.validate(boardMaster, bindingResult);
+ if (bindingResult.hasErrors()) {
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //게시판유형코드
+ vo.setCodeId("COM101");
+ List<?> codeResult = cmmUseService.selectCmmCodeDetail(vo);
+ model.addAttribute("bbsTyCode", codeResult);
+
+ return "egovframework/com/cop/bbs/EgovBBSMasterRegist";
+ }
+
+ if (isAuthenticated) {
+ boardMaster.setFrstRegisterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ if((boardMasterVO == null ? "" : EgovStringUtil.isNullToString(boardMasterVO.getBlogAt())).equals("Y")){
+ boardMaster.setBlogAt("Y");
+ }else{
+ boardMaster.setBlogAt("N");
+ }
+ egovBBSMasterService.insertBBSMasterInf(boardMaster);
+ }
+ if(boardMaster.getBlogAt().equals("Y")){
+ return "forward:/cop/bbs/selectArticleBlogList.do";
+ }else{
+ return "forward:/cop/bbs/selectBBSMasterInfs.do";
+ }
+
+ }
+
+ /**
+ * 게시판 마스터 목록을 조회한다.
+ *
+ * @param boardMasterVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @IncludedInfo(name="게시판관리",order = 180 ,gid = 40)
+ @RequestMapping("/cop/bbs/selectBBSMasterInfs.do")
+ public String selectBBSMasterInfs(@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model) throws Exception {
+ boardMasterVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardMasterVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(boardMasterVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardMasterVO.getPageUnit());
+ paginationInfo.setPageSize(boardMasterVO.getPageSize());
+
+ boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovBBSMasterService.selectBBSMasterInfs(boardMasterVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/cop/bbs/EgovBBSMasterList";
+ }
+
+ /**
+ * 블로그에 대한 목록을 조회한다.
+ *
+ * @param blogVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @IncludedInfo(name="블로그관리", order = 170 ,gid = 40)
+ @RequestMapping("/cop/bbs/selectBlogList.do")
+ public String selectBlogMasterList(@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ //KISA 보안취약점 조치 (2018-12-10, 신용호)
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ boardMasterVO.setPageUnit(propertyService.getInt("pageUnit"));
+ boardMasterVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(boardMasterVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(boardMasterVO.getPageUnit());
+ paginationInfo.setPageSize(boardMasterVO.getPageSize());
+
+ boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+ boardMasterVO.setFrstRegisterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+
+ Map<String, Object> map = egovBBSMasterService.selectBlogMasterInfs(boardMasterVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/cop/bbs/EgovBlogList";
+ }
+
+ /**
+ * 블로그 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param blogVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/insertBlogMasterView.do")
+ public String insertBlogMasterView(@ModelAttribute("searchVO") BlogVO blogVO, ModelMap model) throws Exception {
+ model.addAttribute("blogMasterVO", new BlogVO());
+ return "egovframework/com/cop/bbs/EgovBlogRegist";
+ }
+
+ /**
+ * 블로그 생성 유무를 판단한다.
+ *
+ * @param blogVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectChkBloguser.do")
+ public ModelAndView chkBlogUser(@ModelAttribute("searchVO") BlogVO blogVO, ModelMap model) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ // KISA 보안취약점 조치 (2018-12-10, 신용호)
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ throw new IllegalAccessException("Login Required!");
+ }
+
+ model.addAttribute("blogMasterVO", new BlogVO());
+
+ String userVal="";
+ blogVO.setFrstRegisterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ userVal = egovBBSMasterService.checkBlogUser(blogVO);
+
+ ModelAndView mav = new ModelAndView("jsonView");
+ mav.addObject("userChk", userVal);
+ return mav;
+ }
+
+ /**
+ * 블로그 정보를 등록한다.
+ *
+ * @param blogVO
+ * @param blog
+ * @param status
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/insertBlogMaster.do")
+ public String insertBlogMaster(@ModelAttribute("searchVO") BlogVO blogVO, @ModelAttribute("blogMaster") Blog blog,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) { //KISA 보안약점 조치 (2018-12-10, 신용호)
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ blogVO.setFrstRegisterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ BlogVO vo = egovBBSMasterService.checkBlogUser2(blogVO);
+
+ if(vo != null) {
+ model.addAttribute("blogMasterVO", new BlogVO());
+ model.addAttribute("message", egovMessageSource.getMessage("comCopBlog.validate.blogUserCheck"));
+ return "egovframework/com/cop/bbs/EgovBlogRegist";
+ }
+
+ beanValidator.validate(blog, bindingResult);
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/cop/bbs/EgovBlogRegist";
+ }
+
+ String blogId = idgenServiceBlog.getNextStringId(); //블로그 아이디 채번
+ String bbsId = idgenServiceBbs.getNextStringId(); //게시판 아이디 채번
+
+ blog.setRegistSeCode("REGC02");
+ blog.setFrstRegisterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ blog.setBbsId(bbsId);
+ blog.setBlogId(blogId);
+ blog.setBlogAt("Y");
+ egovBBSMasterService.insertBlogMaster(blog);
+
+ if (isAuthenticated) {
+ //블로그 개설자의 정보를 등록한다.
+ BlogUserVO blogUserVO = new BlogUserVO();
+ blogUserVO.setBlogId(blogId);
+ blogUserVO.setEmplyrId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ blogUserVO.setMngrAt("Y");
+ blogUserVO.setMberSttus("P");
+ blogUserVO.setUseAt("Y");
+ blogUserVO.setFrstRegisterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+
+ egovBBSMasterService.insertBoardBlogUserRqst(blogUserVO);
+ }
+ return "forward:/cop/bbs/selectBlogList.do";
+ }
+
+ /**
+ * 게시판 마스터 상세내용을 조회한다.
+ *
+ * @param boardMasterVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectBBSMasterDetail.do")
+ public String selectBBSMasterDetail(@ModelAttribute("searchVO") BoardMasterVO searchVO, ModelMap model) throws Exception {
+ BoardMasterVO vo = egovBBSMasterService.selectBBSMasterInf(searchVO);
+ model.addAttribute("result", vo);
+
+ //---------------------------------
+ // 2011.09.15 : 2단계 기능 추가 반영 방법 변경
+ //---------------------------------
+
+ if(EgovComponentChecker.hasComponent("EgovArticleCommentService")){
+ model.addAttribute("useComment", "true");
+ }
+
+ return "egovframework/com/cop/bbs/EgovBBSMasterDetail";
+ }
+
+ /**
+ * 게시판 마스터정보를 수정하기 위한 전 처리
+ * @param bbsId
+ * @param searchVO
+ * @param model
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/updateBBSMasterView.do")
+ public String updateBBSMasterView(@RequestParam("bbsId") String bbsId ,
+ @ModelAttribute("searchVO") BoardMaster searchVO, ModelMap model)
+ throws Exception {
+
+
+ BoardMasterVO boardMasterVO = new BoardMasterVO();
+
+
+ //게시판유형코드
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+ vo.setCodeId("COM101");
+ List<?> codeResult = cmmUseService.selectCmmCodeDetail(vo);
+ model.addAttribute("bbsTyCode", codeResult);
+
+ // Primary Key 값 세팅
+ boardMasterVO.setBbsId(bbsId);
+
+ model.addAttribute("boardMasterVO", egovBBSMasterService.selectBBSMasterInf(boardMasterVO));
+
+ //---------------------------------
+ // 2011.09.15 : 2단계 기능 추가 반영 방법 변경
+ //---------------------------------
+
+ if(EgovComponentChecker.hasComponent("EgovArticleCommentService")){
+ model.addAttribute("useComment", "true");
+ }
+
+ return "egovframework/com/cop/bbs/EgovBBSMasterUpdt";
+ }
+
+
+ /**
+ * 게시판 마스터 정보를 수정한다.
+ *
+ * @param boardMasterVO
+ * @param boardMaster
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/updateBBSMaster.do")
+ public String updateBBSMaster(@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, @ModelAttribute("boardMaster") BoardMaster boardMaster,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ beanValidator.validate(boardMaster, bindingResult);
+ if (bindingResult.hasErrors()) {
+ BoardMasterVO vo = egovBBSMasterService.selectBBSMasterInf(boardMasterVO);
+
+ model.addAttribute("result", vo);
+
+ ComDefaultCodeVO comVo = new ComDefaultCodeVO();
+ comVo.setCodeId("COM101");
+ List<?> codeResult = cmmUseService.selectCmmCodeDetail(comVo);
+ model.addAttribute("bbsTyCode", codeResult);
+
+ return "egovframework/com/cop/bbs/EgovBBSMasterUpdt";
+ }
+
+ if (isAuthenticated) {
+ boardMaster.setLastUpdusrId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ egovBBSMasterService.updateBBSMasterInf(boardMaster);
+ }
+
+ return "forward:/cop/bbs/selectBBSMasterInfs.do";
+ }
+
+ /**
+ * 게시판 마스터 정보를 삭제한다.
+ *
+ * @param boardMasterVO
+ * @param boardMaster
+ * @param status
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/deleteBBSMaster.do")
+ public String deleteBBSMaster(@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, @ModelAttribute("boardMaster") BoardMaster boardMaster
+ ) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if (isAuthenticated) {
+ boardMaster.setLastUpdusrId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ egovBBSMasterService.deleteBBSMasterInf(boardMaster);
+ }
+ // status.setComplete();
+ return "forward:/cop/bbs/selectBBSMasterInfs.do";
+ }
+
+ /**
+ * 포트릿을 위한 블로그 목록 정보를 조회한다.
+ *
+ * @param blogVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectBlogListPortlet.do")
+ public String selectBlogListPortlet(@ModelAttribute("searchVO") BlogVO blogVO, ModelMap model) throws Exception {
+ List<BlogVO> result = egovBBSMasterService.selectBlogListPortlet(blogVO);
+
+ model.addAttribute("resultList", result);
+
+ return "egovframework/com/cop/bbs/EgovBlogListPortlet";
+ }
+
+ /**
+ * 포트릿을 위한 게시판 목록 정보를 조회한다.
+ *
+ * @param blogVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/bbs/selectBBSListPortlet.do")
+ public String selectBBSListPortlet(@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model) throws Exception {
+ List<BoardMasterVO> result = egovBBSMasterService.selectBBSListPortlet(boardMasterVO);
+
+ model.addAttribute("resultList", result);
+
+ return "egovframework/com/cop/bbs/EgovBBSListPortlet";
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovBBSMasterController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterServiceImpl.java (revision 7)
@@ -0,0 +1,173 @@
+package egovframework.com.cop.bbs.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cop.bbs.service.BoardMaster;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+import egovframework.com.cop.bbs.service.EgovBBSMasterService;
+import egovframework.com.cmm.EgovComponentChecker;
+import egovframework.com.cop.bbs.service.Blog;
+import egovframework.com.cop.bbs.service.BlogUser;
+import egovframework.com.cop.bbs.service.BlogVO;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+@Service("EgovBBSMasterService")
+public class EgovBBSMasterServiceImpl extends EgovAbstractServiceImpl implements EgovBBSMasterService {
+
+ @Resource(name = "EgovBBSMasterDAO")
+ private EgovBBSMasterDAO egovBBSMasterDao;
+
+ @Resource(name = "egovBBSMstrIdGnrService")
+ private EgovIdGnrService idgenService;
+
+ //---------------------------------
+ // 2009.06.26 : 2단계 기능 추가
+ //---------------------------------
+ @Resource(name = "BBSAddedOptionsDAO")
+ private BBSAddedOptionsDAO addedOptionsDAO;
+ ////-------------------------------
+
+ @Override
+ public Map<String, Object> selectNotUsedBdMstrList(BoardMasterVO boardMasterVO) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void deleteBBSMasterInf(BoardMaster boardMaster) {
+ egovBBSMasterDao.deleteBBSMaster(boardMaster);
+ }
+
+ @Override
+ public void updateBBSMasterInf(BoardMaster boardMaster) throws Exception {
+ egovBBSMasterDao.updateBBSMaster(boardMaster);
+
+ //---------------------------------
+ // 2009.06.26 : 2단계 기능 추가
+ //---------------------------------
+ if (boardMaster.getOption().equals("comment") || boardMaster.getOption().equals("stsfdg")) {
+ addedOptionsDAO.insertAddedOptionsInf(boardMaster);
+ }
+
+ }
+
+ @Override
+ public BoardMasterVO selectBBSMasterInf(BoardMasterVO boardMasterVO) throws Exception {
+ BoardMasterVO resultVO = egovBBSMasterDao.selectBBSMasterDetail(boardMasterVO);
+ if (resultVO == null)
+ throw processException("info.nodata.msg");
+
+ if(EgovComponentChecker.hasComponent("EgovBBSCommentService")){//2011.09.15
+ BoardMasterVO options = addedOptionsDAO.selectAddedOptionsInf(boardMasterVO);
+
+ if (options != null) {
+ if (options.getCommentAt().equals("Y")) {
+ resultVO.setOption("comment");
+ }
+ } else {
+ resultVO.setOption("na"); // 미지정 상태로 수정 가능 (이미 지정된 경우는 수정 불가로 처리)
+ }
+ }
+
+ return resultVO;
+ }
+
+ @Override
+ public Map<String, Object> selectBBSMasterInfs(BoardMasterVO boardMasterVO) {
+ List<?> result = egovBBSMasterDao.selectBBSMasterInfs(boardMasterVO);
+ int cnt = egovBBSMasterDao.selectBBSMasterInfsCnt(boardMasterVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ @Override
+ public Map<String, Object> selectBlogMasterInfs(BoardMasterVO boardMasterVO) {
+ List<?> result = egovBBSMasterDao.selectBlogMasterInfs(boardMasterVO);
+ int cnt = egovBBSMasterDao.selectBlogMasterInfsCnt(boardMasterVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ @Override
+ public void insertBBSMasterInf(BoardMaster boardMaster) throws Exception {
+
+ //게시판 ID 채번
+ String bbsId = idgenService.getNextStringId();
+ boardMaster.setBbsId(bbsId);
+
+ egovBBSMasterDao.insertBBSMasterInf(boardMaster);
+
+ //---------------------------------
+ // 2009.06.26 : 2단계 기능 추가
+ //---------------------------------
+ if (boardMaster.getOption().equals("comment") || boardMaster.getOption().equals("stsfdg")) {
+ addedOptionsDAO.insertAddedOptionsInf(boardMaster);
+ }
+
+ }
+
+ @Override
+ public String checkBlogUser(BlogVO blogVO) {
+
+ int userCnt = egovBBSMasterDao.checkExistUser(blogVO);
+
+ if (userCnt == 0) {
+ return "";
+ } else {
+ return "EXIST";
+ }
+ }
+
+ @Override
+ public BlogVO checkBlogUser2(BlogVO blogVO) {
+ BlogVO userBlog = egovBBSMasterDao.checkExistUser2(blogVO);
+ return userBlog;
+ }
+
+ @Override
+ public void insertBoardBlogUserRqst(BlogUser blogUser) {
+ egovBBSMasterDao.insertBoardBlogUserRqst(blogUser);
+ }
+
+ @Override
+ public void insertBlogMaster(Blog blog) throws FdlException {
+ egovBBSMasterDao.insertBlogMaster(blog);
+ }
+
+ @Override
+ public BlogVO selectBlogDetail(BlogVO blogVO) throws Exception {
+ BlogVO resultVO = egovBBSMasterDao.selectBlogDetail(blogVO);
+ if (resultVO == null)
+ throw processException("info.nodata.msg");
+ return resultVO;
+ }
+
+ @Override
+ public List<BlogVO> selectBlogListPortlet(BlogVO blogVO) throws Exception{
+ return egovBBSMasterDao.selectBlogListPortlet(blogVO);
+ }
+
+ @Override
+ public List<BoardMasterVO> selectBBSListPortlet(BoardMasterVO boardMasterVO) throws Exception {
+ return egovBBSMasterDao.selectBBSListPortlet(boardMasterVO);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleServiceImpl.java (revision 7)
@@ -0,0 +1,166 @@
+package egovframework.com.cop.bbs.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cmm.service.EgovFileMngService;
+import egovframework.com.cmm.service.FileVO;
+import egovframework.com.cop.bbs.service.Board;
+import egovframework.com.cop.bbs.service.BoardVO;
+import egovframework.com.cop.bbs.service.EgovArticleService;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+
+@Service("EgovArticleService")
+public class EgovArticleServiceImpl extends EgovAbstractServiceImpl implements EgovArticleService {
+
+ @Resource(name = "EgovArticleDAO")
+ private EgovArticleDAO egovArticleDao;
+
+ @Resource(name = "EgovFileMngService")
+ private EgovFileMngService fileService;
+
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertyService;
+
+ @Resource(name = "egovNttIdGnrService")
+ private EgovIdGnrService nttIdgenService;
+
+ @Override
+ public Map<String, Object> selectArticleList(BoardVO boardVO) {
+ List<?> list = egovArticleDao.selectArticleList(boardVO);
+
+
+ int cnt = egovArticleDao.selectArticleListCnt(boardVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", list);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ @Override
+ public BoardVO selectArticleDetail(BoardVO boardVO) {
+ int iniqireCo = egovArticleDao.selectMaxInqireCo(boardVO);
+
+ boardVO.setInqireCo(iniqireCo);
+ egovArticleDao.updateInqireCo(boardVO);
+
+ return egovArticleDao.selectArticleDetail(boardVO);
+ }
+
+ @Override
+ public BoardVO selectArticleCnOne(BoardVO boardVO) {
+ return egovArticleDao.selectArticleCnOne(boardVO);
+ }
+
+ @Override
+ public List<BoardVO> selectArticleDetailDefault(BoardVO boardVO) {
+ return egovArticleDao.selectArticleDetailDefault(boardVO);
+ }
+
+ @Override
+ public int selectArticleDetailDefaultCnt(BoardVO boardVO){
+ return egovArticleDao.selectArticleDetailDefaultCnt(boardVO);
+ }
+
+ @Override
+ public List<BoardVO> selectArticleDetailCn(BoardVO boardVO) {
+ return egovArticleDao.selectArticleDetailCn(boardVO);
+ }
+
+ @Override
+ public void insertArticle(Board board) throws FdlException {
+
+ if ("Y".equals(board.getReplyAt())) {
+ // 답글인 경우 1. Parnts를 세팅, 2.Parnts의 sortOrdr을 현재글의 sortOrdr로 가져오도록, 3.nttNo는 현재 게시판의 순서대로
+ // replyLc는 부모글의 ReplyLc + 1
+
+ board.setNttId(nttIdgenService.getNextIntegerId()); // 답글에 대한 nttId 생성
+ egovArticleDao.replyArticle(board);
+
+ } else {
+ // 답글이 아닌경우 Parnts = 0, replyLc는 = 0, sortOrdr = nttNo(Query에서 처리)
+ board.setParnts("0");
+ board.setReplyLc("0");
+ board.setReplyAt("N");
+ board.setNttId(nttIdgenService.getNextIntegerId());//2011.09.22
+
+ egovArticleDao.insertArticle(board);
+ }
+ }
+
+ @Override
+ public void updateArticle(Board board) {
+ egovArticleDao.updateArticle(board);
+ }
+
+ @Override
+ public void deleteArticle(Board board) throws Exception {
+ FileVO fvo = new FileVO();
+
+ fvo.setAtchFileId(board.getAtchFileId());
+
+ board.setNttSj("이 글은 작성자에 의해서 삭제되었습니다.");
+
+ egovArticleDao.deleteArticle(board);
+
+ if (!"".equals(fvo.getAtchFileId()) || fvo.getAtchFileId() != null) {
+ fileService.deleteAllFileInf(fvo);
+ }
+
+ }
+
+ @Override
+ public List<BoardVO> selectNoticeArticleList(BoardVO boardVO) {
+ return egovArticleDao.selectNoticeArticleList(boardVO);
+ }
+
+ @Override
+ public List<BoardVO> selectBlogNmList(BoardVO boardVO) {
+ return egovArticleDao.selectBlogNmList(boardVO);
+ }
+
+ @Override
+ public Map<String, Object> selectGuestArticleList(BoardVO vo) {
+ List<?> list = egovArticleDao.selectGuestArticleList(vo);
+
+
+ int cnt = egovArticleDao.selectGuestArticleListCnt(vo);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", list);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ @Override
+ public int selectLoginUser(BoardVO boardVO){
+ return egovArticleDao.selectLoginUser(boardVO);
+ }
+
+ @Override
+ public Map<String, Object> selectBlogListManager(BoardVO vo) {
+ List<?> result = egovArticleDao.selectBlogListManager(vo);
+ int cnt = egovArticleDao.selectBlogListManagerCnt(vo);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterDAO.java (revision 7)
@@ -0,0 +1,79 @@
+package egovframework.com.cop.bbs.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.cop.bbs.service.BoardMaster;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+import egovframework.com.cop.bbs.service.BlogVO;
+import egovframework.com.cop.bbs.service.Blog;
+import egovframework.com.cop.bbs.service.BlogUser;
+
+@Repository("EgovBBSMasterDAO")
+public class EgovBBSMasterDAO extends EgovComAbstractDAO {
+
+ public List<?> selectBBSMasterInfs(BoardMasterVO boardMasterVO) {
+ return list("BBSMaster.selectBBSMasterList", boardMasterVO);
+ }
+
+ public int selectBBSMasterInfsCnt(BoardMasterVO boardMasterVO) {
+ return (Integer)selectOne("BBSMaster.selectBBSMasterListTotCnt", boardMasterVO);
+ }
+
+ public BoardMasterVO selectBBSMasterDetail(BoardMasterVO boardMasterVO) {
+ return (BoardMasterVO) selectOne("BBSMaster.selectBBSMasterDetail", boardMasterVO);
+ }
+
+ public void insertBBSMasterInf(BoardMaster boardMaster) {
+ insert("BBSMaster.insertBBSMaster", boardMaster);
+ }
+
+ public void updateBBSMaster(BoardMaster boardMaster) {
+ update("BBSMaster.updateBBSMaster", boardMaster);
+ }
+
+ public void deleteBBSMaster(BoardMaster boardMaster) {
+ update("BBSMaster.deleteBBSMaster", boardMaster);
+ }
+
+ /*
+ * 블로그 관련
+ */
+ public List<?> selectBlogMasterInfs(BoardMasterVO boardMasterVO) {
+ return list("BBSMaster.selectBlogMasterList", boardMasterVO);
+ }
+
+ public int selectBlogMasterInfsCnt(BoardMasterVO boardMasterVO) {
+ return (Integer)selectOne("BBSMaster.selectBlogMasterListTotCnt", boardMasterVO);
+ }
+
+ public int checkExistUser(BlogVO blogVO) {
+ return (Integer)selectOne("BBSMaster.checkExistUser", blogVO);
+ }
+
+ public BlogVO checkExistUser2(BlogVO blogVO) {
+ return (BlogVO) selectOne("BBSMaster.checkExistUser2", blogVO);
+ }
+
+ public void insertBoardBlogUserRqst(BlogUser blogUser) {
+ insert("BBSMaster.insertBoardBlogUserRqst", blogUser);
+ }
+
+ public void insertBlogMaster(Blog blog) {
+ insert("BBSMaster.insertBlogMaster", blog);
+ }
+
+ public BlogVO selectBlogDetail(BlogVO blogVO) {
+ return (BlogVO) selectOne("BBSMaster.selectBlogDetail", blogVO);
+ }
+
+ public List<BlogVO> selectBlogListPortlet(BlogVO blogVO) throws Exception{
+ return (List<BlogVO>) list("BBSMaster.selectBlogListPortlet", blogVO);
+ }
+
+ public List<BoardMasterVO> selectBBSListPortlet(BoardMasterVO boardMasterVO) {
+ return (List<BoardMasterVO>) list("BBSMaster.selectBBSListPortlet", boardMasterVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovBBSMasterDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleDAO.java (revision 7)
@@ -0,0 +1,100 @@
+package egovframework.com.cop.bbs.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.cop.bbs.service.Board;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+import egovframework.com.cop.bbs.service.BoardVO;
+
+@Repository("EgovArticleDAO")
+public class EgovArticleDAO extends EgovComAbstractDAO {
+
+ public List<?> selectArticleList(BoardVO boardVO) {
+ return list("BBSArticle.selectArticleList", boardVO);
+ }
+
+ public int selectArticleListCnt(BoardVO boardVO) {
+ return (Integer)selectOne("BBSArticle.selectArticleListCnt", boardVO);
+ }
+
+ public int selectMaxInqireCo(BoardVO boardVO) {
+ return (Integer)selectOne("BBSArticle.selectMaxInqireCo", boardVO);
+ }
+
+ public void updateInqireCo(BoardVO boardVO) {
+ update("BBSArticle.updateInqireCo", boardVO);
+ }
+
+ public BoardVO selectArticleDetail(BoardVO boardVO) {
+ return (BoardVO) selectOne("BBSArticle.selectArticleDetail", boardVO);
+ }
+
+ public void replyArticle(Board board) {
+ insert("BBSArticle.replyArticle", board);
+ }
+
+ public void insertArticle(Board board) {
+ insert("BBSArticle.insertArticle", board);
+ }
+
+ public void updateArticle(Board board) {
+ update("BBSArticle.updateArticle", board);
+ }
+
+ public void deleteArticle(Board board) {
+ update("BBSArticle.deleteArticle", board);
+
+ }
+
+ public List<BoardVO> selectNoticeArticleList(BoardVO boardVO) {
+ return (List<BoardVO>) list("BBSArticle.selectNoticeArticleList", boardVO);
+ }
+
+ public List<?> selectGuestArticleList(BoardVO vo) {
+ return list("BBSArticle.selectGuestArticleList", vo);
+ }
+
+ public int selectGuestArticleListCnt(BoardVO vo) {
+ return (Integer)selectOne("BBSArticle.selectGuestArticleListCnt", vo);
+ }
+
+ /*
+ * 블로그 관련
+ */
+ public BoardVO selectArticleCnOne(BoardVO boardVO) {
+ return (BoardVO) selectOne("BBSArticle.selectArticleCnOne", boardVO);
+ }
+
+ public List<BoardVO> selectBlogNmList(BoardVO boardVO) {
+ return (List<BoardVO>) list("BBSArticle.selectBlogNmList", boardVO);
+ }
+
+ public List<?> selectBlogListManager(BoardVO vo) {
+ return list("BBSArticle.selectBlogListManager", vo);
+ }
+
+ public int selectBlogListManagerCnt(BoardVO vo) {
+ return (Integer)selectOne("BBSArticle.selectBlogListManagerCnt", vo);
+ }
+
+ public List<BoardVO> selectArticleDetailDefault(BoardVO boardVO) {
+ return (List<BoardVO>) list("BBSArticle.selectArticleDetailDefault", boardVO);
+ }
+
+ public int selectArticleDetailDefaultCnt(BoardVO boardVO) {
+ return (Integer)selectOne("BBSArticle.selectArticleDetailDefaultCnt", boardVO);
+ }
+
+ public List<BoardVO> selectArticleDetailCn(BoardVO boardVO) {
+ return (List<BoardVO>) list("BBSArticle.selectArticleDetailCn", boardVO);
+ }
+
+ public int selectLoginUser(BoardVO boardVO) {
+ return (Integer)selectOne("BBSArticle.selectLoginUser", boardVO);
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java (revision 7)
@@ -0,0 +1,54 @@
+package egovframework.com.cop.bbs.service.impl;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.cop.bbs.service.BoardMaster;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 2단계 기능 추가 (댓글관리, 만족도조사) 관리를 위한 데이터 접근 클래스
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.06.26
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.06.26 한성곤 최초 생성
+ *
+ * </pre>
+ */
+@Repository("BBSAddedOptionsDAO")
+public class BBSAddedOptionsDAO extends EgovComAbstractDAO {
+
+ /**
+ * 신규 게시판 추가기능 정보를 등록한다.
+ *
+ * @param BoardMaster
+ */
+ public String insertAddedOptionsInf(BoardMaster boardMaster) throws Exception {
+ return Integer.toString(insert("BBSAddedOptions.insertAddedOptionsInf", boardMaster));
+ }
+
+ /**
+ * 게시판 추가기능 정보 한 건을 상세조회 한다.
+ *
+ * @param BoardMasterVO
+ */
+ public BoardMasterVO selectAddedOptionsInf(BoardMaster vo) throws Exception {
+ return (BoardMasterVO)selectOne("BBSAddedOptions.selectAddedOptionsInf", vo);
+ }
+
+ /**
+ * 게시판 추가기능 정보를 수정한다.
+ *
+ * @param BoardMaster
+ */
+ public void updateAddedOptionsInf(BoardMaster boardMaster) throws Exception {
+ update("BBSAddedOptions.updateAddedOptionsInf", boardMaster);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/BBSAddedOptionsDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java (revision 7)
@@ -0,0 +1,675 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 게시물 관리를 위한 VO 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.3.19 이삼섭 최초 생성
+ * 2009.06.29 한성곤 2단계 기능 추가 (댓글관리, 만족도조사)
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class BoardVO extends Board implements Serializable {
+
+ /** 검색시작일 */
+ private String searchBgnDe = "";
+
+ /** 검색조건 */
+ private String searchCnd = "";
+
+ /** 검색종료일 */
+ private String searchEndDe = "";
+
+ /** 검색단어 */
+ private String searchWrd = "";
+
+ /** 정렬순서(DESC,ASC) */
+ private long sortOrdr = 0L;
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** 첫페이지 인덱스 */
+ private int firstIndex = 1;
+
+ /** 마지막페이지 인덱스 */
+ private int lastIndex = 1;
+
+ /** 페이지당 레코드 개수 */
+ private int recordCountPerPage = 10;
+
+ /** 레코드 번호 */
+ private int rowNo = 0;
+
+ /** 최초 등록자명 */
+ private String frstRegisterNm = "";
+
+ /** 최종 수정자명 */
+ private String lastUpdusrNm = "";
+
+ /** 유효여부 */
+ private String isExpired = "N";
+
+ /** 상위 정렬 순서 */
+ private String parntsSortOrdr = "";
+
+ /** 상위 답변 위치 */
+ private String parntsReplyLc = "";
+
+ /** 게시판 유형코드 */
+ private String bbsTyCode = "";
+
+ /** 게시판 속성코드 */
+ private String bbsAttrbCode = "";
+
+ /** 게시판 명 */
+ private String bbsNm = "";
+
+ /** 파일첨부가능여부 */
+ private String fileAtchPosblAt = "";
+
+ /** 첨부가능파일숫자 */
+ private int posblAtchFileNumber = 0;
+
+ /** 답장가능여부 */
+ private String replyPosblAt = "";
+
+ /** 조회 수 증가 여부 */
+ private boolean plusCount = false;
+
+ /** 익명등록 여부 */
+ private String anonymousAt = "";
+
+ /** 하위 페이지 인덱스 (댓글 및 만족도 조사 여부 확인용) */
+ private String subPageIndex = "";
+
+ /** 게시글 댓글갯수 */
+ private String commentCo = "";
+
+ /** 볼드체 여부 */
+ private String sjBoldAt;
+
+ /** 공지 여부 */
+ private String noticeAt;
+
+ /** 비밀글 여부 */
+ private String secretAt;
+
+ /**
+ * searchBgnDe attribute를 리턴한다.
+ *
+ * @return the searchBgnDe
+ */
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ /**
+ * searchBgnDe attribute 값을 설정한다.
+ *
+ * @param searchBgnDe
+ * the searchBgnDe to set
+ */
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ /**
+ * searchCnd attribute를 리턴한다.
+ *
+ * @return the searchCnd
+ */
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ /**
+ * searchCnd attribute 값을 설정한다.
+ *
+ * @param searchCnd
+ * the searchCnd to set
+ */
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ /**
+ * searchEndDe attribute를 리턴한다.
+ *
+ * @return the searchEndDe
+ */
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ /**
+ * searchEndDe attribute 값을 설정한다.
+ *
+ * @param searchEndDe
+ * the searchEndDe to set
+ */
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ /**
+ * searchWrd attribute를 리턴한다.
+ *
+ * @return the searchWrd
+ */
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ /**
+ * searchWrd attribute 값을 설정한다.
+ *
+ * @param searchWrd
+ * the searchWrd to set
+ */
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ *
+ * @return the sortOrdr
+ */
+ public long getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ *
+ * @param sortOrdr
+ * the sortOrdr to set
+ */
+ public void setSortOrdr(long sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * searchUseYn attribute를 리턴한다.
+ *
+ * @return the searchUseYn
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ *
+ * @param searchUseYn
+ * the searchUseYn to set
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute를 리턴한다.
+ *
+ * @return the pageIndex
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ *
+ * @param pageIndex
+ * the pageIndex to set
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute를 리턴한다.
+ *
+ * @return the pageUnit
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ *
+ * @param pageUnit
+ * the pageUnit to set
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute를 리턴한다.
+ *
+ * @return the pageSize
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ *
+ * @param pageSize
+ * the pageSize to set
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute를 리턴한다.
+ *
+ * @return the firstIndex
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ *
+ * @param firstIndex
+ * the firstIndex to set
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute를 리턴한다.
+ *
+ * @return the lastIndex
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ *
+ * @param lastIndex
+ * the lastIndex to set
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute를 리턴한다.
+ *
+ * @return the recordCountPerPage
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ *
+ * @param recordCountPerPage
+ * the recordCountPerPage to set
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ /**
+ * rowNo attribute를 리턴한다.
+ *
+ * @return the rowNo
+ */
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ /**
+ * rowNo attribute 값을 설정한다.
+ *
+ * @param rowNo
+ * the rowNo to set
+ */
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+ /**
+ * frstRegisterNm attribute를 리턴한다.
+ *
+ * @return the frstRegisterNm
+ */
+ public String getFrstRegisterNm() {
+ return frstRegisterNm;
+ }
+
+ /**
+ * frstRegisterNm attribute 값을 설정한다.
+ *
+ * @param frstRegisterNm
+ * the frstRegisterNm to set
+ */
+ public void setFrstRegisterNm(String frstRegisterNm) {
+ this.frstRegisterNm = frstRegisterNm;
+ }
+
+ /**
+ * lastUpdusrNm attribute를 리턴한다.
+ *
+ * @return the lastUpdusrNm
+ */
+ public String getLastUpdusrNm() {
+ return lastUpdusrNm;
+ }
+
+ /**
+ * lastUpdusrNm attribute 값을 설정한다.
+ *
+ * @param lastUpdusrNm
+ * the lastUpdusrNm to set
+ */
+ public void setLastUpdusrNm(String lastUpdusrNm) {
+ this.lastUpdusrNm = lastUpdusrNm;
+ }
+
+ /**
+ * isExpired attribute를 리턴한다.
+ *
+ * @return the isExpired
+ */
+ public String getIsExpired() {
+ return isExpired;
+ }
+
+ /**
+ * isExpired attribute 값을 설정한다.
+ *
+ * @param isExpired
+ * the isExpired to set
+ */
+ public void setIsExpired(String isExpired) {
+ this.isExpired = isExpired;
+ }
+
+ /**
+ * parntsSortOrdr attribute를 리턴한다.
+ *
+ * @return the parntsSortOrdr
+ */
+ public String getParntsSortOrdr() {
+ return parntsSortOrdr;
+ }
+
+ /**
+ * parntsSortOrdr attribute 값을 설정한다.
+ *
+ * @param parntsSortOrdr
+ * the parntsSortOrdr to set
+ */
+ public void setParntsSortOrdr(String parntsSortOrdr) {
+ this.parntsSortOrdr = parntsSortOrdr;
+ }
+
+ /**
+ * parntsReplyLc attribute를 리턴한다.
+ *
+ * @return the parntsReplyLc
+ */
+ public String getParntsReplyLc() {
+ return parntsReplyLc;
+ }
+
+ /**
+ * parntsReplyLc attribute 값을 설정한다.
+ *
+ * @param parntsReplyLc
+ * the parntsReplyLc to set
+ */
+ public void setParntsReplyLc(String parntsReplyLc) {
+ this.parntsReplyLc = parntsReplyLc;
+ }
+
+ /**
+ * bbsTyCode attribute를 리턴한다.
+ *
+ * @return the bbsTyCode
+ */
+ public String getBbsTyCode() {
+ return bbsTyCode;
+ }
+
+ /**
+ * bbsTyCode attribute 값을 설정한다.
+ *
+ * @param bbsTyCode
+ * the bbsTyCode to set
+ */
+ public void setBbsTyCode(String bbsTyCode) {
+ this.bbsTyCode = bbsTyCode;
+ }
+
+ /**
+ * bbsAttrbCode attribute를 리턴한다.
+ *
+ * @return the bbsAttrbCode
+ */
+ public String getBbsAttrbCode() {
+ return bbsAttrbCode;
+ }
+
+ /**
+ * bbsAttrbCode attribute 값을 설정한다.
+ *
+ * @param bbsAttrbCode
+ * the bbsAttrbCode to set
+ */
+ public void setBbsAttrbCode(String bbsAttrbCode) {
+ this.bbsAttrbCode = bbsAttrbCode;
+ }
+
+ /**
+ * bbsNm attribute를 리턴한다.
+ *
+ * @return the bbsNm
+ */
+ public String getBbsNm() {
+ return bbsNm;
+ }
+
+ /**
+ * bbsNm attribute 값을 설정한다.
+ *
+ * @param bbsNm
+ * the bbsNm to set
+ */
+ public void setBbsNm(String bbsNm) {
+ this.bbsNm = bbsNm;
+ }
+
+ /**
+ * fileAtchPosblAt attribute를 리턴한다.
+ *
+ * @return the fileAtchPosblAt
+ */
+ public String getFileAtchPosblAt() {
+ return fileAtchPosblAt;
+ }
+
+ /**
+ * fileAtchPosblAt attribute 값을 설정한다.
+ *
+ * @param fileAtchPosblAt
+ * the fileAtchPosblAt to set
+ */
+ public void setFileAtchPosblAt(String fileAtchPosblAt) {
+ this.fileAtchPosblAt = fileAtchPosblAt;
+ }
+
+ /**
+ * posblAtchFileNumber attribute를 리턴한다.
+ *
+ * @return the posblAtchFileNumber
+ */
+ public int getPosblAtchFileNumber() {
+ return posblAtchFileNumber;
+ }
+
+ /**
+ * posblAtchFileNumber attribute 값을 설정한다.
+ *
+ * @param posblAtchFileNumber
+ * the posblAtchFileNumber to set
+ */
+ public void setPosblAtchFileNumber(int posblAtchFileNumber) {
+ this.posblAtchFileNumber = posblAtchFileNumber;
+ }
+
+ /**
+ * replyPosblAt attribute를 리턴한다.
+ *
+ * @return the replyPosblAt
+ */
+ public String getReplyPosblAt() {
+ return replyPosblAt;
+ }
+
+ /**
+ * replyPosblAt attribute 값을 설정한다.
+ *
+ * @param replyPosblAt
+ * the replyPosblAt to set
+ */
+ public void setReplyPosblAt(String replyPosblAt) {
+ this.replyPosblAt = replyPosblAt;
+ }
+
+ /**
+ * plusCount attribute를 리턴한다.
+ * @return the plusCount
+ */
+ public boolean isPlusCount() {
+ return plusCount;
+ }
+
+ /**
+ * plusCount attribute 값을 설정한다.
+ * @param plusCount the plusCount to set
+ */
+ public void setPlusCount(boolean plusCount) {
+ this.plusCount = plusCount;
+ }
+
+ /**
+ * subPageIndex attribute를 리턴한다.
+ * @return the subPageIndex
+ */
+ public String getSubPageIndex() {
+ return subPageIndex;
+ }
+
+ /**
+ * subPageIndex attribute 값을 설정한다.
+ * @param subPageIndex the subPageIndex to set
+ */
+ public void setSubPageIndex(String subPageIndex) {
+ this.subPageIndex = subPageIndex;
+ }
+
+ /**
+ * anonymousAt attribute를 리턴한다.
+ * @return the anonymousAt
+ */
+ public String getAnonymousAt() {
+ return anonymousAt;
+ }
+
+ /**
+ * anonymousAt attribute 값을 설정한다.
+ * @param anonymousAt the anonymousAt to set
+ */
+ public void setAnonymousAt(String anonymousAt) {
+ this.anonymousAt = anonymousAt;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+ /**
+ * commentCo attribute를 리턴한다.
+ * @return the commentCo
+ */
+ public String getCommentCo() {
+ return commentCo;
+ }
+
+
+ /**
+ * commentCo attribute 값을 설정한다.
+ * @param commentCo the commentCo to set
+ */
+
+ public void setCommentCo(String commentCo) {
+ this.commentCo = commentCo;
+ }
+
+ public String getSjBoldAt() {
+ return sjBoldAt;
+ }
+
+ public void setSjBoldAt(String sjBoldAt) {
+ this.sjBoldAt = sjBoldAt;
+ }
+
+ public String getNoticeAt() {
+ return noticeAt;
+ }
+
+ public void setNoticeAt(String noticeAt) {
+ this.noticeAt = noticeAt;
+ }
+
+ public String getSecretAt() {
+ return secretAt;
+ }
+
+ public void setSecretAt(String secretAt) {
+ this.secretAt = secretAt;
+ }
+
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUser.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUser.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUser.java (revision 7)
@@ -0,0 +1,362 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 블로그게시판 관리를 위한 모델 클래스
+ * @author 공통서비스개발팀 양희훈
+ * @since 2017.09.12
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ----------- -------- ---------------------------
+ * 2017.09.12 양희훈 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class BlogUser implements Serializable {
+
+ /** 블로그아이디 */
+ private String blogId = "";
+
+ /** 최초등록자 아이디 */
+ private String frstRegisterId = "";
+
+ /** 최초등록시점 */
+ private String frstRegisterPnttm = "";
+
+ /** 최종수정자 아이디 */
+ private String lastUpdusrId = "";
+
+ /** 최종수정시점 */
+ private String lastUpdusrPnttm = "";
+
+ /** 관리자여부 */
+ private String mngrAt = "";
+
+ /** 탈퇴일 */
+ private String secsnDe = "";
+
+ /** 가입일 */
+ private String sbscrbDe = "";
+
+ /** 사용여부 */
+ private String useAt = "";
+
+ /** 사용자 아이디 */
+ private String emplyrId = "";
+
+ /** 사용자명 */
+ private String emplyrNm = "";
+
+ /** 회원 ID */
+ private String userId = "";
+
+ /** 회원 이메일 */
+ private String userEmail = "";
+
+ /** 회원 상태 */
+ private String mberSttus = "";
+
+ /** 회원 상태 코드명 */
+ private String mberSttusNm = "";
+
+ /**
+ * blogId attribute를 리턴한다.
+ *
+ * @return the blogId
+ */
+ public String getBlogId() {
+ return blogId;
+ }
+
+ /**
+ * blogId attribute 값을 설정한다.
+ *
+ * @param blogId
+ * the blogId to set
+ */
+ public void setBlogId(String blogId) {
+ this.blogId = blogId;
+ }
+
+ /**
+ * frstRegisterId attribute를 리턴한다.
+ *
+ * @return the frstRegisterId
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ *
+ * @param frstRegisterId
+ * the frstRegisterId to set
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * frstRegisterPnttm attribute를 리턴한다.
+ *
+ * @return the frstRegisterPnttm
+ */
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ /**
+ * frstRegisterPnttm attribute 값을 설정한다.
+ *
+ * @param frstRegisterPnttm
+ * the frstRegisterPnttm to set
+ */
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ /**
+ * lastUpdusrId attribute를 리턴한다.
+ *
+ * @return the lastUpdusrId
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ *
+ * @param lastUpdusrId
+ * the lastUpdusrId to set
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute를 리턴한다.
+ *
+ * @return the lastUpdusrPnttm
+ */
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute 값을 설정한다.
+ *
+ * @param lastUpdusrPnttm
+ * the lastUpdusrPnttm to set
+ */
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+
+ /**
+ * mngrAt attribute를 리턴한다.
+ *
+ * @return the mngrAt
+ */
+ public String getMngrAt() {
+ return mngrAt;
+ }
+
+ /**
+ * mngrAt attribute 값을 설정한다.
+ *
+ * @param mngrAt
+ * the mngrAt to set
+ */
+ public void setMngrAt(String mngrAt) {
+ this.mngrAt = mngrAt;
+ }
+
+ /**
+ * secsnDe attribute를 리턴한다.
+ *
+ * @return the secsnDe
+ */
+ public String getSecsnDe() {
+ return secsnDe;
+ }
+
+ /**
+ * secsnDe attribute 값을 설정한다.
+ *
+ * @param secsnDe
+ * the secsnDe to set
+ */
+ public void setSecsnDe(String secsnDe) {
+ this.secsnDe = secsnDe;
+ }
+
+ /**
+ * sbscrbDe attribute를 리턴한다.
+ *
+ * @return the sbscrbDe
+ */
+ public String getSbscrbDe() {
+ return sbscrbDe;
+ }
+
+ /**
+ * sbscrbDe attribute 값을 설정한다.
+ *
+ * @param sbscrbDe
+ * the sbscrbDe to set
+ */
+ public void setSbscrbDe(String sbscrbDe) {
+ this.sbscrbDe = sbscrbDe;
+ }
+
+ /**
+ * useAt attribute를 리턴한다.
+ *
+ * @return the useAt
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ *
+ * @param useAt
+ * the useAt to set
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * emplyrId attribute를 리턴한다.
+ *
+ * @return the emplyrId
+ */
+ public String getEmplyrId() {
+ return emplyrId;
+ }
+
+ /**
+ * emplyrId attribute 값을 설정한다.
+ *
+ * @param emplyrId
+ * the emplyrId to set
+ */
+ public void setEmplyrId(String emplyrId) {
+ this.emplyrId = emplyrId;
+ }
+
+ /**
+ * emplyrNm attribute를 리턴한다.
+ *
+ * @return the emplyrNm
+ */
+ public String getEmplyrNm() {
+ return emplyrNm;
+ }
+
+ /**
+ * emplyrNm attribute 값을 설정한다.
+ *
+ * @param emplyrNm
+ * the emplyrNm to set
+ */
+ public void setEmplyrNm(String emplyrNm) {
+ this.emplyrNm = emplyrNm;
+ }
+
+ /**
+ * userId attribute를 리턴한다.
+ *
+ * @return the userId
+ */
+ public String getUserId() {
+ return userId;
+ }
+
+ /**
+ * userId attribute 값을 설정한다.
+ *
+ * @param userId
+ * the userId to set
+ */
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ /**
+ * userEmail attribute를 리턴한다.
+ *
+ * @return the userEmail
+ */
+ public String getUserEmail() {
+ return userEmail;
+ }
+
+ /**
+ * userEmail attribute 값을 설정한다.
+ *
+ * @param userEmail
+ * the userEmail to set
+ */
+ public void setUserEmail(String userEmail) {
+ this.userEmail = userEmail;
+ }
+
+ /**
+ * mberSttus attribute를 리턴한다.
+ *
+ * @return the mberSttus
+ */
+ public String getMberSttus() {
+ return mberSttus;
+ }
+
+ /**
+ * mberSttus attribute 값을 설정한다.
+ *
+ * @param mberSttus
+ * the mberSttus to set
+ */
+ public void setMberSttus(String mberSttus) {
+ this.mberSttus = mberSttus;
+ }
+
+ /**
+ * mberSttusNm attribute를 리턴한다.
+ *
+ * @return the mberSttusNm
+ */
+ public String getMberSttusNm() {
+ return mberSttusNm;
+ }
+
+ /**
+ * mberSttusNm attribute 값을 설정한다.
+ *
+ * @param mberSttusNm
+ * the mberSttusNm to set
+ */
+ public void setMberSttusNm(String mberSttusNm) {
+ this.mberSttusNm = mberSttusNm;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUser.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java (revision 7)
@@ -0,0 +1,316 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 만족도조사 서비스 데이터 처리 모델
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.06.29
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.06.29 한성곤 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class Satisfaction implements Serializable {
+ /** 만족도 번호 */
+ private String stsfdgNo = "";
+
+ /** 게시판 ID */
+ private String bbsId = "";
+
+ /** 게시물 번호 */
+ private long nttId = 0L;
+
+ /** 작성자 ID */
+ private String wrterId = "";
+
+ /** 작성자명 */
+ private String wrterNm = "";
+
+ /** 패스워드 */
+ private String stsfdgPassword = "";
+
+ /** 만족도 내용 */
+ private String stsfdgCn = "";
+
+ /** 만족도 */
+ private int stsfdg = 0;
+
+ /** 사용 여부 */
+ private String useAt = "";
+
+ /** 최초등록자 아이디 */
+ private String frstRegisterId = "";
+
+ /** 최초 등록자명 */
+ private String frstRegisterNm = "";
+
+ /** 최초등록시점 */
+ private String frstRegisterPnttm = "";
+
+ /** 최종수정자 아이디 */
+ private String lastUpdusrId = "";
+
+ /** 최종수정시점 */
+ private String lastUpdusrPnttm = "";
+
+ /** 확인 패스워드 */
+ private String confirmPassword = "";
+
+ /**
+ * stsfdgNo attribute를 리턴한다.
+ * @return the stsfdgNo
+ */
+ public String getStsfdgNo() {
+ return stsfdgNo;
+ }
+
+ /**
+ * stsfdgNo attribute 값을 설정한다.
+ * @param stsfdgNo the stsfdgNo to set
+ */
+ public void setStsfdgNo(String stsfdgNo) {
+ this.stsfdgNo = stsfdgNo;
+ }
+
+ /**
+ * bbsId attribute를 리턴한다.
+ * @return the bbsId
+ */
+ public String getBbsId() {
+ return bbsId;
+ }
+
+ /**
+ * bbsId attribute 값을 설정한다.
+ * @param bbsId the bbsId to set
+ */
+ public void setBbsId(String bbsId) {
+ this.bbsId = bbsId;
+ }
+
+ /**
+ * nttId attribute를 리턴한다.
+ * @return the nttId
+ */
+ public long getNttId() {
+ return nttId;
+ }
+
+ /**
+ * nttId attribute 값을 설정한다.
+ * @param nttId the nttId to set
+ */
+ public void setNttId(long nttId) {
+ this.nttId = nttId;
+ }
+
+ /**
+ * wrterId attribute를 리턴한다.
+ * @return the wrterId
+ */
+ public String getWrterId() {
+ return wrterId;
+ }
+
+ /**
+ * wrterId attribute 값을 설정한다.
+ * @param wrterId the wrterId to set
+ */
+ public void setWrterId(String wrterId) {
+ this.wrterId = wrterId;
+ }
+
+ /**
+ * wrterNm attribute를 리턴한다.
+ * @return the wrterNm
+ */
+ public String getWrterNm() {
+ return wrterNm;
+ }
+
+ /**
+ * wrterNm attribute 값을 설정한다.
+ * @param wrterNm the wrterNm to set
+ */
+ public void setWrterNm(String wrterNm) {
+ this.wrterNm = wrterNm;
+ }
+
+ /**
+ * stsfdgPassword attribute를 리턴한다.
+ * @return the stsfdgPassword
+ */
+ public String getStsfdgPassword() {
+ return stsfdgPassword;
+ }
+
+ /**
+ * stsfdgPassword attribute 값을 설정한다.
+ * @param stsfdgPassword the stsfdgPassword to set
+ */
+ public void setStsfdgPassword(String stsfdgPassword) {
+ this.stsfdgPassword = stsfdgPassword;
+ }
+
+ /**
+ * stsfdgCn attribute를 리턴한다.
+ * @return the stsfdgCn
+ */
+ public String getStsfdgCn() {
+ return stsfdgCn;
+ }
+
+ /**
+ * stsfdgCn attribute 값을 설정한다.
+ * @param stsfdgCn the stsfdgCn to set
+ */
+ public void setStsfdgCn(String stsfdgCn) {
+ this.stsfdgCn = stsfdgCn;
+ }
+
+ /**
+ * stsfdg attribute를 리턴한다.
+ * @return the stsfdg
+ */
+ public int getStsfdg() {
+ return stsfdg;
+ }
+
+ /**
+ * stsfdg attribute 값을 설정한다.
+ * @param stsfdg the stsfdg to set
+ */
+ public void setStsfdg(int stsfdg) {
+ this.stsfdg = stsfdg;
+ }
+
+ /**
+ * useAt attribute를 리턴한다.
+ * @return the useAt
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ * @param useAt the useAt to set
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * frstRegisterId attribute를 리턴한다.
+ * @return the frstRegisterId
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ * @param frstRegisterId the frstRegisterId to set
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * frstRegisterNm attribute를 리턴한다.
+ * @return the frstRegisterNm
+ */
+ public String getFrstRegisterNm() {
+ return frstRegisterNm;
+ }
+
+ /**
+ * frstRegisterNm attribute 값을 설정한다.
+ * @param frstRegisterNm the frstRegisterNm to set
+ */
+ public void setFrstRegisterNm(String frstRegisterNm) {
+ this.frstRegisterNm = frstRegisterNm;
+ }
+
+ /**
+ * frstRegisterPnttm attribute를 리턴한다.
+ * @return the frstRegisterPnttm
+ */
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ /**
+ * frstRegisterPnttm attribute 값을 설정한다.
+ * @param frstRegisterPnttm the frstRegisterPnttm to set
+ */
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ /**
+ * lastUpdusrId attribute를 리턴한다.
+ * @return the lastUpdusrId
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ * @param lastUpdusrId the lastUpdusrId to set
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute를 리턴한다.
+ * @return the lastUpdusrPnttm
+ */
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute 값을 설정한다.
+ * @param lastUpdusrPnttm the lastUpdusrPnttm to set
+ */
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+
+ /**
+ * confirmPassword attribute를 리턴한다.
+ * @return the confirmPassword
+ */
+ public String getConfirmPassword() {
+ return confirmPassword;
+ }
+
+ /**
+ * confirmPassword attribute 값을 설정한다.
+ * @param confirmPassword the confirmPassword to set
+ */
+ public void setConfirmPassword(String confirmPassword) {
+ this.confirmPassword = confirmPassword;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/Satisfaction.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogVO.java (revision 7)
@@ -0,0 +1,443 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 커뮤니티 관리를 위한 VO 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.4.2 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class BlogVO extends Blog implements Serializable {
+
+ /** 검색시작일 */
+ private String searchBgnDe = "";
+
+ /** 검색조건 */
+ private String searchCnd = "";
+
+ /** 검색종료일 */
+ private String searchEndDe = "";
+
+ /** 검색단어 */
+ private String searchWrd = "";
+
+ /** 정렬순서(DESC,ASC) */
+ private long sortOrdr = 0L;
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** 첫페이지 인덱스 */
+ private int firstIndex = 1;
+
+ /** 마지막페이지 인덱스 */
+ private int lastIndex = 1;
+
+ /** 페이지당 레코드 개수 */
+ private int recordCountPerPage = 10;
+
+ /** 레코드 번호 */
+ private int rowNo = 0;
+
+ /** 등록구분 코드명 */
+ private String registSeCodeNm = "";
+
+ /** 최초 등록자명 */
+ private String frstRegisterNm = "";
+
+ /** 게시판 아이드 */
+ private String bbsId = "";
+
+ /** 게시판 이름 */
+ private String bbsNm = "";
+
+ /** 제공 URL */
+ private String provdUrl = "";
+
+ private String blogId = "";
+
+
+ /**
+ * searchBgnDe attribute를 리턴한다.
+ *
+ * @return the searchBgnDe
+ */
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ /**
+ * searchBgnDe attribute 값을 설정한다.
+ *
+ * @param searchBgnDe
+ * the searchBgnDe to set
+ */
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ /**
+ * searchCnd attribute를 리턴한다.
+ *
+ * @return the searchCnd
+ */
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ /**
+ * searchCnd attribute 값을 설정한다.
+ *
+ * @param searchCnd
+ * the searchCnd to set
+ */
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ /**
+ * searchEndDe attribute를 리턴한다.
+ *
+ * @return the searchEndDe
+ */
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ /**
+ * searchEndDe attribute 값을 설정한다.
+ *
+ * @param searchEndDe
+ * the searchEndDe to set
+ */
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ /**
+ * searchWrd attribute를 리턴한다.
+ *
+ * @return the searchWrd
+ */
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ /**
+ * searchWrd attribute 값을 설정한다.
+ *
+ * @param searchWrd
+ * the searchWrd to set
+ */
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ *
+ * @return the sortOrdr
+ */
+ public long getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ *
+ * @param sortOrdr
+ * the sortOrdr to set
+ */
+ public void setSortOrdr(long sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * searchUseYn attribute를 리턴한다.
+ *
+ * @return the searchUseYn
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ *
+ * @param searchUseYn
+ * the searchUseYn to set
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute를 리턴한다.
+ *
+ * @return the pageIndex
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ *
+ * @param pageIndex
+ * the pageIndex to set
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute를 리턴한다.
+ *
+ * @return the pageUnit
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ *
+ * @param pageUnit
+ * the pageUnit to set
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute를 리턴한다.
+ *
+ * @return the pageSize
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ *
+ * @param pageSize
+ * the pageSize to set
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute를 리턴한다.
+ *
+ * @return the firstIndex
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ *
+ * @param firstIndex
+ * the firstIndex to set
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute를 리턴한다.
+ *
+ * @return the lastIndex
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ *
+ * @param lastIndex
+ * the lastIndex to set
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute를 리턴한다.
+ *
+ * @return the recordCountPerPage
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ *
+ * @param recordCountPerPage
+ * the recordCountPerPage to set
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ /**
+ * rowNo attribute를 리턴한다.
+ *
+ * @return the rowNo
+ */
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ /**
+ * rowNo attribute 값을 설정한다.
+ *
+ * @param rowNo
+ * the rowNo to set
+ */
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+ /**
+ * registSeCodeNm attribute를 리턴한다.
+ *
+ * @return the registSeCodeNm
+ */
+ public String getRegistSeCodeNm() {
+ return registSeCodeNm;
+ }
+
+ /**
+ * registSeCodeNm attribute 값을 설정한다.
+ *
+ * @param registSeCodeNm
+ * the registSeCodeNm to set
+ */
+ public void setRegistSeCodeNm(String registSeCodeNm) {
+ this.registSeCodeNm = registSeCodeNm;
+ }
+
+ /**
+ * frstRegisterNm attribute를 리턴한다.
+ *
+ * @return the frstRegisterNm
+ */
+ public String getFrstRegisterNm() {
+ return frstRegisterNm;
+ }
+
+ /**
+ * frstRegisterNm attribute 값을 설정한다.
+ *
+ * @param frstRegisterNm
+ * the frstRegisterNm to set
+ */
+ public void setFrstRegisterNm(String frstRegisterNm) {
+ this.frstRegisterNm = frstRegisterNm;
+ }
+
+ /**
+ * bbsId attribute를 리턴한다.
+ *
+ * @return the bbsId
+ */
+ public String getBbsId() {
+ return bbsId;
+ }
+
+ /**
+ * bbsId attribute 값을 설정한다.
+ *
+ * @param bbsId
+ * the bbsId to set
+ */
+ public void setBbsId(String bbsId) {
+ this.bbsId = bbsId;
+ }
+
+
+ public String getBlogId() {
+ return blogId;
+ }
+
+ /**
+ * bbsId attribute 값을 설정한다.
+ *
+ * @param bbsId
+ * the bbsId to set
+ */
+ public void setBlogId(String blogId) {
+ this.blogId = blogId;
+ }
+
+ /**
+ * bbsNm attribute를 리턴한다.
+ *
+ * @return the bbsNm
+ */
+ public String getBbsNm() {
+ return bbsNm;
+ }
+
+ /**
+ * bbsNm attribute 값을 설정한다.
+ *
+ * @param bbsNm
+ * the bbsNm to set
+ */
+ public void setBbsNm(String bbsNm) {
+ this.bbsNm = bbsNm;
+ }
+
+ /**
+ * provdUrl attribute를 리턴한다.
+ * @return the provdUrl
+ */
+ public String getProvdUrl() {
+ return provdUrl;
+ }
+
+ /**
+ * provdUrl attribute 값을 설정한다.
+ * @param provdUrl the provdUrl to set
+ */
+ public void setProvdUrl(String provdUrl) {
+ this.provdUrl = provdUrl;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovBBSMasterService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovBBSMasterService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovBBSMasterService.java (revision 7)
@@ -0,0 +1,44 @@
+package egovframework.com.cop.bbs.service;
+
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cop.bbs.service.BlogUser;
+import egovframework.com.cop.bbs.service.BlogVO;
+import egovframework.com.cop.bbs.service.Blog;
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+
+public interface EgovBBSMasterService {
+
+ Map<String, Object> selectNotUsedBdMstrList(BoardMasterVO boardMasterVO);
+
+ void deleteBBSMasterInf(BoardMaster boardMaster);
+
+ void updateBBSMasterInf(BoardMaster boardMaster) throws Exception;
+
+ BoardMasterVO selectBBSMasterInf(BoardMasterVO boardMasterVO) throws Exception;
+
+ Map<String, Object> selectBBSMasterInfs(BoardMasterVO boardMasterVO);
+
+ void insertBBSMasterInf(BoardMaster boardMaster) throws Exception;
+
+ /*
+ * 블로그 관련
+ */
+ Map<String, Object> selectBlogMasterInfs(BoardMasterVO boardMasterVO);
+
+ String checkBlogUser(BlogVO blogVO);
+
+ BlogVO checkBlogUser2(BlogVO blogVO);
+
+ void insertBoardBlogUserRqst(BlogUser blogUser);
+
+ void insertBlogMaster(Blog blog) throws FdlException;
+
+ BlogVO selectBlogDetail(BlogVO blogVO) throws Exception;
+
+ List<BlogVO> selectBlogListPortlet(BlogVO blogVO) throws Exception;
+
+ List<BoardMasterVO> selectBBSListPortlet(BoardMasterVO boardMasterVO) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovBBSMasterService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMaster.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMaster.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMaster.java (revision 7)
@@ -0,0 +1,531 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 게시판 속성정보를 담기위한 엔티티 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.12 이삼섭 최초 생성
+ * 2009.06.26 한성곤 2단계 기능 추가 (댓글관리, 만족도조사)
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class BoardMaster implements Serializable {
+
+ /** 게시판 아이디 */
+ private String bbsId = "";
+
+ /** 게시판 소개 */
+ private String bbsIntrcn = "";
+
+ /** 게시판 명 */
+ private String bbsNm = "";
+
+ /** 게시판 유형코드 */
+ private String bbsTyCode = "";
+
+ /** 파일첨부가능여부 */
+ private String fileAtchPosblAt = "";
+
+ /** 최초등록자 아이디 */
+ private String frstRegisterId = "";
+
+ /** 최초등록시점 */
+ private String frstRegisterPnttm = "";
+
+ /** 최종수정자 아이디 */
+ public String lastUpdusrId = "";
+
+ /** 최종수정시점 */
+ private String lastUpdusrPnttm = "";
+
+ /** 첨부가능파일숫자 */
+ private int atchPosblFileNumber = 0;
+
+ /** 첨부가능파일사이즈 */
+ private String atchPosblFileSize = "";
+
+ /** 답장가능여부 */
+ private String replyPosblAt = "";
+
+ /** 사용여부 */
+ private String useAt = "";
+
+ /** 사용플래그 */
+ private String bbsUseFlag = "";
+
+ /** 대상 아이디 */
+ private String trgetId = "";
+
+ /** 등록구분코드 */
+ private String registSeCode = "";
+
+ /** 유일 아이디 */
+ private String uniqId = "";
+
+ /** 템플릿 명 */
+ private String tmplatNm = "";
+
+ /** 커뮤니티 ID */
+ private String cmmntyId;
+
+ /** 블로그 ID */
+ private String blogId;
+
+ /** 블로그 사용 유무 */
+ private String blogAt;
+
+ //---------------------------------
+ // 2009.06.26 : 2단계 기능 추가
+ //---------------------------------
+ /** 추가 option (댓글-comment, 만족도조사-stsfdg) */
+ private String option = "";
+
+ /** 댓글 여부 */
+ private String commentAt = "";
+
+ /** 만족도조사 */
+ private String stsfdgAt = "";
+ ////-------------------------------
+
+ /**
+ * bbsId attribute를 리턴한다.
+ *
+ * @return the bbsId
+ */
+ public String getBbsId() {
+ return bbsId;
+ }
+
+ /**
+ * bbsId attribute 값을 설정한다.
+ *
+ * @param bbsId
+ * the bbsId to set
+ */
+ public void setBbsId(String bbsId) {
+ this.bbsId = bbsId;
+ }
+
+ /**
+ * bbsIntrcn attribute를 리턴한다.
+ *
+ * @return the bbsIntrcn
+ */
+ public String getBbsIntrcn() {
+ return bbsIntrcn;
+ }
+
+ /**
+ * bbsIntrcn attribute 값을 설정한다.
+ *
+ * @param bbsIntrcn
+ * the bbsIntrcn to set
+ */
+ public void setBbsIntrcn(String bbsIntrcn) {
+ this.bbsIntrcn = bbsIntrcn;
+ }
+
+ /**
+ * bbsNm attribute를 리턴한다.
+ *
+ * @return the bbsNm
+ */
+ public String getBbsNm() {
+ return bbsNm;
+ }
+
+ /**
+ * bbsNm attribute 값을 설정한다.
+ *
+ * @param bbsNm
+ * the bbsNm to set
+ */
+ public void setBbsNm(String bbsNm) {
+ this.bbsNm = bbsNm;
+ }
+
+ /**
+ * bbsTyCode attribute를 리턴한다.
+ *
+ * @return the bbsTyCode
+ */
+ public String getBbsTyCode() {
+ return bbsTyCode;
+ }
+
+ /**
+ * bbsTyCode attribute 값을 설정한다.
+ *
+ * @param bbsTyCode
+ * the bbsTyCode to set
+ */
+ public void setBbsTyCode(String bbsTyCode) {
+ this.bbsTyCode = bbsTyCode;
+ }
+
+ /**
+ * fileAtchPosblAt attribute를 리턴한다.
+ *
+ * @return the fileAtchPosblAt
+ */
+ public String getFileAtchPosblAt() {
+ return fileAtchPosblAt;
+ }
+
+ /**
+ * fileAtchPosblAt attribute 값을 설정한다.
+ *
+ * @param fileAtchPosblAt
+ * the fileAtchPosblAt to set
+ */
+ public void setFileAtchPosblAt(String fileAtchPosblAt) {
+ this.fileAtchPosblAt = fileAtchPosblAt;
+ }
+
+ /**
+ * frstRegisterId attribute를 리턴한다.
+ *
+ * @return the frstRegisterId
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ *
+ * @param frstRegisterId
+ * the frstRegisterId to set
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * frstRegisterPnttm attribute를 리턴한다.
+ *
+ * @return the frstRegisterPnttm
+ */
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ /**
+ * frstRegisterPnttm attribute 값을 설정한다.
+ *
+ * @param frstRegisterPnttm
+ * the frstRegisterPnttm to set
+ */
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ /**
+ * lastUpdusrId attribute를 리턴한다.
+ *
+ * @return the lastUpdusrId
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ *
+ * @param lastUpdusrId
+ * the lastUpdusrId to set
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute를 리턴한다.
+ *
+ * @return the lastUpdusrPnttm
+ */
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute 값을 설정한다.
+ *
+ * @param lastUpdusrPnttm
+ * the lastUpdusrPnttm to set
+ */
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+
+ /**
+ * atchPosblFileNumber attribute를 리턴한다.
+ *
+ * @return the atchPosblFileNumber
+ */
+ public int getAtchPosblFileNumber() {
+ return atchPosblFileNumber;
+ }
+
+ /**
+ * atchPosblFileNumber attribute 값을 설정한다.
+ *
+ * @param atchPosblFileNumber
+ * the atchPosblFileNumber to set
+ */
+ public void setAtchPosblFileNumber(int atchPosblFileNumber) {
+ this.atchPosblFileNumber = atchPosblFileNumber;
+ }
+
+ /**
+ * atchPosblFileSize attribute를 리턴한다.
+ *
+ * @return the atchPosblFileSize
+ */
+ public String getAtchPosblFileSize() {
+ return atchPosblFileSize;
+ }
+
+ /**
+ * atchPosblFileSize attribute 값을 설정한다.
+ *
+ * @param atchPosblFileSize
+ * the atchPosblFileSize to set
+ */
+ public void setAtchPosblFileSize(String atchPosblFileSize) {
+ this.atchPosblFileSize = atchPosblFileSize;
+ }
+
+ /**
+ * replyPosblAt attribute를 리턴한다.
+ *
+ * @return the replyPosblAt
+ */
+ public String getReplyPosblAt() {
+ return replyPosblAt;
+ }
+
+ /**
+ * replyPosblAt attribute 값을 설정한다.
+ *
+ * @param replyPosblAt
+ * the replyPosblAt to set
+ */
+ public void setReplyPosblAt(String replyPosblAt) {
+ this.replyPosblAt = replyPosblAt;
+ }
+
+ /**
+ * useAt attribute를 리턴한다.
+ *
+ * @return the useAt
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ *
+ * @param useAt
+ * the useAt to set
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * bbsUseFlag attribute를 리턴한다.
+ *
+ * @return the bbsUseFlag
+ */
+ public String getBbsUseFlag() {
+ return bbsUseFlag;
+ }
+
+ /**
+ * bbsUseFlag attribute 값을 설정한다.
+ *
+ * @param bbsUseFlag
+ * the bbsUseFlag to set
+ */
+ public void setBbsUseFlag(String bbsUseFlag) {
+ this.bbsUseFlag = bbsUseFlag;
+ }
+
+ /**
+ * trgetId attribute를 리턴한다.
+ *
+ * @return the trgetId
+ */
+ public String getTrgetId() {
+ return trgetId;
+ }
+
+ /**
+ * trgetId attribute 값을 설정한다.
+ *
+ * @param trgetId
+ * the trgetId to set
+ */
+ public void setTrgetId(String trgetId) {
+ this.trgetId = trgetId;
+ }
+
+ /**
+ * registSeCode attribute를 리턴한다.
+ *
+ * @return the registSeCode
+ */
+ public String getRegistSeCode() {
+ return registSeCode;
+ }
+
+ /**
+ * registSeCode attribute 값을 설정한다.
+ *
+ * @param registSeCode
+ * the registSeCode to set
+ */
+ public void setRegistSeCode(String registSeCode) {
+ this.registSeCode = registSeCode;
+ }
+
+ /**
+ * uniqId attribute를 리턴한다.
+ *
+ * @return the uniqId
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+
+ /**
+ * uniqId attribute 값을 설정한다.
+ *
+ * @param uniqId
+ * the uniqId to set
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+
+ /**
+ * tmplatNm attribute를 리턴한다.
+ *
+ * @return the tmplatNm
+ */
+ public String getTmplatNm() {
+ return tmplatNm;
+ }
+
+ /**
+ * tmplatNm attribute 값을 설정한다.
+ *
+ * @param tmplatNm
+ * the tmplatNm to set
+ */
+ public void setTmplatNm(String tmplatNm) {
+ this.tmplatNm = tmplatNm;
+ }
+
+ /**
+ * option attribute를 리턴한다.
+ * @return the option
+ */
+ public String getOption() {
+ return option;
+ }
+
+ /**
+ * option attribute 값을 설정한다.
+ * @param option the option to set
+ */
+ public void setOption(String option) {
+ this.option = option;
+ }
+
+ /**
+ * commentAt attribute를 리턴한다.
+ * @return the commentAt
+ */
+ public String getCommentAt() {
+ return commentAt;
+ }
+
+ /**
+ * commentAt attribute 값을 설정한다.
+ * @param commentAt the commentAt to set
+ */
+ public void setCommentAt(String commentAt) {
+ this.commentAt = commentAt;
+ }
+
+ /**
+ * stsfdgAt attribute를 리턴한다.
+ * @return the stsfdgAt
+ */
+ public String getStsfdgAt() {
+ return stsfdgAt;
+ }
+
+ /**
+ * stsfdg attribute 값을 설정한다.
+ * @param stsfdgAt the stsfdgAt to set
+ */
+ public void setStsfdgAt(String stsfdgAt) {
+ this.stsfdgAt = stsfdgAt;
+ }
+
+ /**
+ * cmmntyId attribute를 리턴한다.
+ * @return the cmmntyId
+ */
+ public String getCmmntyId() {
+ return cmmntyId;
+ }
+
+ /**
+ * cmmntyId attribute 값을 설정한다.
+ * @param cmmntyId the cmmntyId to set
+ */
+ public void setCmmntyId(String cmmntyId) {
+ this.cmmntyId = cmmntyId;
+ }
+
+ public String getBlogId() {
+ return blogId;
+ }
+
+ public void setBlogId(String blogId) {
+ this.blogId = blogId;
+ }
+
+ public String getBlogAt() {
+ return blogAt;
+ }
+
+ public void setBlogAt(String blogAt) {
+ this.blogAt = blogAt;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMaster.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovArticleService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovArticleService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovArticleService.java (revision 7)
@@ -0,0 +1,40 @@
+package egovframework.com.cop.bbs.service;
+
+import java.util.List;
+import java.util.Map;
+
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+
+public interface EgovArticleService {
+
+ Map<String, Object> selectArticleList(BoardVO boardVO);
+
+ BoardVO selectArticleDetail(BoardVO boardVO);
+
+ void insertArticle(Board board) throws FdlException;
+
+ void updateArticle(Board board);
+
+ void deleteArticle(Board board) throws Exception;
+
+ List<BoardVO> selectNoticeArticleList(BoardVO boardVO);
+
+ Map<String, Object> selectGuestArticleList(BoardVO vo);
+
+ /*
+ * 블로그 관련
+ */
+ BoardVO selectArticleCnOne(BoardVO boardVO);
+
+ List<BoardVO> selectBlogNmList(BoardVO boardVO);
+
+ Map<String, Object> selectBlogListManager(BoardVO boardVO);
+
+ List<BoardVO> selectArticleDetailDefault(BoardVO boardVO);
+
+ int selectArticleDetailDefaultCnt(BoardVO boardVO);
+
+ List<BoardVO> selectArticleDetailCn(BoardVO boardVO);
+
+ int selectLoginUser(BoardVO boardVO);
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/EgovArticleService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUserVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUserVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUserVO.java (revision 7)
@@ -0,0 +1,319 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+
+/**
+ * 블로그게시판 관리를 위한 VO 클래스
+ * @author 공통서비스개발팀 양희훈
+ * @since 2017.09.12
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ----------- -------- ---------------------------
+ * 2017.09.12 양희훈 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class BlogUserVO extends BlogUser implements Serializable {
+
+ /** 검색시작일 */
+ private String searchBgnDe = "";
+
+ /** 검색조건 */
+ private String searchCnd = "";
+
+ /** 검색종료일 */
+ private String searchEndDe = "";
+
+ /** 검색단어 */
+ private String searchWrd = "";
+
+ /** 정렬순서(DESC,ASC) */
+ private long sortOrdr = 0L;
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** 첫페이지 인덱스 */
+ private int firstIndex = 1;
+
+ /** 마지막페이지 인덱스 */
+ private int lastIndex = 1;
+
+ /** 페이지당 레코드 개수 */
+ private int recordCountPerPage = 10;
+
+ /** 레코드 번호 */
+ private int rowNo = 0;
+
+ /**
+ * searchBgnDe attribute를 리턴한다.
+ *
+ * @return the searchBgnDe
+ */
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ /**
+ * searchBgnDe attribute 값을 설정한다.
+ *
+ * @param searchBgnDe
+ * the searchBgnDe to set
+ */
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ /**
+ * searchCnd attribute를 리턴한다.
+ *
+ * @return the searchCnd
+ */
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ /**
+ * searchCnd attribute 값을 설정한다.
+ *
+ * @param searchCnd
+ * the searchCnd to set
+ */
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ /**
+ * searchEndDe attribute를 리턴한다.
+ *
+ * @return the searchEndDe
+ */
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ /**
+ * searchEndDe attribute 값을 설정한다.
+ *
+ * @param searchEndDe
+ * the searchEndDe to set
+ */
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ /**
+ * searchWrd attribute를 리턴한다.
+ *
+ * @return the searchWrd
+ */
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ /**
+ * searchWrd attribute 값을 설정한다.
+ *
+ * @param searchWrd
+ * the searchWrd to set
+ */
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ *
+ * @return the sortOrdr
+ */
+ public long getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ *
+ * @param sortOrdr
+ * the sortOrdr to set
+ */
+ public void setSortOrdr(long sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * searchUseYn attribute를 리턴한다.
+ *
+ * @return the searchUseYn
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ *
+ * @param searchUseYn
+ * the searchUseYn to set
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute를 리턴한다.
+ *
+ * @return the pageIndex
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ *
+ * @param pageIndex
+ * the pageIndex to set
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute를 리턴한다.
+ *
+ * @return the pageUnit
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ *
+ * @param pageUnit
+ * the pageUnit to set
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute를 리턴한다.
+ *
+ * @return the pageSize
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ *
+ * @param pageSize
+ * the pageSize to set
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute를 리턴한다.
+ *
+ * @return the firstIndex
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ *
+ * @param firstIndex
+ * the firstIndex to set
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute를 리턴한다.
+ *
+ * @return the lastIndex
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ *
+ * @param lastIndex
+ * the lastIndex to set
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute를 리턴한다.
+ *
+ * @return the recordCountPerPage
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ *
+ * @param recordCountPerPage
+ * the recordCountPerPage to set
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ /**
+ * rowNo attribute를 리턴한다.
+ *
+ * @return the rowNo
+ */
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ /**
+ * rowNo attribute 값을 설정한다.
+ *
+ * @param rowNo
+ * the rowNo to set
+ */
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/BlogUserVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/Board.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/Board.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/Board.java (revision 7)
@@ -0,0 +1,575 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import egovframework.com.cmm.CustomDefaultVO;
+
+/**
+ * @Class Name : Board.java
+ * @Description : 게시물에 대한 데이터 처리 모델
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.06 이삼섭 최초 생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 02. 13
+ * @version 1.0
+ * @see
+ *
+ */
+@SuppressWarnings("serial")
+public class Board extends CustomDefaultVO implements Serializable {
+
+ /**
+ * 게시물 첨부파일 아이디
+ */
+ private String atchFileId = "";
+ /**
+ * 게시판 아이디
+ */
+ private String bbsId = "";
+ /**
+ * 최초등록자 아이디
+ */
+ private String frstRegisterId = "";
+ /**
+ * 최초등록시점
+ */
+ private String frstRegisterPnttm = "";
+ /**
+ * 최종수정자 아이디
+ */
+ private String lastUpdusrId = "";
+ /**
+ * 최종수정시점
+ */
+ private String lastUpdusrPnttm = "";
+ /**
+ * 게시시작일
+ */
+ private String ntceBgnde = "";
+ /**
+ * 게시종료일
+ */
+ private String ntceEndde = "";
+ /**
+ * 게시자 아이디
+ */
+ private String ntcrId = "";
+ /**
+ * 게시자명
+ */
+ private String ntcrNm = "";
+ /**
+ * 게시물 내용
+ */
+ private String nttCn = "";
+ /**
+ * 게시물 아이디
+ */
+ private long nttId = 0L;
+ /**
+ * 게시물 번호
+ */
+ private long nttNo = 0L;
+ /**
+ * 게시물 제목
+ */
+ private String nttSj = "";
+ /**
+ * 부모글번호
+ */
+ private String parnts = "0";
+ /**
+ * 패스워드
+ */
+ private String password = "";
+ /**
+ * 조회수
+ */
+ private int inqireCo = 0;
+ /**
+ * 답장여부
+ */
+ private String replyAt = "";
+ /**
+ * 답장위치
+ */
+ private String replyLc = "0";
+ /**
+ * 정렬순서
+ */
+ private long sortOrdr = 0L;
+ /**
+ * 사용여부
+ */
+ private String useAt = "";
+ /**
+ * 게시 종료일
+ */
+ private String ntceEnddeView = "";
+ /**
+ * 게시 시작일
+ */
+ private String ntceBgndeView = "";
+ /**
+ * 공지사항 여부
+ */
+ private String noticeAt = "";
+ /**
+ * 비밀글 여부
+ */
+ private String secretAt = "";
+ /**
+ * 제목 Bold 여부
+ */
+ private String sjBoldAt = "";
+ /**
+ * 블로그 게시판 여부
+ */
+ private String blogAt = "";
+ /** 블로그 ID */
+ private String blogId = "";
+ /**
+ * 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;
+ }
+
+ /**
+ * bbsId attribute를 리턴한다.
+ * @return the bbsId
+ */
+ public String getBbsId() {
+ return bbsId;
+ }
+
+ /**
+ * bbsId attribute 값을 설정한다.
+ * @param bbsId the bbsId to set
+ */
+ public void setBbsId(String bbsId) {
+ this.bbsId = bbsId;
+ }
+
+ /**
+ * frstRegisterId attribute를 리턴한다.
+ * @return the frstRegisterId
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ * @param frstRegisterId the frstRegisterId to set
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * frstRegisterPnttm attribute를 리턴한다.
+ * @return the frstRegisterPnttm
+ */
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ /**
+ * frstRegisterPnttm attribute 값을 설정한다.
+ * @param frstRegisterPnttm the frstRegisterPnttm to set
+ */
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ /**
+ * lastUpdusrId attribute를 리턴한다.
+ * @return the lastUpdusrId
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ * @param lastUpdusrId the lastUpdusrId to set
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute를 리턴한다.
+ * @return the lastUpdusrPnttm
+ */
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute 값을 설정한다.
+ * @param lastUpdusrPnttm the lastUpdusrPnttm to set
+ */
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+
+ /**
+ * ntceBgnde attribute를 리턴한다.
+ * @return the ntceBgnde
+ */
+ public String getNtceBgnde() {
+ return ntceBgnde;
+ }
+
+ /**
+ * ntceBgnde attribute 값을 설정한다.
+ * @param ntceBgnde the ntceBgnde to set
+ */
+ public void setNtceBgnde(String ntceBgnde) {
+ this.ntceBgnde = ntceBgnde;
+ }
+
+ /**
+ * ntceEndde attribute를 리턴한다.
+ * @return the ntceEndde
+ */
+ public String getNtceEndde() {
+ return ntceEndde;
+ }
+
+ /**
+ * ntceEndde attribute 값을 설정한다.
+ * @param ntceEndde the ntceEndde to set
+ */
+ public void setNtceEndde(String ntceEndde) {
+ this.ntceEndde = ntceEndde;
+ }
+
+ /**
+ * ntcrId attribute를 리턴한다.
+ * @return the ntcrId
+ */
+ public String getNtcrId() {
+ return ntcrId;
+ }
+
+ /**
+ * ntcrId attribute 값을 설정한다.
+ * @param ntcrId the ntcrId to set
+ */
+ public void setNtcrId(String ntcrId) {
+ this.ntcrId = ntcrId;
+ }
+
+ /**
+ * ntcrNm attribute를 리턴한다.
+ * @return the ntcrNm
+ */
+ public String getNtcrNm() {
+ return ntcrNm;
+ }
+
+ /**
+ * ntcrNm attribute 값을 설정한다.
+ * @param ntcrNm the ntcrNm to set
+ */
+ public void setNtcrNm(String ntcrNm) {
+ this.ntcrNm = ntcrNm;
+ }
+
+ /**
+ * nttCn attribute를 리턴한다.
+ * @return the nttCn
+ */
+ public String getNttCn() {
+ return nttCn;
+ }
+
+ /**
+ * nttCn attribute 값을 설정한다.
+ * @param nttCn the nttCn to set
+ */
+ public void setNttCn(String nttCn) {
+ this.nttCn = nttCn;
+ }
+
+ /**
+ * nttId attribute를 리턴한다.
+ * @return the nttId
+ */
+ public long getNttId() {
+ return nttId;
+ }
+
+ /**
+ * nttId attribute 값을 설정한다.
+ * @param nttId the nttId to set
+ */
+ public void setNttId(long nttId) {
+ this.nttId = nttId;
+ }
+
+ /**
+ * nttNo attribute를 리턴한다.
+ * @return the nttNo
+ */
+ public long getNttNo() {
+ return nttNo;
+ }
+
+ /**
+ * nttNo attribute 값을 설정한다.
+ * @param nttNo the nttNo to set
+ */
+ public void setNttNo(long nttNo) {
+ this.nttNo = nttNo;
+ }
+
+ /**
+ * nttSj attribute를 리턴한다.
+ * @return the nttSj
+ */
+ public String getNttSj() {
+ return nttSj;
+ }
+
+ /**
+ * nttSj attribute 값을 설정한다.
+ * @param nttSj the nttSj to set
+ */
+ public void setNttSj(String nttSj) {
+ this.nttSj = nttSj;
+ }
+
+ /**
+ * parnts attribute를 리턴한다.
+ * @return the parnts
+ */
+ public String getParnts() {
+ return parnts;
+ }
+
+ /**
+ * parnts attribute 값을 설정한다.
+ * @param parnts the parnts to set
+ */
+ public void setParnts(String parnts) {
+ this.parnts = parnts;
+ }
+
+ /**
+ * password attribute를 리턴한다.
+ * @return the password
+ */
+ public String getPassword() {
+ return password;
+ }
+
+ /**
+ * password attribute 값을 설정한다.
+ * @param password the password to set
+ */
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ /**
+ * inqireCo attribute를 리턴한다.
+ * @return the inqireCo
+ */
+ public int getInqireCo() {
+ return inqireCo;
+ }
+
+ /**
+ * inqireCo attribute 값을 설정한다.
+ * @param inqireCo the inqireCo to set
+ */
+ public void setInqireCo(int inqireCo) {
+ this.inqireCo = inqireCo;
+ }
+
+ /**
+ * replyAt attribute를 리턴한다.
+ * @return the replyAt
+ */
+ public String getReplyAt() {
+ return replyAt;
+ }
+
+ /**
+ * replyAt attribute 값을 설정한다.
+ * @param replyAt the replyAt to set
+ */
+ public void setReplyAt(String replyAt) {
+ this.replyAt = replyAt;
+ }
+
+ /**
+ * replyLc attribute를 리턴한다.
+ * @return the replyLc
+ */
+ public String getReplyLc() {
+ return replyLc;
+ }
+
+ /**
+ * replyLc attribute 값을 설정한다.
+ * @param replyLc the replyLc to set
+ */
+ public void setReplyLc(String replyLc) {
+ this.replyLc = replyLc;
+ }
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ * @return the sortOrdr
+ */
+ public long getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ * @param sortOrdr the sortOrdr to set
+ */
+ public void setSortOrdr(long sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * useAt attribute를 리턴한다.
+ * @return the useAt
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ * @param useAt the useAt to set
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * ntceEnddeView attribute를 리턴한다.
+ * @return the ntceEnddeView
+ */
+ public String getNtceEnddeView() {
+ return ntceEnddeView;
+ }
+
+ /**
+ * ntceEnddeView attribute 값을 설정한다.
+ * @param ntceEnddeView the ntceEnddeView to set
+ */
+ public void setNtceEnddeView(String ntceEnddeView) {
+ this.ntceEnddeView = ntceEnddeView;
+ }
+
+ /**
+ * ntceBgndeView attribute를 리턴한다.
+ * @return the ntceBgndeView
+ */
+ public String getNtceBgndeView() {
+ return ntceBgndeView;
+ }
+
+ /**
+ * ntceBgndeView attribute 값을 설정한다.
+ * @param ntceBgndeView the ntceBgndeView to set
+ */
+ public void setNtceBgndeView(String ntceBgndeView) {
+ this.ntceBgndeView = ntceBgndeView;
+ }
+
+ /**
+ * noticeAt attribute를 리턴한다.
+ * @return the noticeAt
+ */
+ public String getNoticeAt() {
+ return noticeAt;
+ }
+
+ /**
+ * noticeAt attribute 값을 설정한다.
+ * @param noticeAt the noticeAt to set
+ */
+ public void setNoticeAt(String noticeAt) {
+ this.noticeAt = noticeAt;
+ }
+
+ /**
+ * secretAt attribute를 리턴한다.
+ * @return the secretAt
+ */
+ public String getSecretAt() {
+ return secretAt;
+ }
+
+ /**
+ * secretAt attribute 값을 설정한다.
+ * @param secretAt the secretAt to set
+ */
+ public void setSecretAt(String secretAt) {
+ this.secretAt = secretAt;
+ }
+
+ /**
+ * sjBoldAt attribute를 리턴한다.
+ * @return the sjBoldAt
+ */
+ public String getSjBoldAt() {
+ return sjBoldAt;
+ }
+
+ /**
+ * sjBoldAt attribute 값을 설정한다.
+ * @param sjBoldAt the sjBoldAt to set
+ */
+ public void setSjBoldAt(String sjBoldAt) {
+ this.sjBoldAt = sjBoldAt;
+ }
+
+ public String getBlogAt() {
+ return blogAt;
+ }
+
+ public void setBlogAt(String blogAt) {
+ this.blogAt = blogAt;
+ }
+
+ public String getBlogId() {
+ return blogId;
+ }
+
+ public void setBlogId(String blogId) {
+ this.blogId = blogId;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString(){
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/Board.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/SatisfactionVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/SatisfactionVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/SatisfactionVO.java (revision 7)
@@ -0,0 +1,219 @@
+package egovframework.com.cop.bbs.service;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 만족도조사 서비스를 위한 VO 클래스
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.06.29
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.06.29 한성곤 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class SatisfactionVO extends Satisfaction {
+ /** 정렬순서(DESC,ASC) */
+ private long sortOrdr = 0L;
+
+ /** 현재페이지 */
+ private int subPageIndex = 1;
+
+ /** 페이지갯수 */
+ private int subPageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int subPageSize = 10;
+
+ /** 첫페이지 인덱스 */
+ private int subFirstIndex = 1;
+
+ /** 마지막페이지 인덱스 */
+ private int subLastIndex = 1;
+
+ /** 페이지당 레코드 개수 */
+ private int subRecordCountPerPage = 10;
+
+ /** 레코드 번호 */
+ private int subRowNo = 0;
+
+ /** 호출 TYPE (head or body)*/
+ private String type = "";
+
+ /** 수정 처리 여부 */
+ private boolean isModified = false;
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ * @return the sortOrdr
+ */
+ public long getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ * @param sortOrdr the sortOrdr to set
+ */
+ public void setSortOrdr(long sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * subPageIndex attribute를 리턴한다.
+ * @return the subPageIndex
+ */
+ public int getSubPageIndex() {
+ return subPageIndex;
+ }
+
+ /**
+ * subPageIndex attribute 값을 설정한다.
+ * @param subPageIndex the subPageIndex to set
+ */
+ public void setSubPageIndex(int subPageIndex) {
+ this.subPageIndex = subPageIndex;
+ }
+
+ /**
+ * subPageUnit attribute를 리턴한다.
+ * @return the subPageUnit
+ */
+ public int getSubPageUnit() {
+ return subPageUnit;
+ }
+
+ /**
+ * subPageUnit attribute 값을 설정한다.
+ * @param subPageUnit the subPageUnit to set
+ */
+ public void setSubPageUnit(int subPageUnit) {
+ this.subPageUnit = subPageUnit;
+ }
+
+ /**
+ * subPageSize attribute를 리턴한다.
+ * @return the subPageSize
+ */
+ public int getSubPageSize() {
+ return subPageSize;
+ }
+
+ /**
+ * subPageSize attribute 값을 설정한다.
+ * @param subPageSize the subPageSize to set
+ */
+ public void setSubPageSize(int subPageSize) {
+ this.subPageSize = subPageSize;
+ }
+
+ /**
+ * subFirstIndex attribute를 리턴한다.
+ * @return the subFirstIndex
+ */
+ public int getSubFirstIndex() {
+ return subFirstIndex;
+ }
+
+ /**
+ * subFirstIndex attribute 값을 설정한다.
+ * @param subFirstIndex the subFirstIndex to set
+ */
+ public void setSubFirstIndex(int subFirstIndex) {
+ this.subFirstIndex = subFirstIndex;
+ }
+
+ /**
+ * subLastIndex attribute를 리턴한다.
+ * @return the subLastIndex
+ */
+ public int getSubLastIndex() {
+ return subLastIndex;
+ }
+
+ /**
+ * subLastIndex attribute 값을 설정한다.
+ * @param subLastIndex the subLastIndex to set
+ */
+ public void setSubLastIndex(int subLastIndex) {
+ this.subLastIndex = subLastIndex;
+ }
+
+ /**
+ * subRecordCountPerPage attribute를 리턴한다.
+ * @return the subRecordCountPerPage
+ */
+ public int getSubRecordCountPerPage() {
+ return subRecordCountPerPage;
+ }
+
+ /**
+ * subRecordCountPerPage attribute 값을 설정한다.
+ * @param subRecordCountPerPage the subRecordCountPerPage to set
+ */
+ public void setSubRecordCountPerPage(int subRecordCountPerPage) {
+ this.subRecordCountPerPage = subRecordCountPerPage;
+ }
+
+ /**
+ * subRowNo attribute를 리턴한다.
+ * @return the subRowNo
+ */
+ public int getSubRowNo() {
+ return subRowNo;
+ }
+
+ /**
+ * subRowNo attribute 값을 설정한다.
+ * @param subRowNo the subRowNo to set
+ */
+ public void setSubRowNo(int subRowNo) {
+ this.subRowNo = subRowNo;
+ }
+
+ /**
+ * type attribute를 리턴한다.
+ * @return the type
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * type attribute 값을 설정한다.
+ * @param type the type to set
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ /**
+ * isModified attribute를 리턴한다.
+ * @return the isModified
+ */
+ public boolean isModified() {
+ return isModified;
+ }
+
+ /**
+ * isModified attribute 값을 설정한다.
+ * @param isModified the isModified to set
+ */
+ public void setModified(boolean isModified) {
+ this.isModified = isModified;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/SatisfactionVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/Blog.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/Blog.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/Blog.java (revision 7)
@@ -0,0 +1,341 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 블로그게시판 관리를 위한 모델 클래스
+ * @author 공통서비스개발팀 양희훈
+ * @since 2017.09.12
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ----------- -------- ---------------------------
+ * 2017.09.12 양희훈 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class Blog implements Serializable {
+
+ /** 블로그 아이디 */
+ private String blogId = "";
+
+ /** 게시판 아이디 */
+ private String bbsId = "";
+
+ /** 블로그 소개 */
+ private String blogIntrcn = "";
+
+ /** 블로그 명 */
+ private String blogNm = "";
+
+ /** 최초등록자 아이디 */
+ private String frstRegisterId = "";
+
+ /** 최초등록시점 */
+ private String frstRegisterPnttm = "";
+
+ /** 최종수정자 아이디 */
+ private String lastUpdusrId = "";
+
+ /** 최종수정시점 */
+ private String lastUpdusrPnttm = "";
+
+ /** 등록구분코드 */
+ private String registSeCode = "";
+
+ /** 템플릿 아이디 */
+ private String tmplatId = "";
+
+ /** 템플릿 아이디 */
+ private String useAt = "";
+
+ /** 사용자 아이디 */
+ private String emplyrId = "";
+
+ /** 사용자명 */
+ private String userNm = "";
+
+ /** 템플릿 명 */
+ private String tmplatNm = "";
+
+ /** 블로그 게시판 여부 */
+ private String blogAt = "";
+
+ /**
+ * blogId attribute를 리턴한다.
+ *
+ * @return the blogId
+ */
+ public String getBlogId() {
+ return blogId;
+ }
+
+ /**
+ * blogId attribute 값을 설정한다.
+ *
+ * @param blogId
+ * the blogId to set
+ */
+ public void setBlogId(String blogId) {
+ this.blogId = blogId;
+ }
+
+ public String getBbsId() {
+ return bbsId;
+ }
+
+ public void setBbsId(String bbsId) {
+ this.bbsId = bbsId;
+ }
+
+ /**
+ * blogIntrcn attribute를 리턴한다.
+ *
+ * @return the blogIntrcn
+ */
+ public String getBlogIntrcn() {
+ return blogIntrcn;
+ }
+
+ /**
+ * blogIntrcn attribute 값을 설정한다.
+ *
+ * @param blogIntrcn
+ * the blogIntrcn to set
+ */
+ public void setBlogIntrcn(String blogIntrcn) {
+ this.blogIntrcn = blogIntrcn;
+ }
+
+ /**
+ * blogNm attribute를 리턴한다.
+ *
+ * @return the blogNm
+ */
+ public String getBlogNm() {
+ return blogNm;
+ }
+
+ /**
+ * blogNm attribute 값을 설정한다.
+ *
+ * @param blogNm
+ * the blogNm to set
+ */
+ public void setBlogNm(String blogNm) {
+ this.blogNm = blogNm;
+ }
+
+ /**
+ * frstRegisterId attribute를 리턴한다.
+ *
+ * @return the frstRegisterId
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ *
+ * @param frstRegisterId
+ * the frstRegisterId to set
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * frstRegisterPnttm attribute를 리턴한다.
+ *
+ * @return the frstRegisterPnttm
+ */
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ /**
+ * frstRegisterPnttm attribute 값을 설정한다.
+ *
+ * @param frstRegisterPnttm
+ * the frstRegisterPnttm to set
+ */
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ /**
+ * lastUpdusrId attribute를 리턴한다.
+ *
+ * @return the lastUpdusrId
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ *
+ * @param lastUpdusrId
+ * the lastUpdusrId to set
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute를 리턴한다.
+ *
+ * @return the lastUpdusrPnttm
+ */
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute 값을 설정한다.
+ *
+ * @param lastUpdusrPnttm
+ * the lastUpdusrPnttm to set
+ */
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+
+ /**
+ * registSeCode attribute를 리턴한다.
+ *
+ * @return the registSeCode
+ */
+ public String getRegistSeCode() {
+ return registSeCode;
+ }
+
+ /**
+ * registSeCode attribute 값을 설정한다.
+ *
+ * @param registSeCode
+ * the registSeCode to set
+ */
+ public void setRegistSeCode(String registSeCode) {
+ this.registSeCode = registSeCode;
+ }
+
+ /**
+ * tmplatId attribute를 리턴한다.
+ *
+ * @return the tmplatId
+ */
+ public String getTmplatId() {
+ return tmplatId;
+ }
+
+ /**
+ * tmplatId attribute 값을 설정한다.
+ *
+ * @param tmplatId
+ * the tmplatId to set
+ */
+ public void setTmplatId(String tmplatId) {
+ this.tmplatId = tmplatId;
+ }
+
+ /**
+ * useAt attribute를 리턴한다.
+ *
+ * @return the useAt
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ *
+ * @param useAt
+ * the useAt to set
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * emplyrId attribute를 리턴한다.
+ *
+ * @return the emplyrId
+ */
+ public String getEmplyrId() {
+ return emplyrId;
+ }
+
+ /**
+ * emplyrId attribute 값을 설정한다.
+ *
+ * @param emplyrId
+ * the emplyrId to set
+ */
+ public void setEmplyrId(String emplyrId) {
+ this.emplyrId = emplyrId;
+ }
+
+ /**
+ * userNm attribute를 리턴한다.
+ *
+ * @return the userNm
+ */
+ public String getUserNm() {
+ return userNm;
+ }
+
+ /**
+ * userNm attribute 값을 설정한다.
+ *
+ * @param userNm
+ * the userNm to set
+ */
+ public void setUserNm(String userNm) {
+ this.userNm = userNm;
+ }
+
+ /**
+ * tmplatNm attribute를 리턴한다.
+ *
+ * @return the tmplatNm
+ */
+ public String getTmplatNm() {
+ return tmplatNm;
+ }
+
+ /**
+ * tmplatNm attribute 값을 설정한다.
+ *
+ * @param tmplatNm
+ * the tmplatNm to set
+ */
+ public void setTmplatNm(String tmplatNm) {
+ this.tmplatNm = tmplatNm;
+ }
+
+ public String getBlogAt() {
+ return blogAt;
+ }
+
+ public void setBlogAt(String blogAt) {
+ this.blogAt = blogAt;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/Blog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java (revision 7)
@@ -0,0 +1,450 @@
+package egovframework.com.cop.bbs.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 게시판 속성 정보를 관리하기 위한 VO 클래스
+ * @author 공통서비스개발팀 이삼섭
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.3.12 이삼섭 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class BoardMasterVO extends BoardMaster implements Serializable {
+
+ /** 검색시작일 */
+ private String searchBgnDe = "";
+
+ /** 검색조건 */
+ private String searchCnd = "";
+
+ /** 검색종료일 */
+ private String searchEndDe = "";
+
+ /** 검색단어 */
+ private String searchWrd = "";
+
+ /** 정렬순서(DESC,ASC) */
+ private String sortOrdr = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /** rowNo */
+ private int rowNo = 0;
+
+ /** 최초 등록자명 */
+ private String frstRegisterNm = "";
+
+ /** 게시판유형 코드명 */
+ private String bbsTyCodeNm = "";
+
+ /** 템플릿 명 */
+ private String tmplatNm = "";
+
+ /** 최종 수정자명 */
+ private String lastUpdusrNm = "";
+
+ /** 권한지정 여부 */
+ private String authFlag = "";
+
+ /** 템플릿경로 */
+ private String tmplatCours = "";
+
+ /**
+ * searchBgnDe attribute를 리턴한다.
+ *
+ * @return the searchBgnDe
+ */
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ /**
+ * searchBgnDe attribute 값을 설정한다.
+ *
+ * @param searchBgnDe
+ * the searchBgnDe to set
+ */
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ /**
+ * searchCnd attribute를 리턴한다.
+ *
+ * @return the searchCnd
+ */
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ /**
+ * searchCnd attribute 값을 설정한다.
+ *
+ * @param searchCnd
+ * the searchCnd to set
+ */
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ /**
+ * searchEndDe attribute를 리턴한다.
+ *
+ * @return the searchEndDe
+ */
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ /**
+ * searchEndDe attribute 값을 설정한다.
+ *
+ * @param searchEndDe
+ * the searchEndDe to set
+ */
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ /**
+ * searchWrd attribute를 리턴한다.
+ *
+ * @return the searchWrd
+ */
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ /**
+ * searchWrd attribute 값을 설정한다.
+ *
+ * @param searchWrd
+ * the searchWrd to set
+ */
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ *
+ * @return the sortOrdr
+ */
+ public String getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ *
+ * @param sortOrdr
+ * the sortOrdr to set
+ */
+ public void setSortOrdr(String sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * searchUseYn attribute를 리턴한다.
+ *
+ * @return the searchUseYn
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ *
+ * @param searchUseYn
+ * the searchUseYn to set
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute를 리턴한다.
+ *
+ * @return the pageIndex
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ *
+ * @param pageIndex
+ * the pageIndex to set
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute를 리턴한다.
+ *
+ * @return the pageUnit
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ *
+ * @param pageUnit
+ * the pageUnit to set
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute를 리턴한다.
+ *
+ * @return the pageSize
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ *
+ * @param pageSize
+ * the pageSize to set
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute를 리턴한다.
+ *
+ * @return the firstIndex
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ *
+ * @param firstIndex
+ * the firstIndex to set
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute를 리턴한다.
+ *
+ * @return the lastIndex
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ *
+ * @param lastIndex
+ * the lastIndex to set
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute를 리턴한다.
+ *
+ * @return the recordCountPerPage
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ *
+ * @param recordCountPerPage
+ * the recordCountPerPage to set
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ /**
+ * rowNo attribute를 리턴한다.
+ *
+ * @return the rowNo
+ */
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ /**
+ * rowNo attribute 값을 설정한다.
+ *
+ * @param rowNo
+ * the rowNo to set
+ */
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+ /**
+ * frstRegisterNm attribute를 리턴한다.
+ *
+ * @return the frstRegisterNm
+ */
+ public String getFrstRegisterNm() {
+ return frstRegisterNm;
+ }
+
+ /**
+ * frstRegisterNm attribute 값을 설정한다.
+ *
+ * @param frstRegisterNm
+ * the frstRegisterNm to set
+ */
+ public void setFrstRegisterNm(String frstRegisterNm) {
+ this.frstRegisterNm = frstRegisterNm;
+ }
+
+ /**
+ * bbsTyCodeNm attribute를 리턴한다.
+ *
+ * @return the bbsTyCodeNm
+ */
+ public String getBbsTyCodeNm() {
+ return bbsTyCodeNm;
+ }
+
+ /**
+ * bbsTyCodeNm attribute 값을 설정한다.
+ *
+ * @param bbsTyCodeNm
+ * the bbsTyCodeNm to set
+ */
+ public void setBbsTyCodeNm(String bbsTyCodeNm) {
+ this.bbsTyCodeNm = bbsTyCodeNm;
+ }
+
+ /**
+ * tmplatNm attribute를 리턴한다.
+ *
+ * @return the tmplatNm
+ */
+ public String getTmplatNm() {
+ return tmplatNm;
+ }
+
+ /**
+ * tmplatNm attribute 값을 설정한다.
+ *
+ * @param tmplatNm
+ * the tmplatNm to set
+ */
+ public void setTmplatNm(String tmplatNm) {
+ this.tmplatNm = tmplatNm;
+ }
+
+ /**
+ * lastUpdusrNm attribute를 리턴한다.
+ *
+ * @return the lastUpdusrNm
+ */
+ public String getLastUpdusrNm() {
+ return lastUpdusrNm;
+ }
+
+ /**
+ * lastUpdusrNm attribute 값을 설정한다.
+ *
+ * @param lastUpdusrNm
+ * the lastUpdusrNm to set
+ */
+ public void setLastUpdusrNm(String lastUpdusrNm) {
+ this.lastUpdusrNm = lastUpdusrNm;
+ }
+
+ /**
+ * authFlag attribute를 리턴한다.
+ *
+ * @return the authFlag
+ */
+ public String getAuthFlag() {
+ return authFlag;
+ }
+
+ /**
+ * authFlag attribute 값을 설정한다.
+ *
+ * @param authFlag
+ * the authFlag to set
+ */
+ public void setAuthFlag(String authFlag) {
+ this.authFlag = authFlag;
+ }
+
+ /**
+ * tmplatCours attribute를 리턴한다.
+ *
+ * @return the tmplatCours
+ */
+ public String getTmplatCours() {
+ return tmplatCours;
+ }
+
+ /**
+ * tmplatCours attribute 값을 설정한다.
+ *
+ * @param tmplatCours
+ * the tmplatCours to set
+ */
+ public void setTmplatCours(String tmplatCours) {
+ this.tmplatCours = tmplatCours;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/bbs/service/BoardMasterVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/cmt/web/EgovArticleCommentController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/cmt/web/EgovArticleCommentController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/cmt/web/EgovArticleCommentController.java (revision 7)
@@ -0,0 +1,298 @@
+package egovframework.com.cop.cmt.web;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.cop.cmt.service.Comment;
+import egovframework.com.cop.cmt.service.CommentVO;
+import egovframework.com.cop.cmt.service.EgovArticleCommentService;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 댓글 관리를 위한 컨트롤러 클래스
+ * @author 공통서비스개발팀 신용호
+ * @since 2016.07.22
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2016.07.22 신용호 최초 생성
+ * 2018.06.27 신용호 댓글 등록후 처리 예외 수정
+ * </pre>
+ */
+
+@Controller
+public class EgovArticleCommentController {
+
+ @Resource(name = "EgovArticleCommentService")
+ protected EgovArticleCommentService egovArticleCommentService;
+
+ @Resource(name="propertiesService")
+ protected EgovPropertyService propertyService;
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ //protected Logger log = Logger.getLogger(this.getClass());
+
+ /**
+ * 댓글관리 목록 조회를 제공한다.
+ *
+ * @param boardVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/cmt/selectArticleCommentList.do")
+ public String selectArticleCommentList(@ModelAttribute("searchVO") CommentVO commentVO, ModelMap model) throws Exception {
+
+ CommentVO articleCommentVO = new CommentVO();
+
+ // 수정 처리된 후 댓글 등록 화면으로 처리되기 위한 구현
+ if (commentVO.isModified()) {
+ commentVO.setCommentNo("");
+ commentVO.setCommentCn("");
+ }
+
+ // 수정을 위한 처리
+ if (!commentVO.getCommentNo().equals("")) {
+ return "forward:/cop/cmt/updateArticleCommentView.do";
+ }
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ // KISA 보안취약점 조치 (2018-12-10, 신용호)
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ model.addAttribute("sessionUniqId", user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+
+ commentVO.setWrterNm(user == null ? "" : EgovStringUtil.isNullToString(user.getName()));
+
+// commentVO.setSubPageUnit(propertyService.getInt("pageUnit"));
+// commentVO.setSubPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(commentVO.getSubPageIndex());
+ paginationInfo.setRecordCountPerPage(commentVO.getSubPageUnit());
+ paginationInfo.setPageSize(commentVO.getSubPageSize());
+
+ commentVO.setSubFirstIndex(paginationInfo.getFirstRecordIndex());
+ commentVO.setSubLastIndex(paginationInfo.getLastRecordIndex());
+ commentVO.setSubRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleCommentService.selectArticleCommentList(commentVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("type", "body"); // 댓글 페이지 body import용
+
+ model.addAttribute("articleCommentVO", articleCommentVO); // validator 용도
+
+ commentVO.setCommentCn(""); // 등록 후 댓글 내용 처리
+
+ return "egovframework/com/cop/cmt/EgovArticleCommentList";
+ }
+
+
+ /**
+ * 댓글을 등록한다.
+ *
+ * @param commentVO
+ * @param comment
+ * @param bindingResult
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/cmt/insertArticleComment.do")
+ public String insertArticleComment(@ModelAttribute("searchVO") CommentVO commentVO, @ModelAttribute("comment") Comment comment,
+ BindingResult bindingResult, ModelMap model, @RequestParam HashMap<String, String> map) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ beanValidator.validate(comment, bindingResult);
+ if (bindingResult.hasErrors()) {
+ model.addAttribute("msg", "댓글내용은 필수 입력값입니다.");
+
+ return "forward:/cop/bbs/selectArticleDetail.do";
+ }
+
+ if (isAuthenticated) {
+ comment.setFrstRegisterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ comment.setWrterId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ comment.setWrterNm(user == null ? "" : EgovStringUtil.isNullToString(user.getName()));
+
+
+ egovArticleCommentService.insertArticleComment(comment);
+
+ commentVO.setCommentCn("");
+ commentVO.setCommentNo("");
+ }
+
+ String chkBlog = map.get("blogAt");
+
+ if("Y".equals(chkBlog)){
+ return "forward:/cop/bbs/selectArticleBlogList.do";
+ }else{
+ return "forward:/cop/bbs/selectArticleDetail.do";
+ }
+
+ }
+
+
+ /**
+ * 댓글을 삭제한다.
+ *
+ * @param commentVO
+ * @param comment
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/cmt/deleteArticleComment.do")
+ public String deleteArticleComment(@ModelAttribute("searchVO") CommentVO commentVO, @ModelAttribute("comment") Comment comment,
+ ModelMap model, @RequestParam HashMap<String, String> map) throws Exception {
+ @SuppressWarnings("unused")
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if (isAuthenticated) {
+ egovArticleCommentService.deleteArticleComment(commentVO);
+ }
+
+ commentVO.setCommentCn("");
+ commentVO.setCommentNo("");
+
+ String chkBlog = map.get("blogAt");
+
+ if("Y".equals(chkBlog)){
+ return "forward:/cop/bbs/selectArticleBlogList.do";
+ }else{
+ return "forward:/cop/bbs/selectArticleDetail.do";
+ }
+ }
+
+
+ /**
+ * 댓글 수정 페이지로 이동한다.
+ *
+ * @param commentVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/cmt/updateArticleCommentView.do")
+ public String updateArticleCommentView(@ModelAttribute("searchVO") CommentVO commentVO, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ //KISA 보안취약점 조치 (2018-12-10, 신용호)
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ CommentVO articleCommentVO = new CommentVO();
+
+ commentVO.setWrterNm(user == null ? "" : EgovStringUtil.isNullToString(user.getName()));
+
+ commentVO.setSubPageUnit(propertyService.getInt("pageUnit"));
+ commentVO.setSubPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(commentVO.getSubPageIndex());
+ paginationInfo.setRecordCountPerPage(commentVO.getSubPageUnit());
+ paginationInfo.setPageSize(commentVO.getSubPageSize());
+
+ commentVO.setSubFirstIndex(paginationInfo.getFirstRecordIndex());
+ commentVO.setSubLastIndex(paginationInfo.getLastRecordIndex());
+ commentVO.setSubRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = egovArticleCommentService.selectArticleCommentList(commentVO);
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("type", "body"); // body import
+
+ articleCommentVO = egovArticleCommentService.selectArticleCommentDetail(commentVO);
+
+ model.addAttribute("articleCommentVO", articleCommentVO);
+
+
+ return "egovframework/com/cop/cmt/EgovArticleCommentList";
+ }
+
+
+ /**
+ * 댓글을 수정한다.
+ *
+ * @param commentVO
+ * @param comment
+ * @param bindingResult
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/cop/cmt/updateArticleComment.do")
+ public String updateArticleComment(@ModelAttribute("searchVO") CommentVO commentVO, @ModelAttribute("comment") Comment comment,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ beanValidator.validate(comment, bindingResult);
+ if (bindingResult.hasErrors()) {
+ model.addAttribute("msg", "내용은 필수 입력 값입니다.");
+
+ return "forward:/cop/bbs/selectArticleDetail.do";
+ }
+
+ if (isAuthenticated) {
+ comment.setLastUpdusrId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+
+ egovArticleCommentService.updateArticleComment(comment);
+
+ commentVO.setCommentCn("");
+ commentVO.setCommentNo("");
+ }
+
+ return "forward:/cop/bbs/selectArticleDetail.do";
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/cmt/web/EgovArticleCommentController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentDAO.java (revision 7)
@@ -0,0 +1,38 @@
+package egovframework.com.cop.cmt.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.cop.cmt.service.Comment;
+import egovframework.com.cop.cmt.service.CommentVO;
+
+@Repository("EgovArticleCommentDAO")
+public class EgovArticleCommentDAO extends EgovComAbstractDAO{
+
+ public List<?> selectArticleCommentList(CommentVO commentVO) {
+ return list("ArticleComment.selectArticleCommentList", commentVO);
+ }
+
+ public int selectArticleCommentListCnt(CommentVO commentVO) {
+ return (Integer)selectOne("ArticleComment.selectArticleCommentListCnt", commentVO);
+ }
+
+ public void insertArticleComment(Comment comment) {
+ insert("ArticleComment.insertArticleComment", comment);
+ }
+
+ public void deleteArticleComment(CommentVO commentVO) {
+ update("ArticleComment.deleteArticleComment", commentVO);
+ }
+
+ public CommentVO selectArticleCommentDetail(CommentVO commentVO) {
+ return (CommentVO) selectOne("ArticleComment.selectArticleCommentDetail", commentVO);
+ }
+
+ public void updateArticleComment(Comment comment) {
+ update("ArticleComment.updateArticleComment", comment);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentServiceImpl.java (revision 7)
@@ -0,0 +1,95 @@
+package egovframework.com.cop.cmt.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cop.bbs.service.BoardMaster;
+import egovframework.com.cop.bbs.service.BoardMasterVO;
+import egovframework.com.cop.bbs.service.impl.BBSAddedOptionsDAO;
+import egovframework.com.cop.cmt.service.Comment;
+import egovframework.com.cop.cmt.service.CommentVO;
+import egovframework.com.cop.cmt.service.EgovArticleCommentService;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+@Service("EgovArticleCommentService")
+public class EgovArticleCommentServiceImpl extends EgovAbstractServiceImpl implements EgovArticleCommentService {
+
+ @Resource(name = "BBSAddedOptionsDAO")
+ private BBSAddedOptionsDAO addedOptionsDAO;
+
+ @Resource(name = "EgovArticleCommentDAO")
+ private EgovArticleCommentDAO egovArticleCommentDao;
+
+ @Resource(name = "egovAnswerNoGnrService")
+ private EgovIdGnrService egovAnswerNoGnrService;
+
+ /**
+ * 댓글 사용 가능 여부를 확인한다.
+ */
+ public boolean canUseComment(String bbsId) throws Exception {
+ //String flag = EgovProperties.getProperty("Globals.addedOptions");
+ //if (flag != null && flag.trim().equalsIgnoreCase("true")) {//2011.09.15
+ BoardMaster vo = new BoardMaster();
+
+ vo.setBbsId(bbsId);
+
+ BoardMasterVO options = addedOptionsDAO.selectAddedOptionsInf(vo);
+
+ if (options == null) {
+ return false;
+ }
+
+ if (options.getCommentAt().equals("Y")) {
+ return true;
+ }
+ //}
+
+ return false;
+ }
+
+ @Override
+ public Map<String, Object> selectArticleCommentList(CommentVO commentVO) {
+ List<?> result = egovArticleCommentDao.selectArticleCommentList(commentVO);
+ int cnt = egovArticleCommentDao.selectArticleCommentListCnt(commentVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+
+ @Override
+ public void insertArticleComment(Comment comment) throws FdlException {
+ comment.setCommentNo(egovAnswerNoGnrService.getNextLongId() + "");//2011.10.18
+ egovArticleCommentDao.insertArticleComment(comment);
+ }
+
+
+ @Override
+ public void deleteArticleComment(CommentVO commentVO) {
+ egovArticleCommentDao.deleteArticleComment(commentVO);
+ }
+
+
+ @Override
+ public CommentVO selectArticleCommentDetail(CommentVO commentVO) {
+ return egovArticleCommentDao.selectArticleCommentDetail(commentVO);
+ }
+
+
+ @Override
+ public void updateArticleComment(Comment comment) {
+ egovArticleCommentDao.updateArticleComment(comment);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/cmt/service/impl/EgovArticleCommentServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/cmt/service/Comment.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/cmt/service/Comment.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/cmt/service/Comment.java (revision 7)
@@ -0,0 +1,297 @@
+package egovframework.com.cop.cmt.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 댓글관리 서비스 데이터 처리 모델
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.06.29
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.06.29 한성곤 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class Comment implements Serializable {
+ /** 댓글번호 */
+ private String commentNo = "";
+
+ /** 게시판 ID */
+ private String bbsId = "";
+
+ /** 게시물 번호 */
+ private long nttId = 0L;
+
+ /** 작성자 ID */
+ private String wrterId = "";
+
+ /** 작성자명 */
+ private String wrterNm = "";
+
+ /** 패스워드 */
+ private String commentPassword = "";
+
+ /** 댓글 내용 */
+ private String commentCn = "";
+
+ /** 사용 여부 */
+ private String useAt = "";
+
+ /** 최초등록자 아이디 */
+ private String frstRegisterId = "";
+
+ /** 최초 등록자명 */
+ private String frstRegisterNm = "";
+
+ /** 최초등록시점 */
+ private String frstRegisterPnttm = "";
+
+ /** 최종수정자 아이디 */
+ private String lastUpdusrId = "";
+
+ /** 최종수정시점 */
+ private String lastUpdusrPnttm = "";
+
+ /** 확인 패스워드 */
+ private String confirmPassword = "";
+
+ /**
+ * commentNo attribute를 리턴한다.
+ * @return the commentNo
+ */
+ public String getCommentNo() {
+ return commentNo;
+ }
+
+ /**
+ * commentNo attribute 값을 설정한다.
+ * @param commentNo the commentNo to set
+ */
+ public void setCommentNo(String commentNo) {
+ this.commentNo = commentNo;
+ }
+
+ /**
+ * bbsId attribute를 리턴한다.
+ * @return the bbsId
+ */
+ public String getBbsId() {
+ return bbsId;
+ }
+
+ /**
+ * bbsId attribute 값을 설정한다.
+ * @param bbsId the bbsId to set
+ */
+ public void setBbsId(String bbsId) {
+ this.bbsId = bbsId;
+ }
+
+ /**
+ * nttId attribute를 리턴한다.
+ * @return the nttId
+ */
+ public long getNttId() {
+ return nttId;
+ }
+
+ /**
+ * nttId attribute 값을 설정한다.
+ * @param nttId the nttId to set
+ */
+ public void setNttId(long nttId) {
+ this.nttId = nttId;
+ }
+
+ /**
+ * wrterId attribute를 리턴한다.
+ * @return the wrterId
+ */
+ public String getWrterId() {
+ return wrterId;
+ }
+
+ /**
+ * wrterId attribute 값을 설정한다.
+ * @param wrterId the wrterId to set
+ */
+ public void setWrterId(String wrterId) {
+ this.wrterId = wrterId;
+ }
+
+ /**
+ * wrterNm attribute를 리턴한다.
+ * @return the wrterNm
+ */
+ public String getWrterNm() {
+ return wrterNm;
+ }
+
+ /**
+ * wrterNm attribute 값을 설정한다.
+ * @param wrterNm the wrterNm to set
+ */
+ public void setWrterNm(String wrterNm) {
+ this.wrterNm = wrterNm;
+ }
+
+ /**
+ * commentPassword attribute를 리턴한다.
+ * @return the commentPassword
+ */
+ public String getCommentPassword() {
+ return commentPassword;
+ }
+
+ /**
+ * commentPassword attribute 값을 설정한다.
+ * @param commentPassword the commentPassword to set
+ */
+ public void setCommentPassword(String commentPassword) {
+ this.commentPassword = commentPassword;
+ }
+
+ /**
+ * commentCn attribute를 리턴한다.
+ * @return the commentCn
+ */
+ public String getCommentCn() {
+ return commentCn;
+ }
+
+ /**
+ * commentCn attribute 값을 설정한다.
+ * @param commentCn the commentCn to set
+ */
+ public void setCommentCn(String commentCn) {
+ this.commentCn = commentCn;
+ }
+
+ /**
+ * useAt attribute를 리턴한다.
+ * @return the useAt
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ * @param useAt the useAt to set
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * frstRegisterId attribute를 리턴한다.
+ * @return the frstRegisterId
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ * @param frstRegisterId the frstRegisterId to set
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * frstRegisterPnttm attribute를 리턴한다.
+ * @return the frstRegisterPnttm
+ */
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ /**
+ * frstRegisterPnttm attribute 값을 설정한다.
+ * @param frstRegisterPnttm the frstRegisterPnttm to set
+ */
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ /**
+ * lastUpdusrId attribute를 리턴한다.
+ * @return the lastUpdusrId
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ * @param lastUpdusrId the lastUpdusrId to set
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute를 리턴한다.
+ * @return the lastUpdusrPnttm
+ */
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ /**
+ * lastUpdusrPnttm attribute 값을 설정한다.
+ * @param lastUpdusrPnttm the lastUpdusrPnttm to set
+ */
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+
+ /**
+ * frstRegisterNm attribute를 리턴한다.
+ * @return the frstRegisterNm
+ */
+ public String getFrstRegisterNm() {
+ return frstRegisterNm;
+ }
+
+ /**
+ * frstRegisterNm attribute 값을 설정한다.
+ * @param frstRegisterNm the frstRegisterNm to set
+ */
+ public void setFrstRegisterNm(String frstRegisterNm) {
+ this.frstRegisterNm = frstRegisterNm;
+ }
+
+ /**
+ * confirmPassword attribute를 리턴한다.
+ * @return the confirmPassword
+ */
+ public String getConfirmPassword() {
+ return confirmPassword;
+ }
+
+ /**
+ * confirmPassword attribute 값을 설정한다.
+ * @param confirmPassword the confirmPassword to set
+ */
+ public void setConfirmPassword(String confirmPassword) {
+ this.confirmPassword = confirmPassword;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/cmt/service/Comment.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/cmt/service/CommentVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/cmt/service/CommentVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/cmt/service/CommentVO.java (revision 7)
@@ -0,0 +1,219 @@
+package egovframework.com.cop.cmt.service;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 댓글관리 서비스를 위한 VO 클래스
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.06.29
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.06.29 한성곤 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class CommentVO extends Comment {
+ /** 정렬순서(DESC,ASC) */
+ private long sortOrdr = 0L;
+
+ /** 현재페이지 */
+ private int subPageIndex = 1;
+
+ /** 페이지갯수 */
+ private int subPageUnit = 5;
+
+ /** 페이지사이즈 */
+ private int subPageSize = 5;
+
+ /** 첫페이지 인덱스 */
+ private int subFirstIndex = 1;
+
+ /** 마지막페이지 인덱스 */
+ private int subLastIndex = 1;
+
+ /** 페이지당 레코드 개수 */
+ private int subRecordCountPerPage = 5;
+
+ /** 레코드 번호 */
+ private int subRowNo = 0;
+
+ /** 호출 TYPE (head or body)*/
+ private String type = "";
+
+ /** 수정 처리 여부 */
+ private boolean isModified = false;
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ * @return the sortOrdr
+ */
+ public long getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ * @param sortOrdr the sortOrdr to set
+ */
+ public void setSortOrdr(long sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * subPageIndex attribute를 리턴한다.
+ * @return the subPageIndex
+ */
+ public int getSubPageIndex() {
+ return subPageIndex;
+ }
+
+ /**
+ * subPageIndex attribute 값을 설정한다.
+ * @param subPageIndex the subPageIndex to set
+ */
+ public void setSubPageIndex(int subPageIndex) {
+ this.subPageIndex = subPageIndex;
+ }
+
+ /**
+ * subPageUnit attribute를 리턴한다.
+ * @return the subPageUnit
+ */
+ public int getSubPageUnit() {
+ return subPageUnit;
+ }
+
+ /**
+ * subPageUnit attribute 값을 설정한다.
+ * @param subPageUnit the subPageUnit to set
+ */
+ public void setSubPageUnit(int subPageUnit) {
+ this.subPageUnit = subPageUnit;
+ }
+
+ /**
+ * subPageSize attribute를 리턴한다.
+ * @return the subPageSize
+ */
+ public int getSubPageSize() {
+ return subPageSize;
+ }
+
+ /**
+ * subPageSize attribute 값을 설정한다.
+ * @param subPageSize the subPageSize to set
+ */
+ public void setSubPageSize(int subPageSize) {
+ this.subPageSize = subPageSize;
+ }
+
+ /**
+ * subFirstIndex attribute를 리턴한다.
+ * @return the subFirstIndex
+ */
+ public int getSubFirstIndex() {
+ return subFirstIndex;
+ }
+
+ /**
+ * subFirstIndex attribute 값을 설정한다.
+ * @param subFirstIndex the subFirstIndex to set
+ */
+ public void setSubFirstIndex(int subFirstIndex) {
+ this.subFirstIndex = subFirstIndex;
+ }
+
+ /**
+ * subLastIndex attribute를 리턴한다.
+ * @return the subLastIndex
+ */
+ public int getSubLastIndex() {
+ return subLastIndex;
+ }
+
+ /**
+ * subLastIndex attribute 값을 설정한다.
+ * @param subLastIndex the subLastIndex to set
+ */
+ public void setSubLastIndex(int subLastIndex) {
+ this.subLastIndex = subLastIndex;
+ }
+
+ /**
+ * subRecordCountPerPage attribute를 리턴한다.
+ * @return the subRecordCountPerPage
+ */
+ public int getSubRecordCountPerPage() {
+ return subRecordCountPerPage;
+ }
+
+ /**
+ * subRecordCountPerPage attribute 값을 설정한다.
+ * @param subRecordCountPerPage the subRecordCountPerPage to set
+ */
+ public void setSubRecordCountPerPage(int subRecordCountPerPage) {
+ this.subRecordCountPerPage = subRecordCountPerPage;
+ }
+
+ /**
+ * subRowNo attribute를 리턴한다.
+ * @return the subRowNo
+ */
+ public int getSubRowNo() {
+ return subRowNo;
+ }
+
+ /**
+ * subRowNo attribute 값을 설정한다.
+ * @param subRowNo the subRowNo to set
+ */
+ public void setSubRowNo(int subRowNo) {
+ this.subRowNo = subRowNo;
+ }
+
+ /**
+ * type attribute를 리턴한다.
+ * @return the type
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * type attribute 값을 설정한다.
+ * @param type the type to set
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ /**
+ * isModified attribute를 리턴한다.
+ * @return the isModified
+ */
+ public boolean isModified() {
+ return isModified;
+ }
+
+ /**
+ * isModified attribute 값을 설정한다.
+ * @param isModified the isModified to set
+ */
+ public void setModified(boolean isModified) {
+ this.isModified = isModified;
+ }
+
+ /**
+ * toString 메소드를 대치한다.
+ */
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/cmt/service/CommentVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/cop/cmt/service/EgovArticleCommentService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cop/cmt/service/EgovArticleCommentService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cop/cmt/service/EgovArticleCommentService.java (revision 7)
@@ -0,0 +1,21 @@
+package egovframework.com.cop.cmt.service;
+
+import java.util.Map;
+
+import egovframework.rte.fdl.cmmn.exception.FdlException;
+
+public interface EgovArticleCommentService {
+
+ public boolean canUseComment(String bbsId) throws Exception;
+
+ Map<String, Object> selectArticleCommentList(CommentVO commentVO);
+
+ void insertArticleComment(Comment comment) throws FdlException;
+
+ void deleteArticleComment(CommentVO commentVO);
+
+ CommentVO selectArticleCommentDetail(CommentVO commentVO);
+
+ void updateArticleComment(Comment comment);
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/cop/cmt/service/EgovArticleCommentService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovDeptManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/web/EgovDeptManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/web/EgovDeptManageController.java (revision 7)
@@ -0,0 +1,199 @@
+package egovframework.com.uss.umt.web;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.uss.umt.service.DeptManageVO;
+import egovframework.com.uss.umt.service.EgovDeptManageService;
+
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+/**
+ * 부서관련 처리를 비지니스 클래스로 전달하고 처리된결과를 해당 웹 화면으로 전달하는 Controller를 정의한다
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.00.00
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.01 lee.m.j 최초 생성
+ * 2015.06.16 조정국 서비스 화면 접근시 조회결과를 표시하도록 수정
+ * </pre>
+ */
+
+@Controller
+public class EgovDeptManageController {
+
+ @Resource(name = "egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "egovDeptManageService")
+ private EgovDeptManageService egovDeptManageService;
+
+ /** Message ID Generation */
+ @Resource(name = "egovDeptManageIdGnrService")
+ private EgovIdGnrService egovDeptManageIdGnrService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 부서 목록화면 이동
+ * @return String
+ * @exception Exception
+ */
+ @IncludedInfo(name = "부서관리", order = 461, gid = 50)
+ @RequestMapping("/uss/umt/dpt/selectDeptManageListView.do")
+ public String selectDeptManageListView() throws Exception {
+
+ return "forward:/uss/umt/dpt/selectDeptManageList.do";
+// return "egovframework/com/uss/umt/EgovDeptManageList";
+ }
+
+ /**
+ * 부서를 관리하기 위해 등록된 부서목록을 조회한다.
+ * @param bannerVO - 배너 VO
+ * @return String - 리턴 URL
+ * @throws Exception
+ */
+
+ @RequestMapping(value = "/uss/umt/dpt/selectDeptManageList.do")
+ public String selectDeptManageList(@ModelAttribute("deptManageVO") DeptManageVO deptManageVO, ModelMap model) throws Exception {
+
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(deptManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(deptManageVO.getPageUnit());
+ paginationInfo.setPageSize(deptManageVO.getPageSize());
+
+ deptManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ deptManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ deptManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ model.addAttribute("deptManageList", egovDeptManageService.selectDeptManageList(deptManageVO));
+
+ int totCnt = egovDeptManageService.selectDeptManageListTotCnt(deptManageVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+ return "egovframework/com/uss/umt/EgovDeptManageList";
+ }
+
+ /**
+ * 등록된 부서의 상세정보를 조회한다.
+ * @param bannerVO - 부서 Vo
+ * @return String - 리턴 Url
+ */
+
+ @RequestMapping(value = "/uss/umt/dpt/getDeptManage.do")
+ public String selectDeptManage(@RequestParam("orgnztId") String orgnztId, @ModelAttribute("deptManageVO") DeptManageVO deptManageVO, ModelMap model) throws Exception {
+
+ deptManageVO.setOrgnztId(orgnztId);
+
+ model.addAttribute("deptManage", egovDeptManageService.selectDeptManage(deptManageVO));
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+ return "egovframework/com/uss/umt/EgovDeptManageUpdt";
+ }
+
+ /**
+ * 부서등록 화면으로 이동한다.
+ * @param banner - 부서 model
+ * @return String - 리턴 Url
+ */
+ @RequestMapping(value = "/uss/umt/dpt/addViewDeptManage.do")
+ public String insertViewDeptManage(@ModelAttribute("deptManageVO") DeptManageVO deptManageVO, ModelMap model) throws Exception {
+
+ model.addAttribute("deptManage", deptManageVO);
+ return "egovframework/com/uss/umt/EgovDeptManageInsert";
+ }
+
+ /**
+ * 부서정보를 신규로 등록한다.
+ * @param banner - 부서 model
+ * @return String - 리턴 Url
+ */
+ @RequestMapping(value = "/uss/umt/dpt/addDeptManage.do")
+ public String insertDeptManage(@ModelAttribute("deptManageVO") DeptManageVO deptManageVO, BindingResult bindingResult, ModelMap model) throws Exception {
+
+ beanValidator.validate(deptManageVO, bindingResult); //validation 수행
+
+ deptManageVO.setOrgnztId(egovDeptManageIdGnrService.getNextStringId());
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/uss/umt/EgovDeptManageInsert";
+ } else {
+ egovDeptManageService.insertDeptManage(deptManageVO);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.insert"));
+ return "forward:/uss/umt/dpt/selectDeptManageList.do";
+ }
+ }
+
+ /**
+ * 기 등록된 부서정보를 수정한다.
+ * @param banner - 부서 model
+ * @return String - 리턴 Url
+ */
+ @RequestMapping(value = "/uss/umt/dpt/updtDeptManage.do")
+ public String updateDeptManage(@ModelAttribute("deptManageVO") DeptManageVO deptManageVO, BindingResult bindingResult, ModelMap model) throws Exception {
+ beanValidator.validate(deptManageVO, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/uss/umt/EgovDeptManageUpdt";
+ } else {
+ egovDeptManageService.updateDeptManage(deptManageVO);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.insert"));
+ return "forward:/uss/umt/dpt/selectDeptManageList.do";
+ }
+ }
+
+ /**
+ * 기 등록된 부서정보를 삭제한다.
+ * @param banner Banner
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uss/umt/dpt/removeDeptManage.do")
+ public String deleteDeptManage(@ModelAttribute("deptManageVO") DeptManageVO deptManageVO, Model model) throws Exception {
+
+ egovDeptManageService.deleteDeptManage(deptManageVO);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/uss/umt/dpt/selectDeptManageList.do";
+ }
+
+ /**
+ * 기 등록된 부서정보목록을 일괄 삭제한다.
+ * @param banners String
+ * @param banner Banner
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uss/umt/dpt/removeDeptManageList.do")
+ public String deleteDeptManageList(@RequestParam("deptManages") String deptManages, @ModelAttribute("deptManageVO") DeptManageVO deptManageVO, ModelMap model) throws Exception {
+
+ String[] strDeptManages = deptManages.split(";");
+ for (int i = 0; i < strDeptManages.length; i++) {
+ deptManageVO.setOrgnztId(strDeptManages[i]);
+ egovDeptManageService.deleteDeptManage(deptManageVO);
+ }
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/uss/umt/dpt/selectDeptManageList.do";
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovDeptManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovMberManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/web/EgovMberManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/web/EgovMberManageController.java (revision 7)
@@ -0,0 +1,528 @@
+package egovframework.com.uss.umt.web;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.uss.umt.service.EgovMberManageService;
+import egovframework.com.uss.umt.service.MberManageVO;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.com.utl.sim.service.EgovFileScrty;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 일반회원관련 요청을 비지니스 클래스로 전달하고 처리된결과를 해당 웹 화면으로 전달하는 Controller를 정의한다
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2011.08.26 정진오 IncludedInfo annotation 추가
+ * 2014.12.08 이기하 암호화방식 변경(EgovFileScrty.encryptPassword)
+ * 2015.06.16 조정국 수정시 유효성체크 후 에러발생 시 목록으로 이동하여 에러메시지 표시
+ * 2015.06.19 조정국 미인증 사용자에 대한 보안처리 기준 수정 (!isAuthenticated)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+
+@Controller
+public class EgovMberManageController {
+
+ /** mberManageService */
+ @Resource(name = "mberManageService")
+ private EgovMberManageService mberManageService;
+
+ /** cmmUseService */
+ @Resource(name = "EgovCmmUseService")
+ private EgovCmmUseService cmmUseService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** DefaultBeanValidator beanValidator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 일반회원목록을 조회한다. (pageing)
+ * @param userSearchVO 검색조건정보
+ * @param model 화면모델
+ * @return uss/umt/EgovMberManage
+ * @throws Exception
+ */
+ @IncludedInfo(name = "일반회원관리", order = 470, gid = 50)
+ @RequestMapping(value = "/uss/umt/EgovMberManage.do")
+ public String selectMberList(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+// return "redirect:/egovDevIndex.jsp";
+// return "/EgovContent.do";
+ return "index";
+ }
+
+ /** EgovPropertyService */
+ userSearchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ userSearchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
+ paginationInfo.setPageSize(userSearchVO.getPageSize());
+
+ userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> mberList = mberManageService.selectMberList(userSearchVO);
+ model.addAttribute("resultList", mberList);
+
+ int totCnt = mberManageService.selectMberListTotCnt(userSearchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ //일반회원 상태코드를 코드정보로부터 조회
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+ vo.setCodeId("COM013");
+ List<?> mberSttus_result = cmmUseService.selectCmmCodeDetail(vo);
+ model.addAttribute("entrprsMberSttus_result", mberSttus_result);//기업회원상태코드목록
+
+ return "egovframework/com/uss/umt/EgovMberManage";
+ }
+
+ /**
+ * 일반회원등록화면으로 이동한다.
+ * @param userSearchVO 검색조건정보
+ * @param mberManageVO 일반회원초기화정보
+ * @param model 화면모델
+ * @return uss/umt/EgovMberInsert
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberInsertView.do")
+ public String insertMberView(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("mberManageVO") MberManageVO mberManageVO, Model model)
+ throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //패스워드힌트목록을 코드정보로부터 조회
+ vo.setCodeId("COM022");
+ List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+ //성별구분코드를 코드정보로부터 조회
+ vo.setCodeId("COM014");
+ List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //사용자상태코드를 코드정보로부터 조회
+ vo.setCodeId("COM013");
+ List<?> mberSttus_result = cmmUseService.selectCmmCodeDetail(vo);
+ //그룹정보를 조회 - GROUP_ID정보
+ vo.setTableNm("COMTNORGNZTINFO");
+ List<?> groupId_result = cmmUseService.selectGroupIdDetail(vo);
+
+ model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+ model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+ model.addAttribute("mberSttus_result", mberSttus_result); //사용자상태코드목록
+ model.addAttribute("groupId_result", groupId_result); //그룹정보 목록
+
+ return "egovframework/com/uss/umt/EgovMberInsert";
+ }
+
+ /**
+ * 일반회원등록처리후 목록화면으로 이동한다.
+ * @param mberManageVO 일반회원등록정보
+ * @param bindingResult 입력값검증용 bindingResult
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovMberManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberInsert.do")
+ public String insertMber(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, BindingResult bindingResult, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ beanValidator.validate(mberManageVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //패스워드힌트목록을 코드정보로부터 조회
+ vo.setCodeId("COM022");
+ List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+ //성별구분코드를 코드정보로부터 조회
+ vo.setCodeId("COM014");
+ List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //사용자상태코드를 코드정보로부터 조회
+ vo.setCodeId("COM013");
+ List<?> mberSttus_result = cmmUseService.selectCmmCodeDetail(vo);
+ //그룹정보를 조회 - GROUP_ID정보
+ vo.setTableNm("COMTNORGNZTINFO");
+ List<?> groupId_result = cmmUseService.selectGroupIdDetail(vo);
+
+ model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+ model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+ model.addAttribute("mberSttus_result", mberSttus_result); //사용자상태코드목록
+ model.addAttribute("groupId_result", groupId_result); //그룹정보 목록
+
+ return "egovframework/com/uss/umt/EgovMberInsert";
+ } else {
+ if ("".equals(mberManageVO.getGroupId())) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ mberManageVO.setGroupId(null);
+ }
+ mberManageService.insertMber(mberManageVO);
+ //Exception 없이 진행시 등록 성공메시지
+ model.addAttribute("resultMsg", "success.common.insert");
+ }
+ return "forward:/uss/umt/EgovMberManage.do";
+ }
+
+ /**
+ * 일반회원정보 수정을 위해 일반회원정보를 상세조회한다.
+ * @param mberId 상세조회대상 일반회원아이디
+ * @param userSearchVO 검색조건
+ * @param model 화면모델
+ * @return uss/umt/EgovMberSelectUpdt
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberSelectUpdtView.do")
+ public String updateMberView(@RequestParam("selectedId") String mberId, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //패스워드힌트목록을 코드정보로부터 조회
+ vo.setCodeId("COM022");
+ List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+
+ //성별구분코드를 코드정보로부터 조회
+ vo.setCodeId("COM014");
+ List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+
+ //사용자상태코드를 코드정보로부터 조회
+ vo.setCodeId("COM013");
+ List<?> mberSttus_result = cmmUseService.selectCmmCodeDetail(vo);
+
+ //그룹정보를 조회 - GROUP_ID정보
+ vo.setTableNm("COMTNORGNZTINFO");
+ List<?> groupId_result = cmmUseService.selectGroupIdDetail(vo);
+
+ model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+ model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+ model.addAttribute("mberSttus_result", mberSttus_result); //사용자상태코드목록
+ model.addAttribute("groupId_result", groupId_result); //그룹정보 목록
+
+ MberManageVO mberManageVO = mberManageService.selectMber(mberId);
+ model.addAttribute("mberManageVO", mberManageVO);
+ model.addAttribute("userSearchVO", userSearchVO);
+
+ return "egovframework/com/uss/umt/EgovMberSelectUpdt";
+ }
+
+ /**
+ * 로그인인증제한 해제
+ * @param mberManageVO 일반회원등록정보
+ * @param model 화면모델
+ * @return uss/umt/EgovMberSelectUpdtView.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberLockIncorrect.do")
+ public String updateLockIncorrect(MberManageVO mberManageVO, Model model) throws Exception {
+
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ mberManageService.updateLockIncorrect(mberManageVO);
+
+ return "forward:/uss/umt/EgovMberSelectUpdtView.do";
+ }
+
+ /**
+ * 일반회원정보 수정후 목록조회 화면으로 이동한다.
+ * @param mberManageVO 일반회원수정정보
+ * @param bindingResult 입력값검증용 bindingResult
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovMberManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberSelectUpdt.do")
+ public String updateMber(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, BindingResult bindingResult, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ beanValidator.validate(mberManageVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+ model.addAttribute("resultMsg", bindingResult.getAllErrors().get(0).getDefaultMessage());
+ return "forward:/uss/umt/EgovMberManage.do";
+ } else {
+ if ("".equals(mberManageVO.getGroupId())) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ mberManageVO.setGroupId(null);
+ }
+ mberManageService.updateMber(mberManageVO);
+ //Exception 없이 진행시 수정성공메시지
+ model.addAttribute("resultMsg", "success.common.update");
+ return "forward:/uss/umt/EgovMberManage.do";
+ }
+ }
+
+ /**
+ * 일반회원정보삭제후 목록조회 화면으로 이동한다.
+ * @param checkedIdForDel 삭제대상 아이디 정보
+ * @param userSearchVO 검색조건정보
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovMberManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberDelete.do")
+ public String deleteMber(@RequestParam("checkedIdForDel") String checkedIdForDel, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ mberManageService.deleteMber(checkedIdForDel);
+ //Exception 없이 진행시 삭제성공메시지
+ model.addAttribute("resultMsg", "success.common.delete");
+ return "forward:/uss/umt/EgovMberManage.do";
+ }
+
+ // 탈퇴 처리 기능에 대한 예시
+ @RequestMapping("/uss/umt/EgovMberWithdraw.do")
+ public String withdrawMber(Model model) throws Exception {
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ String returnPage = "/"; // 탈퇴 처리 후 화면 지정
+
+ if (!isAuthenticated) {
+ model.addAttribute("resultMsg", "fail.common.delete");
+
+ return "redirect:" + returnPage;
+ }
+
+ mberManageService.deleteMber(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ //Exception 없이 진행시 삭제성공메시지
+ model.addAttribute("resultMsg", "success.common.delete");
+
+ return "redirect:" + returnPage;
+ }
+
+ /**
+ * 일반회원가입신청 등록화면으로 이동한다.
+ * @param userSearchVO 검색조건
+ * @param mberManageVO 일반회원가입신청정보
+ * @param commandMap 파라메터전달용 commandMap
+ * @param model 화면모델
+ * @return uss/umt/EgovMberSbscrb
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberSbscrbView.do")
+ public String sbscrbMberView(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("mberManageVO") MberManageVO mberManageVO,
+ @RequestParam Map<String, Object> commandMap, Model model) throws Exception {
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //패스워드힌트목록을 코드정보로부터 조회
+ vo.setCodeId("COM022");
+ List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+ //성별구분코드를 코드정보로부터 조회
+ vo.setCodeId("COM014");
+ List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+
+ model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+ model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+ if (!"".equals(commandMap.get("realname"))) {
+ model.addAttribute("mberNm", commandMap.get("realname")); //실명인증된 이름 - 주민번호 인증
+ model.addAttribute("ihidnum", commandMap.get("ihidnum")); //실명인증된 주민등록번호 - 주민번호 인증
+ }
+ if (!"".equals(commandMap.get("realName"))) {
+ model.addAttribute("mberNm", commandMap.get("realName")); //실명인증된 이름 - ipin인증
+ }
+
+ mberManageVO.setMberSttus("DEFAULT");
+
+ return "egovframework/com/uss/umt/EgovMberSbscrb";
+ }
+
+ /**
+ * 일반회원가입신청등록처리후로그인화면으로 이동한다.
+ * @param mberManageVO 일반회원가입신청정보
+ * @return forward:/uat/uia/egovLoginUsr.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovMberSbscrb.do")
+ public String sbscrbMber(@ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
+
+ //가입상태 초기화
+ mberManageVO.setMberSttus("A");
+ //그룹정보 초기화
+ //mberManageVO.setGroupId("1");
+ //일반회원가입신청 등록시 일반회원등록기능을 사용하여 등록한다.
+ mberManageService.insertMber(mberManageVO);
+ return "forward:/uat/uia/egovLoginUsr.do";
+ }
+
+ /**
+ * 일반회원 약관확인
+ * @param model 화면모델
+ * @return uss/umt/EgovStplatCnfirm
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovStplatCnfirmMber.do")
+ public String sbscrbEntrprsMber(Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ //Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ //if (!isAuthenticated) {
+ // return "index";
+ //}
+
+ //일반회원용 약관 아이디 설정
+ String stplatId = "STPLAT_0000000000001";
+ //회원가입유형 설정-일반회원
+ String sbscrbTy = "USR01";
+ //약관정보 조회
+ List<?> stplatList = mberManageService.selectStplat(stplatId);
+ model.addAttribute("stplatList", stplatList); //약관정보 포함
+ model.addAttribute("sbscrbTy", sbscrbTy); //회원가입유형 포함
+
+ return "egovframework/com/uss/umt/EgovStplatCnfirm";
+ }
+
+ /**
+ * @param model 화면모델
+ * @param commandMap 파라메터전달용 commandMap
+ * @param userSearchVO 검색조건
+ * @param mberManageVO 일반회원수정정보(비밀번호)
+ * @return uss/umt/EgovMberPasswordUpdt
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovMberPasswordUpdt.do")
+ public String updatePassword(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
+ @ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ String oldPassword = (String) commandMap.get("oldPassword");
+ String newPassword = (String) commandMap.get("newPassword");
+ String newPassword2 = (String) commandMap.get("newPassword2");
+ String uniqId = (String) commandMap.get("uniqId");
+
+ boolean isCorrectPassword = false;
+ MberManageVO resultVO = new MberManageVO();
+ mberManageVO.setPassword(newPassword);
+ mberManageVO.setOldPassword(oldPassword);
+ mberManageVO.setUniqId(uniqId);
+
+ String resultMsg = "";
+ resultVO = mberManageService.selectPassword(mberManageVO);
+ //패스워드 암호화
+ String encryptPass = EgovFileScrty.encryptPassword(oldPassword, mberManageVO.getMberId());
+ if (encryptPass.equals(resultVO.getPassword())) {
+ if (newPassword.equals(newPassword2)) {
+ isCorrectPassword = true;
+ } else {
+ isCorrectPassword = false;
+ resultMsg = "fail.user.passwordUpdate2";
+ }
+ } else {
+ isCorrectPassword = false;
+ resultMsg = "fail.user.passwordUpdate1";
+ }
+
+ if (isCorrectPassword) {
+ mberManageVO.setPassword(EgovFileScrty.encryptPassword(newPassword, mberManageVO.getMberId()));
+ mberManageService.updatePassword(mberManageVO);
+ model.addAttribute("mberManageVO", mberManageVO);
+ resultMsg = "success.common.update";
+ } else {
+ model.addAttribute("mberManageVO", mberManageVO);
+ }
+ model.addAttribute("userSearchVO", userSearchVO);
+ model.addAttribute("resultMsg", resultMsg);
+
+ return "egovframework/com/uss/umt/EgovMberPasswordUpdt";
+ }
+
+ /**
+ * 일반회원 암호 수정 화면 이동
+ * @param model 화면모델
+ * @param commandMap 파라메터전달용 commandMap
+ * @param userSearchVO 검색조건
+ * @param mberManageVO 일반회원수정정보(비밀번호)
+ * @return uss/umt/EgovMberPasswordUpdt
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovMberPasswordUpdtView.do")
+ public String updatePasswordView(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
+ @ModelAttribute("mberManageVO") MberManageVO mberManageVO) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ String userTyForPassword = (String) commandMap.get("userTyForPassword");
+ mberManageVO.setUserTy(userTyForPassword);
+
+ model.addAttribute("userSearchVO", userSearchVO);
+ model.addAttribute("mberManageVO", mberManageVO);
+
+ return "egovframework/com/uss/umt/EgovMberPasswordUpdt";
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovMberManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovUserManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/web/EgovUserManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/web/EgovUserManageController.java (revision 7)
@@ -0,0 +1,496 @@
+package egovframework.com.uss.umt.web;
+
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.uss.umt.service.EgovUserManageService;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+import egovframework.com.uss.umt.service.UserManageVO;
+import egovframework.com.utl.sim.service.EgovFileScrty;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+/**
+ * 업무사용자관련 요청을 비지니스 클래스로 전달하고 처리된결과를 해당 웹 화면으로 전달하는 Controller를 정의한다
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2011.08.26 정진오 IncludedInfo annotation 추가
+ * 2014.12.08 이기하 암호화방식 변경(EgovFileScrty.encryptPassword)
+ * 2015.06.16 조정국 수정시 유효성체크 후 에러발생 시 목록으로 이동하여 에러메시지 표시
+ * 2015.06.19 조정국 미인증 사용자에 대한 보안처리 기준 수정 (!isAuthenticated)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+
+@Controller
+public class EgovUserManageController {
+
+ /** userManageService */
+ @Resource(name = "userManageService")
+ private EgovUserManageService userManageService;
+
+ /** cmmUseService */
+ @Resource(name = "EgovCmmUseService")
+ private EgovCmmUseService cmmUseService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** DefaultBeanValidator beanValidator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 사용자목록을 조회한다. (pageing)
+ * @param userSearchVO 검색조건정보
+ * @param model 화면모델
+ * @return cmm/uss/umt/EgovUserManage
+ * @throws Exception
+ */
+ @IncludedInfo(name = "업무사용자관리", order = 460, gid = 50)
+ @RequestMapping(value = "/uss/umt/EgovUserManage.do")
+ public String selectUserList(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ /** EgovPropertyService */
+ userSearchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ userSearchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
+ paginationInfo.setPageSize(userSearchVO.getPageSize());
+
+ userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> userList = userManageService.selectUserList(userSearchVO);
+ model.addAttribute("resultList", userList);
+
+ int totCnt = userManageService.selectUserListTotCnt(userSearchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ //사용자상태코드를 코드정보로부터 조회
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+ vo.setCodeId("COM013");
+ List<?> emplyrSttusCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ model.addAttribute("emplyrSttusCode_result", emplyrSttusCode_result);//사용자상태코드목록
+
+ return "egovframework/com/uss/umt/EgovUserManage";
+ }
+
+ /**
+ * 사용자등록화면으로 이동한다.
+ * @param userSearchVO 검색조건정보
+ * @param userManageVO 사용자초기화정보
+ * @param model 화면모델
+ * @return cmm/uss/umt/EgovUserInsert
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovUserInsertView.do")
+ public String insertUserView(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("userManageVO") UserManageVO userManageVO, Model model)
+ throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //패스워드힌트목록을 코드정보로부터 조회
+ vo.setCodeId("COM022");
+ List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+ //성별구분코드를 코드정보로부터 조회
+ vo.setCodeId("COM014");
+ List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //사용자상태코드를 코드정보로부터 조회
+ vo.setCodeId("COM013");
+ List<?> emplyrSttusCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //소속기관코드를 코드정보로부터 조회 - COM025
+ vo.setCodeId("COM025");
+ List<?> insttCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //조직정보를 조회 - ORGNZT_ID정보
+ vo.setTableNm("COMTNORGNZTINFO");
+ List<?> orgnztId_result = cmmUseService.selectOgrnztIdDetail(vo);
+ //그룹정보를 조회 - GROUP_ID정보
+ vo.setTableNm("COMTNORGNZTINFO");
+ List<?> groupId_result = cmmUseService.selectGroupIdDetail(vo);
+
+ model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+ model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+ model.addAttribute("emplyrSttusCode_result", emplyrSttusCode_result);//사용자상태코드목록
+ model.addAttribute("insttCode_result", insttCode_result); //소속기관코드목록
+ model.addAttribute("orgnztId_result", orgnztId_result); //조직정보 목록
+ model.addAttribute("groupId_result", groupId_result); //그룹정보 목록
+
+ return "egovframework/com/uss/umt/EgovUserInsert";
+ }
+
+ /**
+ * 사용자등록처리후 목록화면으로 이동한다.
+ * @param userManageVO 사용자등록정보
+ * @param bindingResult 입력값검증용 bindingResult
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovUserManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovUserInsert.do")
+ public String insertUser(@ModelAttribute("userManageVO") UserManageVO userManageVO, BindingResult bindingResult, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ beanValidator.validate(userManageVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/uss/umt/EgovUserInsert";
+ } else {
+ if ("".equals(userManageVO.getOrgnztId())) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ userManageVO.setOrgnztId(null);
+ }
+ if ("".equals(userManageVO.getGroupId())) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ userManageVO.setGroupId(null);
+ }
+ userManageService.insertUser(userManageVO);
+ //Exception 없이 진행시 등록성공메시지
+ model.addAttribute("resultMsg", "success.common.insert");
+ }
+ return "forward:/uss/umt/EgovUserManage.do";
+ }
+
+ /**
+ * 사용자정보 수정을 위해 사용자정보를 상세조회한다.
+ * @param uniqId 상세조회대상 사용자아이디
+ * @param userSearchVO 검색조건
+ * @param model 화면모델
+ * @return uss/umt/EgovUserSelectUpdt
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovUserSelectUpdtView.do")
+ public String updateUserView(@RequestParam("selectedId") String uniqId, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //패스워드힌트목록을 코드정보로부터 조회
+ vo.setCodeId("COM022");
+ List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+ //성별구분코드를 코드정보로부터 조회
+ vo.setCodeId("COM014");
+ List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //사용자상태코드를 코드정보로부터 조회
+ vo.setCodeId("COM013");
+ List<?> emplyrSttusCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //소속기관코드를 코드정보로부터 조회 - COM025
+ vo.setCodeId("COM025");
+ List<?> insttCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //조직정보를 조회 - ORGNZT_ID정보
+ vo.setTableNm("COMTNORGNZTINFO");
+ List<?> orgnztId_result = cmmUseService.selectOgrnztIdDetail(vo);
+ //그룹정보를 조회 - GROUP_ID정보
+ vo.setTableNm("COMTNORGNZTINFO");
+ List<?> groupId_result = cmmUseService.selectGroupIdDetail(vo);
+
+ model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+ model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+ model.addAttribute("emplyrSttusCode_result", emplyrSttusCode_result);//사용자상태코드목록
+ model.addAttribute("insttCode_result", insttCode_result); //소속기관코드목록
+ model.addAttribute("orgnztId_result", orgnztId_result); //조직정보 목록
+ model.addAttribute("groupId_result", groupId_result); //그룹정보 목록
+
+ UserManageVO userManageVO = new UserManageVO();
+ userManageVO = userManageService.selectUser(uniqId);
+ model.addAttribute("userSearchVO", userSearchVO);
+ model.addAttribute("userManageVO", userManageVO);
+
+ return "egovframework/com/uss/umt/EgovUserSelectUpdt";
+ }
+
+ /**
+ * 로그인인증제한 해제
+ * @param userManageVO 사용자정보
+ * @param model 화면모델
+ * @return uss/umt/EgovUserSelectUpdtView.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovUserLockIncorrect.do")
+ public String updateLockIncorrect(UserManageVO userManageVO, Model model)
+ throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ userManageService.updateLockIncorrect(userManageVO);
+
+ return "forward:/uss/umt/EgovUserSelectUpdtView.do";
+ }
+
+ /**
+ * 사용자정보 수정후 목록조회 화면으로 이동한다.
+ * @param userManageVO 사용자수정정보
+ * @param bindingResult 입력값검증용 bindingResult
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovUserManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovUserSelectUpdt.do")
+ public String updateUser(@ModelAttribute("userManageVO") UserManageVO userManageVO, BindingResult bindingResult, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ beanValidator.validate(userManageVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+ model.addAttribute("resultMsg", bindingResult.getAllErrors().get(0).getDefaultMessage());
+ return "forward:/uss/umt/EgovUserManage.do";
+ } else {
+ //업무사용자 수정시 히스토리 정보를 등록한다.
+ userManageService.insertUserHistory(userManageVO);
+ if ("".equals(userManageVO.getOrgnztId())) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ userManageVO.setOrgnztId(null);
+ }
+ if ("".equals(userManageVO.getGroupId())) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ userManageVO.setGroupId(null);
+ }
+ userManageService.updateUser(userManageVO);
+ //Exception 없이 진행시 수정성공메시지
+ model.addAttribute("resultMsg", "success.common.update");
+ return "forward:/uss/umt/EgovUserManage.do";
+ }
+ }
+
+ /**
+ * 사용자정보삭제후 목록조회 화면으로 이동한다.
+ * @param checkedIdForDel 삭제대상아이디 정보
+ * @param userSearchVO 검색조건
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovUserManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovUserDelete.do")
+ public String deleteUser(@RequestParam("checkedIdForDel") String checkedIdForDel, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ userManageService.deleteUser(checkedIdForDel);
+ //Exception 없이 진행시 등록성공메시지
+ model.addAttribute("resultMsg", "success.common.delete");
+ return "forward:/uss/umt/EgovUserManage.do";
+ }
+
+ /**
+ * 입력한 사용자아이디의 중복확인화면 이동
+ * @param model 화면모델
+ * @return uss/umt/EgovIdDplctCnfirm
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovIdDplctCnfirmView.do")
+ public String checkIdDplct(ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ model.addAttribute("checkId", "");
+ model.addAttribute("usedCnt", "-1");
+ return "egovframework/com/uss/umt/EgovIdDplctCnfirm";
+ }
+
+ /**
+ * 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인
+ * @param commandMap 파라메터전달용 commandMap
+ * @param model 화면모델
+ * @return uss/umt/EgovIdDplctCnfirm
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovIdDplctCnfirm.do")
+ public String checkIdDplct(@RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ String checkId = (String) commandMap.get("checkId");
+ checkId = new String(checkId.getBytes("ISO-8859-1"), "UTF-8");
+
+ if (checkId == null || checkId.equals(""))
+ return "forward:/uss/umt/EgovIdDplctCnfirmView.do";
+
+ int usedCnt = userManageService.checkIdDplct(checkId);
+ model.addAttribute("usedCnt", usedCnt);
+ model.addAttribute("checkId", checkId);
+
+ return "egovframework/com/uss/umt/EgovIdDplctCnfirm";
+ }
+
+
+ /**
+ * 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인
+ * @param commandMap 파라메터전달용 commandMap
+ * @param model 화면모델
+ * @return uss/umt/EgovIdDplctCnfirm
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovIdDplctCnfirmAjax.do")
+ public ModelAndView checkIdDplctAjax(@RequestParam Map<String, Object> commandMap) throws Exception {
+
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("jsonView");
+
+ String checkId = (String) commandMap.get("checkId");
+ //checkId = new String(checkId.getBytes("ISO-8859-1"), "UTF-8");
+
+ int usedCnt = userManageService.checkIdDplct(checkId);
+ modelAndView.addObject("usedCnt", usedCnt);
+ modelAndView.addObject("checkId", checkId);
+
+ return modelAndView;
+ }
+
+ /**
+ * 업무사용자 암호 수정처리 후 화면 이동
+ * @param model 화면모델
+ * @param commandMap 파라메터전달용 commandMap
+ * @param userSearchVO 검색조 건
+ * @param userManageVO 사용자수정정보(비밀번호)
+ * @return uss/umt/EgovUserPasswordUpdt
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovUserPasswordUpdt.do")
+ public String updatePassword(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
+ @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ String oldPassword = (String) commandMap.get("oldPassword");
+ String newPassword = (String) commandMap.get("newPassword");
+ String newPassword2 = (String) commandMap.get("newPassword2");
+ String uniqId = (String) commandMap.get("uniqId");
+
+ boolean isCorrectPassword = false;
+ UserManageVO resultVO = new UserManageVO();
+ userManageVO.setPassword(newPassword);
+ userManageVO.setOldPassword(oldPassword);
+ userManageVO.setUniqId(uniqId);
+
+ String resultMsg = "";
+ resultVO = userManageService.selectPassword(userManageVO);
+ //패스워드 암호화
+ String encryptPass = EgovFileScrty.encryptPassword(oldPassword, userManageVO.getEmplyrId());
+ if (encryptPass.equals(resultVO.getPassword())) {
+ if (newPassword.equals(newPassword2)) {
+ isCorrectPassword = true;
+ } else {
+ isCorrectPassword = false;
+ resultMsg = "fail.user.passwordUpdate2";
+ }
+ } else {
+ isCorrectPassword = false;
+ resultMsg = "fail.user.passwordUpdate1";
+ }
+
+ if (isCorrectPassword) {
+ userManageVO.setPassword(EgovFileScrty.encryptPassword(newPassword, userManageVO.getEmplyrId()));
+ userManageService.updatePassword(userManageVO);
+ model.addAttribute("userManageVO", userManageVO);
+ resultMsg = "success.common.update";
+ } else {
+ model.addAttribute("userManageVO", userManageVO);
+ }
+ model.addAttribute("userSearchVO", userSearchVO);
+ model.addAttribute("resultMsg", resultMsg);
+
+ return "egovframework/com/uss/umt/EgovUserPasswordUpdt";
+ }
+
+ /**
+ * 업무사용자 암호 수정 화면 이동
+ * @param model 화면모델
+ * @param commandMap 파라메터전달용 commandMap
+ * @param userSearchVO 검색조건
+ * @param userManageVO 사용자수정정보(비밀번호)
+ * @return uss/umt/EgovUserPasswordUpdt
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovUserPasswordUpdtView.do")
+ public String updatePasswordView(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
+ @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ String userTyForPassword = (String) commandMap.get("userTyForPassword");
+ userManageVO.setUserTy(userTyForPassword);
+
+ model.addAttribute("userManageVO", userManageVO);
+ model.addAttribute("userSearchVO", userSearchVO);
+ return "egovframework/com/uss/umt/EgovUserPasswordUpdt";
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovUserManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovEntrprsManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/web/EgovEntrprsManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/web/EgovEntrprsManageController.java (revision 7)
@@ -0,0 +1,541 @@
+package egovframework.com.uss.umt.web;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.uss.umt.service.EgovEntrprsManageService;
+import egovframework.com.uss.umt.service.EntrprsManageVO;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.com.utl.sim.service.EgovFileScrty;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 기업회원관련 요청을 비지니스 클래스로 전달하고 처리된결과를 해당 웹 화면으로 전달하는 Controller를 정의한다
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2011.08.26 정진오 IncludedInfo annotation 추가
+ * 2014.12.08 이기하 암호화방식 변경(EgovFileScrty.encryptPassword)
+ * 2015.06.16 조정국 수정시 유효성체크 후 에러발생 시 목록으로 이동하여 에러메시지 표시
+ * 2015.06.19 조정국 미인증 사용자에 대한 보안처리 기준 수정 (!isAuthenticated)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ * 2020.07.18 윤주호 암호 설정 규칙 강화 및 버그 수정
+ * </pre>
+ */
+
+@Controller
+public class EgovEntrprsManageController {
+
+ /** entrprsManageService */
+ @Resource(name = "entrprsManageService")
+ private EgovEntrprsManageService entrprsManageService;
+
+ /** cmmUseService */
+ @Resource(name = "EgovCmmUseService")
+ private EgovCmmUseService cmmUseService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** DefaultBeanValidator beanValidator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /** 비밀번호 힌트 조회 목록*/
+ @ModelAttribute("passwordHint_result")
+ private List<?> getPasswordHintResult(ComDefaultCodeVO vo) throws Exception{
+ vo.setCodeId("COM022");
+ return cmmUseService.selectCmmCodeDetail(vo);
+ }
+
+ /** 성별 조회 목록 */
+ @ModelAttribute("sexdstnCode_result")
+ private List<?> getSexdstnCode_result(ComDefaultCodeVO vo) throws Exception{
+ vo.setCodeId("COM014");
+ return cmmUseService.selectCmmCodeDetail(vo);
+ }
+
+ /** 사용자 상태 조회 목록 */
+ @ModelAttribute("entrprsMberSttus_result")
+ private List<?> getEntrprsMberSttus_result(ComDefaultCodeVO vo) throws Exception{
+ vo.setCodeId("COM013");
+ return cmmUseService.selectCmmCodeDetail(vo);
+ }
+
+ /** 그룹 정보 조회 목록 */
+ @ModelAttribute("groupId_result")
+ private List<?> getGroupId_result(ComDefaultCodeVO vo) throws Exception{
+ vo.setTableNm("COMTNORGNZTINFO");
+ return cmmUseService.selectGroupIdDetail(vo);
+ }
+
+ /** 기업 구분 조회 목록 */
+ @ModelAttribute("entrprsSeCode_result")
+ private List<?> getEntrprsSeCode_result(ComDefaultCodeVO vo) throws Exception{
+ vo.setCodeId("COM026");
+ return cmmUseService.selectCmmCodeDetail(vo);
+ }
+
+ /** 업종 구분 조회 목록 */
+ @ModelAttribute("indutyCode_result")
+ private List<?> getIndutyCode_result(ComDefaultCodeVO vo) throws Exception{
+ vo.setCodeId("COM027");
+ return cmmUseService.selectCmmCodeDetail(vo);
+ }
+
+
+ /**
+ * 기업회원 등록화면으로 이동한다.
+ * @param userSearchVO 검색조건정보
+ * @param entrprsManageVO 기업회원 초기화정보
+ * @param model 화면모델
+ * @return uss/umt/EgovEntrprsMberInsert
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberInsertView.do")
+ public String insertEntrprsMberView(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("entrprsManageVO") EntrprsManageVO entrprsManageVO, Model model)
+ throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+ //패스워드힌트목록을 코드정보로부터 조회
+// vo.setCodeId("COM022");
+// List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+ //성별구분코드를 코드정보로부터 조회
+// vo.setCodeId("COM014");
+// List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //사용자상태코드를 코드정보로부터 조회
+// vo.setCodeId("COM013");
+// List<?> entrprsMberSttus_result = cmmUseService.selectCmmCodeDetail(vo);
+ //그룹정보를 조회 - GROUP_ID정보
+// vo.setTableNm("COMTNORGNZTINFO");
+// List<?> groupId_result = cmmUseService.selectGroupIdDetail(vo);
+ //기업구분코드를 코드정보로부터 조회 - COM026
+// vo.setCodeId("COM026");
+// List<?> entrprsSeCode_result = cmmUseService.selectCmmCodeDetail(vo);
+ //업종코드를 코드정보로부터 조회 - COM027
+// vo.setCodeId("COM027");
+// List<?> indutyCode_result = cmmUseService.selectCmmCodeDetail(vo);
+
+// model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+// model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+// model.addAttribute("entrprsMberSttus_result", entrprsMberSttus_result);//사용자상태코드목록
+// model.addAttribute("groupId_result", groupId_result); //그룹정보 목록
+// model.addAttribute("entrprsSeCode_result", entrprsSeCode_result); //기업구분코드 목록
+// model.addAttribute("indutyCode_result", indutyCode_result); //업종코드목록
+
+ return "egovframework/com/uss/umt/EgovEntrprsMberInsert";
+ }
+
+ /**
+ * 기업회원등록처리후 목록화면으로 이동한다.
+ * @param entrprsManageVO 신규기업회원정보
+ * @param bindingResult 입력값검증용 bindingResult
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovEntrprsMberManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberInsert.do")
+ public String insertEntrprsMber(@ModelAttribute("entrprsManageVO") EntrprsManageVO entrprsManageVO, BindingResult bindingResult, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ beanValidator.validate(entrprsManageVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/uss/umt/EgovEntrprsMberInsert";
+ } else {
+ if ((entrprsManageVO == null ? "" : EgovStringUtil.isNullToString(entrprsManageVO.getGroupId())).equals("")) {
+ entrprsManageVO.setGroupId(null);
+ }
+ entrprsManageService.insertEntrprsmber(entrprsManageVO);
+ //Exception 없이 진행시 등록성공메시지
+ model.addAttribute("resultMsg", "success.common.insert");
+ }
+ return "forward:/uss/umt/EgovEntrprsMberManage.do";
+
+ }
+
+ /**
+ * 기업회원정보 수정을 위해기업회원정보를 상세조회한다.
+ * @param entrprsmberId 상세조회 대상 기업회원아이디
+ * @param userSearchVO 조회조건정보
+ * @param model 화면모델
+ * @return uss/umt/EgovEntrprsMberSelectUpdt
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberSelectUpdtView.do")
+ public String updateEntrprsMberView(@RequestParam("selectedId") String entrprsmberId, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ EntrprsManageVO entrprsManageVO = new EntrprsManageVO();
+ entrprsManageVO = entrprsManageService.selectEntrprsmber(entrprsmberId);
+ model.addAttribute("entrprsManageVO", entrprsManageVO);
+ model.addAttribute("userSearchVO", userSearchVO);
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+ //패스워드힌트목록을 코드정보로부터 조회
+// vo.setCodeId("COM022");
+// List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+// //성별구분코드를 코드정보로부터 조회
+// vo.setCodeId("COM014");
+// List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+// //사용자상태코드를 코드정보로부터 조회
+// vo.setCodeId("COM013");
+// List<?> entrprsMberSttus_result = cmmUseService.selectCmmCodeDetail(vo);
+// //그룹정보를 조회 - GROUP_ID정보
+// vo.setTableNm("COMTNORGNZTINFO");
+// List<?> groupId_result = cmmUseService.selectGroupIdDetail(vo);
+// //기업구분코드를 코드정보로부터 조회 - COM026
+// vo.setCodeId("COM026");
+// List<?> entrprsSeCode_result = cmmUseService.selectCmmCodeDetail(vo);
+// //업종코드를 코드정보로부터 조회 - COM027
+// vo.setCodeId("COM027");
+// List<?> indutyCode_result = cmmUseService.selectCmmCodeDetail(vo);
+
+// model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+// model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+// model.addAttribute("entrprsMberSttus_result", entrprsMberSttus_result);//사용자상태코드목록
+// model.addAttribute("groupId_result", groupId_result); //그룹정보 목록
+// model.addAttribute("entrprsSeCode_result", entrprsSeCode_result); //기업구분코드 목록
+// model.addAttribute("indutyCode_result", indutyCode_result); //업종코드목록
+
+ return "egovframework/com/uss/umt/EgovEntrprsMberSelectUpdt";
+ }
+
+ /**
+ * 로그인인증제한 해제
+ * @param entrprsManageVO 기업회원정보
+ * @param model 화면모델
+ * @return uss/umt/EgovEntrprsMberSelectUpdtView.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberLockIncorrect.do")
+ public String updateLockIncorrect(EntrprsManageVO entrprsManageVO, Model model) throws Exception {
+
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ entrprsManageService.updateLockIncorrect(entrprsManageVO);
+
+ return "forward:/uss/umt/EgovEntrprsMberSelectUpdtView.do";
+ }
+
+ /**
+ * 기업회원정보 수정후 목록조회 화면으로 이동한다.
+ * @param entrprsManageVO 수정할 기업회원정보
+ * @param bindingResult 입력값 검증용 bindingResult
+ * @param model 화면모델
+ * @return forward:/uss/umt/EgovEntrprsMberManage.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberSelectUpdt.do")
+ public String updateEntrprsMber(@ModelAttribute("entrprsManageVO") EntrprsManageVO entrprsManageVO, BindingResult bindingResult, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ beanValidator.validate(entrprsManageVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+ model.addAttribute("resultMsg", bindingResult.getAllErrors().get(0).getDefaultMessage());
+ return "forward:/uss/umt/EgovEntrprsMberSelectUpdtView.do";
+ } else {
+ if ("".equals(entrprsManageVO.getGroupId())) {
+ entrprsManageVO.setGroupId(null);
+ }
+ entrprsManageService.updateEntrprsmber(entrprsManageVO);
+ //Exception 없이 진행시 수정성공메시지
+ model.addAttribute("resultMsg", "success.common.update");
+ return "forward:/uss/umt/EgovEntrprsMberManage.do";
+ }
+ }
+
+ /**
+ * 기업회원정보삭제후 목록조회 화면으로 이동한다.
+ * @param checkedIdForDel 삭제대상아이디 정보
+ * @param userSearchVO 조회조건정보
+ * @param model 화면모델
+ * @return "forward:/uss/umt/EgovUserManage.do"
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberDelete.do")
+ public String deleteEntrprsMber(@RequestParam("checkedIdForDel") String checkedIdForDel, @ModelAttribute("searchVO") UserDefaultVO userSearchVO, Model model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ entrprsManageService.deleteEntrprsmber(checkedIdForDel);
+ //Exception 없이 진행시 삭제성공메시지
+ model.addAttribute("resultMsg", "success.common.delete");
+ return "forward:/uss/umt/EgovEntrprsMberManage.do";
+ }
+
+ /**
+ * 기업회원목록을 조회한다. (pageing)
+ * @param userSearchVO 검색조건정보
+ * @param model 화면모델
+ * @return uss/umt/EgovEntrprsMberManage
+ * @throws Exception
+ */
+ @IncludedInfo(name = "기업회원관리", order = 450, gid = 50)
+ @RequestMapping(value = "/uss/umt/EgovEntrprsMberManage.do")
+ public String selectEntrprsMberList(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ /** EgovPropertyService.sample */
+ userSearchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ userSearchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(userSearchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(userSearchVO.getPageUnit());
+ paginationInfo.setPageSize(userSearchVO.getPageSize());
+
+ userSearchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ userSearchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ userSearchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> entrprsList = entrprsManageService.selectEntrprsMberList(userSearchVO);
+ model.addAttribute("resultList", entrprsList);
+
+ int totCnt = entrprsManageService.selectEntrprsMberListTotCnt(userSearchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ //사용자상태코드를 코드정보로부터 조회
+// ComDefaultCodeVO vo = new ComDefaultCodeVO();
+// vo.setCodeId("COM013");
+// List<?> entrprsMberSttus_result = cmmUseService.selectCmmCodeDetail(vo);
+// model.addAttribute("entrprsMberSttus_result", entrprsMberSttus_result);//기업회원상태코드목록
+
+ return "egovframework/com/uss/umt/EgovEntrprsMberManage";
+ }
+
+ /**
+ * 기업회원가입신청 등록화면으로 이동한다.
+ * @param userSearchVO 검색조건정보
+ * @param entrprsManageVO 기업회원초기화정보
+ * @param commandMap 파라메터전송 commandMap
+ * @param model 화면모델
+ * @return uss/umt/EgovEntrprsMberSbscrb
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberSbscrbView.do")
+ public String sbscrbEntrprsMberView(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, @ModelAttribute("entrprsManageVO") EntrprsManageVO entrprsManageVO,
+ @RequestParam Map<String, Object> commandMap, Model model) throws Exception {
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+
+// //패스워드힌트목록을 코드정보로부터 조회
+// vo.setCodeId("COM022");
+// List<?> passwordHint_result = cmmUseService.selectCmmCodeDetail(vo);
+// //성별구분코드를 코드정보로부터 조회
+// vo.setCodeId("COM014");
+// List<?> sexdstnCode_result = cmmUseService.selectCmmCodeDetail(vo);
+// //기업구분코드를 코드정보로부터 조회 - COM026
+// vo.setCodeId("COM026");
+// List<?> entrprsSeCode_result = cmmUseService.selectCmmCodeDetail(vo);
+// //업종코드를 코드정보로부터 조회 - COM027
+// vo.setCodeId("COM027");
+// List<?> indutyCode_result = cmmUseService.selectCmmCodeDetail(vo);
+
+// model.addAttribute("passwordHint_result", passwordHint_result); //패스워트힌트목록
+// model.addAttribute("sexdstnCode_result", sexdstnCode_result); //성별구분코드목록
+// model.addAttribute("entrprsSeCode_result", entrprsSeCode_result); //기업구분코드 목록
+// model.addAttribute("indutyCode_result", indutyCode_result); //업종코드목록
+ if (!"".equals(commandMap.get("realname"))) {
+ model.addAttribute("applcntNm", commandMap.get("realname")); //실명인증된 이름 - 주민번호인증
+ model.addAttribute("applcntIhidnum", commandMap.get("ihidnum")); //실명인증된 주민등록번호 - 주민번호 인증
+ }
+ if (!"".equals(commandMap.get("realName"))) {
+ model.addAttribute("applcntNm", commandMap.get("realName")); //실명인증된 이름 - ipin인증
+ }
+ entrprsManageVO.setEntrprsMberSttus("DEFAULT");
+
+ return "egovframework/com/uss/umt/EgovEntrprsMberSbscrb";
+ }
+
+ /**
+ * 기업회원가입신청 등록처리후 로그인화면으로 이동한다.
+ * @param entrprsManageVO 기업회원가입신청정보
+ * @return forward:/uat/uia/egovLoginUsr.do
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovEntrprsMberSbscrb.do")
+ public String sbscrbEntrprsMber(@ModelAttribute("entrprsManageVO") EntrprsManageVO entrprsManageVO) throws Exception {
+
+ //가입상태 초기화
+ entrprsManageVO.setEntrprsMberSttus("A");
+ //그룹정보 초기화
+ //entrprsManageVO.setGroupId("1");
+ //기업회원가입신청 등록시 기업회원등록기능을 사용하여 등록한다.
+ entrprsManageService.insertEntrprsmber(entrprsManageVO);
+ return "forward:/uat/uia/egovLoginUsr.do";
+ }
+
+ /**
+ * 기업회원 약관확인 화면을 조회한다.
+ * @param model 화면모델
+ * @return uss/umt/EgovStplatCnfirm
+ * @throws Exception
+ */
+ @RequestMapping("/uss/umt/EgovStplatCnfirmEntrprs.do")
+ public String sbscrbEntrprsMber(Model model) throws Exception {
+
+ //기업회원용 약관 아이디 설정
+ String stplatId = "STPLAT_0000000000002";
+ //회원가입유형 설정-기업회원
+ String sbscrbTy = "USR02";
+ //약관정보 조회
+ List<?> stplatList = entrprsManageService.selectStplat(stplatId);
+ model.addAttribute("stplatList", stplatList); //약관정보포함
+ model.addAttribute("sbscrbTy", sbscrbTy); //회원가입유형포함
+
+ return "egovframework/com/uss/umt/EgovStplatCnfirm";
+ }
+
+ /**
+ * 기업회원 암호 수정처리 후 화면 이동한다.
+ * @param model 화면모델
+ * @param commandMap 파라메터전달용 commandMap
+ * @param userSearchVO 검색조건정보
+ * @param entrprsManageVO 기업회원수정정보
+ * @return uss/umt/EgovEntrprsPasswordUpdt
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovEntrprsPasswordUpdt.do")
+ public String updatePassword(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
+ @ModelAttribute("entrprsManageVO") EntrprsManageVO entrprsManageVO) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ String oldPassword = (String) commandMap.get("oldPassword");
+ String newPassword = (String) commandMap.get("newPassword");
+ String newPassword2 = (String) commandMap.get("newPassword2");
+ String uniqId = (String) commandMap.get("uniqId");
+
+ boolean isCorrectPassword = false;
+ EntrprsManageVO resultVO = new EntrprsManageVO();
+ entrprsManageVO.setEntrprsMberPassword(newPassword);
+ entrprsManageVO.setOldPassword(oldPassword);
+ entrprsManageVO.setUniqId(uniqId);
+
+ String resultMsg = "";
+ resultVO = entrprsManageService.selectPassword(entrprsManageVO);
+ //패스워드 암호화
+ String encryptPass = EgovFileScrty.encryptPassword(oldPassword, entrprsManageVO.getEntrprsmberId());
+ if (encryptPass.equals(resultVO.getEntrprsMberPassword())) {
+ if (newPassword.equals(newPassword2)) {
+ isCorrectPassword = true;
+ } else {
+ isCorrectPassword = false;
+ resultMsg = "fail.user.passwordUpdate2";
+ }
+ } else {
+ isCorrectPassword = false;
+ resultMsg = "fail.user.passwordUpdate1";
+ }
+
+ if (isCorrectPassword) {
+ entrprsManageVO.setEntrprsMberPassword(EgovFileScrty.encryptPassword(newPassword, entrprsManageVO.getEntrprsmberId()));
+ entrprsManageService.updatePassword(entrprsManageVO);
+ model.addAttribute("entrprsManageVO", entrprsManageVO);
+ resultMsg = "success.common.update";
+ } else {
+ model.addAttribute("entrprsManageVO", entrprsManageVO);
+ }
+ model.addAttribute("userSearchVO", userSearchVO);
+ model.addAttribute("resultMsg", resultMsg);
+
+ return "egovframework/com/uss/umt/EgovEntrprsPasswordUpdt";
+ }
+
+ /**
+ * 기업회원암호 수정 화면 이동
+ * @param model 화면모델
+ * @param commandMap 파라메터전송용 commandMap
+ * @param userSearchVO 검색조건정보
+ * @param entrprsManageVO 기업회원수정정보
+ * @return uss/umt/EgovEntrprsPasswordUpdt
+ * @throws Exception
+ */
+ @RequestMapping(value = "/uss/umt/EgovEntrprsPasswordUpdtView.do")
+ public String updatePasswordView(ModelMap model, @RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") UserDefaultVO userSearchVO,
+ @ModelAttribute("entrprsManageVO") EntrprsManageVO entrprsManageVO) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ return "index";
+ }
+
+ String userTyForPassword = (String) commandMap.get("userTyForPassword");
+ entrprsManageVO.setUserTy(userTyForPassword);
+
+ model.addAttribute("userSearchVO", userSearchVO);
+ model.addAttribute("entrprsManageVO", entrprsManageVO);
+ return "egovframework/com/uss/umt/EgovEntrprsPasswordUpdt";
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/web/EgovEntrprsManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/MberManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/MberManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/MberManageVO.java (revision 7)
@@ -0,0 +1,425 @@
+package egovframework.com.uss.umt.service;
+
+/**
+ * 일반회원VO클래스로서 일반회원관리 비지니스로직 처리용 항목을 구성한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+public class MberManageVO extends UserDefaultVO{
+
+ private static final long serialVersionUID = -4255594107023139972L;
+
+ /** 이전비밀번호 - 비밀번호 변경시 사용*/
+ private String oldPassword = "";
+
+ /**
+ * 사용자고유아이디
+ */
+ private String uniqId="";
+ /**
+ * 사용자 유형
+ */
+ private String userTy;
+ /**
+ * 주소
+ */
+ private String adres;
+ /**
+ * 상세주소
+ */
+ private String detailAdres;
+ /**
+ * 끝전화번호
+ */
+ private String endTelno;
+ /**
+ * 팩스번호
+ */
+ private String mberFxnum;
+ /**
+ * 그룹 ID
+ */
+ private String groupId;
+ /**
+ * 주민등록번호
+ */
+ private String ihidnum;
+ /**
+ * 성별코드
+ */
+ private String sexdstnCode;
+ /**
+ * 회원 ID
+ */
+ private String mberId;
+ /**
+ * 회원명
+ */
+ private String mberNm;
+ /**
+ * 회원상태
+ */
+ private String mberSttus;
+ /**
+ * 지역번호
+ */
+ private String areaNo;
+ /**
+ * 중간전화번호
+ */
+ private String middleTelno;
+ /**
+ * 핸드폰번호
+ */
+ private String moblphonNo;
+ /**
+ * 비밀번호
+ */
+ private String password;
+ /**
+ * 비밀번호 정답
+ */
+ private String passwordCnsr;
+ /**
+ * 비밀번호 힌트
+ */
+ private String passwordHint;
+ /**
+ * 가입 일자
+ */
+ private String sbscrbDe;
+ /**
+ * 우편번호
+ */
+ private String zip;
+ /**
+ * 이메일주소
+ */
+ private String mberEmailAdres;
+
+ private String lockAt;
+ public String getLockAt() {return lockAt;}
+ public void setLockAt(String lockAt) {this.lockAt = lockAt;}
+
+ /**
+ * oldPassword attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getOldPassword() {
+ return oldPassword;
+ }
+ /**
+ * oldPassword attribute 값을 설정한다.
+ * @param oldPassword String
+ */
+ public void setOldPassword(String oldPassword) {
+ this.oldPassword = oldPassword;
+ }
+ /**
+ * uniqId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+ /**
+ * uniqId attribute 값을 설정한다.
+ * @param uniqId String
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+ /**
+ * userTy attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUserTy() {
+ return userTy;
+ }
+ /**
+ * userTy attribute 값을 설정한다.
+ * @param userTy String
+ */
+ public void setUserTy(String userTy) {
+ this.userTy = userTy;
+ }
+ /**
+ * adres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getAdres() {
+ return adres;
+ }
+ /**
+ * adres attribute 값을 설정한다.
+ * @param adres String
+ */
+ public void setAdres(String adres) {
+ this.adres = adres;
+ }
+ /**
+ * detailAdres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getDetailAdres() {
+ return detailAdres;
+ }
+ /**
+ * detailAdres attribute 값을 설정한다.
+ * @param detailAdres String
+ */
+ public void setDetailAdres(String detailAdres) {
+ this.detailAdres = detailAdres;
+ }
+ /**
+ * endTelno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEndTelno() {
+ return endTelno;
+ }
+ /**
+ * endTelno attribute 값을 설정한다.
+ * @param endTelno String
+ */
+ public void setEndTelno(String endTelno) {
+ this.endTelno = endTelno;
+ }
+ /**
+ * mberFxnum attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMberFxnum() {
+ return mberFxnum;
+ }
+ /**
+ * mberFxnum attribute 값을 설정한다.
+ * @param mberFxnum String
+ */
+ public void setMberFxnum(String mberFxnum) {
+ this.mberFxnum = mberFxnum;
+ }
+ /**
+ * groupId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getGroupId() {
+ return groupId;
+ }
+ /**
+ * groupId attribute 값을 설정한다.
+ * @param groupId String
+ */
+ public void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+ /**
+ * ihidnum attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getIhidnum() {
+ return ihidnum;
+ }
+ /**
+ * ihidnum attribute 값을 설정한다.
+ * @param ihidnum String
+ */
+ public void setIhidnum(String ihidnum) {
+ this.ihidnum = ihidnum;
+ }
+ /**
+ * sexdstnCode attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSexdstnCode() {
+ return sexdstnCode;
+ }
+ /**
+ * sexdstnCode attribute 값을 설정한다.
+ * @param sexdstnCode String
+ */
+ public void setSexdstnCode(String sexdstnCode) {
+ this.sexdstnCode = sexdstnCode;
+ }
+ /**
+ * mberId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMberId() {
+ return mberId;
+ }
+ /**
+ * mberId attribute 값을 설정한다.
+ * @param mberId String
+ */
+ public void setMberId(String mberId) {
+ this.mberId = mberId;
+ }
+ /**
+ * mberNm attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMberNm() {
+ return mberNm;
+ }
+ /**
+ * mberNm attribute 값을 설정한다.
+ * @param mberNm String
+ */
+ public void setMberNm(String mberNm) {
+ this.mberNm = mberNm;
+ }
+ /**
+ * mberSttus attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMberSttus() {
+ return mberSttus;
+ }
+ /**
+ * mberSttus attribute 값을 설정한다.
+ * @param mberSttus String
+ */
+ public void setMberSttus(String mberSttus) {
+ this.mberSttus = mberSttus;
+ }
+ /**
+ * areaNo attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getAreaNo() {
+ return areaNo;
+ }
+ /**
+ * areaNo attribute 값을 설정한다.
+ * @param areaNo String
+ */
+ public void setAreaNo(String areaNo) {
+ this.areaNo = areaNo;
+ }
+ /**
+ * middleTelno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMiddleTelno() {
+ return middleTelno;
+ }
+ /**
+ * middleTelno attribute 값을 설정한다.
+ * @param middleTelno String
+ */
+ public void setMiddleTelno(String middleTelno) {
+ this.middleTelno = middleTelno;
+ }
+ /**
+ * moblphonNo attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMoblphonNo() {
+ return moblphonNo;
+ }
+ /**
+ * moblphonNo attribute 값을 설정한다.
+ * @param moblphonNo String
+ */
+ public void setMoblphonNo(String moblphonNo) {
+ this.moblphonNo = moblphonNo;
+ }
+ /**
+ * password attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getPassword() {
+ return password;
+ }
+ /**
+ * password attribute 값을 설정한다.
+ * @param password String
+ */
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ /**
+ * passwordCnsr attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getPasswordCnsr() {
+ return passwordCnsr;
+ }
+ /**
+ * passwordCnsr attribute 값을 설정한다.
+ * @param passwordCnsr String
+ */
+ public void setPasswordCnsr(String passwordCnsr) {
+ this.passwordCnsr = passwordCnsr;
+ }
+ /**
+ * passwordHint attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getPasswordHint() {
+ return passwordHint;
+ }
+ /**
+ * passwordHint attribute 값을 설정한다.
+ * @param passwordHint String
+ */
+ public void setPasswordHint(String passwordHint) {
+ this.passwordHint = passwordHint;
+ }
+ /**
+ * sbscrbDe attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSbscrbDe() {
+ return sbscrbDe;
+ }
+ /**
+ * sbscrbDe attribute 값을 설정한다.
+ * @param sbscrbDe String
+ */
+ public void setSbscrbDe(String sbscrbDe) {
+ this.sbscrbDe = sbscrbDe;
+ }
+ /**
+ * zip attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getZip() {
+ return zip;
+ }
+ /**
+ * zip attribute 값을 설정한다.
+ * @param zip String
+ */
+ public void setZip(String zip) {
+ this.zip = zip;
+ }
+ /**
+ * mberEmailAdres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMberEmailAdres() {
+ return mberEmailAdres;
+ }
+ /**
+ * mberEmailAdres attribute 값을 설정한다.
+ * @param mberEmailAdres String
+ */
+ public void setMberEmailAdres(String mberEmailAdres) {
+ this.mberEmailAdres = mberEmailAdres;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/MberManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovEntrprsManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovEntrprsManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovEntrprsManageServiceImpl.java (revision 7)
@@ -0,0 +1,192 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.uss.umt.service.EgovEntrprsManageService;
+import egovframework.com.uss.umt.service.EntrprsManageVO;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.com.utl.sim.service.EgovFileScrty;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 기업회원관리에 관한 비지니스클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2014.12.08 이기하 암호화방식 변경(EgovFileScrty.encryptPassword)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+@Service("entrprsManageService")
+public class EgovEntrprsManageServiceImpl extends EgovAbstractServiceImpl implements EgovEntrprsManageService {
+
+ /** userManageDAO */
+ @Resource(name="userManageDAO")
+ private UserManageDAO userManageDAO;
+
+ /** mberManageDAO */
+ @Resource(name="mberManageDAO")
+ private MberManageDAO mberManageDAO;
+
+ /** entrprsManageDAO */
+ @Resource(name="entrprsManageDAO")
+ private EntrprsManageDAO entrprsManageDAO;
+
+ /** egovUsrCnfrmIdGnrService */
+ @Resource(name="egovUsrCnfrmIdGnrService")
+ private EgovIdGnrService idgenService;
+
+ /**
+ * 기업회원의 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param entrprsManageVO 기업회원등록정보
+ * @return result 등록결과
+ * @throws Exception
+ */
+ @Override
+ public String insertEntrprsmber(EntrprsManageVO entrprsManageVO) throws Exception {
+ //고유아이디 셋팅
+ String uniqId = idgenService.getNextStringId();
+ entrprsManageVO.setUniqId(uniqId);
+ //패스워드 암호화
+ String pass = EgovFileScrty.encryptPassword(entrprsManageVO.getEntrprsMberPassword(), EgovStringUtil.isNullToString(entrprsManageVO.getEntrprsmberId()));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ entrprsManageVO.setEntrprsMberPassword(pass);
+
+ String result = entrprsManageDAO.insertEntrprsmber(entrprsManageVO);
+ return result;
+ }
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는기업회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param uniqId 조회대상 기업회원아이디
+ * @return entrprsManageVO 기업회원정보
+ * @throws Exception
+ */
+ @Override
+ public EntrprsManageVO selectEntrprsmber(String uniqId) {
+ EntrprsManageVO entrprsManageVO = entrprsManageDAO.selectEntrprsmber(uniqId);
+ return entrprsManageVO;
+ }
+
+ /**
+ * 화면에 조회된 기업회원의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param entrprsManageVO 기업회원수정정보
+ * @throws Exception
+ */
+ @Override
+ public void updateEntrprsmber(EntrprsManageVO entrprsManageVO) throws Exception {
+ //패스워드 암호화
+ String pass = EgovFileScrty.encryptPassword(entrprsManageVO.getEntrprsMberPassword(), EgovStringUtil.isNullToString(entrprsManageVO.getEntrprsmberId()));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ entrprsManageVO.setEntrprsMberPassword(pass);
+ entrprsManageDAO.updateEntrprsmber(entrprsManageVO);
+ }
+
+ /**
+ * 화면에 조회된 기업회원의 정보를 데이터베이스에서 삭제
+ * @param checkedIdForDel 삭제대상기업회원아이디
+ * @throws Exception
+ */
+ @Override
+ public void deleteEntrprsmber(String checkedIdForDel) {
+ //log.debug("jjyser_delete-->"+checkedIdForDel);
+ String [] delId = checkedIdForDel.split(",");
+ for (int i=0; i<delId.length ; i++){
+ String [] id = delId[i].split(":");
+ //log.debug("id[0]:"+id[0]);
+ if (id[0].equals("USR03")){
+ //업무사용자(직원)삭제
+ userManageDAO.deleteUser(id[1]);
+ }else if(id[0].equals("USR01")){
+ //일반회원삭제
+ mberManageDAO.deleteMber(id[1]);
+ }else if(id[0].equals("USR02")){
+ //기업회원삭제
+ entrprsManageDAO.deleteEntrprsmber(id[1]);
+ }
+ }
+ }
+
+ /**
+ * 기업회원용 약관정보 조회
+ * @param stplatId 기업회원약관아이디
+ * @return stplatList 기업회원약관정보
+ * @throws Exception
+ */
+ @Override
+ public List<?> selectStplat(String stplatId) {
+ List<?> stplatList = entrprsManageDAO.selectStplat(stplatId);
+ return stplatList;
+ }
+
+ /**
+ * 기업회원 암호 수정
+ * @param passVO 기업회원수정정보(비밀번호)
+ * @throws Exception
+ */
+ @Override
+ public void updatePassword(EntrprsManageVO passVO) {
+ entrprsManageDAO.updatePassword(passVO);
+ }
+
+ /**
+ * 기업회원이 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param passVO 기업회원암호 조회조건정보
+ * @return entrprsManageVO 기업회원암호정보
+ * @throws Exception
+ */
+ @Override
+ public EntrprsManageVO selectPassword(EntrprsManageVO passVO) {
+ EntrprsManageVO entrprsManageVO = entrprsManageDAO.selectPassword(passVO);
+ return entrprsManageVO;
+ }
+
+ /**
+ * 기 등록된기업 회원 중 검색조건에 맞는 회원들의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<EntrprsManageVO> 기업회원목록정보
+ * @throws Exception
+ */
+ @Override
+ public List<EntrprsManageVO> selectEntrprsMberList(UserDefaultVO userSearchVO) {
+ return entrprsManageDAO.selectEntrprsMberList(userSearchVO);
+ }
+
+ /**
+ * 기업회원 총 갯수를 조회한다.
+ * @param userSearchVO 검색조건
+ * @return 사용자 총 갯수(int)
+ * @throws Exception
+ */
+ @Override
+ public int selectEntrprsMberListTotCnt(UserDefaultVO userSearchVO) {
+ return entrprsManageDAO.selectEntrprsMberListTotCnt(userSearchVO);
+ }
+
+ /**
+ * 로그인인증제한 해제
+ * @param entrprsManageVO 기업회원정보
+ * @return void
+ * @throws Exception
+ */
+ @Override
+ public void updateLockIncorrect(EntrprsManageVO entrprsManageVO) throws Exception {
+ entrprsManageDAO.updateLockIncorrect(entrprsManageVO);
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovEntrprsManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovUserManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovUserManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovUserManageServiceImpl.java (revision 7)
@@ -0,0 +1,202 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.uss.umt.service.EgovUserManageService;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+import egovframework.com.uss.umt.service.UserManageVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.com.utl.sim.service.EgovFileScrty;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 사용자관리에 관한 비지니스 클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2014.12.08 이기하 암호화방식 변경(EgovFileScrty.encryptPassword)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+@Service("userManageService")
+public class EgovUserManageServiceImpl extends EgovAbstractServiceImpl implements EgovUserManageService {
+
+ /** userManageDAO */
+ @Resource(name="userManageDAO")
+ private UserManageDAO userManageDAO;
+
+ /** mberManageDAO */
+ @Resource(name="mberManageDAO")
+ private MberManageDAO mberManageDAO;
+
+ /** entrprsManageDAO */
+ @Resource(name="entrprsManageDAO")
+ private EntrprsManageDAO entrprsManageDAO;
+
+ /** egovUsrCnfrmIdGnrService */
+ @Resource(name="egovUsrCnfrmIdGnrService")
+ private EgovIdGnrService idgenService;
+
+ /**
+ * 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인
+ * @param checkId 중복여부 확인대상 아이디
+ * @return 사용가능여부(아이디 사용회수 int)
+ * @throws Exception
+ */
+ @Override
+ public int checkIdDplct(String checkId) {
+ return userManageDAO.checkIdDplct(checkId);
+ }
+
+ /**
+ * 화면에 조회된 사용자의 정보를 데이터베이스에서 삭제
+ * @param checkedIdForDel 삭제대상 업무사용자아이디
+ * @throws Exception
+ */
+ @Override
+ public void deleteUser(String checkedIdForDel) {
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ String [] delId = EgovStringUtil.isNullToString(checkedIdForDel).split(",");
+ for (int i=0; i<delId.length ; i++){
+ String [] id = delId[i].split(":");
+ if (id[0].equals("USR03")){
+ //업무사용자(직원)삭제
+ userManageDAO.deleteUser(id[1]);
+ }else if(id[0].equals("USR01")){
+ //일반회원삭제
+ mberManageDAO.deleteMber(id[1]);
+ }else if(id[0].equals("USR02")){
+ //기업회원삭제
+ entrprsManageDAO.deleteEntrprsmber(id[1]);
+ }
+ }
+ }
+
+ /**
+ * @param userManageVO 업무사용자 등록정보
+ * @return result 등록결과
+ * @throws Exception
+ */
+ @Override
+ public String insertUser(UserManageVO userManageVO) throws Exception {
+ //고유아이디 셋팅
+ String uniqId = idgenService.getNextStringId();
+ userManageVO.setUniqId(uniqId);
+ //패스워드 암호화
+ String pass = EgovFileScrty.encryptPassword(userManageVO.getPassword(), EgovStringUtil.isNullToString(userManageVO.getEmplyrId()));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ userManageVO.setPassword(pass);
+ String result = userManageDAO.insertUser(userManageVO);
+ return result;
+ }
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는 사용자의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param uniqId 상세조회대상 업무사용자 아이디
+ * @return userManageVO 업무사용자 상세정보
+ * @throws Exception
+ */
+ @Override
+ public UserManageVO selectUser(String uniqId) {
+ UserManageVO userManageVO = userManageDAO.selectUser(uniqId);
+ return userManageVO;
+ }
+
+ /**
+ * 기 등록된 특정 사용자의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<UserManageVO> 업무사용자 목록정보
+ * @throws Exception
+ */
+ @Override
+ public List<?> selectUserList(UserDefaultVO userSearchVO) {
+ List<?> result = userManageDAO.selectUserList(userSearchVO);
+ return result;
+ }
+
+ /**
+ * 기 등록된 특정 사용자목록의 전체수를 확인
+ * @param userSearchVO 검색조건
+ * @return 총사용자갯수(int)
+ * @throws Exception
+ */
+ @Override
+ public int selectUserListTotCnt(UserDefaultVO userSearchVO) {
+ return userManageDAO.selectUserListTotCnt(userSearchVO);
+ }
+
+ /**
+ * 화면에 조회된 사용자의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param userManageVO 업무사용자 수정정보
+ * @throws Exception
+ */
+ @Override
+ public void updateUser(UserManageVO userManageVO) throws Exception {
+ //패스워드 암호화
+ String pass = EgovFileScrty.encryptPassword(userManageVO.getPassword(), EgovStringUtil.isNullToString(userManageVO.getEmplyrId()));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ userManageVO.setPassword(pass);
+
+ userManageDAO.updateUser(userManageVO);
+ }
+
+ /**
+ * 사용자정보 수정시 히스토리 정보를 추가
+ * @param userManageVO 업무사용자 수정정보
+ * @return result 등록결과
+ * @throws Exception
+ */
+ @Override
+ public String insertUserHistory(UserManageVO userManageVO) {
+ return userManageDAO.insertUserHistory(userManageVO);
+ }
+
+ /**
+ * 업무사용자 암호 수정
+ * @param userManageVO 업무사용자 수정정보(비밀번호)
+ * @throws Exception
+ */
+ @Override
+ public void updatePassword(UserManageVO userManageVO) {
+ userManageDAO.updatePassword(userManageVO);
+ }
+
+ /**
+ * 사용자가 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param passVO 업무사용자 암호 조회조건정보
+ * @return userManageVO 업무사용자 암호정보
+ * @throws Exception
+ */
+ @Override
+ public UserManageVO selectPassword(UserManageVO passVO) {
+ UserManageVO userManageVO = userManageDAO.selectPassword(passVO);
+ return userManageVO;
+ }
+
+
+ /**
+ * 로그인인증제한 해제
+ * @param userManageVO 업무사용자 수정정보
+ * @return void
+ * @throws Exception
+ */
+ @Override
+ public void updateLockIncorrect(UserManageVO userManageVO) throws Exception {
+ userManageDAO.updateLockIncorrect(userManageVO);
+ }
+
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovUserManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java (revision 7)
@@ -0,0 +1,119 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.uss.umt.service.MberManageVO;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 일반회원관리에 관한 데이터 접근 클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+@Repository("mberManageDAO")
+public class MberManageDAO extends EgovComAbstractDAO{
+
+ /**
+ * 기 등록된 특정 일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<MberManageVO> 기업회원 목록정보
+ */
+ @SuppressWarnings("unchecked")
+ public List<MberManageVO> selectMberList(UserDefaultVO userSearchVO){
+ return (List<MberManageVO>) list("mberManageDAO.selectMberList", userSearchVO);
+ }
+
+ /**
+ * 일반회원 총 갯수를 조회한다.
+ * @param userSearchVO 검색조건
+ * @return int 일반회원총갯수
+ */
+ public int selectMberListTotCnt(UserDefaultVO userSearchVO) {
+ return (Integer)selectOne("mberManageDAO.selectMberListTotCnt", userSearchVO);
+ }
+
+ /**
+ * 화면에 조회된 일반회원의 정보를 데이터베이스에서 삭제
+ * @param delId 삭제 대상 일반회원아이디
+ */
+ public void deleteMber(String delId){
+ delete("mberManageDAO.deleteMber_S", delId);
+ }
+
+ /**
+ * 일반회원의 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param mberManageVO 일반회원 등록정보
+ * @return String 등록결과
+ */
+ public String insertMber(MberManageVO mberManageVO){
+ return String.valueOf((int)insert("mberManageDAO.insertMber_S", mberManageVO));
+ }
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param mberId 상세조회대상 일반회원아이디
+ * @return MberManageVO 일반회원 상세정보
+ */
+ public MberManageVO selectMber(String mberId){
+ return (MberManageVO) selectOne("mberManageDAO.selectMber_S", mberId);
+ }
+
+ /**
+ * 화면에 조회된일반회원의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param mberManageVO 일반회원수정정보
+ */
+ public void updateMber(MberManageVO mberManageVO){
+ update("mberManageDAO.updateMber_S",mberManageVO);
+ }
+
+ /**
+ * 일반회원 약관확인
+ * @param stplatId 일반회원약관아이디
+ * @return List 일반회원약관정보
+ */
+ public List<?> selectStplat(String stplatId){
+ return list("mberManageDAO.selectStplat_S", stplatId);
+ }
+
+ /**
+ * 일반회원 암호수정
+ * @param passVO 기업회원수정정보(비밀번호)
+ */
+ public void updatePassword(MberManageVO passVO) {
+ update("mberManageDAO.updatePassword_S", passVO);
+ }
+
+ /**
+ * 일반회원이 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param mberManageVO 일반회원암호 조회조건정보
+ * @return MberManageVO 일반회원 암호정보
+ */
+ public MberManageVO selectPassword(MberManageVO mberManageVO){
+ return (MberManageVO) selectOne("mberManageDAO.selectPassword_S", mberManageVO);
+ }
+
+
+ /**
+ * 로그인인증제한 해제
+ * @param mberManageVO 일반회원정보
+ */
+ public void updateLockIncorrect(MberManageVO mberManageVO) {
+ update("mberManageDAO.updateLockIncorrect", mberManageVO);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/MberManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/DeptManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/DeptManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/DeptManageDAO.java (revision 7)
@@ -0,0 +1,70 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.uss.umt.service.DeptManageVO;
+
+import org.springframework.stereotype.Repository;
+
+@Repository("deptManageDAO")
+public class DeptManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 부서를 관리하기 위해 등록된 부서목록을 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return List - 부서 목록
+ * @exception Exception
+ */
+ public List<DeptManageVO> selectDeptManageList(DeptManageVO deptManageVO) throws Exception {
+ return selectList("deptManageDAO.selectDeptManageList", deptManageVO);
+ }
+
+ /**
+ * 부서목록 총 갯수를 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return int - 부서 카운트 수
+ * @exception Exception
+ */
+ public int selectDeptManageListTotCnt(DeptManageVO deptManageVO) throws Exception {
+ return (Integer)selectOne("deptManageDAO.selectDeptManageListTotCnt", deptManageVO);
+ }
+
+ /**
+ * 등록된 부서의 상세정보를 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return deptManageVO - 부서 Vo
+ *
+ * @param bannerVO
+ */
+ public DeptManageVO selectDeptManage(DeptManageVO deptManageVO) throws Exception {
+ return (DeptManageVO) selectOne("deptManageDAO.selectDeptManage", deptManageVO);
+ }
+
+ /**
+ * 부서정보를 신규로 등록한다.
+ * @param deptManageVO - 부서 model
+ */
+ public void insertDeptManage(DeptManageVO deptManageVO) throws Exception {
+ insert("deptManageDAO.insertDeptManage", deptManageVO);
+ }
+
+ /**
+ * 기 등록된 부서정보를 수정한다.
+ * @param deptManageVO - 부서 model
+ */
+ public void updateDeptManage(DeptManageVO deptManageVO) throws Exception {
+ update("deptManageDAO.updateDeptManage", deptManageVO);
+ }
+
+ /**
+ * 기 등록된 부서정보를 삭제한다.
+ * @param deptManageVO - 부서 model
+ *
+ * @param banner
+ */
+ public void deleteDeptManage(DeptManageVO deptManageVO) throws Exception {
+ delete("deptManageDAO.deleteDeptManage", deptManageVO);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/DeptManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovMberManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovMberManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovMberManageServiceImpl.java (revision 7)
@@ -0,0 +1,187 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.uss.umt.service.EgovMberManageService;
+import egovframework.com.uss.umt.service.MberManageVO;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.com.utl.sim.service.EgovFileScrty;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 일반회원관리에 관한비지니스클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2014.12.08 이기하 암호화방식 변경(EgovFileScrty.encryptPassword)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+@Service("mberManageService")
+public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implements EgovMberManageService {
+
+ /** userManageDAO */
+ @Resource(name="userManageDAO")
+ private UserManageDAO userManageDAO;
+
+ /** mberManageDAO */
+ @Resource(name="mberManageDAO")
+ private MberManageDAO mberManageDAO;
+
+ /** entrprsManageDAO */
+ @Resource(name="entrprsManageDAO")
+ private EntrprsManageDAO entrprsManageDAO;
+
+ /** egovUsrCnfrmIdGnrService */
+ @Resource(name="egovUsrCnfrmIdGnrService")
+ private EgovIdGnrService idgenService;
+
+ /**
+ * 사용자의 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param mberManageVO 일반회원 등록정보
+ * @return result 등록결과
+ * @throws Exception
+ */
+ @Override
+ public String insertMber(MberManageVO mberManageVO) throws Exception {
+ //고유아이디 셋팅
+ String uniqId = idgenService.getNextStringId();
+ mberManageVO.setUniqId(uniqId);
+ //패스워드 암호화
+ String pass = EgovFileScrty.encryptPassword(mberManageVO.getPassword(), EgovStringUtil.isNullToString(mberManageVO.getMberId()));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ mberManageVO.setPassword(pass);
+
+ String result = mberManageDAO.insertMber(mberManageVO);
+ return result;
+ }
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는 일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param uniqId 상세조회대상 일반회원아이디
+ * @return mberManageVO 일반회원상세정보
+ * @throws Exception
+ */
+ @Override
+ public MberManageVO selectMber(String uniqId) {
+ MberManageVO mberManageVO = mberManageDAO.selectMber(uniqId);
+ return mberManageVO;
+ }
+
+ /**
+ * 기 등록된 회원 중 검색조건에 맞는 회원들의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<MberManageVO> 일반회원목록정보
+ */
+ @Override
+ public List<MberManageVO> selectMberList(UserDefaultVO userSearchVO) {
+ return mberManageDAO.selectMberList(userSearchVO);
+ }
+
+ /**
+ * 일반회원 총 갯수를 조회한다.
+ * @param userSearchVO 검색조건
+ * @return 일반회원총갯수(int)
+ */
+ @Override
+ public int selectMberListTotCnt(UserDefaultVO userSearchVO) {
+ return mberManageDAO.selectMberListTotCnt(userSearchVO);
+ }
+
+ /**
+ * 화면에 조회된 일반회원의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param mberManageVO 일반회원수정정보
+ * @throws Exception
+ */
+ @Override
+ public void updateMber(MberManageVO mberManageVO) throws Exception {
+ //패스워드 암호화
+ String pass = EgovFileScrty.encryptPassword(mberManageVO.getPassword(), EgovStringUtil.isNullToString(mberManageVO.getMberId()));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ mberManageVO.setPassword(pass);
+ mberManageDAO.updateMber(mberManageVO);
+ }
+
+ /**
+ * 화면에 조회된 사용자의 정보를 데이터베이스에서 삭제
+ * @param checkedIdForDel 삭제대상 일반회원아이디
+ * @throws Exception
+ */
+ @Override
+ public void deleteMber(String checkedIdForDel) {
+ String [] delId = checkedIdForDel.split(",");
+ for (int i=0; i<delId.length ; i++){
+ String [] id = delId[i].split(":");
+ if (id[0].equals("USR03")){
+ //업무사용자(직원)삭제
+ userManageDAO.deleteUser(id[1]);
+ }else if(id[0].equals("USR01")){
+ //일반회원삭제
+ mberManageDAO.deleteMber(id[1]);
+ }else if(id[0].equals("USR02")){
+ //기업회원삭제
+ entrprsManageDAO.deleteEntrprsmber(id[1]);
+ }
+ }
+ }
+
+ /**
+ * 일반회원 약관확인
+ * @param stplatId 일반회원약관아이디
+ * @return 일반회원약관정보(List)
+ * @throws Exception
+ */
+ @Override
+ public List<?> selectStplat(String stplatId) {
+ return mberManageDAO.selectStplat(stplatId);
+ }
+
+ /**
+ * 일반회원암호수정
+ * @param mberManageVO 일반회원수정정보(비밀번호)
+ * @throws Exception
+ */
+ @Override
+ public void updatePassword(MberManageVO mberManageVO) {
+ mberManageDAO.updatePassword(mberManageVO);
+ }
+
+ /**
+ * 일반회원이 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param passVO 일반회원암호 조회조건정보
+ * @return mberManageVO 일반회원암호정보
+ * @throws Exception
+ */
+ @Override
+ public MberManageVO selectPassword(MberManageVO passVO) {
+ MberManageVO mberManageVO = mberManageDAO.selectPassword(passVO);
+ return mberManageVO;
+ }
+
+
+ /**
+ * 로그인인증제한 해제
+ * @param mberManageVO 일반회원정보
+ * @return void
+ * @throws Exception
+ */
+ @Override
+ public void updateLockIncorrect(MberManageVO mberManageVO) throws Exception {
+ mberManageDAO.updateLockIncorrect(mberManageVO);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovMberManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EntrprsManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EntrprsManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EntrprsManageDAO.java (revision 7)
@@ -0,0 +1,117 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.uss.umt.service.EntrprsManageVO;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 기업회원관리에 관한 데이터 접근 클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+@Repository("entrprsManageDAO")
+public class EntrprsManageDAO extends EgovComAbstractDAO{
+
+ /**
+ * 화면에 조회된 기업회원의 정보를 데이터베이스에서 삭제
+ * @param delId
+ */
+ public void deleteEntrprsmber(String delId){
+ delete("entrprsManageDAO.deleteEntrprs_S", delId);
+ }
+
+ /**
+ * 기업회원의 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param entrprsManageVO 기업회원 등록정보
+ * @return String 등록결과
+ */
+ public String insertEntrprsmber(EntrprsManageVO entrprsManageVO){
+ return String.valueOf((int)insert("entrprsManageDAO.insertEntrprs_S", entrprsManageVO));
+ }
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는 기업회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param entrprsmberId 상세조회대상 기업회원아이디
+ * @return EntrprsManageVO 기업회원 상세정보
+ */
+ public EntrprsManageVO selectEntrprsmber(String entrprsmberId){
+ return (EntrprsManageVO) selectOne("entrprsManageDAO.selectEntrprs_S", entrprsmberId);
+ }
+
+ /**
+ * 화면에 조회된 사용자의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param entrprsManageVO 기업회원 수정정보
+ */
+ public void updateEntrprsmber(EntrprsManageVO entrprsManageVO){
+ update("entrprsManageDAO.updateEntrprs_S",entrprsManageVO);
+ }
+
+ /**
+ * 약관정보를 조회
+ * @param stplatId 기업회원 약관아이디
+ * @return List 기업회원약관정보
+ */
+ public List<?> selectStplat(String stplatId) {
+ return list("entrprsManageDAO.selectStplat_S", stplatId);
+ }
+
+ /**
+ * 기업회원 암호수정
+ * @param passVO 기업회원수정정보(비밀번호)
+ */
+ public void updatePassword(EntrprsManageVO passVO) {
+ update("entrprsManageDAO.updatePassword_S", passVO);
+ }
+
+ /**
+ * 기업회원이 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param entrprsManageVO 기업회원암호 조회조건정보
+ * @return EntrprsManageVO 기업회원암호정보
+ */
+ public EntrprsManageVO selectPassword(EntrprsManageVO entrprsManageVO){
+ return (EntrprsManageVO) selectOne("entrprsManageDAO.selectPassword_S", entrprsManageVO);
+ }
+
+ /**
+ * 기 등록된 특정 기업회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<EntrprsManageVO>
+ */
+ @SuppressWarnings("unchecked")
+ public List<EntrprsManageVO> selectEntrprsMberList(UserDefaultVO userSearchVO){
+ return (List<EntrprsManageVO>) list("entrprsManageDAO.selectEntrprsMberList", userSearchVO);
+ }
+ /**
+ * 기업회원 총 갯수를 조회한다.
+ * @param userSearchVO 검색조건
+ * @return int 기업회원총갯수
+ */
+ public int selectEntrprsMberListTotCnt(UserDefaultVO userSearchVO) {
+ return (Integer)selectOne("entrprsManageDAO.selectEntrprsMberListTotCnt", userSearchVO);
+ }
+
+
+ /**
+ * 로그인인증제한 해제
+ * @param entrprsManageVO 기업회원정보
+ */
+ public void updateLockIncorrect(EntrprsManageVO entrprsManageVO) {
+ update("entrprsManageDAO.updateLockIncorrect", entrprsManageVO);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EntrprsManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovDeptManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovDeptManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovDeptManageServiceImpl.java (revision 7)
@@ -0,0 +1,82 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.uss.umt.service.DeptManageVO;
+import egovframework.com.uss.umt.service.EgovDeptManageService;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+@Service("egovDeptManageService")
+public class EgovDeptManageServiceImpl extends EgovAbstractServiceImpl implements EgovDeptManageService {
+
+ @Resource(name="deptManageDAO")
+ private DeptManageDAO deptManageDAO;
+
+ /**
+ * 부서를 관리하기 위해 등록된 부서목록을 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return List - 부서 목록
+ *
+ * @param deptManageVO
+ */
+ public List<DeptManageVO> selectDeptManageList(DeptManageVO deptManageVO) throws Exception {
+ return deptManageDAO.selectDeptManageList(deptManageVO);
+ }
+
+ /**
+ * 부서목록 총 갯수를 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return int - 부서 카운트 수
+ *
+ * @param deptManageVO
+ */
+ public int selectDeptManageListTotCnt(DeptManageVO deptManageVO) throws Exception {
+ return deptManageDAO.selectDeptManageListTotCnt(deptManageVO);
+ }
+
+ /**
+ * 등록된 부서의 상세정보를 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return deptManageVO - 부서 Vo
+ *
+ * @param deptManageVO
+ */
+ public DeptManageVO selectDeptManage(DeptManageVO deptManageVO) throws Exception {
+ return deptManageDAO.selectDeptManage(deptManageVO);
+ }
+
+ /**
+ * 부서정보를 신규로 등록한다.
+ * @param deptManageVO - 부서 model
+ *
+ * @param deptManageVO
+ */
+ public void insertDeptManage(DeptManageVO deptManageVO) throws Exception {
+ deptManageDAO.insertDeptManage(deptManageVO);
+ }
+
+ /**
+ * 기 등록된 부서정보를 수정한다.
+ * @param deptManageVO - 부서 model
+ *
+ * @param deptManageVO
+ */
+ public void updateDeptManage(DeptManageVO deptManageVO) throws Exception {
+ deptManageDAO.updateDeptManage(deptManageVO);
+ }
+
+ /**
+ * 기 등록된 부서정보를 삭제한다.
+ * @param deptManageVO - 부서 model
+ *
+ * @param deptManageVO
+ */
+ public void deleteDeptManage(DeptManageVO deptManageVO) throws Exception {
+ deptManageDAO.deleteDeptManage(deptManageVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/EgovDeptManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/UserManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/impl/UserManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/impl/UserManageDAO.java (revision 7)
@@ -0,0 +1,128 @@
+package egovframework.com.uss.umt.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.uss.umt.service.UserDefaultVO;
+import egovframework.com.uss.umt.service.UserManageVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 사용자관리에 관한 데이터 접근 클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+@Repository("userManageDAO")
+public class UserManageDAO extends EgovComAbstractDAO{
+
+ /**
+ * 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인
+ * @param checkId 중복체크대상 아이디
+ * @return int 사용가능여부(아이디 사용회수 )
+ */
+ public int checkIdDplct(String checkId){
+ return (Integer)selectOne("userManageDAO.checkIdDplct_S", checkId);
+ }
+
+ /**
+ * 화면에 조회된 사용자의 정보를 데이터베이스에서 삭제
+ * @param delId 삭제대상 업무사용자 아이디
+ */
+ public void deleteUser(String delId){
+ delete("userManageDAO.deleteUser_S", delId);
+ }
+
+
+ /**
+ * 사용자의 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param userManageVO 업무사용자 등록정보
+ * @return String result 등록결과
+ */
+ public String insertUser(UserManageVO userManageVO){
+ return String.valueOf((int)insert("userManageDAO.insertUser_S", userManageVO));
+ }
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는 사용자들의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param uniqId 상세조회대상 업무사용자아이디
+ * @return UserManageVO 업무사용자 상세정보
+ */
+ public UserManageVO selectUser(String uniqId){
+ return (UserManageVO) selectOne("userManageDAO.selectUser_S", uniqId);
+ }
+
+ /**
+ * 기 등록된 특정 사용자의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List 업무사용자 목록정보
+ */
+ public List<?> selectUserList(UserDefaultVO userSearchVO){
+ return list("userManageDAO.selectUserList_S", userSearchVO);
+ }
+
+ /**
+ * 사용자총 갯수를 조회한다.
+ * @param userSearchVO 검색조건
+ * @return int 업무사용자 총갯수
+ */
+ public int selectUserListTotCnt(UserDefaultVO userSearchVO) {
+ return (Integer)selectOne("userManageDAO.selectUserListTotCnt_S", userSearchVO);
+ }
+
+ /**
+ * 화면에 조회된 사용자의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param userManageVO 업무사용자 수정정보
+ */
+ public void updateUser(UserManageVO userManageVO){
+ update("userManageDAO.updateUser_S",userManageVO);
+ }
+
+ /**
+ * 사용자정보 수정시 히스토리 정보를 추가
+ * @param userManageVO 업무사용자 히스토리 정보
+ * @return String 히스토리 등록결과
+ */
+ public String insertUserHistory(UserManageVO userManageVO){
+ return String.valueOf((int)insert("userManageDAO.insertUserHistory_S", userManageVO));
+ }
+
+ /**
+ * 업무사용자 암호수정
+ * @param passVO 업무사용자수정정보(비밀번호)
+ */
+ public void updatePassword(UserManageVO passVO) {
+ update("userManageDAO.updatePassword_S", passVO);
+ }
+
+ /**
+ * 업무사용자가 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param userManageVO 업무 사용자암호 조회조건정보
+ * @return UserManageVO 업무사용자 암호정보
+ */
+ public UserManageVO selectPassword(UserManageVO userManageVO){
+ return (UserManageVO) selectOne("userManageDAO.selectPassword_S", userManageVO);
+ }
+
+
+ /**
+ * 로그인인증제한 해제
+ * @param passVO 업무사용자
+ */
+ public void updateLockIncorrect(UserManageVO userManageVO) {
+ update("userManageDAO.updateLockIncorrect", userManageVO);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/impl/UserManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovEntrprsManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/EgovEntrprsManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/EgovEntrprsManageService.java (revision 7)
@@ -0,0 +1,101 @@
+package egovframework.com.uss.umt.service;
+
+import java.util.List;
+
+/**
+ * 기업회원관리에 관한 인터페이스클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+public interface EgovEntrprsManageService {
+
+ /**
+ * 기업회원의 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param entrprsManageVO 기업회원등록정보
+ * @return result 등록결과
+ * @throws Exception
+ */
+ public String insertEntrprsmber(EntrprsManageVO entrprsManageVO) throws Exception;
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는기업회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param entrprsmberId 조회대상 기업회원아이디
+ * @return entrprsManageVO 기업회원정보
+ * @throws Exception
+ */
+ public EntrprsManageVO selectEntrprsmber(String entrprsmberId) throws Exception;
+
+ /**
+ * 화면에 조회된 기업회원의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param entrprsManageVO 기업회원수정정보
+ * @throws Exception
+ */
+ public void updateEntrprsmber(EntrprsManageVO entrprsManageVO) throws Exception;
+
+ /**
+ * 화면에 조회된 기업회원의 정보를 데이터베이스에서 삭제
+ * @param checkedIdForDel 삭제대상기업회원아이디
+ * @throws Exception
+ */
+ public void deleteEntrprsmber(String checkedIdForDel) throws Exception;
+
+ /**
+ * 기업회원용 약관정보 조회
+ * @param stplatId 기업회원약관아이디
+ * @return stplatList 기업회원약관정보
+ * @throws Exception
+ */
+ public List<?> selectStplat(String stplatId) throws Exception;
+
+ /**
+ * 기업회원암호수정
+ * @param entrprsManageVO 기업회원수정정보(비밀번호)
+ * @throws Exception
+ */
+ public void updatePassword(EntrprsManageVO entrprsManageVO) throws Exception;
+
+ /**
+ * 기업회원이 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param passVO 기업회원암호 조회조건정보
+ * @return entrprsManageVO 기업회원암호정보
+ * @throws Exception
+ */
+ public EntrprsManageVO selectPassword(EntrprsManageVO passVO) throws Exception;
+
+ /**
+ * 기 등록된기업 회원 중 검색조건에 맞는 회원들의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<EntrprsManageVO> 기업회원목록정보
+ * @throws Exception
+ */
+ public List<EntrprsManageVO> selectEntrprsMberList(UserDefaultVO userSearchVO) throws Exception;
+
+ /**
+ * 기업회원 총 갯수를 조회한다.
+ * @param userSearchVO 검색조건
+ * @return 사용자 총 갯수(int)
+ * @throws Exception
+ */
+ public int selectEntrprsMberListTotCnt(UserDefaultVO userSearchVO) throws Exception;
+
+
+ /**
+ * 로그인인증제한 해제
+ * @param entrprsManageVO 기업회원정보
+ * @return void
+ * @throws Exception
+ */
+ public void updateLockIncorrect(EntrprsManageVO entrprsManageVO) throws Exception;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovEntrprsManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/UserDefaultVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/UserDefaultVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/UserDefaultVO.java (revision 7)
@@ -0,0 +1,217 @@
+package egovframework.com.uss.umt.service;
+
+import java.io.Serializable;
+
+/**
+ * 사용자정보 VO클래스로서일반회원, 기업회원, 업무사용자의 비지니스로직 처리시 기타조건성 항을 구성한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ *
+ * </pre>
+ */
+public class UserDefaultVO implements Serializable {
+
+ private static final long serialVersionUID = 4829684178121022508L;
+
+ /** 검색조건-회원상태 (0, A, D, P)*/
+ private String sbscrbSttus = "0";
+
+ /** 검색조건 */
+ private String searchCondition = "";
+
+ /** 검색Keyword */
+ private String searchKeyword = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /**
+ * sbscrbSttus attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSbscrbSttus() {
+ return sbscrbSttus;
+ }
+
+ /**
+ * sbscrbSttus attribute 값을 설정한다.
+ * @param sbscrbSttus String
+ */
+ public void setSbscrbSttus(String sbscrbSttus) {
+ this.sbscrbSttus = sbscrbSttus;
+ }
+
+ /**
+ * searchCondition attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSearchCondition() {
+ return searchCondition;
+ }
+
+ /**
+ * searchCondition attribute 값을 설정한다.
+ * @param searchCondition String
+ */
+ public void setSearchCondition(String searchCondition) {
+ this.searchCondition = searchCondition;
+ }
+
+ /**
+ * searchKeyword attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSearchKeyword() {
+ return searchKeyword;
+ }
+
+ /**
+ * searchKeyword attribute 값을 설정한다.
+ * @param searchKeyword String
+ */
+ public void setSearchKeyword(String searchKeyword) {
+ this.searchKeyword = searchKeyword;
+ }
+
+ /**
+ * searchUseYn attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ * @param searchUseYn String
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute 값을 리턴한다.
+ * @return int
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ * @param pageIndex int
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute 값을 리턴한다.
+ * @return int
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ * @param pageUnit int
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute 값을 리턴한다.
+ * @return int
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ * @param pageSize int
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute 값을 리턴한다.
+ * @return int
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ * @param firstIndex int
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 리턴한다.
+ * @return int
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ * @param lastIndex int
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 리턴한다.
+ * @return int
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ * @param recordCountPerPage int
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/UserDefaultVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovUserManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/EgovUserManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/EgovUserManageService.java (revision 7)
@@ -0,0 +1,109 @@
+package egovframework.com.uss.umt.service;
+import java.util.List;
+
+/**
+ * 사용자관리에 관한 인터페이스클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+public interface EgovUserManageService {
+
+ /**
+ * 입력한 사용자아이디의 중복여부를 체크하여 사용가능여부를 확인
+ * @param checkId 중복여부 확인대상 아이디
+ * @return 사용가능여부(아이디 사용회수 int)
+ * @throws Exception
+ */
+ public int checkIdDplct(String checkId) throws Exception;
+
+ /**
+ * 화면에 조회된 사용자의 정보를 데이터베이스에서 삭제
+ * @param checkedIdForDel 삭제대상 업무사용자아이디
+ * @throws Exception
+ */
+ public void deleteUser(String checkedIdForDel) throws Exception;
+
+ /**
+ * @param userManageVO 업무사용자 등록정보
+ * @return result 등록결과
+ * @throws Exception
+ */
+ public String insertUser(UserManageVO userManageVO) throws Exception;
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는 사용자의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param emplyrId 상세조회대상 업무사용자 아이디
+ * @return userManageVO 업무사용자 상세정보
+ * @throws Exception
+ */
+ public UserManageVO selectUser(String emplyrId) throws Exception;
+
+ /**
+ * 기 등록된 특정 사용자의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<UserManageVO> 업무사용자 목록정보
+ * @throws Exception
+ */
+ public List<?> selectUserList(UserDefaultVO userSearchVO) throws Exception;
+
+ /**
+ * 기 등록된 특정 사용자목록의 전체수를 확인
+ * @param userSearchVO 검색조건
+ * @return 총사용자갯수(int)
+ * @throws Exception
+ */
+ public int selectUserListTotCnt(UserDefaultVO userSearchVO) throws Exception;
+
+ /**
+ * 화면에 조회된 사용자의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param userManageVO 업무사용자 수정정보
+ * @throws Exception
+ */
+ public void updateUser(UserManageVO userManageVO) throws Exception;
+
+ /**
+ * 사용자정보 수정시 히스토리 정보를 추가
+ * @param userManageVO 업무사용자 수정정보
+ * @return result 등록결과
+ * @throws Exception
+ */
+ public String insertUserHistory(UserManageVO userManageVO) throws Exception;
+
+ /**
+ * 업무사용자 암호 수정
+ * @param userManageVO 업무사용자 수정정보(비밀번호)
+ * @throws Exception
+ */
+ public void updatePassword(UserManageVO userManageVO) throws Exception;
+
+ /**
+ * 사용자가 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param passVO 업무사용자 암호 조회조건정보
+ * @return userManageVO 업무사용자 암호정보
+ * @throws Exception
+ */
+ public UserManageVO selectPassword(UserManageVO passVO) throws Exception;
+
+
+ /**
+ * 로그인인증제한 해제
+ * @param userManageVO 업무사용자 수정정보
+ * @return void
+ * @throws Exception
+ */
+ public void updateLockIncorrect(UserManageVO userManageVO) throws Exception;
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovUserManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/StplatVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/StplatVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/StplatVO.java (revision 7)
@@ -0,0 +1,82 @@
+package egovframework.com.uss.umt.service;
+
+import java.io.Serializable;
+
+/**
+ * 가입약관VO클래스로서가입약관확인시 비지니스로직 처리용 항목을 구성한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ *
+ * </pre>
+ */
+public class StplatVO implements Serializable {
+
+ private static final long serialVersionUID = 3744005602026645L;
+
+ /** 약관아이디*/
+ private String useStplatId;
+
+ /** 사용약관안내*/
+ private String useStplatCn;
+
+ /** 정보동의안내*/
+ private String infoProvdAgeCn;
+
+ /**
+ * useStplatId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUseStplatId() {
+ return useStplatId;
+ }
+
+ /**
+ * useStplatId attribute 값을 설정한다.
+ * @param useStplatId String
+ */
+ public void setUseStplatId(String useStplatId) {
+ this.useStplatId = useStplatId;
+ }
+
+ /**
+ * useStplatCn attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUseStplatCn() {
+ return useStplatCn;
+ }
+
+ /**
+ * useStplatCn attribute 값을 설정한다.
+ * @param useStplatCn String
+ */
+ public void setUseStplatCn(String useStplatCn) {
+ this.useStplatCn = useStplatCn;
+ }
+
+ /**
+ * infoProvdAgeCn attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getInfoProvdAgeCn() {
+ return infoProvdAgeCn;
+ }
+
+ /**
+ * infoProvdAgeCn attribute 값을 설정한다.
+ * @param infoProvdAgeCn String
+ */
+ public void setInfoProvdAgeCn(String infoProvdAgeCn) {
+ this.infoProvdAgeCn = infoProvdAgeCn;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/StplatVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/UserManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/UserManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/UserManageVO.java (revision 7)
@@ -0,0 +1,605 @@
+package egovframework.com.uss.umt.service;
+
+/**
+ * 업무사용자VO클래스로서 업무사용자관리 비지니스로직 처리용 항목을 구성한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+public class UserManageVO extends UserDefaultVO{
+
+ private static final long serialVersionUID = 3640820362821490939L;
+
+ /** 이전비밀번호 - 비밀번호 변경시 사용*/
+ private String oldPassword = "";
+
+ /**
+ * 가입일
+ */
+ private String sbscrbDe;
+ /**
+ * 사용자고유아이디
+ */
+ private String uniqId="";
+ /**
+ * 사용자 유형
+ */
+ private String userTy;
+ /**
+ * 지역번호
+ */
+ private String areaNo;
+ /**
+ * 생일
+ */
+ private String brth;
+ /**
+ * 상세주소
+ */
+ private String detailAdres;
+ /**
+ * 이메일주소
+ */
+ private String emailAdres;
+ /**
+ * 사원번호
+ */
+ private String emplNo;
+ /**
+ * 사용자 ID
+ */
+ private String emplyrId;
+ /**
+ * 사용자 명
+ */
+ private String emplyrNm;
+ /**
+ * 사용자 상태
+ */
+ private String emplyrSttusCode;
+ /**
+ * 팩스번호
+ */
+ private String fxnum;
+ /**
+ * 그룹 ID
+ */
+ private String groupId;
+ /**
+ * 집 주소
+ */
+ private String homeadres;
+ /**
+ * 집끝전화번호
+ */
+ private String homeendTelno;
+ /**
+ * 집중간전화번호
+ */
+ private String homemiddleTelno;
+ /**
+ * 주민등록번호
+ */
+ private String ihidnum;
+ /**
+ * 소속기관코드
+ */
+ private String insttCode;
+ /**
+ * 검색조건 회원타입
+ */
+ private String mberTy;
+ /**
+ * 핸드폰번호
+ */
+ private String moblphonNo;
+ /**
+ * 직위명
+ */
+ private String ofcpsNm;
+ /**
+ * 사무실전화번호
+ */
+ private String offmTelno;
+ /**
+ * 조직 ID
+ */
+ private String orgnztId;
+ /**
+ * 비밀번호
+ */
+ private String password;
+ /**
+ * 비밀번호 정답
+ */
+ private String passwordCnsr;
+ /**
+ * 비밀번호 힌트
+ */
+ private String passwordHint;
+ /**
+ * 검색조건 가입일자 시작일
+ */
+ private String sbscrbDeBegin;
+ /**
+ * 검색조건 가입일자 종료일
+ */
+ private String sbscrbDeEnd;
+ /**
+ * 성별코드
+ */
+ private String sexdstnCode;
+ /**
+ * 우편번호
+ */
+ private String zip;
+ /**
+ * DN 값
+ */
+ private String subDn;
+
+ private String lockAt;
+ public String getLockAt() {return lockAt;}
+ public void setLockAt(String lockAt) {this.lockAt = lockAt;}
+
+ /**
+ * oldPassword attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getOldPassword() {
+ return oldPassword;
+ }
+ /**
+ * oldPassword attribute 값을 설정한다.
+ * @param oldPassword String
+ */
+ public void setOldPassword(String oldPassword) {
+ this.oldPassword = oldPassword;
+ }
+ /**
+ * sbscrbDe attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSbscrbDe() {
+ return sbscrbDe;
+ }
+ /**
+ * sbscrbDe attribute 값을 설정한다.
+ * @param sbscrbDe String
+ */
+ public void setSbscrbDe(String sbscrbDe) {
+ this.sbscrbDe = sbscrbDe;
+ }
+ /**
+ * uniqId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+ /**
+ * uniqId attribute 값을 설정한다.
+ * @param uniqId String
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+ /**
+ * userTy attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUserTy() {
+ return userTy;
+ }
+ /**
+ * userTy attribute 값을 설정한다.
+ * @param userTy String
+ */
+ public void setUserTy(String userTy) {
+ this.userTy = userTy;
+ }
+ /**
+ * areaNo attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getAreaNo() {
+ return areaNo;
+ }
+ /**
+ * areaNo attribute 값을 설정한다.
+ * @param areaNo String
+ */
+ public void setAreaNo(String areaNo) {
+ this.areaNo = areaNo;
+ }
+ /**
+ * brth attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getBrth() {
+ return brth;
+ }
+ /**
+ * brth attribute 값을 설정한다.
+ * @param brth String
+ */
+ public void setBrth(String brth) {
+ this.brth = brth;
+ }
+ /**
+ * detailAdres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getDetailAdres() {
+ return detailAdres;
+ }
+ /**
+ * detailAdres attribute 값을 설정한다.
+ * @param detailAdres String
+ */
+ public void setDetailAdres(String detailAdres) {
+ this.detailAdres = detailAdres;
+ }
+ /**
+ * emailAdres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEmailAdres() {
+ return emailAdres;
+ }
+ /**
+ * emailAdres attribute 값을 설정한다.
+ * @param emailAdres String
+ */
+ public void setEmailAdres(String emailAdres) {
+ this.emailAdres = emailAdres;
+ }
+ /**
+ * emplNo attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEmplNo() {
+ return emplNo;
+ }
+ /**
+ * emplNo attribute 값을 설정한다.
+ * @param emplNo String
+ */
+ public void setEmplNo(String emplNo) {
+ this.emplNo = emplNo;
+ }
+ /**
+ * emplyrId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEmplyrId() {
+ return emplyrId;
+ }
+ /**
+ * emplyrId attribute 값을 설정한다.
+ * @param emplyrId String
+ */
+ public void setEmplyrId(String emplyrId) {
+ this.emplyrId = emplyrId;
+ }
+ /**
+ * emplyrNm attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEmplyrNm() {
+ return emplyrNm;
+ }
+ /**
+ * emplyrNm attribute 값을 설정한다.
+ * @param emplyrNm String
+ */
+ public void setEmplyrNm(String emplyrNm) {
+ this.emplyrNm = emplyrNm;
+ }
+ /**
+ * emplyrSttusCode attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEmplyrSttusCode() {
+ return emplyrSttusCode;
+ }
+ /**
+ * emplyrSttusCode attribute 값을 설정한다.
+ * @param emplyrSttusCode String
+ */
+ public void setEmplyrSttusCode(String emplyrSttusCode) {
+ this.emplyrSttusCode = emplyrSttusCode;
+ }
+ /**
+ * fxnum attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getFxnum() {
+ return fxnum;
+ }
+ /**
+ * fxnum attribute 값을 설정한다.
+ * @param fxnum String
+ */
+ public void setFxnum(String fxnum) {
+ this.fxnum = fxnum;
+ }
+ /**
+ * groupId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getGroupId() {
+ return groupId;
+ }
+ /**
+ * groupId attribute 값을 설정한다.
+ * @param groupId String
+ */
+ public void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+ /**
+ * homeadres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getHomeadres() {
+ return homeadres;
+ }
+ /**
+ * homeadres attribute 값을 설정한다.
+ * @param homeadres String
+ */
+ public void setHomeadres(String homeadres) {
+ this.homeadres = homeadres;
+ }
+ /**
+ * homeendTelno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getHomeendTelno() {
+ return homeendTelno;
+ }
+ /**
+ * homeendTelno attribute 값을 설정한다.
+ * @param homeendTelno String
+ */
+ public void setHomeendTelno(String homeendTelno) {
+ this.homeendTelno = homeendTelno;
+ }
+ /**
+ * homemiddleTelno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getHomemiddleTelno() {
+ return homemiddleTelno;
+ }
+ /**
+ * homemiddleTelno attribute 값을 설정한다.
+ * @param homemiddleTelno String
+ */
+ public void setHomemiddleTelno(String homemiddleTelno) {
+ this.homemiddleTelno = homemiddleTelno;
+ }
+ /**
+ * ihidnum attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getIhidnum() {
+ return ihidnum;
+ }
+ /**
+ * ihidnum attribute 값을 설정한다.
+ * @param ihidnum String
+ */
+ public void setIhidnum(String ihidnum) {
+ this.ihidnum = ihidnum;
+ }
+ /**
+ * insttCode attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getInsttCode() {
+ return insttCode;
+ }
+ /**
+ * insttCode attribute 값을 설정한다.
+ * @param insttCode String
+ */
+ public void setInsttCode(String insttCode) {
+ this.insttCode = insttCode;
+ }
+ /**
+ * mberTy attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMberTy() {
+ return mberTy;
+ }
+ /**
+ * mberTy attribute 값을 설정한다.
+ * @param mberTy String
+ */
+ public void setMberTy(String mberTy) {
+ this.mberTy = mberTy;
+ }
+ /**
+ * moblphonNo attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getMoblphonNo() {
+ return moblphonNo;
+ }
+ /**
+ * moblphonNo attribute 값을 설정한다.
+ * @param moblphonNo String
+ */
+ public void setMoblphonNo(String moblphonNo) {
+ this.moblphonNo = moblphonNo;
+ }
+ /**
+ * ofcpsNm attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getOfcpsNm() {
+ return ofcpsNm;
+ }
+ /**
+ * ofcpsNm attribute 값을 설정한다.
+ * @param ofcpsNm String
+ */
+ public void setOfcpsNm(String ofcpsNm) {
+ this.ofcpsNm = ofcpsNm;
+ }
+ /**
+ * offmTelno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getOffmTelno() {
+ return offmTelno;
+ }
+ /**
+ * offmTelno attribute 값을 설정한다.
+ * @param offmTelno String
+ */
+ public void setOffmTelno(String offmTelno) {
+ this.offmTelno = offmTelno;
+ }
+ /**
+ * orgnztId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getOrgnztId() {
+ return orgnztId;
+ }
+ /**
+ * orgnztId attribute 값을 설정한다.
+ * @param orgnztId String
+ */
+ public void setOrgnztId(String orgnztId) {
+ this.orgnztId = orgnztId;
+ }
+ /**
+ * password attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getPassword() {
+ return password;
+ }
+ /**
+ * password attribute 값을 설정한다.
+ * @param password String
+ */
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ /**
+ * passwordCnsr attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getPasswordCnsr() {
+ return passwordCnsr;
+ }
+ /**
+ * passwordCnsr attribute 값을 설정한다.
+ * @param passwordCnsr String
+ */
+ public void setPasswordCnsr(String passwordCnsr) {
+ this.passwordCnsr = passwordCnsr;
+ }
+ /**
+ * passwordHint attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getPasswordHint() {
+ return passwordHint;
+ }
+ /**
+ * passwordHint attribute 값을 설정한다.
+ * @param passwordHint String
+ */
+ public void setPasswordHint(String passwordHint) {
+ this.passwordHint = passwordHint;
+ }
+ /**
+ * sbscrbDeBegin attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSbscrbDeBegin() {
+ return sbscrbDeBegin;
+ }
+ /**
+ * sbscrbDeBegin attribute 값을 설정한다.
+ * @param sbscrbDeBegin String
+ */
+ public void setSbscrbDeBegin(String sbscrbDeBegin) {
+ this.sbscrbDeBegin = sbscrbDeBegin;
+ }
+ /**
+ * sbscrbDeEnd attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSbscrbDeEnd() {
+ return sbscrbDeEnd;
+ }
+ /**
+ * sbscrbDeEnd attribute 값을 설정한다.
+ * @param sbscrbDeEnd String
+ */
+ public void setSbscrbDeEnd(String sbscrbDeEnd) {
+ this.sbscrbDeEnd = sbscrbDeEnd;
+ }
+ /**
+ * sexdstnCode attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSexdstnCode() {
+ return sexdstnCode;
+ }
+ /**
+ * sexdstnCode attribute 값을 설정한다.
+ * @param sexdstnCode String
+ */
+ public void setSexdstnCode(String sexdstnCode) {
+ this.sexdstnCode = sexdstnCode;
+ }
+ /**
+ * zip attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getZip() {
+ return zip;
+ }
+ /**
+ * zip attribute 값을 설정한다.
+ * @param zip String
+ */
+ public void setZip(String zip) {
+ this.zip = zip;
+ }
+ /**
+ * subDn attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSubDn() {
+ return subDn;
+ }
+ /**
+ * subDn attribute 값을 설정한다.
+ * @param subDn String
+ */
+ public void setSubDn(String subDn) {
+ this.subDn = subDn;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/UserManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/EntrprsManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/EntrprsManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/EntrprsManageVO.java (revision 7)
@@ -0,0 +1,498 @@
+package egovframework.com.uss.umt.service;
+
+/**
+ * 기업회원VO클래스로서 기업회원관리 비지니스로직 처리용 항목을 구성한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+public class EntrprsManageVO extends UserDefaultVO{
+
+ private static final long serialVersionUID = -6532736688851136256L;
+
+ /** 이전비밀번호 - 비밀번호 변경시 사용*/
+ private String oldPassword = "";
+
+ /**
+ * 사용자고유아이디
+ */
+ private String uniqId="";
+ /**
+ * 사용자 유형
+ */
+ private String userTy;
+ /**
+ * 주소
+ */
+ private String adres;
+ /**
+ * 상세주소
+ */
+ private String detailAdres;
+ /**
+ * 신청자 주민등록번호
+ */
+ private String applcntIhidnum;
+ /**
+ * 신청자 명
+ */
+ private String applcntNm;
+ /**
+ * 사업자번호
+ */
+ private String bizrno;
+ /**
+ * 회사명
+ */
+ private String cmpnyNm;
+ /**
+ * 대표이사
+ */
+ private String cxfc;
+ /**
+ * 기업 회원 ID
+ */
+ private String entrprsmberId;
+ /**
+ * 기업 회원 비밀번호
+ */
+ private String entrprsMberPassword;
+ /**
+ * 기업 회원 비밀번호 정답
+ */
+ private String entrprsMberPasswordCnsr;
+ /**
+ * 기업 회원 비밀번호 힌트
+ */
+ private String entrprsMberPasswordHint;
+ /**
+ * 기업 회원 상태
+ */
+ private String entrprsMberSttus;
+ /**
+ * 기업구분코드
+ */
+ private String entrprsSeCode;
+ /**
+ * 팩스번호
+ */
+ private String fxnum;
+ /**
+ * 그룹 ID
+ */
+ private String groupId;
+ /**
+ * 업종코드
+ */
+ private String indutyCode;
+ /**
+ * 법인등록번호
+ */
+ private String jurirno;
+ /**
+ * 지역번호
+ */
+ private String areaNo;
+ /**
+ * 회사끝전화번호
+ */
+ private String entrprsEndTelno;
+ /**
+ * 회사중간전화번호
+ */
+ private String entrprsMiddleTelno;
+ /**
+ * 가입 일자
+ */
+ private String sbscrbDe;
+ /**
+ * 우편번호
+ */
+ private String zip;
+ /**
+ * 신청자 이메일주소
+ */
+ private String applcntEmailAdres;
+
+ private String lockAt;
+ public String getLockAt() {return lockAt;}
+ public void setLockAt(String lockAt) {this.lockAt = lockAt;}
+
+ /**
+ * oldPassword attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getOldPassword() {
+ return oldPassword;
+ }
+ /**
+ * oldPassword attribute 값을 설정한다.
+ * @param oldPassword String
+ */
+ public void setOldPassword(String oldPassword) {
+ this.oldPassword = oldPassword;
+ }
+ /**
+ * uniqId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUniqId() {
+ return uniqId;
+ }
+ /**
+ * uniqId attribute 값을 설정한다.
+ * @param uniqId String
+ */
+ public void setUniqId(String uniqId) {
+ this.uniqId = uniqId;
+ }
+ /**
+ * userTy attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getUserTy() {
+ return userTy;
+ }
+ /**
+ * userTy attribute 값을 설정한다.
+ * @param userTy String
+ */
+ public void setUserTy(String userTy) {
+ this.userTy = userTy;
+ }
+ /**
+ * adres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getAdres() {
+ return adres;
+ }
+ /**
+ * adres attribute 값을 설정한다.
+ * @param adres String
+ */
+ public void setAdres(String adres) {
+ this.adres = adres;
+ }
+ /**
+ * detailAdres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getDetailAdres() {
+ return detailAdres;
+ }
+ /**
+ * detailAdres attribute 값을 설정한다.
+ * @param detailAdres String
+ */
+ public void setDetailAdres(String detailAdres) {
+ this.detailAdres = detailAdres;
+ }
+ /**
+ * applcntIhidnum attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getApplcntIhidnum() {
+ return applcntIhidnum;
+ }
+ /**
+ * applcntIhidnum attribute 값을 설정한다.
+ * @param applcntIhidnum String
+ */
+ public void setApplcntIhidnum(String applcntIhidnum) {
+ this.applcntIhidnum = applcntIhidnum;
+ }
+ /**
+ * applcntNm attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getApplcntNm() {
+ return applcntNm;
+ }
+ /**
+ * applcntNm attribute 값을 설정한다.
+ * @param applcntNm String
+ */
+ public void setApplcntNm(String applcntNm) {
+ this.applcntNm = applcntNm;
+ }
+ /**
+ * bizrno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getBizrno() {
+ return bizrno;
+ }
+ /**
+ * bizrno attribute 값을 설정한다.
+ * @param bizrno String
+ */
+ public void setBizrno(String bizrno) {
+ this.bizrno = bizrno;
+ }
+ /**
+ * cmpnyNm attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getCmpnyNm() {
+ return cmpnyNm;
+ }
+ /**
+ * cmpnyNm attribute 값을 설정한다.
+ * @param cmpnyNm String
+ */
+ public void setCmpnyNm(String cmpnyNm) {
+ this.cmpnyNm = cmpnyNm;
+ }
+ /**
+ * cxfc attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getCxfc() {
+ return cxfc;
+ }
+ /**
+ * cxfc attribute 값을 설정한다.
+ * @param cxfc String
+ */
+ public void setCxfc(String cxfc) {
+ this.cxfc = cxfc;
+ }
+ /**
+ * entrprsmberId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsmberId() {
+ return entrprsmberId;
+ }
+ /**
+ * entrprsmberId attribute 값을 설정한다.
+ * @param entrprsmberId String
+ */
+ public void setEntrprsmberId(String entrprsmberId) {
+ this.entrprsmberId = entrprsmberId;
+ }
+ /**
+ * entrprsMberPassword attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsMberPassword() {
+ return entrprsMberPassword;
+ }
+ /**
+ * entrprsMberPassword attribute 값을 설정한다.
+ * @param entrprsMberPassword String
+ */
+ public void setEntrprsMberPassword(String entrprsMberPassword) {
+ this.entrprsMberPassword = entrprsMberPassword;
+ }
+ /**
+ * entrprsMberPasswordCnsr attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsMberPasswordCnsr() {
+ return entrprsMberPasswordCnsr;
+ }
+ /**
+ * entrprsMberPasswordCnsr attribute 값을 설정한다.
+ * @param entrprsMberPasswordCnsr String
+ */
+ public void setEntrprsMberPasswordCnsr(String entrprsMberPasswordCnsr) {
+ this.entrprsMberPasswordCnsr = entrprsMberPasswordCnsr;
+ }
+ /**
+ * entrprsMberPasswordHint attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsMberPasswordHint() {
+ return entrprsMberPasswordHint;
+ }
+ /**
+ * entrprsMberPasswordHint attribute 값을 설정한다.
+ * @param entrprsMberPasswordHint String
+ */
+ public void setEntrprsMberPasswordHint(String entrprsMberPasswordHint) {
+ this.entrprsMberPasswordHint = entrprsMberPasswordHint;
+ }
+ /**
+ * entrprsMberSttus attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsMberSttus() {
+ return entrprsMberSttus;
+ }
+ /**
+ * entrprsMberSttus attribute 값을 설정한다.
+ * @param entrprsMberSttus String
+ */
+ public void setEntrprsMberSttus(String entrprsMberSttus) {
+ this.entrprsMberSttus = entrprsMberSttus;
+ }
+ /**
+ * entrprsSeCode attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsSeCode() {
+ return entrprsSeCode;
+ }
+ /**
+ * entrprsSeCode attribute 값을 설정한다.
+ * @param entrprsSeCode String
+ */
+ public void setEntrprsSeCode(String entrprsSeCode) {
+ this.entrprsSeCode = entrprsSeCode;
+ }
+ /**
+ * fxnum attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getFxnum() {
+ return fxnum;
+ }
+ /**
+ * fxnum attribute 값을 설정한다.
+ * @param fxnum String
+ */
+ public void setFxnum(String fxnum) {
+ this.fxnum = fxnum;
+ }
+ /**
+ * groupId attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getGroupId() {
+ return groupId;
+ }
+ /**
+ * groupId attribute 값을 설정한다.
+ * @param groupId String
+ */
+ public void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+ /**
+ * indutyCode attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getIndutyCode() {
+ return indutyCode;
+ }
+ /**
+ * indutyCode attribute 값을 설정한다.
+ * @param indutyCode String
+ */
+ public void setIndutyCode(String indutyCode) {
+ this.indutyCode = indutyCode;
+ }
+ /**
+ * jurirno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getJurirno() {
+ return jurirno;
+ }
+ /**
+ * jurirno attribute 값을 설정한다.
+ * @param jurirno String
+ */
+ public void setJurirno(String jurirno) {
+ this.jurirno = jurirno;
+ }
+ /**
+ * areaNo attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getAreaNo() {
+ return areaNo;
+ }
+ /**
+ * areaNo attribute 값을 설정한다.
+ * @param areaNo String
+ */
+ public void setAreaNo(String areaNo) {
+ this.areaNo = areaNo;
+ }
+ /**
+ * entrprsEndTelno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsEndTelno() {
+ return entrprsEndTelno;
+ }
+ /**
+ * entrprsEndTelno attribute 값을 설정한다.
+ * @param entrprsEndTelno String
+ */
+ public void setEntrprsEndTelno(String entrprsEndTelno) {
+ this.entrprsEndTelno = entrprsEndTelno;
+ }
+ /**
+ * entrprsMiddleTelno attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getEntrprsMiddleTelno() {
+ return entrprsMiddleTelno;
+ }
+ /**
+ * entrprsMiddleTelno attribute 값을 설정한다.
+ * @param entrprsMiddleTelno String
+ */
+ public void setEntrprsMiddleTelno(String entrprsMiddleTelno) {
+ this.entrprsMiddleTelno = entrprsMiddleTelno;
+ }
+ /**
+ * sbscrbDe attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getSbscrbDe() {
+ return sbscrbDe;
+ }
+ /**
+ * sbscrbDe attribute 값을 설정한다.
+ * @param sbscrbDe String
+ */
+ public void setSbscrbDe(String sbscrbDe) {
+ this.sbscrbDe = sbscrbDe;
+ }
+ /**
+ * zip attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getZip() {
+ return zip;
+ }
+ /**
+ * zip attribute 값을 설정한다.
+ * @param zip String
+ */
+ public void setZip(String zip) {
+ this.zip = zip;
+ }
+ /**
+ * applcntEmailAdres attribute 값을 리턴한다.
+ * @return String
+ */
+ public String getApplcntEmailAdres() {
+ return applcntEmailAdres;
+ }
+ /**
+ * applcntEmailAdres attribute 값을 설정한다.
+ * @param applcntEmailAdres String
+ */
+ public void setApplcntEmailAdres(String applcntEmailAdres) {
+ this.applcntEmailAdres = applcntEmailAdres;
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/EntrprsManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovMberManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/EgovMberManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/EgovMberManageService.java (revision 7)
@@ -0,0 +1,101 @@
+package egovframework.com.uss.umt.service;
+
+import java.util.List;
+
+/**
+ * 일반회원관리에 관한 인터페이스클래스를 정의한다.
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.10 조재영 최초 생성
+ * 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * </pre>
+ */
+public interface EgovMberManageService {
+
+ /**
+ * 사용자의 기본정보를 화면에서 입력하여 항목의 정합성을 체크하고 데이터베이스에 저장
+ * @param mberManageVO 일반회원 등록정보
+ * @return 등록결과
+ * @throws Exception
+ */
+ public String insertMber(MberManageVO mberManageVO) throws Exception;
+
+ /**
+ * 기 등록된 사용자 중 검색조건에 맞는 일반회원의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param mberId 상세조회대상 일반회원아이디
+ * @return mberManageVO 일반회원상세정보
+ * @throws Exception
+ */
+ public MberManageVO selectMber(String mberId) throws Exception;
+
+ /**
+ * 기 등록된 회원 중 검색조건에 맞는 회원들의 정보를 데이터베이스에서 읽어와 화면에 출력
+ * @param userSearchVO 검색조건
+ * @return List<MberManageVO> 일반회원목록정보
+ * @throws Exception
+ */
+ public List<MberManageVO> selectMberList(UserDefaultVO userSearchVO) throws Exception;
+
+ /**
+ * 일반회원 총 갯수를 조회한다.
+ * @param userSearchVO 검색조건
+ * @return 일반회원총갯수(int)
+ * @throws Exception
+ */
+ public int selectMberListTotCnt(UserDefaultVO userSearchVO) throws Exception;
+
+ /**
+ * 화면에 조회된 일반회원의 기본정보를 수정하여 항목의 정합성을 체크하고 수정된 데이터를 데이터베이스에 반영
+ * @param mberManageVO 일반회원수정정보
+ * @throws Exception
+ */
+ public void updateMber(MberManageVO mberManageVO) throws Exception;
+
+ /**
+ * 화면에 조회된 사용자의 정보를 데이터베이스에서 삭제
+ * @param checkedIdForDel 삭제대상 일반회원아이디
+ * @throws Exception
+ */
+ public void deleteMber(String checkedIdForDel) throws Exception;
+
+ /**
+ * 일반회원 약관확인
+ * @param stplatId 일반회원약관아이디
+ * @return 일반회원약관정보(List)
+ * @throws Exception
+ */
+ public List<?> selectStplat(String stplatId) throws Exception;
+
+ /**
+ * 일반회원암호수정
+ * @param mberManageVO 일반회원수정정보(비밀번호)
+ * @throws Exception
+ */
+ public void updatePassword(MberManageVO mberManageVO) throws Exception;
+
+ /**
+ * 일반회원이 비밀번호를 기억하지 못할 때 비밀번호를 찾을 수 있도록 함
+ * @param passVO 일반회원암호 조회조건정보
+ * @return mberManageVO 일반회원암호정보
+ * @throws Exception
+ */
+ public MberManageVO selectPassword(MberManageVO passVO) throws Exception;
+
+ /**
+ * 로그인인증제한 해제
+ * @param mberManageVO 일반회원정보
+ * @return void
+ * @throws Exception
+ */
+ public void updateLockIncorrect(MberManageVO mberManageVO) throws Exception;
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovMberManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/DeptManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/DeptManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/DeptManageVO.java (revision 7)
@@ -0,0 +1,50 @@
+package egovframework.com.uss.umt.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+public class DeptManageVO extends ComDefaultVO {
+
+ private static final long serialVersionUID = 1L;
+ private String orgnztId;
+ private String orgnztNm;
+ private String orgnztDc;
+
+ /**
+ * @return the orgnztId
+ */
+ public String getOrgnztId() {
+ return orgnztId;
+ }
+ /**
+ * @param orgnztId the orgnztId to set
+ */
+ public void setOrgnztId(String orgnztId) {
+ this.orgnztId = orgnztId;
+ }
+ /**
+ * @return the orgnztNm
+ */
+ public String getOrgnztNm() {
+ return orgnztNm;
+ }
+ /**
+ * @param orgnztNm the orgnztNm to set
+ */
+ public void setOrgnztNm(String orgnztNm) {
+ this.orgnztNm = orgnztNm;
+ }
+ /**
+ * @return the orgnztDc
+ */
+ public String getOrgnztDc() {
+ return orgnztDc;
+ }
+ /**
+ * @param orgnztDc the orgnztDc to set
+ */
+ public void setOrgnztDc(String orgnztDc) {
+ this.orgnztDc = orgnztDc;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/DeptManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovDeptManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uss/umt/service/EgovDeptManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uss/umt/service/EgovDeptManageService.java (revision 7)
@@ -0,0 +1,57 @@
+package egovframework.com.uss.umt.service;
+
+import java.util.List;
+
+public interface EgovDeptManageService {
+
+ /**
+ * 부서를 관리하기 위해 등록된 부서목록을 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return List - 부서 목록
+ *
+ * @param deptManageVO
+ */
+ public List<DeptManageVO> selectDeptManageList(DeptManageVO deptManageVO) throws Exception;
+
+ /**
+ * 부서목록 총 갯수를 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return int - 부서 카운트 수
+ *
+ * @param deptManageVO
+ */
+ public int selectDeptManageListTotCnt(DeptManageVO deptManageVO) throws Exception;
+
+ /**
+ * 등록된 부서의 상세정보를 조회한다.
+ * @param deptManageVO - 부서 Vo
+ * @return deptManageVO - 부서 Vo
+ *
+ * @param deptManageVO
+ */
+ public DeptManageVO selectDeptManage(DeptManageVO deptManageVO) throws Exception;
+
+ /**
+ * 부서정보를 신규로 등록한다.
+ * @param deptManageVO - 부서 model
+ *
+ * @param deptManageVO
+ */
+ public void insertDeptManage(DeptManageVO deptManageVO) throws Exception;
+
+ /**
+ * 기 등록된 부서정보를 수정한다.
+ * @param deptManageVO - 부서 model
+ *
+ * @param deptManageVO
+ */
+ public void updateDeptManage(DeptManageVO deptManageVO) throws Exception;
+
+ /**
+ * 기 등록된 부서정보를 삭제한다.
+ * @param deptManageVO - 부서 model
+ *
+ * @param deptManageVO
+ */
+ public void deleteDeptManage(DeptManageVO deptManageVO) throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/uss/umt/service/EgovDeptManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/ulg/web/EgovUserLogController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/ulg/web/EgovUserLogController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/ulg/web/EgovUserLogController.java (revision 7)
@@ -0,0 +1,112 @@
+package egovframework.com.sym.log.ulg.web;
+
+import java.util.HashMap;
+
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sym.log.ulg.service.EgovUserLogService;
+import egovframework.com.sym.log.ulg.service.UserLog;
+
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @Class Name : EgovUserLogController.java
+ * @Description : 사용로그정보를 관리하기 위한 컨트롤러 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.ulg)
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * 2017.09.14 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+@Controller
+public class EgovUserLogController {
+
+ @Resource(name="EgovUserLogService")
+ private EgovUserLogService userLogService;
+
+ @Resource(name="propertiesService")
+ protected EgovPropertyService propertyService;
+
+ /**
+ * 사용자 로그 목록 조회
+ *
+ * @param UserLog
+ * @return sym/log/ulg/EgovUserLogList
+ * @throws Exception
+ */
+ @IncludedInfo(name="사용로그관리", listUrl= "/sym/log/ulg/SelectUserLogList.do", order = 1040 ,gid = 60)
+ @RequestMapping(value="/sym/log/ulg/SelectUserLogList.do")
+ public String selectUserLogInf(@ModelAttribute("searchVO") UserLog userLog,
+ ModelMap model) throws Exception{
+
+ /** EgovPropertyService.sample */
+ userLog.setPageUnit(propertyService.getInt("pageUnit"));
+ userLog.setPageSize(propertyService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(userLog.getPageIndex());
+ paginationInfo.setRecordCountPerPage(userLog.getPageUnit());
+ paginationInfo.setPageSize(userLog.getPageSize());
+
+ userLog.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ userLog.setLastIndex(paginationInfo.getLastRecordIndex());
+ userLog.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ HashMap<?, ?> _map = (HashMap<?, ?>)userLogService.selectUserLogInf(userLog);
+ int totCnt = Integer.parseInt((String)_map.get("resultCnt"));
+
+ model.addAttribute("resultList", _map.get("resultList"));
+ model.addAttribute("resultCnt", _map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/log/ulg/EgovUserLogList";
+ }
+
+ /**
+ * 사용자 로그 상세 조회
+ *
+ * @param userLog
+ * @param model
+ * @return sym/log/ulg/EgovUserLogInqire
+ * @throws Exception
+ */
+ @RequestMapping(value="/sym/log/ulg/SelectUserLogDetail.do")
+ public String selectUserLog(@ModelAttribute("searchVO") UserLog userLog,
+ @RequestParam("occrrncDe") String occrrncDe,
+ @RequestParam("rqesterId") String rqesterId,
+ @RequestParam("srvcNm") String srvcNm,
+ @RequestParam("methodNm") String methodNm,
+ ModelMap model) throws Exception{
+
+ userLog.setOccrrncDe(occrrncDe.trim());
+ userLog.setRqesterId(rqesterId.trim());
+ userLog.setSrvcNm(srvcNm.trim());
+ userLog.setMethodNm(methodNm.trim());
+
+ UserLog vo = userLogService.selectUserLog(userLog);
+ model.addAttribute("result", vo);
+ return "egovframework/com/sym/log/ulg/EgovUserLogDetail";
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/ulg/web/EgovUserLogController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java (revision 7)
@@ -0,0 +1,74 @@
+package egovframework.com.sym.log.ulg.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.log.ulg.service.UserLog;
+
+/**
+ * @Class Name : UserLogDAO.java
+ * @Description : 사용로그 관리를 위한 데이터 접근 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.ulg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Repository("userLogDAO")
+public class UserLogDAO extends EgovComAbstractDAO {
+
+ /**
+ * 사용자 로그정보를 생성한다.
+ *
+ * @param
+ * @return
+ * @throws Exception
+ */
+ public void logInsertUserLog() throws Exception{
+ insert("UserLog.logInsertUserLog", null);
+ }
+
+ /**
+ * 사용자 로그정보 상세정보를 조회한다.
+ *
+ * @param userLog
+ * @return userLog
+ * @throws Exception
+ */
+ public UserLog selectUserLog(UserLog userLog) throws Exception{
+
+ return (UserLog) selectOne("UserLog.selectUserLog", userLog);
+ }
+
+ /**
+ * 사용자 로그정보 목록을 조회한다.
+ *
+ * @param UserLog
+ * @return
+ * @throws Exception
+ */
+ public List<?> selectUserLogInf(UserLog userLog) throws Exception{
+ return list("UserLog.selectUserLogInf", userLog);
+ }
+
+ /**
+ * 사용자 로그정보 목록의 숫자를 조회한다.
+ * @param UserLog
+ * @return
+ * @throws Exception
+ */
+ public int selectUserLogInfCnt(UserLog userLog) throws Exception{
+
+ return (Integer)selectOne("UserLog.selectUserLogInfCnt", userLog);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/UserLogDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/EgovUserLogServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/EgovUserLogServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/EgovUserLogServiceImpl.java (revision 7)
@@ -0,0 +1,79 @@
+package egovframework.com.sym.log.ulg.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.sym.log.ulg.service.EgovUserLogService;
+import egovframework.com.sym.log.ulg.service.UserLog;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+/**
+ * @Class Name : EgovUserLogServiceImpl.java
+ * @Description : 사용로그 관리를 위한 서비스 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.ulg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Service("EgovUserLogService")
+public class EgovUserLogServiceImpl extends EgovAbstractServiceImpl implements
+ EgovUserLogService {
+
+ @Resource(name="userLogDAO")
+ private UserLogDAO userLogDAO;
+
+ /**
+ * 사용자 로그정보를 생성한다.
+ *
+ * @param
+ */
+ @Override
+ public void logInsertUserLog() throws Exception {
+
+ userLogDAO.logInsertUserLog();
+ }
+
+ /**
+ * 사용자 로그정보 상제정보를 조회한다.
+ *
+ * @param userLog
+ * @return userLog
+ * @throws Exception
+ */
+ @Override
+ public UserLog selectUserLog(UserLog userLog) throws Exception{
+
+ return userLogDAO.selectUserLog(userLog);
+ }
+
+ /**
+ * 사용자 로그정보 목록을 조회한다.
+ *
+ * @param UserLog
+ */
+ @Override
+ public Map<?, ?> selectUserLogInf(UserLog userLog) throws Exception {
+ List<?> _result = userLogDAO.selectUserLogInf(userLog);
+ int _cnt = userLogDAO.selectUserLogInfCnt(userLog);
+
+ Map<String, Object> _map = new HashMap<String, Object>();
+ _map.put("resultList", _result);
+ _map.put("resultCnt", Integer.toString(_cnt));
+
+ return _map;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/impl/EgovUserLogServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java (revision 7)
@@ -0,0 +1,335 @@
+package egovframework.com.sym.log.ulg.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * @Class Name : UserLog.java
+ * @Description : 사용자 로그 관리를 위한 VO 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.ulg)
+ * 2011.09.14 서준식 화면에 검색일자를 표시하기위한 멤버변수 추가.
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+public class UserLog implements Serializable {
+
+ private static final long serialVersionUID = -3030641254553776910L;
+ /**
+ * 발생일자
+ */
+ private String occrrncDe = "";
+ /**
+ * 요청자아이디
+ */
+ private String rqesterId = "";
+ /**
+ * 요청자 이름
+ */
+ private String rqsterNm = "";
+ /**
+ * 메서드명
+ */
+ private String methodNm = "";
+ /**
+ * 서비스명
+ */
+ private String srvcNm = "";
+ /**
+ * 생성횟수
+ */
+ private String creatCo = "";
+ /**
+ * 수정횟수
+ */
+ private String updtCo = "";
+ /**
+ * 조회횟수
+ */
+ private String rdCnt = "";
+ /**
+ * 삭제횟수
+ */
+ private String deleteCo = "";
+ /**
+ * 출력횟수
+ */
+ private String outptCo = "";
+ /**
+ * 에러횟수
+ */
+ private String errorCo = "";
+ /**
+ * 검색시작일
+ */
+ private String searchBgnDe = "";
+ /**
+ * 검색조건
+ */
+ private String searchCnd = "";
+ /**
+ * 검색종료일
+ */
+ private String searchEndDe = "";
+ /**
+ * 검색단어
+ */
+ private String searchWrd = "";
+ /**
+ * 정렬순서(DESC,ASC)
+ */
+ private String sortOrdr = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /** rowNo */
+ private int rowNo = 0;
+
+ /**
+ * 검색시작일_화면용
+ */
+ private String searchBgnDeView = "";//2011.09.14
+
+ /**
+ * 검색종료일_화면용
+ */
+ private String searchEndDeView = "";//2011.09.14
+
+ public String getSearchEndDeView() {
+ return searchEndDeView;
+ }
+ public void setSearchEndDeView(String searchEndDeView) {
+ this.searchEndDeView = searchEndDeView;
+ }
+ public String getSearchBgnDeView() {
+ return searchBgnDeView;
+ }
+ public void setSearchBgnDeView(String searchBgnDeView) {
+ this.searchBgnDeView = searchBgnDeView;
+ }
+
+ @Override
+ public String toString(){
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+ public String getOccrrncDe() {
+ return occrrncDe;
+ }
+
+ public void setOccrrncDe(String occrrncDe) {
+ this.occrrncDe = occrrncDe;
+ }
+
+ public String getRqesterId() {
+ return rqesterId;
+ }
+
+ public void setRqesterId(String rqesterId) {
+ this.rqesterId = rqesterId;
+ }
+
+ public String getRqsterNm() {
+ return rqsterNm;
+ }
+
+ public void setRqsterNm(String rqsterNm) {
+ this.rqsterNm = rqsterNm;
+ }
+
+ public String getMethodNm() {
+ return methodNm;
+ }
+
+ public void setMethodNm(String methodNm) {
+ this.methodNm = methodNm;
+ }
+
+ public String getSrvcNm() {
+ return srvcNm;
+ }
+
+ public void setSrvcNm(String srvcNm) {
+ this.srvcNm = srvcNm;
+ }
+
+ public String getCreatCo() {
+ return creatCo;
+ }
+
+ public void setCreatCo(String creatCo) {
+ this.creatCo = creatCo;
+ }
+
+ public String getUpdtCo() {
+ return updtCo;
+ }
+
+ public void setUpdtCo(String updtCo) {
+ this.updtCo = updtCo;
+ }
+
+ public String getRdCnt() {
+ return rdCnt;
+ }
+
+ public void setRdCnt(String rdCnt) {
+ this.rdCnt = rdCnt;
+ }
+
+ public String getDeleteCo() {
+ return deleteCo;
+ }
+
+ public void setDeleteCo(String deleteCo) {
+ this.deleteCo = deleteCo;
+ }
+
+ public String getOutptCo() {
+ return outptCo;
+ }
+
+ public void setOutptCo(String outptCo) {
+ this.outptCo = outptCo;
+ }
+
+ public String getErrorCo() {
+ return errorCo;
+ }
+
+ public void setErrorCo(String errorCo) {
+ this.errorCo = errorCo;
+ }
+
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ public String getSortOrdr() {
+ return sortOrdr;
+ }
+
+ public void setSortOrdr(String sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/UserLog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogService.java (revision 7)
@@ -0,0 +1,46 @@
+package egovframework.com.sym.log.ulg.service;
+
+import java.util.Map;
+
+/**
+ * @Class Name : EgovUserLogService.java
+ * @Description : 사용로그 관리를 위한 서비스 인터페이스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.ulg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+public interface EgovUserLogService {
+
+ /**
+ * 사용자 로그정보를 생성한다.
+ *
+ * @param
+ */
+ public void logInsertUserLog() throws Exception;
+
+ /**
+ * 사용자로그 상세정보를 조회한다.
+ *
+ * @param userLog
+ * @return userLog
+ * @throws Exception
+ */
+ public UserLog selectUserLog(UserLog userLog) throws Exception;
+
+ /**
+ * 사용자 로그정보 목록을 조회한다.
+ *
+ * @param UserLog
+ */
+ public Map<?, ?> selectUserLogInf(UserLog userLog) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogScheduling.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogScheduling.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogScheduling.java (revision 7)
@@ -0,0 +1,42 @@
+package egovframework.com.sym.log.ulg.service;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovUserLogScheduling.java
+ * @Description : 사용로그 요약을 위한 스케쥴링 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.ulg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Service("egovUserLogScheduling")
+public class EgovUserLogScheduling extends EgovAbstractServiceImpl {
+
+ @Resource(name="EgovUserLogService")
+ private EgovUserLogService userLogService;
+
+ /**
+ * 사용자 로그정보를 생성한다.
+ *
+ * @param
+ * @return
+ * @throws Exception
+ */
+ public void userLogInsert() throws Exception {
+ userLogService.logInsertUserLog();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/ulg/service/EgovUserLogScheduling.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/lgm/web/EgovSysLogController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/lgm/web/EgovSysLogController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/lgm/web/EgovSysLogController.java (revision 7)
@@ -0,0 +1,106 @@
+package egovframework.com.sym.log.lgm.web;
+
+import java.util.HashMap;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sym.log.lgm.service.EgovSysLogService;
+import egovframework.com.sym.log.lgm.service.SysLog;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * @Class Name : EgovSysLogController.java
+ * @Description : 시스템 로그정보를 관리하기 위한 컨트롤러 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.lgm)
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * 2017.09.14 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+@Controller
+public class EgovSysLogController {
+
+ @Resource(name="EgovSysLogService")
+ private EgovSysLogService sysLogService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /**
+ * 시스템 로그 목록 조회
+ *
+ * @param sysLog
+ * @return sym/log/lgm/EgovSysLogList
+ * @throws Exception
+ */
+ @IncludedInfo(name="로그관리", listUrl="/sym/log/lgm/SelectSysLogList.do", order = 1030 ,gid = 60)
+ @RequestMapping(value="/sym/log/lgm/SelectSysLogList.do")
+ public String selectSysLogInf(@ModelAttribute("searchVO") SysLog sysLog,
+ ModelMap model) throws Exception{
+
+ /** EgovPropertyService.sample */
+ sysLog.setPageUnit(propertiesService.getInt("pageUnit"));
+ sysLog.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(sysLog.getPageIndex());
+ paginationInfo.setRecordCountPerPage(sysLog.getPageUnit());
+ paginationInfo.setPageSize(sysLog.getPageSize());
+
+ sysLog.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ sysLog.setLastIndex(paginationInfo.getLastRecordIndex());
+ sysLog.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ HashMap<?, ?> _map = (HashMap<?, ?>)sysLogService.selectSysLogInf(sysLog);
+ int totCnt = Integer.parseInt((String)_map.get("resultCnt"));
+
+ model.addAttribute("resultList", _map.get("resultList"));
+ model.addAttribute("resultCnt", _map.get("resultCnt"));
+ model.addAttribute("frm", sysLog);
+
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/log/lgm/EgovSysLogList";
+
+ }
+ /**
+ * 시스템 로그 상세 조회
+ *
+ * @param sysLog
+ * @param model
+ * @return sym/log/lgm/EgovSysLogInqire
+ * @throws Exception
+ */
+ @RequestMapping(value="/sym/log/lgm/SelectSysLogDetail.do")
+ public String selectSysLog(@ModelAttribute("searchVO") SysLog sysLog,
+ @RequestParam("requstId") String requstId,
+ ModelMap model) throws Exception{
+
+ sysLog.setRequstId(requstId.trim());
+
+ SysLog vo = sysLogService.selectSysLog(sysLog);
+ model.addAttribute("result", vo);
+ return "egovframework/com/sym/log/lgm/EgovSysLogDetail";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/lgm/web/EgovSysLogController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java (revision 7)
@@ -0,0 +1,85 @@
+package egovframework.com.sym.log.lgm.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.log.lgm.service.SysLog;
+
+/**
+* @Class Name : SysLogDAO.java
+* @Description : 로그관리(시스템)를 위한 데이터 접근 클래스
+* @Modification Information
+*
+* 수정일 수정자 수정내용
+* ------- ------- -------------------
+* 2009. 3. 11. 이삼섭 최초생성
+* 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.lgm)
+*
+* @author 공통 서비스 개발팀 이삼섭
+* @since 2009. 3. 11.
+* @version
+* @see
+*
+*/
+@Repository("SysLogDAO")
+public class SysLogDAO extends EgovComAbstractDAO{
+
+ /**
+ * 시스템 로그정보를 생성한다.
+ *
+ * @param SysLog
+ * @return
+ * @throws Exception
+ */
+ public void logInsertSysLog(SysLog sysLog) {
+ insert("SysLog.logInsertSysLog", sysLog);
+
+ }
+
+ /**
+ * 시스템 로그정보를 요약한다.
+ *
+ * @param
+ * @return
+ * @throws Exception
+ */
+ public void logInsertSysLogSummary() {
+ insert("SysLog.logInsertSysLogSummary", null);
+ delete("SysLog.logDeleteSysLogSummary", null);
+
+ }
+
+ /**
+ * 시스템 로그목록을 조회한다.
+ *
+ * @param sysLog
+ * @return sysLog
+ * @throws Exception
+ */
+ public List<?> selectSysLogInf(SysLog sysLog) {
+ return list("SysLog.selectSysLogInf", sysLog);
+ }
+
+ /**
+ * 시스템 로그정보 목록의 숫자를 조회한다.
+ * @param sysLog
+ * @return
+ * @throws Exception
+ */
+ public int selectSysLogInfCnt(SysLog sysLog) {
+ return (Integer)selectOne("SysLog.selectSysLogInfCnt", sysLog);
+ }
+
+ /**
+ * 시스템 로그 상세정보를 조회한다.
+ *
+ * @param sysLog
+ * @return sysLog
+ * @throws Exception
+ */
+ public SysLog selectSysLog(SysLog sysLog) {
+ return (SysLog) selectOne("SysLog.selectSysLog", sysLog);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/SysLogDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/EgovSysLogServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/EgovSysLogServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/EgovSysLogServiceImpl.java (revision 7)
@@ -0,0 +1,95 @@
+package egovframework.com.sym.log.lgm.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.sym.log.lgm.service.EgovSysLogService;
+import egovframework.com.sym.log.lgm.service.SysLog;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+/**
+ * @Class Name : EgovSysLogServiceImpl.java
+ * @Description : 로그관리(시스템)를 위한 서비스 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Service("EgovSysLogService")
+public class EgovSysLogServiceImpl extends EgovAbstractServiceImpl implements EgovSysLogService{
+ @Resource(name="SysLogDAO")
+ private SysLogDAO sysLogDAO;
+
+ /** ID Generation */
+ @Resource(name="egovSysLogIdGnrService")
+ private EgovIdGnrService egovSysLogIdGnrService;
+
+ /**
+ * 시스템 로그정보를 생성한다.
+ *
+ * @param SysLog
+ */
+ @Override
+ public void logInsertSysLog(SysLog sysLog) throws Exception {
+ String requstId = egovSysLogIdGnrService.getNextStringId();
+ sysLog.setRequstId(requstId);
+
+ sysLogDAO.logInsertSysLog(sysLog);
+
+ }
+
+ /**
+ * 시스템 로그정보를 요약한다.
+ *
+ * @param
+ */
+ @Override
+ public void logInsertSysLogSummary() throws Exception {
+ sysLogDAO.logInsertSysLogSummary();
+
+ }
+
+ /**
+ * 시스템 로그정보 목록을 조회한다.
+ *
+ * @param SysLog
+ */
+ @Override
+ public Map<?, ?> selectSysLogInf(SysLog sysLog) throws Exception {
+
+ List<?> _result = sysLogDAO.selectSysLogInf(sysLog);
+ int _cnt = sysLogDAO.selectSysLogInfCnt(sysLog);
+
+ Map<String, Object> _map = new HashMap<String, Object>();
+ _map.put("resultList", _result);
+ _map.put("resultCnt", Integer.toString(_cnt));
+
+ return _map;
+ }
+
+ /**
+ * 시스템 로그 상세정보를 조회한다.
+ *
+ * @param sysLog
+ * @return sysLog
+ * @throws Exception
+ */
+ @Override
+ public SysLog selectSysLog(SysLog sysLog) throws Exception {
+ return sysLogDAO.selectSysLog(sysLog);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/impl/EgovSysLogServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogAspect.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogAspect.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogAspect.java (revision 7)
@@ -0,0 +1,236 @@
+package egovframework.com.sym.log.lgm.service;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+
+import javax.annotation.Resource;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.springframework.util.StopWatch;
+
+/**
+ * @Class Name : EgovSysLogAspect.java
+ * @Description : 시스템 로그 생성을 위한 ASPECT 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.lgm)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+public class EgovSysLogAspect {
+
+ @Resource(name="EgovSysLogService")
+ private EgovSysLogService sysLogService;
+
+ /**
+ * 시스템 로그정보를 생성한다.
+ * sevice Class의 insert로 시작되는 Method
+ *
+ * @param ProceedingJoinPoint
+ * @return Object
+ * @throws Exception
+ */
+ public Object logInsert(ProceedingJoinPoint joinPoint) throws Throwable {
+
+ StopWatch stopWatch = new StopWatch();
+
+ try {
+ stopWatch.start();
+
+ Object retValue = joinPoint.proceed();
+ return retValue;
+ } catch (Throwable e) {
+ throw e;
+ } finally {
+ stopWatch.stop();
+
+ SysLog sysLog = new SysLog();
+ String className = joinPoint.getTarget().getClass().getName();
+ String methodName = joinPoint.getSignature().getName();
+ String processSeCode = "C";
+ String processTime = Long.toString(stopWatch.getTotalTimeMillis());
+ String uniqId = "";
+ String ip = "";
+
+ /* Authenticated */
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(isAuthenticated.booleanValue()) {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ uniqId = (user == null || user.getUniqId() == null) ? "" : user.getUniqId();
+ ip = (user == null || user.getIp() == null) ? "" : user.getIp();
+ }
+
+ sysLog.setSrvcNm(className);
+ sysLog.setMethodNm(methodName);
+ sysLog.setProcessSeCode(processSeCode);
+ sysLog.setProcessTime(processTime);
+ sysLog.setRqesterId(uniqId);
+ sysLog.setRqesterIp(ip);
+
+ sysLogService.logInsertSysLog(sysLog);
+
+ }
+
+ }
+
+ /**
+ * 시스템 로그정보를 생성한다.
+ * sevice Class의 update로 시작되는 Method
+ *
+ * @param ProceedingJoinPoint
+ * @return Object
+ * @throws Exception
+ */
+ public Object logUpdate(ProceedingJoinPoint joinPoint) throws Throwable {
+
+ StopWatch stopWatch = new StopWatch();
+
+ try {
+ stopWatch.start();
+
+ Object retValue = joinPoint.proceed();
+ return retValue;
+ } catch (Throwable e) {
+ throw e;
+ } finally {
+ stopWatch.stop();
+
+ SysLog sysLog = new SysLog();
+ String className = joinPoint.getTarget().getClass().getName();
+ String methodName = joinPoint.getSignature().getName();
+ String processSeCode = "U";
+ String processTime = Long.toString(stopWatch.getTotalTimeMillis());
+ String uniqId = "";
+ String ip = "";
+
+ /* Authenticated */
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(isAuthenticated.booleanValue()) {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ uniqId = (user == null || user.getUniqId() == null) ? "" : user.getUniqId();
+ ip = (user == null || user.getIp() == null) ? "" : user.getIp();
+ }
+
+ sysLog.setSrvcNm(className);
+ sysLog.setMethodNm(methodName);
+ sysLog.setProcessSeCode(processSeCode);
+ sysLog.setProcessTime(processTime);
+ sysLog.setRqesterId(uniqId);
+ sysLog.setRqesterIp(ip);
+
+ sysLogService.logInsertSysLog(sysLog);
+
+ }
+
+ }
+
+ /**
+ * 시스템 로그정보를 생성한다.
+ * sevice Class의 delete로 시작되는 Method
+ *
+ * @param ProceedingJoinPoint
+ * @return Object
+ * @throws Exception
+ */
+ public Object logDelete(ProceedingJoinPoint joinPoint) throws Throwable {
+
+ StopWatch stopWatch = new StopWatch();
+
+ try {
+ stopWatch.start();
+
+ Object retValue = joinPoint.proceed();
+ return retValue;
+ } catch (Throwable e) {
+ throw e;
+ } finally {
+ stopWatch.stop();
+
+ SysLog sysLog = new SysLog();
+ String className = joinPoint.getTarget().getClass().getName();
+ String methodName = joinPoint.getSignature().getName();
+ String processSeCode = "D";
+ String processTime = Long.toString(stopWatch.getTotalTimeMillis());
+ String uniqId = "";
+ String ip = "";
+
+ /* Authenticated */
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(isAuthenticated.booleanValue()) {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ uniqId = (user == null || user.getUniqId() == null) ? "" : user.getUniqId();
+ ip = (user == null || user.getIp() == null) ? "" : user.getIp();
+ }
+
+ sysLog.setSrvcNm(className);
+ sysLog.setMethodNm(methodName);
+ sysLog.setProcessSeCode(processSeCode);
+ sysLog.setProcessTime(processTime);
+ sysLog.setRqesterId(uniqId);
+ sysLog.setRqesterIp(ip);
+
+ sysLogService.logInsertSysLog(sysLog);
+
+ }
+
+ }
+
+ /**
+ * 시스템 로그정보를 생성한다.
+ * sevice Class의 select로 시작되는 Method
+ *
+ * @param ProceedingJoinPoint
+ * @return Object
+ * @throws Exception
+ */
+ public Object logSelect(ProceedingJoinPoint joinPoint) throws Throwable {
+
+ StopWatch stopWatch = new StopWatch();
+
+ try {
+ stopWatch.start();
+
+ Object retValue = joinPoint.proceed();
+ return retValue;
+ } catch (Throwable e) {
+ throw e;
+ } finally {
+ stopWatch.stop();
+
+ SysLog sysLog = new SysLog();
+ String className = joinPoint.getTarget().getClass().getName();
+ String methodName = joinPoint.getSignature().getName();
+ String processSeCode = "R";
+ String processTime = Long.toString(stopWatch.getTotalTimeMillis());
+ String uniqId = "";
+ String ip = "";
+
+ /* Authenticated */
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(isAuthenticated.booleanValue()) {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ uniqId = (user == null || user.getUniqId() == null) ? "" : user.getUniqId();
+ ip = (user == null || user.getIp() == null) ? "" : user.getIp();
+ }
+
+ sysLog.setSrvcNm(className);
+ sysLog.setMethodNm(methodName);
+ sysLog.setProcessSeCode(processSeCode);
+ sysLog.setProcessTime(processTime);
+ sysLog.setRqesterId(uniqId);
+ sysLog.setRqesterIp(ip);
+
+ sysLogService.logInsertSysLog(sysLog);
+
+ }
+
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogAspect.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java (revision 7)
@@ -0,0 +1,597 @@
+package egovframework.com.sym.log.lgm.service;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * @Class Name : SysLog.java
+ * @Description : 로그관리(시스템)를 위한 VO 클래스를 정의한다.
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.lgm)
+ * 2011.09.14 서준식 화면에 검색일자를 표시하기위한 멤버변수 추가.
+ * 2017.09.19 이정은 검색시작일_화면용, 검색종료일_화면용 삭제
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+public class SysLog implements Serializable{
+
+
+ private static final long serialVersionUID = 540569951549295059L;
+
+ /**
+ * 에러횟수
+ */
+ private int errorCo = 0;
+ /**
+ * 에러코드
+ */
+ private String errorCode = "";
+ /**
+ * 에러코드 명
+ */
+ private String errorCodeNm = "";
+ /**
+ * 에러구분
+ */
+ private String errorSe = "";
+ /**
+ * 기관코드
+ */
+ private String insttCode = "";
+ /**
+ * 기관코드 명
+ */
+ private String insttCodeNm = "";
+ /**
+ * 업무구분코드
+ */
+ private String jobSeCode = "";
+
+ /**
+ * 업무구분코드명
+ */
+ private String jobSeCodeNm = "";
+ /**
+ * 메서드명
+ */
+ private String methodNm = "";
+ /**
+ * 발생일자
+ */
+ private String occrrncDe = "";
+ /**
+ * 처리횟수
+ */
+ private int processCo = 0;
+ /**
+ * 처리구분코드
+ */
+ private String processSeCode = "";
+ /**
+ * 처리구분코드명
+ */
+ private String processSeCodeNm = "";
+ /**
+ * 처리시간
+ */
+ private String processTime = "";
+ /**
+ * 요청아이디
+ */
+ private String requstId = "";
+ /**
+ * 요청자아이디
+ */
+ private String rqesterId = "";
+ /**
+ * 요청자 이름
+ */
+ private String rqsterNm = "";
+ /**
+ * 요청아이피
+ */
+ private String rqesterIp = "";
+ /**
+ * 응답코드
+ */
+ private String rspnsCode = "";
+ /**
+ * 응답코드 명
+ */
+ private String rspnsCodeNm = "";
+ /**
+ * 서비스명
+ */
+ private String srvcNm = "";
+ /**
+ * 대상메뉴명
+ */
+ private String trgetMenuNm = "";
+ /**
+ * 검색시작일
+ */
+ private String searchBgnDe = "";
+ /**
+ * 검색조건
+ */
+ private String searchCnd = "";
+ /**
+ * 검색종료일
+ */
+ private String searchEndDe = "";
+ /**
+ * 검색단어
+ */
+ private String searchWrd = "";
+ /**
+ * 정렬순서(DESC,ASC)
+ */
+ private String sortOrdr = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /** rowNo */
+ private int rowNo = 0;
+
+
+
+
+ /**
+ * @return the errorCo
+ */
+ public int getErrorCo() {
+ return errorCo;
+ }
+ /**
+ * @param errorCo the errorCo to set
+ */
+ public void setErrorCo(int errorCo) {
+ this.errorCo = errorCo;
+ }
+ /**
+ * @return the errorCode
+ */
+ public String getErrorCode() {
+ return errorCode;
+ }
+ /**
+ * @param errorCode the errorCode to set
+ */
+ public void setErrorCode(String errorCode) {
+ this.errorCode = errorCode;
+ }
+ /**
+ * @return the errorCodeNm
+ */
+ public String getErrorCodeNm() {
+ return errorCodeNm;
+ }
+ /**
+ * @param errorCodeNm the errorCodeNm to set
+ */
+ public void setErrorCodeNm(String errorCodeNm) {
+ this.errorCodeNm = errorCodeNm;
+ }
+ /**
+ * @return the errorSe
+ */
+ public String getErrorSe() {
+ return errorSe;
+ }
+ /**
+ * @param errorSe the errorSe to set
+ */
+ public void setErrorSe(String errorSe) {
+ this.errorSe = errorSe;
+ }
+ /**
+ * @return the insttCode
+ */
+ public String getInsttCode() {
+ return insttCode;
+ }
+ /**
+ * @param insttCode the insttCode to set
+ */
+ public void setInsttCode(String insttCode) {
+ this.insttCode = insttCode;
+ }
+ /**
+ * @return the insttCodeNm
+ */
+ public String getInsttCodeNm() {
+ return insttCodeNm;
+ }
+ /**
+ * @param insttCodeNm the insttCodeNm to set
+ */
+ public void setInsttCodeNm(String insttCodeNm) {
+ this.insttCodeNm = insttCodeNm;
+ }
+ /**
+ * @return the jobSeCode
+ */
+ public String getJobSeCode() {
+ return jobSeCode;
+ }
+ /**
+ * @param jobSeCode the jobSeCode to set
+ */
+ public void setJobSeCode(String jobSeCode) {
+ this.jobSeCode = jobSeCode;
+ }
+ /**
+ * @return the jobSeCodeNm
+ */
+ public String getJobSeCodeNm() {
+ return jobSeCodeNm;
+ }
+ /**
+ * @param jobSeCodeNm the jobSeCodeNm to set
+ */
+ public void setJobSeCodeNm(String jobSeCodeNm) {
+ this.jobSeCodeNm = jobSeCodeNm;
+ }
+ /**
+ * @return the methodNm
+ */
+ public String getMethodNm() {
+ return methodNm;
+ }
+ /**
+ * @param methodNm the methodNm to set
+ */
+ public void setMethodNm(String methodNm) {
+ this.methodNm = methodNm;
+ }
+ /**
+ * @return the occrrncDe
+ */
+ public String getOccrrncDe() {
+ return occrrncDe;
+ }
+ /**
+ * @param occrrncDe the occrrncDe to set
+ */
+ public void setOccrrncDe(String occrrncDe) {
+ this.occrrncDe = occrrncDe;
+ }
+ /**
+ * @return the processCo
+ */
+ public int getProcessCo() {
+ return processCo;
+ }
+ /**
+ * @param processCo the processCo to set
+ */
+ public void setProcessCo(int processCo) {
+ this.processCo = processCo;
+ }
+ /**
+ * @return the processSeCode
+ */
+ public String getProcessSeCode() {
+ return processSeCode;
+ }
+ /**
+ * @param processSeCode the processSeCode to set
+ */
+ public void setProcessSeCode(String processSeCode) {
+ this.processSeCode = processSeCode;
+ }
+ /**
+ * @return the processSeCodeNm
+ */
+ public String getProcessSeCodeNm() {
+ return processSeCodeNm;
+ }
+ /**
+ * @param processSeCodeNm the processSeCodeNm to set
+ */
+ public void setProcessSeCodeNm(String processSeCodeNm) {
+ this.processSeCodeNm = processSeCodeNm;
+ }
+ /**
+ * @return the processTime
+ */
+ public String getProcessTime() {
+ return processTime;
+ }
+ /**
+ * @param processTime the processTime to set
+ */
+ public void setProcessTime(String processTime) {
+ this.processTime = processTime;
+ }
+ /**
+ * @return the requstId
+ */
+ public String getRequstId() {
+ return requstId;
+ }
+ /**
+ * @param requstId the requstId to set
+ */
+ public void setRequstId(String requstId) {
+ this.requstId = requstId;
+ }
+ /**
+ * @return the rqesterId
+ */
+ public String getRqesterId() {
+ return rqesterId;
+ }
+ /**
+ * @param rqesterId the rqesterId to set
+ */
+ public void setRqesterId(String rqesterId) {
+ this.rqesterId = rqesterId;
+ }
+ /**
+ * @return the rqsterNm
+ */
+ public String getRqsterNm() {
+ return rqsterNm;
+ }
+ /**
+ * @param rqsterNm the rqsterNm to set
+ */
+ public void setRqsterNm(String rqsterNm) {
+ this.rqsterNm = rqsterNm;
+ }
+ /**
+ * @return the rqesterIp
+ */
+ public String getRqesterIp() {
+ return rqesterIp;
+ }
+ /**
+ * @param rqesterIp the rqesterIp to set
+ */
+ public void setRqesterIp(String rqesterIp) {
+ this.rqesterIp = rqesterIp;
+ }
+ /**
+ * @return the rspnsCode
+ */
+ public String getRspnsCode() {
+ return rspnsCode;
+ }
+ /**
+ * @param rspnsCode the rspnsCode to set
+ */
+ public void setRspnsCode(String rspnsCode) {
+ this.rspnsCode = rspnsCode;
+ }
+ /**
+ * @return the rspnsCodeNm
+ */
+ public String getRspnsCodeNm() {
+ return rspnsCodeNm;
+ }
+ /**
+ * @param rspnsCodeNm the rspnsCodeNm to set
+ */
+ public void setRspnsCodeNm(String rspnsCodeNm) {
+ this.rspnsCodeNm = rspnsCodeNm;
+ }
+ /**
+ * @return the srvcNm
+ */
+ public String getSrvcNm() {
+ return srvcNm;
+ }
+ /**
+ * @param srvcNm the srvcNm to set
+ */
+ public void setSrvcNm(String srvcNm) {
+ this.srvcNm = srvcNm;
+ }
+ /**
+ * @return the trgetMenuNm
+ */
+ public String getTrgetMenuNm() {
+ return trgetMenuNm;
+ }
+ /**
+ * @param trgetMenuNm the trgetMenuNm to set
+ */
+ public void setTrgetMenuNm(String trgetMenuNm) {
+ this.trgetMenuNm = trgetMenuNm;
+ }
+
+ /**
+ * @return the searchBgnDe
+ */
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+ /**
+ * @param searchBgnDe the searchBgnDe to set
+ */
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+ /**
+ * @return the searchCnd
+ */
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+ /**
+ * @param searchCnd the searchCnd to set
+ */
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+ /**
+ * @return the searchEndDe
+ */
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+ /**
+ * @param searchEndDe the searchEndDe to set
+ */
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+ /**
+ * @return the searchWrd
+ */
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+ /**
+ * @param searchWrd the searchWrd to set
+ */
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+ /**
+ * @return the sortOrdr
+ */
+ public String getSortOrdr() {
+ return sortOrdr;
+ }
+ /**
+ * @param sortOrdr the sortOrdr to set
+ */
+ public void setSortOrdr(String sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+ /**
+ * @return the searchUseYn
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+ /**
+ * @param searchUseYn the searchUseYn to set
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+ /**
+ * @return the pageIndex
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+ /**
+ * @param pageIndex the pageIndex to set
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+ /**
+ * @return the pageUnit
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+ /**
+ * @param pageUnit the pageUnit to set
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+ /**
+ * @return the pageSize
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+ /**
+ * @param pageSize the pageSize to set
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+ /**
+ * @return the firstIndex
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+ /**
+ * @param firstIndex the firstIndex to set
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+ /**
+ * @return the lastIndex
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+ /**
+ * @param lastIndex the lastIndex to set
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+ /**
+ * @return the recordCountPerPage
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+ /**
+ * @param recordCountPerPage the recordCountPerPage to set
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+ /**
+ * @return the rowNo
+ */
+ public int getRowNo() {
+ return rowNo;
+ }
+ /**
+ * @param rowNo the rowNo to set
+ */
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+ /**
+ *
+ */
+ @Override
+ public String toString(){
+ return ToStringBuilder.reflectionToString(this);
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/SysLog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogService.java (revision 7)
@@ -0,0 +1,54 @@
+package egovframework.com.sym.log.lgm.service;
+
+import java.util.Map;
+
+/**
+ * @Class Name : EgovSysLogService.java
+ * @Description : 로그관리(시스템)를 위한 서비스 인터페이스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.lgm)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+public interface EgovSysLogService {
+
+ /**
+ * 시스템 로그정보를 생성한다.
+ *
+ * @param SysLog
+ */
+ public void logInsertSysLog(SysLog sysLog) throws Exception;
+
+ /**
+ * 시스템 로그정보를 요약한다.
+ *
+ * @param
+ */
+ public void logInsertSysLogSummary() throws Exception;
+
+ /**
+ * 시스템 로그정보 목록을 조회한다.
+ *
+ * @param SysLog
+ */
+ public Map<?, ?> selectSysLogInf(SysLog sysLog) throws Exception;
+
+ /**
+ * 시스템로그 상세정보를 조회한다.
+ *
+ * @param sysLog
+ * @return sysLog
+ * @throws Exception
+ */
+ public SysLog selectSysLog(SysLog sysLog) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogScheduling.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogScheduling.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogScheduling.java (revision 7)
@@ -0,0 +1,42 @@
+package egovframework.com.sym.log.lgm.service;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovSysLogScheduling.java
+ * @Description : 시스템 로그 요약을 위한 스케쥴링 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Service("egovSysLogScheduling")
+public class EgovSysLogScheduling extends EgovAbstractServiceImpl {
+
+ @Resource(name="EgovSysLogService")
+ private EgovSysLogService sysLogService;
+
+ /**
+ * 시스템 로그정보를 요약한다.
+ * 전날의 로그를 요약하여 입력하고, 6개월전의 로그를 삭제한다.
+ *
+ * @param
+ * @return
+ * @throws Exception
+ */
+ public void sysLogSummary() throws Exception {
+ sysLogService.logInsertSysLogSummary();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/lgm/service/EgovSysLogScheduling.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogInterceptor.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogInterceptor.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogInterceptor.java (revision 7)
@@ -0,0 +1,65 @@
+package egovframework.com.sym.log.wlg.web;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.log.wlg.service.EgovWebLogService;
+import egovframework.com.sym.log.wlg.service.WebLog;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+/**
+ * @Class Name : EgovWebLogInterceptor.java
+ * @Description : 웹로그 생성을 위한 인터셉터 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 9. 이삼섭 최초생성
+ * 2011. 7. 1. 이기하 패키지 분리(sym.log -> sym.log.wlg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 9.
+ * @version
+ * @see
+ *
+ */
+public class EgovWebLogInterceptor extends HandlerInterceptorAdapter {
+
+ @Resource(name="EgovWebLogService")
+ private EgovWebLogService webLogService;
+
+ /**
+ * 웹 로그정보를 생성한다.
+ *
+ * @param HttpServletRequest request, HttpServletResponse response, Object handler
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public void postHandle(HttpServletRequest request,
+ HttpServletResponse response, Object handler, ModelAndView modeAndView) throws Exception {
+
+ WebLog webLog = new WebLog();
+ String reqURL = request.getRequestURI();
+ String uniqId = "";
+
+ /* Authenticated */
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(isAuthenticated.booleanValue()) {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ uniqId = (user == null || user.getUniqId() == null) ? "" : user.getUniqId();
+ }
+
+ webLog.setUrl(reqURL);
+ webLog.setRqesterId(uniqId);
+ webLog.setRqesterIp(request.getRemoteAddr());
+
+ webLogService.logInsertWebLog(webLog);
+
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogInterceptor.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogController.java (revision 7)
@@ -0,0 +1,103 @@
+package egovframework.com.sym.log.wlg.web;
+
+import java.util.HashMap;
+
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sym.log.wlg.service.EgovWebLogService;
+import egovframework.com.sym.log.wlg.service.WebLog;
+
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @Class Name : EgovWebLogController.java
+ * @Description : 시스템 로그정보를 관리하기 위한 컨트롤러 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.wlg)
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+@Controller
+public class EgovWebLogController {
+
+ @Resource(name="EgovWebLogService")
+ private EgovWebLogService webLogService;
+
+ @Resource(name="propertiesService")
+ protected EgovPropertyService propertyService;
+
+ /**
+ * 웹 로그 목록 조회
+ *
+ * @param webLog
+ * @return sym/log/wlg/EgovWebLogList
+ * @throws Exception
+ */
+ @IncludedInfo(name="웹로그관리", listUrl="/sym/log/wlg/SelectWebLogList.do", order = 1070 ,gid = 60)
+ @RequestMapping(value="/sym/log/wlg/SelectWebLogList.do")
+ public String selectWebLogInf(@ModelAttribute("searchVO") WebLog webLog,
+ ModelMap model) throws Exception{
+
+ webLog.setPageUnit(propertyService.getInt("pageUnit"));
+ webLog.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(webLog.getPageIndex());
+ paginationInfo.setRecordCountPerPage(webLog.getPageUnit());
+ paginationInfo.setPageSize(webLog.getPageSize());
+
+ webLog.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ webLog.setLastIndex(paginationInfo.getLastRecordIndex());
+ webLog.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ HashMap<?, ?> _map = (HashMap<?, ?>)webLogService.selectWebLogInf(webLog);
+ int totCnt = Integer.parseInt((String)_map.get("resultCnt"));
+
+ model.addAttribute("resultList", _map.get("resultList"));
+ model.addAttribute("resultCnt", _map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/log/wlg/EgovWebLogList";
+ }
+
+ /**
+ * 웹 로그 상세 조회
+ *
+ * @param webLog
+ * @param model
+ * @return sym/log/wlg/EgovWebLogInqire
+ * @throws Exception
+ */
+ @RequestMapping(value="/sym/log/wlg/SelectWebLogDetail.do")
+ public String selectWebLog(@ModelAttribute("searchVO") WebLog webLog,
+ @RequestParam("requstId") String requstId,
+ ModelMap model) throws Exception{
+
+ webLog.setRequstId(requstId.trim());
+
+ WebLog vo = webLogService.selectWebLog(webLog);
+ model.addAttribute("result", vo);
+ return "egovframework/com/sym/log/wlg/EgovWebLogDetail";
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java (revision 7)
@@ -0,0 +1,280 @@
+package egovframework.com.sym.log.wlg.service;
+
+import java.io.Serializable;
+
+/**
+ * @Class Name : WebLog.java
+ * @Description : 웹 로그 관리를 위한 VO 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.wlg)
+ * 2011.09.14 서준식 화면에 검색일자를 표시하기위한 멤버변수 추가.
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+public class WebLog implements Serializable {
+
+ private static final long serialVersionUID = -7768865822788140496L;
+
+ /**
+ * 요청아이디
+ */
+ private String requstId = "";
+
+ /**
+ * 발생일자
+ */
+ private String occrrncDe = "";
+
+ /**
+ * URL
+ */
+ private String url = "";
+
+ /**
+ * 요청자아이디
+ */
+ private String rqesterId = "";
+
+ /**
+ * 요청자 이름
+ */
+ private String rqsterNm = "";
+
+ /**
+ * 요청아이피
+ */
+ private String rqesterIp = "";
+
+ /**
+ * 검색시작일
+ */
+ private String searchBgnDe = "";
+
+ /**
+ * 검색조건
+ */
+ private String searchCnd = "";
+
+ /**
+ * 검색종료일
+ */
+ private String searchEndDe = "";
+
+ /**
+ * 검색단어
+ */
+ private String searchWrd = "";
+
+ /**
+ * 정렬순서(DESC,ASC)
+ */
+ private String sortOrdr = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /** rowNo */
+ private int rowNo = 0;
+
+ /**
+ * 검색시작일_화면용
+ */
+ private String searchBgnDeView = "";//2011.09.14
+
+ /**
+ * 검색종료일_화면용
+ */
+ private String searchEndDeView = "";//2011.09.14
+
+ public String getSearchEndDeView() {
+ return searchEndDeView;
+ }
+ public void setSearchEndDeView(String searchEndDeView) {
+ this.searchEndDeView = searchEndDeView;
+ }
+ public String getSearchBgnDeView() {
+ return searchBgnDeView;
+ }
+ public void setSearchBgnDeView(String searchBgnDeView) {
+ this.searchBgnDeView = searchBgnDeView;
+ }
+
+ public String getRequstId() {
+ return requstId;
+ }
+
+ public void setRequstId(String requstId) {
+ this.requstId = requstId;
+ }
+
+ public String getOccrrncDe() {
+ return occrrncDe;
+ }
+
+ public void setOccrrncDe(String occrrncDe) {
+ this.occrrncDe = occrrncDe;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getRqesterId() {
+ return rqesterId;
+ }
+
+ public void setRqesterId(String rqesterId) {
+ this.rqesterId = rqesterId;
+ }
+
+ public String getRqsterNm() {
+ return rqsterNm;
+ }
+
+ public void setRqsterNm(String rqsterNm) {
+ this.rqsterNm = rqsterNm;
+ }
+
+ public String getRqesterIp() {
+ return rqesterIp;
+ }
+
+ public void setRqesterIp(String rqesterIp) {
+ this.rqesterIp = rqesterIp;
+ }
+
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ public String getSortOrdr() {
+ return sortOrdr;
+ }
+
+ public void setSortOrdr(String sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/WebLog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/EgovWebLogServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/EgovWebLogServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/EgovWebLogServiceImpl.java (revision 7)
@@ -0,0 +1,98 @@
+package egovframework.com.sym.log.wlg.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.sym.log.wlg.service.EgovWebLogService;
+import egovframework.com.sym.log.wlg.service.WebLog;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovWebLogServiceImpl.java
+ * @Description : 웹로그 관리를 위한 서비스 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.wlg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Service("EgovWebLogService")
+public class EgovWebLogServiceImpl extends EgovAbstractServiceImpl implements
+ EgovWebLogService {
+
+ @Resource(name="webLogDAO")
+ private WebLogDAO webLogDAO;
+
+ /** ID Generation */
+ @Resource(name="egovWebLogIdGnrService")
+ private EgovIdGnrService egovWebLogIdGnrService;
+
+ /**
+ * 웹 로그를 기록한다.
+ *
+ * @param WebLog
+ */
+ @Override
+ public void logInsertWebLog(WebLog webLog) throws Exception {
+ String requstId = egovWebLogIdGnrService.getNextStringId();
+ webLog.setRequstId(requstId);
+
+ webLogDAO.logInsertWebLog(webLog);
+ }
+
+ /**
+ * 웹 로그정보를 요약한다.
+ *
+ * @param
+ */
+ @Override
+ public void logInsertWebLogSummary() throws Exception {
+
+ webLogDAO.logInsertWebLogSummary();
+ }
+
+ /**
+ * 웹 로그정보 상제정보를 조회한다.
+ *
+ * @param webLog
+ * @return webLog
+ * @throws Exception
+ */
+ @Override
+ public WebLog selectWebLog(WebLog webLog) throws Exception{
+
+ return webLogDAO.selectWebLog(webLog);
+ }
+
+ /**
+ * 웹 로그정보 목록을 조회한다.
+ *
+ * @param WebLog
+ */
+ @Override
+ public Map<String, Object> selectWebLogInf(WebLog webLog) throws Exception {
+ List<?> _result = webLogDAO.selectWebLogInf(webLog);
+ int _cnt = webLogDAO.selectWebLogInfCnt(webLog);
+
+ Map<String, Object> _map = new HashMap<String, Object>();
+ _map.put("resultList", _result);
+ _map.put("resultCnt", Integer.toString(_cnt));
+
+ return _map;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/EgovWebLogServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java (revision 7)
@@ -0,0 +1,86 @@
+package egovframework.com.sym.log.wlg.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.log.wlg.service.WebLog;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Class Name : WebLogDAO.java
+ * @Description : 웹로그 관리를 위한 데이터 접근 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.wlg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Repository("webLogDAO")
+public class WebLogDAO extends EgovComAbstractDAO {
+
+ /**
+ * 웹 로그를 기록한다.
+ *
+ * @param WebLog
+ * @return
+ * @throws Exception
+ */
+ public void logInsertWebLog(WebLog webLog) throws Exception{
+ insert("WebLog.logInsertWebLog", webLog);
+ }
+
+ /**
+ * 웹 로그정보를 요약한다.
+ *
+ * @param
+ * @return
+ * @throws Exception
+ */
+ public void logInsertWebLogSummary() throws Exception{
+ insert("WebLog.logInsertWebLogSummary", null);
+ delete("WebLog.logDeleteWebLogSummary", null);
+ }
+
+ /**
+ * 웹 로그정보 상세정보를 조회한다.
+ *
+ * @param webLog
+ * @return webLog
+ * @throws Exception
+ */
+ public WebLog selectWebLog(WebLog webLog) throws Exception{
+
+ return (WebLog) selectOne("WebLog.selectWebLog", webLog);
+ }
+
+ /**
+ * 웹 로그정보 목록을 조회한다.
+ *
+ * @param webLog
+ * @return
+ * @throws Exception
+ */
+ public List<?> selectWebLogInf(WebLog webLog) throws Exception{
+ return list("WebLog.selectWebLogInf", webLog);
+ }
+
+ /**
+ * 웹 로그정보 목록의 숫자를 조회한다.
+ * @param webLog
+ * @return
+ * @throws Exception
+ */
+ public int selectWebLogInfCnt(WebLog webLog) throws Exception{
+
+ return (Integer)selectOne("WebLog.selectWebLogInfCnt", webLog);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/impl/WebLogDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogScheduling.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogScheduling.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogScheduling.java (revision 7)
@@ -0,0 +1,44 @@
+package egovframework.com.sym.log.wlg.service;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovWebLogScheduling.java
+ * @Description : 웹로그 요약을 위한 스케쥴링 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.wlg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+@Service("egovWebLogScheduling")
+public class EgovWebLogScheduling extends EgovAbstractServiceImpl {
+
+ @Resource(name="EgovWebLogService")
+ private EgovWebLogService webLogService;
+
+ /**
+ * 웹 로그정보를 요약한다.
+ * 전날의 로그를 요약하여 입력하고, 6개월전의 로그를 삭제한다.
+ *
+ * @param
+ * @return
+ * @throws Exception
+ */
+ public void webLogSummary() throws Exception {
+ webLogService.logInsertWebLogSummary();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogScheduling.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogService.java (revision 7)
@@ -0,0 +1,54 @@
+package egovframework.com.sym.log.wlg.service;
+
+import java.util.Map;
+
+/**
+ * @Class Name : EgovWebLogService.java
+ * @Description : 웹로그 관리를 위한 서비스 인터페이스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.wlg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+public interface EgovWebLogService {
+
+ /**
+ * 웹 로그를 기록한다.
+ *
+ * @param WebLog
+ */
+ public void logInsertWebLog(WebLog webLog) throws Exception;
+
+ /**
+ * 웹 로그정보를 요약한다.
+ *
+ * @param
+ */
+ public void logInsertWebLogSummary() throws Exception;
+
+ /**
+ * 웹로그 상세정보를 조회한다.
+ *
+ * @param webLog
+ * @return webLog
+ * @throws Exception
+ */
+ public WebLog selectWebLog(WebLog webLog) throws Exception;
+
+ /**
+ * 웹 로그정보 목록을 조회한다.
+ *
+ * @param WebLog
+ */
+ public Map<?, ?> selectWebLogInf(WebLog webLog) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/wlg/service/EgovWebLogService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/clg/web/EgovLoginLogController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/clg/web/EgovLoginLogController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/clg/web/EgovLoginLogController.java (revision 7)
@@ -0,0 +1,104 @@
+package egovframework.com.sym.log.clg.web;
+
+import java.util.HashMap;
+
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sym.log.clg.service.EgovLoginLogService;
+import egovframework.com.sym.log.clg.service.LoginLog;
+
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @Class Name : EgovLoginLogController.java
+ * @Description : 접속로그정보를 관리하기 위한 컨트롤러 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.clg)
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+
+@Controller
+public class EgovLoginLogController {
+
+ @Resource(name="EgovLoginLogService")
+ private EgovLoginLogService loginLogService;
+
+ @Resource(name="propertiesService")
+ protected EgovPropertyService propertyService;
+
+ /**
+ * 로그인 로그 목록 조회
+ *
+ * @param loginLog
+ * @return sym/log/clg/EgovLoginLogList
+ * @throws Exception
+ */
+ @IncludedInfo(name="접속로그관리", order = 1080 ,gid = 60)
+ @RequestMapping(value="/sym/log/clg/SelectLoginLogList.do")
+ public String selectLoginLogInf(@ModelAttribute("searchVO") LoginLog loginLog,
+ ModelMap model) throws Exception{
+
+ loginLog.setPageUnit(propertyService.getInt("pageUnit"));
+ loginLog.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(loginLog.getPageIndex());
+ paginationInfo.setRecordCountPerPage(loginLog.getPageUnit());
+ paginationInfo.setPageSize(loginLog.getPageSize());
+
+ loginLog.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ loginLog.setLastIndex(paginationInfo.getLastRecordIndex());
+ loginLog.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ HashMap<?, ?> _map = (HashMap<?, ?>)loginLogService.selectLoginLogInf(loginLog);
+ int totCnt = Integer.parseInt((String)_map.get("resultCnt"));
+
+ model.addAttribute("resultList", _map.get("resultList"));
+ model.addAttribute("resultCnt", _map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/log/clg/EgovLoginLogList";
+ }
+
+ /**
+ * 로그인 로그 상세 조회
+ *
+ * @param loginLog
+ * @param model
+ * @return sym/log/clg/EgovLoginLogInqire
+ * @throws Exception
+ */
+ @RequestMapping(value="/sym/log/clg/SelectLoginLogDetail.do")
+ public String selectLoginLog(@ModelAttribute("searchVO") LoginLog loginLog,
+ @RequestParam("logId") String logId,
+ ModelMap model) throws Exception{
+
+
+ loginLog.setLogId(logId.trim());
+
+ LoginLog vo = loginLogService.selectLoginLog(loginLog);
+ model.addAttribute("result", vo);
+ return "egovframework/com/sym/log/clg/EgovLoginLogDetail";
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/clg/web/EgovLoginLogController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java (revision 7)
@@ -0,0 +1,74 @@
+package egovframework.com.sym.log.clg.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.log.clg.service.LoginLog;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Class Name : LoginLogDAO.java
+ * @Description : 시스템 로그 관리를 위한 데이터 접근 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.clg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Repository("loginLogDAO")
+public class LoginLogDAO extends EgovComAbstractDAO {
+
+ /**
+ * 접속로그를 기록한다.
+ *
+ * @param LoginLog
+ * @return
+ * @throws Exception
+ */
+ public void logInsertLoginLog(LoginLog loginLog) throws Exception{
+ insert("LoginLog.logInsertLoginLog", loginLog);
+ }
+
+ /**
+ * 접속로그 상세보기를 조회한다.
+ *
+ * @param loginLog
+ * @return loginLog
+ * @throws Exception
+ */
+ public LoginLog selectLoginLog(LoginLog loginLog) throws Exception{
+
+ return (LoginLog) selectOne("LoginLog.selectLoginLog", loginLog);
+ }
+
+ /**
+ * 접속로그를 목록을 조회한다.
+ *
+ * @param loginLog
+ * @return
+ * @throws Exception
+ */
+ public List<?> selectLoginLogInf(LoginLog loginLog) throws Exception{
+ return list("LoginLog.selectLoginLogInf", loginLog);
+ }
+
+ /**
+ * 접속로그 목록의 숫자를 조회한다.
+ * @param loginLog
+ * @return
+ * @throws Exception
+ */
+ public int selectLoginLogInfCnt(LoginLog loginLog) throws Exception{
+
+ return (Integer)selectOne("LoginLog.selectLoginLogInfCnt", loginLog);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/LoginLogDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/EgovLoginLogServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/EgovLoginLogServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/EgovLoginLogServiceImpl.java (revision 7)
@@ -0,0 +1,88 @@
+package egovframework.com.sym.log.clg.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.sym.log.clg.service.EgovLoginLogService;
+import egovframework.com.sym.log.clg.service.LoginLog;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovLoginLogServiceImpl.java
+ * @Description : 접속로그 관리를 위한 서비스 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(stm.log -> sym.log.clg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+@Service("EgovLoginLogService")
+public class EgovLoginLogServiceImpl extends EgovAbstractServiceImpl implements
+ EgovLoginLogService {
+
+ @Resource(name="loginLogDAO")
+ private LoginLogDAO loginLogDAO;
+
+ /** ID Generation */
+ @Resource(name="egovLoginLogIdGnrService")
+ private EgovIdGnrService egovLoginLogIdGnrService;
+
+ /**
+ * 접속로그를 기록한다.
+ *
+ * @param LoginLog
+ */
+ @Override
+ public void logInsertLoginLog(LoginLog loinLog) throws Exception {
+ String logId = egovLoginLogIdGnrService.getNextStringId();
+ loinLog.setLogId(logId);
+
+ loginLogDAO.logInsertLoginLog(loinLog);
+ }
+
+ /**
+ * 접속로그를 조회한다.
+ *
+ * @param loginLog
+ * @return loginLog
+ * @throws Exception
+ */
+ @Override
+ public LoginLog selectLoginLog(LoginLog loginLog) throws Exception{
+
+ return loginLogDAO.selectLoginLog(loginLog);
+ }
+
+ /**
+ * 접속로그 목록을 조회한다.
+ *
+ * @param LoginLog
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @Override
+ public Map<?, ?> selectLoginLogInf(LoginLog loinLog) throws Exception {
+ List<?> _result = loginLogDAO.selectLoginLogInf(loinLog);
+ int _cnt = loginLogDAO.selectLoginLogInfCnt(loinLog);
+
+ Map<String, Object> _map = new HashMap();
+ _map.put("resultList", _result);
+ _map.put("resultCnt", Integer.toString(_cnt));
+
+ return _map;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/clg/service/impl/EgovLoginLogServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogAspect.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogAspect.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogAspect.java (revision 7)
@@ -0,0 +1,90 @@
+package egovframework.com.sym.log.clg.service;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+
+import javax.annotation.Resource;
+
+/**
+ * @Class Name : EgovLoginLogAspect.java
+ * @Description : 시스템 로그 생성을 위한 ASPECT 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.clg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+public class EgovLoginLogAspect {
+
+ @Resource(name="EgovLoginLogService")
+ private EgovLoginLogService loginLogService;
+
+ /**
+ * 로그인 로그정보를 생성한다.
+ * EgovLoginController.actionMain Method
+ *
+ * @param
+ * @return void
+ * @throws Exception
+ */
+ public void logLogin() throws Throwable {
+
+ String uniqId = "";
+ String ip = "";
+
+ /* Authenticated */
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(isAuthenticated.booleanValue()) {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ uniqId = (user == null || user.getUniqId() == null) ? "" : user.getUniqId();
+ ip = (user == null || user.getIp() == null) ? "" : user.getIp();
+ }
+
+ LoginLog loginLog = new LoginLog();
+ loginLog.setLoginId(uniqId);
+ loginLog.setLoginIp(ip);
+ loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
+ loginLog.setErrOccrrAt("N");
+ loginLog.setErrorCode("");
+ loginLogService.logInsertLoginLog(loginLog);
+
+ }
+
+ /**
+ * 로그아웃 로그정보를 생성한다.
+ * EgovLoginController.actionLogout Method
+ *
+ * @param
+ * @return void
+ * @throws Exception
+ */
+ public void logLogout() throws Throwable {
+
+ String uniqId = "";
+ String ip = "";
+
+ /* Authenticated */
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(isAuthenticated.booleanValue()) {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ uniqId = (user == null || user.getUniqId() == null) ? "" : user.getUniqId();
+ ip = (user == null || user.getIp() == null) ? "" : user.getIp();
+ }
+
+ LoginLog loginLog = new LoginLog();
+ loginLog.setLoginId(uniqId);
+ loginLog.setLoginIp(ip);
+ loginLog.setLoginMthd("O"); // 로그인:I, 로그아웃:O
+ loginLog.setErrOccrrAt("N");
+ loginLog.setErrorCode("");
+ loginLogService.logInsertLoginLog(loginLog);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogAspect.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java (revision 7)
@@ -0,0 +1,287 @@
+package egovframework.com.sym.log.clg.service;
+
+import java.io.Serializable;
+
+/**
+ * @Class Name : LoginLog.java
+ * @Description : 접속 로그 관리를 위한 VO 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.clg)
+ * 2011.09.14 서준식 화면에 검색일자를 표시하기위한 멤버변수 추가.
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+public class LoginLog implements Serializable {
+
+ private static final long serialVersionUID = 3492444929272088373L;
+
+ /** 로그ID */
+ private String logId;
+
+ /** 사용자ID */
+ private String loginId;
+
+ /** 사용자명 */
+ private String loginNm;
+
+ /** 접속IP */
+ private String loginIp;
+
+ /** 로그유형 */
+ private String loginMthd;
+
+ /** 에러발생여부 */
+ private String errOccrrAt;
+
+ /** 에러코드 */
+ private String errorCode;
+
+ /** 생성일시 */
+ private String creatDt;
+
+ /**
+ * 검색시작일
+ */
+ private String searchBgnDe = "";
+ /**
+ * 검색조건
+ */
+ private String searchCnd = "";
+ /**
+ * 검색종료일
+ */
+ private String searchEndDe = "";
+ /**
+ * 검색단어
+ */
+ private String searchWrd = "";
+ /**
+ * 정렬순서(DESC,ASC)
+ */
+ private String sortOrdr = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /** rowNo */
+ private int rowNo = 0;
+
+ /**
+ * 검색시작일_화면용
+ */
+ private String searchBgnDeView = "";//2011.09.14
+
+ /**
+ * 검색종료일_화면용
+ */
+ private String searchEndDeView = "";//2011.09.14
+
+ public String getSearchEndDeView() {
+ return searchEndDeView;
+ }
+ public void setSearchEndDeView(String searchEndDeView) {
+ this.searchEndDeView = searchEndDeView;
+ }
+ public String getSearchBgnDeView() {
+ return searchBgnDeView;
+ }
+ public void setSearchBgnDeView(String searchBgnDeView) {
+ this.searchBgnDeView = searchBgnDeView;
+ }
+
+ public String getLogId() {
+ return logId;
+ }
+
+ public void setLogId(String logId) {
+ this.logId = logId;
+ }
+
+ public String getLoginId() {
+ return loginId;
+ }
+
+ public void setLoginId(String loginId) {
+ this.loginId = loginId;
+ }
+
+ public String getLoginIp() {
+ return loginIp;
+ }
+
+ public void setLoginIp(String loginIp) {
+ this.loginIp = loginIp;
+ }
+
+ public String getLoginMthd() {
+ return loginMthd;
+ }
+
+ public void setLoginMthd(String loginMthd) {
+ this.loginMthd = loginMthd;
+ }
+
+ public String getErrOccrrAt() {
+ return errOccrrAt;
+ }
+
+ public void setErrOccrrAt(String errOccrrAt) {
+ this.errOccrrAt = errOccrrAt;
+ }
+
+ public String getErrorCode() {
+ return errorCode;
+ }
+
+ public void setErrorCode(String errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public String getCreatDt() {
+ return creatDt;
+ }
+
+ public void setCreatDt(String creatDt) {
+ this.creatDt = creatDt;
+ }
+
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ public String getSortOrdr() {
+ return sortOrdr;
+ }
+
+ public void setSortOrdr(String sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+ public String getLoginNm() {
+ return loginNm;
+ }
+
+ public void setLoginNm(String loginNm) {
+ this.loginNm = loginNm;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/clg/service/LoginLog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogService.java (revision 7)
@@ -0,0 +1,47 @@
+package egovframework.com.sym.log.clg.service;
+
+import java.util.Map;
+
+
+/**
+ * @Class Name : EgovLoginLogService.java
+ * @Description : 시스템 로그 관리를 위한 서비스 인터페이스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 3. 11. 이삼섭 최초생성
+ * 2011. 7. 01. 이기하 패키지 분리(sym.log -> sym.log.clg)
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 3. 11.
+ * @version
+ * @see
+ *
+ */
+public interface EgovLoginLogService {
+
+ /**
+ * 접속로그를 기록한다.
+ *
+ * @param LoginLog
+ */
+ public void logInsertLoginLog(LoginLog loinLog) throws Exception;
+
+ /**
+ * 접속로그를 조회한다.
+ *
+ * @param loginLog
+ * @return loginLog
+ * @throws Exception
+ */
+ public LoginLog selectLoginLog(LoginLog loginLog) throws Exception;
+
+ /**
+ * 접속로그 목록을 조회한다.
+ *
+ * @param LoginLog
+ */
+ public Map<?, ?> selectLoginLogInf(LoginLog loinLog) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/log/clg/service/EgovLoginLogService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/web/EgovBkmkMenuManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/bmm/web/EgovBkmkMenuManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/bmm/web/EgovBkmkMenuManageController.java (revision 7)
@@ -0,0 +1,300 @@
+package egovframework.com.sym.mnu.bmm.web;
+
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.support.SessionStatus;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.mnu.bmm.service.BkmkMenuManage;
+import egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO;
+import egovframework.com.sym.mnu.bmm.service.EgovBkmkMenuManageservice;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 바로가기메뉴관리 정보를 관리하기 위한 컨트롤러 클래스
+ * @author 공통컴포넌트팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.9.25 윤성록 최초 생성
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ *
+ * </pre>
+ */
+
+@Controller
+public class EgovBkmkMenuManageController {
+
+ @Resource(name = "bkmkMenuManageservice")
+ private EgovBkmkMenuManageservice bkmkMenuManageService;
+
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertyService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 바로가기메뉴관리 정보에 대한 목록을 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @param status
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @IncludedInfo(name="바로가기메뉴관리", order = 1110 ,gid = 60)
+ @RequestMapping("/sym/mnu/bmm/selectBkmkMenuManageList.do")
+ public String selectBkmkMenuManageList(@ModelAttribute("searchVO") BkmkMenuManageVO bkmkMenuManageVO, SessionStatus status, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ bkmkMenuManageVO.setPageUnit(propertyService.getInt("pageUnit"));
+ bkmkMenuManageVO.setPageSize(propertyService.getInt("pageSize"));
+ bkmkMenuManageVO.setUserId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(bkmkMenuManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(bkmkMenuManageVO.getPageUnit());
+ paginationInfo.setPageSize(bkmkMenuManageVO.getPageSize());
+
+ bkmkMenuManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ bkmkMenuManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ bkmkMenuManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ bkmkMenuManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ bkmkMenuManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ bkmkMenuManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ Map<String, Object> map = bkmkMenuManageService.selectBkmkMenuManageList(bkmkMenuManageVO);
+
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("uniqId", user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageList";
+
+ }
+
+ /**
+ * 바로가기메뉴관리 정보를 삭제한다.
+ *
+ * @param checkMenuIds
+ * @param bkmkMenuManageVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/mnu/bmm/EgovBkmkMenuManageDelete.do")
+ public String deleteMenuManageList(
+ @RequestParam("checkMenuIds") String checkMenuIds ,
+ @ModelAttribute("bkmkMenuManageVO") BkmkMenuManageVO bkmkMenuManageVO,
+ ModelMap model)
+ throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ // model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ String [] temp = checkMenuIds.split(",");
+
+ for(int i =0; i < temp.length; i++){
+ BkmkMenuManage bkmk = new BkmkMenuManage();
+ bkmk.setMenuId(temp[i]);
+ bkmk.setUserId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+ bkmkMenuManageService.deleteBkmkMenuManage(bkmk);
+ }
+
+ return "forward:/sym/mnu/bmm/selectBkmkMenuManageList.do";
+ }
+
+ /**
+ * 바로가기메뉴관리 등록화면으로 이동한다.
+ *
+ * @param BkmkMenuManage
+ * @param status
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/mnu/bmm/addBkmkInf.do")
+ public String addBkmkMenuManage( @ModelAttribute("bkmkMenuManage") BkmkMenuManage bkmkMenuManage, SessionStatus status, ModelMap model) throws Exception {
+
+ if(!bkmkMenuManage.getMenuId().equals("")){
+
+ bkmkMenuManage.setProgrmStrePath(bkmkMenuManageService.selectUrl(bkmkMenuManage));
+ }
+
+ return "egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageRegist";
+ }
+
+ /**
+ * 메뉴정보 목록팝업 화면으로 이동한다.
+ *
+ * @param commandMap
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/mnu/bmm/openPopup.do")
+ public String openPopupWindow(@RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
+
+ String requestUrl = (String)commandMap.get("requestUrl");
+ requestUrl = requestUrl.replaceAll("&", "&");
+ String width = (String)commandMap.get("width");
+ String height = (String)commandMap.get("height");
+ model.addAttribute("requestUrl", requestUrl + "?" + "&PopFlag=Y");
+ model.addAttribute("width", width);
+ model.addAttribute("height", height);
+
+ return "egovframework/com/sym/mnu/bmm/EgovModalPopupFrame";
+ }
+
+ /**
+ * 메뉴정보 목록을 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @param commandMap
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unused")
+ @RequestMapping("/sym/mnu/bmm/selectMenuList.do")
+ public String selectMenuList(@ModelAttribute("bkmkMenuManageVO") BkmkMenuManageVO bkmkMenuManageVO, @RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
+ String popFlag = (String)commandMap.get("PopFlag");
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ bkmkMenuManageVO.setPageUnit(propertyService.getInt("pageUnit"));
+ bkmkMenuManageVO.setPageSize(propertyService.getInt("pageSize"));
+
+ PaginationInfo paginationInfo = new PaginationInfo();
+
+ paginationInfo.setCurrentPageNo(bkmkMenuManageVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(bkmkMenuManageVO.getPageUnit());
+ paginationInfo.setPageSize(bkmkMenuManageVO.getPageSize());
+
+
+ bkmkMenuManageVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ bkmkMenuManageVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ bkmkMenuManageVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ bkmkMenuManageVO.setUserId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+
+ Map<String, Object> map = bkmkMenuManageService.selectMenuList(bkmkMenuManageVO);
+
+ int totCnt = Integer.parseInt((String)map.get("resultCnt"));
+ paginationInfo.setTotalRecordCount(totCnt);
+
+ model.addAttribute("resultList", map.get("resultList"));
+ model.addAttribute("resultCnt", map.get("resultCnt"));
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/mnu/bmm/EgovBkmkMenuPopup";
+ }
+
+ /**
+ * 바로가기메뉴관리 정보를 등록한다.
+ *
+ * @param BkmkMenuManage
+ * @param bindingResult
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/mnu/bmm/registBkmkInf.do")
+ public String registBkmkInf(@ModelAttribute("bkmkMenuManage") BkmkMenuManage bkmkMenuManage,
+ BindingResult bindingResult, SessionStatus status, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(bkmkMenuManage, bindingResult);
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageRegist";
+ }
+
+ bkmkMenuManage.setUserId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+ if (isAuthenticated) {
+ bkmkMenuManageService.insertBkmkMenuManage(bkmkMenuManage);
+ }
+
+ return "forward:/sym/mnu/bmm/selectBkmkMenuManageList.do";
+ }
+
+ /**
+ * 바로가기메뉴관리 미리보기 화면으로 이동한다.
+ *
+ * @param BkmkMenuManageVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/sym/mnu/bmm/previewBkmkInf.do")
+ public String previewBkmkInf(@ModelAttribute("searchVO") BkmkMenuManageVO bkmkMenuManageVO,ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+
+ if(!isAuthenticated) {
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ bkmkMenuManageVO.setFirstIndex(0);
+ bkmkMenuManageVO.setLastIndex(10);
+ bkmkMenuManageVO.setRecordCountPerPage(10);
+
+ bkmkMenuManageVO.setUserId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+
+ Map<String, Object> map = bkmkMenuManageService.selectBkmkMenuManageList(bkmkMenuManageVO);
+
+ model.addAttribute("list_menulist", map.get("resultList"));
+ model.addAttribute("resultMsg", resultMsg);
+
+ return "egovframework/com/sym/mnu/bmm/EgovBookMarkMenuPopup";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/web/EgovBkmkMenuManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/BkmkMenuManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/BkmkMenuManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/BkmkMenuManageDAO.java (revision 7)
@@ -0,0 +1,139 @@
+package egovframework.com.sym.mnu.bmm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.mnu.bmm.service.BkmkMenuManage;
+import egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO;
+import egovframework.com.sym.mnu.mpm.service.MenuManageVO;
+
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * @Class Name : BkmkMenuManageDAO.java
+ * @Description : 바로가기메뉴를 관리하는 서비스를 정의하기위한 데이터 접근 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 9. 25. 윤성록
+ *
+ * @author 공통 컴포넌트 개발팀 윤성록
+ * @since 2009. 9. 25.
+ * @version
+ * @see
+ *
+ */
+@Repository("bkmkMenuManageDAO")
+public class BkmkMenuManageDAO extends EgovComAbstractDAO{
+
+ /**
+ * 바로가기메뉴관리 정보를 삭제한다.
+ *
+ * @param BkmkMenuManage
+ * @return
+ * @throws Exception
+ */
+ public void deleteBkmkMenuManage(BkmkMenuManage bkmkMenuManage) throws Exception {
+ delete("BkmkMenuManageDAO.deleteBkmkMenuManage", bkmkMenuManage);
+ }
+
+ /**
+ * 바로가기메뉴관리 정보를 등록한다.
+ *
+ * @param BkmkMenuManage
+ * @return
+ * @throws Exception
+ */
+ public void insertBkmkMenuManage(BkmkMenuManage bkmkMenuManage) throws Exception {
+ insert("BkmkMenuManageDAO.insertBkmkMenuManage", bkmkMenuManage);
+ }
+
+ /**
+ * 바로가기메뉴관리 정보를 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return
+ * @throws Exception
+ */
+ public BkmkMenuManageVO selectBkmkMenuManageResult(BkmkMenuManageVO bkmkMenuManageVO)
+ throws Exception {
+ BkmkMenuManageVO vo = new BkmkMenuManageVO();
+ vo = (BkmkMenuManageVO)selectOne("BkmkMenuManageDAO.selectBkmkMenuManage", bkmkMenuManageVO);
+ return vo;
+ }
+
+ /**
+ * 조건에 맞는 바로가기메뉴관리 정보 목록을 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<BkmkMenuManageVO> selectBkmkMenuManageList(BkmkMenuManageVO bkmkMenuManageVO)
+ throws Exception {
+ return selectList("BkmkMenuManageDAO.selectBkmkMenuManageList", bkmkMenuManageVO);
+ }
+
+ /**
+ * 조건에 맞는 바로가기메뉴관리 정보 목록의 건수를 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return
+ * @throws Exception
+ */
+ public int selectBkmkMenuManageListCnt(BkmkMenuManageVO bkmkMenuManageVO) throws Exception {
+ return (Integer)selectOne("BkmkMenuManageDAO.selectBkmkMenuManageListCnt", bkmkMenuManageVO);
+ }
+
+ /**
+ * 등록할 메뉴정보 목록을 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<BkmkMenuManageVO> selectBkmkMenuList(BkmkMenuManageVO bkmkMenuManageVO)
+ throws Exception {
+ return selectList("BkmkMenuManageDAO.selectBkmkMenuList", bkmkMenuManageVO);
+ }
+
+ /**
+ * 등록할 메뉴정보 목록의 건수를 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return
+ * @throws Exception
+ */
+ public int selectBkmkMenuListCnt(BkmkMenuManageVO bkmkMenuManageVO) throws Exception {
+ return (Integer)selectOne("BkmkMenuManageDAO.selectBkmkMenuListCnt", bkmkMenuManageVO);
+ }
+
+ /**
+ * 미리보기를 할 바로가기메뉴관리의 목록을 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public List<MenuManageVO> selectBkmkPreview(BkmkMenuManageVO bkmkMenuManageVO)
+ throws Exception {
+ return selectList("BkmkMenuManageDAO.selectBkmkPreview", bkmkMenuManageVO);
+ }
+
+ /**
+ * 선택된 메뉴의 URL 을 조회한다.
+ *
+ * @param bkmkMenuManage
+ * @return
+ * @throws Exception
+ */
+ public String selectUrl(BkmkMenuManage bkmkMenuManage) throws Exception {
+ return (String)selectOne("BkmkMenuManageDAO.selectUrl", bkmkMenuManage);
+ }
+}
+
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/BkmkMenuManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/EgovBkmkMenuManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/EgovBkmkMenuManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/EgovBkmkMenuManageServiceImpl.java (revision 7)
@@ -0,0 +1,142 @@
+package egovframework.com.sym.mnu.bmm.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.sym.mnu.bmm.service.BkmkMenuManage;
+import egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO;
+import egovframework.com.sym.mnu.bmm.service.EgovBkmkMenuManageservice;
+import egovframework.com.sym.mnu.mpm.service.MenuManageVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @Class Name : EgovBkmkMenuManageServiceImpl.java
+ * @Description : 바로가기메뉴를 관리하는 서비스 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2009. 9. 25. 윤성록
+ *
+ * @author 공통 컴포넌트 개발팀 윤성록
+ * @since 2009. 9. 25.
+ * @version
+ * @see
+ *
+ */
+@Service("bkmkMenuManageservice")
+public class EgovBkmkMenuManageServiceImpl extends EgovAbstractServiceImpl implements EgovBkmkMenuManageservice{
+
+
+ @Resource(name = "bkmkMenuManageDAO")
+ private BkmkMenuManageDAO bkmkMenuManageDAO;
+
+ /**
+ * 바로가기메뉴관리 정보를 삭제한다.
+ * @param BkmkMenuManage
+ * @return
+ * @exception Exception
+ */
+ public void deleteBkmkMenuManage(BkmkMenuManage bkmkMenuManage) throws Exception {
+ bkmkMenuManageDAO.deleteBkmkMenuManage(bkmkMenuManage);
+ }
+
+ /**
+ * 바로가기메뉴관리 정보를 등록한다.
+ * @param BkmkMenuManage
+ * @return
+ * @exception Exception
+ */
+ public void insertBkmkMenuManage(BkmkMenuManage bkmkMenuManage) throws Exception {
+ bkmkMenuManageDAO.insertBkmkMenuManage(bkmkMenuManage);
+ }
+
+ /**
+ * 바로가기메뉴관리 정보의 전체목록을 조회한다.
+ * @param BkmkMenuManage
+ * @return Map<String, Object>
+ * @exception Exception
+ */
+ public Map<String, Object> selectBkmkMenuManageList(
+ BkmkMenuManageVO bkmkMenuManageVO) throws Exception{
+
+ List<BkmkMenuManageVO> result = bkmkMenuManageDAO.selectBkmkMenuManageList(bkmkMenuManageVO);
+
+ int cnt = bkmkMenuManageDAO.selectBkmkMenuManageListCnt(bkmkMenuManageVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+ }
+
+ /**
+ * 바로가기메뉴관리 정보를 조회한다.
+ * @param BkmkMenuManageVO
+ * @return BkmkMenuManageVO
+ * @exception Exception
+ */
+ public BkmkMenuManageVO selectBkmkMenuManageResult(
+ BkmkMenuManageVO bkmkMenuManageVO) throws Exception {
+
+ return bkmkMenuManageDAO.selectBkmkMenuManageResult(bkmkMenuManageVO);
+ }
+
+ /**
+ * 등록할 메뉴정보 목록을 조회한다.
+ * @param BkmkMenuManageVO
+ * @return Map<String, Object>
+ * @exception Exception
+ */
+ public Map<String, Object> selectMenuList(BkmkMenuManageVO bkmkMenuManageVO)
+ throws Exception {
+
+ List<BkmkMenuManageVO> result = bkmkMenuManageDAO.selectBkmkMenuList(bkmkMenuManageVO);
+
+ int cnt = bkmkMenuManageDAO.selectBkmkMenuListCnt(bkmkMenuManageVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ map.put("resultList", result);
+ map.put("resultCnt", Integer.toString(cnt));
+
+ return map;
+
+ }
+
+ /**
+ * 미리보기를 할 바로가기메뉴관리의 목록을 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return List<MenuManageVO>
+ * @throws Exception
+ */
+ public List<MenuManageVO> selectBkmkPreviewList(BkmkMenuManageVO bkmkMenuManageVO)
+ throws Exception {
+
+
+ List<MenuManageVO> result = bkmkMenuManageDAO.selectBkmkPreview(bkmkMenuManageVO);
+
+ return result;
+ }
+
+ /**
+ * 선택된 메뉴의 URL 을 조회한다.
+ *
+ * @param bkmkMenuManage
+ * @return
+ * @throws Exception
+ */
+ public String selectUrl(BkmkMenuManage bkmkMenuManage) throws Exception {
+
+ return bkmkMenuManageDAO.selectUrl(bkmkMenuManage);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/impl/EgovBkmkMenuManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManage.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManage.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManage.java (revision 7)
@@ -0,0 +1,112 @@
+package egovframework.com.sym.mnu.bmm.service;
+
+import java.io.Serializable;
+
+/**
+ * 바로가기메뉴관리를 위한 모델 클래스
+ * @author 공통컴포넌트개발팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.9.25 윤성록 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class BkmkMenuManage implements Serializable{
+
+ /** 메뉴 아이디 */
+ String menuId = "";
+
+ /** 메뉴명 */
+ String menuNm = "";
+
+ /** 메뉴 URL */
+ String progrmStrePath = "";
+
+ /** 등록자 아이디 */
+ String userId = "";
+
+ /**
+ * menuId attribute를 리턴한다.
+ *
+ * @return the menuId
+ */
+ public String getMenuId() {
+ return menuId;
+ }
+
+ /**
+ * menuId attribute 값을 설정한다.
+ *
+ * @param menuId
+ * the menuId to set
+ */
+ public void setMenuId(String menuId) {
+ this.menuId = menuId;
+ }
+
+ /**
+ * menuNm attribute를 리턴한다.
+ *
+ * @return the menuNm
+ */
+ public String getMenuNm() {
+ return menuNm;
+ }
+
+ /**
+ * menuNm attribute 값을 설정한다.
+ *
+ * @param menuNm
+ * the menuNm to set
+ */
+ public void setMenuNm(String menuNm) {
+ this.menuNm = menuNm;
+ }
+
+ /**
+ * progrmStrePath attribute를 리턴한다.
+ *
+ * @return the progrmStrePath
+ */
+ public String getProgrmStrePath() {
+ return progrmStrePath;
+ }
+
+
+ /**
+ * progrmStrePath attribute 값을 설정한다.
+ *
+ * @param progrmStrePath
+ * the progrmStrePath to set
+ */
+ public void setProgrmStrePath(String progrmStrePath) {
+ this.progrmStrePath = progrmStrePath;
+ }
+
+ /**
+ * userId attribute를 리턴한다.
+ *
+ * @return the userId
+ */
+ public String getUserId() {
+ return userId;
+ }
+
+ /**
+ * userId attribute 값을 설정한다.
+ *
+ * @param userId
+ * the userId to set
+ */
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManage.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManageVO.java (revision 7)
@@ -0,0 +1,375 @@
+package egovframework.com.sym.mnu.bmm.service;
+
+/**
+ * 바로가기메뉴관리를 위한 VO 모델 클래스
+ * @author 공통컴포넌트개발팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.9.25 윤성록 최초 생성
+ *
+ * </pre>
+ */
+public class BkmkMenuManageVO extends BkmkMenuManage{
+
+ private static final long serialVersionUID = 7602193410939256848L;
+
+ /** 검색시작일 */
+ private String searchBgnDe = "";
+
+ /** 검색조건 */
+ private String searchCnd = "";
+
+ /** 검색종료일 */
+ private String searchEndDe = "";
+
+ /** 검색단어 */
+ private String searchWrd = "";
+
+ /** 정렬순서(DESC,ASC) */
+ private long sortOrdr = 0L;
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** 첫페이지 인덱스 */
+ private int firstIndex = 1;
+
+ /** 마지막페이지 인덱스 */
+ private int lastIndex = 1;
+
+ /** 페이지당 레코드 개수 */
+ private int recordCountPerPage = 10;
+
+ /** 레코드 번호 */
+ private int rowNo = 0;
+
+ /** 최초 등록자명 */
+ private String frstRegisterNm = "";
+
+ /** 최종 수정자명 */
+ private String lastUpdusrNm = "";
+
+ /** 메뉴 설명*/
+ String menuDc = "";
+
+
+ /**
+ * searchBgnDe attribute를 리턴한다.
+ *
+ * @return the searchBgnDe
+ */
+ public String getSearchBgnDe() {
+ return searchBgnDe;
+ }
+
+ /**
+ * searchBgnDe attribute 값을 설정한다.
+ *
+ * @param searchBgnDe
+ * the searchBgnDe to set
+ */
+ public void setSearchBgnDe(String searchBgnDe) {
+ this.searchBgnDe = searchBgnDe;
+ }
+
+ /**
+ * searchCnd attribute를 리턴한다.
+ *
+ * @return the searchCnd
+ */
+ public String getSearchCnd() {
+ return searchCnd;
+ }
+
+ /**
+ * searchCnd attribute 값을 설정한다.
+ *
+ * @param searchCnd
+ * the searchCnd to set
+ */
+ public void setSearchCnd(String searchCnd) {
+ this.searchCnd = searchCnd;
+ }
+
+ /**
+ * searchEndDe attribute를 리턴한다.
+ *
+ * @return the searchEndDe
+ */
+ public String getSearchEndDe() {
+ return searchEndDe;
+ }
+
+ /**
+ * searchEndDe attribute 값을 설정한다.
+ *
+ * @param searchEndDe
+ * the searchEndDe to set
+ */
+ public void setSearchEndDe(String searchEndDe) {
+ this.searchEndDe = searchEndDe;
+ }
+
+ /**
+ * searchWrd attribute를 리턴한다.
+ *
+ * @return the searchWrd
+ */
+ public String getSearchWrd() {
+ return searchWrd;
+ }
+
+ /**
+ * searchWrd attribute 값을 설정한다.
+ *
+ * @param searchWrd
+ * the searchWrd to set
+ */
+ public void setSearchWrd(String searchWrd) {
+ this.searchWrd = searchWrd;
+ }
+
+ /**
+ * sortOrdr attribute를 리턴한다.
+ *
+ * @return the sortOrdr
+ */
+ public long getSortOrdr() {
+ return sortOrdr;
+ }
+
+ /**
+ * sortOrdr attribute 값을 설정한다.
+ *
+ * @param sortOrdr
+ * the sortOrdr to set
+ */
+ public void setSortOrdr(long sortOrdr) {
+ this.sortOrdr = sortOrdr;
+ }
+
+ /**
+ * searchUseYn attribute를 리턴한다.
+ *
+ * @return the searchUseYn
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ *
+ * @param searchUseYn
+ * the searchUseYn to set
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute를 리턴한다.
+ *
+ * @return the pageIndex
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ *
+ * @param pageIndex
+ * the pageIndex to set
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute를 리턴한다.
+ *
+ * @return the pageUnit
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ *
+ * @param pageUnit
+ * the pageUnit to set
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute를 리턴한다.
+ *
+ * @return the pageSize
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ *
+ * @param pageSize
+ * the pageSize to set
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute를 리턴한다.
+ *
+ * @return the firstIndex
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ *
+ * @param firstIndex
+ * the firstIndex to set
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute를 리턴한다.
+ *
+ * @return the lastIndex
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ *
+ * @param lastIndex
+ * the lastIndex to set
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute를 리턴한다.
+ *
+ * @return the recordCountPerPage
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ *
+ * @param recordCountPerPage
+ * the recordCountPerPage to set
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+ /**
+ * getRowNo attribute를 리턴한다.
+ *
+ * @return the getRowNo
+ */
+ public int getRowNo() {
+ return rowNo;
+ }
+
+ /**
+ * getRowNo attribute 값을 설정한다.
+ *
+ * @param getRowNo
+ * the getRowNo to set
+ */
+ public void setRowNo(int rowNo) {
+ this.rowNo = rowNo;
+ }
+
+ /**
+ * frstRegisterNm attribute를 리턴한다.
+ *
+ * @return the frstRegisterNm
+ */
+ public String getFrstRegisterNm() {
+ return frstRegisterNm;
+ }
+
+ /**
+ * frstRegisterNm attribute 값을 설정한다.
+ *
+ * @param frstRegisterNm
+ * the frstRegisterNm to set
+ */
+ public void setFrstRegisterNm(String frstRegisterNm) {
+ this.frstRegisterNm = frstRegisterNm;
+ }
+
+ /**
+ * lastUpdusrNm attribute를 리턴한다.
+ *
+ * @return the lastUpdusrNm
+ */
+ public String getLastUpdusrNm() {
+ return lastUpdusrNm;
+ }
+
+ /**
+ * lastUpdusrNm attribute 값을 설정한다.
+ *
+ * @param lastUpdusrNm
+ * the lastUpdusrNm to set
+ */
+ public void setLastUpdusrNm(String lastUpdusrNm) {
+ this.lastUpdusrNm = lastUpdusrNm;
+ }
+
+ /**
+ * menuDc attribute를 리턴한다.
+ *
+ * @return the menuDc
+ */
+ public String getMenuDc() {
+ return menuDc;
+ }
+
+ /**
+ * menuDc attribute 값을 설정한다.
+ *
+ * @param menuDc
+ * the menuDc to set
+ */
+ public void setMenuDc(String menuDc) {
+ this.menuDc = menuDc;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/BkmkMenuManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/EgovBkmkMenuManageservice.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/EgovBkmkMenuManageservice.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/EgovBkmkMenuManageservice.java (revision 7)
@@ -0,0 +1,84 @@
+package egovframework.com.sym.mnu.bmm.service;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 바로가기메뉴관리 정보를 관리하기 위한 서비스 인터페이스 클래스
+ * @author 공통컴포넌트팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.9.25 윤성록 최초 생성
+ *
+ * </pre>
+ */
+public interface EgovBkmkMenuManageservice {
+
+ /**
+ * 바로가기메뉴관리 정보를 삭제한다.
+ * @param BkmkMenuManage
+ * @return
+ * @exception Exception
+ */
+ public void deleteBkmkMenuManage(BkmkMenuManage BkmkMenuManage) throws Exception ;
+
+ /**
+ * 바로가기메뉴관리 정보를 등록한다.
+ * @param BkmkMenuManage
+ * @return
+ * @exception Exception
+ */
+ public void insertBkmkMenuManage(BkmkMenuManage bkmkMenuManage)throws Exception ;
+
+ /**
+ * 바로가기메뉴관리 정보의 전체목록을 조회한다.
+ * @param BkmkMenuManage
+ * @return Map<String, Object>
+ * @exception Exception
+ */
+ public Map<String, Object> selectBkmkMenuManageList(BkmkMenuManageVO bkmkMenuManageVO) throws Exception ;
+
+ /**
+ * 바로가기메뉴관리 정보를 조회한다.
+ * @param BkmkMenuManageVO
+ * @return BkmkMenuManageVO
+ * @exception Exception
+ */
+ public BkmkMenuManageVO selectBkmkMenuManageResult(BkmkMenuManageVO bkmkMenuManageVO) throws Exception ;
+
+ /**
+ * 등록할 메뉴정보 목록을 조회한다.
+ * @param BkmkMenuManageVO
+ * @return Map<String, Object>
+ * @exception Exception
+ */
+ public Map<String, Object> selectMenuList(BkmkMenuManageVO bkmkMenuManageVO) throws Exception;
+
+ /**
+ * 미리보기를 할 바로가기메뉴관리의 목록을 조회한다.
+ *
+ * @param BkmkMenuManageVO
+ * @return List<MenuManageVO>
+ * @throws Exception
+ */
+ public List<?> selectBkmkPreviewList(BkmkMenuManageVO bkmkMenuManageVO) throws Exception;
+
+ /**
+ * 선택된 메뉴의 URL 을 조회한다.
+ *
+ * @param bkmkMenuManage
+ * @return
+ * @throws Exception
+ */
+ public String selectUrl(BkmkMenuManage bkmkMenuManage) throws Exception;
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/bmm/service/EgovBkmkMenuManageservice.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/web/EgovMenuCreateManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/web/EgovMenuCreateManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/web/EgovMenuCreateManageController.java (revision 7)
@@ -0,0 +1,294 @@
+package egovframework.com.sym.mnu.mcm.web;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.mnu.mcm.service.EgovMenuCreateManageService;
+import egovframework.com.sym.mnu.mcm.service.MenuCreatVO;
+import egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 메뉴목록 관리및 메뉴생성, 사이트맵 생성을 처리하는 비즈니스 구현 클래스
+ *
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------------ -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.07.29 서준식 사이트맵 저장경로 수정
+ * 2011.08.26 정진오 IncludedInfo annotation 추가
+ * 2013.06.17 이기하 사이트맵 생성시 경로 오류 수정
+ * 2018.08.09 신용호 X-XSS 관련 크롬에서 오탐되는 부분 수정
+ * 2018.09.10 신용호 selectMenuCreatManagList 불필요한 로직 제거
+ * </pre>
+ */
+
+@Controller
+public class EgovMenuCreateManageController {
+
+ /* Validator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMenuManageService */
+ @Resource(name = "meunCreateManageService")
+ private EgovMenuCreateManageService menuCreateManageService;
+
+ /** EgovMessageSource */
+ @Resource(name = "egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ /*********** 메뉴 생성 관리 ***************/
+
+ /**
+ * *메뉴생성목록을 조회한다.
+ *
+ * @param searchVO
+ * ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/mcm/EgovMenuCreatManage"
+ * @exception Exception
+ */
+ @IncludedInfo(name = "메뉴생성관리", order = 1100, gid = 60)
+ @RequestMapping(value = "/sym/mnu/mcm/EgovMenuCreatManageSelect.do")
+ public String selectMenuCreatManagList(@ModelAttribute("searchVO") ComDefaultVO searchVO, ModelMap model) throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+ /*
+ if (searchVO.getSearchKeyword() != null && !searchVO.getSearchKeyword().equals("")) {
+
+ int IDcnt = menuCreateManageService.selectUsrByPk(searchVO);
+ if (IDcnt == 0) {
+ resultMsg = egovMessageSource.getMessage("info.nodata.msg");
+ } else {
+ // AuthorCode 검색
+ MenuCreatVO vo = new MenuCreatVO();
+ vo = menuCreateManageService.selectAuthorByUsr(searchVO);
+ searchVO.setSearchKeyword(vo.getAuthorCode());
+ }
+ }
+ */
+ List<?> list_menumanage = menuCreateManageService.selectMenuCreatManagList(searchVO);
+ if ( list_menumanage.size() == 0 )
+ resultMsg = egovMessageSource.getMessage("info.nodata.msg");
+ model.addAttribute("list_menumanage", list_menumanage);
+
+ int totCnt = menuCreateManageService.selectMenuCreatManagTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("resultMsg", resultMsg);
+ return "egovframework/com/sym/mnu/mcm/EgovMenuCreatManage";
+ }
+
+ /* 메뉴생성 세부조회 */
+ /**
+ * 메뉴생성 세부화면을 조회한다.
+ *
+ * @param menuCreatVO
+ * MenuCreatVO
+ * @return 출력페이지정보 "sym/mnu/mcm/EgovMenuCreat"
+ * @exception Exception
+ */
+ @RequestMapping(value = "/sym/mnu/mcm/EgovMenuCreatSelect.do")
+ public String selectMenuCreatList(@ModelAttribute("menuCreatVO") MenuCreatVO menuCreatVO, ModelMap model) throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ List<?> list_menulist = menuCreateManageService.selectMenuCreatList(menuCreatVO);
+ model.addAttribute("list_menulist", list_menulist);
+ model.addAttribute("resultVO", menuCreatVO);
+
+ return "egovframework/com/sym/mnu/mcm/EgovMenuCreat";
+ }
+
+ /**
+ * 메뉴생성처리 및 메뉴생성내역을 등록한다.
+ *
+ * @param checkedAuthorForInsert
+ * String
+ * @param checkedMenuNoForInsert
+ * String
+ * @return 출력페이지정보 등록처리시 "forward:/sym/mnu/mcm/EgovMenuCreatSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping("/sym/mnu/mcm/EgovMenuCreatInsert.do")
+ public String insertMenuCreatList(@RequestParam("checkedAuthorForInsert") String checkedAuthorForInsert, @RequestParam("checkedMenuNoForInsert") String checkedMenuNoForInsert,
+ @ModelAttribute("menuCreatVO") MenuCreatVO menuCreatVO, ModelMap model) throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ String[] insertMenuNo = checkedMenuNoForInsert.split(",");
+ if (insertMenuNo == null || (insertMenuNo.length == 0)) {
+ resultMsg = egovMessageSource.getMessage("fail.common.insert");
+ } else {
+ menuCreateManageService.insertMenuCreatList(checkedAuthorForInsert, checkedMenuNoForInsert);
+ resultMsg = egovMessageSource.getMessage("success.common.insert");
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return "forward:/sym/mnu/mcm/EgovMenuCreatSelect.do";
+ }
+
+ /* 메뉴사이트맵 생성조회 */
+ /**
+ * 메뉴사이트맵을 생성할 내용을 조회한다.
+ *
+ * @param menuSiteMapVO
+ * MenuSiteMapVO
+ * @return 출력페이지정보 등록처리시 "sym/mnu/mcm/EgovMenuCreatSiteMap"
+ * @exception Exception
+ */
+ @RequestMapping(value = "/sym/mnu/mcm/EgovMenuCreatSiteMapSelect.do")
+ public String selectMenuCreatSiteMap(@ModelAttribute("menuSiteMapVO") MenuSiteMapVO menuSiteMapVO, ModelMap model) throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ List<?> list_menulist = menuCreateManageService.selectMenuCreatSiteMapList(menuSiteMapVO);
+ model.addAttribute("list_menulist", list_menulist);
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+ menuSiteMapVO.setCreatPersonId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+ model.addAttribute("resultVO", menuSiteMapVO);
+ return "egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap";
+ }
+
+ /**
+ * 메뉴사이트맵 생성처리 및 사이트맵을 등록한다.
+ *
+ * @param menuSiteMapVO
+ * MenuSiteMapVO
+ * @param valueHtml
+ * String
+ * @return 출력페이지정보 "sym/mnu/mcm/EgovMenuCreatSiteMap"
+ * @exception Exception
+ */
+ @RequestMapping(value = "/sym/mnu/mcm/EgovMenuCreatSiteMapInsert.do")
+ public String selectMenuCreatSiteMapInsert(@ModelAttribute("menuSiteMapVO") MenuSiteMapVO menuSiteMapVO, @RequestParam("valueHtml") String valueHtml, ModelMap model
+ ,HttpServletResponse response)
+ throws Exception {
+ boolean chkCreat = false;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ /*menuSiteMapVO.setTmpRootPath(EgovProperties.RELATIVE_PATH_PREFIX
+ + ".." + System.getProperty("file.separator") + ".."
+ + System.getProperty("file.separator") + "..");*/
+
+ /* 사이트맵 파일 생성 위치 지정 */
+ //String currentPath = EgovMenuCreateManageController.class.getResource("").getPath();
+ String currentPath = EgovMenuCreateManageController.class.getProtectionDomain().getCodeSource() == null ? "" : EgovStringUtil.isNullToString(EgovMenuCreateManageController.class.getProtectionDomain().getCodeSource().getLocation().getPath());
+ //System.out.println("===>>> currentPath = "+currentPath);
+ String path = currentPath.substring(0, currentPath.lastIndexOf("WEB-INF"));
+ menuSiteMapVO.setTmpRootPath(path);
+ menuSiteMapVO.setBndeFilePath("/html/egovframework/com/sym/mnu/mcm/");
+ //System.out.println("===>>> path = "+path);
+ //System.out.println("===>>> menuSiteMapVO.getMapCreatId() = "+menuSiteMapVO.getMapCreatId());
+
+ /*
+ * 사이트맵 파일 생성 위치 지정 if ("WINDOWS".equals(Globals.OS_TYPE)) {
+ * menuSiteMapVO
+ * .setTmp_rootPath("D:/egovframework/workspace/egovcmm/src/main/webapp"
+ * ); }else{menuSiteMapVO.setTmp_rootPath(
+ * "/product/jeus/webhome/was_com/egovframework-com-1_0/egovframework-com-1_0_war___"
+ * ); }
+ */
+ chkCreat = menuCreateManageService.creatSiteMap(menuSiteMapVO, valueHtml);
+ if (!chkCreat) {
+ resultMsg = egovMessageSource.getMessage("fail.common.insert");
+ } else {
+ resultMsg = egovMessageSource.getMessage("success.common.insert");
+ }
+ List<?> list_menulist = menuCreateManageService.selectMenuCreatSiteMapList(menuSiteMapVO);
+
+ model.addAttribute("list_menulist", list_menulist);
+ model.addAttribute("resultVO", menuSiteMapVO);
+ model.addAttribute("resultMsg", resultMsg);
+
+ return "egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap";
+ }
+
+ /* 메뉴사이트맵 생성조회 */
+ /**
+ * 메뉴사이트맵을 생성할 내용을 조회한다.
+ *
+ * @param menuSiteMapVO
+ * MenuSiteMapVO
+ * @return 출력페이지정보 등록처리시 "sym/mnu/mcm/EgovMenuCreatSiteMap"
+ * @exception Exception
+ */
+ @RequestMapping(value = "/sym/mnu/mcm/EgovSiteMap.do")
+ public String selectSiteMap(@ModelAttribute("menuCreatVO") MenuSiteMapVO menuSiteMapVO, ModelMap model) throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+ menuSiteMapVO.setCreatPersonId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+
+ List<?> list_menulist = menuCreateManageService.selectSiteMapByUser(menuSiteMapVO);
+ model.addAttribute("list_menulist", list_menulist);
+
+ model.addAttribute("resultVO", menuSiteMapVO);
+ return "egovframework/com/sym/mnu/mcm/EgovSiteMap";
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/web/EgovMenuCreateManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/EgovMenuCreateManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/EgovMenuCreateManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/EgovMenuCreateManageServiceImpl.java (revision 7)
@@ -0,0 +1,216 @@
+package egovframework.com.sym.mnu.mcm.service.impl;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.com.sym.mnu.mcm.service.EgovMenuCreateManageService;
+import egovframework.com.sym.mnu.mcm.service.MenuCreatVO;
+import egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+/**
+ * 메뉴목록, 사이트맵 생성을 처리하는 비즈니스 구현 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.07.01 서준식 EgovMenuManageServiceImpl에서 메뉴 생성 관련 부분 분리
+ * 2011.10.07 이기하 finally문을 추가하여 에러시 자원반환할 수 있도록 추가
+ * 2011.10.12 이기하 사이트맵 생성시 특수문자 치환
+ *
+ *
+ * </pre>
+ */
+@Service("meunCreateManageService")
+public class EgovMenuCreateManageServiceImpl extends EgovAbstractServiceImpl implements EgovMenuCreateManageService {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovMenuCreateManageServiceImpl.class);
+
+ @Resource(name = "menuCreateManageDAO")
+ private MenuCreateManageDAO menuCreateManageDAO;
+
+ /**
+ * ID 존재여부를 조회
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectUsrByPk(ComDefaultVO vo) throws Exception {
+ return menuCreateManageDAO.selectUsrByPk(vo);
+ }
+
+ /**
+ * 메뉴생성 내역을 조회
+ * @param vo MenuCreatVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatList(MenuCreatVO vo) throws Exception {
+ return menuCreateManageDAO.selectMenuCreatList(vo);
+ }
+
+ /**
+ * 화면에 조회된 메뉴정보로 메뉴생성내역 데이터베이스에서 입력
+ * @param checkedAuthorForInsert String
+ * @param checkedMenuNoForInsert String
+ * @exception Exception
+ */
+ public void insertMenuCreatList(String checkedAuthorForInsert, String checkedMenuNoForInsert) throws Exception {
+ MenuCreatVO menuCreatVO = null;
+ int AuthorCnt = 0;
+ String[] insertMenuNo = checkedMenuNoForInsert.split(",");
+
+ String insertAuthor = checkedAuthorForInsert;
+ menuCreatVO = new MenuCreatVO();
+ menuCreatVO.setAuthorCode(insertAuthor);
+ AuthorCnt = menuCreateManageDAO.selectMenuCreatCnt(menuCreatVO);
+
+ // 이전에 존재하는 권한코드에 대한 메뉴설정내역 삭제
+ if (AuthorCnt > 0) {
+ menuCreateManageDAO.deleteMenuCreat(menuCreatVO);
+ }
+ for (int i = 0; i < insertMenuNo.length; i++) {
+ menuCreatVO.setAuthorCode(insertAuthor);
+ menuCreatVO.setMenuNo(Integer.parseInt(insertMenuNo[i]));
+ menuCreateManageDAO.insertMenuCreat(menuCreatVO);
+ }
+ }
+
+ /**
+ * 메뉴생성관리 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatManagList(ComDefaultVO vo) throws Exception {
+ return menuCreateManageDAO.selectMenuCreatManagList(vo);
+ }
+
+ /**
+ * ID에 대한 권한코드를 조회
+ * @param vo ComDefaultVO
+ * @return MenuCreatVO
+ * @exception Exception
+ */
+ public MenuCreatVO selectAuthorByUsr(ComDefaultVO vo) throws Exception {
+ return menuCreateManageDAO.selectAuthorByUsr(vo);
+ }
+
+ /**
+ * 메뉴생성관리 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuCreatManagTotCnt(ComDefaultVO vo) throws Exception {
+ return menuCreateManageDAO.selectMenuCreatManagTotCnt(vo);
+ }
+
+ /**
+ * 메뉴생성 사이트맵 내용 조회
+ * @param vo MenuSiteMapVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatSiteMapList(MenuSiteMapVO vo) throws Exception {
+ return menuCreateManageDAO.selectMenuCreatSiteMapList(vo);
+ }
+
+ /**
+ * 사용자 권한별 사이트맵 내용 조회
+ * @param vo MenuSiteMapVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectSiteMapByUser(MenuSiteMapVO vo) throws Exception {
+ return menuCreateManageDAO.selectSiteMapByUser(vo);
+ }
+
+ /**
+ * 사이트맵 등록
+ * @param menuSiteMapvo MenuSiteMapVO
+ * @param vHtmlValue String
+ * @return boolean
+ * @exception Exception
+ */
+ public boolean creatSiteMap(MenuSiteMapVO menuSiteMapvo, String vHtmlValue) throws Exception {
+ boolean chkCreat = false;
+ String vSiteMapName = null;
+ int SiteMapCnt = 0;
+ //String newMapCreatId = null;
+ MenuCreatVO menuCreatVO = new MenuCreatVO();
+
+ menuCreatVO.setMenuNo(menuSiteMapvo.getMenuNo());
+ menuCreatVO.setAuthorCode(menuSiteMapvo.getAuthorCode());
+ //vSiteMapName = menuSiteMapvo.getTmp_rootPath()+"/"+menuSiteMapvo.getBndeFileNm();
+ vSiteMapName = menuSiteMapvo.getTmpRootPath() + menuSiteMapvo.getBndeFilePath() + menuSiteMapvo.getBndeFileNm();
+ chkCreat = siteMapCreat(vSiteMapName, vHtmlValue);
+ if (chkCreat) {
+ SiteMapCnt = menuCreateManageDAO.selectSiteMapCnt(menuSiteMapvo);
+ if (SiteMapCnt > 0) {
+ menuCreatVO.setMapCreatId(menuSiteMapvo.getMapCreatId() + Integer.toString(SiteMapCnt));
+ menuSiteMapvo.setMapCreatId(menuSiteMapvo.getMapCreatId() + Integer.toString(SiteMapCnt));
+ } else {
+ menuCreatVO.setMapCreatId(menuSiteMapvo.getMapCreatId());
+ }
+ menuCreateManageDAO.creatSiteMap(menuSiteMapvo);
+ menuCreateManageDAO.updateMenuCreat(menuCreatVO);
+
+ }
+ return chkCreat;
+ }
+
+ /**
+ * 메뉴생성 사이트맵 Html 파일 생성
+ * @param vSiteMapName String
+ * @param vHtmlValue String
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean siteMapCreat(String vSiteMapName, String vHtmlValue) throws Exception {
+ boolean success = false;
+ String FileName = null;
+ char FILE_SEPARATOR = File.separatorChar;
+ BufferedWriter out = null;
+ try {
+ FileName = vSiteMapName.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file = new File(EgovWebUtil.filePathBlackList(FileName));
+ out = new BufferedWriter(new FileWriter(file));
+
+ // 사이트맵 생성시 특수문자 치환
+ vHtmlValue = vHtmlValue.replaceAll("<", "<");
+ vHtmlValue = vHtmlValue.replaceAll(">", ">");
+ vHtmlValue = vHtmlValue.replaceAll(""", "\"");
+ vHtmlValue = vHtmlValue.replaceAll("'", "'");
+
+ out.write(vHtmlValue);
+ success = true;
+ } catch (IOException e) {
+ LOGGER.error("IOException", e);
+ } finally {
+ EgovResourceCloseHelper.close(out);
+ }
+
+ return success;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/EgovMenuCreateManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/MenuCreateManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/MenuCreateManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/MenuCreateManageDAO.java (revision 7)
@@ -0,0 +1,166 @@
+package egovframework.com.sym.mnu.mcm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.mnu.mcm.service.MenuCreatVO;
+import egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ * 메뉴생성, 사이트맵 생성에 대한 DAO 클래스를 정의한다. *
+ * @author 공통컴포넌트 개발팀 서준식
+ * @since 2011.06.30
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011.06.30 서 준 식 최초 생성(MenuManageDAO 클래스로 부터 분리
+ * 메소드들을 MenuManageDAO 클래스에서 분리해옮)
+ *
+ * </pre>
+ */
+
+@Repository("menuCreateManageDAO")
+public class MenuCreateManageDAO extends EgovComAbstractDAO{
+
+
+
+ /**
+ * ID 존재여부를 조회
+ * @param vo MenuManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectUsrByPk(ComDefaultVO vo) throws Exception{
+ return (Integer)selectOne("menuManageDAO.selectUsrByPk", vo);
+ }
+
+ /**
+ * ID에 대한 권한코드를 조회
+ * @param vo MenuCreatVO
+ * @return int
+ * @exception Exception
+ */
+ public MenuCreatVO selectAuthorByUsr(ComDefaultVO vo) throws Exception{
+ return (MenuCreatVO)selectOne("menuManageDAO.selectAuthorByUsr", vo);
+ }
+
+ /**
+ * 메뉴생성관리 내역을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatManagList(ComDefaultVO vo) throws Exception{
+ return selectList("menuManageDAO.selectMenuCreatManageList_D", vo);
+ }
+
+ /**
+ * 메뉴생성관리 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuCreatManagTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("menuManageDAO.selectMenuCreatManageTotCnt_S", vo);
+ }
+
+ /*********** 메뉴 생성 관리 ***************/
+ /**
+ * 메뉴생성 내역을 조회
+ * @param vo MenuCreatVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatList(MenuCreatVO vo) throws Exception{
+ return selectList("menuManageDAO.selectMenuCreatList_D", vo);
+ }
+
+ /**
+ * 메뉴생성내역 등록
+ * @param vo MenuCreatVO
+ * @exception Exception
+ */
+ public void insertMenuCreat(MenuCreatVO vo){
+ insert("menuManageDAO.insertMenuCreat_S", vo);
+ }
+
+ /**
+ * 메뉴생성 사이트맵 내용 조회
+ * @param vo MenuSiteMapVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatSiteMapList(MenuSiteMapVO vo) throws Exception{
+ return selectList("menuManageDAO.selectMenuCreatSiteMapList_D", vo);
+ }
+
+
+
+ /**
+ * 사이트맵 등록
+ * @param vo MenuSiteMapVO
+ * @exception Exception
+ */
+ public void creatSiteMap(MenuSiteMapVO vo){
+ insert("menuManageDAO.insertSiteMap_S", vo);
+ }
+
+ /**
+ * 사용자 권한별 사이트맵 내용 조회
+ * @param vo MenuSiteMapVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectSiteMapByUser(MenuSiteMapVO vo) throws Exception{
+ return selectList("menuManageDAO.selectSiteMapByUser", vo);
+ }
+
+ /**
+ * 메뉴생성내역 존재여부 조회한다.
+ * @param vo MenuCreatVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuCreatCnt(MenuCreatVO vo) {
+ return (Integer)selectOne("menuManageDAO.selectMenuCreatCnt_S", vo);
+ }
+
+
+ /**
+ * 메뉴생성내역 수정
+ * @param vo MenuCreatVO
+ * @exception Exception
+ */
+ public void updateMenuCreat(MenuCreatVO vo){
+ update("menuManageDAO.updateMenuCreat_S", vo);
+ }
+
+
+ /**
+ * 메뉴생성내역 삭제
+ * @param vo MenuCreatVO
+ * @exception Exception
+ */
+ public void deleteMenuCreat(MenuCreatVO vo){
+ delete("menuManageDAO.deleteMenuCreat_S", vo);
+ }
+
+ /**
+ * 사이트맵 존재여부 조회한다.
+ * @param vo MenuSiteMapVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectSiteMapCnt(MenuSiteMapVO vo) {
+ return (Integer)selectOne("menuManageDAO.selectSiteMapCnt_S", vo);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/impl/MenuCreateManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMapVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMapVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMapVO.java (revision 7)
@@ -0,0 +1,321 @@
+package egovframework.com.sym.mnu.mcm.service;
+/**
+ * 사이트맵/메인메뉴 처리를 위한 VO 클래스르를 정의한다
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+
+public class MenuSiteMapVO{
+
+ /** 메뉴번호 */
+ private int menuNo;
+
+ /* 사이트맵 */
+ /** 생성자ID **/
+ private String creatPersonId;
+ /** 맵생성ID */
+ private String mapCreatId;
+ /** 맵파일명 */
+ private String bndeFileNm;
+ /** 맵파일경로 */
+ private String bndeFilePath;
+
+ /* 권한정보설정 */
+ /** 권한코드 */
+ private String authorCode;
+ /** 권한명 */
+ private String authorNm;
+ /** 권한설명 */
+ private String authorDc;
+ /** 권한생성일자 */
+ private String authorCreatDe;
+
+ /* 기타VO변수 */
+ /** rootPath Temp */
+ private String tmpRootPath;
+
+/* Login 메뉴관련 VO변수 */
+ /** tmp_Id */
+ private String tmpId;
+ /** tmp_Password */
+ private String tmpPassword;
+ /** tmp_Name */
+ private String tmpName;
+ /** tmp_UserSe */
+ private String tmpUserSe;
+ /** tmp_Email */
+ private String tmpEmail;
+ /** tmp_OrgnztId */
+ private String tmpOrgnztId;
+ /** tmp_UniqId */
+ private String tmpUniqId;
+ /** tmp_Cmd */
+ private String tmpCmd;
+
+ /**
+ * menuNo attribute를 리턴한다.
+ * @return int
+ */
+ public int getMenuNo() {
+ return menuNo;
+ }
+ /**
+ * menuNo attribute 값을 설정한다.
+ * @param menuNo int
+ */
+ public void setMenuNo(int menuNo) {
+ this.menuNo = menuNo;
+ }
+ /**
+ * creatPersonId attribute를 리턴한다.
+ * @return String
+ */
+ public String getCreatPersonId() {
+ return creatPersonId;
+ }
+ /**
+ * creatPersonId attribute 값을 설정한다.
+ * @param creatPersonId String
+ */
+ public void setCreatPersonId(String creatPersonId) {
+ this.creatPersonId = creatPersonId;
+ }
+ /**
+ * mapCreatId attribute를 리턴한다.
+ * @return String
+ */
+ public String getMapCreatId() {
+ return mapCreatId;
+ }
+ /**
+ * mapCreatId attribute 값을 설정한다.
+ * @param mapCreatId String
+ */
+ public void setMapCreatId(String mapCreatId) {
+ this.mapCreatId = mapCreatId;
+ }
+ /**
+ * bndeFileNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getBndeFileNm() {
+ return bndeFileNm;
+ }
+ /**
+ * bndeFileNm attribute 값을 설정한다.
+ * @param bndeFileNm String
+ */
+ public void setBndeFileNm(String bndeFileNm) {
+ this.bndeFileNm = bndeFileNm;
+ }
+ /**
+ * bndeFilePath attribute를 리턴한다.
+ * @return String
+ */
+ public String getBndeFilePath() {
+ return bndeFilePath;
+ }
+ /**
+ * bndeFilePath attribute 값을 설정한다.
+ * @param bndeFilePath String
+ */
+ public void setBndeFilePath(String bndeFilePath) {
+ this.bndeFilePath = bndeFilePath;
+ }
+ /**
+ * authorCode attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ /**
+ * authorCode attribute 값을 설정한다.
+ * @param authorCode String
+ */
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+ /**
+ * authorNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorNm() {
+ return authorNm;
+ }
+ /**
+ * authorNm attribute 값을 설정한다.
+ * @param authorNm String
+ */
+ public void setAuthorNm(String authorNm) {
+ this.authorNm = authorNm;
+ }
+ /**
+ * authorDc attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorDc() {
+ return authorDc;
+ }
+ /**
+ * authorDc attribute 값을 설정한다.
+ * @param authorDc String
+ */
+ public void setAuthorDc(String authorDc) {
+ this.authorDc = authorDc;
+ }
+ /**
+ * authorCreatDe attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCreatDe() {
+ return authorCreatDe;
+ }
+ /**
+ * authorCreatDe attribute 값을 설정한다.
+ * @param authorCreatDe String
+ */
+ public void setAuthorCreatDe(String authorCreatDe) {
+ this.authorCreatDe = authorCreatDe;
+ }
+
+ /**
+ * tmp_Id attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpId() {
+ return tmpId;
+ }
+ /**
+ * tmp_Id attribute 값을 설정한다.
+ * @param tmp_Id String
+ */
+ public void setTmpId(String tmp_Id) {
+ this.tmpId = tmp_Id;
+ }
+ /**
+ * tmp_Password attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpPassword() {
+ return tmpPassword;
+ }
+ /**
+ * tmp_Password attribute 값을 설정한다.
+ * @param tmp_Password String
+ */
+ public void setTmpPassword(String tmp_Password) {
+ this.tmpPassword = tmp_Password;
+ }
+ /**
+ * tmp_Name attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpName() {
+ return tmpName;
+ }
+ /**
+ * tmp_Name attribute 값을 설정한다.
+ * @param tmp_Name String
+ */
+ public void setTmpName(String tmp_Name) {
+ this.tmpName = tmp_Name;
+ }
+ /**
+ * tmp_UserSe attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpUserSe() {
+ return tmpUserSe;
+ }
+ /**
+ * tmp_UserSe attribute 값을 설정한다.
+ * @param tmp_UserSe String
+ */
+ public void setTmpUserSe(String tmp_UserSe) {
+ this.tmpUserSe = tmp_UserSe;
+ }
+ /**
+ * tmp_Email attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpEmail() {
+ return tmpEmail;
+ }
+ /**
+ * tmp_Email attribute 값을 설정한다.
+ * @param tmp_Email String
+ */
+ public void setTmpEmail(String tmp_Email) {
+ this.tmpEmail = tmp_Email;
+ }
+ /**
+ * tmp_OrgnztId attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpOrgnztId() {
+ return tmpOrgnztId;
+ }
+ /**
+ * tmp_OrgnztId attribute 값을 설정한다.
+ * @param tmp_OrgnztId String
+ */
+ public void setTmpOrgnztId(String tmp_OrgnztId) {
+ this.tmpOrgnztId = tmp_OrgnztId;
+ }
+ /**
+ * tmp_UniqId attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpUniqId() {
+ return tmpUniqId;
+ }
+ /**
+ * tmp_UniqId attribute 값을 설정한다.
+ * @param tmp_UniqId String
+ */
+ public void setTmpUniqId(String tmp_UniqId) {
+ this.tmpUniqId = tmp_UniqId;
+ }
+ /**
+ * tmp_Cmd attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpCmd() {
+ return tmpCmd;
+ }
+ /**
+ * tmp_Cmd attribute 값을 설정한다.
+ * @param tmp_Cmd String
+ */
+ public void setTmpCmd(String tmp_Cmd) {
+ this.tmpCmd = tmp_Cmd;
+ }
+
+ /**
+ * tmp_rootPath attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpRootPath() {
+ return tmpRootPath;
+ }
+ /**
+ * tmp_rootPath attribute 값을 설정한다.
+ * @param tmp_rootPath String
+ */
+ public void setTmpRootPath(String tmp_rootPath) {
+ this.tmpRootPath = tmp_rootPath;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMapVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/EgovMenuCreateManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/EgovMenuCreateManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/EgovMenuCreateManageService.java (revision 7)
@@ -0,0 +1,100 @@
+package egovframework.com.sym.mnu.mcm.service;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+
+/**
+ * 메뉴관리에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+public interface EgovMenuCreateManageService {
+
+ /**
+ * ID 존재여부를 조회
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectUsrByPk(ComDefaultVO vo) throws Exception;
+
+ /**
+ * ID에 대한 권한코드를 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ MenuCreatVO selectAuthorByUsr(ComDefaultVO vo) throws Exception;
+
+
+ /**
+ * 메뉴생성관리 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectMenuCreatManagList(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴생성관리 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectMenuCreatManagTotCnt(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴생성 내역을 조회
+ * @param vo MenuCreatVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectMenuCreatList(MenuCreatVO vo) throws Exception;
+
+
+ /**
+ * 화면에 조회된 메뉴정보로 메뉴생성내역 데이터베이스에서 입력
+ * @param checkedScrtyForInsert String
+ * @param checkedMenuNoForInsert String
+ * @exception Exception
+ */
+ void insertMenuCreatList(String checkedScrtyForInsert, String checkedMenuNoForInsert) throws Exception;
+
+ /**
+ * 메뉴생성 사이트맵 내용 조회
+ * @param vo MenuSiteMapVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectMenuCreatSiteMapList(MenuSiteMapVO vo) throws Exception;
+
+ /**
+ * 사용자 권한별 사이트맵 내용 조회
+ * @param vo MenuSiteMapVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectSiteMapByUser(MenuSiteMapVO vo) throws Exception;
+
+ /**
+ * 사이트맵 등록
+ * @param vo MenuSiteMapVO
+ * @param vHtmlValue String
+ * @return boolean
+ * @exception Exception
+ */
+ boolean creatSiteMap(MenuSiteMapVO vo, String vHtmlValue) throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/EgovMenuCreateManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreat.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreat.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreat.java (revision 7)
@@ -0,0 +1,44 @@
+package egovframework.com.sym.mnu.mcm.service;
+
+/**
+ * 메뉴생성 생성을 위한 모델 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+public class MenuCreat{
+ /** 메뉴번호 */
+ private int menuNo;
+ /** 맵생성ID */
+ private String mapCreatId;
+ /** 권한코드 */
+ private String authorCode;
+ public int getMenuNo() {
+ return menuNo;
+ }
+ public void setMenuNo(int menuNo) {
+ this.menuNo = menuNo;
+ }
+ public String getMapCreatId() {
+ return mapCreatId;
+ }
+ public void setMapCreatId(String mapCreatId) {
+ this.mapCreatId = mapCreatId;
+ }
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreat.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMap.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMap.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMap.java (revision 7)
@@ -0,0 +1,53 @@
+package egovframework.com.sym.mnu.mcm.service;
+
+/**
+ * 사이트맵 생성을 위한 클래스를 정의한다
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+public class MenuSiteMap{
+ public String getCreatPersonId() {
+ return creatPersonId;
+ }
+ public void setCreatPersonId(String creatPersonId) {
+ this.creatPersonId = creatPersonId;
+ }
+ public String getMapCreatId() {
+ return mapCreatId;
+ }
+ public void setMapCreatId(String mapCreatId) {
+ this.mapCreatId = mapCreatId;
+ }
+ public String getBndeFileNm() {
+ return bndeFileNm;
+ }
+ public void setBndeFileNm(String bndeFileNm) {
+ this.bndeFileNm = bndeFileNm;
+ }
+ public String getBndeFilePath() {
+ return bndeFilePath;
+ }
+ public void setBndeFilePath(String bndeFilePath) {
+ this.bndeFilePath = bndeFilePath;
+ }
+ /** 사이트맵 */
+ /** 생성자ID **/
+ private String creatPersonId;
+ /** 맵생성ID */
+ private String mapCreatId;
+ /** 맵파일명 */
+ private String bndeFileNm;
+ /** 맵파일경로 */
+ private String bndeFilePath;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuSiteMap.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreatVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreatVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreatVO.java (revision 7)
@@ -0,0 +1,142 @@
+package egovframework.com.sym.mnu.mcm.service;
+
+/**
+ * 메뉴생성 처리를 위한 VO 클래스르를 정의한다
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+public class MenuCreatVO{
+
+
+ /** 메뉴번호 */
+ private int menuNo;
+ /** 맵생성ID */
+ private String mapCreatId;
+ /** 권한코드 */
+ private String authorCode;
+
+ /** 권한정보설정 */
+ /** 권한명 */
+ private String authorNm;
+ /** 권한설명 */
+ private String authorDc;
+ /** 권한생성일자 */
+ private String authorCreatDe;
+
+ /** 기타VO변수 */
+ /** 생성자ID **/
+ private String creatPersonId;
+
+
+ /**
+ * menuNo attribute를 리턴한다.
+ * @return int
+ */
+ public int getMenuNo() {
+ return menuNo;
+ }
+ /**
+ * menuNo attribute 값을 설정한다.
+ * @param menuNo int
+ */
+ public void setMenuNo(int menuNo) {
+ this.menuNo = menuNo;
+ }
+ /**
+ * mapCreatId attribute를 리턴한다.
+ * @return String
+ */
+ public String getMapCreatId() {
+ return mapCreatId;
+ }
+ /**
+ * mapCreatId attribute 값을 설정한다.
+ * @param mapCreatId String
+ */
+ public void setMapCreatId(String mapCreatId) {
+ this.mapCreatId = mapCreatId;
+ }
+ /**
+ * authorCode attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ /**
+ * authorCode attribute 값을 설정한다.
+ * @param authorCode String
+ */
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+ /**
+ * authorNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorNm() {
+ return authorNm;
+ }
+ /**
+ * authorNm attribute 값을 설정한다.
+ * @param authorNm String
+ */
+ public void setAuthorNm(String authorNm) {
+ this.authorNm = authorNm;
+ }
+ /**
+ * authorDc attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorDc() {
+ return authorDc;
+ }
+ /**
+ * authorDc attribute 값을 설정한다.
+ * @param authorDc String
+ */
+ public void setAuthorDc(String authorDc) {
+ this.authorDc = authorDc;
+ }
+ /**
+ * authorCreatDe attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCreatDe() {
+ return authorCreatDe;
+ }
+ /**
+ * authorCreatDe attribute 값을 설정한다.
+ * @param authorCreatDe String
+ */
+ public void setAuthorCreatDe(String authorCreatDe) {
+ this.authorCreatDe = authorCreatDe;
+ }
+ /**
+ * creatPersonId attribute를 리턴한다.
+ * @return String
+ */
+ public String getCreatPersonId() {
+ return creatPersonId;
+ }
+ /**
+ * creatPersonId attribute 값을 설정한다.
+ * @param creatPersonId String
+ */
+ public void setCreatPersonId(String creatPersonId) {
+ this.creatPersonId = creatPersonId;
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mcm/service/MenuCreatVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMenuManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMenuManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMenuManageController.java (revision 7)
@@ -0,0 +1,625 @@
+package egovframework.com.sym.mnu.mpm.web;
+
+import java.io.IOException;
+import java.io.InputStream;
+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.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.util.WebUtils;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.mnu.mpm.service.EgovMenuManageService;
+import egovframework.com.sym.mnu.mpm.service.MenuManageVO;
+import egovframework.com.sym.prm.service.EgovProgrmManageService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ * 메뉴목록 관리및 메뉴생성, 사이트맵 생성을 처리하는 비즈니스 구현 클래스
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.07.01 서준식 메뉴정보 삭제시 참조되고 있는 하위 메뉴가 있는지 체크하는 로직 추가
+ * 2011.07.27 서준식 deleteMenuManageList() 메서드에서 메뉴 멀티 삭제 버그 수정
+ * 2011.08.26 정진오 IncludedInfo annotation 추가
+ * 2011.10.07 이기하 보안취약점 수정(파일 업로드시 엑셀파일만 가능하도록 추가)
+ * 2015.05.28 조정국 메뉴리스트관리 선택시 "정상적으로 조회되었습니다"라는 alert창이 제일 먼저 뜨는것 수정 : 출력메시지 주석처리
+ * 2020.11.02 신용호 KISA 보안약점 조치 - 자원해제
+ * 2021.02.16 신용호 WebUtils.getNativeRequest(request,MultipartHttpServletRequest.class);
+ * </pre>
+ */
+
+@Controller
+public class EgovMenuManageController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovMenuManageController.class);
+
+ /* Validator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMenuManageService */
+ @Resource(name = "meunManageService")
+ private EgovMenuManageService menuManageService;
+
+ /** EgovMenuManageService */
+ @Resource(name = "progrmManageService")
+ private EgovProgrmManageService progrmManageService;
+
+ /** EgovFileMngService */
+// @Resource(name="EgovFileMngService")
+// private EgovFileMngService fileMngService;
+
+ /** EgovFileMngUtil */
+// @Resource(name="EgovFileMngUtil")
+// private EgovFileMngUtil fileUtil;
+
+// @Resource(name = "excelZipService")
+// private EgovExcelService excelZipService;
+
+ /** EgovMessageSource */
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+
+ /**
+ * 메뉴정보목록을 상세화면 호출 및 상세조회한다.
+ * @param req_menuNo String
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuDetailSelectUpdt"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuManageListDetailSelect.do")
+ public String selectMenuManage(
+ @RequestParam("req_menuNo") String req_menuNo ,
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ searchVO.setSearchKeyword(req_menuNo);
+
+ MenuManageVO resultVO = menuManageService.selectMenuManage(searchVO);
+ model.addAttribute("menuManageVO", resultVO);
+
+ return "egovframework/com/sym/mnu/mpm/EgovMenuDetailSelectUpdt";
+ }
+
+ /**
+ * 메뉴목록 리스트조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuManage"
+ * @exception Exception
+ */
+ @IncludedInfo(name="메뉴관리리스트", order = 1091 ,gid = 60)
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuManageSelect.do")
+ public String selectMenuManageList(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> list_menumanage = menuManageService.selectMenuManageList(searchVO);
+ model.addAttribute("list_menumanage", list_menumanage);
+
+ int totCnt = menuManageService.selectMenuManageListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/mnu/mpm/EgovMenuManage";
+ }
+
+ /**
+ * 메뉴목록 멀티 삭제한다.
+ * @param checkedMenuNoForDel String
+ * @return 출력페이지정보 "forward:/sym/mnu/mpm/EgovMenuManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping("/sym/mnu/mpm/EgovMenuManageListDelete.do")
+ public String deleteMenuManageList(
+ @RequestParam("checkedMenuNoForDel") String checkedMenuNoForDel ,
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ String sLocationUrl = null;
+ String resultMsg = "";
+
+ String [] delMenuNo = checkedMenuNoForDel.split(",");
+ menuManageVO.setMenuNo(Integer.parseInt(delMenuNo[0]));
+
+ if (menuManageService.selectUpperMenuNoByPk(menuManageVO) != 0){
+ resultMsg = egovMessageSource.getMessage("fail.common.delete.upperMenuExist");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuManageSelect.do";
+ }else if (delMenuNo == null || (delMenuNo.length ==0)){
+ resultMsg = egovMessageSource.getMessage("fail.common.delete");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuManageSelect.do";
+ }else{
+ menuManageService.deleteMenuManageList(checkedMenuNoForDel);
+ resultMsg = egovMessageSource.getMessage("success.common.delete");
+ sLocationUrl ="forward:/sym/mnu/mpm/EgovMenuManageSelect.do";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 메뉴정보를 등록화면으로 이동 및 등록 한다.
+ * @param menuManageVO MenuManageVO
+ * @param commandMap Map
+ * @return 출력페이지정보 등록화면 호출시 "sym/mnu/mpm/EgovMenuRegist",
+ * 출력페이지정보 등록처리시 "forward:/sym/mnu/mpm/EgovMenuManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuRegistInsert.do")
+ public String insertMenuManage(
+ @RequestParam Map<?, ?> commandMap,
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd");
+ if(sCmd.equals("insert")){
+ beanValidator.validate(menuManageVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuRegist";
+ return sLocationUrl;
+ }
+ if(menuManageService.selectMenuNoByPk(menuManageVO) == 0){
+ ComDefaultVO searchVO = new ComDefaultVO();
+ searchVO.setSearchKeyword(menuManageVO.getProgrmFileNm());
+ if(progrmManageService.selectProgrmNMTotCnt(searchVO)==0){
+ resultMsg = egovMessageSource.getMessage("fail.common.insert");
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuRegist";
+ }else{
+ menuManageService.insertMenuManage(menuManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.insert");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuManageSelect.do";
+ }
+ }else{
+ resultMsg = egovMessageSource.getMessage("common.isExist.msg");
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuRegist";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ }else{
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuRegist";
+ }
+ return sLocationUrl;
+ }
+
+ /**
+ * 메뉴정보를 수정 한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "forward:/sym/mnu/mpm/EgovMenuManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuDetailSelectUpdt.do")
+ public String updateMenuManage(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ beanValidator.validate(menuManageVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuManageListDetailSelect.do";
+ return sLocationUrl;
+ }
+ ComDefaultVO searchVO = new ComDefaultVO();
+ searchVO.setSearchKeyword(menuManageVO.getProgrmFileNm());
+ if(progrmManageService.selectProgrmNMTotCnt(searchVO)==0){
+ resultMsg = egovMessageSource.getMessage("fail.common.update");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuManageListDetailSelect.do";
+ }else{
+ menuManageService.updateMenuManage(menuManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.update");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuManageSelect.do";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 메뉴정보를 삭제 한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "forward:/sym/mnu/mpm/EgovMenuManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuManageDelete.do")
+ public String deleteMenuManage(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ if (menuManageService.selectUpperMenuNoByPk(menuManageVO) != 0){
+ resultMsg = egovMessageSource.getMessage("fail.common.delete.upperMenuExist");
+ model.addAttribute("resultMsg", resultMsg);
+ return "forward:/sym/mnu/mpm/EgovMenuManageSelect.do";
+ }
+
+ menuManageService.deleteMenuManage(menuManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.delete");
+ String _MenuNm = "%";
+ menuManageVO.setMenuNm(_MenuNm);
+ model.addAttribute("resultMsg", resultMsg);
+ return "forward:/sym/mnu/mpm/EgovMenuManageSelect.do";
+ }
+
+ /**
+ * 메뉴리스트를 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuList"
+ * @exception Exception
+ */
+ @IncludedInfo(name="메뉴리스트관리", order = 1090 ,gid = 60)
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuListSelect.do")
+ public String selectMenuList(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ List<?> list_menulist = menuManageService.selectMenuList();
+ resultMsg = egovMessageSource.getMessage("success.common.select");
+ model.addAttribute("list_menulist", list_menulist);
+// model.addAttribute("resultMsg", resultMsg);
+ return "egovframework/com/sym/mnu/mpm/EgovMenuList";
+ }
+
+ /**
+ * 메뉴리스트의 메뉴정보를 등록한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuList"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuListInsert.do")
+ public String insertMenuList(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(menuManageVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuList";
+ return sLocationUrl;
+ }
+
+ if(menuManageService.selectMenuNoByPk(menuManageVO) == 0){
+ ComDefaultVO searchVO = new ComDefaultVO();
+ searchVO.setSearchKeyword(menuManageVO.getProgrmFileNm());
+ if(progrmManageService.selectProgrmNMTotCnt(searchVO)==0){
+ resultMsg = egovMessageSource.getMessage("fail.common.insert");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuListSelect.do";
+ }else{
+ menuManageService.insertMenuManage(menuManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.insert");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuListSelect.do";
+ }
+ }else{
+ resultMsg = egovMessageSource.getMessage("common.isExist.msg");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuListSelect.do";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 메뉴리스트의 메뉴정보를 수정한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuList"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuListUpdt.do")
+ public String updateMenuList(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(menuManageVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuListSelect.do";
+ return sLocationUrl;
+ }
+ ComDefaultVO searchVO = new ComDefaultVO();
+ searchVO.setSearchKeyword(menuManageVO.getProgrmFileNm());
+ if(progrmManageService.selectProgrmNMTotCnt(searchVO)==0){
+ resultMsg = egovMessageSource.getMessage("fail.common.update");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuListSelect.do";
+ }else{
+ menuManageService.updateMenuManage(menuManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.update");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuListSelect.do";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 메뉴리스트의 메뉴정보를 삭제한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuList"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuListDelete.do")
+ public String deleteMenuList(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(menuManageVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuList";
+ return sLocationUrl;
+ }
+ menuManageService.deleteMenuManage(menuManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.delete");
+ sLocationUrl = "forward:/sym/mnu/mpm/EgovMenuListSelect.do";
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 메뉴리스트의 메뉴정보를 이동 메뉴목록을 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuMvmn"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuListSelectMvmn.do")
+ public String selectMenuListMvmn(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ List<?> list_menulist = menuManageService.selectMenuList();
+ model.addAttribute("list_menulist", list_menulist);
+ return "egovframework/com/sym/mnu/mpm/EgovMenuMvmn";
+ }
+
+ /**
+ * 메뉴리스트의 메뉴정보를 이동 메뉴목록을 조회한다. (New)
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuMvmn"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuListSelectMvmnNew.do")
+ public String selectMenuListMvmnNew(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ List<?> list_menulist = menuManageService.selectMenuList();
+ model.addAttribute("list_menulist", list_menulist);
+ return "egovframework/com/sym/mnu/mpm/EgovMenuMvmnNew";
+ }
+
+
+ /*### 일괄처리 프로세스 ###*/
+
+ /**
+ * 메뉴생성 일괄삭제프로세스
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuBndeRegist"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuBndeAllDelete.do")
+ public String menuBndeAllDelete(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ menuManageService.menuBndeAllDelete();
+ resultMsg = egovMessageSource.getMessage("success.common.delete");
+ model.addAttribute("resultMsg", resultMsg);
+ return "egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist";
+ }
+
+
+ /**
+ * 메뉴일괄등록화면 호출 및 메뉴일괄등록처리 프로세스
+ * @param commandMap Map
+ * @param menuManageVO MenuManageVO
+ * @param request HttpServletRequest
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuBndeRegist"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMenuBndeRegist.do")
+ public String menuBndeRegist(
+ @RequestParam Map<?, ?> commandMap,
+ final HttpServletRequest request,
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ String sMessage = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd");
+ if(sCmd.equals("bndeInsert")){
+ //final MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
+ final MultipartHttpServletRequest multiRequest = WebUtils.getNativeRequest(request,MultipartHttpServletRequest.class);
+ final Map<String, MultipartFile> files = multiRequest.getFileMap();
+ Iterator<Entry<String, MultipartFile>> itr = files.entrySet().iterator();
+ MultipartFile file;
+ while (itr.hasNext()) {
+ Entry<String, MultipartFile> entry = itr.next();
+ file = entry.getValue();
+ if (!"".equals(file.getOriginalFilename())) {
+ // 2011.10.07 업로드 파일에 대한 확장자를 체크
+ if (file.getOriginalFilename().endsWith(".xls")
+ || file.getOriginalFilename().endsWith(".xlsx")
+ || file.getOriginalFilename().endsWith(".XLS")
+ || file.getOriginalFilename().endsWith(".XLSX")) {
+
+ if(menuManageService.menuBndeAllDelete()){
+ // KISA 보안약점 조치 - 자원해제
+ InputStream is = null;
+ try {
+ is = file.getInputStream();
+ sMessage = menuManageService.menuBndeRegist(menuManageVO, is);
+ } catch (IOException e) {
+ throw new IOException(e);
+ } finally {
+ is.close();
+ }
+ resultMsg = sMessage;
+
+ }else{
+ resultMsg = egovMessageSource.getMessage("fail.common.msg");
+ menuManageVO.setTmpCmd("EgovMenuBndeRegist Error!!");
+ model.addAttribute("resultVO", menuManageVO);
+ }
+ }else{
+ LOGGER.info("xls, xlsx 파일 타입만 등록이 가능합니다.");
+ resultMsg = egovMessageSource.getMessage("fail.common.msg");
+ model.addAttribute("resultMsg", resultMsg);
+ return "egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist";
+ }
+ // *********** 끝 ***********
+
+ }else{
+ resultMsg = egovMessageSource.getMessage("fail.common.msg");
+ }
+ file = null;
+ }
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist";
+ model.addAttribute("resultMsg", resultMsg);
+ }else{
+ sLocationUrl = "egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist";
+ }
+ return sLocationUrl;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMenuManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMainMenuManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMainMenuManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMainMenuManageController.java (revision 7)
@@ -0,0 +1,258 @@
+package egovframework.com.sym.mnu.mpm.web;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.mnu.mpm.service.EgovMenuManageService;
+import egovframework.com.sym.mnu.mpm.service.MenuManageVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.fdl.property.EgovPropertyService;
+
+/**
+ * 메인메뉴 해당링크 처리를 하는 비즈니스 구현 클래스
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.09.07 서준식 사용자 구분 오류 수정
+ * 2015.06.19 조정국 미인증사용자에 대한 보안처리
+ * 2018.10.12 이정은 메인페이지 통합(업무, 기업, 일반)
+ * </pre>
+ */
+
+@Controller
+public class EgovMainMenuManageController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovMainMenuManageController.class);
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMenuManageService */
+ @Resource(name = "meunManageService")
+ private EgovMenuManageService menuManageService;
+
+ /** EgovFileMngService */
+ //@Resource(name="EgovFileMngService")
+ //private EgovFileMngService fileMngService;
+
+ /** EgovFileMngUtil */
+ //@Resource(name="EgovFileMngUtil")
+ //private EgovFileMngUtil fileUtil;
+
+ /*### 메인작업 ###*/
+ /*Main Index 조회*/
+ /**
+ * Main메뉴의 Index를 조회한다.
+ * @param menuNo String
+ * @param chkURL String
+ * @return 출력페이지정보 "menu_index"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMainMenuIndex.do")
+ public String selectMainMenuIndex(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ @RequestParam("menuNo") String menuNo,
+ @RequestParam("chkURL") String chkURL,
+ ModelMap model)
+ throws Exception {
+
+ int iMenuNo = Integer.parseInt(menuNo);
+ menuManageVO.setMenuNo(iMenuNo);
+ //menuManageVO.setTempValue(chkURL);
+ model.addAttribute("resultVO", menuManageVO);
+
+ return "egovframework/com/menu_index";
+ }
+
+ /**
+ * Head메뉴를 조회한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "head"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMainMenu.do")
+ public String selectMainMenu(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ ModelMap model)
+ throws Exception {
+
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ menuManageVO.setTmpId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+ menuManageVO.setTmpPassword(user == null ? "" : EgovStringUtil.isNullToString(user.getPassword()));
+ menuManageVO.setTmpUserSe(user == null ? "" : EgovStringUtil.isNullToString(user.getUserSe()));
+ menuManageVO.setTmpName(user == null ? "" : EgovStringUtil.isNullToString(user.getName()));
+ menuManageVO.setTmpEmail(user == null ? "" : EgovStringUtil.isNullToString(user.getEmail()));
+ menuManageVO.setTmpOrgnztId(user == null ? "" : EgovStringUtil.isNullToString(user.getOrgnztId()));
+ menuManageVO.setTmpUniqId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+
+ List<?> list_headmenu = menuManageService.selectMainMenuHead(menuManageVO);
+ model.addAttribute("list_headmenu", list_headmenu);
+ if (!(user == null ? "" : EgovStringUtil.isNullToString(user.getId())).equals("")) {
+ // 메인 페이지 이동
+ return "egovframework/com/EgovMainView";
+ } else {
+ // 오류 페이지 이동
+ return "egovframework/com/cmm/error/egovError";
+ }
+ }
+
+ /**
+ * Head메뉴를 조회한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "main_head"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMainMenuHead.do")
+ public String selectMainMenuHead(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ ModelMap model)
+ throws Exception {
+
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ menuManageVO.setTmpId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+ menuManageVO.setTmpPassword(user == null ? "" : EgovStringUtil.isNullToString(user.getPassword()));
+ menuManageVO.setTmpUserSe(user == null ? "" : EgovStringUtil.isNullToString(user.getUserSe()));
+ menuManageVO.setTmpName(user == null ? "" : EgovStringUtil.isNullToString(user.getName()));
+ menuManageVO.setTmpEmail(user == null ? "" : EgovStringUtil.isNullToString(user.getEmail()));
+ menuManageVO.setTmpOrgnztId(user == null ? "" : EgovStringUtil.isNullToString(user.getOrgnztId()));
+ menuManageVO.setTmpUniqId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+
+ List<?> list_headmenu = menuManageService.selectMainMenuHead(menuManageVO);
+ model.addAttribute("list_headmenu", list_headmenu);
+ if (!(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId())).equals("")) {
+ // 메인 페이지 이동
+ return "egovframework/com/main_head";
+ } else {
+ // 오류 페이지 이동
+ return "egovframework/com/cmm/error/egovError";
+ }
+ }
+
+
+ /**
+ * 좌측메뉴를 조회한다.
+ * @param menuManageVO MenuManageVO
+ * @param vStartP String
+ * @return 출력페이지정보 "main_left"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/mnu/mpm/EgovMainMenuLeft.do")
+ public String selectMainMenuLeft(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ @RequestParam("vStartP") String vStartP,
+ ModelMap model)
+ throws Exception {
+ int iMenuNo = Integer.parseInt(vStartP);
+ menuManageVO.setTempInt(iMenuNo);
+ model.addAttribute("resultVO", menuManageVO);
+
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ menuManageVO.setTmpId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+ menuManageVO.setTmpPassword(user == null ? "" : EgovStringUtil.isNullToString(user.getPassword()));
+ menuManageVO.setTmpUserSe(user == null ? "" : EgovStringUtil.isNullToString(user.getUserSe()));
+ menuManageVO.setTmpName(user == null ? "" : EgovStringUtil.isNullToString(user.getName()));
+ menuManageVO.setTmpEmail(user == null ? "" : EgovStringUtil.isNullToString(user.getEmail()));
+ menuManageVO.setTmpOrgnztId(user == null ? "" : EgovStringUtil.isNullToString(user.getOrgnztId()));
+ menuManageVO.setTmpUniqId(user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+
+ List<?> list_menulist = menuManageService.selectMainMenuLeft(menuManageVO);
+ model.addAttribute("list_menulist", list_menulist);
+ return "egovframework/com/main_left";
+ }
+
+ /**
+ * 우측화면을 조회한다.
+ * @param menuManageVO MenuManageVO
+ * @param vStartP String
+ * @return 출력페이지정보 해당URL
+ * @exception Exception
+ */
+ /*Right Menu 조회*/
+ @RequestMapping(value="/sym/mnu/mpm/EgovMainMenuRight.do")
+ public String selectMainMenuRight(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ @RequestParam("vStartP") String vStartP,
+ ModelMap model)
+ throws Exception {
+ int iMenuNo = Integer.parseInt(vStartP);
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ String forwardURL = null;
+ forwardURL = menuManageService.selectLastMenuURL(iMenuNo, user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()));
+ return "forward:"+forwardURL;
+ }
+
+ /**
+ * HOME 메인화면 조회한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "EgovMainView"
+ * @exception Exception
+ */
+ @IncludedInfo(name="포털(예제) 메인화면", order = 1, gid = 0)
+ @RequestMapping(value="/sym/mnu/mpm/EgovMainMenuHome.do")
+ public String selectMainMenuHome(
+ @ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
+ ModelMap model)
+ throws Exception {
+
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ // 미인증 사용자에 대한 보안처리
+ if(user == null) {
+ return "index";
+ }
+
+ menuManageVO.setTmpId(user.getId());
+ menuManageVO.setTmpPassword(user.getPassword());
+ menuManageVO.setTmpUserSe(user.getUserSe());
+ menuManageVO.setTmpName(user.getName());
+ menuManageVO.setTmpEmail(user.getEmail());
+ menuManageVO.setTmpOrgnztId(user.getOrgnztId());
+ menuManageVO.setTmpUniqId(user.getUniqId());
+
+ List<?> list_headmenu = menuManageService.selectMainMenuHead(menuManageVO);
+ model.addAttribute("list_headmenu", list_headmenu);
+
+ LOGGER.debug("## selectMainMenuHome ## getSUserSe 1: {}", user.getUserSe());
+ LOGGER.debug("## selectMainMenuHome ## getSUserId 2: {}", user.getId());
+ LOGGER.debug("## selectMainMenuHome ## getUniqId 2: {}", user.getUniqId());
+
+ if (!user.getId().equals("")) {
+ // 메인 페이지 이동
+ return "egovframework/com/EgovMainView";
+
+ } else {
+ // 오류 페이지 이동
+ return "egovframework/com/cmm/error/egovError";
+ }
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMainMenuManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/MenuManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/MenuManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/MenuManageDAO.java (revision 7)
@@ -0,0 +1,195 @@
+package egovframework.com.sym.mnu.mpm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.mnu.mpm.service.MenuManageVO;
+
+import org.springframework.stereotype.Repository;
+/**
+ * 메뉴관리, 메뉴생성, 사이트맵 생성에 대한 DAO 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.07.01 서준식 자기 메뉴 정보를 상위메뉴 정보로 참조하는 메뉴정보가 있는지 조회하는
+ * selectUpperMenuNoByPk() 메서드 추가
+ *
+ * </pre>
+ */
+
+@Repository("menuManageDAO")
+public class MenuManageDAO extends EgovComAbstractDAO{
+
+ /**
+ * 메뉴목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuManageList(ComDefaultVO vo) throws Exception{
+ return selectList("menuManageDAO.selectMenuManageList_D", vo);
+ }
+
+ /**
+ * 메뉴목록관리 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuManageListTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("menuManageDAO.selectMenuManageListTotCnt_S", vo);
+ }
+
+ /**
+ * 메뉴목록관리 기본정보를 조회
+ * @param vo ComDefaultVO
+ * @return MenuManageVO
+ * @exception Exception
+ */
+ public MenuManageVO selectMenuManage(ComDefaultVO vo)throws Exception{
+ return (MenuManageVO)selectOne("menuManageDAO.selectMenuManage_D", vo);
+ }
+
+ /**
+ * 메뉴목록 기본정보를 등록
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ public void insertMenuManage(MenuManageVO vo){
+ insert("menuManageDAO.insertMenuManage_S", vo);
+ }
+
+ /**
+ * 메뉴목록 기본정보를 수정
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ public void updateMenuManage(MenuManageVO vo){
+ update("menuManageDAO.updateMenuManage_S", vo);
+ }
+
+ /**
+ * 메뉴목록 기본정보를 삭제
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ public void deleteMenuManage(MenuManageVO vo){
+ delete("menuManageDAO.deleteMenuManage_S", vo);
+ }
+
+ /**
+ * 메뉴 전체목록을 조회
+ * @return list
+ * @exception Exception
+ */
+ public List<?> selectMenuList() throws Exception{
+ ComDefaultVO vo = new ComDefaultVO();
+ return selectList("menuManageDAO.selectMenuListT_D", vo);
+ }
+
+
+ /**
+ * 메뉴번호 존재여부를 조회
+ * @param vo MenuManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuNoByPk(MenuManageVO vo) throws Exception{
+ return (Integer)selectOne("menuManageDAO.selectMenuNoByPk", vo);
+ }
+
+
+
+ /**
+ * 메뉴번호를 상위메뉴로 참조하고 있는 메뉴 존재여부를 조회
+ * @param vo MenuManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectUpperMenuNoByPk(MenuManageVO vo) throws Exception{
+ return (Integer)selectOne("menuManageDAO.selectUpperMenuNoByPk", vo);
+ }
+
+
+ /**
+ * 메뉴정보 전체삭제 초기화
+ * @return boolean
+ * @exception Exception
+ */
+ public boolean deleteAllMenuList(){
+ MenuManageVO vo = new MenuManageVO();
+ insert("menuManageDAO.deleteAllMenuList", vo);
+ return true;
+ }
+
+ /**
+ * 메뉴정보 존재여부 조회한다.
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuListTotCnt() {
+ MenuManageVO vo = new MenuManageVO();
+ return (Integer)selectOne("menuManageDAO.selectMenuListTotCnt", vo);
+ }
+
+
+ /*### 메뉴관련 프로세스 ###*/
+ /**
+ * MainMenu Head Menu 조회
+ * @param vo MenuManageVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMainMenuHead(MenuManageVO vo) throws Exception{
+ return selectList("menuManageDAO.selectMainMenuHead", vo);
+ }
+
+ /**
+ * MainMenu Left Menu 조회
+ * @param vo MenuManageVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMainMenuLeft(MenuManageVO vo) throws Exception{
+ return selectList("menuManageDAO.selectMainMenuLeft", vo);
+ }
+
+ /**
+ * MainMenu Head MenuURL 조회
+ * @param vo MenuManageVO
+ * @return String
+ * @exception Exception
+ */
+ public String selectLastMenuURL(MenuManageVO vo) throws Exception{
+ return (String)selectOne("menuManageDAO.selectLastMenuURL", vo);
+ }
+
+ /**
+ * MainMenu Left Menu 조회
+ * @param vo MenuManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectLastMenuNo(MenuManageVO vo) throws Exception{
+ return (Integer)selectOne("menuManageDAO.selectLastMenuNo", vo);
+ }
+
+ /**
+ * MainMenu Left Menu 조회
+ * @param vo MenuManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectLastMenuNoCnt(MenuManageVO vo) throws Exception{
+ return (Integer)selectOne("menuManageDAO.selectLastMenuNoCnt", vo);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/MenuManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/EgovMenuManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/EgovMenuManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/EgovMenuManageServiceImpl.java (revision 7)
@@ -0,0 +1,584 @@
+package egovframework.com.sym.mnu.mpm.service.impl;
+
+import java.io.InputStream;
+import java.sql.SQLException;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.sym.mnu.mpm.service.EgovMenuManageService;
+import egovframework.com.sym.mnu.mpm.service.MenuManageVO;
+import egovframework.com.sym.prm.service.ProgrmManageVO;
+import egovframework.com.sym.prm.service.impl.ProgrmManageDAO;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.cmmn.exception.BaseException;
+import egovframework.rte.fdl.excel.EgovExcelService;
+
+/**
+ * 메뉴목록관리, 생성, 사이트맵을 처리하는 비즈니스 구현 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.07.01 서준식 자기 메뉴 정보를 상위메뉴 정보로 참조하는 메뉴정보가 있는지 조회하는
+ * selectUpperMenuNoByPk() 메서드 추가
+ * 2017-02-13 이정은 시큐어코딩(ES) - 시큐어코딩 부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2019-12-06 신용호 KISA 보안약점 조치 (부적절한 예외처리)
+ *
+ * </pre>
+ */
+
+@Service("meunManageService")
+public class EgovMenuManageServiceImpl extends EgovAbstractServiceImpl implements EgovMenuManageService {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovMenuManageServiceImpl.class);
+
+ @Resource(name = "menuManageDAO")
+ private MenuManageDAO menuManageDAO;
+ @Resource(name = "progrmManageDAO")
+ private ProgrmManageDAO progrmManageDAO;
+ @Resource(name = "excelZipService")
+ private EgovExcelService excelZipService;
+
+ @Resource(name = "multipartResolver")
+ CommonsMultipartResolver mailmultipartResolver;
+
+ /**
+ * 메뉴 상세정보를 조회
+ * @param vo ComDefaultVO
+ * @return MenuManageVO
+ * @exception Exception
+ */
+ public MenuManageVO selectMenuManage(ComDefaultVO vo) throws Exception {
+ return menuManageDAO.selectMenuManage(vo);
+ }
+
+ /**
+ * 메뉴 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuManageList(ComDefaultVO vo) throws Exception {
+ return menuManageDAO.selectMenuManageList(vo);
+ }
+
+ /**
+ * 메뉴목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuManageListTotCnt(ComDefaultVO vo) throws Exception {
+ return menuManageDAO.selectMenuManageListTotCnt(vo);
+ }
+
+ /**
+ * 메뉴번호를 상위메뉴로 참조하고 있는 메뉴 존재여부를 조회
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectUpperMenuNoByPk(MenuManageVO vo) throws Exception {
+ return menuManageDAO.selectUpperMenuNoByPk(vo);
+ }
+
+ /**
+ * 메뉴번호 존재 여부를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuNoByPk(MenuManageVO vo) throws Exception {
+ return menuManageDAO.selectMenuNoByPk(vo);
+ }
+
+ /**
+ * 메뉴 정보를 등록
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ public void insertMenuManage(MenuManageVO vo) throws Exception {
+ menuManageDAO.insertMenuManage(vo);
+ }
+
+ /**
+ * 메뉴 정보를 수정
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ public void updateMenuManage(MenuManageVO vo) throws Exception {
+ menuManageDAO.updateMenuManage(vo);
+ }
+
+ /**
+ * 메뉴 정보를 삭제
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ public void deleteMenuManage(MenuManageVO vo) throws Exception {
+ menuManageDAO.deleteMenuManage(vo);
+ }
+
+ /**
+ * 화면에 조회된 메뉴 목록 정보를 데이터베이스에서 삭제
+ * @param checkedMenuNoForDel String
+ * @exception Exception
+ */
+ public void deleteMenuManageList(String checkedMenuNoForDel) throws Exception {
+ MenuManageVO vo = null;
+
+ String[] delMenuNo = checkedMenuNoForDel.split(",");
+
+ if (delMenuNo == null || (delMenuNo.length == 0)) {
+ throw new java.lang.Exception("String Split Error!");
+ }
+ for (int i = 0; i < delMenuNo.length; i++) {
+ vo = new MenuManageVO();
+ vo.setMenuNo(Integer.parseInt(delMenuNo[i]));
+ menuManageDAO.deleteMenuManage(vo);
+ }
+ }
+
+ /* 메뉴 생성 관리 */
+
+ /**
+ * 메뉴 목록을 조회
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuList() throws Exception {
+ return menuManageDAO.selectMenuList();
+ }
+
+ /*### 메뉴관련 프로세스 ###*/
+ /**
+ * MainMenu Head Menu 조회
+ * @param vo MenuManageVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMainMenuHead(MenuManageVO vo) throws Exception {
+ return menuManageDAO.selectMainMenuHead(vo);
+ }
+
+ /**
+ * MainMenu Head Left 조회
+ * @param vo MenuManageVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMainMenuLeft(MenuManageVO vo) throws Exception {
+ return menuManageDAO.selectMainMenuLeft(vo);
+ }
+
+ /**
+ * MainMenu Head MenuURL 조회
+ * @param iMenuNo int
+ * @param sUniqId String
+ * @return String
+ * @exception Exception
+ */
+ public String selectLastMenuURL(int iMenuNo, String sUniqId) throws Exception {
+ MenuManageVO vo = new MenuManageVO();
+ vo.setMenuNo(selectLastMenuNo(iMenuNo, sUniqId));
+ return menuManageDAO.selectLastMenuURL(vo);
+ }
+
+ /**
+ * MainMenu Head Menu MenuNo 조회
+ * @param iMenuNo int
+ * @param sUniqId String
+ * @return String
+ * @exception Exception
+ */
+ private int selectLastMenuNo(int iMenuNo, String sUniqId) throws Exception {
+ int chkMenuNo = iMenuNo;
+ int cntMenuNo = 0;
+ for (; chkMenuNo > -1;) {
+ chkMenuNo = selectLastMenuNoChk(chkMenuNo, sUniqId);
+ if (chkMenuNo > 0) {
+ cntMenuNo = chkMenuNo;
+ }
+ }
+ return cntMenuNo;
+ }
+
+ /**
+ * MainMenu Head Menu Last MenuNo 조회
+ * @param iMenuNo int
+ * @param sUniqId String
+ * @return String
+ * @exception Exception
+ */
+ private int selectLastMenuNoChk(int iMenuNo, String sUniqId) throws Exception {
+ MenuManageVO vo = new MenuManageVO();
+ vo.setMenuNo(iMenuNo);
+ vo.setTempValue(sUniqId);
+ int chkMenuNo = 0;
+ int cntMenuNo = 0;
+ cntMenuNo = menuManageDAO.selectLastMenuNoCnt(vo);
+ if (cntMenuNo > 0) {
+ chkMenuNo = menuManageDAO.selectLastMenuNo(vo);
+ } else {
+ chkMenuNo = -1;
+ }
+ return chkMenuNo;
+ }
+
+ /*### 일괄처리 프로세스 ###*/
+ /**
+ * 메뉴일괄초기화 프로세스 메뉴목록테이블, 프로그램 목록테이블 전체 삭제
+ * @return boolean
+ * @exception Exception
+ */
+ public boolean menuBndeAllDelete() throws Exception {
+ if (!deleteAllProgrmDtls()) {
+ return false;
+ } // 프로그램변경요청 테이블
+ if (!deleteAllMenuList()) {
+ return false;
+ } // 메뉴정보 테이블
+ if (!deleteAllProgrm()) {
+ return false;
+ } // 프로그램목록 테이블
+ return true;
+ }
+
+ /**
+ * 메뉴일괄등록 프로세스
+ * @param vo MenuManageVO
+ * @param inputStream InputStream
+ * @exception Exception
+ */
+ public String menuBndeRegist(MenuManageVO vo, InputStream inputStream) throws Exception {
+
+ String message = bndeRegist(inputStream);
+ String sMessage = null;
+
+ switch (Integer.parseInt(message)) {
+ case 99:
+ LOGGER.debug("프로그램목록/메뉴정보테이블 데이타 존재오류 - 초기화 하신 후 다시 처리하세요.");
+ sMessage = "프로그램목록/메뉴정보테이블 데이타 존재오류 - 초기화 하신 후 다시 처리하세요.";
+ break;
+ case 90:
+ LOGGER.debug("파일존재하지 않음.");
+ sMessage = "파일존재하지 않음.";
+ break;
+ case 91:
+ LOGGER.debug("프로그램시트의 cell 갯수 오류.");
+ sMessage = "프로그램시트의 cell 갯수 오류.";
+ break;
+ case 92:
+ LOGGER.debug("메뉴정보시트의 cell 갯수 오류.");
+ sMessage = "메뉴정보시트의 cell 갯수 오류.";
+ break;
+ case 93:
+ LOGGER.debug("엑셀 시트갯수 오류.");
+ sMessage = "엑셀 시트갯수 오류.";
+ break;
+ case 95:
+ LOGGER.debug("메뉴정보 입력시 에러.");
+ sMessage = "메뉴정보 입력시 에러.";
+ break;
+ case 96:
+ LOGGER.debug("프로그램목록입력시 에러.");
+ sMessage = "프로그램목록입력시 에러.";
+ break;
+ default:
+ LOGGER.debug("일괄배치처리 완료.");
+ sMessage = "일괄배치처리 완료.";
+ break;
+ }
+ LOGGER.debug(message);
+ return sMessage;
+ }
+
+ /**
+ * 메뉴목록_프로그램목록 일괄생성
+ * @param inputStream InputStream
+ * @return String
+ * @exception Exception
+ */
+ private String bndeRegist(InputStream inputStream) throws Exception {
+ boolean success = false;
+ String requestValue = null;
+ int progrmSheetRowCnt = 0;
+ int menuSheetRowCnt = 0;
+ //String xlsFile = null;
+ try {
+ /*
+ 오류 메세지 정보
+ message = "99"; //프로그램목록테이블 데이타 존재오류.
+ message = "99"; //메뉴정보테이블 데이타 존재오류.
+ message = "90"; //파일존재하지 않음.
+ message = "91"; //프로그램시트의 cell 갯수 오류
+ message = "92"; //메뉴정보시트의 cell 갯수 오류
+ message = "93"; //엑셀 시트갯수 오류
+ message = "95"; //메뉴정보 입력시 에러
+ message = "96"; //프로그램목록입력시 에러
+ message = "0"; //일괄배치처리 완료
+ */
+
+ if (progrmManageDAO.selectProgrmListTotCnt() > 0) {
+ return requestValue = "99";
+ } //프로그램목록테이블 데이타 존재오류.
+ if (menuManageDAO.selectMenuListTotCnt() > 0) {
+ return requestValue = "99";
+ } //메뉴정보테이블 데이타 존재오류.
+
+ HSSFWorkbook hssfWB = (HSSFWorkbook) excelZipService.loadWorkbook(inputStream);
+ // 엑셀 파일 시트 갯수 확인 sheet = 2 첫번째시트 = 프로그램목록 두번째시트 = 메뉴목록
+ if (hssfWB.getNumberOfSheets() == 2) {
+ HSSFSheet progrmSheet = hssfWB.getSheetAt(0); //프로그램목록 시트 가져오기
+ HSSFSheet menuSheet = hssfWB.getSheetAt(1); //메뉴정보 시트 가져오기
+ HSSFRow progrmRow = progrmSheet.getRow(1); //프로그램 row 가져오기
+ HSSFRow menuRow = menuSheet.getRow(1); //메뉴정보 row 가져오기
+ progrmSheetRowCnt = progrmRow.getPhysicalNumberOfCells(); //프로그램 cell Cnt
+ menuSheetRowCnt = menuRow.getPhysicalNumberOfCells(); //메뉴정보 cell Cnt
+
+ // 프로그램 시트 파일 데이타 검증 cell = 5개
+ if (progrmSheetRowCnt != 5) {
+ return requestValue = "91"; //프로그램시트의 cell 갯수 오류
+ }
+
+ // 메뉴목록 시트 파일 데이타 검증 cell = 8개
+ if (menuSheetRowCnt != 8) {
+ return requestValue = "92"; //메뉴정보시트의 cell 갯수 오류
+ }
+
+ /* sheet1번 = 프로그램목록 , sheet2번 = 메뉴정보 */
+ success = progrmRegist(progrmSheet);
+ if (success) {
+ success = menuRegist(menuSheet);
+ if (success) {
+ return requestValue = "0"; // 일괄배치처리 완료
+ } else {
+ deleteAllProgrmDtls();
+ deleteAllProgrm();
+ deleteAllMenuList();
+ return requestValue = "95"; // 메뉴정보 입력시 에러
+ }
+ } else {
+ deleteAllProgrmDtls();
+ deleteAllProgrm();
+ return requestValue = "96"; // 프로그램목록입력시 에러
+ }
+ } else {
+ return requestValue = "93"; // 엑셀 시트갯수 오류
+ }
+ } catch (BaseException e) {
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ requestValue = "99";
+
+ } catch (Exception e) {
+ //2017.02.13 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ requestValue = "99";
+ }
+ return requestValue;
+ }
+
+ /**
+ * 프로그램목록 일괄등록
+ * @param progrmSheet HSSFSheet
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean progrmRegist(HSSFSheet progrmSheet) {
+ int count = 0;
+ boolean success = false;
+ try {
+ int rows = progrmSheet.getPhysicalNumberOfRows(); //행 갯수 가져오기
+ for (int j = 1; j < rows; j++) { //row 루프
+ ProgrmManageVO vo = new ProgrmManageVO();
+ HSSFRow row = progrmSheet.getRow(j); //row 가져오기
+ if (row != null) {
+ //int cells = row.getPhysicalNumberOfCells(); //cell 갯수 가져오기
+
+ HSSFCell cell = null;
+ cell = row.getCell(0); //프로그램명
+ if (cell != null) {
+ vo.setProgrmFileNm("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(1); //프로그램한글명
+ if (cell != null) {
+ vo.setProgrmKoreanNm("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(2); //프로그램저장경로
+ if (cell != null) {
+ vo.setProgrmStrePath("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(3); //프로그램 URL
+ if (cell != null) {
+ vo.setURL("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(4); //프로그램설명
+ if (cell != null) {
+ vo.setProgrmDc("" + cell.getStringCellValue());
+ }
+ }
+ if (insertProgrm(vo)) {
+ count++;
+ }
+ }
+ if (count == rows - 1) {
+ success = true;
+ } else {
+ success = false;
+ }
+ } catch (SQLException e) {
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ success = false;
+
+ } catch (Exception e) {
+ //2017.02.13 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ success = false;
+ }
+ return success;
+ }
+
+ /**
+ * 메뉴정보 일괄등록
+ * @param menuSheet HSSFSheet
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean menuRegist(HSSFSheet menuSheet) throws Exception {
+ boolean success = false;
+ int count = 0;
+ try {
+ int rows = menuSheet.getPhysicalNumberOfRows(); //행 갯수 가져오기
+ for (int j = 1; j < rows; j++) { //row 루프
+ MenuManageVO vo = new MenuManageVO();
+ HSSFRow row = menuSheet.getRow(j); //row 가져오기
+ if (row != null) {
+ //int cells = row.getPhysicalNumberOfCells(); //cell 갯수 가져오기
+ HSSFCell cell = null;
+ cell = row.getCell(0); //메뉴번호
+ if (cell != null) {
+ Double doubleCell = new Double(cell.getNumericCellValue());
+ vo.setMenuNo(Integer.parseInt("" + doubleCell.longValue()));
+ }
+ cell = row.getCell(1); //메뉴순서
+ if (cell != null) {
+ Double doubleCell = new Double(cell.getNumericCellValue());
+ vo.setMenuOrdr(Integer.parseInt("" + doubleCell.longValue()));
+ }
+ cell = row.getCell(2); //메뉴명
+ if (cell != null) {
+ vo.setMenuNm("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(3); //상위메뉴번호
+ if (cell != null) {
+ Double doubleCell = new Double(cell.getNumericCellValue());
+ vo.setUpperMenuId(Integer.parseInt("" + doubleCell.longValue()));
+ }
+ cell = row.getCell(4); //메뉴설명
+ if (cell != null) {
+ vo.setMenuDc("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(5); //관련이미지경로
+ if (cell != null) {
+ vo.setRelateImagePath("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(6); //관련이미지명
+ if (cell != null) {
+ vo.setRelateImageNm("" + cell.getStringCellValue());
+ }
+ cell = row.getCell(7); //프로그램파일명
+ if (cell != null) {
+ vo.setProgrmFileNm("" + cell.getStringCellValue());
+ }
+ }
+ if (insertMenuManageBind(vo)) {
+ count++;
+ }
+ }
+ if (count == rows - 1) {
+ success = true;
+ } else {
+ success = false;
+ }
+ } catch (SQLException e) {
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ success = false;
+
+ } catch (Exception e) {
+ //2017.02.13 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ success = false;
+ }
+
+ return success;
+ }
+
+ /**
+ * 메뉴정보 전체데이타 초기화
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean deleteAllMenuList() throws Exception {
+ return menuManageDAO.deleteAllMenuList();
+ }
+
+ /**
+ * 프로그램 정보를 등록
+ * @param vo ProgrmManageVO
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean insertProgrm(ProgrmManageVO vo) throws Exception {
+ progrmManageDAO.insertProgrm(vo);
+ return true;
+ }
+
+ /**
+ * 메뉴정보를 일괄 등록
+ * @param vo MenuManageVO
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean insertMenuManageBind(MenuManageVO vo) throws Exception {
+ menuManageDAO.insertMenuManage(vo);
+ return true;
+ }
+
+ /**
+ * 프로그램 정보 전체데이타 초기화
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean deleteAllProgrm() throws Exception {
+ progrmManageDAO.deleteAllProgrm();
+ return true;
+ }
+
+ /**
+ * 프로그램변경내역 정보 전체데이타 초기화
+ * @return boolean
+ * @exception Exception
+ */
+ private boolean deleteAllProgrmDtls() throws Exception {
+ progrmManageDAO.deleteAllProgrmDtls();
+ return true;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/impl/EgovMenuManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManageVO.java (revision 7)
@@ -0,0 +1,353 @@
+package egovframework.com.sym.mnu.mpm.service;
+
+/**
+ * 메뉴목록관리 처리를 위한 VO 클래스르를 정의한다
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+
+public class MenuManageVO{
+
+ /** 메뉴정보 */
+ /** 메뉴번호 */
+ private int menuNo;
+ /** 메뉴순서 */
+ private int menuOrdr;
+ /** 메뉴명 */
+ private String menuNm;
+ /** 상위메뉴번호 */
+ private int upperMenuId;
+ /** 메뉴설명 */
+ private String menuDc;
+ /** 관련이미지경로 */
+ private String relateImagePath;
+ /** 관련이미지명 */
+ private String relateImageNm;
+ /** 프로그램파일명 */
+ private String progrmFileNm;
+
+ /** 사이트맵 */
+ /** 생성자ID **/
+ private String creatPersonId;
+
+ /** 권한정보설정 */
+ /** 권한코드 */
+ private String authorCode;
+
+ /** 기타VO변수 */
+ private String tempValue;
+ private int tempInt;
+
+
+ /** Login 메뉴관련 VO변수 */
+ /** tmp_Id */
+ private String tmpId;
+ /** tmp_Password */
+ private String tmpPassword;
+ /** tmp_Name */
+ private String tmpName;
+ /** tmp_UserSe */
+ private String tmpUserSe;
+ /** tmp_Email */
+ private String tmpEmail;
+ /** tmp_OrgnztId */
+ private String tmpOrgnztId;
+ /** tmp_UniqId */
+ private String tmpUniqId;
+ /** tmp_Cmd */
+ private String tmpCmd;
+
+ /**
+ * menuNo attribute를 리턴한다.
+ * @return int
+ */
+ public int getMenuNo() {
+ return menuNo;
+ }
+ /**
+ * menuNo attribute 값을 설정한다.
+ * @param menuNo int
+ */
+ public void setMenuNo(int menuNo) {
+ this.menuNo = menuNo;
+ }
+ /**
+ * menuOrdr attribute를 리턴한다.
+ * @return int
+ */
+ public int getMenuOrdr() {
+ return menuOrdr;
+ }
+ /**
+ * menuOrdr attribute 값을 설정한다.
+ * @param menuOrdr int
+ */
+ public void setMenuOrdr(int menuOrdr) {
+ this.menuOrdr = menuOrdr;
+ }
+ /**
+ * menuNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getMenuNm() {
+ return menuNm;
+ }
+ /**
+ * menuNm attribute 값을 설정한다.
+ * @param menuNm String
+ */
+ public void setMenuNm(String menuNm) {
+ this.menuNm = menuNm;
+ }
+ /**
+ * upperMenuId attribute를 리턴한다.
+ * @return int
+ */
+ public int getUpperMenuId() {
+ return upperMenuId;
+ }
+ /**
+ * upperMenuId attribute 값을 설정한다.
+ * @param upperMenuId int
+ */
+ public void setUpperMenuId(int upperMenuId) {
+ this.upperMenuId = upperMenuId;
+ }
+ /**
+ * menuDc attribute를 리턴한다.
+ * @return String
+ */
+ public String getMenuDc() {
+ return menuDc;
+ }
+ /**
+ * menuDc attribute 값을 설정한다.
+ * @param menuDc String
+ */
+ public void setMenuDc(String menuDc) {
+ this.menuDc = menuDc;
+ }
+ /**
+ * relateImagePath attribute를 리턴한다.
+ * @return String
+ */
+ public String getRelateImagePath() {
+ return relateImagePath;
+ }
+ /**
+ * relateImagePath attribute 값을 설정한다.
+ * @param relateImagePath String
+ */
+ public void setRelateImagePath(String relateImagePath) {
+ this.relateImagePath = relateImagePath;
+ }
+ /**
+ * relateImageNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getRelateImageNm() {
+ return relateImageNm;
+ }
+ /**
+ * relateImageNm attribute 값을 설정한다.
+ * @param relateImageNm String
+ */
+ public void setRelateImageNm(String relateImageNm) {
+ this.relateImageNm = relateImageNm;
+ }
+ /**
+ * progrmFileNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getProgrmFileNm() {
+ return progrmFileNm;
+ }
+ /**
+ * progrmFileNm attribute 값을 설정한다.
+ * @param progrmFileNm String
+ */
+ public void setProgrmFileNm(String progrmFileNm) {
+ this.progrmFileNm = progrmFileNm;
+ }
+ /**
+ * creatPersonId attribute를 리턴한다.
+ * @return String
+ */
+ public String getCreatPersonId() {
+ return creatPersonId;
+ }
+ /**
+ * creatPersonId attribute 값을 설정한다.
+ * @param creatPersonId String
+ */
+ public void setCreatPersonId(String creatPersonId) {
+ this.creatPersonId = creatPersonId;
+ }
+ /**
+ * authorCode attribute를 리턴한다.
+ * @return String
+ */
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ /**
+ * authorCode attribute 값을 설정한다.
+ * @param authorCode String
+ */
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+
+ /**
+ * tmp_Id attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpId() {
+ return tmpId;
+ }
+ /**
+ * tmp_Id attribute 값을 설정한다.
+ * @param tmp_Id String
+ */
+ public void setTmpId(String tmp_Id) {
+ this.tmpId = tmp_Id;
+ }
+ /**
+ * tmp_Password attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpPassword() {
+ return tmpPassword;
+ }
+ /**
+ * tmp_Password attribute 값을 설정한다.
+ * @param tmp_Password String
+ */
+ public void setTmpPassword(String tmp_Password) {
+ this.tmpPassword = tmp_Password;
+ }
+ /**
+ * tmp_Name attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpName() {
+ return tmpName;
+ }
+ /**
+ * tmp_Name attribute 값을 설정한다.
+ * @param tmp_Name String
+ */
+ public void setTmpName(String tmp_Name) {
+ this.tmpName = tmp_Name;
+ }
+ /**
+ * tmp_UserSe attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpUserSe() {
+ return tmpUserSe;
+ }
+ /**
+ * tmp_UserSe attribute 값을 설정한다.
+ * @param tmp_UserSe String
+ */
+ public void setTmpUserSe(String tmp_UserSe) {
+ this.tmpUserSe = tmp_UserSe;
+ }
+ /**
+ * tmp_Email attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpEmail() {
+ return tmpEmail;
+ }
+ /**
+ * tmp_Email attribute 값을 설정한다.
+ * @param tmp_Email String
+ */
+ public void setTmpEmail(String tmp_Email) {
+ this.tmpEmail = tmp_Email;
+ }
+ /**
+ * tmp_OrgnztId attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpOrgnztId() {
+ return tmpOrgnztId;
+ }
+ /**
+ * tmp_OrgnztId attribute 값을 설정한다.
+ * @param tmp_OrgnztId String
+ */
+ public void setTmpOrgnztId(String tmp_OrgnztId) {
+ this.tmpOrgnztId = tmp_OrgnztId;
+ }
+ /**
+ * tmp_UniqId attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpUniqId() {
+ return tmpUniqId;
+ }
+ /**
+ * tmp_UniqId attribute 값을 설정한다.
+ * @param tmp_UniqId String
+ */
+ public void setTmpUniqId(String tmpUniqId) {
+ this.tmpUniqId = tmpUniqId;
+ }
+ /**
+ * tmp_Cmd attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpCmd() {
+ return tmpCmd;
+ }
+ /**
+ * tmp_Cmd attribute 값을 설정한다.
+ * @param tmp_Cmd String
+ */
+ public void setTmpCmd(String tmp_Cmd) {
+ this.tmpCmd = tmp_Cmd;
+ }
+
+ /**
+ * tempValue attribute를 리턴한다.
+ * @return String
+ */
+ public String getTempValue() {
+ return tempValue;
+ }
+ /**
+ * tempValue attribute 값을 설정한다.
+ * @param tempValue String
+ */
+ public void setTempValue(String tempValue) {
+ this.tempValue = tempValue;
+ }
+ /**
+ * tempInt attribute를 리턴한다.
+ * @return int
+ */
+ public int getTempInt() {
+ return tempInt;
+ }
+ /**
+ * tempInt attribute 값을 설정한다.
+ * @param tempInt int
+ */
+ public void setTempInt(int tempInt) {
+ this.tempInt = tempInt;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/EgovMenuManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/EgovMenuManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/EgovMenuManageService.java (revision 7)
@@ -0,0 +1,142 @@
+package egovframework.com.sym.mnu.mpm.service;
+
+import java.io.InputStream;
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 메뉴관리에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.07.01 서준식 자기 메뉴 정보를 상위메뉴 정보로 참조하는 메뉴정보가 있는지 조회하는
+ * selectUpperMenuNoByPk() 메서드 추가
+ *
+ * </pre>
+ */
+
+public interface EgovMenuManageService {
+
+ /**
+ * 메뉴 상세정보를 조회
+ * @param vo ComDefaultVO
+ * @return MenuManageVO
+ * @exception Exception
+ */
+ MenuManageVO selectMenuManage(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectMenuManageList(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectMenuManageListTotCnt(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴번호 존재 여부를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectMenuNoByPk(MenuManageVO vo) throws Exception;
+
+ int selectUpperMenuNoByPk(MenuManageVO vo) throws Exception;
+
+ /**
+ * 메뉴 정보를 등록
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ void insertMenuManage(MenuManageVO vo) throws Exception;
+
+ /**
+ * 메뉴 정보를 수정
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ void updateMenuManage(MenuManageVO vo) throws Exception;
+
+ /**
+ * 메뉴 정보를 삭제
+ * @param vo MenuManageVO
+ * @exception Exception
+ */
+ void deleteMenuManage(MenuManageVO vo) throws Exception;
+
+ /**
+ * 화면에 조회된 메뉴 목록 정보를 데이터베이스에서 삭제
+ * @param checkedMenuNoForDel String
+ * @exception Exception
+ */
+ void deleteMenuManageList(String checkedMenuNoForDel) throws Exception;
+
+ /* 메뉴 생성 관리 */
+
+ /**
+ * 메뉴 목록을 조회
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectMenuList() throws Exception;
+
+ /*### 메뉴관련 프로세스 ###*/
+ /**
+ * MainMenu Head Menu 조회
+ * @param vo MenuManageVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectMainMenuHead(MenuManageVO vo) throws Exception;
+
+ /**
+ * MainMenu Head Left 조회
+ * @param vo MenuManageVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectMainMenuLeft(MenuManageVO vo) throws Exception;
+
+ /**
+ * MainMenu Head MenuURL 조회
+ * @param iMenuNo int
+ * @param sUniqId String
+ * @return String
+ * @exception Exception
+ */
+ String selectLastMenuURL(int iMenuNo, String sUniqId) throws Exception;
+
+ /* 일괄처리 프로세스 */
+
+ /**
+ * 메뉴일괄초기화 프로세스 메뉴목록테이블, 프로그램 목록테이블 전체 삭제
+ * @return boolean
+ */
+ boolean menuBndeAllDelete() throws Exception;
+
+ /**
+ * 메뉴일괄등록 프로세스
+ * @param vo MenuManageVO
+ * @param inputStream InputStream
+ * @exception Exception
+ */
+ String menuBndeRegist(MenuManageVO vo, InputStream inputStream) throws Exception;
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/EgovMenuManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManage.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManage.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManage.java (revision 7)
@@ -0,0 +1,102 @@
+package egovframework.com.sym.mnu.mpm.service;
+
+/**
+ * 메뉴관리, 메뉴 생성을 위한 모델 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이 용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이용 최초 생성
+ *
+ * </pre>
+ */
+
+public class MenuManage {
+
+ /**
+ * 메뉴설명
+ */
+ private String menuDc;
+ public String getMenuDc() {
+ return menuDc;
+ }
+ public void setMenuDc(String menuDc) {
+ this.menuDc = menuDc;
+ }
+ public String getMenuNm() {
+ return menuNm;
+ }
+ public void setMenuNm(String menuNm) {
+ this.menuNm = menuNm;
+ }
+ public int getMenuNo() {
+ return menuNo;
+ }
+ public void setMenuNo(int menuNo) {
+ this.menuNo = menuNo;
+ }
+ public int getMenuOrdr() {
+ return menuOrdr;
+ }
+ public void setMenuOrdr(int menuOrdr) {
+ this.menuOrdr = menuOrdr;
+ }
+ public String getProgrmFileNm() {
+ return progrmFileNm;
+ }
+ public void setProgrmFileNm(String progrmFileNm) {
+ this.progrmFileNm = progrmFileNm;
+ }
+ public String getRelateImageNm() {
+ return relateImageNm;
+ }
+ public void setRelateImageNm(String relateImageNm) {
+ this.relateImageNm = relateImageNm;
+ }
+ public String getRelateImagePath() {
+ return relateImagePath;
+ }
+ public void setRelateImagePath(String relateImagePath) {
+ this.relateImagePath = relateImagePath;
+ }
+ public int getUpperMenuId() {
+ return upperMenuId;
+ }
+ public void setUpperMenuId(int upperMenuId) {
+ this.upperMenuId = upperMenuId;
+ }
+ /**
+ * 메뉴명
+ */
+ private String menuNm;
+ /**
+ * 메뉴번호
+ */
+ private int menuNo;
+ /**
+ * 메뉴순서
+ */
+ private int menuOrdr;
+ /**
+ * 프로그램파일명
+ */
+ private String progrmFileNm;
+ /**
+ * 관련이미지명
+ */
+ private String relateImageNm;
+ /**
+ * 관련이미지경로
+ */
+ private String relateImagePath;
+ /**
+ * 상위메뉴번호
+ */
+ private int upperMenuId;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/mpm/service/MenuManage.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/stm/web/EgovSiteMapngController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/stm/web/EgovSiteMapngController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/stm/web/EgovSiteMapngController.java (revision 7)
@@ -0,0 +1,82 @@
+package egovframework.com.sym.mnu.stm.web;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.mnu.stm.service.EgovSiteMapngService;
+import egovframework.com.sym.mnu.stm.service.SiteMapngVO;
+
+import egovframework.rte.fdl.property.EgovPropertyService;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+/**
+ * 사이트맵 조회 처리를 하는 비즈니스 구현 클래스
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.07.29 서준식 사이트 맵 생성 안했을 때 발생하는 오류 수정
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * </pre>
+ */
+
+@Controller
+public class EgovSiteMapngController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovSiteMapngController.class);
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovSiteMapngService */
+ @Resource(name = "siteMapngService")
+ private EgovSiteMapngService siteMapngService;
+
+ /** EgovMessageSource */
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ /*사이트맵조회*/
+ /**
+ * 사이트맵 화면을 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/stm/EgovSiteMapng"
+ * @exception Exception
+ */
+ @IncludedInfo(name="사이트맵", order = 1101 ,gid = 60)
+ @RequestMapping(value="/sym/mnu/stm/EgovSiteMapng.do")
+ public String selectSiteMapng(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ searchVO.setSearchKeyword((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ SiteMapngVO resultVO = siteMapngService.selectSiteMapng(searchVO);
+ if(resultVO == null){
+ model.addAttribute("resultMsg", egovMessageSource.getMessage("comSymMnuStm.siteMapng.validate.siteMap"));
+ return "egovframework/com/sym/mnu/stm/EgovSiteMapng";
+ }
+ LOGGER.debug(resultVO.getBndeFileNm());
+ model.addAttribute("resultVO", resultVO);
+
+ return "egovframework/com/sym/mnu/stm/EgovSiteMapng";
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/stm/web/EgovSiteMapngController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/EgovSiteMapngService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/EgovSiteMapngService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/EgovSiteMapngService.java (revision 7)
@@ -0,0 +1,30 @@
+package egovframework.com.sym.mnu.stm.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 메뉴사이트맵에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+public interface EgovSiteMapngService {
+
+ /**
+ * 사이트맵 조회
+ * @param vo ComDefaultVO
+ * @return SiteMapngVO
+ * @exception Exception
+ */
+ SiteMapngVO selectSiteMapng(ComDefaultVO vo) throws Exception;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/EgovSiteMapngService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/EgovSiteMapngServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/EgovSiteMapngServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/EgovSiteMapngServiceImpl.java (revision 7)
@@ -0,0 +1,52 @@
+package egovframework.com.sym.mnu.stm.service.impl;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.sym.mnu.stm.service.EgovSiteMapngService;
+import egovframework.com.sym.mnu.stm.service.SiteMapngVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 사이트맵 조회를 처리하는 비즈니스 구현 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+@Service("siteMapngService")
+public class EgovSiteMapngServiceImpl extends EgovAbstractServiceImpl implements EgovSiteMapngService{
+
+ @Resource(name="siteMapngDAO")
+ private SiteMapngDAO siteMapngDAO;
+
+ /**
+ * 사이트맵 조회
+ * @param vo ComDefaultVO
+ * @return SiteMapngVO
+ * @exception Exception
+ */
+
+ @Override
+ @SuppressWarnings("unused")
+ public SiteMapngVO selectSiteMapng(ComDefaultVO vo) throws Exception{
+ String sMapCreatID = null;
+
+ SiteMapngVO sitemapngvo = new SiteMapngVO();
+ sMapCreatID = siteMapngDAO.selectSiteMapngByMapCreatID(vo);
+ vo.setSearchKeyword(sMapCreatID);
+ return siteMapngDAO.selectSiteMapng(vo);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/EgovSiteMapngServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/SiteMapngDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/SiteMapngDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/SiteMapngDAO.java (revision 7)
@@ -0,0 +1,47 @@
+package egovframework.com.sym.mnu.stm.service.impl;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.mnu.stm.service.SiteMapngVO;
+
+import org.springframework.stereotype.Repository;
+/**
+ * 사이트맵 조회에 대한 DAO 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+@Repository("siteMapngDAO")
+public class SiteMapngDAO extends EgovComAbstractDAO{
+
+ /**
+ * 사이트맵 조회
+ * @param vo ComDefaultVO
+ * @return SiteMapngVO
+ * @exception Exception
+ */
+ public SiteMapngVO selectSiteMapng(ComDefaultVO vo)throws Exception{
+ return (SiteMapngVO)selectOne("siteMapngDAO.selectSiteMapng_D", vo);
+ }
+
+ /**
+ * MapCreatId 조회
+ * @param vo ComDefaultVO
+ * @return String
+ * @exception Exception
+ */
+ public String selectSiteMapngByMapCreatID(ComDefaultVO vo)throws Exception{
+ return (String)selectOne("siteMapngDAO.selectSiteMapngByMapCreatID", vo);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/impl/SiteMapngDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/SiteMapngVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/SiteMapngVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/SiteMapngVO.java (revision 7)
@@ -0,0 +1,107 @@
+package egovframework.com.sym.mnu.stm.service;
+
+/**
+ * 사이트맵 조회를 위한 VO 클래스르를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+public class SiteMapngVO{
+
+ /** 메뉴생성내역 */
+ /** 보안설정대상ID */
+ private String scrtyEstbstrgetId;
+
+ /** 사이트맵 */
+ /** 생성자ID **/
+ private String creatPersonId;
+ /** 맵생성ID */
+ private String mapCreatId;
+ /** 맵파일명 */
+ private String bndeFileNm;
+ /** 맵파일경로 */
+ private String bndeFilePath;
+
+ /**
+ * scrtyEstbstrgetId attribute를 리턴한다.
+ * @return String
+ */
+ public String getScrtyEstbstrgetId() {
+ return scrtyEstbstrgetId;
+ }
+ /**
+ * scrtyEstbstrgetId attribute 값을 설정한다.
+ * @param scrtyEstbstrgetId String
+ */
+ public void setScrtyEstbstrgetId(String scrtyEstbstrgetId) {
+ this.scrtyEstbstrgetId = scrtyEstbstrgetId;
+ }
+ /**
+ * creatPersonId attribute를 리턴한다.
+ * @return String
+ */
+ public String getCreatPersonId() {
+ return creatPersonId;
+ }
+ /**
+ * creatPersonId attribute 값을 설정한다.
+ * @param creatPersonId String
+ */
+ public void setCreatPersonId(String creatPersonId) {
+ this.creatPersonId = creatPersonId;
+ }
+ /**
+ * mapCreatId attribute를 리턴한다.
+ * @return String
+ */
+ public String getMapCreatId() {
+ return mapCreatId;
+ }
+ /**
+ * mapCreatId attribute 값을 설정한다.
+ * @param mapCreatId String
+ */
+ public void setMapCreatId(String mapCreatId) {
+ this.mapCreatId = mapCreatId;
+ }
+ /**
+ * bndeFileNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getBndeFileNm() {
+ return bndeFileNm;
+ }
+ /**
+ * bndeFileNm attribute 값을 설정한다.
+ * @param bndeFileNm String
+ */
+ public void setBndeFileNm(String bndeFileNm) {
+ this.bndeFileNm = bndeFileNm;
+ }
+ /**
+ * bndeFilePath attribute를 리턴한다.
+ * @return String
+ */
+ public String getBndeFilePath() {
+ return bndeFilePath;
+ }
+ /**
+ * bndeFilePath attribute 값을 설정한다.
+ * @param bndeFilePath String
+ */
+ public void setBndeFilePath(String bndeFilePath) {
+ this.bndeFilePath = bndeFilePath;
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/mnu/stm/service/SiteMapngVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/web/EgovProgrmManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/web/EgovProgrmManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/web/EgovProgrmManageController.java (revision 7)
@@ -0,0 +1,794 @@
+package egovframework.com.sym.prm.web;
+
+import java.util.List;
+import java.util.Map;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.prm.service.EgovProgrmManageService;
+import egovframework.com.sym.prm.service.ProgrmManageDtlVO;
+import egovframework.com.sym.prm.service.ProgrmManageVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+/**
+ * 프로그램목록 관리및 변경을 처리하는 비즈니스 구현 클래스
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ * 2011.08.22 서준식 selectProgrmChangRequstProcess() 메서드 처리일자 trim 처리
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * </pre>
+ */
+
+@Controller
+public class EgovProgrmManageController {
+
+ /** Validator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovProgrmManageService */
+ @Resource(name = "progrmManageService")
+ private EgovProgrmManageService progrmManageService;
+
+ /** EgovMessageSource */
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ /**
+ * 프로그램목록을 상세화면 호출 및 상세조회한다.
+ * @param tmp_progrmNm String
+ * @return 출력페이지정보 "sym/prm/EgovProgramListDetailSelectUpdt"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramListDetailSelect.do")
+ public String selectProgrm(
+ @RequestParam("tmp_progrmNm") String tmp_progrmNm ,
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ ProgrmManageVO vo = new ProgrmManageVO();
+ vo.setProgrmFileNm(tmp_progrmNm);
+ ProgrmManageVO progrmManageVO = progrmManageService.selectProgrm(vo);
+ model.addAttribute("progrmManageVO", progrmManageVO);
+ return "egovframework/com/sym/prm/EgovProgramListDetailSelectUpdt";
+ }
+
+ /**
+ * 프로그램목록 리스트조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/prm/EgovProgramListManage"
+ * @exception Exception
+ */
+ @IncludedInfo(name="프로그램관리",order = 1111 ,gid = 60)
+ @RequestMapping(value="/sym/prm/EgovProgramListManageSelect.do")
+ public String selectProgrmList(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> list_progrmmanage = progrmManageService.selectProgrmList(searchVO);
+ model.addAttribute("list_progrmmanage", list_progrmmanage);
+ model.addAttribute("searchVO", searchVO);
+
+ int totCnt = progrmManageService.selectProgrmListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/prm/EgovProgramListManage";
+
+ }
+
+ /**
+ * 프로그램목록 멀티 삭제한다.
+ * @param checkedProgrmFileNmForDel String
+ * @return 출력페이지정보 "forward:/sym/prm/EgovProgramListManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping("/sym/prm/EgovProgrmManageListDelete.do")
+ public String deleteProgrmManageList(
+ @RequestParam("checkedProgrmFileNmForDel") String checkedProgrmFileNmForDel ,
+ @ModelAttribute("progrmManageVO") ProgrmManageVO progrmManageVO,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ String [] delProgrmFileNm = checkedProgrmFileNmForDel.split(",");
+ if (delProgrmFileNm == null || (delProgrmFileNm.length ==0)){
+ resultMsg = egovMessageSource.getMessage("fail.common.delete");
+ sLocationUrl = "forward:/sym/prm/EgovProgramListManageSelect.do";
+ }else{
+ progrmManageService.deleteProgrmManageList(checkedProgrmFileNmForDel);
+ resultMsg = egovMessageSource.getMessage("success.common.delete");
+ sLocationUrl ="forward:/sym/prm/EgovProgramListManageSelect.do";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ //status.setComplete();
+ return sLocationUrl ;
+ }
+
+ /**
+ * 프로그램목록을 등록화면으로 이동 및 등록 한다.
+ * @param progrmManageVO ProgrmManageVO
+ * @param commandMap Map
+ * @return 출력페이지정보 등록화면 호출시 "sym/prm/EgovProgramListRegist",
+ * 출력페이지정보 등록처리시 "forward:/sym/prm/EgovProgramListManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramListRegist.do")
+ public String insertProgrmList(
+ @RequestParam Map<?, ?> commandMap,
+ @ModelAttribute("progrmManageVO") ProgrmManageVO progrmManageVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ String sLocationUrl = null;
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd");
+ if(sCmd.equals("insert")){
+ beanValidator.validate(progrmManageVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "egovframework/com/sym/prm/EgovProgramListRegist";
+ return sLocationUrl;
+ }
+ if(progrmManageVO.getProgrmDc()==null || progrmManageVO.getProgrmDc().equals("")){progrmManageVO.setProgrmDc(" ");}
+ progrmManageService.insertProgrm(progrmManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.insert");
+ sLocationUrl = "forward:/sym/prm/EgovProgramListManageSelect.do";
+ }else{
+ sLocationUrl = "egovframework/com/sym/prm/EgovProgramListRegist";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 프로그램목록을 수정 한다.
+ * @param progrmManageVO ProgrmManageVO
+ * @return 출력페이지정보 "forward:/sym/prm/EgovProgramListManageSelect.do"
+ * @exception Exception
+ */
+ /*프로그램목록수정*/
+ @RequestMapping(value="/sym/prm/EgovProgramListDetailSelectUpdt.do")
+ public String updateProgrmList(
+ @ModelAttribute("progrmManageVO") ProgrmManageVO progrmManageVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ String sLocationUrl = null;
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(progrmManageVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "forward:/sym/prm/EgovProgramListDetailSelect.do";
+ return sLocationUrl;
+ }
+ if(progrmManageVO.getProgrmDc()==null || progrmManageVO.getProgrmDc().equals("")){progrmManageVO.setProgrmDc(" ");}
+ progrmManageService.updateProgrm(progrmManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.update");
+ sLocationUrl = "forward:/sym/prm/EgovProgramListManageSelect.do";
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 프로그램목록을 삭제 한다.
+ * @param progrmManageVO ProgrmManageVO
+ * @return 출력페이지정보 "forward:/sym/prm/EgovProgramListManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramListManageDelete.do")
+ public String deleteProgrmList(
+ @ModelAttribute("progrmManageVO")
+ ProgrmManageVO progrmManageVO,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ progrmManageService.deleteProgrm(progrmManageVO);
+ resultMsg = egovMessageSource.getMessage("success.common.delete");
+ model.addAttribute("resultMsg", resultMsg);
+ return "forward:/sym/prm/EgovProgramListManageSelect.do";
+ }
+
+ /**
+ * 프로그램변경요청목록 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/prm/EgovProgramChangeRequst"
+ * @exception Exception
+ */
+ @IncludedInfo(name="프로그램변경요청관리",order = 1112 ,gid = 60)
+ @RequestMapping(value="/sym/prm/EgovProgramChangeRequstSelect.do")
+ public String selectProgrmChangeRequstList(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> list_changerequst = progrmManageService.selectProgrmChangeRequstList(searchVO);
+ model.addAttribute("list_changerequst", list_changerequst);
+
+ int totCnt = progrmManageService.selectProgrmChangeRequstListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/prm/EgovProgramChangeRequst";
+ }
+
+ /**
+ * 프로그램변경요청목록을 상세조회한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @return 출력페이지정보 "sym/prm/EgovProgramChangRequstDetailSelectUpdt"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramChangRequstDetailSelect.do")
+ public String selectProgrmChangeRequst(
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ if(progrmManageDtlVO.getProgrmFileNm()== null||progrmManageDtlVO.getProgrmFileNm().equals("")){
+ String FileNm = progrmManageDtlVO.getTmpProgrmNm();
+ progrmManageDtlVO.setProgrmFileNm(FileNm);
+ int tmpNo = progrmManageDtlVO.getTmpRqesterNo();
+ progrmManageDtlVO.setRqesterNo(tmpNo);
+ }
+ ProgrmManageDtlVO resultVO = progrmManageService.selectProgrmChangeRequst(progrmManageDtlVO);
+ model.addAttribute("progrmManageDtlVO", resultVO);
+ return "egovframework/com/sym/prm/EgovProgramChangRequstDetailSelectUpdt";
+ }
+
+ /**
+ * 프로그램변경요청 화면을 호출및 프로그램변경요청을 등록한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @param commandMap Map
+ * @return 출력페이지정보 등록화면 호출시 "sym/prm/EgovProgramChangRequstStre",
+ * 출력페이지정보 등록처리시 "forward:/sym/prm/EgovProgramChangeRequstSelect.do"
+ * @exception Exception
+ */
+ /*프로그램변경요청등록*/
+ @RequestMapping(value="/sym/prm/EgovProgramChangRequstStre.do")
+ public String insertProgrmChangeRequst(
+ @RequestParam Map<?, ?> commandMap,
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ //로그인 객체 선언
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ String sLocationUrl = null;
+ String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd");
+ if(sCmd.equals("insert")){
+ //beanValidator 처리
+ beanValidator.validate(progrmManageDtlVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "egovframework/com/sym/prm/EgovProgramChangRequstStre";
+ return sLocationUrl;
+ }
+ if(progrmManageDtlVO.getChangerqesterCn()==null || progrmManageDtlVO.getChangerqesterCn().equals("")){progrmManageDtlVO.setChangerqesterCn("");}
+ if(progrmManageDtlVO.getRqesterProcessCn()==null || progrmManageDtlVO.getRqesterProcessCn().equals("")){progrmManageDtlVO.setRqesterProcessCn("");}
+ progrmManageService.insertProgrmChangeRequst(progrmManageDtlVO);
+ resultMsg = egovMessageSource.getMessage("success.common.insert");
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangeRequstSelect.do";
+ }else{
+ /* MAX요청번호 조회 */
+ ProgrmManageDtlVO tmp_vo = progrmManageService.selectProgrmChangeRequstNo(progrmManageDtlVO);
+ int _tmp_no = tmp_vo.getRqesterNo();
+ progrmManageDtlVO.setRqesterNo(_tmp_no);
+ progrmManageDtlVO.setRqesterPersonId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ sLocationUrl = "egovframework/com/sym/prm/EgovProgramChangRequstStre";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 프로그램변경 요청을 수정 한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @return 출력페이지정보 "forward:/sym/prm/EgovProgramChangeRequstSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramChangRequstDetailSelectUpdt.do")
+ public String updateProgrmChangeRequst(
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ //로그인 객체 선언
+ LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ //beanValidator 처리
+ beanValidator.validate(progrmManageDtlVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangRequstDetailSelect.do";
+ return sLocationUrl;
+ }
+
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if(EgovStringUtil.isNullToString(progrmManageDtlVO.getRqesterPersonId()).equals(loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()))){
+ if(progrmManageDtlVO.getChangerqesterCn()==null || progrmManageDtlVO.getChangerqesterCn().equals("")){progrmManageDtlVO.setChangerqesterCn(" ");}
+ if(progrmManageDtlVO.getRqesterProcessCn()==null || progrmManageDtlVO.getRqesterProcessCn().equals("")){progrmManageDtlVO.setRqesterProcessCn(" ");}
+ progrmManageService.updateProgrmChangeRequst(progrmManageDtlVO);
+ resultMsg = egovMessageSource.getMessage("success.common.update");
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangeRequstSelect.do";
+ }else{
+ resultMsg = "수정이 실패하였습니다. 변경요청 수정은 변경요청자만 수정가능합니다.";
+ progrmManageDtlVO.setTmpProgrmNm(progrmManageDtlVO.getProgrmFileNm());
+ progrmManageDtlVO.setTmpRqesterNo(progrmManageDtlVO.getRqesterNo());
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangRequstDetailSelect.do";
+ }
+ model.addAttribute("resultMsg", resultMsg);
+ return sLocationUrl;
+ }
+
+ /**
+ * 프로그램변경 요청을 삭제 한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @return 출력페이지정보 "forward:/sym/prm/EgovProgramChangeRequstSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramChangRequstDelete.do")
+ public String deleteProgrmChangeRequst(
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ //로그인 객체 선언
+ LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if(EgovStringUtil.isNullToString(progrmManageDtlVO.getRqesterPersonId()).equals(loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()))){
+ //progrmManageDtlVO.setRqesterPersonId(user.getId());
+ model.addAttribute("resultMsg", egovMessageSource.getMessage("success.common.delete"));
+ progrmManageService.deleteProgrmChangeRequst(progrmManageDtlVO);
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangeRequstSelect.do";
+ }else{
+ model.addAttribute("resultMsg", egovMessageSource.getMessage("comSymPrm.progrmManageController.checkRqesterPersonId")); //삭제에 실패하였습니다. 변경요청자만 삭제가능합니다.
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangRequstDetailSelect.do";
+ }
+ return sLocationUrl;
+ }
+
+ /**
+ * 프로그램변경 요청에 대한 처리 사항을 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/prm/EgovProgramChangeRequstProcess"
+ * @exception Exception
+ */
+ @IncludedInfo(name="프로그램변경요청처리",order = 1113 ,gid = 60)
+ @RequestMapping(value="/sym/prm/EgovProgramChangeRequstProcessListSelect.do")
+ public String selectProgrmChangeRequstProcessList(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> list_changerequst = progrmManageService.selectChangeRequstProcessList(searchVO);
+ model.addAttribute("list_changerequst", list_changerequst);
+
+ int totCnt = progrmManageService.selectChangeRequstProcessListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/prm/EgovProgramChangeRequstProcess";
+ }
+
+ /**
+ * 프로그램변경 요청에 대한 처리 사항을 상세조회한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @return 출력페이지정보 "sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramChangRequstProcessDetailSelect.do")
+ public String selectProgrmChangRequstProcess(
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ if(progrmManageDtlVO.getProgrmFileNm()==null){
+ String _FileNm = progrmManageDtlVO.getTmpProgrmNm();
+ progrmManageDtlVO.setProgrmFileNm(_FileNm);
+ int _Tmp_no = progrmManageDtlVO.getTmpRqesterNo();
+ progrmManageDtlVO.setRqesterNo(_Tmp_no);
+ }
+ ProgrmManageDtlVO resultVO = progrmManageService.selectProgrmChangeRequst(progrmManageDtlVO);
+ if(resultVO.getProcessDe() != null){
+ resultVO.setProcessDe(resultVO.getProcessDe().trim());//2011.08.22
+ }
+
+ if(resultVO.getOpetrId()== null){
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ resultVO.setOpetrId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+ }
+ model.addAttribute("progrmManageDtlVO", resultVO);
+ return "egovframework/com/sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt";
+ }
+
+ /**
+ * 프로그램변경요청처리 내용을 수정 한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @return 출력페이지정보 "forward:/sym/prm/EgovProgramChangeRequstProcessListSelect.do"
+ * @exception Exception
+ */
+ @SuppressWarnings("unused")
+ @RequestMapping(value="/sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt.do")
+ public String updateProgrmChangRequstProcess(
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ String sLocationUrl = null;
+ boolean result = true;
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ beanValidator.validate(progrmManageDtlVO, bindingResult);
+ if (bindingResult.hasErrors()){
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangRequstProcessDetailSelect.do";
+ return sLocationUrl;
+ }
+
+ LoginVO user =
+ (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (progrmManageDtlVO.getOpetrId() != null) {
+ if(progrmManageDtlVO.getOpetrId().equals(user == null ? "" : EgovStringUtil.isNullToString(user.getId()))){
+ if(progrmManageDtlVO.getChangerqesterCn()==null || progrmManageDtlVO.getChangerqesterCn().equals("")){progrmManageDtlVO.setChangerqesterCn(" ");}
+ if(progrmManageDtlVO.getRqesterProcessCn()==null || progrmManageDtlVO.getRqesterProcessCn().equals("")){progrmManageDtlVO.setRqesterProcessCn(" ");}
+ progrmManageService.updateProgrmChangeRequstProcess(progrmManageDtlVO);
+ model.addAttribute("resultMsg", egovMessageSource.getMessage("success.common.update"));
+
+ ProgrmManageDtlVO vo = new ProgrmManageDtlVO();
+ vo = progrmManageService.selectRqesterEmail(progrmManageDtlVO);
+ String sTemp = null;
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if("A".equals(progrmManageDtlVO.getProcessSttus())){
+ sTemp = egovMessageSource.getMessage("comSymPrm.progrmManageController.processSttusA"); //신청중
+ }else if("P".equals(progrmManageDtlVO.getProcessSttus())){
+ sTemp = egovMessageSource.getMessage("comSymPrm.progrmManageController.processSttusP"); //진행중
+ }else if("R".equals(progrmManageDtlVO.getProcessSttus())){
+ sTemp = egovMessageSource.getMessage("comSymPrm.progrmManageController.processSttusR"); //반려
+ }else if("C".equals(progrmManageDtlVO.getProcessSttus())){
+ sTemp = egovMessageSource.getMessage("comSymPrm.progrmManageController.processSttusC"); //처리완료
+ }
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangeRequstProcessListSelect.do";
+ }else{
+ model.addAttribute("resultMsg", egovMessageSource.getMessage("comSymPrm.progrmManageController.updateProgrmChangRequstProcess.fail")); //수정이 실패하였습니다. 변경요청처리 수정은 변경처리해당 담당자만 처리가능합니다.
+ progrmManageDtlVO.setTmpProgrmNm(progrmManageDtlVO.getProgrmFileNm());
+ progrmManageDtlVO.setTmpRqesterNo(progrmManageDtlVO.getRqesterNo());
+ sLocationUrl = "forward:/sym/prm/EgovProgramChangRequstProcessDetailSelect.do";
+ }
+ }
+ return sLocationUrl;
+ }
+
+ /**
+ * 프로그램변경요청처리를 삭제 한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @return 출력페이지정보 "forward:/sym/prm/EgovProgramChangeRequstProcessListSelect.do"
+ * @exception Exception
+ */
+ /*프로그램변경요청처리 삭제*/
+ @RequestMapping(value="/sym/prm/EgovProgramChangRequstProcessDelete.do")
+ public String deleteProgrmChangRequstProcess(
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ progrmManageService.deleteProgrmChangeRequst(progrmManageDtlVO);
+
+ return "forward:/sym/prm/EgovProgramChangeRequstProcessListSelect.do";
+ }
+
+ /**
+ * 프로그램변경이력리스트를 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/prm/EgovProgramChgHst"
+ * @exception Exception
+ */
+ @IncludedInfo(name="프로그램변경이력",order = 1114 ,gid = 60)
+ @RequestMapping(value="/sym/prm/EgovProgramChgHstListSelect.do")
+ public String selectProgrmChgHstList(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> list_changerequst = progrmManageService.selectProgrmChangeRequstList(searchVO);
+ model.addAttribute("list_changerequst", list_changerequst);
+
+ int totCnt = progrmManageService.selectProgrmChangeRequstListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/prm/EgovProgramChgHst";
+ }
+
+ /*프로그램변경이력상세조회*/
+ /**
+ * 프로그램변경이력을 상세조회한다.
+ * @param progrmManageDtlVO ProgrmManageDtlVO
+ * @return 출력페이지정보 "sym/prm/EgovProgramChgHstDetail"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramChgHstListDetailSelect.do")
+ public String selectProgramChgHstListDetail(
+ @ModelAttribute("progrmManageDtlVO") ProgrmManageDtlVO progrmManageDtlVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ String _FileNm = progrmManageDtlVO.getTmpProgrmNm();
+ progrmManageDtlVO.setProgrmFileNm(_FileNm);
+ int _tmp_no = progrmManageDtlVO.getTmpRqesterNo();
+ progrmManageDtlVO.setRqesterNo(_tmp_no);
+
+ ProgrmManageDtlVO resultVO = progrmManageService.selectProgrmChangeRequst(progrmManageDtlVO);
+ model.addAttribute("resultVO", resultVO);
+ return "egovframework/com/sym/prm/EgovProgramChgHstDetail";
+ }
+
+ /**
+ * 프로그램파일명을 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/prm/EgovFileNmSearch"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramListSearch.do")
+ public String selectProgrmListSearch(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> list_progrmmanage = progrmManageService.selectProgrmList(searchVO);
+ model.addAttribute("list_progrmmanage", list_progrmmanage);
+
+ int totCnt = progrmManageService.selectProgrmListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/prm/EgovFileNmSearch";
+
+ }
+
+ /**
+ * 프로그램파일명을 조회한다. (New)
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/prm/EgovFileNmSearch"
+ * @exception Exception
+ */
+ @RequestMapping(value="/sym/prm/EgovProgramListSearchNew.do")
+ public String selectProgrmListSearchNew(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ // 내역 조회
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> list_progrmmanage = progrmManageService.selectProgrmList(searchVO);
+ model.addAttribute("list_progrmmanage", list_progrmmanage);
+
+ int totCnt = progrmManageService.selectProgrmListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/prm/EgovFileNmSearchNew";
+
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/web/EgovProgrmManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/service/impl/ProgrmManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/service/impl/ProgrmManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/service/impl/ProgrmManageDAO.java (revision 7)
@@ -0,0 +1,238 @@
+package egovframework.com.sym.prm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.prm.service.ProgrmManageDtlVO;
+import egovframework.com.sym.prm.service.ProgrmManageVO;
+
+import org.springframework.stereotype.Repository;
+/**
+ * 프로그램 목록관리및 프로그램변경관리에 대한 DAO 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+
+@Repository("progrmManageDAO")
+public class ProgrmManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 프로그램 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectProgrmList(ComDefaultVO vo) throws Exception{
+ return selectList("progrmManageDAO.selectProgrmList_D", vo);
+ }
+
+ /**
+ * 프로그램목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectProgrmListTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("progrmManageDAO.selectProgrmListTotCnt_S", vo);
+ }
+
+ /**
+ * 프로그램 기본정보를 조회
+ * @param vo ComDefaultVO
+ * @return ProgrmManageVO
+ * @exception Exception
+ */
+ public ProgrmManageVO selectProgrm(ProgrmManageVO vo)throws Exception{
+ return (ProgrmManageVO)selectOne("progrmManageDAO.selectProgrm_D", vo);
+ }
+
+ /**
+ * 프로그램 기본정보 및 URL을 등록
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ public void insertProgrm(ProgrmManageVO vo){
+ insert("progrmManageDAO.insertProgrm_S", vo);
+ }
+
+ /**
+ * 프로그램 기본정보 및 URL을 수정
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ public void updateProgrm(ProgrmManageVO vo){
+ update("progrmManageDAO.updateProgrm_S", vo);
+ }
+
+ /**
+ * 프로그램 기본정보 및 URL을 삭제
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ public void deleteProgrm(ProgrmManageVO vo){
+ delete("progrmManageDAO.deleteProgrm_S", vo);
+ }
+
+ /**
+ * 프로그램 파일 존재여부를 조회
+ * @param vo ProgrmManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectProgrmNMTotCnt(ComDefaultVO vo) throws Exception{
+ return (Integer)selectOne("progrmManageDAO.selectProgrmNMTotCnt", vo);
+ }
+
+
+ /**
+ * 프로그램변경요청 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+
+ public List<?> selectProgrmChangeRequstList(ComDefaultVO vo) throws Exception{
+ return selectList("progrmManageDAO.selectProgrmChangeRequstList_D", vo);
+ }
+
+ /**
+ * 프로그램변경요청 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectProgrmChangeRequstListTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("progrmManageDAO.selectProgrmChangeRequstListTotCnt_S", vo);
+ }
+
+ /**
+ * 프로그램변경요청 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO
+ * @exception Exception
+ */
+ public ProgrmManageDtlVO selectProgrmChangeRequst(ProgrmManageDtlVO vo)throws Exception{
+ return (ProgrmManageDtlVO)selectOne("progrmManageDAO.selectProgrmChangeRequst_D", vo);
+ }
+
+ /**
+ * 프로그램변경요청을 등록
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ public void insertProgrmChangeRequst(ProgrmManageDtlVO vo){
+ insert("progrmManageDAO.insertProgrmChangeRequst_S", vo);
+ }
+
+ /**
+ * 프로그램변경요청을 수정
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ public void updateProgrmChangeRequst(ProgrmManageDtlVO vo){
+ update("progrmManageDAO.updateProgrmChangeRequst_S", vo);
+ }
+
+ /**
+ * 프로그램변경요청을 삭제
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ public void deleteProgrmChangeRequst(ProgrmManageDtlVO vo){
+ delete("progrmManageDAO.deleteProgrmChangeRequst_S", vo);
+ }
+
+ /**
+ * 프로그램변경요청 요청번호MAX 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO
+ * @exception Exception
+ */
+ public ProgrmManageDtlVO selectProgrmChangeRequstNo(ProgrmManageDtlVO vo){
+ return (ProgrmManageDtlVO)selectOne("progrmManageDAO.selectProgrmChangeRequstNo_D", vo);
+ }
+
+ /**
+ * 프로그램변경요청 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectChangeRequstProcessList(ComDefaultVO vo) throws Exception{
+ return selectList("progrmManageDAO.selectChangeRequstProcessList_D", vo);
+ }
+
+ /**
+ * 프로그램변경요청 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectChangeRequstListProcessTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("progrmManageDAO.selectChangeRequstProcessListTotCnt_S", vo);
+ }
+
+ /**
+ * 프로그램변경요청 처리 수정
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ public void updateProgrmChangeRequstProcess(ProgrmManageDtlVO vo){
+ update("progrmManageDAO.updateProgrmChangeRequstProcess_S", vo);
+ }
+
+
+ /**
+ * 프로그램목록 전체삭제 초기화
+ * @return boolean
+ * @exception Exception
+ */
+ public boolean deleteAllProgrm(){
+ ProgrmManageVO vo = new ProgrmManageVO();
+ update("progrmManageDAO.deleteAllProgrm", vo);
+ return true;
+ }
+
+ /**
+ * 프로그램변경내역 전체삭제 초기화
+ * @return boolean
+ * @exception Exception
+ */
+ public boolean deleteAllProgrmDtls(){
+ ProgrmManageDtlVO vo = new ProgrmManageDtlVO();
+ update("progrmManageDAO.deleteAllProgrmDtls", vo);
+ return true;
+ }
+
+ /**
+ * 프로그램목록 데이타 존재여부 조회한다.
+ * @return int
+ * @exception Exception
+ */
+ public int selectProgrmListTotCnt() {
+ ProgrmManageVO vo = new ProgrmManageVO();
+ return (Integer)selectOne("progrmManageDAO.selectProgrmListTotCnt", vo);
+ }
+
+ /**
+ * 프로그램변경요청자 Email 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO
+ * @exception Exception
+ */
+ public ProgrmManageDtlVO selectRqesterEmail(ProgrmManageDtlVO vo){
+ return (ProgrmManageDtlVO)selectOne("progrmManageDAO.selectRqesterEmail", vo);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/service/impl/ProgrmManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/service/impl/EgovProgrmManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/service/impl/EgovProgrmManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/service/impl/EgovProgrmManageServiceImpl.java (revision 7)
@@ -0,0 +1,244 @@
+package egovframework.com.sym.prm.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.sym.prm.service.EgovProgrmManageService;
+import egovframework.com.sym.prm.service.ProgrmManageDtlVO;
+import egovframework.com.sym.prm.service.ProgrmManageVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 프로그램목록관리 및 프로그램변경관리에 관한 비즈니스 구현 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+@Service("progrmManageService")
+public class EgovProgrmManageServiceImpl extends EgovAbstractServiceImpl implements EgovProgrmManageService {
+
+ @Resource(name="progrmManageDAO")
+ private ProgrmManageDAO progrmManageDAO;
+
+
+ /**
+ * 프로그램 상세정보를 조회
+ * @param vo ComDefaultVO
+ * @return ProgrmManageVO
+ * @exception Exception
+ */
+ @Override
+ public ProgrmManageVO selectProgrm(ProgrmManageVO vo) throws Exception{
+ return progrmManageDAO.selectProgrm(vo);
+ }
+ /**
+ * 프로그램 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ @Override
+ public List<?> selectProgrmList(ComDefaultVO vo) throws Exception {
+ return progrmManageDAO.selectProgrmList(vo);
+ }
+ /**
+ * 프로그램목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return Integer
+ * @exception Exception
+ */
+ @Override
+ public int selectProgrmListTotCnt(ComDefaultVO vo) throws Exception {
+ return progrmManageDAO.selectProgrmListTotCnt(vo);
+ }
+ /**
+ * 프로그램 정보를 등록
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ @Override
+ public void insertProgrm(ProgrmManageVO vo) throws Exception {
+ progrmManageDAO.insertProgrm(vo);
+ }
+
+ /**
+ * 프로그램 정보를 수정
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ @Override
+ public void updateProgrm(ProgrmManageVO vo) throws Exception {
+ progrmManageDAO.updateProgrm(vo);
+ }
+
+ /**
+ * 프로그램 정보를 삭제
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ @Override
+ public void deleteProgrm(ProgrmManageVO vo) throws Exception {
+ progrmManageDAO.deleteProgrm(vo);
+ }
+
+ /**
+ * 프로그램 파일 존재여부를 조회
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ @Override
+ public int selectProgrmNMTotCnt(ComDefaultVO vo) throws Exception{
+ return progrmManageDAO.selectProgrmNMTotCnt(vo);
+ }
+
+ /**
+ * 프로그램변경요청 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO
+ * @exception Exception
+ */
+ @Override
+ public ProgrmManageDtlVO selectProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception{
+ return progrmManageDAO.selectProgrmChangeRequst(vo);
+ }
+
+ /**
+ * 프로그램변경요청 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ @Override
+ public List<?> selectProgrmChangeRequstList(ComDefaultVO vo) throws Exception {
+ return progrmManageDAO.selectProgrmChangeRequstList(vo);
+ }
+
+ /**
+ * 프로그램변경요청목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ @Override
+ public int selectProgrmChangeRequstListTotCnt(ComDefaultVO vo) throws Exception {
+ return progrmManageDAO.selectProgrmChangeRequstListTotCnt(vo);
+ }
+
+ /**
+ * 프로그램변경요청을 등록
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ @Override
+ public void insertProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception {
+ progrmManageDAO.insertProgrmChangeRequst(vo);
+ }
+
+ /**
+ * 프로그램변경요청을 수정
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ @Override
+ public void updateProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception {
+ progrmManageDAO.updateProgrmChangeRequst(vo);
+ }
+
+ /**
+ * 프로그램변경요청을 삭제
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ @Override
+ public void deleteProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception {
+ progrmManageDAO.deleteProgrmChangeRequst(vo);
+ }
+
+ /**
+ * 프로그램변경요청 요청번호MAX 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO
+ * @exception Exception
+ */
+ @Override
+ public ProgrmManageDtlVO selectProgrmChangeRequstNo(ProgrmManageDtlVO vo) throws Exception {
+ return progrmManageDAO.selectProgrmChangeRequstNo(vo);
+ }
+
+ /**
+ * 프로그램변경요청처리 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ @Override
+ public List<?> selectChangeRequstProcessList(ComDefaultVO vo) throws Exception {
+ return progrmManageDAO.selectChangeRequstProcessList(vo);
+ }
+
+ /**
+ * 프로그램변경요청처리목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ @Override
+ public int selectChangeRequstProcessListTotCnt(ComDefaultVO vo) throws Exception {
+ return progrmManageDAO.selectChangeRequstListProcessTotCnt(vo);
+ }
+
+ /**
+ * 프로그램변경요청처리를 수정
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ @Override
+ public void updateProgrmChangeRequstProcess(ProgrmManageDtlVO vo) throws Exception {
+ progrmManageDAO.updateProgrmChangeRequstProcess(vo);
+ }
+
+ /**
+ * 화면에 조회된 메뉴 목록 정보를 데이터베이스에서 삭제
+ * @param checkedProgrmFileNmForDel String
+ * @exception Exception
+ */
+ @Override
+ public void deleteProgrmManageList(String checkedProgrmFileNmForDel) throws Exception {
+ ProgrmManageVO vo = null;
+ String [] delProgrmFileNm = checkedProgrmFileNmForDel.split(",");
+ for (int i=0; i<delProgrmFileNm.length ; i++){
+ vo = new ProgrmManageVO();
+ vo.setProgrmFileNm(delProgrmFileNm[i]);
+ progrmManageDAO.deleteProgrm(vo);
+ }
+ }
+
+ /**
+ * 프로그램변경요청자 Email 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO
+ * @exception Exception
+ */
+ @Override
+ public ProgrmManageDtlVO selectRqesterEmail(ProgrmManageDtlVO vo) throws Exception{
+ return progrmManageDAO.selectRqesterEmail(vo);
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/service/impl/EgovProgrmManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtlVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtlVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtlVO.java (revision 7)
@@ -0,0 +1,266 @@
+package egovframework.com.sym.prm.service;
+
+/**
+ * 프로그램변경관리 처리를 위한 VO 클래스르를 정의한다
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+
+public class ProgrmManageDtlVO{
+
+ /** 프로그램파일명 */
+ private String progrmFileNm;
+ /** 요청번호 */
+ private int rqesterNo;
+ /** 요청제목 */
+ private String rqesterSj;
+ /** 요청자ID */
+ private String rqesterPersonId;
+ /** 요청일자 */
+ private String rqesterDe;
+ /** 변경요청내용 */
+ private String changerqesterCn;
+ /** 처리자ID */
+ private String opetrId;
+ /** 처리상태코드 */
+ private String processSttus;
+ /** 처리일자 */
+ private String processDe;
+ /** 요청처리내용 */
+ private String rqesterProcessCn;
+
+ /** 요청시작일자 */
+ private String rqesterDeBegin;
+ /** 요청종료일자 */
+ private String rqesterDeEnd;
+
+ /** 프로그램파일명 */
+ private String tmpProgrmNm;
+ /** 요청번호 */
+ private int tmpRqesterNo;
+ /** tmp_Email */
+ private String tmpEmail;
+
+ /**
+ * progrmFileNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getProgrmFileNm() {
+ return progrmFileNm;
+ }
+ /**
+ * progrmFileNm attribute 값을 설정한다.
+ * @param progrmFileNm String
+ */
+ public void setProgrmFileNm(String progrmFileNm) {
+ this.progrmFileNm = progrmFileNm;
+ }
+ /**
+ * rqesterNo attribute를 리턴한다.
+ * @return int
+ */
+ public int getRqesterNo() {
+ return rqesterNo;
+ }
+ /**
+ * rqesterNo attribute 값을 설정한다.
+ * @param rqesterNo int
+ */
+ public void setRqesterNo(int rqesterNo) {
+ this.rqesterNo = rqesterNo;
+ }
+ /**
+ * rqesterSj attribute를 리턴한다.
+ * @return String
+ */
+ public String getRqesterSj() {
+ return rqesterSj;
+ }
+ /**
+ * rqesterSj attribute 값을 설정한다.
+ * @param rqesterSj String
+ */
+ public void setRqesterSj(String rqesterSj) {
+ this.rqesterSj = rqesterSj;
+ }
+ /**
+ * rqesterPersonId attribute를 리턴한다.
+ * @return String
+ */
+ public String getRqesterPersonId() {
+ return rqesterPersonId;
+ }
+ /**
+ * rqesterPersonId attribute 값을 설정한다.
+ * @param rqesterPersonId String
+ */
+ public void setRqesterPersonId(String rqesterPersonId) {
+ this.rqesterPersonId = rqesterPersonId;
+ }
+ /**
+ * rqesterDe attribute를 리턴한다.
+ * @return String
+ */
+ public String getRqesterDe() {
+ return rqesterDe;
+ }
+ /**
+ * rqesterDe attribute 값을 설정한다.
+ * @param rqesterDe String
+ */
+ public void setRqesterDe(String rqesterDe) {
+ this.rqesterDe = rqesterDe;
+ }
+ /**
+ * changerqesterCn attribute를 리턴한다.
+ * @return String
+ */
+ public String getChangerqesterCn() {
+ return changerqesterCn;
+ }
+ /**
+ * changerqesterCn attribute 값을 설정한다.
+ * @param changerqesterCn String
+ */
+ public void setChangerqesterCn(String changerqesterCn) {
+ this.changerqesterCn = changerqesterCn;
+ }
+ /**
+ * opetrId attribute를 리턴한다.
+ * @return String
+ */
+ public String getOpetrId() {
+ return opetrId;
+ }
+ /**
+ * opetrId attribute 값을 설정한다.
+ * @param opetrId String
+ */
+ public void setOpetrId(String opetrId) {
+ this.opetrId = opetrId;
+ }
+ /**
+ * processSttus attribute를 리턴한다.
+ * @return String
+ */
+ public String getProcessSttus() {
+ return processSttus;
+ }
+ /**
+ * processSttus attribute 값을 설정한다.
+ * @param processSttus String
+ */
+ public void setProcessSttus(String processSttus) {
+ this.processSttus = processSttus;
+ }
+ /**
+ * processDe attribute를 리턴한다.
+ * @return String
+ */
+ public String getProcessDe() {
+ return processDe;
+ }
+ /**
+ * processDe attribute 값을 설정한다.
+ * @param processDe String
+ */
+ public void setProcessDe(String processDe) {
+ this.processDe = processDe;
+ }
+ /**
+ * rqesterProcessCn attribute를 리턴한다.
+ * @return String
+ */
+ public String getRqesterProcessCn() {
+ return rqesterProcessCn;
+ }
+ /**
+ * rqesterProcessCn attribute 값을 설정한다.
+ * @param rqesterProcessCn String
+ */
+ public void setRqesterProcessCn(String rqesterProcessCn) {
+ this.rqesterProcessCn = rqesterProcessCn;
+ }
+ /**
+ * rqesterDeBegin attribute를 리턴한다.
+ * @return String
+ */
+ public String getRqesterDeBegin() {
+ return rqesterDeBegin;
+ }
+ /**
+ * rqesterDeBegin attribute 값을 설정한다.
+ * @param rqesterDeBegin String
+ */
+ public void setRqesterDeBegin(String rqesterDeBegin) {
+ this.rqesterDeBegin = rqesterDeBegin;
+ }
+ /**
+ * rqesterDeEnd attribute를 리턴한다.
+ * @return String
+ */
+ public String getRqesterDeEnd() {
+ return rqesterDeEnd;
+ }
+ /**
+ * rqesterDeEnd attribute 값을 설정한다.
+ * @param rqesterDeEnd String
+ */
+ public void setRqesterDeEnd(String rqesterDeEnd) {
+ this.rqesterDeEnd = rqesterDeEnd;
+ }
+ /**
+ * tmp_progrmNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpProgrmNm() {
+ return tmpProgrmNm;
+ }
+ /**
+ * tmp_progrmNm attribute 값을 설정한다.
+ * @param tmp_progrmNm String
+ */
+ public void setTmpProgrmNm(String tmp_progrmNm) {
+ this.tmpProgrmNm = tmp_progrmNm;
+ }
+ /**
+ * tmp_rqesterNo attribute를 리턴한다.
+ * @return int
+ */
+ public int getTmpRqesterNo() {
+ return tmpRqesterNo;
+ }
+ /**
+ * tmp_rqesterNo attribute 값을 설정한다.
+ * @param tmp_rqesterNo int
+ */
+ public void setTmpRqesterNo(int tmp_rqesterNo) {
+ this.tmpRqesterNo = tmp_rqesterNo;
+ }
+
+ /**
+ * tmp_Email attribute를 리턴한다.
+ * @return String
+ */
+ public String getTmpEmail() {
+ return tmpEmail;
+ }
+ /**
+ * tmp_Email attribute 값을 설정한다.
+ * @param tmp_Email String
+ */
+ public void setTmpEmail(String tmp_Email) {
+ this.tmpEmail = tmp_Email;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtlVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManage.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManage.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManage.java (revision 7)
@@ -0,0 +1,72 @@
+package egovframework.com.sym.prm.service;
+
+/**
+ * 프로그램목록 관리 생성을 위한 모델 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이 용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이용 최초 생성
+ *
+ * </pre>
+ */
+
+public class ProgrmManage {
+ /**
+ * 프로그램설명
+ */
+ private String progrmDc;
+ /**
+ * 프로그램파일명
+ */
+ private String progrmFileNm;
+ /**
+ * 프로그램한글명
+ */
+ private String progrmKoreanNm;
+ /**
+ * 프로그램저장경로
+ */
+ private String progrmStrePath;
+ /**
+ * URL
+ */
+ private String url;
+
+ public String getProgrmDc() {
+ return progrmDc;
+ }
+ public void setProgrmDc(String progrmDc) {
+ this.progrmDc = progrmDc;
+ }
+ public String getProgrmFileNm() {
+ return progrmFileNm;
+ }
+ public void setProgrmFileNm(String progrmFileNm) {
+ this.progrmFileNm = progrmFileNm;
+ }
+ public String getProgrmKoreanNm() {
+ return progrmKoreanNm;
+ }
+ public void setProgrmKoreanNm(String progrmKoreanNm) {
+ this.progrmKoreanNm = progrmKoreanNm;
+ }
+ public String getProgrmStrePath() {
+ return progrmStrePath;
+ }
+ public void setProgrmStrePath(String progrmStrePath) {
+ this.progrmStrePath = progrmStrePath;
+ }
+ public String getUrl() {
+ return url;
+ }
+ public void setUrl(String urlTemp) {
+ url = urlTemp;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManage.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageVO.java (revision 7)
@@ -0,0 +1,104 @@
+package egovframework.com.sym.prm.service;
+
+/**
+ * 프로그램목록 처리를 위한 VO 클래스르를 정의한다
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+
+public class ProgrmManageVO{
+
+ /** 프로그램파일명 */
+ private String progrmFileNm;
+ /** 프로그램저장경로 */
+ private String progrmStrePath;
+ /** 프로그램한글명 */
+ private String progrmKoreanNm;
+ /** URL */
+ private String url;
+ /** 프로그램설명 */
+ private String progrmDc;
+
+ /**
+ * progrmFileNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getProgrmFileNm() {
+ return progrmFileNm;
+ }
+ /**
+ * progrmFileNm attribute 값을 설정한다.
+ * @param progrmFileNm String
+ */
+ public void setProgrmFileNm(String progrmFileNm) {
+ this.progrmFileNm = progrmFileNm;
+ }
+ /**
+ * progrmStrePath attribute를 리턴한다.
+ * @return String
+ */
+ public String getProgrmStrePath() {
+ return progrmStrePath;
+ }
+ /**
+ * progrmStrePath attribute 값을 설정한다.
+ * @param progrmStrePath String
+ */
+ public void setProgrmStrePath(String progrmStrePath) {
+ this.progrmStrePath = progrmStrePath;
+ }
+ /**
+ * progrmKoreanNm attribute를 리턴한다.
+ * @return String
+ */
+ public String getProgrmKoreanNm() {
+ return progrmKoreanNm;
+ }
+ /**
+ * progrmKoreanNm attribute 값을 설정한다.
+ * @param progrmKoreanNm String
+ */
+ public void setProgrmKoreanNm(String progrmKoreanNm) {
+ this.progrmKoreanNm = progrmKoreanNm;
+ }
+ /**
+ * url attribute를 리턴한다.
+ * @return String
+ */
+ public String getURL() {
+ return url;
+ }
+ /**
+ * URL attribute 값을 설정한다.
+ * @param URL String
+ */
+ public void setURL(String URL) {
+ this.url = URL;
+ }
+ /**
+ * progrmDc attribute를 리턴한다.
+ * @return String
+ */
+ public String getProgrmDc() {
+ return progrmDc;
+ }
+ /**
+ * progrmDc attribute 값을 설정한다.
+ * @param progrmDc String
+ */
+ public void setProgrmDc(String progrmDc) {
+ this.progrmDc = progrmDc;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/service/EgovProgrmManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/service/EgovProgrmManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/service/EgovProgrmManageService.java (revision 7)
@@ -0,0 +1,165 @@
+package egovframework.com.sym.prm.service;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 프로그램관리에 관한 서비스 인터페이스 클래스를 정의한다.
+ * @author 개발환경 개발팀 이용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이 용 최초 생성
+ *
+ * </pre>
+ */
+
+public interface EgovProgrmManageService {
+ /**
+ * 프로그램 상세정보를 조회
+ * @param vo ComDefaultVO
+ * @return ProgrmManageVO
+ * @exception Exception
+ */
+ ProgrmManageVO selectProgrm(ProgrmManageVO vo) throws Exception;
+ /**
+ * 프로그램 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectProgrmList(ComDefaultVO vo) throws Exception;
+ /**
+ * 프로그램목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectProgrmListTotCnt(ComDefaultVO vo) throws Exception;
+ /**
+ * 프로그램 정보를 등록
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ void insertProgrm(ProgrmManageVO vo) throws Exception;
+
+ /**
+ * 프로그램 정보를 수정
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ void updateProgrm(ProgrmManageVO vo) throws Exception;
+
+ /**
+ * 프로그램 정보를 삭제
+ * @param vo ProgrmManageVO
+ * @exception Exception
+ */
+ void deleteProgrm(ProgrmManageVO vo) throws Exception;
+
+ /**
+ * 프로그램 파일 존재여부를 조회
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectProgrmNMTotCnt(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO 프로그램변경요청 리스트
+ * @exception Exception
+ */
+ ProgrmManageDtlVO selectProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectProgrmChangeRequstList(ComDefaultVO vo) throws Exception;
+ /**
+ * 프로그램변경요청목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectProgrmChangeRequstListTotCnt(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청을 등록
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ void insertProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청을 수정
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ void updateProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청을 삭제
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ void deleteProgrmChangeRequst(ProgrmManageDtlVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청 요청번호MAX 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO
+ * @exception Exception
+ */
+ ProgrmManageDtlVO selectProgrmChangeRequstNo(ProgrmManageDtlVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청처리 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ List<?> selectChangeRequstProcessList(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청처리목록 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ int selectChangeRequstProcessListTotCnt(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 프로그램변경요청처리를 수정
+ * @param vo ProgrmManageDtlVO
+ * @exception Exception
+ */
+ void updateProgrmChangeRequstProcess(ProgrmManageDtlVO vo) throws Exception;
+
+ /**
+ * 화면에 조회된 메뉴 목록 정보를 데이터베이스에서 삭제
+ * @param checkedProgrmFileNmForDel String
+ * @exception Exception
+ */
+ void deleteProgrmManageList(String checkedProgrmFileNmForDel) throws Exception;
+
+ /**
+ * 프로그램변경요청자 Email 정보를 조회
+ * @param vo ProgrmManageDtlVO
+ * @return ProgrmManageDtlVO 프로그램변경요청 리스트
+ * @exception Exception
+ */
+ ProgrmManageDtlVO selectRqesterEmail(ProgrmManageDtlVO vo) throws Exception;
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/service/EgovProgrmManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtls.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtls.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtls.java (revision 7)
@@ -0,0 +1,122 @@
+package egovframework.com.sym.prm.service;
+
+/**
+ * 프로그램변경요청 관리 생성을 위한 모델 클래스를 정의한다.
+ * @author 공통서비스 개발팀 이 용
+ * @since 2009.06.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.03.20 이용 최초 생성
+ *
+ * </pre>
+ */
+
+public class ProgrmManageDtls {
+
+ /**
+ * 변경요청내용
+ */
+ private String changerqesterCn;
+ /**
+ * 처리자ID
+ */
+ private String opetrId;
+ /**
+ * 처리일자
+ */
+ private String processDe;
+ public String getChangerqesterCn() {
+ return changerqesterCn;
+ }
+ public void setChangerqesterCn(String changerqesterCn) {
+ this.changerqesterCn = changerqesterCn;
+ }
+ public String getOpetrId() {
+ return opetrId;
+ }
+ public void setOpetrId(String opetrId) {
+ this.opetrId = opetrId;
+ }
+ public String getProcessDe() {
+ return processDe;
+ }
+ public void setProcessDe(String processDe) {
+ this.processDe = processDe;
+ }
+ public String getProcessSttus() {
+ return processSttus;
+ }
+ public void setProcessSttus(String processSttus) {
+ this.processSttus = processSttus;
+ }
+ public String getProgrmFileNm() {
+ return progrmFileNm;
+ }
+ public void setProgrmFileNm(String progrmFileNm) {
+ this.progrmFileNm = progrmFileNm;
+ }
+ public String getRqesterDe() {
+ return rqesterDe;
+ }
+ public void setRqesterDe(String rqesterDe) {
+ this.rqesterDe = rqesterDe;
+ }
+ public int getRqesterNo() {
+ return rqesterNo;
+ }
+ public void setRqesterNo(int rqesterNo) {
+ this.rqesterNo = rqesterNo;
+ }
+ public String getRqesterpersonId() {
+ return rqesterpersonId;
+ }
+ public void setRqesterpersonId(String rqesterpersonId) {
+ this.rqesterpersonId = rqesterpersonId;
+ }
+ public String getRqesterProcessCn() {
+ return rqesterProcessCn;
+ }
+ public void setRqesterProcessCn(String rqesterProcessCn) {
+ this.rqesterProcessCn = rqesterProcessCn;
+ }
+ public String getRqesterSj() {
+ return rqesterSj;
+ }
+ public void setRqesterSj(String rqesterSj) {
+ this.rqesterSj = rqesterSj;
+ }
+ /**
+ * 처리상태코드
+ */
+ private String processSttus;
+ /**
+ * 프로그램파일명
+ */
+ private String progrmFileNm;
+ /**
+ * 요청일자
+ */
+ private String rqesterDe;
+ /**
+ * 요청번호
+ */
+ private int rqesterNo;
+ /**
+ * 요청자ID
+ */
+ private String rqesterpersonId;
+ /**
+ * 요청처리내용
+ */
+ private String rqesterProcessCn;
+ /**
+ * 요청제목
+ */
+ private String rqesterSj;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/prm/service/ProgrmManageDtls.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cca/web/EgovCcmCmmnCodeManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cca/web/EgovCcmCmmnCodeManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cca/web/EgovCcmCmmnCodeManageController.java (revision 7)
@@ -0,0 +1,262 @@
+package egovframework.com.sym.ccm.cca.web;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.ccm.cca.service.CmmnCode;
+import egovframework.com.sym.ccm.cca.service.CmmnCodeVO;
+import egovframework.com.sym.ccm.cca.service.EgovCcmCmmnCodeManageService;
+import egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO;
+import egovframework.com.sym.ccm.ccc.service.EgovCcmCmmnClCodeManageService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+*
+* 공통코드에 관한 요청을 받아 서비스 클래스로 요청을 전달하고 서비스클래스에서 처리한 결과를 웹 화면으로 전달을 위한 Controller를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+* 2011.8.26 정진오 IncludedInfo annotation 추가
+* 2017.08.16 이정은 표준프레임워크 v3.7 개선
+*
+* </pre>
+*/
+
+@Controller
+public class EgovCcmCmmnCodeManageController {
+
+ @Resource(name = "CmmnCodeManageService")
+ private EgovCcmCmmnCodeManageService cmmnCodeManageService;
+
+ @Resource(name = "CmmnClCodeManageService")
+ private EgovCcmCmmnClCodeManageService cmmnClCodeManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMessageSource */
+ @Resource(name = "egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+
+
+ /**
+ * 공통분류코드 목록을 조회한다.
+ *
+ * @param searchVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeList"
+ * @throws Exception
+ */
+ @IncludedInfo(name = "공통코드", listUrl = "/sym/ccm/cca/SelectCcmCmmnCodeList.do", order = 980, gid = 60)
+ @RequestMapping(value = "/sym/ccm/cca/SelectCcmCmmnCodeList.do")
+ public String selectCmmnCodeList(@ModelAttribute("searchVO") CmmnCodeVO searchVO, ModelMap model)
+ throws Exception {
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> CmmnCodeList = cmmnCodeManageService.selectCmmnCodeList(searchVO);
+ model.addAttribute("resultList", CmmnCodeList);
+
+ int totCnt = cmmnCodeManageService.selectCmmnCodeListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeList";
+ }
+
+ /**
+ * 공통코드 상세항목을 조회한다.
+ *
+ * @param loginVO
+ * @param cmmnCodeVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeDetail"
+ * @throws Exception
+ */
+ @RequestMapping(value = "/sym/ccm/cca/SelectCcmCmmnCodeDetail.do")
+ public String selectCmmnCodeDetail(@ModelAttribute("loginVO") LoginVO loginVO, CmmnCodeVO cmmnCodeVO, ModelMap model) throws Exception {
+
+ CmmnCodeVO vo = cmmnCodeManageService.selectCmmnCodeDetail(cmmnCodeVO);
+
+ model.addAttribute("result", vo);
+
+ return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeDetail";
+ }
+
+ /**
+ * 공통코드 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param cmmnCodeVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cca/RegistCcmCmmnCodeView.do")
+ public String insertCmmnCodeView(@ModelAttribute("cmmnCodeVO")CmmnCodeVO cmmnCodeVO, ModelMap model) throws Exception {
+
+ CmmnClCodeVO searchVO = new CmmnClCodeVO();
+ searchVO.setFirstIndex(0);
+ List<?> CmmnCodeList = cmmnClCodeManageService.selectCmmnClCodeList(searchVO);
+
+ model.addAttribute("clCodeList", CmmnCodeList);
+
+ return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeRegist";
+ }
+
+ /**
+ * 공통코드를 등록한다.
+ *
+ * @param CmmnCodeVO
+ * @param CmmnCodeVO
+ * @param status
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cca/RegistCcmCmmnCode.do")
+ public String insertCmmnCode(@ModelAttribute("searchVO") CmmnCodeVO cmmnCode, @ModelAttribute("cmmnCodeVO") CmmnCodeVO cmmnCodeVO,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ CmmnClCodeVO searchVO = new CmmnClCodeVO();
+
+ beanValidator.validate(cmmnCodeVO, bindingResult);
+
+ if (bindingResult.hasErrors()) {
+
+ List<?> CmmnCodeList = cmmnClCodeManageService.selectCmmnClCodeList(searchVO);
+ model.addAttribute("clCodeList", CmmnCodeList);
+
+ return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeRegist";
+ }
+
+ if(cmmnCode.getCodeId() != null){
+ CmmnCode vo = cmmnCodeManageService.selectCmmnCodeDetail(cmmnCode);
+ if(vo != null){
+ model.addAttribute("message", egovMessageSource.getMessage("comSymCcmCca.validate.codeCheck"));
+
+ searchVO.setFirstIndex(0);
+ List<?> CmmnCodeList = cmmnClCodeManageService.selectCmmnClCodeList(searchVO);
+ model.addAttribute("clCodeList", CmmnCodeList);
+
+ return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeRegist";
+ }
+ }
+
+ cmmnCodeVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnCodeManageService.insertCmmnCode(cmmnCodeVO);
+
+ return "forward:/sym/ccm/cca/SelectCcmCmmnCodeList.do";
+ }
+
+ /**
+ * 공통코드를 삭제한다.
+ *
+ * @param cmmnCodeVO
+ * @param status
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cca/RemoveCcmCmmnCode.do")
+ public String deleteCmmnCode(@ModelAttribute("cmmnCodeVO") CmmnCodeVO cmmnCodeVO,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ cmmnCodeVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnCodeManageService.deleteCmmnCode(cmmnCodeVO);
+
+ return "forward:/sym/ccm/cca/SelectCcmCmmnCodeList.do";
+ }
+
+ /**
+ * 공통코드 수정을 위한 수정페이지로 이동한다.
+ *
+ * @param cmmnCodeVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeUpdt"
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cca/UpdateCcmCmmnCodeView.do")
+ public String updateCmmnCodeView(@ModelAttribute("cmmnCodeVO") CmmnCodeVO cmmnCodeVO, ModelMap model)
+ throws Exception {
+
+ CmmnCode result = cmmnCodeManageService.selectCmmnCodeDetail(cmmnCodeVO);
+
+ model.addAttribute("cmmnCodeVO", result);
+
+ return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeUpdt";
+ }
+
+ /**
+ * 공통코드를 수정한다.
+ *
+ * @param cmmnCodeVO
+ * @param status
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cca/UpdateCcmCmmnCode.do")
+ public String updateCmmnCode(@ModelAttribute("searchVO") CmmnCodeVO cmmnCode, @ModelAttribute("cmmnCodeVO") CmmnCodeVO cmmnCodeVO,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ beanValidator.validate(cmmnCodeVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ CmmnCode result = cmmnCodeManageService.selectCmmnCodeDetail(cmmnCode);
+ model.addAttribute("cmmnCodeVO", result);
+
+ return "egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeUpdt";
+ }
+
+ cmmnCodeVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnCodeManageService.updateCmmnCode(cmmnCodeVO);
+
+ return "forward:/sym/ccm/cca/SelectCcmCmmnCodeList.do";
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cca/web/EgovCcmCmmnCodeManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/CmmnCodeManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/CmmnCodeManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/CmmnCodeManageDAO.java (revision 7)
@@ -0,0 +1,87 @@
+package egovframework.com.sym.ccm.cca.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.ccm.cca.service.CmmnCode;
+import egovframework.com.sym.ccm.cca.service.CmmnCodeVO;
+
+/**
+*
+* 공통코드에 대한 데이터 접근 클래스를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+@Repository("CmmnCodeManageDAO")
+public class CmmnCodeManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 공통코드 총 갯수를 조회한다.
+ * @param searchVO
+ * @return int(공통코드 총 갯수)
+ */
+ public int selectCmmnCodeListTotCnt(CmmnCodeVO searchVO) throws Exception{
+ return (Integer)selectOne("CmmnCodeManage.selectCmmnCodeListTotCnt", searchVO);
+ }
+
+ /**
+ * 공통코드 목록을 조회한다.
+ * @param searchVO
+ * @return List(공통코드 목록)
+ * @throws Exception
+ */
+ public List<?> selectCmmnCodeList(CmmnCodeVO searchVO) throws Exception{
+ return list("CmmnCodeManage.selectCmmnCodeList", searchVO);
+ }
+
+ /**
+ * 공통코드 상세항목을 조회한다.
+ * @param cmmnCode
+ * @return CmmnCode(공통코드)
+ */
+ public CmmnCodeVO selectCmmnCodeDetail(CmmnCodeVO cmmnCodeVO) throws Exception{
+ return selectOne("CmmnCodeManage.selectCmmnCodeDetail", cmmnCodeVO);
+}
+
+ /**
+ * 공통코드를 수정한다.
+ * @param cmmnCode
+ * @throws Exception
+ */
+ public void updateCmmnCode(CmmnCode cmmnCode) throws Exception{
+ update("CmmnCodeManage.updateCmmnCode", cmmnCode);
+ }
+
+ /**
+ * 공통코드를 등록한다.
+ * @param cmmnCode
+ * @throws Exception
+ */
+ public void insertCmmnCode(CmmnCode cmmnCode) throws Exception{
+ insert("CmmnCodeManage.insertCmmnCode", cmmnCode);
+ }
+
+ /**
+ * 공통코드를 삭제한다.
+ * @param cmmnCode
+ * @throws Exception
+ */
+ public void deleteCmmnCode(CmmnCode cmmnCode) {
+ delete("CmmnCodeManage.deleteCmmnCode", cmmnCode);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/CmmnCodeManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/EgovCcmCmmnCodeManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/EgovCcmCmmnCodeManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/EgovCcmCmmnCodeManageServiceImpl.java (revision 7)
@@ -0,0 +1,88 @@
+package egovframework.com.sym.ccm.cca.service.impl;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.sym.ccm.cca.service.CmmnCode;
+import egovframework.com.sym.ccm.cca.service.CmmnCodeVO;
+import egovframework.com.sym.ccm.cca.service.EgovCcmCmmnCodeManageService;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+/**
+*
+* 공통코드에 대한 서비스 구현클래스를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+@Service("CmmnCodeManageService")
+public class EgovCcmCmmnCodeManageServiceImpl extends EgovAbstractServiceImpl implements EgovCcmCmmnCodeManageService{
+
+ @Resource(name="CmmnCodeManageDAO")
+ private CmmnCodeManageDAO cmmnCodeManageDAO;
+
+ /**
+ * 공통코드 총 갯수를 조회한다.
+ */
+ @Override
+ public int selectCmmnCodeListTotCnt(CmmnCodeVO searchVO) throws Exception {
+ return cmmnCodeManageDAO.selectCmmnCodeListTotCnt(searchVO);
+ }
+
+ /**
+ * 공통코드 목록을 조회한다.
+ */
+ @Override
+ public List<?> selectCmmnCodeList(CmmnCodeVO searchVO) throws Exception {
+ return cmmnCodeManageDAO.selectCmmnCodeList(searchVO);
+ }
+
+ /**
+ * 공통코드 상세항목을 조회한다.
+ */
+ @Override
+ public CmmnCodeVO selectCmmnCodeDetail(CmmnCodeVO cmmnCodeVO) throws Exception{
+ CmmnCodeVO ret = cmmnCodeManageDAO.selectCmmnCodeDetail(cmmnCodeVO);
+ return ret;
+ }
+
+ /**
+ * 공통코드를 수정한다.
+ */
+ @Override
+ public void updateCmmnCode(CmmnCodeVO cmmnCodeVO) throws Exception {
+ cmmnCodeManageDAO.updateCmmnCode(cmmnCodeVO);
+ }
+
+ /**
+ * 공통코드를 등록한다.
+ */
+ @Override
+ public void insertCmmnCode(CmmnCode cmmnCode) throws Exception {
+ cmmnCodeManageDAO.insertCmmnCode(cmmnCode);
+
+ }
+
+ /**
+ * 공통코드를 삭제한다.
+ */
+ @Override
+ public void deleteCmmnCode(CmmnCode cmmnCode) throws Exception {
+ cmmnCodeManageDAO.deleteCmmnCode(cmmnCode);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/impl/EgovCcmCmmnCodeManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCode.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCode.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCode.java (revision 7)
@@ -0,0 +1,195 @@
+package egovframework.com.sym.ccm.cca.service;
+
+import java.io.Serializable;
+
+/**
+* 공통코드 모델 클래스
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+public class CmmnCode implements Serializable {
+
+ private static final long serialVersionUID = 638950577710720796L;
+
+ /*
+ * 코드ID
+ */
+ private String codeId = "";
+
+ /*
+ * 코드ID명
+ */
+ private String codeIdNm = "";
+
+ /*
+ * 코드ID설명
+ */
+ private String codeIdDc = "";
+
+ /*
+ * 분류코드
+ */
+ private String clCode = "";
+
+ /*
+ * 분류코드명
+ */
+ private String clCodeNm = "";
+
+ /*
+ * 사용여부
+ */
+ private String useAt = "";
+
+ /*
+ * 최초등록자ID
+ */
+ private String frstRegisterId = "";
+
+ /*
+ * 최종수정자ID
+ */
+ private String lastUpdusrId = "";
+
+ /**
+ * codeId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCodeId() {
+ return codeId;
+ }
+
+ /**
+ * codeId attribute 값을 설정한다.
+ * @param codeId String
+ */
+ public void setCodeId(String codeId) {
+ this.codeId = codeId;
+ }
+
+ /**
+ * codeIdNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCodeIdNm() {
+ return codeIdNm;
+ }
+
+ /**
+ * codeIdNm attribute 값을 설정한다.
+ * @param codeIdNm String
+ */
+ public void setCodeIdNm(String codeIdNm) {
+ this.codeIdNm = codeIdNm;
+ }
+
+ /**
+ * codeIdDc attribute 를 리턴한다.
+ * @return String
+ */
+ public String getCodeIdDc() {
+ return codeIdDc;
+ }
+
+ /**
+ * codeIdDc attribute 값을 설정한다.
+ * @param codeIdDc String
+ */
+ public void setCodeIdDc(String codeIdDc) {
+ this.codeIdDc = codeIdDc;
+ }
+
+ /**
+ * clCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getClCode() {
+ return clCode;
+ }
+
+ /**
+ * clCode attribute 값을 설정한다.
+ * @param clCode String
+ */
+ public void setClCode(String clCode) {
+ this.clCode = clCode;
+ }
+
+ /**
+ * clCodeNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getClCodeNm() {
+ return clCodeNm;
+ }
+
+ /**
+ * clCodeNm attribute 값을 설정한다.
+ * @param clCodeNm String
+ */
+ public void setClCodeNm(String clCodeNm) {
+ this.clCodeNm = clCodeNm;
+ }
+
+ /**
+ * useAt attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ * @param useAt String
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * frstRegisterId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ * @param frstRegisterId String
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * lastUpdusrId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ * @param lastUpdusrId String
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCode.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/EgovCcmCmmnCodeManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/EgovCcmCmmnCodeManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/EgovCcmCmmnCodeManageService.java (revision 7)
@@ -0,0 +1,72 @@
+package egovframework.com.sym.ccm.cca.service;
+
+import java.util.List;
+
+/**
+*
+* 공통코드에 관한 서비스 인터페이스 클래스를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+public interface EgovCcmCmmnCodeManageService {
+
+ /**
+ * 공통분류코드 총 갯수를 조회한다.
+ *
+ * @param searchVO
+ * @return int(공통분류코드 총 갯수)
+ * @throws Exception
+ */
+ int selectCmmnCodeListTotCnt(CmmnCodeVO searchVO) throws Exception;
+
+ /**
+ * 공통코드 목록을 조회한다.
+ *
+ * @param searchVO
+ * @return List(공통분류코드 목록)
+ * @throws Exception
+ */
+ List<?> selectCmmnCodeList(CmmnCodeVO searchVO) throws Exception;
+
+ /**
+ * 공통코드 상세항목을 조회한다.
+ * @param cmmnCode
+ * @return CmmnCode(공통코드)
+ * @throws Exception
+ */
+ CmmnCodeVO selectCmmnCodeDetail(CmmnCodeVO cmmnCodeVO) throws Exception;
+
+ /**
+ * 공통코드를 수정한다.
+ * @param cmmnCodeVO
+ * @throws Exception
+ */
+ void updateCmmnCode(CmmnCodeVO cmmnCodeVO) throws Exception;
+
+ /**
+ * 공통코드를 등록한다.
+ * @param cmmnCode
+ * @throws Exception
+ */
+ void insertCmmnCode(CmmnCode cmmnCode) throws Exception;
+
+ /**
+ * 공통코드를 삭제한다.
+ * @param cmmnCode
+ * @throws Exception
+ */
+ void deleteCmmnCode(CmmnCode cmmnCode) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/EgovCcmCmmnCodeManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCodeVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCodeVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCodeVO.java (revision 7)
@@ -0,0 +1,198 @@
+package egovframework.com.sym.ccm.cca.service;
+
+import java.io.Serializable;
+
+/**
+*
+* 공통코드 VO 클래스
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+public class CmmnCodeVO extends CmmnCode implements Serializable {
+
+ private static final long serialVersionUID = -4184057693049713450L;
+
+ /** 검색조건 */
+ private String searchCondition = "";
+
+ /** 검색Keyword */
+ private String searchKeyword = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /**
+ * searchCondition attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchCondition() {
+ return searchCondition;
+ }
+
+ /**
+ * searchCondition attribute 값을 설정한다.
+ * @param searchCondition String
+ */
+ public void setSearchCondition(String searchCondition) {
+ this.searchCondition = searchCondition;
+ }
+
+ /**
+ * searchKeyword attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchKeyword() {
+ return searchKeyword;
+ }
+
+ /**
+ * searchKeyword attribute 값을 설정한다.
+ * @param searchKeyword String
+ */
+ public void setSearchKeyword(String searchKeyword) {
+ this.searchKeyword = searchKeyword;
+ }
+
+ /**
+ * searchUseYn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ * @param searchUseYn String
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ * @param pageIndex int
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ * @param pageUnit int
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ * @param pageSize int
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ * @param firstIndex int
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ * @param lastIndex int
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute 를 리턴한다.
+ * @return int
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ * @param recordCountPerPage int
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cca/service/CmmnCodeVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/web/EgovCcmCmmnClCodeManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/ccc/web/EgovCcmCmmnClCodeManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/ccc/web/EgovCcmCmmnClCodeManageController.java (revision 7)
@@ -0,0 +1,241 @@
+package egovframework.com.sym.ccm.ccc.web;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.sym.ccm.ccc.service.CmmnClCode;
+import egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO;
+import egovframework.com.sym.ccm.ccc.service.EgovCcmCmmnClCodeManageService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+ *
+ * 공통분류코드에 관한 요청을 받아 서비스 클래스로 요청을 전달하고 서비스클래스에서 처리한 결과를 웹 화면으로 전달을 위한 Controller를 정의한다
+ *
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * --------- ------- ---------------------------
+ * 2009.04.01 이중호 최초 생성
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * 2017.06.08 이정은 표준프레임워크 v3.7 개선
+ *
+ * </pre>
+ */
+
+@Controller
+public class EgovCcmCmmnClCodeManageController {
+ @Resource(name = "CmmnClCodeManageService")
+ private EgovCcmCmmnClCodeManageService cmmnClCodeManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMessageSource */
+ @Resource(name = "egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 공통분류코드 목록을 조회한다.
+ *
+ * @param loginVO
+ * @param searchVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/ccc/SelectCcmCmmnClCodeList"
+ * @throws Exception
+ */
+ @IncludedInfo(name = "공통분류코드", listUrl = "/sym/ccm/ccc/SelectCcmCmmnClCodeList.do", order = 960, gid = 60)
+ @RequestMapping(value = "/sym/ccm/ccc/SelectCcmCmmnClCodeList.do")
+ public String selectCmmnClCodeList(@ModelAttribute("searchVO") CmmnClCodeVO searchVO, ModelMap model) throws Exception {
+
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> CmmnCodeList = cmmnClCodeManageService.selectCmmnClCodeList(searchVO);
+ model.addAttribute("resultList", CmmnCodeList);
+
+ int totCnt = cmmnClCodeManageService.selectCmmnClCodeListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeList";
+ }
+
+ /**
+ * 공통분류코드 상세항목을 조회한다.
+ *
+ * @param loginVO
+ * @param cmmnClCode
+ * @param model
+ * @return "egovframework/com/sym/ccm/ccc/SelectCcmCmmnClCodeDetail.do"
+ * @throws Exception
+ */
+ @RequestMapping(value = "/sym/ccm/ccc/SelectCcmCmmnClCodeDetail.do")
+ public String selectCmmnClCodeDetail(@ModelAttribute("loginVO") LoginVO loginVO, CmmnClCodeVO cmmnClCodeVO,
+ ModelMap model) throws Exception {
+
+ CmmnClCode vo = cmmnClCodeManageService.selectCmmnClCodeDetail(cmmnClCodeVO);
+
+ model.addAttribute("result", vo);
+
+ return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeDetail";
+ }
+
+ /**
+ * 공통분류코드 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param cmmnClCodeVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist";
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/ccc/RegistCcmCmmnClCodeView.do")
+ public String insertCmmnClCodeView(@ModelAttribute("searchVO")CmmnClCodeVO cmmnClCodeVO, ModelMap model) throws Exception {
+ model.addAttribute("cmmnClCodeVO", new CmmnClCodeVO());
+
+ return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist";
+ }
+
+ /**
+ * 공통분류코드를 등록한다.
+ *
+ * @param CmmnClCodeVO
+ * @param CmmnClCodeVO
+ * @param status
+ * @param model
+ * @return /sym/ccm/ccc/SelectCcmCmmnClCodeList.do";
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/ccc/RegistCcmCmmnClCode.do")
+ public String insertCmmnClCode(@ModelAttribute("cmmnClCodeVO") CmmnClCodeVO cmmnClCodeVO,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ // 로그인VO에서 사용자 정보 가져오기
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ beanValidator.validate(cmmnClCodeVO, bindingResult);
+
+ if (bindingResult.hasErrors()) {
+ return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist";
+ }
+
+ if(cmmnClCodeVO.getClCode() != null){
+ CmmnClCode vo = cmmnClCodeManageService.selectCmmnClCodeDetail(cmmnClCodeVO);
+ if(vo != null){
+ model.addAttribute("message", egovMessageSource.getMessage("comSymCcmCcc.validate.codeCheck"));
+ return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist";
+ }
+ }
+
+ cmmnClCodeVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnClCodeManageService.insertCmmnClCode(cmmnClCodeVO);
+
+ return "forward:/sym/ccm/ccc/SelectCcmCmmnClCodeList.do";
+ }
+
+ /**
+ * 공통분류코드를 삭제한다.
+ *
+ * @param cmmnClCodeVO
+ * @param status
+ * @param model
+ * @return /sym/ccm/ccc/SelectCcmCmmnClCodeList.do";
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/ccc/RemoveCcmCmmnClCode.do")
+ public String deleteCmmnClCode(@ModelAttribute("searchVO") CmmnClCodeVO cmmnClCode, @ModelAttribute("cmmnClCodeVO") CmmnClCodeVO cmmnClCodeVO,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ cmmnClCodeVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnClCodeManageService.deleteCmmnClCode(cmmnClCodeVO);
+
+ return "forward:/sym/ccm/ccc/SelectCcmCmmnClCodeList.do";
+ }
+
+ /**
+ * 공통분류코드 수정을 위한 수정페이지로 이동한다.
+ *
+ * @param cmmnClCodeVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeUpdt";
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/ccc/UpdateCcmCmmnClCodeView.do")
+ public String updateCmmnClCodeView(@ModelAttribute("searchVO") CmmnClCodeVO cmmnClCodeVO, ModelMap model)
+ throws Exception {
+
+ CmmnClCode result = cmmnClCodeManageService.selectCmmnClCodeDetail(cmmnClCodeVO);
+
+ model.addAttribute("cmmnClCodeVO", result);
+
+ return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeUpdt";
+ }
+
+ /**
+ * 공통분류코드를 수정한다.
+ *
+ * @param cmmnClCodeVO
+ * @param status
+ * @param model
+ * @return /sym/ccm/ccc/SelectCcmCmmnClCodeList.do"
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/ccc/UpdateCcmCmmnClCode.do")
+ public String updateCmmnClCode(@ModelAttribute("searchVO") CmmnClCodeVO cmmnClCode, @ModelAttribute("cmmnClCodeVO") CmmnClCodeVO cmmnClCodeVO,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ beanValidator.validate(cmmnClCodeVO, bindingResult);
+ if (bindingResult.hasErrors()) {
+
+ CmmnClCode result = cmmnClCodeManageService.selectCmmnClCodeDetail(cmmnClCode);
+ model.addAttribute("cmmnClCodeVO", result);
+
+ return "egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeUpdt";
+ }
+
+ cmmnClCodeVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnClCodeManageService.updateCmmnClCode(cmmnClCodeVO);
+
+ return "forward:/sym/ccm/ccc/SelectCcmCmmnClCodeList.do";
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/web/EgovCcmCmmnClCodeManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/CmmnClCodeManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/CmmnClCodeManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/CmmnClCodeManageDAO.java (revision 7)
@@ -0,0 +1,89 @@
+package egovframework.com.sym.ccm.ccc.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.ccm.ccc.service.CmmnClCode;
+import egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO;
+
+/**
+*
+* 공통분류코드에 대한 데이터 접근 클래스를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+@Repository("CmmnClCodeManageDAO")
+public class CmmnClCodeManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 공통분류코드 총 갯수를 조회한다.
+ * @param searchVO
+ * @return int(공통분류코드 총 갯수)
+ */
+ public int selectCmmnClCodeListTotCnt(CmmnClCodeVO searchVO) throws Exception {
+ return (Integer)selectOne("CmmnClCodeManage.selectCmmnClCodeListTotCnt", searchVO);
+ }
+
+ /**
+ * 공통분류코드 목록을 조회한다.
+ * @param searchVO
+ * @return List(공통분류코드 목록)
+ * @throws Exception
+ */
+ public List<?> selectCmmnClCodeList(CmmnClCodeVO searchVO) throws Exception {
+ return list("CmmnClCodeManage.selectCmmnClCodeList", searchVO);
+ }
+
+ /**
+ * 공통분류코드 상세항목을 조회한다.
+ * @param cmmnClCode
+ * @return CmmnClCode(공통분류코드)
+ */
+ public CmmnClCode selectCmmnClCodeDetail(CmmnClCode cmmnClCode) throws Exception {
+ return (CmmnClCode)selectOne("CmmnClCodeManage.selectCmmnClCodeDetail", cmmnClCode);
+ }
+
+ /**
+ * 공통분류코드를 등록한다.
+ * @param cmmnClCodeVO
+ * @throws Exception
+ */
+ public void insertCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception{
+ System.out.println("TEST5 : 등록 DAO");
+ insert("CmmnClCodeManage.insertCmmnClCode", cmmnClCodeVO);
+ }
+
+ /**
+ * 공통분류코드를 삭제한다.
+ * @param cmmnClCodeVO
+ * @throws Exception
+ */
+ public void deleteCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception {
+ delete("CmmnClCodeManage.deleteCmmnClCode", cmmnClCodeVO);
+
+ }
+
+ /**
+ * 공통분류코드를 수정한다.
+ * @param cmmnClCodeVO
+ * @throws Exception
+ */
+ public void updateCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception{
+ update("CmmnClCodeManage.updateCmmnClCode", cmmnClCodeVO);
+
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/CmmnClCodeManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/EgovCcmCmmnClCodeManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/EgovCcmCmmnClCodeManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/EgovCcmCmmnClCodeManageServiceImpl.java (revision 7)
@@ -0,0 +1,89 @@
+package egovframework.com.sym.ccm.ccc.service.impl;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.sym.ccm.ccc.service.CmmnClCode;
+import egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO;
+import egovframework.com.sym.ccm.ccc.service.EgovCcmCmmnClCodeManageService;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+/**
+*
+* 공통분류코드에 대한 서비스 구현클래스를 정의한다
+*
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+@Service("CmmnClCodeManageService")
+public class EgovCcmCmmnClCodeManageServiceImpl extends EgovAbstractServiceImpl implements EgovCcmCmmnClCodeManageService {
+
+ @Resource(name = "CmmnClCodeManageDAO")
+ private CmmnClCodeManageDAO cmmnClCodeManageDAO;
+
+ /**
+ * 공통분류코드 총 갯수를 조회한다.
+ */
+ @Override
+ public int selectCmmnClCodeListTotCnt(CmmnClCodeVO searchVO) throws Exception {
+ return cmmnClCodeManageDAO.selectCmmnClCodeListTotCnt(searchVO);
+ }
+
+ /**
+ * 공통분류코드 목록을 조회한다.
+ */
+ @Override
+ public List<?> selectCmmnClCodeList(CmmnClCodeVO searchVO) throws Exception {
+ return cmmnClCodeManageDAO.selectCmmnClCodeList(searchVO);
+ }
+
+ /**
+ * 공통분류코드 상세항목을 조회한다.
+ */
+ @Override
+ public CmmnClCode selectCmmnClCodeDetail(CmmnClCodeVO cmmnClCodeVO) throws Exception {
+ CmmnClCode ret = cmmnClCodeManageDAO.selectCmmnClCodeDetail(cmmnClCodeVO);
+ return ret;
+ }
+
+ /**
+ * 공통분류코드를 등록한다.
+ */
+ @Override
+ public void insertCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception {
+ System.out.println("TEST4 : 등록 Serviceimpl");
+ cmmnClCodeManageDAO.insertCmmnClCode(cmmnClCodeVO);
+ }
+
+ /**
+ * 공통분류코드를 삭제한다.
+ */
+ @Override
+ public void deleteCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception {
+ cmmnClCodeManageDAO.deleteCmmnClCode(cmmnClCodeVO);
+ }
+
+ /**
+ * 공통분류코드를 수정한다.
+ */
+ @Override
+ public void updateCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception {
+ cmmnClCodeManageDAO.updateCmmnClCode(cmmnClCodeVO);
+
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/impl/EgovCcmCmmnClCodeManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/EgovCcmCmmnClCodeManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/EgovCcmCmmnClCodeManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/EgovCcmCmmnClCodeManageService.java (revision 7)
@@ -0,0 +1,71 @@
+package egovframework.com.sym.ccm.ccc.service;
+
+import java.util.List;
+
+/**
+ *
+ * 공통분류코드에 관한 서비스 인터페이스 클래스를 정의한다
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+
+
+public interface EgovCcmCmmnClCodeManageService {
+
+ /**
+ * 공통분류코드 총 갯수를 조회한다.
+ *
+ * @param searchVO
+ * @return int(공통분류코드 총 갯수)
+ */
+ int selectCmmnClCodeListTotCnt(CmmnClCodeVO searchVO) throws Exception;
+
+ /**
+ * 공통분류코드 목록을 조회한다.
+ * @param searchVO
+ * @return List(공통분류코드 목록)
+ * @throws Exception
+ */
+ List<?> selectCmmnClCodeList(CmmnClCodeVO searchVO) throws Exception;
+
+ /**
+ * 공통분류코드 상세항목을 조회한다.
+ * @param cmmnClCode
+ * @return CmmnClCode(공통분류코드)
+ * @throws Exception
+ */
+ CmmnClCode selectCmmnClCodeDetail(CmmnClCodeVO cmmnClCodeVO) throws Exception;
+
+ /**
+ * 공통분류코드를 등록한다.
+ * @param cmmnClCodeVO
+ * @throws Exception
+ */
+ void insertCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception;
+
+ /**
+ * 공통분류코드를 삭제한다.
+ * @param cmmnClCodeVO
+ * @throws Exception
+ */
+ void deleteCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception;
+
+ /**
+ * 공통분류코드를 수정한다.
+ * @param cmmnClCodeVO
+ * @throws Exception
+ */
+ void updateCmmnClCode(CmmnClCodeVO cmmnClCodeVO) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/EgovCcmCmmnClCodeManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCodeVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCodeVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCodeVO.java (revision 7)
@@ -0,0 +1,198 @@
+package egovframework.com.sym.ccm.ccc.service;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 공통분류코드 VO 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+public class CmmnClCodeVO extends CmmnClCode implements Serializable {
+
+ private static final long serialVersionUID = 442842373959722378L;
+
+ /** 검색조건 */
+ private String searchCondition = "";
+
+ /** 검색Keyword */
+ private String searchKeyword = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /**
+ * searchCondition attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchCondition() {
+ return searchCondition;
+ }
+
+ /**
+ * searchCondition attribute 값을 설정한다.
+ * @param searchCondition String
+ */
+ public void setSearchCondition(String searchCondition) {
+ this.searchCondition = searchCondition;
+ }
+
+ /**
+ * searchKeyword attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchKeyword() {
+ return searchKeyword;
+ }
+
+ /**
+ * searchKeyword attribute 값을 설정한다.
+ * @param searchKeyword String
+ */
+ public void setSearchKeyword(String searchKeyword) {
+ this.searchKeyword = searchKeyword;
+ }
+
+ /**
+ * searchUseYn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ * @param searchUseYn String
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ * @param pageIndex int
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ * @param pageUnit int
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ * @param pageSize int
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ * @param firstIndex int
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ * @param lastIndex int
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute 를 리턴한다.
+ * @return int
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ * @param recordCountPerPage int
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCodeVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCode.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCode.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCode.java (revision 7)
@@ -0,0 +1,152 @@
+package egovframework.com.sym.ccm.ccc.service;
+
+import java.io.Serializable;
+
+/**
+ * 공통분류코드 모델 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+public class CmmnClCode implements Serializable {
+
+ private static final long serialVersionUID = 4861619118930452502L;
+
+ /*
+ * 분류코드
+ */
+ private String clCode = "";
+
+ /*
+ * 분류코드명
+ */
+ private String clCodeNm = "";
+
+ /*
+ * 분류코드설명
+ */
+ private String clCodeDc = "";
+
+ /*
+ * 사용여부
+ */
+ private String useAt = "";
+
+ /*
+ * 최초등록자ID
+ */
+ private String frstRegisterId = "";
+
+ /*
+ * 최종수정자ID
+ */
+ private String lastUpdusrId = "";
+
+ /**
+ * clCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getClCode() {
+ return clCode;
+ }
+
+ /**
+ * clCode attribute 값을 설정한다.
+ * @param clCode String
+ */
+ public void setClCode(String clCode) {
+ this.clCode = clCode;
+ }
+
+ /**
+ * clCodeNm attribute 를 리턴한다.
+ * @return String
+ */
+ public String getClCodeNm() {
+ return clCodeNm;
+ }
+
+ /**
+ * clCodeNm attribute 값을 설정한다.
+ * @param clCodeNm String
+ */
+ public void setClCodeNm(String clCodeNm) {
+ this.clCodeNm = clCodeNm;
+ }
+
+ /**
+ * clCodeDc attribute 를 리턴한다.
+ * @return String
+ */
+ public String getClCodeDc() {
+ return clCodeDc;
+ }
+
+ /**
+ * clCodeDc attribute 값을 설정한다.
+ * @param clCodeDc String
+ */
+ public void setClCodeDc(String clCodeDc) {
+ this.clCodeDc = clCodeDc;
+ }
+
+ /**
+ * useAt attribute 를 리턴한다.
+ * @return String
+ */
+ public String getUseAt() {
+ return useAt;
+ }
+
+ /**
+ * useAt attribute 값을 설정한다.
+ * @param useAt String
+ */
+ public void setUseAt(String useAt) {
+ this.useAt = useAt;
+ }
+
+ /**
+ * frstRegisterId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ /**
+ * frstRegisterId attribute 값을 설정한다.
+ * @param frstRegisterId String
+ */
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ /**
+ * lastUpdusrId attribute 를 리턴한다.
+ * @return String
+ */
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ /**
+ * lastUpdusrId attribute 값을 설정한다.
+ * @param lastUpdusrId String
+ */
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/ccc/service/CmmnClCode.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cde/web/EgovCcmCmmnDetailCodeManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cde/web/EgovCcmCmmnDetailCodeManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cde/web/EgovCcmCmmnDetailCodeManageController.java (revision 7)
@@ -0,0 +1,286 @@
+package egovframework.com.sym.ccm.cde.web;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.apache.poi.util.SystemOutLogger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.CmmnDetailCode;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.sym.ccm.cca.service.CmmnCode;
+import egovframework.com.sym.ccm.cca.service.CmmnCodeVO;
+import egovframework.com.sym.ccm.cca.service.EgovCcmCmmnCodeManageService;
+import egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO;
+import egovframework.com.sym.ccm.ccc.service.EgovCcmCmmnClCodeManageService;
+import egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO;
+import egovframework.com.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+import egovframework.rte.psl.dataaccess.util.EgovMap;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+/**
+*
+* 공통상세코드에 관한 요청을 받아 서비스 클래스로 요청을 전달하고 서비스클래스에서 처리한 결과를 웹 화면으로 전달을 위한 Controller를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+* 2011.08.26 정진오 IncludedInfo annotation 추가
+* 2017.08.08 이정은 표준프레임워크 v3.7 개선
+*
+* </pre>
+*/
+
+@Controller
+public class EgovCcmCmmnDetailCodeManageController {
+
+ @Resource(name = "CmmnDetailCodeManageService")
+ private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService;
+
+ @Resource(name = "CmmnClCodeManageService")
+ private EgovCcmCmmnClCodeManageService cmmnClCodeManageService;
+
+ @Resource(name = "CmmnCodeManageService")
+ private EgovCcmCmmnCodeManageService cmmnCodeManageService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMessageSource */
+ @Resource(name = "egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 공통상세코드 목록을 조회한다.
+ * @param loginVO
+ * @param searchVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeList"
+ * @throws Exception
+ */
+ @IncludedInfo(name="공통상세코드", listUrl="/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do", order = 970 ,gid = 60)
+ @RequestMapping(value="/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do")
+ public String selectCmmnDetailCodeList (@ModelAttribute("loginVO") LoginVO loginVO, @ModelAttribute("searchVO") CmmnDetailCodeVO searchVO
+ , ModelMap model
+ ) throws Exception {
+
+ /** EgovPropertyService.sample */
+ searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
+ searchVO.setPageSize(propertiesService.getInt("pageSize"));
+
+ /** pageing */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+ paginationInfo.setPageSize(searchVO.getPageSize());
+
+ searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ List<?> CmmnCodeList = cmmnDetailCodeManageService.selectCmmnDetailCodeList(searchVO);
+ model.addAttribute("resultList", CmmnCodeList);
+
+ int totCnt = cmmnDetailCodeManageService.selectCmmnDetailCodeListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeList";
+ }
+
+ /**
+ * 공통상세코드 상세항목을 조회한다.
+ * @param loginVO
+ * @param cmmnDetailCodeVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeDetail"
+ * @throws Exception
+ */
+ @RequestMapping(value="/sym/ccm/cde/SelectCcmCmmnDetailCodeDetail.do")
+ public String selectCmmnDetailCodeDetail (@ModelAttribute("loginVO") LoginVO loginVO
+ , CmmnDetailCodeVO cmmnDetailCodeVO, ModelMap model
+ ) throws Exception {
+ CmmnDetailCode vo = cmmnDetailCodeManageService.selectCmmnDetailCodeDetail(cmmnDetailCodeVO);
+ model.addAttribute("result", vo);
+
+ return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeDetail";
+ }
+
+ /**
+ * 공통상세코드를 삭제한다.
+ * @param loginVO
+ * @param cmmnDetailCodeVO
+ * @param model
+ * @return "forward:/sym/ccm/cde/EgovCcmCmmnDetailCodeList.do"
+ * @throws Exception
+ */
+ @RequestMapping(value="/sym/ccm/cde/RemoveCcmCmmnDetailCode.do")
+ public String deleteCmmnDetailCode (@ModelAttribute("loginVO") LoginVO loginVO
+ , CmmnDetailCodeVO cmmnDetailCodeVO
+ , ModelMap model
+ ) throws Exception {
+ cmmnDetailCodeManageService.deleteCmmnDetailCode(cmmnDetailCodeVO);
+
+ return "forward:/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do";
+ }
+
+ /**
+ * 공통상세코드 등록을 위한 등록페이지로 이동한다.
+ *
+ * @param cmmnDetailCodeVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cde/RegistCcmCmmnDetailCodeView.do")
+ public String insertCmmnDetailCodeView(@ModelAttribute("loginVO") LoginVO loginVO, @ModelAttribute("cmmnCodeVO") CmmnCodeVO cmmnCodeVO,
+ @ModelAttribute("cmmnDetailCodeVO") CmmnDetailCodeVO cmmnDetailCodeVO
+ ,ModelMap model) throws Exception {
+
+ CmmnClCodeVO searchClCodeVO = new CmmnClCodeVO();
+ searchClCodeVO.setFirstIndex(0);
+ List<?> CmmnClCodeList = cmmnClCodeManageService.selectCmmnClCodeList(searchClCodeVO);
+ model.addAttribute("clCodeList", CmmnClCodeList);
+
+
+ CmmnCodeVO clCode = new CmmnCodeVO();
+ clCode.setClCode(cmmnCodeVO.getClCode());
+
+ if (cmmnCodeVO.getClCode().equals("")) {
+
+ }else{
+
+ CmmnCodeVO searchCodeVO = new CmmnCodeVO();
+ searchCodeVO.setRecordCountPerPage(999999);
+ searchCodeVO.setFirstIndex(0);
+ searchCodeVO.setSearchCondition("clCode");
+ searchCodeVO.setSearchKeyword(cmmnCodeVO.getClCode());
+
+ List<?> CmmnCodeList = cmmnCodeManageService.selectCmmnCodeList(searchCodeVO);
+ model.addAttribute("codeList", CmmnCodeList);
+ }
+
+
+ return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist";
+ }
+
+ /**
+ * 공통상세코드를 등록한다.
+ *
+ * @param CmmnDetailCodeVO
+ * @param CmmnDetailCodeVO
+ * @param status
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cde/RegistCcmCmmnDetailCode.do")
+ public String insertCmmnDetailCode(@ModelAttribute("cmmnDetailCodeVO") CmmnDetailCodeVO cmmnDetailCodeVO,
+ BindingResult bindingResult, ModelMap model) throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ CmmnClCodeVO searchClCodeVO = new CmmnClCodeVO();
+
+ beanValidator.validate(cmmnDetailCodeVO, bindingResult);
+
+ if (bindingResult.hasErrors()) {
+
+ List<?> CmmnClCodeList = cmmnClCodeManageService.selectCmmnClCodeList(searchClCodeVO);
+ model.addAttribute("clCodeList", CmmnClCodeList);
+
+ return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist";
+ }
+
+ if(cmmnDetailCodeVO.getCodeId() != null){
+
+ CmmnDetailCode vo = cmmnDetailCodeManageService.selectCmmnDetailCodeDetail(cmmnDetailCodeVO);
+ if(vo != null){
+ model.addAttribute("message", egovMessageSource.getMessage("comSymCcmCde.validate.codeCheck"));
+
+ List<?> CmmnClCodeList = cmmnClCodeManageService.selectCmmnClCodeList(searchClCodeVO);
+ model.addAttribute("clCodeList", CmmnClCodeList);
+
+ return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist";
+ }
+ }
+
+ cmmnDetailCodeVO.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnDetailCodeManageService.insertCmmnDetailCode(cmmnDetailCodeVO);
+
+ return "forward:/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do";
+ }
+
+ /**
+ * 공통상세코드 수정을 위한 수정페이지로 이동한다.
+ *
+ * @param cmmnDetailCodeVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt"
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cde/UpdateCcmCmmnDetailCodeView.do")
+ public String updateCmmnDetailCodeView(@ModelAttribute("loginVO") LoginVO loginVO,
+ @ModelAttribute("cmmnDetailCodeVO") CmmnDetailCodeVO cmmnDetailCodeVO, ModelMap model)
+ throws Exception {
+
+ CmmnDetailCode result = cmmnDetailCodeManageService.selectCmmnDetailCodeDetail(cmmnDetailCodeVO);
+ model.addAttribute("cmmnDetailCodeVO", result);
+
+ return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt";
+ }
+
+ /**
+ * 공통상세코드를 수정한다.
+ *
+ * @param cmmnDetailCodeVO
+ * @param model
+ * @return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt", "/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do"
+ * @throws Exception
+ */
+ @RequestMapping("/sym/ccm/cde/UpdateCcmCmmnDetailCode.do")
+ public String updateCmmnDetailCode(@ModelAttribute("cmmnDetailCodeVO") CmmnDetailCodeVO cmmnDetailCodeVO, ModelMap model, BindingResult bindingResult )
+ throws Exception {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+
+ beanValidator.validate(cmmnDetailCodeVO, bindingResult);
+
+ if (bindingResult.hasErrors()){
+ CmmnDetailCode result = cmmnDetailCodeManageService.selectCmmnDetailCodeDetail(cmmnDetailCodeVO);
+ model.addAttribute("cmmnDetailCodeVO", result);
+
+ return "egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt";
+ }
+
+ cmmnDetailCodeVO.setLastUpdusrId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
+ cmmnDetailCodeManageService.updateCmmnDetailCode(cmmnDetailCodeVO);
+
+ return "forward:/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do";
+ }
+
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cde/web/EgovCcmCmmnDetailCodeManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/CmmnDetailCodeManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/CmmnDetailCodeManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/CmmnDetailCodeManageDAO.java (revision 7)
@@ -0,0 +1,90 @@
+package egovframework.com.sym.ccm.cde.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.CmmnDetailCode;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO;
+
+/**
+*
+* 공통상세코드에 대한 데이터 접근 클래스를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+@Repository("CmmnDetailCodeManageDAO")
+public class CmmnDetailCodeManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 공통상세코드 총 갯수를 조회한다.
+ * @param searchVO
+ * @return int(공통상세코드 총 갯수)
+ */
+ public int selectCmmnDetailCodeListTotCnt(CmmnDetailCodeVO searchVO) throws Exception {
+ return (Integer)selectOne("CmmnDetailCodeManage.selectCmmnDetailCodeListTotCnt", searchVO);
+ }
+
+ /**
+ * 공통상세코드 목록을 조회한다.
+ * @param searchVO
+ * @return List(공통상세코드 목록)
+ * @throws Exception
+ */
+ public List<?> selectCmmnDetailCodeList(CmmnDetailCodeVO searchVO) throws Exception {
+ return list("CmmnDetailCodeManage.selectCmmnDetailCodeList", searchVO);
+ }
+
+ /**
+ * 공통상세코드 상세항목을 조회한다.
+ * @param cmmnDetailCodeVO
+ * @return CmmnDetailCodeVO(공통상세코드)
+ */
+ public CmmnDetailCode selectCmmnDetailCodeDetail(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception{
+ return (CmmnDetailCode) selectOne("CmmnDetailCodeManage.selectCmmnDetailCodeDetail", cmmnDetailCodeVO);
+ }
+
+ /**
+ * 공통상세코드를 삭제한다.
+ * @param cmmnDetailCodeVO
+ * @throws Exception
+ */
+ public void deleteCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception{
+ delete("CmmnDetailCodeManage.deleteCmmnDetailCode", cmmnDetailCodeVO);
+
+ }
+
+ /**
+ * 공통상세코드를 등록한다.
+ * @param cmmnDetailCodeVO
+ * @throws Exception
+ */
+ public void insertCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception{
+ insert("CmmnDetailCodeManage.insertCmmnDetailCode", cmmnDetailCodeVO);
+
+ }
+
+ /**
+ * 공통상세코드를 수정한다.
+ * @param cmmnDetailCodeVO
+ * @throws Exception
+ */
+ public void updateCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception{
+ insert("CmmnDetailCodeManage.updateCmmnDetailCode", cmmnDetailCodeVO);
+
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/CmmnDetailCodeManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/EgovCcmCmmnDetailCodeManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/EgovCcmCmmnDetailCodeManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/EgovCcmCmmnDetailCodeManageServiceImpl.java (revision 7)
@@ -0,0 +1,91 @@
+package egovframework.com.sym.ccm.cde.service.impl;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cmm.service.CmmnDetailCode;
+import egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO;
+import egovframework.com.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+/**
+*
+* 공통상세코드에 대한 서비스 구현클래스를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+@Service("CmmnDetailCodeManageService")
+public class EgovCcmCmmnDetailCodeManageServiceImpl extends EgovAbstractServiceImpl implements EgovCcmCmmnDetailCodeManageService{
+
+ @Resource(name="CmmnDetailCodeManageDAO")
+ private CmmnDetailCodeManageDAO cmmnDetailCodeManageDAO;
+
+ /**
+ * 공통상세코드 총 갯수를 조회한다.
+ */
+ @Override
+ public int selectCmmnDetailCodeListTotCnt(CmmnDetailCodeVO searchVO) throws Exception {
+ return cmmnDetailCodeManageDAO.selectCmmnDetailCodeListTotCnt(searchVO);
+ }
+
+ /**
+ * 공통상세코드 목록을 조회한다.
+ */
+ @Override
+ public List<?> selectCmmnDetailCodeList(CmmnDetailCodeVO searchVO) throws Exception {
+ return cmmnDetailCodeManageDAO.selectCmmnDetailCodeList(searchVO);
+ }
+
+ /**
+ * 공통상세코드 상세항목을 조회한다.
+ * @throws Exception
+ */
+ @Override
+ public CmmnDetailCode selectCmmnDetailCodeDetail(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception {
+ CmmnDetailCode ret = cmmnDetailCodeManageDAO.selectCmmnDetailCodeDetail(cmmnDetailCodeVO);
+ return ret;
+ }
+
+ /**
+ * 공통상세코드를 삭제한다.
+ * @throws Exception
+ */
+ @Override
+ public void deleteCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception {
+ cmmnDetailCodeManageDAO.deleteCmmnDetailCode(cmmnDetailCodeVO);
+
+ }
+
+ /**
+ * 공통상세코드를 등록한다.
+ */
+ @Override
+ public void insertCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception {
+ cmmnDetailCodeManageDAO.insertCmmnDetailCode(cmmnDetailCodeVO);
+
+ }
+
+ /**
+ * 공통상세코드를 수정한다.
+ */
+ @Override
+ public void updateCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception {
+ cmmnDetailCodeManageDAO.updateCmmnDetailCode(cmmnDetailCodeVO);
+
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/impl/EgovCcmCmmnDetailCodeManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/EgovCcmCmmnDetailCodeManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/EgovCcmCmmnDetailCodeManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/EgovCcmCmmnDetailCodeManageService.java (revision 7)
@@ -0,0 +1,73 @@
+package egovframework.com.sym.ccm.cde.service;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.CmmnDetailCode;
+import egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO;
+
+/**
+*
+* 공통상세코드에 관한 서비스 인터페이스 클래스를 정의한다
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+public interface EgovCcmCmmnDetailCodeManageService {
+ /**
+ * 공통상세코드 총 갯수를 조회한다.
+ * @param searchVO
+ * @return int(공통상세코드 총 갯수)
+ */
+ int selectCmmnDetailCodeListTotCnt(CmmnDetailCodeVO searchVO) throws Exception;
+
+ /**
+ * 공통상세코드 목록을 조회한다.
+ * @param searchVO
+ * @return List(공통상세코드 목록)
+ * @throws Exception
+ */
+ List<?> selectCmmnDetailCodeList(CmmnDetailCodeVO searchVO) throws Exception;
+
+ /**
+ * 공통상세코드 상세항목을 조회한다.
+ * @param cmmnDetailCodeVO
+ * @return CmmnDetailCode(공통상세코드)
+ * @throws Exception
+ */
+ CmmnDetailCode selectCmmnDetailCodeDetail(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception;
+
+ /**
+ * 공통상세코드를 삭제한다.
+ * @param cmmnDetailCodeVO
+ * @throws Exception
+ */
+ void deleteCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception;
+
+ /**
+ * 공통상세코드를 등록한다.
+ * @param cmmnDetailCodeVO
+ * @throws Exception
+ */
+ void insertCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception;
+
+ /**
+ * 공통상세코드를 수정한다.
+ * @param cmmnDetailCodeVO
+ * @throws Exception
+ */
+ void updateCmmnDetailCode(CmmnDetailCodeVO cmmnDetailCodeVO) throws Exception;
+
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/EgovCcmCmmnDetailCodeManageService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/CmmnDetailCodeVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/CmmnDetailCodeVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/CmmnDetailCodeVO.java (revision 7)
@@ -0,0 +1,199 @@
+package egovframework.com.sym.ccm.cde.service;
+
+import java.io.Serializable;
+
+import egovframework.com.cmm.service.CmmnDetailCode;
+
+/**
+*
+* 공통상세코드 VO 클래스
+* @author 공통서비스 개발팀 이중호
+* @since 2009.04.01
+* @version 1.0
+* @see
+*
+* <pre>
+* << 개정이력(Modification Information) >>
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2009.04.01 이중호 최초 생성
+*
+* </pre>
+*/
+
+public class CmmnDetailCodeVO extends CmmnDetailCode implements Serializable{
+
+ private static final long serialVersionUID = 9137280036724974467L;
+
+ /** 검색조건 */
+ private String searchCondition = "";
+
+ /** 검색Keyword */
+ private String searchKeyword = "";
+
+ /** 검색사용여부 */
+ private String searchUseYn = "";
+
+ /** 현재페이지 */
+ private int pageIndex = 1;
+
+ /** 페이지갯수 */
+ private int pageUnit = 10;
+
+ /** 페이지사이즈 */
+ private int pageSize = 10;
+
+ /** firstIndex */
+ private int firstIndex = 1;
+
+ /** lastIndex */
+ private int lastIndex = 1;
+
+ /** recordCountPerPage */
+ private int recordCountPerPage = 10;
+
+ /**
+ * searchCondition attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchCondition() {
+ return searchCondition;
+ }
+
+ /**
+ * searchCondition attribute 값을 설정한다.
+ * @param searchCondition String
+ */
+ public void setSearchCondition(String searchCondition) {
+ this.searchCondition = searchCondition;
+ }
+
+ /**
+ * searchKeyword attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchKeyword() {
+ return searchKeyword;
+ }
+
+ /**
+ * searchKeyword attribute 값을 설정한다.
+ * @param searchKeyword String
+ */
+ public void setSearchKeyword(String searchKeyword) {
+ this.searchKeyword = searchKeyword;
+ }
+
+ /**
+ * searchUseYn attribute 를 리턴한다.
+ * @return String
+ */
+ public String getSearchUseYn() {
+ return searchUseYn;
+ }
+
+ /**
+ * searchUseYn attribute 값을 설정한다.
+ * @param searchUseYn String
+ */
+ public void setSearchUseYn(String searchUseYn) {
+ this.searchUseYn = searchUseYn;
+ }
+
+ /**
+ * pageIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageIndex() {
+ return pageIndex;
+ }
+
+ /**
+ * pageIndex attribute 값을 설정한다.
+ * @param pageIndex int
+ */
+ public void setPageIndex(int pageIndex) {
+ this.pageIndex = pageIndex;
+ }
+
+ /**
+ * pageUnit attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageUnit() {
+ return pageUnit;
+ }
+
+ /**
+ * pageUnit attribute 값을 설정한다.
+ * @param pageUnit int
+ */
+ public void setPageUnit(int pageUnit) {
+ this.pageUnit = pageUnit;
+ }
+
+ /**
+ * pageSize attribute 를 리턴한다.
+ * @return int
+ */
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * pageSize attribute 값을 설정한다.
+ * @param pageSize int
+ */
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ /**
+ * firstIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getFirstIndex() {
+ return firstIndex;
+ }
+
+ /**
+ * firstIndex attribute 값을 설정한다.
+ * @param firstIndex int
+ */
+ public void setFirstIndex(int firstIndex) {
+ this.firstIndex = firstIndex;
+ }
+
+ /**
+ * lastIndex attribute 를 리턴한다.
+ * @return int
+ */
+ public int getLastIndex() {
+ return lastIndex;
+ }
+
+ /**
+ * lastIndex attribute 값을 설정한다.
+ * @param lastIndex int
+ */
+ public void setLastIndex(int lastIndex) {
+ this.lastIndex = lastIndex;
+ }
+
+ /**
+ * recordCountPerPage attribute 를 리턴한다.
+ * @return int
+ */
+ public int getRecordCountPerPage() {
+ return recordCountPerPage;
+ }
+
+ /**
+ * recordCountPerPage attribute 값을 설정한다.
+ * @param recordCountPerPage int
+ */
+ public void setRecordCountPerPage(int recordCountPerPage) {
+ this.recordCountPerPage = recordCountPerPage;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/sym/ccm/cde/service/CmmnDetailCodeVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uap/web/EgovLoginPolicyController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uap/web/EgovLoginPolicyController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uap/web/EgovLoginPolicyController.java (revision 7)
@@ -0,0 +1,210 @@
+/**
+ * 개요
+ * - 로그인정책에 대한 controller 클래스를 정의한다.
+ *
+ * 상세내용
+ * - 로그인정책에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
+ * - 로그인정책의 조회기능은 목록조회, 상세조회로 구분된다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 03-8-2009 오후 2:08:53
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.8.3 이문준 최초 생성
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * </pre>
+ */
+
+package egovframework.com.uat.uap.web;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.uat.uap.service.EgovLoginPolicyService;
+import egovframework.com.uat.uap.service.LoginPolicy;
+import egovframework.com.uat.uap.service.LoginPolicyVO;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+
+
+@Controller
+public class EgovLoginPolicyController {
+
+
+
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name="egovLoginPolicyService")
+ EgovLoginPolicyService egovLoginPolicyService;
+
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+
+ /**
+ * 로그인정책 목록 조회화면으로 이동한다.
+ * @return String - 리턴 Url
+ */
+ @RequestMapping("/uat/uap/selectLoginPolicyListView.do")
+ public String selectLoginPolicyListView() throws Exception {
+ return "egovframework/com/uat/uap/EgovLoginPolicyList";
+ }
+
+ /**
+ * 로그인정책 목록을 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return String - 리턴 Url
+ */
+ @IncludedInfo(name="로그인정책관리", order = 30 ,gid = 10)
+ @RequestMapping("/uat/uap/selectLoginPolicyList.do")
+ public String selectLoginPolicyList(@ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO,
+ ModelMap model) throws Exception {
+
+ /** paging */
+ PaginationInfo paginationInfo = new PaginationInfo();
+ paginationInfo.setCurrentPageNo(loginPolicyVO.getPageIndex());
+ paginationInfo.setRecordCountPerPage(loginPolicyVO.getPageUnit());
+ paginationInfo.setPageSize(loginPolicyVO.getPageSize());
+
+ loginPolicyVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+ loginPolicyVO.setLastIndex(paginationInfo.getLastRecordIndex());
+ loginPolicyVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+
+ loginPolicyVO.setLoginPolicyList(egovLoginPolicyService.selectLoginPolicyList(loginPolicyVO));
+ model.addAttribute("loginPolicyList", loginPolicyVO.getLoginPolicyList());
+
+ int totCnt = egovLoginPolicyService.selectLoginPolicyListTotCnt(loginPolicyVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/uat/uap/EgovLoginPolicyList";
+ }
+
+ /**
+ * 로그인정책 목록의 상세정보를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return String - 리턴 Url
+ */
+ @RequestMapping("/uat/uap/getLoginPolicy.do")
+ public String selectLoginPolicy(@RequestParam("emplyrId") String emplyrId,
+ @ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO,
+ ModelMap model) throws Exception {
+
+ loginPolicyVO.setEmplyrId(emplyrId);
+
+ model.addAttribute("loginPolicy", egovLoginPolicyService.selectLoginPolicy(loginPolicyVO));
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ LoginPolicyVO vo = (LoginPolicyVO)model.get("loginPolicy");
+
+ if(vo.getRegYn().equals("N"))
+ return "egovframework/com/uat/uap/EgovLoginPolicyRegist";
+ else
+ return "egovframework/com/uat/uap/EgovLoginPolicyUpdt";
+ }
+
+ /**
+ * 로그인정책 정보 등록화면으로 이동한다.
+ * @param loginPolicy - 로그인정책 model
+ * @return String - 리턴 Url
+ */
+ @RequestMapping("/uat/uap/addLoginPolicyView.do")
+ public String insertLoginPolicyView(@RequestParam("emplyrId") String emplyrId,
+ @ModelAttribute("loginPolicyVO") LoginPolicyVO loginPolicyVO,
+ ModelMap model) throws Exception {
+
+ loginPolicyVO.setEmplyrId(emplyrId);
+
+ model.addAttribute("loginPolicy", egovLoginPolicyService.selectLoginPolicy(loginPolicyVO));
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.select"));
+
+ return "egovframework/com/uat/uap/EgovLoginPolicyRegist";
+ }
+
+ /**
+ * 로그인정책 정보를 신규로 등록한다.
+ * @param loginPolicy - 로그인정책 model
+ * @return String - 리턴 Url
+ */
+ @RequestMapping("/uat/uap/addLoginPolicy.do")
+ public String insertLoginPolicy(@ModelAttribute("loginPolicy") LoginPolicy loginPolicy,
+ BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ beanValidator.validate(loginPolicy, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ model.addAttribute("loginPolicyVO", loginPolicy);
+ return "egovframework/com/uat/uap/EgovLoginPolicyRegist";
+ } else {
+
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ loginPolicy.setUserId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+
+ egovLoginPolicyService.insertLoginPolicy(loginPolicy);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.update"));
+
+ return "forward:/uat/uap/getLoginPolicy.do";
+ }
+ }
+
+ /**
+ * 기 등록된 로그인정책 정보를 수정한다.
+ * @param loginPolicy - 로그인정책 model
+ * @return String - 리턴 Url
+ */
+ @RequestMapping("/uat/uap/updtLoginPolicy.do")
+ public String updateLoginPolicy(@ModelAttribute("loginPolicy") LoginPolicy loginPolicy,
+ BindingResult bindingResult,
+ ModelMap model) throws Exception {
+
+ beanValidator.validate(loginPolicy, bindingResult); //validation 수행
+
+ if (bindingResult.hasErrors()) {
+ model.addAttribute("loginPolicyVO", loginPolicy);
+ return "egovframework/com/uat/uap/EgovLoginPolicyUpdt";
+ } else {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ loginPolicy.setUserId(user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+
+ egovLoginPolicyService.updateLoginPolicy(loginPolicy);
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.update"));
+
+ return "forward:/uat/uap/selectLoginPolicyList.do";
+ }
+ }
+
+ /**
+ * 기 등록된 로그인정책 정보를 삭제한다.
+ * @param loginPolicy - 로그인정책 model
+ * @return String - 리턴 Url
+ */
+ @RequestMapping("/uat/uap/removeLoginPolicy.do")
+ public String deleteLoginPolicy(@ModelAttribute("loginPolicy") LoginPolicy loginPolicy,
+ ModelMap model) throws Exception {
+
+ egovLoginPolicyService.deleteLoginPolicy(loginPolicy);
+
+ model.addAttribute("message", egovMessageSource.getMessage("success.common.delete"));
+ return "forward:/uat/uap/selectLoginPolicyList.do";
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uap/web/EgovLoginPolicyController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java (revision 7)
@@ -0,0 +1,85 @@
+/**
+ * 개요
+ * - 로그인정책에 대한 DAO 클래스를 정의한다.
+ *
+ * 상세내용
+ * - 로그인정책에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
+ * - 로그인정책의 조회기능은 목록조회, 상세조회로 구분된다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 03-8-2009 오후 2:08:54
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.08.03 이문준 최초 생성
+ * 2021.02.18 신용호 selectLoginPolicyResult() 삭제
+ * </pre>
+ */
+
+package egovframework.com.uat.uap.service.impl;
+
+import java.util.List;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.uat.uap.service.LoginPolicy;
+import egovframework.com.uat.uap.service.LoginPolicyVO;
+
+import org.springframework.stereotype.Repository;
+
+@Repository("loginPolicyDAO")
+public class LoginPolicyDAO extends EgovComAbstractDAO {
+
+ /**
+ * 로그인정책 목록을 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return List - 로그인정책 목록
+ */
+ public List<LoginPolicyVO> selectLoginPolicyList(LoginPolicyVO loginPolicyVO) throws Exception {
+ return selectList("loginPolicyDAO.selectLoginPolicyList", loginPolicyVO);
+ }
+
+ /**
+ * 로그인정책 목록 수를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return int
+ */
+ public int selectLoginPolicyListTotCnt(LoginPolicyVO loginPolicyVO) throws Exception {
+ return (Integer)selectOne("loginPolicyDAO.selectLoginPolicyListTotCnt", loginPolicyVO);
+ }
+
+ /**
+ * 로그인정책 목록의 상세정보를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return LoginPolicyVO - 로그인정책 VO
+ */
+ public LoginPolicyVO selectLoginPolicy(LoginPolicyVO loginPolicyVO) throws Exception {
+ return (LoginPolicyVO)selectOne("loginPolicyDAO.selectLoginPolicy", loginPolicyVO);
+ }
+
+ /**
+ * 로그인정책 정보를 신규로 등록한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void insertLoginPolicy(LoginPolicy loginPolicy) throws Exception {
+ insert("loginPolicyDAO.insertLoginPolicy", loginPolicy);
+ }
+
+ /**
+ * 기 등록된 로그인정책 정보를 수정한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void updateLoginPolicy(LoginPolicy loginPolicy) throws Exception {
+ update("loginPolicyDAO.updateLoginPolicy", loginPolicy);
+ }
+
+ /**
+ * 기 등록된 로그인정책 정보를 삭제한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void deleteLoginPolicy(LoginPolicy loginPolicy) throws Exception {
+ delete("loginPolicyDAO.deleteLoginPolicy", loginPolicy);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uap/service/impl/LoginPolicyDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uap/service/impl/EgovLoginPolicyServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uap/service/impl/EgovLoginPolicyServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uap/service/impl/EgovLoginPolicyServiceImpl.java (revision 7)
@@ -0,0 +1,102 @@
+/**
+ * 개요
+ * - 로그인정책에 대한 ServiceImpl 클래스를 정의한다.
+ *
+ * 상세내용
+ * - 로그인정책에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
+ * - 로그인정책의 조회기능은 목록조회, 상세조회로 구분된다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 03-8-2009 오후 2:08:54
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.08.03 이문준 최초 생성
+ * 2021.02.18 신용호 selectLoginPolicyResult() 삭제
+ * </pre>
+ */
+
+package egovframework.com.uat.uap.service.impl;
+
+import java.util.List;
+
+import egovframework.com.uat.uap.service.EgovLoginPolicyService;
+import egovframework.com.uat.uap.service.LoginPolicy;
+import egovframework.com.uat.uap.service.LoginPolicyVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+@Service("egovLoginPolicyService")
+public class EgovLoginPolicyServiceImpl extends EgovAbstractServiceImpl implements EgovLoginPolicyService {
+
+ @Resource(name="loginPolicyDAO")
+ LoginPolicyDAO loginPolicyDAO;
+
+ /**
+ * 로그인정책 목록을 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return List - 로그인정책 목록
+ */
+ public List<LoginPolicyVO> selectLoginPolicyList(LoginPolicyVO loginPolicyVO) throws Exception {
+ return loginPolicyDAO.selectLoginPolicyList(loginPolicyVO);
+ }
+
+ /**
+ * 로그인정책 목록 수를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return int
+ */
+ public int selectLoginPolicyListTotCnt(LoginPolicyVO loginPolicyVO) throws Exception {
+ return loginPolicyDAO.selectLoginPolicyListTotCnt(loginPolicyVO);
+ }
+
+ /**
+ * 로그인정책 목록의 상세정보를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return LoginPolicyVO - 로그인정책 VO
+ */
+ public LoginPolicyVO selectLoginPolicy(LoginPolicyVO loginPolicyVO) throws Exception {
+ return loginPolicyDAO.selectLoginPolicy(loginPolicyVO);
+ }
+
+ /**
+ * 로그인정책 정보를 신규로 등록한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void insertLoginPolicy(LoginPolicy loginPolicy) throws Exception {
+ loginPolicyDAO.insertLoginPolicy(loginPolicy);
+ }
+
+ /**
+ * 기 등록된 로그인정책 정보를 수정한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void updateLoginPolicy(LoginPolicy loginPolicy) throws Exception {
+ loginPolicyDAO.updateLoginPolicy(loginPolicy);
+ }
+
+ /**
+ * 기 등록된 로그인정책 정보를 삭제한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void deleteLoginPolicy(LoginPolicy loginPolicy) throws Exception {
+ loginPolicyDAO.deleteLoginPolicy(loginPolicy);
+ }
+
+ /**
+ * 로그인정책에 대한 현재 반영되어 있는 결과를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return LoginPolicyVO - 로그인정책 VO
+ */
+ /*
+ * public LoginPolicyVO selectLoginPolicyResult(LoginPolicyVO loginPolicyVO)
+ * throws Exception { return
+ * loginPolicyDAO.selectLoginPolicyResult(loginPolicyVO); }
+ */
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uap/service/impl/EgovLoginPolicyServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicy.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicy.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicy.java (revision 7)
@@ -0,0 +1,174 @@
+/**
+ * 개요
+ * - 로그인정책에 대한 model 클래스를 정의한다.
+ *
+ * 상세내용
+ * - 로그인정책정보의 사용자ID, IP정보, 중복허용여부, 제한여부 항목을 관리한다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 03-8-2009 오후 2:08:53
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.8.3 이문준 최초 생성
+ * </pre>
+ */
+
+package egovframework.com.uat.uap.service;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+public class LoginPolicy extends ComDefaultVO {
+
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 사용자 ID
+ */
+ private String emplyrId;
+ /**
+ * 사용자 명
+ */
+ private String emplyrNm;
+ /**
+ * 사용자 구분
+ */
+ private String emplyrSe;
+ /**
+ * IP정보
+ */
+ private String ipInfo;
+ /**
+ * 중복허용여부
+ */
+ private String dplctPermAt;
+ /**
+ * 제한여부
+ */
+ private String lmttAt;
+ /**
+ * 등록자 ID
+ */
+ private String userId;
+ /**
+ * 등록일시
+ */
+ private String regDate;
+ /**
+ * 등록여부
+ */
+ private String regYn;
+
+ /**
+ * @return the emplyrId
+ */
+ public String getEmplyrId() {
+ return emplyrId;
+ }
+ /**
+ * @param emplyrId the emplyrId to set
+ */
+ public void setEmplyrId(String emplyrId) {
+ this.emplyrId = emplyrId;
+ }
+ /**
+ * @return the emplyrNm
+ */
+ public String getEmplyrNm() {
+ return emplyrNm;
+ }
+ /**
+ * @param emplyrNm the emplyrNm to set
+ */
+ public void setEmplyrNm(String emplyrNm) {
+ this.emplyrNm = emplyrNm;
+ }
+ /**
+ * @return the emplyrSe
+ */
+ public String getEmplyrSe() {
+ return emplyrSe;
+ }
+ /**
+ * @param emplyrSe the emplyrSe to set
+ */
+ public void setEmplyrSe(String emplyrSe) {
+ this.emplyrSe = emplyrSe;
+ }
+ /**
+ * @return the ipInfo
+ */
+ public String getIpInfo() {
+ return ipInfo;
+ }
+ /**
+ * @param ipInfo the ipInfo to set
+ */
+ public void setIpInfo(String ipInfo) {
+ this.ipInfo = ipInfo;
+ }
+ /**
+ * @return the dplctPermAt
+ */
+ public String getDplctPermAt() {
+ return dplctPermAt;
+ }
+ /**
+ * @param dplctPermAt the dplctPermAt to set
+ */
+ public void setDplctPermAt(String dplctPermAt) {
+ this.dplctPermAt = dplctPermAt;
+ }
+ /**
+ * @return the lmttAt
+ */
+ public String getLmttAt() {
+ return lmttAt;
+ }
+ /**
+ * @param lmttAt the lmttAt to set
+ */
+ public void setLmttAt(String lmttAt) {
+ this.lmttAt = lmttAt;
+ }
+ /**
+ * @return the userId
+ */
+ public String getUserId() {
+ return userId;
+ }
+ /**
+ * @param userId the userId to set
+ */
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+ /**
+ * @return the regDate
+ */
+ public String getRegDate() {
+ return regDate;
+ }
+ /**
+ * @param regDate the regDate to set
+ */
+ public void setRegDate(String regDate) {
+ this.regDate = regDate;
+ }
+ /**
+ * @return the regYn
+ */
+ public String getRegYn() {
+ return regYn;
+ }
+ /**
+ * @param regYn the regYn to set
+ */
+ public void setRegYn(String regYn) {
+ this.regYn = regYn;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicy.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicyVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicyVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicyVO.java (revision 7)
@@ -0,0 +1,64 @@
+/**
+ * 개요
+ * - 로그인정책에 대한 VO 클래스를 정의한다.
+ *
+ * 상세내용
+ * - 로그인정책정보의 목록 항목을 관리한다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 03-8-2009 오후 2:08:55
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.8.3 이문준 최초 생성
+ * </pre>
+ */
+
+package egovframework.com.uat.uap.service;
+
+import java.util.List;
+
+public class LoginPolicyVO extends LoginPolicy {
+
+ /**
+ * serialVersionUID
+ */
+ private static final long serialVersionUID = 1L;
+ /**
+ * 로그인 정책 목록
+ */
+ List<LoginPolicyVO> loginPolicyList;
+ /**
+ * 삭제 여부
+ */
+ String [] delYn;
+
+ /**
+ * @return the loginPolicyList
+ */
+ public List<LoginPolicyVO> getLoginPolicyList() {
+ return loginPolicyList;
+ }
+ /**
+ * @param loginPolicyList the loginPolicyList to set
+ */
+ public void setLoginPolicyList(List<LoginPolicyVO> loginPolicyList) {
+ this.loginPolicyList = loginPolicyList;
+ }
+ /**
+ * @return the delYn
+ */
+ public String[] getDelYn() {
+ return delYn;
+ }
+ /**
+ * @param delYn the delYn to set
+ */
+ public void setDelYn(String[] delYn) {
+ this.delYn = delYn;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uap/service/LoginPolicyVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uap/service/EgovLoginPolicyService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uap/service/EgovLoginPolicyService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uap/service/EgovLoginPolicyService.java (revision 7)
@@ -0,0 +1,76 @@
+/**
+ * 개요
+ * - 로그인정책에 대한 Service Interface를 정의한다.
+ *
+ * 상세내용
+ * - 로그인정책에 대한 등록, 수정, 삭제, 조회, 반영확인 기능을 제공한다.
+ * - 로그인정책의 조회기능은 목록조회, 상세조회로 구분된다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 03-8-2009 오후 2:08:54
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.08.03 이문준 최초 생성
+ * 2021.02.18 신용호 selectLoginPolicyResult() 삭제
+ * </pre>
+ */
+
+package egovframework.com.uat.uap.service;
+
+import java.util.List;
+
+
+public interface EgovLoginPolicyService {
+
+ /**
+ * 로그인정책 목록을 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return List - 로그인정책 목록
+ */
+ public List<LoginPolicyVO> selectLoginPolicyList(LoginPolicyVO loginPolicyVO) throws Exception;
+
+ /**
+ * 로그인정책 목록 수를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return int
+ */
+ public int selectLoginPolicyListTotCnt(LoginPolicyVO loginPolicyVO) throws Exception;
+
+ /**
+ * 로그인정책 목록의 상세정보를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return LoginPolicyVO - 로그인정책 VO
+ */
+ public LoginPolicyVO selectLoginPolicy(LoginPolicyVO loginPolicyVO) throws Exception;
+
+ /**
+ * 로그인정책 정보를 신규로 등록한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void insertLoginPolicy(LoginPolicy loginPolicy) throws Exception;
+
+ /**
+ * 기 등록된 로그인정책 정보를 수정한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void updateLoginPolicy(LoginPolicy loginPolicy) throws Exception;
+
+ /**
+ * 기 등록된 로그인정책 정보를 삭제한다.
+ * @param loginPolicy - 로그인정책 model
+ */
+ public void deleteLoginPolicy(LoginPolicy loginPolicy) throws Exception;
+
+ /**
+ * 로그인정책에 대한 현재 반영되어 있는 결과를 조회한다.
+ * @param loginPolicyVO - 로그인정책 VO
+ * @return LoginPolicyVO - 로그인정책 VO
+ */
+ /*
+ * public LoginPolicyVO selectLoginPolicyResult(LoginPolicyVO loginPolicyVO)
+ * throws Exception;
+ */
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uap/service/EgovLoginPolicyService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uap/filter/EgovLoginPolicyFilter.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uap/filter/EgovLoginPolicyFilter.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uap/filter/EgovLoginPolicyFilter.java (revision 7)
@@ -0,0 +1,126 @@
+package egovframework.com.uat.uap.filter;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.uat.uap.service.EgovLoginPolicyService;
+import egovframework.com.uat.uap.service.LoginPolicyVO;
+import egovframework.com.utl.sim.service.EgovClntInfo;
+
+/**
+ * 로그인 정책 체크 필터
+ * @author 공통서비스 개발팀 서준식
+ * @since 2011.07.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2011.07.01 서준식 최초 생성
+ * 2017-02-14 이정은 시큐어코딩(ES) - 시큐어코딩 부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ *
+ * </pre>
+ */
+public class EgovLoginPolicyFilter implements Filter {
+
+ private FilterConfig config;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovLoginPolicyFilter.class);
+
+ public void destroy() {
+ }
+
+ /**
+ * IP를 이용해 로그인을 제한하는 메서든
+ * @param request
+ * @param response
+ * @param chain
+ * @return void
+ * @exception IOException, ServletException
+ */
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+
+ ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
+ EgovLoginPolicyService egovLoginPolicyService = (EgovLoginPolicyService) act.getBean("egovLoginPolicyService");
+ EgovMessageSource egovMessageSource = (EgovMessageSource) act.getBean("egovMessageSource");
+
+ HttpServletRequest httpRequest = (HttpServletRequest) request;
+
+ String id = request.getParameter("id");
+ //String password = request.getParameter("password");
+ String userSe = request.getParameter("userSe");
+ String userIp = "";
+
+ if (id == null || userSe == null) {
+ ((HttpServletResponse) response).sendRedirect(httpRequest.getContextPath() + "/uat/uia/egovLoginUsr.do");
+ }
+
+ // 1. LoginVO를 DB로 부터 가져오는 과정
+
+ try {
+ // 접속IP
+ userIp = EgovClntInfo.getClntIP((HttpServletRequest) request);
+
+ boolean loginPolicyYn = true;
+
+ LoginPolicyVO loginPolicyVO = new LoginPolicyVO();
+ loginPolicyVO.setEmplyrId(id);
+ loginPolicyVO = egovLoginPolicyService.selectLoginPolicy(loginPolicyVO);
+
+ if (loginPolicyVO == null) {
+ loginPolicyYn = true;
+ } else {
+ if (loginPolicyVO.getLmttAt().equals("Y")) {
+ if (!userIp.equals(loginPolicyVO.getIpInfo())) {
+ loginPolicyYn = false;
+ }
+ }
+ }
+
+ if (loginPolicyYn) {
+ chain.doFilter(request, response);
+
+ } else {
+ String message = URLEncoder.encode(egovMessageSource.getMessage("fail.common.login.ip"),"UTF-8");
+ ((HttpServletRequest) request).setAttribute("loginMessage", message);
+ ((HttpServletResponse) response).sendRedirect(httpRequest.getContextPath() + "/uat/uia/egovLoginUsr.do?loginMessage="+message);
+ }
+
+ } catch (IOException e) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ ((HttpServletResponse) response).sendRedirect(httpRequest.getContextPath() + "/uat/uia/egovLoginUsr.do?login_error=1");
+ } catch (Exception e) {
+// LOGGER.error("Exception: {}", e.getClass().getName());
+// LOGGER.error("Exception Message: {}", e.getMessage());
+ // 2017-02-14 이정은 시큐어코딩(ES) - 시큐어코딩 부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+
+ ((HttpServletResponse) response).sendRedirect(httpRequest.getContextPath() + "/uat/uia/egovLoginUsr.do?login_error=1");
+ }
+ }
+
+ public void init(FilterConfig config) throws ServletException {
+
+ this.config = config;
+
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uap/filter/EgovLoginPolicyFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uia/web/EgovLoginController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uia/web/EgovLoginController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uia/web/EgovLoginController.java (revision 7)
@@ -0,0 +1,378 @@
+package egovframework.com.uat.uia.web;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.EgovComponentChecker;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.config.EgovLoginConfig;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.service.Globals;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.uat.uia.service.EgovLoginService;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.com.utl.sim.service.EgovClntInfo;
+import egovframework.rte.psl.dataaccess.util.EgovMap;
+
+/*
+import com.gpki.gpkiapi.cert.X509Certificate;
+import com.gpki.servlet.GPKIHttpServletRequest;
+import com.gpki.servlet.GPKIHttpServletResponse;
+*/
+
+/**
+ * 일반 로그인, 인증서 로그인을 처리하는 컨트롤러 클래스
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.03.06 박지욱 최초 생성
+ * 2011.08.26 정진오 IncludedInfo annotation 추가
+ * 2011.09.07 서준식 스프링 시큐리티 로그인 및 SSO 인증 로직을 필터로 분리
+ * 2011.09.25 서준식 사용자 관리 컴포넌트 미포함에 대한 점검 로직 추가
+ * 2011.09.27 서준식 인증서 로그인시 스프링 시큐리티 사용에 대한 체크 로직 추가
+ * 2011.10.27 서준식 아이디 찾기 기능에서 사용자 리름 공백 제거 기능 추가
+ * 2017.07.21 장동한 로그인인증제한 작업
+ * 2018.10.26 신용호 로그인 화면에 message 파라미터 전달 수정
+ * 2019.10.01 정진호 로그인 인증세션 추가
+ * 2020.06.25 신용호 로그인 메시지 처리 수정
+ * 2021.01.15 신용호 로그아웃시 권한 초기화 추가 : session 모드 actionLogout()
+ *
+ * </pre>
+ */
+@Controller
+public class EgovLoginController {
+
+ /** EgovLoginService */
+ @Resource(name = "loginService")
+ private EgovLoginService loginService;
+
+ /** EgovCmmUseService */
+ @Resource(name = "EgovCmmUseService")
+ private EgovCmmUseService cmmUseService;
+
+ /** EgovMessageSource */
+ @Resource(name = "egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "egovLoginConfig")
+ EgovLoginConfig egovLoginConfig;
+
+ /** log */
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovLoginController.class);
+
+ /**
+ * 로그인 화면으로 들어간다
+ * @param vo - 로그인후 이동할 URL이 담긴 LoginVO
+ * @return 로그인 페이지
+ * @exception Exception
+ */
+ @IncludedInfo(name = "로그인", listUrl = "/uat/uia/egovLoginUsr.do", order = 10, gid = 10)
+ @RequestMapping(value = "/uat/uia/egovLoginUsr.do")
+ public String loginUsrView(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
+ if (EgovComponentChecker.hasComponent("mberManageService")) {
+ model.addAttribute("useMemberManage", "true");
+ }
+
+ //권한체크시 에러 페이지 이동
+ String auth_error = request.getParameter("auth_error") == null ? "" : (String)request.getParameter("auth_error");
+ if(auth_error != null && auth_error.equals("1")){
+ return "egovframework/com/cmm/error/accessDenied";
+ }
+
+ String message = (String)request.getParameter("loginMessage");
+ if (message!=null) model.addAttribute("loginMessage", message);
+
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+
+ /**
+ * 일반(세션) 로그인을 처리한다
+ * @param vo - 아이디, 비밀번호가 담긴 LoginVO
+ * @param request - 세션처리를 위한 HttpServletRequest
+ * @return result - 로그인결과(세션정보)
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uat/uia/actionLogin.do")
+ public String actionLogin(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest request, ModelMap model) throws Exception {
+
+ // 1. 로그인인증제한 활성화시
+ if( egovLoginConfig.isLock()){
+ Map<?,?> mapLockUserInfo = (EgovMap)loginService.selectLoginIncorrect(loginVO);
+ if(mapLockUserInfo != null){
+ //2.1 로그인인증제한 처리
+ String sLoginIncorrectCode = loginService.processLoginIncorrect(loginVO, mapLockUserInfo);
+ if(!sLoginIncorrectCode.equals("E")){
+ if(sLoginIncorrectCode.equals("L")){
+ model.addAttribute("loginMessage", egovMessageSource.getMessageArgs("fail.common.loginIncorrect", new Object[] {egovLoginConfig.getLockCount(),request.getLocale()}));
+ }else if(sLoginIncorrectCode.equals("C")){
+ model.addAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ }
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ }else{
+ model.addAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ }
+
+ // 2. 로그인 처리
+ LoginVO resultVO = loginService.actionLogin(loginVO);
+
+ // 3. 일반 로그인 처리
+ if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("")) {
+
+ // 3-1. 로그인 정보를 세션에 저장
+ request.getSession().setAttribute("loginVO", resultVO);
+ // 2019.10.01 로그인 인증세션 추가
+ request.getSession().setAttribute("accessUser", resultVO.getUserSe().concat(resultVO.getId()));
+
+ return "redirect:/uat/uia/actionMain.do";
+
+ } else {
+ model.addAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login",request.getLocale()));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ }
+
+ /**
+ * 로그인 후 메인화면으로 들어간다
+ * @param
+ * @return 로그인 페이지
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uat/uia/actionMain.do")
+ public String actionMain(ModelMap model) throws Exception {
+
+ // 1. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if (!isAuthenticated) {
+ model.addAttribute("loginMessage", egovMessageSource.getMessage("fail.common.login"));
+ return "egovframework/com/uat/uia/EgovLoginUsr";
+ }
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ LOGGER.debug("User Id : {}", user == null ? "" : EgovStringUtil.isNullToString(user.getId()));
+
+ /*
+ // 2. 메뉴조회
+ MenuManageVO menuManageVO = new MenuManageVO();
+ menuManageVO.setTmp_Id(user.getId());
+ menuManageVO.setTmp_UserSe(user.getUserSe());
+ menuManageVO.setTmp_Name(user.getName());
+ menuManageVO.setTmp_Email(user.getEmail());
+ menuManageVO.setTmp_OrgnztId(user.getOrgnztId());
+ menuManageVO.setTmp_UniqId(user.getUniqId());
+ List list_headmenu = menuManageService.selectMainMenuHead(menuManageVO);
+ model.addAttribute("list_headmenu", list_headmenu);
+ */
+
+ // 3. 메인 페이지 이동
+ String main_page = Globals.MAIN_PAGE;
+
+ LOGGER.debug("Globals.MAIN_PAGE > " + Globals.MAIN_PAGE);
+ LOGGER.debug("main_page > {}", main_page);
+
+ if (main_page.startsWith("/")) {
+ return "forward:" + main_page;
+ } else {
+ return main_page;
+ }
+
+ /*
+ if (main_page != null && !main_page.equals("")) {
+
+ // 3-1. 설정된 메인화면이 있는 경우
+ return main_page;
+
+ } else {
+
+ // 3-2. 설정된 메인화면이 없는 경우
+ if (user.getUserSe().equals("USR")) {
+ return "egovframework/com/EgovMainView";
+ } else {
+ return "egovframework/com/EgovMainViewG";
+ }
+ }
+ */
+ }
+
+ /**
+ * 로그아웃한다.
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uat/uia/actionLogout.do")
+ public String actionLogout(HttpServletRequest request, ModelMap model) throws Exception {
+
+ /*String userIp = EgovClntInfo.getClntIP(request);
+
+ // 1. Security 연동
+ return "redirect:/j_spring_security_logout";*/
+
+ request.getSession().setAttribute("loginVO", null);
+ // 세션모드인경우 Authority 초기화
+ // List<String> authList = (List<String>)EgovUserDetailsHelper.getAuthorities();
+ request.getSession().setAttribute("accessUser", null);
+
+ //return "redirect:/egovDevIndex.jsp";
+ return "redirect:/EgovContent.do";
+ }
+
+ /**
+ * 아이디/비밀번호 찾기 화면으로 들어간다
+ * @param
+ * @return 아이디/비밀번호 찾기 페이지
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uat/uia/egovIdPasswordSearch.do")
+ public String idPasswordSearchView(ModelMap model) throws Exception {
+
+ // 1. 비밀번호 힌트 공통코드 조회
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+ vo.setCodeId("COM022");
+ List<?> code = cmmUseService.selectCmmCodeDetail(vo);
+ model.addAttribute("pwhtCdList", code);
+
+ return "egovframework/com/uat/uia/EgovIdPasswordSearch";
+ }
+
+ /**
+ * 아이디를 찾는다.
+ * @param vo - 이름, 이메일주소, 사용자구분이 담긴 LoginVO
+ * @return result - 아이디
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uat/uia/searchId.do")
+ public String searchId(@ModelAttribute("loginVO") LoginVO loginVO, ModelMap model) throws Exception {
+
+ if (loginVO == null || loginVO.getName() == null || loginVO.getName().equals("") && loginVO.getEmail() == null || loginVO.getEmail().equals("")
+ && loginVO.getUserSe() == null || loginVO.getUserSe().equals("")) {
+ return "egovframework/com/cmm/egovError";
+ }
+
+ // 1. 아이디 찾기
+ loginVO.setName(loginVO.getName().replaceAll(" ", ""));
+ LoginVO resultVO = loginService.searchId(loginVO);
+
+ if (resultVO != null && resultVO.getId() != null && !resultVO.getId().equals("")) {
+
+ model.addAttribute("resultInfo", "아이디는 " + resultVO.getId() + " 입니다.");
+ return "egovframework/com/uat/uia/EgovIdPasswordResult";
+ } else {
+ model.addAttribute("resultInfo", egovMessageSource.getMessage("fail.common.idsearch"));
+ return "egovframework/com/uat/uia/EgovIdPasswordResult";
+ }
+ }
+
+ /**
+ * 비밀번호를 찾는다.
+ * @param vo - 아이디, 이름, 이메일주소, 비밀번호 힌트, 비밀번호 정답, 사용자구분이 담긴 LoginVO
+ * @return result - 임시비밀번호전송결과
+ * @exception Exception
+ */
+ @RequestMapping(value = "/uat/uia/searchPassword.do")
+ public String searchPassword(@ModelAttribute("loginVO") LoginVO loginVO, ModelMap model) throws Exception {
+
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (loginVO == null || loginVO.getId() == null || loginVO.getId().equals("") && loginVO.getName() == null || "".equals(loginVO.getName()) && loginVO.getEmail() == null
+ || loginVO.getEmail().equals("") && loginVO.getPasswordHint() == null || "".equals(loginVO.getPasswordHint()) && loginVO.getPasswordCnsr() == null
+ || "".equals(loginVO.getPasswordCnsr()) && loginVO.getUserSe() == null || "".equals(loginVO.getUserSe())) {
+ return "egovframework/com/cmm/egovError";
+ }
+
+ // 1. 비밀번호 찾기
+ boolean result = loginService.searchPassword(loginVO);
+
+ // 2. 결과 리턴
+ if (result) {
+ model.addAttribute("resultInfo", "임시 비밀번호를 발송하였습니다.");
+ return "egovframework/com/uat/uia/EgovIdPasswordResult";
+ } else {
+ model.addAttribute("resultInfo", egovMessageSource.getMessage("fail.common.pwsearch"));
+ return "egovframework/com/uat/uia/EgovIdPasswordResult";
+ }
+ }
+
+ /**
+ * 세션타임아웃 시간을 연장한다.
+ * Cookie에 egovLatestServerTime, egovExpireSessionTime 기록하도록 한다.
+ * @return result - String
+ * @exception Exception
+ */
+ @RequestMapping(value="/uat/uia/refreshSessionTimeout.do")
+ public ModelAndView refreshSessionTimeout(@RequestParam Map<String, Object> commandMap) throws Exception {
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("jsonView");
+
+ modelAndView.addObject("result", "ok");
+
+ return modelAndView;
+ }
+
+ /**
+ * 비밀번호 유효기간 팝업을 출력한다.
+ * Cookie에 egovLatestServerTime, egovExpireSessionTime 기록하도록 한다.
+ * @return result - String
+ * @exception Exception
+ */
+ @RequestMapping(value="/uat/uia/noticeExpirePwd.do")
+ public String noticeExpirePwd(@RequestParam Map<String, Object> commandMap, ModelMap model) throws Exception {
+
+ // 설정된 비밀번호 유효기간을 가져온다. ex) 180이면 비밀번호 변경후 만료일이 앞으로 180일
+ String propertyExpirePwdDay = EgovProperties.getProperty("Globals.ExpirePwdDay");
+ int expirePwdDay = 0 ;
+ try {
+ expirePwdDay = Integer.parseInt(propertyExpirePwdDay);
+ } catch (NumberFormatException e) {
+ LOGGER.debug("convert expirePwdDay Err : "+e.getMessage());
+ } catch (Exception e) {
+ LOGGER.debug("convert expirePwdDay Err : "+e.getMessage());
+ }
+
+ model.addAttribute("expirePwdDay", expirePwdDay);
+
+ // 비밀번호 설정일로부터 몇일이 지났는지 확인한다. ex) 3이면 비빌번호 설정후 3일 경과
+ LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+ model.addAttribute("loginVO", loginVO);
+ int passedDayChangePWD = 0;
+ if ( loginVO != null ) {
+ LOGGER.debug("===>>> loginVO.getId() = "+loginVO.getId());
+ LOGGER.debug("===>>> loginVO.getUniqId() = "+loginVO.getUniqId());
+ LOGGER.debug("===>>> loginVO.getUserSe() = "+loginVO.getUserSe());
+ // 비밀번호 변경후 경과한 일수
+ passedDayChangePWD = loginService.selectPassedDayChangePWD(loginVO);
+ LOGGER.debug("===>>> passedDayChangePWD = "+passedDayChangePWD);
+ model.addAttribute("passedDay", passedDayChangePWD);
+ }
+
+ // 만료일자로부터 경과한 일수 => ex)1이면 만료일에서 1일 경과
+ model.addAttribute("elapsedTimeExpiration", passedDayChangePWD - expirePwdDay);
+
+ return "egovframework/com/uat/uia/EgovExpirePwd";
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/uat/uia/web/EgovLoginController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java (revision 7)
@@ -0,0 +1,125 @@
+package egovframework.com.uat.uia.service.impl;
+
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+
+/**
+ * 일반 로그인, 인증서 로그인을 처리하는 DAO 클래스
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.03.06 박지욱 최초 생성
+ * 2011.08.26 서준식 EsntlId를 이용한 로그인 추가
+ * 2017.07.21 장동한 로그인인증제한 작업
+ * 2020.07.08 신용호 비밀번호를 수정한후 경과한 날짜 조회
+ * </pre>
+ */
+@Repository("loginDAO")
+public class LoginDAO extends EgovComAbstractDAO {
+
+ /**
+ * 2011.08.26
+ * EsntlId를 이용한 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public LoginVO actionLoginByEsntlId(LoginVO vo) throws Exception {
+ return (LoginVO)selectOne("LoginUsr.ssoLoginByEsntlId", vo);
+ }
+
+ /**
+ * 일반 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public LoginVO actionLogin(LoginVO vo) throws Exception {
+ return (LoginVO)selectOne("LoginUsr.actionLogin", vo);
+ }
+
+ /**
+ * 인증서 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public LoginVO actionCrtfctLogin(LoginVO vo) throws Exception {
+
+ return (LoginVO)selectOne("LoginUsr.actionCrtfctLogin", vo);
+ }
+
+ /**
+ * 아이디를 찾는다.
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public LoginVO searchId(LoginVO vo) throws Exception {
+
+ return (LoginVO)selectOne("LoginUsr.searchId", vo);
+ }
+
+ /**
+ * 비밀번호를 찾는다.
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public LoginVO searchPassword(LoginVO vo) throws Exception {
+
+ return (LoginVO)selectOne("LoginUsr.searchPassword", vo);
+ }
+
+ /**
+ * 변경된 비밀번호를 저장한다.
+ * @param vo LoginVO
+ * @exception Exception
+ */
+ public void updatePassword(LoginVO vo) throws Exception {
+ update("LoginUsr.updatePassword", vo);
+ }
+
+
+ /**
+ * 로그인인증제한 내역을 조회한다.
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public Map<?,?> selectLoginIncorrect(LoginVO vo) throws Exception {
+ return (Map<?,?>)selectOne("LoginUsr.selectLoginIncorrect", vo);
+ }
+
+ /**
+ * 로그인인증제한 내역을 업데이트 한다.
+ * @param vo LoginVO
+ * @return vod
+ * @exception Exception
+ */
+ public void updateLoginIncorrect(Map<?,?> map) throws Exception {
+ update("LoginUsr.updateLoginIncorrect"+map.get("USER_SE"), map);
+ }
+
+ /**
+ * 비밀번호를 수정한후 경과한 날짜를 조회한다.
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public int selectPassedDayChangePWD(LoginVO vo) throws Exception {
+ return selectOne("LoginUsr.selectPassedDayChangePWD", vo);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uia/service/impl/LoginDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uia/service/impl/EgovLoginServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uia/service/impl/EgovLoginServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uia/service/impl/EgovLoginServiceImpl.java (revision 7)
@@ -0,0 +1,250 @@
+package egovframework.com.uat.uia.service.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.config.EgovLoginConfig;
+import egovframework.com.uat.uia.service.EgovLoginService;
+import egovframework.com.utl.fcc.service.EgovNumberUtil;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+import egovframework.com.utl.sim.service.EgovFileScrty;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.psl.dataaccess.util.EgovMap;
+
+/**
+ * 일반 로그인, 인증서 로그인을 처리하는 비즈니스 구현 클래스
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.03.06 박지욱 최초 생성
+ * 2011.08.26 서준식 EsntlId를 이용한 로그인 추가
+ * 2014.12.08 이기하 암호화방식 변경(EgovFileScrty.encryptPassword)
+ * 2017.07.21 장동한 로그인인증제한 작업
+ * 2020.07.08 신용호 비밀번호를 수정한후 경과한 날짜 조회
+ * </pre>
+ */
+@Service("loginService")
+public class EgovLoginServiceImpl extends EgovAbstractServiceImpl implements EgovLoginService {
+
+ @Resource(name="loginDAO")
+ private LoginDAO loginDAO;
+
+ @Resource(name = "egovLoginConfig")
+ EgovLoginConfig egovLoginConfig;
+
+ /**
+ * 2011.08.26
+ * EsntlId를 이용한 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ @Override
+ public LoginVO actionLoginByEsntlId(LoginVO vo) throws Exception {
+
+ LoginVO loginVO = loginDAO.actionLoginByEsntlId(vo);
+
+ // 3. 결과를 리턴한다.
+ if (loginVO != null && !loginVO.getId().equals("") && !loginVO.getPassword().equals("")) {
+ return loginVO;
+ } else {
+ loginVO = new LoginVO();
+ }
+
+ return loginVO;
+ }
+
+
+ /**
+ * 일반 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ @Override
+ public LoginVO actionLogin(LoginVO vo) throws Exception {
+
+ // 1. 입력한 비밀번호를 암호화한다.
+ String enpassword = EgovFileScrty.encryptPassword(vo.getPassword(), vo.getId());
+ vo.setPassword(enpassword);
+
+ // 2. 아이디와 암호화된 비밀번호가 DB와 일치하는지 확인한다.
+ LoginVO loginVO = loginDAO.actionLogin(vo);
+
+ // 3. 결과를 리턴한다.
+ if (loginVO != null && !loginVO.getId().equals("") && !loginVO.getPassword().equals("")) {
+ return loginVO;
+ } else {
+ loginVO = new LoginVO();
+ }
+
+ return loginVO;
+ }
+
+ /**
+ * 인증서 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ @Override
+ public LoginVO actionCrtfctLogin(LoginVO vo) throws Exception {
+
+ // 1. DN값으로 ID, PW를 조회한다.
+ LoginVO loginVO = loginDAO.actionCrtfctLogin(vo);
+
+ // 3. 결과를 리턴한다.
+ if (loginVO != null && !loginVO.getId().equals("") && !loginVO.getPassword().equals("")) {
+ return loginVO;
+ } else {
+ loginVO = new LoginVO();
+ }
+
+ return loginVO;
+ }
+
+ /**
+ * 아이디를 찾는다.
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ @Override
+ public LoginVO searchId(LoginVO vo) throws Exception {
+
+ // 1. 이름, 이메일주소가 DB와 일치하는 사용자 ID를 조회한다.
+ LoginVO loginVO = loginDAO.searchId(vo);
+
+ // 2. 결과를 리턴한다.
+ if (loginVO != null && !loginVO.getId().equals("")) {
+ return loginVO;
+ } else {
+ loginVO = new LoginVO();
+ }
+
+ return loginVO;
+ }
+
+ /**
+ * 비밀번호를 찾는다.
+ * @param vo LoginVO
+ * @return boolean
+ * @exception Exception
+ */
+ @Override
+ public boolean searchPassword(LoginVO vo) throws Exception {
+
+ boolean result = true;
+
+ // 1. 아이디, 이름, 이메일주소, 비밀번호 힌트, 비밀번호 정답이 DB와 일치하는 사용자 Password를 조회한다.
+ LoginVO loginVO = loginDAO.searchPassword(vo);
+ if (loginVO == null || loginVO.getPassword() == null || "".equals(loginVO.getPassword())) {
+ return false;
+ }
+
+ // 2. 임시 비밀번호를 생성한다.(영+영+숫+영+영+숫+영+영=8자리)
+ String newpassword = "";
+ for (int i = 1; i <= 8; i++) {
+ // 영자
+ if (i % 3 != 0) {
+ newpassword += EgovStringUtil.getRandomStr('a', 'z');
+ // 숫자
+ } else {
+ newpassword += EgovNumberUtil.getRandomNum(0, 9);
+ }
+ }
+
+ // 3. 임시 비밀번호를 암호화하여 DB에 저장한다.
+ LoginVO pwVO = new LoginVO();
+ String enpassword = EgovFileScrty.encryptPassword(newpassword, vo.getId());
+ pwVO.setId(vo.getId());
+ pwVO.setPassword(enpassword);
+ pwVO.setUserSe(vo.getUserSe());
+ loginDAO.updatePassword(pwVO);
+
+ // 4. 임시 비밀번호를 이메일 발송한다.(메일연동솔루션 활용)
+// SndngMailVO sndngMailVO = new SndngMailVO();
+// sndngMailVO.setDsptchPerson("webmaster");
+// sndngMailVO.setRecptnPerson(vo.getEmail());
+// sndngMailVO.setSj("[MOIS] 임시 비밀번호를 발송했습니다.");
+// sndngMailVO.setEmailCn("고객님의 임시 비밀번호는 " + newpassword + " 입니다.");
+// sndngMailVO.setAtchFileId("");
+//
+// result = sndngMailRegistService.insertSndngMail(sndngMailVO);
+
+ return result;
+ }
+
+
+ /**
+ * 로그인인증제한을 조회한다.
+ * @param vo LoginVO
+ * @return Map
+ * @exception Exception
+ */
+ public Map<?,?> selectLoginIncorrect(LoginVO vo) throws Exception{
+ return loginDAO.selectLoginIncorrect(vo);
+ }
+
+ /**
+ * 로그인인증제한을 처리한다.
+ * @param vo LoginVO
+ * @param vo mapLockUserInfo
+ * @return String
+ * @exception Exception
+ */
+ public String processLoginIncorrect(LoginVO vo, Map<?,?> mapLockUserInfo) throws Exception{
+ String sRtnCode = "C";
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ String enpassword = EgovFileScrty.encryptPassword(vo.getPassword(), EgovStringUtil.isNullToString(vo.getId()));
+ Map<String,String> mapParam = new HashMap<String,String>();
+ mapParam.put("USER_SE", vo.getUserSe());
+ mapParam.put("id", EgovStringUtil.isNullToString(vo.getId()));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ //잠김시
+ if("Y".equals(((String)mapLockUserInfo.get("lockAt")))){
+ sRtnCode = "L";
+ //패드워드 인증시
+ }else if( ((String)mapLockUserInfo.get("userPw")).equals(enpassword) ){
+ //LOCK 해제
+ mapParam.put("updateAt", "E");
+ loginDAO.updateLoginIncorrect(mapParam);
+ sRtnCode = "E";
+ //패드워드 비인증시
+ }else if(!"Y".equals(((String)mapLockUserInfo.get("lockAt")))){
+ //LOCK 설정
+ if( Integer.parseInt(String.valueOf(mapLockUserInfo.get("lockCnt")))+1 >= egovLoginConfig.getLockCount() ){
+ mapParam.put("updateAt", "L");
+ loginDAO.updateLoginIncorrect(mapParam);
+ sRtnCode = "L";
+ //LOCK 증가
+ }else{
+ mapParam.put("updateAt", "C");
+ loginDAO.updateLoginIncorrect(mapParam);
+ sRtnCode = "C";
+ }
+ }
+ return sRtnCode;
+ }
+
+ /**
+ * 비밀번호를 수정한후 경과한 날짜를 조회한다.
+ * @param vo LoginVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectPassedDayChangePWD(LoginVO vo) throws Exception {
+ return loginDAO.selectPassedDayChangePWD(vo);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uia/service/impl/EgovLoginServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/uat/uia/service/EgovLoginService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/uat/uia/service/EgovLoginService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/uat/uia/service/EgovLoginService.java (revision 7)
@@ -0,0 +1,94 @@
+package egovframework.com.uat.uia.service;
+
+import java.util.Map;
+
+import egovframework.com.cmm.LoginVO;
+
+/**
+ * 일반 로그인, 인증서 로그인을 처리하는 비즈니스 인터페이스 클래스
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.03.06 박지욱 최초 생성
+ * 2011.08.26 서준식 EsntlId를 이용한 로그인 추가
+ * 2017.07.21 장동한 로그인인증제한 작업
+ * 2020.07.08 신용호 비밀번호를 수정한후 경과한 날짜 조회
+ * </pre>
+ */
+public interface EgovLoginService {
+
+ /**
+ * 2011.08.26
+ * EsntlId를 이용한 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ public LoginVO actionLoginByEsntlId(LoginVO vo) throws Exception;
+
+ /**
+ * 일반 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ LoginVO actionLogin(LoginVO vo) throws Exception;
+
+ /**
+ * 인증서 로그인을 처리한다
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ LoginVO actionCrtfctLogin(LoginVO vo) throws Exception;
+
+ /**
+ * 아이디를 찾는다.
+ * @param vo LoginVO
+ * @return LoginVO
+ * @exception Exception
+ */
+ LoginVO searchId(LoginVO vo) throws Exception;
+
+ /**
+ * 비밀번호를 찾는다.
+ * @param vo LoginVO
+ * @return boolean
+ * @exception Exception
+ */
+ boolean searchPassword(LoginVO vo) throws Exception;
+
+
+ /**
+ * 로그인인증제한을 처리한다.
+ * @param vo LoginVO
+ * @param Map mapLockUserInfo
+ * @return String
+ * @exception Exception
+ */
+ String processLoginIncorrect(LoginVO vo, Map<?,?> mapLockUserInfo) throws Exception;
+
+ /**
+ * 로그인인증제한을 조회한다.
+ * @param vo LoginVO
+ * @return Map
+ * @exception Exception
+ */
+ Map<?,?> selectLoginIncorrect(LoginVO vo) throws Exception;
+
+ /**
+ * 비밀번호를 수정한후 경과한 날짜를 조회한다.
+ * @param vo LoginVO
+ * @return int
+ * @exception Exception
+ */
+ int selectPassedDayChangePWD(LoginVO vo) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/uat/uia/service/EgovLoginService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sec/web/EgovCertLoginController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sec/web/EgovCertLoginController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sec/web/EgovCertLoginController.java (revision 7)
@@ -0,0 +1,176 @@
+package egovframework.com.utl.sec.web;
+
+import egovframework.com.utl.sec.service.EgovCertInfoUtil;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * GPKISecureWeb 인증서 로그인 Controller
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.08.06 한성곤 최초 생성
+ *
+ * </pre>
+ */
+@Controller
+public class EgovCertLoginController {
+ /**
+ * 인증서 로그인에 관련된 환경변수를 설정한다.
+ *
+ * @param type
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/utl/sec/certVar.do")
+ public String var(@RequestParam(value="type", required=false) String type, Model model) throws Exception {
+ String typeInfo = type;
+
+ //------------------------------------------------------------
+ // 서버 인증서 정보 처리
+ //------------------------------------------------------------
+ String serverCert = EgovCertInfoUtil.getBase64ServerCert();
+
+ model.addAttribute("serverCert", serverCert);
+
+ //------------------------------------------------------------
+ // install 후 이동될 페이지 지정 (프로젝트에 맞게 수정 필요)
+ //-----------------------------------------------------------
+ if (typeInfo == null) {
+ typeInfo = "";
+ }
+
+ String startPage = null;
+
+ if (typeInfo.equalsIgnoreCase("login")) {
+ startPage = "/utl/sec/certLogin.do";
+ } else if (typeInfo.equalsIgnoreCase("regist")) {
+ startPage = "/utl/sec/certInfoPopup.do";
+ } else {
+ startPage = "/utl/sec/certLogin.do";
+ }
+
+ model.addAttribute("startPage", startPage);
+
+ return "egovframework/com/utl/sec/EgovCertVar";
+ }
+
+ /**
+ * 인증서 관련 설치 페이지를 표시한다.
+ *
+ * @param type
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/utl/sec/certInstall.do")
+ public String certInstall(@RequestParam(value="type", required=false) String type, Model model) throws Exception {
+ String typeInfo = type;
+
+ //------------------------------------------------------------
+ // install 후 이동될 페이지 지정 (프로젝트에 맞게 수정 필요)
+ //-----------------------------------------------------------
+ if (typeInfo == null || typeInfo.equals("")) {
+ typeInfo = "login";
+ }
+
+ model.addAttribute("type", typeInfo);
+
+ return "egovframework/com/utl/sec/EgovCertInstall";
+ }
+
+ /**
+ * 인증서 로그인 관련 설치 정보를 제공하는 설정 페이지를 표시한다.
+ *
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/utl/sec/certSetup.do")
+ public String certSetup() throws Exception {
+ return "egovframework/com/utl/sec/EgovCertSetup";
+ }
+
+ /**
+ * 인증서 로그인 관련 오류메시지 페이지를 표시한다.
+ *
+ * @param errMsg
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/utl/sec/certGPKIError.do")
+ public String certGPKIError(@RequestParam("errmsg") String errMsg, Model model) throws Exception {
+
+ model.addAttribute("errmsg", errMsg);
+
+ return "egovframework/com/utl/sec/EgovCertGPKIError";
+ }
+
+ /**
+ * 인증서 DN 등록을 위한 팝업 페이지를 표시한다.
+ *
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/utl/sec/certInfoPopup.do")
+ public String certInfoPopup(Model model) throws Exception {
+
+ return "egovframework/com/utl/sec/EgovCertInfoPopup";
+ }
+
+ /**
+ * 인증서 로그인 페이지(테스트)를 표시한다.
+ *
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/utl/sec/certLogin.do", method=RequestMethod.GET)
+ public String certLogin() throws Exception {
+
+ return "egovframework/com/utl/sec/EgovCertLogin";
+ }
+
+ /**
+ * 인증서 로그인 확인 페이지(테스트)를 표시한다.
+ *
+ * @param request
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/utl/sec/certLogin.do", method=RequestMethod.POST)
+ public String certLoginConfirm(HttpServletRequest request, Model model) throws Exception {
+
+ // 인증서 정보
+ model.addAttribute("certInfo", EgovCertInfoUtil.getCertInfo(request));
+
+ return "egovframework/com/utl/sec/EgovCertLoginConfirm";
+ }
+
+ /**
+ * 인증서 등록을 위한 팝업 페이지(테스트)를 표시한다.
+ *
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping("/utl/sec/certLoginInfo.do")
+ public String certLoginPopup() throws Exception {
+
+ return "egovframework/com/utl/sec/EgovCertLoginInfo";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sec/web/EgovCertLoginController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sec/service/EgovCertInfoUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sec/service/EgovCertInfoUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sec/service/EgovCertInfoUtil.java (revision 7)
@@ -0,0 +1,83 @@
+package egovframework.com.utl.sec.service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.dsjdf.jdf.Config;
+import com.dsjdf.jdf.Configuration;
+import com.dsjdf.jdf.ConfigurationException;
+import com.gpki.gpkiapi.cert.X509Certificate;
+import com.gpki.gpkiapi.exception.GpkiApiException;
+import com.gpki.gpkiapi.storage.Disk;
+import com.gpki.gpkiapi.util.Base64;
+import com.gpki.servlet.GPKIHttpServletRequest;
+
+/**
+ * GPKISecureWeb 인증서 로그인 서비스 유틸
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.08.06 한성곤 최초 생성
+ *
+ * </pre>
+ */
+public class EgovCertInfoUtil {
+ /**
+ * 서버인증서에 대한 Base64 정보를 얻는다.
+ *
+ * @return
+ * @throws ConfigurationException
+ * @throws GpkiApiException
+ */
+ public static String getBase64ServerCert() throws ConfigurationException, GpkiApiException {
+ /*
+ * Configuration를 사용하기 위해서는 다음과 같은 시스템 변수 지정이 필요함
+ *
+ * -Dcom.dsjdf.config.file="/product/jeus/egovProps/gpkisecureweb/conf/dsjdf.properties"
+ */
+ Config dsjdf = new Configuration();
+
+ String certPath = dsjdf.get("GPKISecureWeb.CertFilePathName");
+
+ X509Certificate x509Cert = null;
+ byte[] cert = null;
+ String base64cert = null;
+
+ x509Cert = Disk.readCert(certPath);
+ cert = x509Cert.getCert();
+ Base64 base64 = new Base64();
+ base64cert = base64.encode(cert);
+
+ return base64cert;
+ }
+
+ /**
+ * 인증서에 대한 정보를 제공한다.
+ *
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ public static CertInfoVO getCertInfo(HttpServletRequest request) throws Exception {
+ CertInfoVO certInfo = new CertInfoVO();
+
+ GPKIHttpServletRequest gpkirequest = null;
+
+ //System.out.println(request.getParameter("encryptedData"));
+
+ gpkirequest = new GPKIHttpServletRequest(request);
+
+ X509Certificate cert = gpkirequest.getSignerCert();
+
+ certInfo.setSubjectDn(cert.getSubjectDN());
+ certInfo.setIssuerDn(cert.getIssuerDN());
+
+ return certInfo;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sec/service/EgovCertInfoUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sec/service/CertInfoVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sec/service/CertInfoVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sec/service/CertInfoVO.java (revision 7)
@@ -0,0 +1,57 @@
+package egovframework.com.utl.sec.service;
+
+import java.io.Serializable;
+
+/**
+ * 인증서 정보 Value Object
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.06
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.08.06 한성곤 최초 생성
+ *
+ * </pre>
+ */
+@SuppressWarnings("serial")
+public class CertInfoVO implements Serializable {
+ /** 인증서 DN */
+ private String subjectDn = null;
+ /** 발급자 DN */
+ private String issuerDn = null;
+
+ /**
+ * subjectDn attribute를 리턴한다.
+ * @return the subjectDn
+ */
+ public String getSubjectDn() {
+ return subjectDn;
+ }
+ /**
+ * subjectDn attribute 값을 설정한다.
+ * @param subjectDn the subjectDn to set
+ */
+ public void setSubjectDn(String subjectDn) {
+ this.subjectDn = subjectDn;
+ }
+ /**
+ * issuerDn attribute를 리턴한다.
+ * @return the issuerDn
+ */
+ public String getIssuerDn() {
+ return issuerDn;
+ }
+ /**
+ * issuerDn attribute 값을 설정한다.
+ * @param issuerDn the issuerDn to set
+ */
+ public void setIssuerDn(String issuerDn) {
+ this.issuerDn = issuerDn;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sec/service/CertInfoVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessRequestWrapper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessRequestWrapper.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessRequestWrapper.java (revision 7)
@@ -0,0 +1,84 @@
+package egovframework.com.utl.sec.filter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+/**
+ * GPKISecureWeb 인증서 로그인 서비스 HttpServletRequestWrapper
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.13
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.08.13 한성곤 최초 생성
+ *
+ * </pre>
+ */
+public class CertProcessRequestWrapper extends HttpServletRequestWrapper {
+
+ /**
+ * 생성자를 호출한다.
+ *
+ * @param request
+ */
+ public CertProcessRequestWrapper(HttpServletRequest request) {
+ super(request);
+ }
+
+ /**
+ * 변환된 HTML 태그들을 다시 변환한다.
+ *
+ * @param src
+ * @return
+ */
+ protected String replaceString(String src) {
+ String srcString = src;
+
+ srcString = srcString.replaceAll("<", "<");
+ srcString = srcString.replaceAll(">", ">");
+ srcString = srcString.replaceAll(""", "\"");
+ srcString = srcString.replaceAll("'", "'");
+ srcString = srcString.replaceAll("&", "&");
+
+ return srcString;
+ }
+
+ /**
+ * getParameterValues 메소드를 대치한다.
+ */
+ public String[] getParameterValues(String parameter) {
+ String values[] = super.getParameterValues(parameter);
+
+ if (values == null) {
+ return null;
+ }
+
+ for(int i = 0; i < values.length; i++) {
+ if (values[i] != null) {
+ values[i] = replaceString(values[i]);
+ }
+ }
+
+ return values;
+ }
+
+ /**
+ * getParameter 메소드를 대치한다.
+ */
+ public String getParameter(String parameter) {
+ String value = super.getParameter(parameter);
+
+ if (value == null) {
+ return null;
+ }
+
+ value = replaceString(value);
+
+ return value;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessRequestWrapper.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessFilter.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessFilter.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessFilter.java (revision 7)
@@ -0,0 +1,54 @@
+package egovframework.com.utl.sec.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * GPKISecureWeb 인증서 로그인 서비스 filter
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.13
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.08.13 한성곤 최초 생성
+ *
+ * </pre>
+ */
+public class CertProcessFilter implements Filter {
+ @SuppressWarnings("unused")
+ private FilterConfig config;
+
+ /**
+ * Filter init 메소드를 대치한다.
+ */
+ public void init(FilterConfig config) throws ServletException {
+ this.config = config;
+ }
+
+ /**
+ * Filter doFilter 메소드를 대치한다.
+ * RequestWrapper를 통해 HTML Tag 변환을 처리한다.
+ */
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ chain.doFilter(new CertProcessRequestWrapper((HttpServletRequest)request), response);
+ }
+
+ /**
+ * Filter destroy 메소드를 대치한다.
+ */
+ public void destroy() {
+ // Empty Method
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sec/filter/CertProcessFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fda/ucc/service/EgovUnitCalcUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fda/ucc/service/EgovUnitCalcUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fda/ucc/service/EgovUnitCalcUtil.java (revision 7)
@@ -0,0 +1,151 @@
+package egovframework.com.utl.fda.ucc.service;
+
+import java.util.HashMap;
+
+/**
+ * 길이, 부피, 넓이, 무게 환산 데이터를 생성하는 Service Class 구현
+ * @author 공통서비스 장동한
+ * @since 2010.06.16
+ * @version 1.0
+ * @see <pre>
+ * 개정이력(Modification Information)
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2010.06.16 장동한 최초 생성
+ *
+ * </pre>
+ */
+public class EgovUnitCalcUtil {
+
+ //길이
+ HashMap<String, Double> g_hmVt = new HashMap<String, Double>();
+
+ //부피
+ HashMap<String, Double> g_hmVl = new HashMap<String, Double>();
+
+ //넓이
+ HashMap<String, Double> g_hmAr = new HashMap<String, Double>();
+
+ //무게
+ HashMap<String, Double> g_hmWt = new HashMap<String, Double>();
+
+ /**
+ * 생성자를 통하여 길이, 부피, 넓이, 무게 환산 데이터를 생성한다.
+ */
+ public EgovUnitCalcUtil(){
+ //길이
+ g_hmVt.put("vt0", (double)0);
+ g_hmVt.put("vt1", (double)1);
+ g_hmVt.put("vt2", 0.01);
+ g_hmVt.put("vt3", (1/2.54));
+ g_hmVt.put("vt4", (1/30.48));
+ g_hmVt.put("vt5", (1/91.44));
+ g_hmVt.put("vt6", (1/160934.4));
+ g_hmVt.put("vt7", 0.033);
+ g_hmVt.put("vt8", (0.033/6));
+ g_hmVt.put("vt9", (0.033/360));
+ g_hmVt.put("vt10", (0.033/1296));
+
+
+ //부피
+ g_hmVl.put("vl0", (double)0);
+ g_hmVl.put("vl1", (1/0.18039));
+ g_hmVl.put("vl2", (1/1.8039));
+ g_hmVl.put("vl3", (1/18.039));
+ g_hmVl.put("vl4", 10000.0);
+ g_hmVl.put("vl5", 0.001);
+ g_hmVl.put("vl6", (double)1);
+ g_hmVl.put("vl7", (1000/16.387064));
+ g_hmVl.put("vl8", (1000/Math.pow(2.54*12,3)));
+ g_hmVl.put("vl9", (1000/Math.pow(2.54*36,3)));
+ g_hmVl.put("vl10", (1000/(Math.pow(2.54,3)*231)));
+
+ //넓이
+ g_hmAr.put("ar0", (double)0);
+ g_hmAr.put("ar1", (double)(1089/100));
+ g_hmAr.put("ar2", (double)(1089/3600));
+ g_hmAr.put("ar3", (double)(1089/1080000));
+ g_hmAr.put("ar4", (double)(1089/10800000));
+ g_hmAr.put("ar5", (double)1);
+ g_hmAr.put("ar6", 0.01);
+ g_hmAr.put("ar7", (1/Math.pow(2.54*12/100,2)));
+ g_hmAr.put("ar8", (1/Math.pow(2.54*36/100,2)));
+ g_hmAr.put("ar9", (1/(Math.pow(2.54*36/100,2)*4840)));
+ g_hmAr.put("ar10", 0.0001);
+
+ //무게
+ g_hmWt.put("wt0", (double)0);
+ g_hmWt.put("wt1", (double)1);
+ g_hmWt.put("wt2", (double)1000);
+ g_hmWt.put("wt3", 0.001);
+ g_hmWt.put("wt4", 0.000001);
+ g_hmWt.put("wt5", (1/0.06479891));
+ g_hmWt.put("wt6", (16/453.59237));
+ g_hmWt.put("wt7", (1/453.59237));
+ g_hmWt.put("wt8", (1/3.75));
+ g_hmWt.put("wt9", (1/37.5));
+ g_hmWt.put("wt10", (double)(1/600));
+ g_hmWt.put("wt11", (double)(1/3750));
+ }
+
+ /**
+ * 길이단위를 환산하여 리턴한다.
+ * @param nLength -길이
+ * @param sLengthUnit-길이 단위
+ * @param sLengthUnitAs-길이 환산 단위
+ * @return double -환산된 길이
+ */
+ public double convertLengthCalcUnit(double nLength, String sLengthUnit, String sLengthUnitAs){
+
+ double nSelAr = g_hmVt.get(sLengthUnit);
+ double nSelArAs = g_hmVt.get(sLengthUnitAs);
+
+ return (nSelArAs / nSelAr) * nLength;
+ }
+
+ /**
+ * 부피단위를 환산하여 리턴한다.
+ * @param nVolume -부피
+ * @param sVolumeUnit-부피 단위
+ * @param sVolumeUnitAs-부피 환산 단위
+ * @return double -환산된 부피
+ */
+ public double convertVolumeCalcUnit(double nVolume, String sVolumeUnit, String sVolumeUnitAs){
+
+ double nSelVl = g_hmVl.get(sVolumeUnit);
+ double nSelVlAs = g_hmVl.get(sVolumeUnitAs);
+
+ return (nSelVl / nSelVlAs) * nVolume;
+ }
+
+ /**
+ * 무게단위를 환산하여 리턴한다.
+ * @param nWeight -무게
+ * @param sWeightUnit -무게 단위
+ * @param sWeightUnitAs -무게 환산 단위
+ * @return double -환산된 무게
+ */
+ public double convertWeightCalcUnit(double nWeight, String sWeightUnit, String sWeightUnitAs){
+
+ double nSelWt = g_hmAr.get(sWeightUnit);
+ double nSelWtAs = g_hmAr.get(sWeightUnitAs);
+
+ return (nSelWt / nSelWtAs) * nWeight;
+ }
+
+ /**
+ * 넓이단위를 환산하여 리턴한다.
+ * @param nWidth -넓이
+ * @param sWidthUnit-넓이 단위
+ * @param sWidthUnitAs-넓이 환산 단위
+ * @return double -환산된 넓이
+ */
+ public double convertWidthCalcUnit(double nWidth, String sWidthUnit, String sWidthUnitAs){
+
+ double nSelAr = g_hmWt.get(sWidthUnit);
+ double nSelArAs = g_hmWt.get(sWidthUnitAs);
+
+ return (nSelAr / nSelArAs) * nWidth;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/fda/ucc/service/EgovUnitCalcUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/slm/EgovHttpSessionBindingListener.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/slm/EgovHttpSessionBindingListener.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/slm/EgovHttpSessionBindingListener.java (revision 7)
@@ -0,0 +1,42 @@
+package egovframework.com.utl.slm;
+
+import javax.servlet.http.HttpSessionBindingEvent;
+import javax.servlet.http.HttpSessionBindingListener;
+
+/**
+ * @Class Name : EgovHttpSessionBindingListener.java
+ * @Description : 중복 로그인 방지를 위해 사용자의 로그인 아이디와 세션을 제어하는 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2014.09.30 표준프레임워크 최초생성
+* @author YJ Kwon
+ * @since 2014.09.30
+ * @version 3.5
+ */
+public class EgovHttpSessionBindingListener implements HttpSessionBindingListener {
+
+ /**
+ * 사용자의 로그인 세션에 EgovHttpSessionBindingListener가 바인딩될 때 자동 호출되는 메소드로,
+ * 사용자 세션이 이미 존재하는지를 검사하여 하나의 어플리케이션 내에서 하나의 세션만 유지되도록 한다
+ * */
+ @Override
+ public void valueBound(HttpSessionBindingEvent event) {
+ if (EgovMultiLoginPreventor.findByLoginId(event.getName())) {
+ EgovMultiLoginPreventor.invalidateByLoginId(event.getName());
+ }
+ EgovMultiLoginPreventor.loginUsers.put(event.getName(), event.getSession());
+ }
+
+ /**
+ *
+ * 로그아웃 혹은 세션타임아웃 설정에 따라 사용자 세션으로부터
+ * EgovHttpSessionBindingListener가 제거될 때 자동 호출되는 메소드로,
+ * 사용자의 로그인 아이디에 해당하는 세션을 ConcurrentHashMap에서 모두 제거한다
+ * */
+ @Override
+ public void valueUnbound(HttpSessionBindingEvent event) {
+ EgovMultiLoginPreventor.loginUsers.remove(event.getName(), event.getSession());
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/slm/EgovHttpSessionBindingListener.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/slm/EgovMultiLoginPreventor.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/slm/EgovMultiLoginPreventor.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/slm/EgovMultiLoginPreventor.java (revision 7)
@@ -0,0 +1,43 @@
+package egovframework.com.utl.slm;
+
+import java.util.Enumeration;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.servlet.http.HttpSession;
+
+/**
+ * @Class Name : EgovMultiLoginPreventor.java
+ * @Description : 중복 로그인 방지를 위해 사용자의 로그인 아이디와 세션 아이디를 관리하는 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- ------- -------------------
+ * 2014.09.30 표준프레임워크 최초생성
+* @author YJ Kwon
+ * @since 2014.09.30
+ * @version 3.5
+ */
+public class EgovMultiLoginPreventor {
+
+ public static ConcurrentHashMap<String, HttpSession> loginUsers = new ConcurrentHashMap<String, HttpSession>();
+
+ /**
+ * 사용자의 로그인 아이디로 생성된 세션이 있는지를 확인한다
+ * */
+ public static boolean findByLoginId(String loginId) {
+ return loginUsers.containsKey(loginId);
+ }
+
+ /**
+ * 사용자의 로그인 아이디로 이미 존재하는 세션을 무효화한다
+ * */
+ public static void invalidateByLoginId(String loginId) {
+ Enumeration<String> e = loginUsers.keys();
+ while (e.hasMoreElements()) {
+ String key = (String) e.nextElement();
+ if (key.equals(loginId)) {
+ loginUsers.get(key).invalidate();
+ }
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/slm/EgovMultiLoginPreventor.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/cas/service/EgovMessageUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/cas/service/EgovMessageUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/cas/service/EgovMessageUtil.java (revision 7)
@@ -0,0 +1,137 @@
+/**
+ * @Class Name : EgovMessageUtil.java
+ * @Description : 메시지 처리 관련 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.13 이삼섭 최초 생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 02. 13
+ * @version 1.0
+ * @see
+ *
+ */
+
+package egovframework.com.utl.cas.service;
+
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+
+public class EgovMessageUtil {
+
+ private static final String PATH_SEP = System.getProperty("file.separator");
+
+ /**
+ * 해당되는 속성키로부터 에러 메시지를 얻는다.
+ *
+ * @param strCode
+ * @return
+ */
+ public static String getErrorMsg(String strCode) {
+
+ return getMessage("error", strCode, null);
+ }
+
+ /**
+ * 해당되는 속성키로부터 에러 메시지(파라미터 변환 포함)를 얻는다.
+ *
+ * @param strCode
+ * @param arrParam
+ * @return
+ */
+ public static String getErrorMsg(String strCode, String[] arrParam) {
+
+ return getMessage("error", strCode, arrParam);
+ }
+
+ /**
+ * 해당되는 속성키로부터 정보 메시지를 얻는다.
+ *
+ * @param strCode
+ * @return
+ */
+ public static String getInfoMsg(String strCode) {
+
+ return getMessage("info", strCode, null);
+ }
+
+ /**
+ *해당되는 속성키로부터 정보 메시지(파라미터 변환 포함)를 얻는다.
+ *
+ * @param strCode
+ * @param arrParam
+ * @return
+ */
+ public static String getInfoMsg(String strCode, String[] arrParam) {
+
+ return getMessage("info", strCode, arrParam);
+ }
+
+ /**
+ * 해당되는 속성키로부터 경고 메시지를 얻는다.
+ *
+ * @param strCode
+ * @return
+ */
+ public static String getWarnMsg(String strCode) {
+
+ return getMessage("warn", strCode, null);
+ }
+
+ /**
+ * 해당되는 속성키로부터 경고 메시지(파라미터 변환 포함)를 얻는다.
+ *
+ * @param strCode
+ * @param arrParam
+ * @return
+ */
+ public static String getWarnMsg(String strCode, String[] arrParam) {
+
+ return getMessage("warn", strCode, arrParam);
+ }
+
+ /**
+ * 해당되는 속성키로부터 확인 메시지를 얻는다.
+ *
+ * @param strCode
+ * @return
+ */
+ public static String getConfirmMsg(String strCode) {
+
+ return getMessage("confirm", strCode, null);
+ }
+
+ /**
+ * 해당되는 속성키로부터 확인 메시지(파라미터 변환 포함)를 얻는다.
+ *
+ * @param strCode
+ * @param arrParam
+ * @return
+ */
+ public static String getConfirmMsg(String strCode, String[] arrParam) {
+
+ return getMessage("confirm", strCode, arrParam);
+ }
+
+ private static String getMessage(String wrkCode, String strCode, String[] arrParam) {
+
+ String message = null;
+
+ String strMsg = "";
+ if (!"".equals(EgovStringUtil.isNullToString(strCode.trim()))) {
+
+ strMsg = EgovProperties.getProperty(EgovProperties.RELATIVE_PATH_PREFIX + "egovProps" + PATH_SEP + "conf" + PATH_SEP + wrkCode + "message.properties", strCode);
+
+ for (int i = (arrParam != null && arrParam.length > 0 ? arrParam.length - 1 : -1); i >= 0; i--) {
+ strMsg = EgovStringUtil.replace(EgovStringUtil.isNullToString(strMsg), "{" + i + "}", arrParam[i]);//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ }
+ message = strMsg;
+ } else {
+ message = "";
+ }
+
+ return message;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/cas/service/EgovMessageUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/cas/service/EgovSessionCookieUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/cas/service/EgovSessionCookieUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/cas/service/EgovSessionCookieUtil.java (revision 7)
@@ -0,0 +1,230 @@
+/**
+ * @Class Name : EgovSessionUtil.java
+ * @Description : 세션 처리 관련 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.13 이삼섭 최초 생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 02. 13
+ * @version 1.0
+ * @see
+ *
+ */
+
+package egovframework.com.utl.cas.service;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.Enumeration;
+
+import egovframework.com.cmm.EgovWebUtil;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+public class EgovSessionCookieUtil {
+
+ /**
+ * HttpSession에 주어진 키 값으로 세션 정보를 생성하는 기능
+ *
+ * @param request
+ * @param keyStr - 세션 키
+ * @param valStr - 세션 값
+ * @throws Exception
+ */
+ public static void setSessionAttribute(HttpServletRequest request, String keyStr, String valStr) throws Exception {
+
+ HttpSession session = request.getSession();
+ session.setAttribute(keyStr, valStr);
+ }
+
+ /**
+ * HttpSession에 주어진 키 값으로 세션 객체를 생성하는 기능
+ *
+ * @param request
+ * @param keyStr - 세션 키
+ * @param valStr - 세션 값
+ * @throws Exception
+ */
+ public static void setSessionAttribute(HttpServletRequest request, String keyStr, Object obj) throws Exception {
+
+ HttpSession session = request.getSession();
+ session.setAttribute(keyStr, obj);
+ }
+
+ /**
+ * HttpSession에 존재하는 주어진 키 값에 해당하는 세션 값을 얻어오는 기능
+ *
+ * @param request
+ * @param keyStr - 세션 키
+ * @return
+ * @throws Exception
+ */
+ public static Object getSessionAttribute(HttpServletRequest request, String keyStr) throws Exception {
+
+ HttpSession session = request.getSession();
+ return session.getAttribute(keyStr);
+ }
+
+ /**
+ * HttpSession 객체내의 모든 값을 호출하는 기능
+ *
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ public static String getSessionValuesString(HttpServletRequest request) throws Exception {
+ HttpSession session = request.getSession();
+ String returnVal = "";
+
+ Enumeration<?> e = session.getAttributeNames();
+ while (e.hasMoreElements()) {
+ String sessionKey = (String) e.nextElement();
+ returnVal = returnVal + "[" + sessionKey + " : " + session.getAttribute(sessionKey) + "]";
+ }
+
+ return returnVal;
+ }
+
+ /**
+ * HttpSession에 존재하는 세션을 주어진 키 값으로 삭제하는 기능
+ *
+ * @param request
+ * @param keyStr - 세션 키
+ * @throws Exception
+ */
+ public static void removeSessionAttribute(HttpServletRequest request, String keyStr) throws Exception {
+
+ HttpSession session = request.getSession();
+ session.removeAttribute(keyStr);
+ }
+
+ /**
+ * 쿠키생성 - 입력받은 분만큼 쿠키를 유지되도록 세팅한다.
+ * 쿠키의 유효시간을 5분으로 설정 =>(cookie.setMaxAge(60 * 5)
+ * 쿠키의 유효시간을 10일로 설정 =>(cookie.setMaxAge(60 * 60 * 24 * 10)
+ *
+ * @param response - Response
+ * @param cookieNm - 쿠키명
+ * @param cookieValue - 쿠키값
+ * @param minute - 지속시킬 시간(분)
+ * @return
+ * @exception
+ * @see
+ */
+ public static void setCookie(HttpServletResponse response, String cookieNm, String cookieVal, int minute) throws UnsupportedEncodingException {
+
+ // 특정의 encode 방식을 사용해 캐릭터 라인을 application/x-www-form-urlencoded 형식으로 변환
+ // 일반 문자열을 웹에서 통용되는 'x-www-form-urlencoded' 형식으로 변환하는 역할
+ String cookieValue = URLEncoder.encode(cookieVal, "utf-8");
+
+ // 쿠키생성 - 쿠키의 이름, 쿠키의 값
+ Cookie cookie = new Cookie(cookieNm, cookieValue);
+
+ cookie.setSecure(true);
+
+ // 쿠키의 유효시간 설정
+ int maxAge = 60 * minute;
+ // KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if(maxAge > 60 * 60 * 24) {
+ maxAge = 60 * 60 * 24;
+ }
+ cookie.setMaxAge(maxAge);
+
+ // response 내장 객체를 이용해 쿠키를 전송
+ response.addCookie(cookie);
+ }
+
+ /**
+ * 쿠키생성 - 쿠키의 유효시간을 설정하지 않을 경우 쿠키의 생명주기는 브라우저가 종료될 때까지
+ *
+ * @param response - Response
+ * @param cookieNm - 쿠키명
+ * @param cookieValue - 쿠키값
+ * @return
+ * @exception
+ * @see
+ */
+
+ public static void setCookie(HttpServletResponse response, String cookieNm, String cookieVal) throws UnsupportedEncodingException {
+
+ // 특정의 encode 방식을 사용해 캐릭터 라인을 application/x-www-form-urlencoded 형식으로 변환
+ // 일반 문자열을 웹에서 통용되는 'x-www-form-urlencoded' 형식으로 변환하는 역할
+ String cookieValue = URLEncoder.encode(cookieVal, "utf-8");
+
+ // 쿠키생성
+ Cookie cookie = new Cookie(EgovWebUtil.removeCRLF(cookieNm), EgovWebUtil.removeCRLF(cookieValue));
+
+ // 2011.10.10 보안점검 후속조치
+ cookie.setSecure(true);
+
+ // response 내장 객체를 이용해 쿠키를 전송
+ response.addCookie(cookie);
+ }
+
+ /**
+ * 쿠키값 사용 - 쿠키값을 읽어들인다.
+ *
+ * @param request - Request
+ * @param name - 쿠키명
+ * @return 쿠키값
+ * @exception
+ * @see
+ */
+ public static String getCookie(HttpServletRequest request, String cookieNm) throws Exception {
+
+ // 한 도메인에서 여러 개의 쿠키를 사용할 수 있기 때문에 Cookie[] 배열이 반환
+ // Cookie를 읽어서 Cookie 배열로 반환
+ Cookie[] cookies = request.getCookies();
+
+ if (cookies == null)
+ return "";
+
+ String cookieValue = null;
+
+ // 입력받은 쿠키명으로 비교해서 쿠키값을 얻어낸다.
+ for (int i = 0; i < cookies.length; i++) {
+
+ if (cookieNm.equals(cookies[i].getName())) {
+
+ // 특별한 encode 방식을 사용해 application/x-www-form-urlencoded 캐릭터 라인을 디코드
+ // URLEncoder로 인코딩된 결과를 디코딩하는 클래스
+ cookieValue = URLDecoder.decode(cookies[i].getValue(), "utf-8");
+
+ break;
+ }
+ }
+
+ return cookieValue;
+ }
+
+ /**
+ * 쿠키값 삭제 - cookie.setMaxAge(0) - 쿠키의 유효시간을 0으로 설정해 줌으로써 쿠키를 삭제하는 것과 동일한 효과
+ *
+ * @param request - Request
+ * @param name - 쿠키명
+ * @return 쿠키값
+ * @exception
+ * @see
+ */
+ public static void setCookie(HttpServletResponse response, String cookieNm) throws UnsupportedEncodingException {
+
+ // 쿠키생성 - 쿠키의 이름, 쿠키의 값
+ Cookie cookie = new Cookie(EgovWebUtil.removeCRLF(cookieNm), null);
+
+ cookie.setSecure(true);
+
+ // 쿠키를 삭제하는 메소드가 따로 존재하지 않음
+ // 쿠키의 유효시간을 0으로 설정해 줌으로써 쿠키를 삭제하는 것과 동일한 효과
+ cookie.setMaxAge(0);
+
+ // response 내장 객체를 이용해 쿠키를 전송
+ response.addCookie(cookie);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/cas/service/EgovSessionCookieUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovEhgtCalcUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovEhgtCalcUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovEhgtCalcUtil.java (revision 7)
@@ -0,0 +1,294 @@
+/**
+ * @Class Name : EgovEhgtCalcUtil.java
+ * @Description : 대한민국, 미국,유럽연합, 일본, 중국연합 사이의 환율계산기능을
+ * 제공하는 Business Interface class
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.01.13 박정규 최초 생성
+ *
+ * @author 공통 서비스 개발팀 박정규
+ * @since 2009. 01. 13
+ * @version 1.0
+ * @see
+ *
+ */
+
+package egovframework.com.utl.fcc.service;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.parser.ParserDelegator;
+
+public class EgovEhgtCalcUtil {
+
+ // 환율....
+ static final char EGHT_USD = 'U'; // 미국
+ static final char EGHT_JPY = 'J'; // 일본
+ static final char EGHT_EUR = 'E'; // 유럽연합
+ static final char EGHT_CNY = 'C'; // 중국연합
+
+ static final char EGHT_KWR = 'K'; // 대한민국
+
+ static StringBuffer sb = new StringBuffer();
+
+ /**
+ * 대한민국(KRW), 미국(USD), 유럽연합(EUR), 일본(JPY), 중국원화(CNY) 사이의 환율을 계산하는 기능이다
+ * 환율표 - 매매기준율 => 미국(USD) - 1485.00(USD), 일본-100(JPY) - 1596.26(JPY)
+ * 계산법: 대한민원(KRW) - 1,000원 -> 미국(USD)로 변환 시 => 1,000(원)/1485(매매기준율) = 0.67(URS)
+ * 계산법: 일본(JPY) - 100,000원 -> 대한민국(KRW) 변환 시 => (100,000(원) * 1596.26(매매기준율)) / 100(100엔당 기준표이므로) = 1,596,260.00 (KRW)
+ * 계산법: 일본(JPY) - 100,000원 -> 미국(USD) 변환 시 => (
+ * (100,000(원) * 1596.26(매매기준율)) / 100(100엔당 기준표이므로) = 1,596,260.00 (KRW)) / 1,485.00 = 1,074.92 (USD)
+ * @param srcType - 환율기준
+ * @param srcAmount - 금액
+ * @param cnvrType - 변환환율
+ * @return 환율금액
+ * @exception MyException
+ * @see
+ */
+ public void readHtmlParsing(String str) {
+ HttpURLConnection con = null;
+ InputStream is = null;
+ InputStreamReader reader = null;
+ try {
+ //입력받은 URL에 연결하여 InputStream을 통해 읽은 후 파싱 한다.
+ URL url = new URL(str);
+
+ con = (HttpURLConnection) url.openConnection();
+
+ is = con.getInputStream();
+ reader = new InputStreamReader(is, "euc-kr");
+ //InputStreamReader reader = new InputStreamReader(con.getInputStream(), "utf-8");
+
+ new ParserDelegator().parse(reader, new CallbackHandler(), true);
+
+ con.disconnect();
+
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } finally {
+ EgovResourceCloseHelper.close(reader, is);
+
+ if (con != null) {
+ con.disconnect();
+ }
+ }
+ }
+
+ //파서는 콜백 형식으로 되어 있다. 각 태그가 들어 올때 적절한 메소드가 호출됨
+ private class CallbackHandler extends HTMLEditorKit.ParserCallback {
+
+ public void handleText(char[] data, int pos) {
+
+ String srcStr = new String(data);
+
+ srcStr = EgovStringUtil.strip(srcStr, " ");
+
+ sb.append(srcStr).append("/");
+ }
+ }
+
+ public static String getEhgtCalc(String srcType, long srcAmount, String cnvrType) throws Exception {
+
+ String rtnStr = null;
+
+ String[] eghtStdrRt = null; // Html에서 파싱한 환율매매기준율을 저장하기 위한 문자열배열
+
+ double srcStdrRt = 0.00; // 원래 매매기준율
+ double cnvrStdrRt = 0.00; // 변환 매매기준율
+
+ //double cnvrAmount = 0.00; // 변환금액
+ String sCnvrAmount = null; // 변환금액
+
+ String srcStr = null;
+ String cnvrStr = null;
+
+ String srcTypeCnvr = srcType.toUpperCase();
+ String cnvrTypeCnvr = cnvrType.toUpperCase();
+
+ EgovEhgtCalcUtil parser = new EgovEhgtCalcUtil();
+
+ parser.readHtmlParsing("http://community.fxkeb.com/fxportal/jsp/RS/DEPLOY_EXRATE/4176_0.html");
+
+ if (sb == null) {
+ throw new RuntimeException("StringBuffer is null!!");
+ }
+
+ eghtStdrRt = EgovStringUtil.split(sb.toString(), "/");
+
+ if (eghtStdrRt == null || (eghtStdrRt.length == 0))
+ throw new RuntimeException("String Split Error!");
+
+ char srcChr = srcTypeCnvr.charAt(0);
+ char cnvrChr = cnvrTypeCnvr.charAt(0);
+
+ // 원래 환율기준 정의
+ switch (srcChr) {
+
+ case EGHT_USD: // 미국
+ srcStr = "USD";
+ break;
+
+ case EGHT_JPY: // 일본
+ srcStr = "JPY";
+ break;
+
+ case EGHT_EUR: // 유럽연합
+ srcStr = "EUR";
+ break;
+
+ case EGHT_CNY: // 중국연합
+ srcStr = "CNY";
+ break;
+
+ default:
+ srcStr = "USD";
+ break;
+ }
+
+ // 변환하고자 하는 환율기준 정의
+ switch (cnvrChr) {
+
+ case EGHT_USD: // 미국
+ cnvrStr = "USD";
+ break;
+
+ case EGHT_JPY: // 일본
+ cnvrStr = "JPY";
+ break;
+
+ case EGHT_EUR: // 유럽연합
+ cnvrStr = "EUR";
+ break;
+
+ case EGHT_CNY: // 중국연합
+ cnvrStr = "CNY";
+ break;
+
+ default:
+ cnvrStr = "KRW";
+ break;
+ }
+
+ // 변환하고자 하는 국가의 환율매매기준율 추출...
+ for (int i = 0; i < eghtStdrRt.length; i++) {
+
+ // 원래 매매기준율 추출
+ if (eghtStdrRt[i].equals(srcStr)) {
+ srcStdrRt = Double.parseDouble(eghtStdrRt[i + 1]);
+
+ if (i == (eghtStdrRt.length - 1))
+ break;
+ }
+
+ // 변환 매매기준율 추출
+ if (eghtStdrRt[i].equals(cnvrStr)) {
+ cnvrStdrRt = Double.parseDouble(eghtStdrRt[i + 1]);
+
+ if (i == (eghtStdrRt.length - 1))
+ break;
+ }
+ }
+
+ // 정확한 계산을 위한 BigDecimal 형태로 구현.
+ BigDecimal bSrcAmount = new BigDecimal(String.valueOf(srcAmount)); // 변환하고자 하는 금액
+ BigDecimal bSrcStdrRt = new BigDecimal(String.valueOf(srcStdrRt)); // 원래 매매 비율
+ BigDecimal bCnvrStdrRt = new BigDecimal(String.valueOf(cnvrStdrRt)); // 변환 매매 비율
+ BigDecimal bStdr = new BigDecimal("100"); // 변환 매매 비율
+
+ // 원래 매매기준율 및 변환매매기준율 기준으로 환율금액 계산
+ switch (srcChr) {
+
+ case EGHT_KWR: // 대한민국
+ if (cnvrChr == 'K')
+ //변환금액 = 변환대상금액;
+ sCnvrAmount = bSrcAmount.toString();
+ else if (cnvrChr == 'J')
+ //변환금액 = (변환대상금액 / 변환매매비율) * 100;
+ sCnvrAmount = (bSrcAmount.divide(bCnvrStdrRt, 4, 4)).multiply(bStdr).setScale(2, 4).toString();
+ else
+ //변환금액 = (변환대상금액 / 변환매매비율);
+ sCnvrAmount = bSrcAmount.divide(bCnvrStdrRt, 2, 4).toString();
+ break;
+
+ case EGHT_USD: // 미국
+ if (cnvrChr == 'U')
+ //변환금액 = 변환대상금액;
+ sCnvrAmount = bSrcAmount.toString();
+ else if (cnvrChr == 'K')
+ //변환금액 = 변환대상금액 * 원래 매매 비율;
+ sCnvrAmount = bSrcAmount.multiply(bSrcStdrRt).setScale(2, 4).toString();
+ else if (cnvrChr == 'J')
+ //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 변환 매매 비율) * 100;
+ sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4)).multiply(bStdr).setScale(2, 4).toString();
+ else
+ //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 변환 매매 비율;
+ sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4).toString();
+ break;
+
+ case EGHT_EUR: // 유럽연합
+ if (cnvrChr == 'E')
+ //변환금액 = 변환대상금액;
+ sCnvrAmount = bSrcAmount.toString();
+ else if (cnvrChr == 'K')
+ //cnvrAmount = 변환대상금액 * 원래 매매 비율;
+ sCnvrAmount = bSrcAmount.multiply(bSrcStdrRt).setScale(2, 4).toString();
+ else if (cnvrChr == 'J')
+ //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 변환 매매 비율) * 100;
+ sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4)).multiply(bStdr).setScale(2, 4).toString();
+ else
+ //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 변환 매매 비율;
+ sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4).toString();
+ break;
+
+ case EGHT_JPY: // 일본
+ if (cnvrChr == 'J')
+ //변환금액 = 변환대상금액;
+ sCnvrAmount = bSrcAmount.toString();
+ else if (cnvrChr == 'K')
+ //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 100;
+ sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bStdr, 2, 4).toString();
+ else
+ //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 100) / 변환 매매 비율;
+ sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bStdr, 2, 4)).divide(bCnvrStdrRt, 2, 4).toString();
+ break;
+
+ case EGHT_CNY: // 중국연합
+ if (cnvrChr == 'C')
+ //변환금액 = 변환대상금액;
+ sCnvrAmount = bSrcAmount.toString();
+ else if (cnvrChr == 'K')
+ //cnvrAmount = 변환대상금액 * 원래 매매 비율;
+ sCnvrAmount = bSrcAmount.multiply(bSrcStdrRt).setScale(2, 4).toString();
+ else if (cnvrChr == 'J')
+ //cnvrAmount = ((변환대상금액 * 원래 매매 비율) / 변환 매매 비율) * 100;
+ sCnvrAmount = ((bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4)).multiply(bStdr).setScale(2, 4).toString();
+ else
+ //cnvrAmount = (변환대상금액 * 원래 매매 비율) / 변환 매매 비율;
+ sCnvrAmount = (bSrcAmount.multiply(bSrcStdrRt).setScale(4, 4)).divide(bCnvrStdrRt, 2, 4).toString();
+ break;
+
+ default:
+ //변환금액 = (변환대상금액 / 변환매매비율);
+ sCnvrAmount = bSrcAmount.divide(bCnvrStdrRt, 2, 4).toString();
+ break;
+ }
+
+ rtnStr = sCnvrAmount + " " + cnvrStr;
+
+ return rtnStr;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovEhgtCalcUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateFormat.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateFormat.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateFormat.java (revision 7)
@@ -0,0 +1,146 @@
+package egovframework.com.utl.fcc.service;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * 날짜 및 시간에 대한 변환을 수행하는 클래스
+ */
+public class EgovDateFormat {
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 날짜를 변환한다.
+ *
+ * @param date 날짜
+ * @return 날짜 문자열
+ */
+ public static String formatDate(Date date) {
+ return DateFormat.getDateInstance().format(date);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 날짜를 변환한다.
+ *
+ * @param locale 로케일
+ * @param date 날짜
+ * @return 날짜 문자열
+ */
+ public static String formatDate(Locale locale, Date date) {
+ return DateFormat.getDateInstance(DateFormat.DEFAULT, locale).format(date);
+ }
+
+ /**
+ * 주어진 스타일에 따라, 기본 Locale에 해당하는 형식으로 날짜를 변환한다.
+ *
+ * @param style 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param date 날짜
+ * @return 날짜 문자열
+ */
+ public static String formatDate(int style, Date date) {
+ return DateFormat.getDateInstance(style).format(date);
+ }
+
+ /**
+ * 주어진 스타일에 따라, Locale에 해당하는 형식으로 날짜를 변환한다.
+ *
+ * @param style 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param locale 로케일
+ * @param date 날짜
+ * @return 날짜 문자열
+ */
+ public static String formatDate(int style, Locale locale, Date date) {
+ return DateFormat.getDateInstance(style, locale).format(date);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 날짜 및 시간을 변환한다.
+ *
+ * @param date 날짜 및 시간
+ * @return 날짜 및 시간 문자열
+ */
+ public static String formatDateTime(Date date) {
+ return DateFormat.getDateTimeInstance().format(date);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 날짜 및 시간을 변환한다.
+ *
+ * @param locale 로케일
+ * @param date 날짜 및 시간
+ * @return 날짜 및 시간 문자열
+ */
+ public static String formatDateTime(Locale locale, Date date) {
+ return DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, locale).format(date);
+ }
+
+ /**
+ * 주어진 스타일에 따라, 기본 Locale에 해당하는 형식으로 날짜 및 시간을 변환한다.
+ *
+ * @param dateStyle 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param timeStyle 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param date 날짜 및 시간
+ * @return 날짜 및 시간 문자열
+ */
+ public static String formatDateTime(int dateStyle, int timeStyle, Date date) {
+ return DateFormat.getDateTimeInstance(dateStyle, timeStyle).format(date);
+ }
+
+ /**
+ * 주어진 스타일에 따라, Locale에 해당하는 형식으로 날짜 및 시간을 변환한다.
+ *
+ * @param dateStyle 날짜 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param timeStyle 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param locale 로케일
+ * @param date 날짜 및 시간
+ * @return 날짜 및 시간 문자열
+ */
+ public static String formatDateTime(int dateStyle, int timeStyle, Locale locale, Date date) {
+ return DateFormat.getDateTimeInstance(dateStyle, timeStyle, locale).format(date);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 시간을 변환한다.
+ *
+ * @param date 시간
+ * @return 시간 문자열
+ */
+ public static String formatTime(Date date) {
+ return DateFormat.getTimeInstance().format(date);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 시간을 변환한다.
+ *
+ * @param locale 로케일
+ * @param date 시간
+ * @return 시간 문자열
+ */
+ public static String formatTime(Locale locale, Date date) {
+ return DateFormat.getTimeInstance(DateFormat.DEFAULT, locale).format(date);
+ }
+
+ /**
+ * 주어진 스타일에 따라, 기본 Locale에 해당하는 형식으로 시간을 변환한다.
+ *
+ * @param style 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param date 시간
+ * @return 시간 문자열
+ */
+ public static String formatTime(int style, Date date) {
+ return DateFormat.getTimeInstance(style).format(date);
+ }
+
+ /**
+ * 주어진 스타일에 따라, Locale에 해당하는 형식으로 시간을 변환한다.
+ *
+ * @param style 시간 스타일 (사용 가능한 값 : {@link DateFormat#FULL}, {@link DateFormat#LONG}, {@link DateFormat#MEDIUM}, {@link DateFormat#SHORT}, {@link DateFormat#DEFAULT})
+ * @param locale 로케일
+ * @param date 시간
+ * @return 시간 문자열
+ */
+ public static String formatTime(int style, Locale locale, Date date) {
+ return DateFormat.getTimeInstance(style, locale).format(date);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateFormat.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovStringUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovStringUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovStringUtil.java (revision 7)
@@ -0,0 +1,904 @@
+/**
+ * @Class Name : EgovStringUtil.java
+ * @Description : 문자열 데이터 처리 관련 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.01.13 박정규 최초 생성
+ * 2009.02.13 이삼섭 내용 추가
+ *
+ * @author 공통 서비스 개발팀 박정규
+ * @since 2009. 01. 13
+ * @version 1.0
+ * @see
+ *
+ */
+
+package egovframework.com.utl.fcc.service;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the ";License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS"; BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.security.SecureRandom;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+public class EgovStringUtil {
+ /**
+ * 빈 문자열 <code>""</code>.
+ */
+ public static final String EMPTY = "";
+
+ /**
+ * <p>Padding을 할 수 있는 최대 수치</p>
+ */
+ // private static final int PAD_LIMIT = 8192;
+
+ /**
+ * <p>An array of <code>String</code>s used for padding.</p>
+ * <p>Used for efficient space padding. The length of each String expands as needed.</p>
+ */
+ /*
+ private static final String[] PADDING = new String[Character.MAX_VALUE];
+
+ static {
+ // space padding is most common, start with 64 chars
+ PADDING[32] = " ";
+ }
+ */
+
+ /**
+ * 문자열이 지정한 길이를 초과했을때 지정한길이에다가 해당 문자열을 붙여주는 메서드.
+ * @param source 원본 문자열 배열
+ * @param output 더할문자열
+ * @param slength 지정길이
+ * @return 지정길이로 잘라서 더할분자열 합친 문자열
+ */
+ public static String cutString(String source, String output, int slength) {
+ String returnVal = null;
+ if (source != null) {
+ if (source.length() > slength) {
+ returnVal = source.substring(0, slength) + output;
+ } else
+ returnVal = source;
+ }
+ return returnVal;
+ }
+
+ /**
+ * 문자열이 지정한 길이를 초과했을때 해당 문자열을 삭제하는 메서드
+ * @param source 원본 문자열 배열
+ * @param slength 지정길이
+ * @return 지정길이로 잘라서 더할분자열 합친 문자열
+ */
+ public static String cutString(String source, int slength) {
+ String result = null;
+ if (source != null) {
+ if (source.length() > slength) {
+ result = source.substring(0, slength);
+ } else
+ result = source;
+ }
+ return result;
+ }
+
+ /**
+ * <p>
+ * String이 비었거나("") 혹은 null 인지 검증한다.
+ * </p>
+ *
+ * <pre>
+ * StringUtil.isEmpty(null) = true
+ * StringUtil.isEmpty("") = true
+ * StringUtil.isEmpty(" ") = false
+ * StringUtil.isEmpty("bob") = false
+ * StringUtil.isEmpty(" bob ") = false
+ * </pre>
+ *
+ * @param str - 체크 대상 스트링오브젝트이며 null을 허용함
+ * @return <code>true</code> - 입력받은 String 이 빈 문자열 또는 null인 경우
+ */
+ public static boolean isEmpty(String str) {
+ return str == null || str.length() == 0;
+ }
+
+ /**
+ * <p>기준 문자열에 포함된 모든 대상 문자(char)를 제거한다.</p>
+ *
+ * <pre>
+ * StringUtil.remove(null, *) = null
+ * StringUtil.remove("", *) = ""
+ * StringUtil.remove("queued", 'u') = "qeed"
+ * StringUtil.remove("queued", 'z') = "queued"
+ * </pre>
+ *
+ * @param str 입력받는 기준 문자열
+ * @param remove 입력받는 문자열에서 제거할 대상 문자열
+ * @return 제거대상 문자열이 제거된 입력문자열. 입력문자열이 null인 경우 출력문자열은 null
+ */
+ public static String remove(String str, char remove) {
+ if (isEmpty(str) || str.indexOf(remove) == -1) {
+ return str;
+ }
+ char[] chars = str.toCharArray();
+ int pos = 0;
+ for (int i = 0; i < chars.length; i++) {
+ if (chars[i] != remove) {
+ chars[pos++] = chars[i];
+ }
+ }
+ return new String(chars, 0, pos);
+ }
+
+ /**
+ * <p>문자열 내부의 콤마 character(,)를 모두 제거한다.</p>
+ *
+ * <pre>
+ * StringUtil.removeCommaChar(null) = null
+ * StringUtil.removeCommaChar("") = ""
+ * StringUtil.removeCommaChar("asdfg,qweqe") = "asdfgqweqe"
+ * </pre>
+ *
+ * @param str 입력받는 기준 문자열
+ * @return " , "가 제거된 입력문자열
+ * 입력문자열이 null인 경우 출력문자열은 null
+ */
+ public static String removeCommaChar(String str) {
+ return remove(str, ',');
+ }
+
+ /**
+ * <p>문자열 내부의 마이너스 character(-)를 모두 제거한다.</p>
+ *
+ * <pre>
+ * StringUtil.removeMinusChar(null) = null
+ * StringUtil.removeMinusChar("") = ""
+ * StringUtil.removeMinusChar("a-sdfg-qweqe") = "asdfgqweqe"
+ * </pre>
+ *
+ * @param str 입력받는 기준 문자열
+ * @return " - "가 제거된 입력문자열
+ * 입력문자열이 null인 경우 출력문자열은 null
+ */
+ public static String removeMinusChar(String str) {
+ return remove(str, '-');
+ }
+
+ /**
+ * 원본 문자열의 포함된 특정 문자열을 새로운 문자열로 변환하는 메서드
+ * @param source 원본 문자열
+ * @param subject 원본 문자열에 포함된 특정 문자열
+ * @param object 변환할 문자열
+ * @return sb.toString() 새로운 문자열로 변환된 문자열
+ */
+ public static String replace(String source, String subject, String object) {
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+ String srcStr = source;
+
+ while (srcStr.indexOf(subject) >= 0) {
+ preStr = srcStr.substring(0, srcStr.indexOf(subject));
+ nextStr = srcStr.substring(srcStr.indexOf(subject) + subject.length(), srcStr.length());
+ srcStr = nextStr;
+ rtnStr.append(preStr).append(object);
+ }
+ rtnStr.append(nextStr);
+
+ return rtnStr.toString();
+ }
+
+ /**
+ * 원본 문자열의 포함된 특정 문자열 첫번째 한개만 새로운 문자열로 변환하는 메서드
+ * @param source 원본 문자열
+ * @param subject 원본 문자열에 포함된 특정 문자열
+ * @param object 변환할 문자열
+ * @return sb.toString() 새로운 문자열로 변환된 문자열 / source 특정문자열이 없는 경우 원본 문자열
+ */
+ public static String replaceOnce(String source, String subject, String object) {
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+ if (source.indexOf(subject) >= 0) {
+ preStr = source.substring(0, source.indexOf(subject));
+ nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length());
+ rtnStr.append(preStr).append(object).append(nextStr);
+
+ return rtnStr.toString();
+ } else {
+ return source;
+ }
+ }
+
+ /**
+ * <code>subject</code>에 포함된 각각의 문자를 object로 변환한다.
+ *
+ * @param source 원본 문자열
+ * @param subject 원본 문자열에 포함된 특정 문자열
+ * @param object 변환할 문자열
+ * @return sb.toString() 새로운 문자열로 변환된 문자열
+ */
+ public static String replaceChar(String source, String subject, String object) {
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+ String srcStr = source;
+
+ char chA;
+
+ for (int i = 0; i < subject.length(); i++) {
+ chA = subject.charAt(i);
+
+ if (srcStr.indexOf(chA) >= 0) {
+ preStr = srcStr.substring(0, srcStr.indexOf(chA));
+ nextStr = srcStr.substring(srcStr.indexOf(chA) + 1, srcStr.length());
+ srcStr = rtnStr.append(preStr).append(object).append(nextStr).toString();
+ }
+ }
+
+ return srcStr;
+ }
+
+ /**
+ * <p><code>str</code> 중 <code>searchStr</code>의 시작(index) 위치를 반환.</p>
+ *
+ * <p>입력값 중 <code>null</code>이 있을 경우 <code>-1</code>을 반환.</p>
+ *
+ * <pre>
+ * StringUtil.indexOf(null, *) = -1
+ * StringUtil.indexOf(*, null) = -1
+ * StringUtil.indexOf("", "") = 0
+ * StringUtil.indexOf("aabaabaa", "a") = 0
+ * StringUtil.indexOf("aabaabaa", "b") = 2
+ * StringUtil.indexOf("aabaabaa", "ab") = 1
+ * StringUtil.indexOf("aabaabaa", "") = 0
+ * </pre>
+ *
+ * @param str 검색 문자열
+ * @param searchStr 검색 대상문자열
+ * @return 검색 문자열 중 검색 대상문자열이 있는 시작 위치 검색대상 문자열이 없거나 null인 경우 -1
+ */
+ public static int indexOf(String str, String searchStr) {
+ if (str == null || searchStr == null) {
+ return -1;
+ }
+
+ return str.indexOf(searchStr);
+ }
+
+ /**
+ * <p>오라클의 decode 함수와 동일한 기능을 가진 메서드이다.
+ * <code>sourStr</code>과 <code>compareStr</code>의 값이 같으면
+ * <code>returStr</code>을 반환하며, 다르면 <code>defaultStr</code>을 반환한다.
+ * </p>
+ *
+ * <pre>
+ * StringUtil.decode(null, null, "foo", "bar")= "foo"
+ * StringUtil.decode("", null, "foo", "bar") = "bar"
+ * StringUtil.decode(null, "", "foo", "bar") = "bar"
+ * StringUtil.decode("하이", "하이", null, "bar") = null
+ * StringUtil.decode("하이", "하이 ", "foo", null) = null
+ * StringUtil.decode("하이", "하이", "foo", "bar") = "foo"
+ * StringUtil.decode("하이", "하이 ", "foo", "bar") = "bar"
+ * </pre>
+ *
+ * @param sourceStr 비교할 문자열
+ * @param compareStr 비교 대상 문자열
+ * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열
+ * @param defaultStr sourceStr와 compareStr의 값이 다를 때 반환할 문자열
+ * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며,
+ * <br/>다르면 defaultStr을 반환한다.
+ */
+ public static String decode(String sourceStr, String compareStr, String returnStr, String defaultStr) {
+ if (sourceStr == null && compareStr == null) {
+ return returnStr;
+ }
+
+ if (sourceStr == null && compareStr != null) {
+ return defaultStr;
+ }
+
+ if (sourceStr.trim().equals(compareStr)) {
+ return returnStr;
+ }
+
+ return defaultStr;
+ }
+
+ /**
+ * <p>오라클의 decode 함수와 동일한 기능을 가진 메서드이다.
+ * <code>sourStr</code>과 <code>compareStr</code>의 값이 같으면
+ * <code>returStr</code>을 반환하며, 다르면 <code>sourceStr</code>을 반환한다.
+ * </p>
+ *
+ * <pre>
+ * StringUtil.decode(null, null, "foo") = "foo"
+ * StringUtil.decode("", null, "foo") = ""
+ * StringUtil.decode(null, "", "foo") = null
+ * StringUtil.decode("하이", "하이", "foo") = "foo"
+ * StringUtil.decode("하이", "하이 ", "foo") = "하이"
+ * StringUtil.decode("하이", "바이", "foo") = "하이"
+ * </pre>
+ *
+ * @param sourceStr 비교할 문자열
+ * @param compareStr 비교 대상 문자열
+ * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열
+ * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며,
+ * <br/>다르면 sourceStr을 반환한다.
+ */
+ public static String decode(String sourceStr, String compareStr, String returnStr) {
+ return decode(sourceStr, compareStr, returnStr, sourceStr);
+ }
+
+ /**
+ * 객체가 null인지 확인하고 null인 경우 "" 로 바꾸는 메서드
+ * @param object 원본 객체
+ * @return resultVal 문자열
+ */
+ public static String isNullToString(Object object) {
+ String string = "";
+
+ if (object != null) {
+ string = object.toString().trim();
+ }
+
+ return string;
+ }
+
+ /**
+ *<pre>
+ * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+ *</pre>
+ */
+ public static String nullConvert(Object src) {
+ //if (src != null && src.getClass().getName().equals("java.math.BigDecimal")) {
+ if (src != null && src instanceof java.math.BigDecimal) {
+ return ((BigDecimal) src).toString();
+ }
+
+ if (src == null || src.equals("null")) {
+ return "";
+ } else {
+ return ((String) src).trim();
+ }
+ }
+
+ /**
+ *<pre>
+ * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+ *</pre>
+ */
+ public static String nullConvertInt(Object src) {
+ //if (src != null && src.getClass().getName().equals("java.math.BigDecimal")) {
+ if (src != null && src instanceof java.math.BigDecimal) {
+ return ((BigDecimal) src).toString();
+ }
+
+ if (src == null || src.equals("null")) {
+ return "0";
+ } else {
+ return ((String) src).trim();
+ }
+ }
+
+ /**
+ *<pre>
+ * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+ *</pre>
+ */
+ public static String nullConvert(String src) {
+
+ if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) {
+ return "";
+ } else {
+ return src.trim();
+ }
+ }
+
+ /**
+ *<pre>
+ * 인자로 받은 String이 null일 경우 "0"로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 "0"로 바꾼 String 값.
+ *</pre>
+ */
+ public static int zeroConvert(Object src) {
+
+ if (src == null || src.equals("null")) {
+ return 0;
+ } else {
+ return Integer.parseInt(((String) src).trim());
+ }
+ }
+
+ /**
+ *<pre>
+ * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+ * @param src null값일 가능성이 있는 String 값.
+ * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+ *</pre>
+ */
+ public static int zeroConvert(String src) {
+
+ if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) {
+ return 0;
+ } else {
+ return Integer.parseInt(src.trim());
+ }
+ }
+
+ /**
+ * <p>문자열에서 {@link Character#isWhitespace(char)}에 정의된
+ * 모든 공백문자를 제거한다.</p>
+ *
+ * <pre>
+ * StringUtil.removeWhitespace(null) = null
+ * StringUtil.removeWhitespace("") = ""
+ * StringUtil.removeWhitespace("abc") = "abc"
+ * StringUtil.removeWhitespace(" ab c ") = "abc"
+ * </pre>
+ *
+ * @param str 공백문자가 제거도어야 할 문자열
+ * @return the 공백문자가 제거된 문자열, null이 입력되면 <code>null</code>이 리턴
+ */
+ public static String removeWhitespace(String str) {
+ if (isEmpty(str)) {
+ return str;
+ }
+ int sz = str.length();
+ char[] chs = new char[sz];
+ int count = 0;
+ for (int i = 0; i < sz; i++) {
+ if (!Character.isWhitespace(str.charAt(i))) {
+ chs[count++] = str.charAt(i);
+ }
+ }
+ if (count == sz) {
+ return str;
+ }
+
+ return new String(chs, 0, count);
+ }
+
+ /**
+ * Html 코드가 들어간 문서를 표시할때 태그에 손상없이 보이기 위한 메서드
+ *
+ * @param strString
+ * @return HTML 태그를 치환한 문자열
+ */
+ public static String checkHtmlView(String strString) {
+ String strNew = "";
+
+ StringBuffer strTxt = new StringBuffer("");
+
+ char chrBuff;
+ int len = strString.length();
+
+ for (int i = 0; i < len; i++) {
+ chrBuff = (char) strString.charAt(i);
+
+ switch (chrBuff) {
+ case '<':
+ strTxt.append("<");
+ break;
+ case '>':
+ strTxt.append(">");
+ break;
+ case '"':
+ strTxt.append(""");
+ break;
+ case 10:
+ strTxt.append("<br>");
+ break;
+ case ' ':
+ strTxt.append(" ");
+ break;
+ //case '&' :
+ //strTxt.append("&");
+ //break;
+ default:
+ strTxt.append(chrBuff);
+ }
+ }
+
+ strNew = strTxt.toString();
+
+ return strNew;
+ }
+
+ /**
+ * 문자열을 지정한 분리자에 의해 배열로 리턴하는 메서드.
+ * @param source 원본 문자열
+ * @param separator 분리자
+ * @return result 분리자로 나뉘어진 문자열 배열
+ */
+ public static String[] split(String source, String separator) throws NullPointerException {
+ String[] returnVal = null;
+ int cnt = 1;
+
+ int index = source.indexOf(separator);
+ int index0 = 0;
+ while (index >= 0) {
+ cnt++;
+ index = source.indexOf(separator, index + 1);
+ }
+ returnVal = new String[cnt];
+ cnt = 0;
+ index = source.indexOf(separator);
+ while (index >= 0) {
+ returnVal[cnt] = source.substring(index0, index);
+ index0 = index + 1;
+ index = source.indexOf(separator, index + 1);
+ cnt++;
+ }
+ returnVal[cnt] = source.substring(index0);
+
+ return returnVal;
+ }
+
+ /**
+ * <p>{@link String#toLowerCase()}를 이용하여 소문자로 변환한다.</p>
+ *
+ * <pre>
+ * StringUtil.lowerCase(null) = null
+ * StringUtil.lowerCase("") = ""
+ * StringUtil.lowerCase("aBc") = "abc"
+ * </pre>
+ *
+ * @param str 소문자로 변환되어야 할 문자열
+ * @return 소문자로 변환된 문자열, null이 입력되면 <code>null</code> 리턴
+ */
+ public static String lowerCase(String str) {
+ if (str == null) {
+ return null;
+ }
+
+ return str.toLowerCase();
+ }
+
+ /**
+ * <p>{@link String#toUpperCase()}를 이용하여 대문자로 변환한다.</p>
+ *
+ * <pre>
+ * StringUtil.upperCase(null) = null
+ * StringUtil.upperCase("") = ""
+ * StringUtil.upperCase("aBc") = "ABC"
+ * </pre>
+ *
+ * @param str 대문자로 변환되어야 할 문자열
+ * @return 대문자로 변환된 문자열, null이 입력되면 <code>null</code> 리턴
+ */
+ public static String upperCase(String str) {
+ if (str == null) {
+ return null;
+ }
+
+ return str.toUpperCase();
+ }
+
+ /**
+ * <p>입력된 String의 앞쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.</p>
+ *
+ * <pre>
+ * StringUtil.stripStart(null, *) = null
+ * StringUtil.stripStart("", *) = ""
+ * StringUtil.stripStart("abc", "") = "abc"
+ * StringUtil.stripStart("abc", null) = "abc"
+ * StringUtil.stripStart(" abc", null) = "abc"
+ * StringUtil.stripStart("abc ", null) = "abc "
+ * StringUtil.stripStart(" abc ", null) = "abc "
+ * StringUtil.stripStart("yxabc ", "xyz") = "abc "
+ * </pre>
+ *
+ * @param str 지정된 문자가 제거되어야 할 문자열
+ * @param stripChars 제거대상 문자열
+ * @return 지정된 문자가 제거된 문자열, null이 입력되면 <code>null</code> 리턴
+ */
+ public static String stripStart(String str, String stripChars) {
+ int strLen;
+ if (str == null || (strLen = str.length()) == 0) {
+ return str;
+ }
+ int start = 0;
+ if (stripChars == null) {
+ while ((start != strLen) && Character.isWhitespace(str.charAt(start))) {
+ start++;
+ }
+ } else if (stripChars.length() == 0) {
+ return str;
+ } else {
+ while ((start != strLen) && (stripChars.indexOf(str.charAt(start)) != -1)) {
+ start++;
+ }
+ }
+
+ return str.substring(start);
+ }
+
+ /**
+ * <p>입력된 String의 뒤쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.</p>
+ *
+ * <pre>
+ * StringUtil.stripEnd(null, *) = null
+ * StringUtil.stripEnd("", *) = ""
+ * StringUtil.stripEnd("abc", "") = "abc"
+ * StringUtil.stripEnd("abc", null) = "abc"
+ * StringUtil.stripEnd(" abc", null) = " abc"
+ * StringUtil.stripEnd("abc ", null) = "abc"
+ * StringUtil.stripEnd(" abc ", null) = " abc"
+ * StringUtil.stripEnd(" abcyx", "xyz") = " abc"
+ * </pre>
+ *
+ * @param str 지정된 문자가 제거되어야 할 문자열
+ * @param stripChars 제거대상 문자열
+ * @return 지정된 문자가 제거된 문자열, null이 입력되면 <code>null</code> 리턴
+ */
+ public static String stripEnd(String str, String stripChars) {
+ int end;
+ if (str == null || (end = str.length()) == 0) {
+ return str;
+ }
+
+ if (stripChars == null) {
+ while ((end != 0) && Character.isWhitespace(str.charAt(end - 1))) {
+ end--;
+ }
+ } else if (stripChars.length() == 0) {
+ return str;
+ } else {
+ while ((end != 0) && (stripChars.indexOf(str.charAt(end - 1)) != -1)) {
+ end--;
+ }
+ }
+
+ return str.substring(0, end);
+ }
+
+ /**
+ * <p>입력된 String의 앞, 뒤에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.</p>
+ *
+ * <pre>
+ * StringUtil.strip(null, *) = null
+ * StringUtil.strip("", *) = ""
+ * StringUtil.strip("abc", null) = "abc"
+ * StringUtil.strip(" abc", null) = "abc"
+ * StringUtil.strip("abc ", null) = "abc"
+ * StringUtil.strip(" abc ", null) = "abc"
+ * StringUtil.strip(" abcyx", "xyz") = " abc"
+ * </pre>
+ *
+ * @param str 지정된 문자가 제거되어야 할 문자열
+ * @param stripChars 제거대상 문자열
+ * @return 지정된 문자가 제거된 문자열, null이 입력되면 <code>null</code> 리턴
+ */
+ public static String strip(String str, String stripChars) {
+ if (isEmpty(str)) {
+ return str;
+ }
+
+ String srcStr = str;
+ srcStr = stripStart(srcStr, stripChars);
+
+ return stripEnd(srcStr, stripChars);
+ }
+
+ /**
+ * 문자열을 지정한 분리자에 의해 지정된 길이의 배열로 리턴하는 메서드.
+ * @param source 원본 문자열
+ * @param separator 분리자
+ * @param arraylength 배열 길이
+ * @return 분리자로 나뉘어진 문자열 배열
+ */
+ public static String[] split(String source, String separator, int arraylength) throws NullPointerException {
+ String[] returnVal = new String[arraylength];
+ int cnt = 0;
+ int index0 = 0;
+ int index = source.indexOf(separator);
+ while (index >= 0 && cnt < (arraylength - 1)) {
+ returnVal[cnt] = source.substring(index0, index);
+ index0 = index + 1;
+ index = source.indexOf(separator, index + 1);
+ cnt++;
+ }
+ returnVal[cnt] = source.substring(index0);
+ if (cnt < (arraylength - 1)) {
+ for (int i = cnt + 1; i < arraylength; i++) {
+ returnVal[i] = "";
+ }
+ }
+
+ return returnVal;
+ }
+
+ /**
+ * 문자열 A에서 Z사이의 랜덤 문자열을 구하는 기능을 제공 시작문자열과 종료문자열 사이의 랜덤 문자열을 구하는 기능
+ *
+ * @param startChr - 첫 문자
+ * @param endChr - 마지막문자
+ * @return 랜덤문자
+ * @exception MyException
+ * @see
+ */
+ public static String getRandomStr(char startChr, char endChr) {
+
+ int randomInt;
+ String randomStr = null;
+
+ // 시작문자 및 종료문자를 아스키숫자로 변환한다.
+ int startInt = Integer.valueOf(startChr);
+ int endInt = Integer.valueOf(endChr);
+
+ // 시작문자열이 종료문자열보가 클경우
+ if (startInt > endInt) {
+ throw new IllegalArgumentException("Start String: " + startChr + " End String: " + endChr);
+ }
+
+ // 랜덤 객체 생성
+ SecureRandom rnd = new SecureRandom();
+
+ do {
+ // 시작문자 및 종료문자 중에서 랜덤 숫자를 발생시킨다.
+ randomInt = rnd.nextInt(endInt + 1);
+ } while (randomInt < startInt); // 입력받은 문자 'A'(65)보다 작으면 다시 랜덤 숫자 발생.
+
+ // 랜덤 숫자를 문자로 변환 후 스트링으로 다시 변환
+ randomStr = (char) randomInt + "";
+
+ // 랜덤문자열를 리턴
+ return randomStr;
+ }
+
+ /**
+ * 문자열을 다양한 문자셋(EUC-KR[KSC5601],UTF-8..)을 사용하여 인코딩하는 기능 역으로 디코딩하여 원래의 문자열을
+ * 복원하는 기능을 제공함 String temp = new String(문자열.getBytes("바꾸기전 인코딩"),"바꿀 인코딩");
+ * String temp = new String(문자열.getBytes("8859_1"),"KSC5601"); => UTF-8 에서
+ * EUC-KR
+ *
+ * @param srcString - 문자열
+ * @param srcCharsetNm - 원래 CharsetNm
+ * @param charsetNm - CharsetNm
+ * @return 인(디)코딩 문자열
+ * @exception MyException
+ * @see
+ */
+ public static String getEncdDcd(String srcString, String srcCharsetNm, String cnvrCharsetNm) {
+
+ String rtnStr = null;
+
+ if (srcString == null)
+ return null;
+
+ try {
+ rtnStr = new String(srcString.getBytes(srcCharsetNm), cnvrCharsetNm);
+ } catch (UnsupportedEncodingException e) {
+ rtnStr = null;
+ }
+
+ return rtnStr;
+ }
+
+ /**
+ * 특수문자를 웹 브라우저에서 정상적으로 보이기 위해 특수문자를 처리('<' -> & lT)하는 기능이다
+ * @param srcString - '<'
+ * @return 변환문자열('<' -> "<"
+ * @exception MyException
+ * @see
+ */
+ public static String getSpclStrCnvr(String srcString) {
+
+ String rtnStr = null;
+
+ StringBuffer strTxt = new StringBuffer("");
+
+ char chrBuff;
+ int len = srcString.length();
+
+ for (int i = 0; i < len; i++) {
+ chrBuff = (char) srcString.charAt(i);
+
+ switch (chrBuff) {
+ case '<':
+ strTxt.append("<");
+ break;
+ case '>':
+ strTxt.append(">");
+ break;
+ case '&':
+ strTxt.append("&");
+ break;
+ default:
+ strTxt.append(chrBuff);
+ }
+ }
+
+ rtnStr = strTxt.toString();
+
+ return rtnStr;
+ }
+
+ /**
+ * 응용어플리케이션에서 고유값을 사용하기 위해 시스템에서17자리의TIMESTAMP값을 구하는 기능
+ *
+ * @param
+ * @return Timestamp 값
+ * @exception MyException
+ * @see
+ */
+ 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;
+ }
+
+ /**
+ * html의 특수문자를 표현하기 위해
+ *
+ * @param srcString
+ * @return String
+ * @exception Exception
+ * @see
+ */
+ public static String getHtmlStrCnvr(String srcString) {
+
+ String tmpString = srcString;
+
+ tmpString = tmpString.replaceAll("<", "<");
+ tmpString = tmpString.replaceAll(">", ">");
+ tmpString = tmpString.replaceAll("&", "&");
+ tmpString = tmpString.replaceAll(" ", " ");
+ tmpString = tmpString.replaceAll("'", "\'");
+ tmpString = tmpString.replaceAll(""", "\"");
+
+ return tmpString;
+
+ }
+
+ /**
+ * <p>날짜 형식의 문자열 내부에 마이너스 character(-)를 추가한다.</p>
+ *
+ * <pre>
+ * StringUtil.addMinusChar("20100901") = "2010-09-01"
+ * </pre>
+ *
+ * @param date 입력받는 문자열
+ * @return " - "가 추가된 입력문자열
+ */
+ public static String addMinusChar(String date) {
+ if (date.length() == 8) {
+ return date.substring(0, 4).concat("-").concat(date.substring(4, 6)).concat("-").concat(date.substring(6, 8));
+ } else {
+ return "";
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovStringUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileVo.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileVo.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileVo.java (revision 7)
@@ -0,0 +1,104 @@
+package egovframework.com.utl.fcc.service;
+
+import java.io.Serializable;
+
+/**
+ * @Class Name : EgovFormBasedFileVo.java
+ * @Description : Form-based File Upload VO
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.08.26 한성곤 최초 생성
+ *
+ * @author 공통컴포넌트 개발팀 한성곤
+ * @since 2009.08.26
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2008 by MOPAS All right reserved.
+ */
+@SuppressWarnings("serial")
+public class EgovFormBasedFileVo implements Serializable {
+ /** 파일명 */
+ private String fileName = "";
+ /** ContextType */
+ private String contentType = "";
+ /** 하위 디렉토리 지정 */
+ private String serverSubPath = "";
+ /** 물리적 파일명 */
+ private String physicalName = "";
+ /** 파일 사이즈 */
+ private long size = 0L;
+
+ /**
+ * fileName attribute를 리턴한다.
+ * @return the fileName
+ */
+ public String getFileName() {
+ return fileName;
+ }
+ /**
+ * fileName attribute 값을 설정한다.
+ * @param fileName the fileName to set
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+ /**
+ * contentType attribute를 리턴한다.
+ * @return the contentType
+ */
+ public String getContentType() {
+ return contentType;
+ }
+ /**
+ * contentType attribute 값을 설정한다.
+ * @param contentType the contentType to set
+ */
+ public void setContentType(String contentType) {
+ this.contentType = contentType;
+ }
+ /**
+ * serverSubPath attribute를 리턴한다.
+ * @return the serverSubPath
+ */
+ public String getServerSubPath() {
+ return serverSubPath;
+ }
+ /**
+ * serverSubPath attribute 값을 설정한다.
+ * @param serverSubPath the serverSubPath to set
+ */
+ public void setServerSubPath(String serverSubPath) {
+ this.serverSubPath = serverSubPath;
+ }
+ /**
+ * physicalName attribute를 리턴한다.
+ * @return the physicalName
+ */
+ public String getPhysicalName() {
+ return physicalName;
+ }
+ /**
+ * physicalName attribute 값을 설정한다.
+ * @param physicalName the physicalName to set
+ */
+ public void setPhysicalName(String physicalName) {
+ this.physicalName = physicalName;
+ }
+ /**
+ * size attribute를 리턴한다.
+ * @return the size
+ */
+ public long getSize() {
+ return size;
+ }
+ /**
+ * size attribute 값을 설정한다.
+ * @param size the size to set
+ */
+ public void setSize(long size) {
+ this.size = size;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileVo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormatCheckUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormatCheckUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormatCheckUtil.java (revision 7)
@@ -0,0 +1,207 @@
+package egovframework.com.utl.fcc.service;
+
+/**
+ *
+ * 포맷유효성체크 에 대한 Util 클래스
+ * @author 공통컴포넌트 개발팀 윤성록
+ * @since 2009.06.23
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.06.23 윤성록 최초 생성
+ *
+ * </pre>
+ */
+public class EgovFormatCheckUtil {
+
+ /**
+ * <pxxx - xxx- xxxx 형식의 전화번호 앞, 중간, 뒤 문자열 3개 입력 받아 유요한 전화번호형식인지 검사.</p>
+ *
+ *
+ * @param 전화번호 문자열( 3개 )
+ * @return 유효한 전화번호 형식인지 여부 (True/False)
+ */
+ public static boolean checkFormatTell(String tell1, String tell2, String tell3) {
+
+ String[] check = {"02", "031", "032", "033", "041", "042", "043", "051", "052", "053", "054", "055", "061",
+ "062", "063", "070", "080", "0505"}; //존재하는 국번 데이터
+ String temp = tell1 + tell2 + tell3;
+
+ for(int i=0; i < temp.length(); i++){
+ if (temp.charAt(i) < '0' || temp.charAt(i) > '9')
+ return false;
+ } //숫자가 아닌 값이 들어왔는지를 확인
+
+ for(int i = 0; i < check.length; i++){
+ if(tell1.equals(check[i])) break;
+ if(i == check.length - 1) return false;
+ } //국번입력이 제대로 되었는지를 확인
+
+ if(tell2.charAt(0) == '0') return false;
+
+ if(tell1.equals("02")){
+ if(tell2.length() != 3 && tell2.length() !=4) return false;
+ if(tell3.length() != 4) return false; //서울지역(02)국번 입력때의 전화 번호 형식유효성 체크
+ }else{
+ if(tell2.length() != 3) return false;
+ if(tell3.length() != 4) return false;
+ } //서울을 제외한 지역(국번 입력때의 전화 번호 형식유효성 체크
+
+ return true;
+ }
+
+ /**
+ * <p>xxx - xxx- xxxx 형식의 전화번호 하나를 입력 받아 유요한 전화번호형식인지 검사.</p>
+ *
+ *
+ * @param 전화번호 문자열 (1개)
+ * @return 유효한 전화번호 형식인지 여부 (True/False)
+ */
+ public static boolean checkFormatTell(String tellNumber) {
+
+ String temp1;
+ String temp2;
+ String temp3;
+ String tell = tellNumber;
+
+ tell = tell.replace("-", "");
+
+ if(tell.length() < 9 || tell.length() > 11 || tell.charAt(0) != '0') return false; //전화번호 길이에 대한 체크
+
+ if(tell.charAt(1) =='2'){ //서울지역 (02)국번의 경우일때
+ temp1 = tell.substring(0,2);
+ if(tell.length() == 9){
+ temp2 = tell.substring(2,5);
+ temp3 = tell.substring(5,9);
+ }else if(tell.length() == 10){
+ temp2 = tell.substring(2,6);
+ temp3 = tell.substring(6,10);
+ }else
+ return false;
+ } else if(tell.substring(0,4).equals("0505")){ //평생번호(0505)국번의 경우일때
+ if(tell.length() != 11) return false;
+ temp1 = tell.substring(0,4);
+ temp2 = tell.substring(4,7);
+ temp3 = tell.substring(7,11);
+ } else { // 서울지역 및 "0505" 를 제외한 일반적인 경우일때
+ if(tell.length() != 10) return false;
+ temp1 = tell.substring(0,3);
+ temp2 = tell.substring(3,6);
+ temp3 = tell.substring(6,10);
+ }
+
+ return checkFormatTell(temp1, temp2, temp3);
+ }
+
+ /**
+ * <p>xxx - xxx- xxxx 형식의 휴대폰번호 앞, 중간, 뒤 문자열 3개 입력 받아 유요한 휴대폰번호형식인지 검사.</p>
+ *
+ *
+ * @param 휴대폰번호 문자열,(3개)
+ * @return 유효한 휴대폰번호 형식인지 여부 (True/False)
+ */
+ public static boolean checkFormatCell(String cell1, String cell2, String cell3) {
+ String[] check = {"010", "011", "016", "017", "018", "019"}; //유효한 휴대폰 첫자리 번호 데이터
+ String temp = cell1 + cell2 + cell3;
+
+ for(int i=0; i < temp.length(); i++){
+ if (temp.charAt(i) < '0' || temp.charAt(i) > '9')
+ return false;
+ } //숫자가 아닌 값이 들어왔는지를 확인
+
+ for(int i = 0; i < check.length; i++){
+ if(cell1.equals(check[i])) break;
+ if(i == check.length - 1) return false;
+ } // 휴대폰 첫자리 번호입력의 유효성 체크
+
+ if(cell2.charAt(0) == '0') return false;
+
+ if(cell2.length() != 3 && cell2.length() !=4) return false;
+ if(cell3.length() != 4) return false;
+
+ return true;
+ }
+
+ /**
+ * <p>XXXXXXXXXX 형식의 휴대폰번호 문자열 3개 입력 받아 유요한 휴대폰번호형식인지 검사.</p>
+ *
+ *
+ * @param 휴대폰번호 문자열(1개)
+ * @return 유효한 휴대폰번호 형식인지 여부 (True/False)
+ */
+ public static boolean checkFormatCell(String cellNumber) {
+
+ String temp1;
+ String temp2;
+ String temp3;
+
+ String cell = cellNumber;
+ cell = cell.replace("-", "");
+
+ if(cell.length() < 10 || cell.length() > 11 || cell.charAt(0) != '0') return false;
+
+ if(cell.length() == 10){ //전체 10자리 휴대폰 번호일 경우
+ temp1 = cell.substring(0,3);
+ temp2 = cell.substring(3,6);
+ temp3 = cell.substring(6,10);
+ }else{ //전체 11자리 휴대폰 번호일 경우
+ temp1 = cell.substring(0,3);
+ temp2 = cell.substring(3,7);
+ temp3 = cell.substring(7,11);
+ }
+
+ return checkFormatCell(temp1, temp2, temp3);
+ }
+
+ /**
+ * <p> 이메일의 앞, 뒤 문자열 2개 입력 받아 유요한 이메일형식인지 검사.</p>
+ *
+ *
+ * @param 이메일 문자열 (2개)
+ * @return 유효한 이메일 형식인지 여부 (True/False)
+ */
+ public static boolean checkFormatMail(String mail1, String mail2) {
+
+ int count = 0;
+
+ for(int i = 0; i < mail1.length(); i++){
+ if(mail1.charAt(i) <= 'z' && mail1.charAt(i) >= 'a') continue;
+ else if(mail1.charAt(i) <= 'Z' && mail1.charAt(i) >= 'A') continue;
+ else if(mail1.charAt(i) <= '9' && mail1.charAt(i) >= '0') continue;
+ else if(mail1.charAt(i) == '-' && mail1.charAt(i) == '_') continue;
+ else return false;
+ } // 유효한 문자, 숫자인지 체크
+
+ for(int i = 0; i < mail2.length(); i++){
+ if(mail2.charAt(i) <= 'z' && mail2.charAt(i) >= 'a') continue;
+ else if(mail2.charAt(i) == '.'){ count++; continue;}
+ else return false;
+ } // 메일 주소의 형식 체크(xxx.xxx 형태)
+
+ if(count == 1) return true;
+ else return false;
+
+ }
+
+ /**
+ * <p> 이메일의 전체문자열 1개 입력 받아 유요한 이메일형식인지 검사.</p>
+ *
+ *
+ * @param 이메일 문자열 (1개)
+ * @return 유효한 이메일 형식인지 여부 (True/False)
+ */
+ public static boolean checkFormatMail(String mail) {
+
+ String[] temp = mail.split("@"); // '@' 를 기점으로 앞, 뒤 문자열 구분
+
+ if(temp.length == 2) return checkFormatMail(temp[0], temp[1]);
+ else return false;
+ }
+
+}
+
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormatCheckUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateUtil.java (revision 7)
@@ -0,0 +1,865 @@
+package egovframework.com.utl.fcc.service;
+
+import java.security.SecureRandom;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+
+import com.ibm.icu.util.ChineseCalendar;
+
+/**
+ *
+ * Date 에 대한 Util 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+public class EgovDateUtil {
+
+ /**
+ * <p>yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년, 월, 일을
+ * 증감한다. 년, 월, 일은 가감할 수를 의미하며, 음수를 입력할 경우 감한다.</p>
+ *
+ * <pre>
+ * DateUtil.addYearMonthDay("19810828", 0, 0, 19) = "19810916"
+ * DateUtil.addYearMonthDay("20060228", 0, 0, -10) = "20060218"
+ * DateUtil.addYearMonthDay("20060228", 0, 0, 10) = "20060310"
+ * DateUtil.addYearMonthDay("20060228", 0, 0, 32) = "20060401"
+ * DateUtil.addYearMonthDay("20050331", 0, -1, 0) = "20050228"
+ * DateUtil.addYearMonthDay("20050301", 0, 2, 30) = "20050531"
+ * DateUtil.addYearMonthDay("20050301", 1, 2, 30) = "20060531"
+ * DateUtil.addYearMonthDay("20040301", 2, 0, 0) = "20060301"
+ * DateUtil.addYearMonthDay("20040229", 2, 0, 0) = "20060228"
+ * DateUtil.addYearMonthDay("20040229", 2, 0, 1) = "20060301"
+ * </pre>
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param year 가감할 년. 0이 입력될 경우 가감이 없다
+ * @param month 가감할 월. 0이 입력될 경우 가감이 없다
+ * @param day 가감할 일. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 <code>null</code>인 경우.
+ */
+ public static String addYearMonthDay(String sDate, int year, int month, int day) {
+
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
+ try {
+ cal.setTime(sdf.parse(dateStr));
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ if (year != 0) {
+ cal.add(Calendar.YEAR, year);
+ }
+ if (month != 0) {
+ cal.add(Calendar.MONTH, month);
+ }
+ if (day != 0) {
+ cal.add(Calendar.DATE, day);
+ }
+
+ return sdf.format(cal.getTime());
+ }
+
+ /**
+ * <p>yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년을
+ * 증감한다. <code>year</code>는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.</p>
+ *
+ * <pre>
+ * DateUtil.addYear("20000201", 62) = "20620201"
+ * DateUtil.addYear("20620201", -62) = "20000201"
+ * DateUtil.addYear("20040229", 2) = "20060228"
+ * DateUtil.addYear("20060228", -2) = "20040228"
+ * DateUtil.addYear("19000101", 200) = "21000101"
+ * </pre>
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param year 가감할 년. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 <code>null</code>인 경우.
+ */
+ public static String addYear(String dateStr, int year) {
+ return addYearMonthDay(dateStr, year, 0, 0);
+ }
+
+ /**
+ * <p>yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 월을
+ * 증감한다. <code>month</code>는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.</p>
+ *
+ * <pre>
+ * DateUtil.addMonth("20010201", 12) = "20020201"
+ * DateUtil.addMonth("19800229", 12) = "19810228"
+ * DateUtil.addMonth("20040229", 12) = "20050228"
+ * DateUtil.addMonth("20050228", -12) = "20040228"
+ * DateUtil.addMonth("20060131", 1) = "20060228"
+ * DateUtil.addMonth("20060228", -1) = "20060128"
+ * </pre>
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param month 가감할 월. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 <code>null</code>인 경우.
+ */
+ public static String addMonth(String dateStr, int month) {
+ return addYearMonthDay(dateStr, 0, month, 0);
+ }
+
+ /**
+ * <p>yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 일(day)를
+ * 증감한다. <code>day</code>는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.
+ * <br/><br/>
+ * 위에 정의된 addDays 메서드는 사용자가 ParseException을 반드시 처리해야 하는 불편함이
+ * 있기 때문에 추가된 메서드이다.</p>
+ *
+ * <pre>
+ * DateUtil.addDay("19991201", 62) = "20000201"
+ * DateUtil.addDay("20000201", -62) = "19991201"
+ * DateUtil.addDay("20050831", 3) = "20050903"
+ * DateUtil.addDay("20050831", 3) = "20050903"
+ * // 2006년 6월 31일은 실제로 존재하지 않는 날짜이다 -> 20060701로 간주된다
+ * DateUtil.addDay("20060631", 1) = "20060702"
+ * </pre>
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param day 가감할 일. 0이 입력될 경우 가감이 없다
+ * @return yyyyMMdd 형식의 날짜 문자열
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 <code>null</code>인 경우.
+ */
+ public static String addDay(String dateStr, int day) {
+ return addYearMonthDay(dateStr, 0, 0, day);
+ }
+
+ /**
+ * <p>yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열 <code>dateStr1</code>과 <code>
+ * dateStr2</code> 사이의 일 수를 구한다.<br>
+ * <code>dateStr2</code>가 <code>dateStr1</code> 보다 과거 날짜일 경우에는
+ * 음수를 반환한다. 동일한 경우에는 0을 반환한다.</p>
+ *
+ * <pre>
+ * DateUtil.getDaysDiff("20060228","20060310") = 10
+ * DateUtil.getDaysDiff("20060101","20070101") = 365
+ * DateUtil.getDaysDiff("19990228","19990131") = -28
+ * DateUtil.getDaysDiff("20060801","20060802") = 1
+ * DateUtil.getDaysDiff("20060801","20060801") = 0
+ * </pre>
+ *
+ * @param dateStr1 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @param dateStr2 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @return 일 수 차이.
+ * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우.
+ * 입력 값이 <code>null</code>인 경우.
+ */
+ public static int getDaysDiff(String sDate1, String sDate2) {
+ String dateStr1 = validChkDate(sDate1);
+ String dateStr2 = validChkDate(sDate2);
+
+ if (!checkDate(sDate1) || !checkDate(sDate2)) {
+ throw new IllegalArgumentException("Invalid date format: args[0]=" + sDate1 + " args[1]=" + sDate2);
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
+
+ Date date1 = null;
+ Date date2 = null;
+ try {
+ date1 = sdf.parse(dateStr1);
+ date2 = sdf.parse(dateStr2);
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: args[0]=" + dateStr1 + " args[1]=" + dateStr2);
+ }
+
+ if (date1 != null && date2 != null) {
+ int days1 = (int) ((date1.getTime() / 3600000) / 24);
+ int days2 = (int) ((date2.getTime() / 3600000) / 24);
+ return days2 - days1;
+ } else {
+ return 0;
+ }
+
+ }
+
+ /**
+ * <p>yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 유효한 날짜인지 검사.</p>
+ *
+ * <pre>
+ * DateUtil.checkDate("1999-02-35") = false
+ * DateUtil.checkDate("2000-13-31") = false
+ * DateUtil.checkDate("2006-11-31") = false
+ * DateUtil.checkDate("2006-2-28") = false
+ * DateUtil.checkDate("2006-2-8") = false
+ * DateUtil.checkDate("20060228") = true
+ * DateUtil.checkDate("2006-02-28") = true
+ * </pre>
+ *
+ * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식)
+ * @return 유효한 날짜인지 여부
+ */
+ public static boolean checkDate(String sDate) {
+ String dateStr = validChkDate(sDate);
+
+ String year = dateStr.substring(0, 4);
+ String month = dateStr.substring(4, 6);
+ String day = dateStr.substring(6);
+
+ return checkDate(year, month, day);
+ }
+
+ /**
+ * <p>입력한 년, 월, 일이 유효한지 검사.</p>
+ *
+ * @param year 연도
+ * @param month 월
+ * @param day 일
+ * @return 유효한 날짜인지 여부
+ */
+ public static boolean checkDate(String year, String month, String day) {
+ try {
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd", Locale.getDefault());
+
+ Date result = formatter.parse(year + "." + month + "." + day);
+ String resultStr = formatter.format(result);
+ if (resultStr.equalsIgnoreCase(year + "." + month + "." + day))
+ return true;
+ else
+ return false;
+ } catch (ParseException e) {
+ return false;
+ }
+ }
+
+ /**
+ * 날짜형태의 String의 날짜 포맷 및 TimeZone을 변경해 주는 메서드
+ *
+ * @param strSource 바꿀 날짜 String
+ * @param fromDateFormat 기존의 날짜 형태
+ * @param toDateFormat 원하는 날짜 형태
+ * @param strTimeZone 변경할 TimeZone(""이면 변경 안함)
+ * @return 소스 String의 날짜 포맷을 변경한 String
+ */
+ public static String convertDate(String strSource, String fromDateFormat, String toDateFormat, String strTimeZone) {
+ SimpleDateFormat simpledateformat = null;
+ Date date = null;
+ String fromFormat = "";
+ String toFormat = "";
+
+ if (EgovStringUtil.isNullToString(strSource).trim().equals("")) {
+ return "";
+ }
+ if (EgovStringUtil.isNullToString(fromDateFormat).trim().equals(""))
+ fromFormat = "yyyyMMddHHmmss"; // default값
+ if (EgovStringUtil.isNullToString(toDateFormat).trim().equals(""))
+ toFormat = "yyyy-MM-dd HH:mm:ss"; // default값
+
+ try {
+ simpledateformat = new SimpleDateFormat(fromFormat, Locale.getDefault());
+ date = simpledateformat.parse(strSource);
+ if (!EgovStringUtil.isNullToString(strTimeZone).trim().equals("")) {
+ simpledateformat.setTimeZone(TimeZone.getTimeZone(strTimeZone));
+ }
+ simpledateformat = new SimpleDateFormat(toFormat, Locale.getDefault());
+ } catch (ParseException exception) {
+ throw new RuntimeException(exception);
+ }
+
+ return simpledateformat.format(date);
+
+ }
+
+ /**
+ * yyyyMMdd 형식의 날짜문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다<br/>
+ * <pre>
+ * ex) 20030405, ch(.) -> 2003.04.05
+ * ex) 200304, ch(.) -> 2003.04
+ * ex) 20040101,ch(/) --> 2004/01/01 로 리턴
+ * </pre>
+ *
+ * @param date yyyyMMdd 형식의 날짜문자열
+ * @param ch 구분자
+ * @return 변환된 문자열
+ */
+ public static String formatDate(String sDate, String ch) {
+ String dateStr = validChkDate(sDate);
+
+ String str = dateStr.trim();
+ String yyyy = "";
+ String mm = "";
+ String dd = "";
+
+ if (str.length() == 8) {
+ yyyy = str.substring(0, 4);
+ if (yyyy.equals("0000")) {
+ return "";
+ }
+
+ mm = str.substring(4, 6);
+ if (mm.equals("00")) {
+ return yyyy;
+ }
+
+ dd = str.substring(6, 8);
+ if (dd.equals("00")) {
+ return yyyy + ch + mm;
+ }
+
+ return yyyy + ch + mm + ch + dd;
+
+ } else if (str.length() == 6) {
+ yyyy = str.substring(0, 4);
+ if (yyyy.equals("0000")) {
+ return "";
+ }
+
+ mm = str.substring(4, 6);
+ if (mm.equals("00")) {
+ return yyyy;
+ }
+
+ return yyyy + ch + mm;
+
+ } else if (str.length() == 4) {
+ yyyy = str.substring(0, 4);
+ if (yyyy.equals("0000")) {
+ return "";
+ } else {
+ return yyyy;
+ }
+ } else {
+ return "";
+ }
+ }
+
+ /**
+ * HH24MISS 형식의 시간문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다 <br>
+ * <pre>
+ * ex) 151241, ch(/) -> 15/12/31
+ * </pre>
+ *
+ * @param str HH24MISS 형식의 시간문자열
+ * @param ch 구분자
+ * @return 변환된 문자열
+ */
+ public static String formatTime(String sTime, String ch) {
+ String timeStr = validChkTime(sTime);
+ return timeStr.substring(0, 2) + ch + timeStr.substring(2, 4) + ch + timeStr.substring(4, 6);
+ }
+
+ /**
+ * 연도를 입력 받아 해당 연도 2월의 말일(일수)를 문자열로 반환한다.
+ *
+ * @param year
+ * @return 해당 연도 2월의 말일(일수)
+ */
+ public String leapYear(int year) {
+ if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
+ return "29";
+ }
+
+ return "28";
+ }
+
+ /**
+ * <p>입력받은 연도가 윤년인지 아닌지 검사한다.</p>
+ *
+ * <pre>
+ * DateUtil.isLeapYear(2004) = false
+ * DateUtil.isLeapYear(2005) = true
+ * DateUtil.isLeapYear(2006) = true
+ * </pre>
+ *
+ * @param year 연도
+ * @return 윤년 여부
+ */
+ public static boolean isLeapYear(int year) {
+ if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 현재(한국기준) 날짜정보를 얻는다. <BR>
+ * 표기법은 yyyy-mm-dd <BR>
+ * @return String yyyymmdd형태의 현재 한국시간. <BR>
+ */
+ public static String getToday() {
+ return getCurrentDate("");
+ }
+
+ /**
+ * 현재(한국기준) 날짜정보를 얻는다. <BR>
+ * 표기법은 yyyy-mm-dd <BR>
+ * @return String yyyymmdd형태의 현재 한국시간. <BR>
+ */
+ public static String getCurrentDate(String dateType) {
+ Calendar aCalendar = Calendar.getInstance();
+
+ int year = aCalendar.get(Calendar.YEAR);
+ int month = aCalendar.get(Calendar.MONTH) + 1;
+ int date = aCalendar.get(Calendar.DATE);
+ String strDate = Integer.toString(year)
+ + ((month < 10) ? "0" + Integer.toString(month) : Integer.toString(month))
+ + ((date < 10) ? "0" + Integer.toString(date) : Integer.toString(date));
+
+ if (!"".equals(dateType)) {
+ strDate = convertDate(strDate, "yyyyMMdd", dateType);
+ }
+
+ return strDate;
+ }
+
+ /**
+ * 날짜형태의 String의 날짜 포맷만을 변경해 주는 메서드
+ * @param sDate 날짜
+ * @param sTime 시간
+ * @param sFormatStr 포멧 스트링 문자열
+ * @return 지정한 날짜/시간을 지정한 포맷으로 출력
+ * @See Letter Date or Time Component Presentation Examples
+ G Era designator Text AD
+ y Year Year 1996; 96
+ M Month in year Month July; Jul; 07
+ w Week in year Number 27
+ W Week in month Number 2
+ D Day in year Number 189
+ d Day in month Number 10
+ F Day of week in month Number 2
+ E Day in week Text Tuesday; Tue
+ a Am/pm marker Text PM
+ H Hour in day (0-23) Number 0
+ k Hour in day (1-24) Number 24
+ K Hour in am/pm (0-11) Number 0
+ h Hour in am/pm (1-12) Number 12
+ m Minute in hour Number 30
+ s Second in minute Number 55
+ S Millisecond Number 978
+ z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
+ Z Time zone RFC 822 time zone -0800
+
+ Date and Time Pattern Result
+ "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
+ "EEE, MMM d, ''yy" Wed, Jul 4, '01
+ "h:mm a" 12:08 PM
+ "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
+ "K:mm a, z" 0:08 PM, PDT
+ "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
+ "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
+ "yyMMddHHmmssZ" 010704120856-0700
+
+ */
+ public static String convertDate(String sDate, String sTime, String sFormatStr) {
+ String dateStr = validChkDate(sDate);
+ String timeStr = validChkTime(sTime);
+
+ Calendar cal = null;
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+ cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2)));
+ cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4)));
+
+ SimpleDateFormat sdf = new SimpleDateFormat(sFormatStr, Locale.ENGLISH);
+
+ return sdf.format(cal.getTime());
+ }
+
+ /**
+ * 입력받은 일자 사이의 임의의 일자를 반환
+ * @param sDate1 시작일자
+ * @param sDate2 종료일자
+ * @return 임의일자
+ */
+ public static String getRandomDate(String sDate1, String sDate2) {
+ String dateStr1 = validChkDate(sDate1);
+ String dateStr2 = validChkDate(sDate2);
+
+ String randomDate = null;
+
+ int sYear, sMonth, sDay;
+ int eYear, eMonth, eDay;
+
+ sYear = Integer.parseInt(dateStr1.substring(0, 4));
+ sMonth = Integer.parseInt(dateStr1.substring(4, 6));
+ sDay = Integer.parseInt(dateStr1.substring(6, 8));
+
+ eYear = Integer.parseInt(dateStr2.substring(0, 4));
+ eMonth = Integer.parseInt(dateStr2.substring(4, 6));
+ eDay = Integer.parseInt(dateStr2.substring(6, 8));
+
+ GregorianCalendar beginDate = new GregorianCalendar(sYear, sMonth - 1, sDay, 0, 0);
+ GregorianCalendar endDate = new GregorianCalendar(eYear, eMonth - 1, eDay, 23, 59);
+
+ if (endDate.getTimeInMillis() < beginDate.getTimeInMillis()) {
+ throw new IllegalArgumentException("Invalid input date : " + sDate1 + "~" + sDate2);
+ }
+
+ SecureRandom r = new SecureRandom();
+
+ r.setSeed(new Date().getTime());
+
+ long rand = ((r.nextLong() >>> 1) % (endDate.getTimeInMillis() - beginDate.getTimeInMillis() + 1)) + beginDate.getTimeInMillis();
+
+ GregorianCalendar cal = new GregorianCalendar();
+ //SimpleDateFormat calformat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat calformat = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
+ cal.setTimeInMillis(rand);
+ randomDate = calformat.format(cal.getTime());
+
+ // 랜덤문자열를 리턴
+ return randomDate;
+ }
+
+ /**
+ * 입력받은 양력일자를 변환하여 음력일자로 반환
+ * @param sDate 양력일자
+ * @return 음력일자
+ */
+ public static Map<String, String> toLunar(String sDate) {
+ String dateStr = validChkDate(sDate);
+
+ Map<String, String> hm = new HashMap<String, String>();
+ hm.put("day", "");
+ hm.put("leap", "0");
+
+ if (dateStr.length() != 8) {
+ return hm;
+ }
+
+ Calendar cal;
+ ChineseCalendar lcal;
+
+ cal = Calendar.getInstance();
+ lcal = new ChineseCalendar();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+
+ lcal.setTimeInMillis(cal.getTimeInMillis());
+
+ String year = String.valueOf(lcal.get(ChineseCalendar.EXTENDED_YEAR) - 2637);
+ String month = String.valueOf(lcal.get(ChineseCalendar.MONTH) + 1);
+ String day = String.valueOf(lcal.get(ChineseCalendar.DAY_OF_MONTH));
+ String leap = String.valueOf(lcal.get(ChineseCalendar.IS_LEAP_MONTH));
+
+ String pad4Str = "0000";
+ String pad2Str = "00";
+
+ String retYear = (pad4Str + year).substring(year.length());
+ String retMonth = (pad2Str + month).substring(month.length());
+ String retDay = (pad2Str + day).substring(day.length());
+
+ String SDay = retYear + retMonth + retDay;
+
+ hm.put("day", SDay);
+ hm.put("leap", leap);
+
+ return hm;
+ }
+
+ /**
+ * 입력받은 음력일자를 변환하여 양력일자로 반환
+ * @param sDate 음력일자
+ * @param iLeapMonth 음력윤달여부(IS_LEAP_MONTH)
+ * @return 양력일자
+ */
+ public static String toSolar(String sDate, int iLeapMonth) {
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal;
+ ChineseCalendar lcal;
+
+ cal = Calendar.getInstance();
+ lcal = new ChineseCalendar();
+
+ lcal.set(ChineseCalendar.EXTENDED_YEAR, Integer.parseInt(dateStr.substring(0, 4)) + 2637);
+ lcal.set(ChineseCalendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ lcal.set(ChineseCalendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+ lcal.set(ChineseCalendar.IS_LEAP_MONTH, iLeapMonth);
+
+ cal.setTimeInMillis(lcal.getTimeInMillis());
+
+ String year = String.valueOf(cal.get(Calendar.YEAR));
+ String month = String.valueOf(cal.get(Calendar.MONTH) + 1);
+ String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
+
+ String pad4Str = "0000";
+ String pad2Str = "00";
+
+ String retYear = (pad4Str + year).substring(year.length());
+ String retMonth = (pad2Str + month).substring(month.length());
+ String retDay = (pad2Str + day).substring(day.length());
+
+ return retYear + retMonth + retDay;
+ }
+
+ /**
+ * 입력받은 요일의 영문명을 국문명의 요일로 반환
+ * @param sWeek 영문 요일명
+ * @return 국문 요일명
+ */
+ public static String convertWeek(String sWeek) {
+ String retStr = null;
+
+ if (sWeek.equals("SUN")) {
+ retStr = "일요일";
+ } else if (sWeek.equals("MON")) {
+ retStr = "월요일";
+ } else if (sWeek.equals("TUE")) {
+ retStr = "화요일";
+ } else if (sWeek.equals("WED")) {
+ retStr = "수요일";
+ } else if (sWeek.equals("THR")) {
+ retStr = "목요일";
+ } else if (sWeek.equals("FRI")) {
+ retStr = "금요일";
+ } else if (sWeek.equals("SAT")) {
+ retStr = "토요일";
+ }
+
+ return retStr;
+ }
+
+ /**
+ * 입력일자의 유효 여부를 확인
+ * @param sDate 일자
+ * @return 유효 여부
+ */
+ public static boolean validDate(String sDate) {
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal;
+ boolean ret = false;
+
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+
+ String year = String.valueOf(cal.get(Calendar.YEAR));
+ String month = String.valueOf(cal.get(Calendar.MONTH) + 1);
+ String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
+
+ String pad4Str = "0000";
+ String pad2Str = "00";
+
+ String retYear = (pad4Str + year).substring(year.length());
+ String retMonth = (pad2Str + month).substring(month.length());
+ String retDay = (pad2Str + day).substring(day.length());
+
+ String retYMD = retYear + retMonth + retDay;
+
+ if (sDate.equals(retYMD)) {
+ ret = true;
+ }
+
+ return ret;
+ }
+
+ /**
+ * 입력일자, 요일의 유효 여부를 확인
+ * @param sDate 일자
+ * @param sWeek 요일 (DAY_OF_WEEK)
+ * @return 유효 여부
+ */
+ public static boolean validDate(String sDate, int sWeek) {
+ String dateStr = validChkDate(sDate);
+
+ Calendar cal;
+ boolean ret = false;
+
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
+ cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1);
+ cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8)));
+
+ int Week = cal.get(Calendar.DAY_OF_WEEK);
+
+ if (validDate(sDate)) {
+ if (sWeek == Week) {
+ ret = true;
+ }
+ }
+
+ return ret;
+ }
+
+ /**
+ * 입력시간의 유효 여부를 확인
+ * @param sTime 입력시간
+ * @return 유효 여부
+ */
+ public static boolean validTime(String sTime) {
+ String timeStr = validChkTime(sTime);
+
+ Calendar cal;
+ boolean ret = false;
+
+ cal = Calendar.getInstance();
+
+ cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2)));
+ cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4)));
+
+ String HH = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
+ String MM = String.valueOf(cal.get(Calendar.MINUTE));
+
+ String pad2Str = "00";
+
+ String retHH = (pad2Str + HH).substring(HH.length());
+ String retMM = (pad2Str + MM).substring(MM.length());
+
+ String retTime = retHH + retMM;
+
+ if (sTime.equals(retTime)) {
+ ret = true;
+ }
+
+ return ret;
+ }
+
+ /**
+ * 입력된 일자에 연, 월, 일을 가감한 날짜의 요일을 반환
+ * @param sDate 날짜
+ * @param year 연
+ * @param month 월
+ * @param day 일
+ * @return 계산된 일자의 요일(DAY_OF_WEEK)
+ */
+ public static String addYMDtoWeek(String sDate, int year, int month, int day) {
+ String dateStr = validChkDate(sDate);
+
+ dateStr = addYearMonthDay(dateStr, year, month, day);
+
+ Calendar cal = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH);
+ try {
+ cal.setTime(sdf.parse(dateStr));
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ SimpleDateFormat rsdf = new SimpleDateFormat("E", Locale.ENGLISH);
+
+ return rsdf.format(cal.getTime());
+ }
+
+ /**
+ * 입력된 일자에 연, 월, 일, 시간, 분을 가감한 날짜, 시간을 포멧스트링 형식으로 반환
+ * @param sDate 날짜
+ * @param sTime 시간
+ * @param year 연
+ * @param month 월
+ * @param day 일
+ * @param hour 시간
+ * @param minute 분
+ * @param formatStr 포멧스트링
+ * @return
+ */
+ public static String addYMDtoDayTime(String sDate, String sTime, int year, int month, int day, int hour, int minute, String formatStr) {
+ String dateStr = validChkDate(sDate);
+ String timeStr = validChkTime(sTime);
+
+ dateStr = addYearMonthDay(dateStr, year, month, day);
+
+ dateStr = convertDate(dateStr, timeStr, "yyyyMMddHHmm");
+
+ Calendar cal = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH);
+
+ try {
+ cal.setTime(sdf.parse(dateStr));
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ if (hour != 0) {
+ cal.add(Calendar.HOUR, hour);
+ }
+
+ if (minute != 0) {
+ cal.add(Calendar.MINUTE, minute);
+ }
+
+ SimpleDateFormat rsdf = new SimpleDateFormat(formatStr, Locale.ENGLISH);
+
+ return rsdf.format(cal.getTime());
+ }
+
+ /**
+ * 입력된 일자를 int 형으로 반환
+ * @param sDate 일자
+ * @return int(일자)
+ */
+ public static int datetoInt(String sDate) {
+ return Integer.parseInt(convertDate(sDate, "0000", "yyyyMMdd"));
+ }
+
+ /**
+ * 입력된 시간을 int 형으로 반환
+ * @param sTime 시간
+ * @return int(시간)
+ */
+ public static int timetoInt(String sTime) {
+ return Integer.parseInt(convertDate("00000101", sTime, "HHmm"));
+ }
+
+ /**
+ * 입력된 일자 문자열을 확인하고 8자리로 리턴
+ * @param sDate
+ * @return
+ */
+ public static String validChkDate(String dateStr) {
+ if (dateStr == null || !(dateStr.trim().length() == 8 || dateStr.trim().length() == 10)) {
+ throw new IllegalArgumentException("Invalid date format: " + dateStr);
+ }
+
+ if (dateStr.length() == 10) {
+ return EgovStringUtil.removeMinusChar(dateStr);
+ }
+
+ return dateStr;
+ }
+
+ /**
+ * 입력된 일자 문자열을 확인하고 8자리로 리턴
+ * @param sDate
+ * @return
+ */
+ public static String validChkTime(String timeStr) {
+ if (timeStr == null || !(timeStr.trim().length() == 4)) {
+ throw new IllegalArgumentException("Invalid time format: " + timeStr);
+ }
+
+ if (timeStr.length() == 5) {
+ timeStr = EgovStringUtil.remove(timeStr, ':');
+ }
+
+ return timeStr;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovDateUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberFormat.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberFormat.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberFormat.java (revision 7)
@@ -0,0 +1,258 @@
+package egovframework.com.utl.fcc.service;
+
+import java.text.NumberFormat;
+import java.util.Locale;
+
+/**
+ * 숫자, 통화, 퍼센트에 대한 형식 변환을 수행하는 클래스
+ */
+public class EgovNumberFormat {
+
+ private static final int MAX_FRACTION_DIGIT = 3;
+ private static final boolean GROUPING_USED = true;
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param number 숫자
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Number number) {
+ return formatNumber(number, GROUPING_USED, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Locale locale, Number number) {
+ return formatNumber(locale, number, GROUPING_USED, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Number number, boolean groupingUsed) {
+ return formatNumber(number, groupingUsed, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Locale locale, Number number, boolean groupingUsed) {
+ return formatNumber(locale, number, groupingUsed, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param number 숫자
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Number number, int maxFactionDigits) {
+ return formatNumber(number, GROUPING_USED, maxFactionDigits);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Locale locale, Number number, int maxFactionDigits) {
+ return formatNumber(locale, number, GROUPING_USED, maxFactionDigits);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Number number, boolean groupingUsed, int maxFactionDigits) {
+ NumberFormat numberberFormat = NumberFormat.getNumberInstance();
+ numberberFormat.setGroupingUsed(groupingUsed);
+ numberberFormat.setMaximumFractionDigits(maxFactionDigits);
+ return numberberFormat.format(number);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 숫자를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 숫자 문자열
+ */
+ public static String formatNumber(Locale locale, Number number, boolean groupingUsed, int maxFactionDigits) {
+ NumberFormat numberberFormat = NumberFormat.getNumberInstance(locale);
+ numberberFormat.setGroupingUsed(groupingUsed);
+ numberberFormat.setMaximumFractionDigits(maxFactionDigits);
+ return numberberFormat.format(number);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 통화를 변환한다.
+ *
+ * @param number 숫자
+ * @return 통화 문자열
+ */
+ public static String formatCurrency(Number number) {
+ return formatCurrency(number, GROUPING_USED);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 통화를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @return 통화 문자열
+ */
+ public static String formatCurrency(Locale locale, Number number) {
+ return formatCurrency(locale, number, GROUPING_USED);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 통화를 변환한다.
+ *
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @return 통화 문자열
+ */
+ public static String formatCurrency(Number number, boolean groupingUsed) {
+ NumberFormat numberberFormat = NumberFormat.getCurrencyInstance();
+ numberberFormat.setGroupingUsed(groupingUsed);
+ return numberberFormat.format(number);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 통화를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @return 통화 문자열
+ */
+ public static String formatCurrency(Locale locale, Number number, boolean groupingUsed) {
+ NumberFormat numberberFormat = NumberFormat.getCurrencyInstance(locale);
+ numberberFormat.setGroupingUsed(groupingUsed);
+ return numberberFormat.format(number);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param number 숫자
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Number number) {
+ return formatPercent(number, GROUPING_USED, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Locale locale, Number number) {
+ return formatPercent(locale, number, GROUPING_USED, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Number number, boolean groupingUsed) {
+ return formatPercent(number, groupingUsed, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Locale locale, Number number, boolean groupingUsed) {
+ return formatPercent(locale, number, groupingUsed, MAX_FRACTION_DIGIT);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param number 숫자
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Number number, int maxFactionDigits) {
+ return formatPercent(number, GROUPING_USED, maxFactionDigits);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Locale locale, Number number, int maxFactionDigits) {
+ return formatPercent(locale, number, GROUPING_USED, maxFactionDigits);
+ }
+
+ /**
+ * 기본 Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Number number, boolean groupingUsed, int maxFactionDigits) {
+ NumberFormat numberberFormat = NumberFormat.getPercentInstance();
+ numberberFormat.setGroupingUsed(groupingUsed);
+ numberberFormat.setMaximumFractionDigits(maxFactionDigits);
+ return numberberFormat.format(number);
+ }
+
+ /**
+ * Locale에 해당하는 형식으로 퍼센트를 변환한다.
+ *
+ * @param locale 로케일
+ * @param number 숫자
+ * @param groupingUsed 그룹 분리기호 포함 여부
+ * @param maxFactionDigits 변환된 문자열에서 출력할 소수점 이하 최대 자리수
+ * @return 퍼센트 문자열
+ */
+ public static String formatPercent(Locale locale, Number number, boolean groupingUsed, int maxFactionDigits) {
+ NumberFormat numberberFormat = NumberFormat.getPercentInstance(locale);
+ numberberFormat.setGroupingUsed(groupingUsed);
+ numberberFormat.setMaximumFractionDigits(maxFactionDigits);
+ return numberberFormat.format(number);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberFormat.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFileUploadUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFileUploadUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFileUploadUtil.java (revision 7)
@@ -0,0 +1,202 @@
+package egovframework.com.utl.fcc.service;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import egovframework.com.cmm.EgovWebUtil;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.util.WebUtils;
+
+/**
+ * @Class Name : EgovFileUploadUtil.java
+ * @Description : Spring 기반 File Upload 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.08.26 한성곤 최초 생성
+ * 2018.08.17 신용호 uploadFilesExt(확장자 기록) 추가
+ * 2019.12.06 신용호 checkFileExtension(), checkFileMaxSize() 추가
+ * 2020.08.05 신용호 uploadFilesExt Parameter 수정
+ * 2021.02.16 신용호 WebUtils.getNativeRequest(request,MultipartHttpServletRequest.class);
+ *
+ * @author 공통컴포넌트 개발팀 한성곤
+ * @since 2009.08.26
+ * @version 1.0
+ * @see
+ */
+public class EgovFileUploadUtil extends EgovFormBasedFileUtil {
+ /**
+ * 파일을 Upload 처리한다.
+ *
+ * @param request
+ * @param where
+ * @param maxFileSize
+ * @return
+ * @throws Exception
+ */
+ public static List<EgovFormBasedFileVo> uploadFiles(HttpServletRequest request, String where, long maxFileSize) throws Exception {
+ List<EgovFormBasedFileVo> list = new ArrayList<EgovFormBasedFileVo>();
+
+ //MultipartHttpServletRequest mptRequest = (MultipartHttpServletRequest) request;
+ MultipartHttpServletRequest mptRequest = WebUtils.getNativeRequest(request,MultipartHttpServletRequest.class);
+
+ Iterator<?> fileIter = mptRequest.getFileNames();
+
+ while (fileIter.hasNext()) {
+ MultipartFile mFile = mptRequest.getFile((String) fileIter.next());
+
+ EgovFormBasedFileVo vo = new EgovFormBasedFileVo();
+
+ String tmp = mFile.getOriginalFilename();
+
+ if (tmp.lastIndexOf("\\") >= 0) {
+ tmp = tmp.substring(tmp.lastIndexOf("\\") + 1);
+ }
+
+ vo.setFileName(tmp);
+ vo.setContentType(mFile.getContentType());
+ vo.setServerSubPath(getTodayString());
+ vo.setPhysicalName(getPhysicalFileName());
+ vo.setSize(mFile.getSize());
+
+ if (tmp.lastIndexOf(".") >= 0) {
+ vo.setPhysicalName(vo.getPhysicalName()); // 2012.11 KISA 보안조치
+ }
+
+ if (mFile.getSize() > 0) {
+ InputStream is = null;
+
+ try {
+ is = mFile.getInputStream();
+ saveFile(is, new File(EgovWebUtil.filePathBlackList(where + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName())));
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ list.add(vo);
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 파일을 Upload(확장명 저장 및 확장자 제한) 처리한다.
+ *
+ * @param request
+ * @param where
+ * @param maxFileSize
+ * @return
+ * @throws Exception
+ */
+ public static List<EgovFormBasedFileVo> uploadFilesExt(MultipartHttpServletRequest mptRequest, String where, long maxFileSize, String extensionWhiteList) throws Exception {
+ List<EgovFormBasedFileVo> list = new ArrayList<EgovFormBasedFileVo>();
+
+ Iterator<?> fileIter = mptRequest.getFileNames();
+
+ while (fileIter.hasNext()) {
+ MultipartFile mFile = mptRequest.getFile((String) fileIter.next());
+
+ EgovFormBasedFileVo vo = new EgovFormBasedFileVo();
+
+ String tmp = mFile.getOriginalFilename();
+
+ if (tmp.lastIndexOf("\\") >= 0) {
+ tmp = tmp.substring(tmp.lastIndexOf("\\") + 1);
+ }
+ String ext = "";
+ if ( tmp.lastIndexOf(".") > 0 )
+ ext = getFileExtension(tmp).toLowerCase();
+ else
+ throw new SecurityException("Unacceptable file extension."); // 허용되지 않는 확장자 처리
+ if ( extensionWhiteList.indexOf(ext) < 0 )
+ throw new SecurityException("Unacceptable file extension."); // 허용되지 않는 확장자 처리
+
+ vo.setFileName(tmp);
+ vo.setContentType(mFile.getContentType());
+ vo.setServerSubPath(getTodayString());
+ vo.setPhysicalName(getPhysicalFileName()+"."+ext);
+ vo.setSize(mFile.getSize());
+
+ if (tmp.lastIndexOf(".") >= 0) {
+ vo.setPhysicalName(vo.getPhysicalName()); // 2012.11 KISA 보안조치
+ }
+
+ if (mFile.getSize() > 0) {
+ InputStream is = null;
+
+ try {
+ is = mFile.getInputStream();
+ saveFile(is, new File(EgovWebUtil.filePathBlackList(where + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName())));
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ list.add(vo);
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 파일 확장자를 추출한다.
+ *
+ * @param fileNamePath
+ * @return 확장자 : "" 또는 추출된 확장자
+ */
+ public static String getFileExtension(String fileNamePath) {
+
+ if (fileNamePath == null) return "";
+ String ext = fileNamePath.substring(fileNamePath.lastIndexOf(".") + 1,fileNamePath.length());
+
+ return (ext == null) ? "" : ext;
+ }
+
+ /**
+ * 파일 확장자의 허용유무를 검증한다.
+ *
+ * @param fileNamePath
+ * @param whiteListExtensions : ex) .png.pdf.txt
+ * @return true : 허용
+ * @return true : 불가
+ */
+ public static boolean checkFileExtension(String fileNamePath, String whiteListExtensions) {
+ String extension = getFileExtension(fileNamePath);
+
+ if ( "".equals(extension) ) return false;
+
+ if ( whiteListExtensions == null ) return false;
+ if ( "".equals(whiteListExtensions) ) return false;
+
+ if ( whiteListExtensions.indexOf("."+extension) >= 0 ) return true;
+ else return false;
+ }
+
+ /**
+ * 최대 파일 사이즈 허용유무를 검증한다.
+ *
+ * @param multipartFile
+ * @param maxFileSize : ex) 1048576 = 1M , 1K = 1024
+ * @return true : 허용
+ * @return true : 불가
+ */
+ public static boolean checkFileMaxSize(MultipartFile multipartFile, long maxFileSize) {
+
+ if ( multipartFile == null ) return false;
+
+ if ( multipartFile.getSize() <= maxFileSize ) return true;
+ else return false;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFileUploadUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberCheckUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberCheckUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberCheckUtil.java (revision 7)
@@ -0,0 +1,246 @@
+package egovframework.com.utl.fcc.service;
+
+/**
+ *
+ * 번호유효성체크 에 대한 Util 클래스
+ * @author 공통컴포넌트 개발팀 윤성록
+ * @since 2009.06.10
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.06.10 윤성록 최초 생성
+ * 2012.02.27 이기하 법인번호 체크로직 수정
+ *
+ * </pre>
+ */
+public class EgovNumberCheckUtil {
+
+ /**
+ * <p>XXXXXX - XXXXXXX 형식의 주민번호 앞, 뒤 문자열 2개 입력 받아 유효한 주민번호인지 검사.</p>
+ *
+ *
+ * @param 6자리 주민앞번호 문자열 , 7자리 주민뒷번호 문자열
+ * @return 유효한 주민번호인지 여부 (True/False)
+ */
+ @SuppressWarnings("static-access")
+ public static boolean checkJuminNumber(String jumin1, String jumin2) {
+
+ EgovDateUtil egovDateUtil = new EgovDateUtil();
+ String juminNumber = jumin1 + jumin2;
+ String IDAdd = "234567892345"; // 주민등록번호에 가산할 값
+
+ int count_num = 0;
+ int add_num = 0;
+ int total_id = 0; //검증을 위한 변수선언
+
+ if (juminNumber.length() != 13) return false; // 주민등록번호 자리수가 맞는가를 확인
+
+ for (int i = 0; i <12 ; i++){
+ if(juminNumber.charAt(i)< '0' || juminNumber.charAt(i) > '9') return false; //숫자가 아닌 값이 들어왔는지를 확인
+ count_num = Character.getNumericValue(juminNumber.charAt(i));
+ add_num = Character.getNumericValue(IDAdd.charAt(i));
+ total_id += count_num * add_num; //유효자리 검증식을 적용
+ }
+
+ if(Character.getNumericValue(juminNumber.charAt(0)) == 0 || Character.getNumericValue(juminNumber.charAt(0)) == 1){
+ if(Character.getNumericValue(juminNumber.charAt(6)) > 4) return false;
+ String temp = "20" + juminNumber.substring(0,6);
+ if(!egovDateUtil.checkDate(temp)) return false;
+ }else{
+ if(Character.getNumericValue(juminNumber.charAt(6)) > 2) return false;
+ String temp = "19" + juminNumber.substring(0,6);
+ if(!egovDateUtil.checkDate(temp)) return false;
+ } //주민번호 앞자리 날짜유효성체크 & 성별구분 숫자 체크
+
+ if(Character.getNumericValue(juminNumber.charAt(12)) == (11 - (total_id % 11)) % 10) //마지막 유효숫자와 검증식을 통한 값의 비교
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * <p>XXXXXXXXXXXXX 형식의 13자리 주민번호 1개를 입력 받아 유효한 주민번호인지 검사.</p>
+ *
+ *
+ * @param 13자리 주민번호 문자열
+ * @return 유효한 주민번호인지 여부 (True/False)
+ */
+ public static boolean checkJuminNumber(String jumin) {
+
+ if(jumin.length() != 13) return false;
+
+ return checkJuminNumber(jumin.substring(0,6), jumin.substring(6,13)); //주민번호
+ }
+
+ /**
+ * <p>XXXXXX - XXXXXXX 형식의 법인번호 앞, 뒤 문자열 2개 입력 받아 유효한 법인번호인지 검사.</p>
+ *
+ *
+ * @param 6자리 법인앞번호 문자열 , 7자리 법인뒷번호 문자열
+ * @return 유효한 법인번호인지 여부 (True/False)
+ */
+ public static boolean checkBubinNumber(String bubin1, String bubin2) {
+
+ String bubinNumber = bubin1 + bubin2;
+
+ int hap = 0;
+ int temp = 1; //유효검증식에 사용하기 위한 변수
+
+ if(bubinNumber.length() != 13) return false; //법인번호의 자리수가 맞는 지를 확인
+
+ for(int i=0; i < 13; i++){
+ if (bubinNumber.charAt(i) < '0' || bubinNumber.charAt(i) > '9') //숫자가 아닌 값이 들어왔는지를 확인
+ return false;
+ }
+
+
+ // 2012.02.27 법인번호 체크로직 수정( i<13 -> i<12 )
+ // 맨끝 자리 수는 전산시스템으로 오류를 검증하기 위해 부여되는 검증번호임
+ for ( int i=0; i<12; i++){
+ if(temp ==3) temp = 1;
+ hap = hap + (Character.getNumericValue(bubinNumber.charAt(i)) * temp);
+ temp++;
+ } //검증을 위한 식의 계산
+
+ if ((10 - (hap%10))%10 == Character.getNumericValue(bubinNumber.charAt(12))) //마지막 유효숫자와 검증식을 통한 값의 비교
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * <p>XXXXXXXXXXXXX 형식의 13자리 법인번호 1개를 입력 받아 유효한 법인번호인지 검사.</p>
+ *
+ *
+ * @param 13자리 법인번호 문자열
+ * @return 유효한 법인번호인지 여부 (True/False)
+ */
+ public static boolean checkBubinNumber(String bubin) {
+
+ if(bubin.length() != 13) return false;
+
+ return checkBubinNumber(bubin.substring(0,6), bubin.substring(6,13));
+ }
+
+
+ /**
+ * <p>xxx - xx - xxxx 형식의 사업자번호 앞,중간, 뒤 문자열 3개 입력 받아 유효한 사업자번호인지 검사.</p>
+ *
+ *
+ * @param 3자리 사업자앞번호 문자열 , 2자리 사업자중간번호 문자열, 5자리 사업자뒷번호 문자열
+ * @return 유효한 사업자번호인지 여부 (True/False)
+ */
+ public static boolean checkCompNumber(String comp1, String comp2, String comp3) {
+
+ String compNumber = comp1 + comp2 + comp3;
+
+ int hap = 0;
+ int temp = 0;
+ int check[] = {1,3,7,1,3,7,1,3,5}; //사업자번호 유효성 체크 필요한 수
+
+ if(compNumber.length() != 10) //사업자번호의 길이가 맞는지를 확인한다.
+ return false;
+
+ for(int i=0; i < 9; i++){
+ if(compNumber.charAt(i) < '0' || compNumber.charAt(i) > '9') //숫자가 아닌 값이 들어왔는지를 확인한다.
+ return false;
+
+ hap = hap + (Character.getNumericValue(compNumber.charAt(i)) * check[temp]); //검증식 적용
+ temp++;
+ }
+
+ hap += (Character.getNumericValue(compNumber.charAt(8))*5)/10;
+
+ if ((10 - (hap%10))%10 == Character.getNumericValue(compNumber.charAt(9))) //마지막 유효숫자와 검증식을 통한 값의 비교
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * <p>XXXXXXXXXX 형식의 10자리 사업자번호 3개를 입력 받아 유효한 사업자번호인지 검사.</p>
+ *
+ *
+ * @param 10자리 사업자번호 문자열
+ * @return 유효한 사업자번호인지 여부 (True/False)
+ */
+ public static boolean checkCompNumber(String comp) {
+
+ if(comp.length() != 10) return false;
+ return checkCompNumber(comp.substring(0,3), comp.substring(3,5), comp.substring(5,10));
+ }
+
+ /**
+ * <p>XXXXXX - XXXXXXX 형식의 외국인등록번호 앞, 뒤 문자열 2개 입력 받아 유효한 외국인등록번호인지 검사.</p>
+ *
+ *
+ * @param 6자리 외국인등록앞번호 문자열 , 7자리 외국인등록뒷번호 문자열
+ * @return 유효한 외국인등록번호인지 여부 (True/False)
+ */
+ @SuppressWarnings("static-access")
+ public static boolean checkforeignNumber( String foreign1, String foreign2 ) {
+
+ EgovDateUtil egovDateUtil = new EgovDateUtil();
+ String foreignNumber = foreign1 + foreign2;
+ int check = 0;
+
+ if( foreignNumber.length() != 13 ) //외국인등록번호의 길이가 맞는지 확인한다.
+ return false;
+
+ for(int i=0; i < 13; i++){
+ if (foreignNumber.charAt(i) < '0' || foreignNumber.charAt(i) > '9') //숫자가 아닌 값이 들어왔는지를 확인한다.
+ return false;
+ }
+
+ if(Character.getNumericValue(foreignNumber.charAt(0)) == 0 || Character.getNumericValue(foreignNumber.charAt(0)) == 1){
+ if(Character.getNumericValue(foreignNumber.charAt(6)) == 5 && Character.getNumericValue(foreignNumber.charAt(6)) == 6) return false;
+ String temp = "20" + foreignNumber.substring(0,6);
+ if(!egovDateUtil.checkDate(temp)) return false;
+ }else{
+ if(Character.getNumericValue(foreignNumber.charAt(6)) == 5 && Character.getNumericValue(foreignNumber.charAt(6)) == 6) return false;
+ String temp = "19" + foreignNumber.substring(0,6);
+ if(!egovDateUtil.checkDate(temp)) return false;
+ } //외국인등록번호 앞자리 날짜유효성체크 & 성별구분 숫자 체크
+
+ for( int i = 0 ; i < 12 ; i++ ) {
+ check += ( ( 9 - i % 8 ) * Character.getNumericValue( foreignNumber.charAt( i ) ) );
+ }
+
+ if ( check % 11 == 0 ){
+ check = 1;
+ }else if ( check % 11==10 ){
+ check = 0;
+ }else
+ check = check % 11;
+
+ if ( check + 2 > 9 ){
+ check = check + 2- 10;
+ }else check = check+2; //검증식을 통합 값의 도출
+
+ if( check == Character.getNumericValue( foreignNumber.charAt( 12 ) ) ) //마지막 유효숫자와 검증식을 통한 값의 비교
+ return true;
+ else
+ return false;
+ }
+
+
+ /**
+ * <p>XXXXXXXXXXXXX 형식의 13자리 외국인등록번호 1개를 입력 받아 유효한 외국인등록번호인지 검사.</p>
+ *
+ *
+ * @param 13자리 외국인등록번호 문자열
+ * @return 유효한 외국인등록번호인지 여부 (True/False)
+ */
+ public static boolean checkforeignNumber( String foreign ) {
+
+ if(foreign.length() != 13) return false;
+ return checkforeignNumber(foreign.substring(0,6), foreign.substring(6,13));
+ }
+}
+
+
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberCheckUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java (revision 7)
@@ -0,0 +1,298 @@
+package egovframework.com.utl.fcc.service;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.fileupload.FileItemIterator;
+import org.apache.commons.fileupload.FileItemStream;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.fileupload.util.Streams;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @Class Name : EgovFormBasedFileUtil.java
+ * @Description : Form-based File Upload 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.08.26 한성곤 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2019.12.09 신용호 KISA 보안약점 조치 (위험한 형식 파일 업로드) : uploadFiles 삭제 => EgovFileUploadUtil.uploadFilesExt(확장자 기록) 대체
+ *
+ * @author 공통컴포넌트 개발팀 한성곤
+ * @since 2009.08.26
+ * @version 1.0
+ * @see
+ */
+public class EgovFormBasedFileUtil {
+ /** Buffer size */
+ public static final int BUFFER_SIZE = 8192;
+
+ public static final String SEPERATOR = File.separator;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovFormBasedFileUtil.class);
+
+ /**
+ * 오늘 날짜 문자열 취득.
+ * ex) 20090101
+ * @return
+ */
+ public static String getTodayString() {
+ SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
+
+ return format.format(new Date());
+ }
+
+ /**
+ * 물리적 파일명 생성.
+ * @return
+ */
+ public static String getPhysicalFileName() {
+ return EgovFormBasedUUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
+ }
+
+ /**
+ * 파일명 변환.
+ * @param filename String
+ * @return
+ * @throws Exception
+ */
+ protected static String convert(String filename) throws Exception {
+ //return java.net.URLEncoder.encode(filename, "utf-8");
+ return filename;
+ }
+
+ /**
+ * Stream으로부터 파일을 저장함.
+ * @param is InputStream
+ * @param file File
+ * @throws IOException
+ */
+ public static long saveFile(InputStream is, File file) throws IOException {
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (file.getParentFile() == null) {
+ LOGGER.debug("file.getParentFile() is null");
+ throw new RuntimeException("file.getParentFile() is null");
+ }
+
+ // 디렉토리 생성
+ if (!file.getParentFile().exists()) {
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(file.getParentFile().mkdirs()){
+ LOGGER.debug("[file.mkdirs] file : Directory Creation Success");
+ }else{
+ LOGGER.error("[file.mkdirs] file : Directory Creation Fail");
+ }
+ }
+
+ OutputStream os = null;
+ long size = 0L;
+
+ try {
+ os = new FileOutputStream(file);
+
+ int bytesRead = 0;
+ byte[] buffer = new byte[BUFFER_SIZE];
+
+ while ((bytesRead = is.read(buffer, 0, BUFFER_SIZE)) != -1) {
+ size += bytesRead;
+ os.write(buffer, 0, bytesRead);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(os);
+ }
+
+ return size;
+ }
+
+ /**
+ * 파일을 Upload 처리한다. (삭제)
+ * EgovFileUploadUtil.uploadFilesExt(확장자 확인) 대체
+ *
+ * @param request
+ * @param where
+ * @param maxFileSize
+ * @return
+ * @throws Exception
+ */
+ /*
+ public static List<EgovFormBasedFileVo> uploadFiles(HttpServletRequest request, String where, long maxFileSize) throws Exception {
+ List<EgovFormBasedFileVo> list = new ArrayList<EgovFormBasedFileVo>();
+
+ // Check that we have a file upload request
+ boolean isMultipart = ServletFileUpload.isMultipartContent(request);
+
+ if (isMultipart) {
+ // Create a new file upload handler
+ ServletFileUpload upload = new ServletFileUpload();
+ upload.setFileSizeMax(maxFileSize); // SizeLimitExceededException
+
+ // Parse the request
+ FileItemIterator iter = upload.getItemIterator(request);
+ while (iter.hasNext()) {
+ FileItemStream item = iter.next();
+ String name = item.getFieldName();
+ InputStream stream = item.openStream();
+ if (item.isFormField()) {
+ LOGGER.info("Form field '{}' with value '{}' detected.", name, Streams.asString(stream));
+ } else {
+ LOGGER.info("File field '{}' with file name '{}' detected.", name, item.getName());
+
+ if ("".equals(item.getName())) {
+ continue;
+ }
+
+ // Process the input stream
+ EgovFormBasedFileVo vo = new EgovFormBasedFileVo();
+
+ String tmp = item.getName();
+
+ if (tmp.lastIndexOf("\\") >= 0) {
+ tmp = tmp.substring(tmp.lastIndexOf("\\") + 1);
+ }
+
+ vo.setFileName(tmp);
+ vo.setContentType(item.getContentType());
+ vo.setServerSubPath(getTodayString());
+ vo.setPhysicalName(getPhysicalFileName());
+
+ if (tmp.lastIndexOf(".") >= 0) {
+ vo.setPhysicalName(vo.getPhysicalName() + tmp.substring(tmp.lastIndexOf(".")));
+ }
+
+ long size = saveFile(stream, new File(EgovWebUtil.filePathBlackList(where) + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName()));
+
+ vo.setSize(size);
+
+ list.add(vo);
+ }
+ }
+ } else {
+ throw new IOException("form's 'enctype' attribute have to be 'multipart/form-data'");
+ }
+
+ return list;
+ }*/
+
+ /**
+ * 파일을 Download 처리한다.
+ *
+ * @param response
+ * @param where
+ * @param serverSubPath
+ * @param physicalName
+ * @param original
+ * @throws Exception
+ */
+ public static void downloadFile(HttpServletResponse response, String where, String serverSubPath, String physicalName, String original) throws Exception {
+ String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName;
+
+ File file = new File(EgovWebUtil.filePathBlackList(downFileName));
+
+ if (!file.exists()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ if (!file.isFile()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ byte[] b = new byte[BUFFER_SIZE];
+
+ original = original.replaceAll("\r", "").replaceAll("\n", "");
+ response.setContentType("application/octet-stream");
+ response.setHeader("Content-Disposition", "attachment; filename=\"" + convert(original) + "\";");
+ response.setHeader("Content-Transfer-Encoding", "binary");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Expires", "0");
+
+ BufferedInputStream fin = null;
+ BufferedOutputStream outs = null;
+
+ try {
+ fin = new BufferedInputStream(new FileInputStream(file));
+ outs = new BufferedOutputStream(response.getOutputStream());
+
+ int read = 0;
+
+ while ((read = fin.read(b)) != -1) {
+ outs.write(b, 0, read);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(outs, fin);
+ }
+ }
+
+ /**
+ * 이미지에 대한 미리보기 기능을 제공한다.
+ *
+ * mimeType의 경우는 JSP 상에서 다음과 같이 얻을 수 있다.
+ * getServletConfig().getServletContext().getMimeType(name);
+ *
+ * @param response
+ * @param where
+ * @param serverSubPath
+ * @param physicalName
+ * @param mimeType
+ * @throws Exception
+ */
+ public static void viewFile(HttpServletResponse response, String where, String serverSubPath, String physicalName, String mimeTypeParam) throws Exception {
+ String mimeType = mimeTypeParam;
+ String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName;
+
+ File file = new File(EgovWebUtil.filePathBlackList(downFileName));
+
+ if (!file.exists()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ if (!file.isFile()) {
+ throw new FileNotFoundException(downFileName);
+ }
+
+ byte[] b = new byte[BUFFER_SIZE];
+
+ if (mimeType == null) {
+ mimeType = "application/octet-stream;";
+ }
+
+ response.setContentType(EgovWebUtil.removeCRLF(mimeType));
+ response.setHeader("Content-Disposition", "filename=image;");
+
+ BufferedInputStream fin = null;
+ BufferedOutputStream outs = null;
+
+ try {
+ fin = new BufferedInputStream(new FileInputStream(file));
+ outs = new BufferedOutputStream(response.getOutputStream());
+
+ int read = 0;
+
+ while ((read = fin.read(b)) != -1) {
+ outs.write(b, 0, read);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(outs, fin);
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberUtil.java (revision 7)
@@ -0,0 +1,216 @@
+/**
+ * @Class Name : EgovNumberUtil.java
+ * @Description : 숫자 데이터 처리 관련 유틸리티
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.13 이삼섭 최초 생성
+ *
+ * @author 공통 서비스 개발팀 이삼섭
+ * @since 2009. 02. 13
+ * @version 1.0
+ * @see
+ *
+ */
+
+package egovframework.com.utl.fcc.service;
+
+import java.security.SecureRandom;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class EgovNumberUtil {
+
+ /**
+ * 특정숫자 집합에서 랜덤 숫자를 구하는 기능 시작숫자와 종료숫자 사이에서 구한 랜덤 숫자를 반환한다
+ *
+ * @param startNum - 시작숫자
+ * @param endNum - 종료숫자
+ * @return 랜덤숫자
+ * @see
+ */
+ public static int getRandomNum(int startNum, int endNum) {
+ int randomNum = 0;
+
+ // 랜덤 객체 생성
+ SecureRandom rnd = new SecureRandom();
+
+ do {
+ // 종료숫자내에서 랜덤 숫자를 발생시킨다.
+ randomNum = rnd.nextInt(endNum + 1);
+ } while (randomNum < startNum); // 랜덤 숫자가 시작숫자보다 작을경우 다시 랜덤숫자를 발생시킨다.
+
+ return randomNum;
+ }
+
+ /**
+ * 특정 숫자 집합에서 특정 숫자가 있는지 체크하는 기능 12345678에서 7이 있는지 없는지 체크하는 기능을 제공함
+ *
+ * @param sourceInt - 특정숫자집합
+ * @param searchInt - 검색숫자
+ * @return 존재여부
+ * @see
+ */
+ public static Boolean getNumSearchCheck(int sourceInt, int searchInt) {
+ String sourceStr = String.valueOf(sourceInt);
+ String searchStr = String.valueOf(searchInt);
+
+ // 특정숫자가 존재하는지 하여 위치값을 리턴한다. 없을 시 -1
+ if (sourceStr.indexOf(searchStr) == -1) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * 숫자타입을 문자열로 변환하는 기능 숫자 20081212를 문자열 '20081212'로 변환하는 기능
+ *
+ * @param srcNumber - 숫자
+ * @return 문자열
+ * @see
+ */
+ public static String getNumToStrCnvr(int srcNumber) {
+ String rtnStr = null;
+
+ rtnStr = String.valueOf(srcNumber);
+
+ return rtnStr;
+ }
+
+ /**
+ * 숫자타입을 데이트 타입으로 변환하는 기능
+ * 숫자 20081212를 데이트타입 '2008-12-12'로 변환하는 기능
+ * @param srcNumber - 숫자
+ * @return String
+ * @see
+ */
+ public static String getNumToDateCnvr(int srcNumber) {
+
+ String pattern = null;
+ String cnvrStr = null;
+
+ String srcStr = String.valueOf(srcNumber);
+
+ // Date 형태인 8자리 및 14자리만 정상처리
+ if (srcStr.length() != 8 && srcStr.length() != 14) {
+ throw new IllegalArgumentException("Invalid Number: " + srcStr + " Length=" + srcStr.trim().length());
+ }
+
+ if (srcStr.length() == 8) {
+ pattern = "yyyyMMdd";
+ } else if (srcStr.length() == 14) {
+ pattern = "yyyyMMddhhmmss";
+ }
+
+ SimpleDateFormat dateFormatter = new SimpleDateFormat(pattern, Locale.KOREA);
+
+ Date cnvrDate = null;
+
+ try {
+ cnvrDate = dateFormatter.parse(srcStr);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+
+ cnvrStr = String.format("%1$tY-%1$tm-%1$td", cnvrDate);
+
+ return cnvrStr;
+
+ }
+
+ /**
+ * 체크할 숫자 중에서 숫자인지 아닌지 체크하는 기능
+ * 숫자이면 True, 아니면 False를 반환한다
+ * @param checkStr - 체크문자열
+ * @return 숫자여부
+ * @see
+ */
+ public static Boolean getNumberValidCheck(String checkStr) {
+
+ int i;
+ //String sourceStr = String.valueOf(sourceInt);
+
+ int checkStrLt = checkStr.length();
+
+ for (i = 0; i < checkStrLt; i++) {
+
+ // 아스키코드값( '0'-> 48, '9' -> 57)
+ if (checkStr.charAt(i) > 47 && checkStr.charAt(i) < 58) {
+ continue;
+ } else {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * 특정숫자를 다른 숫자로 치환하는 기능 숫자 12345678에서 123를 999로 변환하는 기능을 제공(99945678)
+ *
+ * @param srcNumber - 숫자집합
+ * @param cnvrSrcNumber - 원래숫자
+ * @param cnvrTrgtNumber - 치환숫자
+ * @return 치환숫자
+ * @see
+ */
+ public static int getNumberCnvr(int srcNumber, int cnvrSrcNumber, int cnvrTrgtNumber) {
+
+ // 입력받은 숫자를 문자열로 변환
+ String source = String.valueOf(srcNumber);
+ String subject = String.valueOf(cnvrSrcNumber);
+ String object = String.valueOf(cnvrTrgtNumber);
+
+ StringBuffer rtnStr = new StringBuffer();
+ String preStr = "";
+ String nextStr = source;
+
+ // 원본숫자에서 변환대상숫자의 위치를 찾는다.
+ while (source.indexOf(subject) >= 0) {
+ preStr = source.substring(0, source.indexOf(subject)); // 변환대상숫자 위치까지 숫자를 잘라낸다
+ nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length());
+ source = nextStr;
+ rtnStr.append(preStr).append(object); // 변환대상위치 숫자에 변환할 숫자를 붙여준다.
+ }
+ rtnStr.append(nextStr); // 변환대상 숫자 이후 숫자를 붙여준다.
+
+ return Integer.parseInt(rtnStr.toString());
+ }
+
+ /**
+ * 특정숫자가 실수인지, 정수인지, 음수인지 체크하는 기능 123이 실수인지, 정수인지, 음수인지 체크하는 기능을 제공함
+ *
+ * @param srcNumber - 숫자집합
+ * @return -1(음수), 0(정수), 1(실수)
+ * @see
+ */
+ public static int checkRlnoInteger(double srcNumber) {
+
+ // byte 1바이트 ▶소수점이 없는 숫자로, 범위 -2^7 ~ 2^7 -1
+ // short 2바이트 ▶소수점이 없는 숫자로, 범위 -2^15 ~ 2^15 -1
+ // int 4바이트 ▶소수점이 없는 숫자로, 범위 -2^31 ~ 2^31 - 1
+ // long 8바이트 ▶소수점이 없는 숫자로, 범위 -2^63 ~ 2^63-1
+
+ // float 4바이트 ▶소수점이 있는 숫자로, 끝에 F 또는 f 가 붙는 숫자 (예:3.14f)
+ // double 8바이트 ▶소수점이 있는 숫자로, 끝에 아무것도 붙지 않는 숫자 (예:3.14)
+ // ▶소수점이 있는 숫자로, 끝에 D 또는 d 가 붙는 숫자(예:3.14d)
+
+ String cnvrString = null;
+
+ if (srcNumber < 0) {
+ return -1;
+ } else {
+ cnvrString = String.valueOf(srcNumber);
+
+ if (cnvrString.indexOf(".") == -1) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovNumberUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedUUID.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedUUID.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedUUID.java (revision 7)
@@ -0,0 +1,521 @@
+package egovframework.com.utl.fcc.service;
+
+import java.io.Serializable;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+
+/**
+ *
+ * A class that represents an immutable universally unique identifier (UUID). A
+ * UUID represents a 128-bit value.
+ *
+ * <p>
+ * There exist different variants of these global identifiers. The methods of
+ * this class are for manipulating the Leach-Salz variant, although the
+ * constructors allow the creation of any variant of UUID (described below).
+ *
+ * <p>
+ * The layout of a variant 2 (Leach-Salz) UUID is as follows:
+ *
+ * The most significant long consists of the following unsigned fields:
+ *
+ * <pre>
+ * 0xFFFFFFFF00000000 time_low
+ * 0x00000000FFFF0000 time_mid
+ * 0x000000000000F000 version
+ * 0x0000000000000FFF time_hi
+ * </pre>
+ *
+ * The least significant long consists of the following unsigned fields:
+ *
+ * <pre>
+ * 0xC000000000000000 variant
+ * 0x3FFF000000000000 clock_seq
+ * 0x0000FFFFFFFFFFFF node
+ * </pre>
+ *
+ * <p>
+ * The variant field contains a value which identifies the layout of the
+ * <tt>UUID</tt>. The bit layout described above is valid only for a
+ * <tt>UUID</tt> with a variant value of 2, which indicates the Leach-Salz
+ * variant.
+ *
+ * <p>
+ * The version field holds a value that describes the type of this <tt>UUID</tt>.
+ * There are four different basic types of UUIDs: time-based, DCE security,
+ * name-based, and randomly generated UUIDs. These types have a version value of
+ * 1, 2, 3 and 4, respectively.
+ *
+ * <p>
+ * For more information including algorithms used to create <tt>UUID</tt>s,
+ * see the Internet-Draft <a
+ * href="http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-03.txt">UUIDs
+ * and GUIDs</a> or the standards body definition at <a
+ * href="http://www.iso.ch/cate/d2229.html">ISO/IEC 11578:1996</a>.
+ *
+ * @version 1.14, 07/12/04
+ * @since 1.5
+ */
+@SuppressWarnings("serial")
+public class EgovFormBasedUUID implements Serializable {
+ /*
+ * The most significant 64 bits of this UUID.
+ *
+ * @serial
+ */
+ private final long mostSigBits;
+
+ /*
+ * The least significant 64 bits of this UUID.
+ *
+ * @serial
+ */
+ private final long leastSigBits;
+
+ /*
+ * The version number associated with this UUID. Computed on demand.
+ */
+ private transient int version = -1;
+
+ /*
+ * The variant number associated with this UUID. Computed on demand.
+ */
+ private transient int variant = -1;
+
+ /*
+ * The timestamp associated with this UUID. Computed on demand.
+ */
+ private transient volatile long timestamp = -1;
+
+ /*
+ * The clock sequence associated with this UUID. Computed on demand.
+ */
+ private transient int sequence = -1;
+
+ /*
+ * The node number associated with this UUID. Computed on demand.
+ */
+ private transient long node = -1;
+
+ /*
+ * The hashcode of this UUID. Computed on demand.
+ */
+ private transient int hashCode = -1;
+
+ /*
+ * The random number generator used by this class to create random based
+ * UUIDs.
+ */
+ private static volatile SecureRandom numberGenerator = null;
+
+ // Constructors and Factories
+
+ /*
+ * Private constructor which uses a byte array to construct the new UUID.
+ */
+ private EgovFormBasedUUID(byte[] data) {
+ long msb = 0;
+ long lsb = 0;
+ for (int i = 0; i < 8; i++)
+ msb = (msb << 8) | (data[i] & 0xff);
+ for (int i = 8; i < 16; i++)
+ lsb = (lsb << 8) | (data[i] & 0xff);
+ this.mostSigBits = msb;
+ this.leastSigBits = lsb;
+ }
+
+ /**
+ * Constructs a new <tt>UUID</tt> using the specified data.
+ * <tt>mostSigBits</tt> is used for the most significant 64 bits of the
+ * <tt>UUID</tt> and <tt>leastSigBits</tt> becomes the least significant
+ * 64 bits of the <tt>UUID</tt>.
+ *
+ * @param mostSigBits
+ * @param leastSigBits
+ */
+ public EgovFormBasedUUID(long mostSigBits, long leastSigBits) {
+ this.mostSigBits = mostSigBits;
+ this.leastSigBits = leastSigBits;
+ }
+
+ /**
+ * Static factory to retrieve a type 4 (pseudo randomly generated) UUID.
+ *
+ * The <code>UUID</code> is generated using a cryptographically strong
+ * pseudo random number generator.
+ *
+ * @return a randomly generated <tt>UUID</tt>.
+ */
+ public static EgovFormBasedUUID randomUUID() {
+ SecureRandom ng = numberGenerator;
+ if (ng == null) {
+ numberGenerator = ng = new SecureRandom();
+ }
+
+ byte[] randomBytes = new byte[16];
+ ng.nextBytes(randomBytes);
+ randomBytes[6] &= 0x0f; /* clear version */
+ randomBytes[6] |= 0x40; /* set to version 4 */
+ randomBytes[8] &= 0x3f; /* clear variant */
+ randomBytes[8] |= 0x80; /* set to IETF variant */
+
+ return new EgovFormBasedUUID(randomBytes);
+ }
+
+ /**
+ * Static factory to retrieve a type 3 (name based) <tt>UUID</tt> based on
+ * the specified byte array.
+ *
+ * @param name
+ * a byte array to be used to construct a <tt>UUID</tt>.
+ * @return a <tt>UUID</tt> generated from the specified array.
+ */
+ public static EgovFormBasedUUID nameUUIDFromBytes(byte[] name) {
+ MessageDigest md;
+ try {
+ // 2011.10.10 보안점검 후속조치 암호화 알고리즘 변경(MD5 -> SHA-256)
+ //md = MessageDigest.getInstance("MD5");
+ md = MessageDigest.getInstance("SHA-256");
+ } catch (NoSuchAlgorithmException nsae) {
+ //throw new InternalError("MD5 not supported");
+ throw new InternalError("SHA-256 not supported");
+ }
+ // 2011.10.10 보안점검 후속조치
+ if (md == null) {
+ throw new RuntimeException("MessageDigest is null!!");
+ }
+ // 2014.09.20 보안점검 후속 조치
+ // Random 방식의 salt 추가
+ SecureRandom ng = new SecureRandom();
+ byte[] randomBytes = new byte[16];
+ ng.nextBytes(randomBytes);
+
+ md.reset();
+ md.update(randomBytes);
+ byte[] sha = md.digest(name);
+
+
+ byte[] md5Bytes = new byte[8];
+ System.arraycopy(sha, 0, md5Bytes, 0, 8);
+ //2011.10.10 보안점검 후속조치 끝
+
+ md5Bytes[6] &= 0x0f; /* clear version */
+ md5Bytes[6] |= 0x30; /* set to version 3 */
+ md5Bytes[8] &= 0x3f; /* clear variant */
+ md5Bytes[8] |= 0x80; /* set to IETF variant */
+
+ return new EgovFormBasedUUID(md5Bytes);
+ }
+
+ /**
+ * Creates a <tt>UUID</tt> from the string standard representation as
+ * described in the {@link #toString} method.
+ *
+ * @param name
+ * a string that specifies a <tt>UUID</tt>.
+ * @return a <tt>UUID</tt> with the specified value.
+ * @throws IllegalArgumentException
+ * if name does not conform to the string representation as
+ * described in {@link #toString}.
+ */
+ public static EgovFormBasedUUID fromString(String name) {
+ String[] components = name.split("-");
+ if (components.length != 5)
+ throw new IllegalArgumentException("Invalid UUID string: " + name);
+ for (int i = 0; i < 5; i++)
+ components[i] = "0x" + components[i];
+
+ long mostSigBits = Long.decode(components[0]).longValue();
+ mostSigBits <<= 16;
+ mostSigBits |= Long.decode(components[1]).longValue();
+ mostSigBits <<= 16;
+ mostSigBits |= Long.decode(components[2]).longValue();
+
+ long leastSigBits = Long.decode(components[3]).longValue();
+ leastSigBits <<= 48;
+ leastSigBits |= Long.decode(components[4]).longValue();
+
+ return new EgovFormBasedUUID(mostSigBits, leastSigBits);
+ }
+
+ // Field Accessor Methods
+
+ /**
+ * Returns the least significant 64 bits of this UUID's 128 bit value.
+ *
+ * @return the least significant 64 bits of this UUID's 128 bit value.
+ */
+ public long getLeastSignificantBits() {
+ return leastSigBits;
+ }
+
+ /**
+ * Returns the most significant 64 bits of this UUID's 128 bit value.
+ *
+ * @return the most significant 64 bits of this UUID's 128 bit value.
+ */
+ public long getMostSignificantBits() {
+ return mostSigBits;
+ }
+
+ /**
+ * The version number associated with this <tt>UUID</tt>. The version
+ * number describes how this <tt>UUID</tt> was generated.
+ *
+ * The version number has the following meaning:
+ * <p>
+ * <ul>
+ * <li>1 Time-based UUID
+ * <li>2 DCE security UUID
+ * <li>3 Name-based UUID
+ * <li>4 Randomly generated UUID
+ * </ul>
+ *
+ * @return the version number of this <tt>UUID</tt>.
+ */
+ public int version() {
+ if (version < 0) {
+ // Version is bits masked by 0x000000000000F000 in MS long
+ version = (int) ((mostSigBits >> 12) & 0x0f);
+ }
+ return version;
+ }
+
+ /**
+ * The variant number associated with this <tt>UUID</tt>. The variant
+ * number describes the layout of the <tt>UUID</tt>.
+ *
+ * The variant number has the following meaning:
+ * <p>
+ * <ul>
+ * <li>0 Reserved for NCS backward compatibility
+ * <li>2 The Leach-Salz variant (used by this class)
+ * <li>6 Reserved, Microsoft Corporation backward compatibility
+ * <li>7 Reserved for future definition
+ * </ul>
+ *
+ * @return the variant number of this <tt>UUID</tt>.
+ */
+ public int variant() {
+ if (variant < 0) {
+ // This field is composed of a varying number of bits
+ if ((leastSigBits >>> 63) == 0) {
+ variant = 0;
+ } else if ((leastSigBits >>> 62) == 2) {
+ variant = 2;
+ } else {
+ variant = (int) (leastSigBits >>> 61);
+ }
+ }
+ return variant;
+ }
+
+ /**
+ * The timestamp value associated with this UUID.
+ *
+ * <p>
+ * The 60 bit timestamp value is constructed from the time_low, time_mid,
+ * and time_hi fields of this <tt>UUID</tt>. The resulting timestamp is
+ * measured in 100-nanosecond units since midnight, October 15, 1582 UTC.
+ * <p>
+ *
+ * The timestamp value is only meaningful in a time-based UUID, which has
+ * version type 1. If this <tt>UUID</tt> is not a time-based UUID then
+ * this method throws UnsupportedOperationException.
+ *
+ * @throws UnsupportedOperationException
+ * if this UUID is not a version 1 UUID.
+ */
+ public long timestamp() {
+ if (version() != 1) {
+ throw new UnsupportedOperationException("Not a time-based UUID");
+ }
+ long result = timestamp;
+ if (result < 0) {
+ result = (mostSigBits & 0x0000000000000FFFL) << 48;
+ result |= ((mostSigBits >> 16) & 0xFFFFL) << 32;
+ result |= mostSigBits >>> 32;
+ timestamp = result;
+ }
+ return result;
+ }
+
+ /**
+ * The clock sequence value associated with this UUID.
+ *
+ * <p>
+ * The 14 bit clock sequence value is constructed from the clock sequence
+ * field of this UUID. The clock sequence field is used to guarantee
+ * temporal uniqueness in a time-based UUID.
+ * <p>
+ *
+ * The clockSequence value is only meaningful in a time-based UUID, which
+ * has version type 1. If this UUID is not a time-based UUID then this
+ * method throws UnsupportedOperationException.
+ *
+ * @return the clock sequence of this <tt>UUID</tt>.
+ * @throws UnsupportedOperationException
+ * if this UUID is not a version 1 UUID.
+ */
+ public int clockSequence() {
+ if (version() != 1) {
+ throw new UnsupportedOperationException("Not a time-based UUID");
+ }
+ if (sequence < 0) {
+ sequence = (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48);
+ }
+ return sequence;
+ }
+
+ /**
+ * The node value associated with this UUID.
+ *
+ * <p>
+ * The 48 bit node value is constructed from the node field of this UUID.
+ * This field is intended to hold the IEEE 802 address of the machine that
+ * generated this UUID to guarantee spatial uniqueness.
+ * <p>
+ *
+ * The node value is only meaningful in a time-based UUID, which has version
+ * type 1. If this UUID is not a time-based UUID then this method throws
+ * UnsupportedOperationException.
+ *
+ * @return the node value of this <tt>UUID</tt>.
+ * @throws UnsupportedOperationException
+ * if this UUID is not a version 1 UUID.
+ */
+ public long node() {
+ if (version() != 1) {
+ throw new UnsupportedOperationException("Not a time-based UUID");
+ }
+ if (node < 0) {
+ node = leastSigBits & 0x0000FFFFFFFFFFFFL;
+ }
+ return node;
+ }
+
+ // Object Inherited Methods
+
+ /**
+ * Returns a <code>String</code> object representing this
+ * <code>UUID</code>.
+ *
+ * <p>
+ * The UUID string representation is as described by this BNF :
+ *
+ * <pre>
+ * UUID = <time_low> "-" <time_mid> "-"
+ * <time_high_and_version> "-"
+ * <variant_and_sequence> "-"
+ * <node>
+ * time_low = 4*<hexOctet>
+ * time_mid = 2*<hexOctet>
+ * time_high_and_version = 2*<hexOctet>
+ * variant_and_sequence = 2*<hexOctet>
+ * node = 6*<hexOctet>
+ * hexOctet = <hexDigit><hexDigit>
+ * hexDigit =
+ * "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
+ * | "a" | "b" | "c" | "d" | "e" | "f"
+ * | "A" | "B" | "C" | "D" | "E" | "F"
+ * </pre>
+ *
+ * @return a string representation of this <tt>UUID</tt>.
+ */
+ @Override
+ public String toString() {
+ return (digits(mostSigBits >> 32, 8) + "-"
+ + digits(mostSigBits >> 16, 4) + "-" + digits(mostSigBits, 4)
+ + "-" + digits(leastSigBits >> 48, 4) + "-" + digits(
+ leastSigBits, 12));
+ }
+
+ /** Returns val represented by the specified number of hex digits. */
+ private static String digits(long val, int digits) {
+ long hi = 1L << (digits * 4);
+ return Long.toHexString(hi | (val & (hi - 1))).substring(1);
+ }
+
+ /**
+ * Returns a hash code for this <code>UUID</code>.
+ *
+ * @return a hash code value for this <tt>UUID</tt>.
+ */
+ @Override
+ public int hashCode() {
+ if (hashCode == -1) {
+ hashCode = (int) ((mostSigBits >> 32) ^ mostSigBits
+ ^ (leastSigBits >> 32) ^ leastSigBits);
+ }
+ return hashCode;
+ }
+
+ /**
+ * Compares this object to the specified object. The result is <tt>true</tt>
+ * if and only if the argument is not <tt>null</tt>, is a <tt>UUID</tt>
+ * object, has the same variant, and contains the same value, bit for bit,
+ * as this <tt>UUID</tt>.
+ *
+ * @param obj
+ * the object to compare with.
+ * @return <code>true</code> if the objects are the same;
+ * <code>false</code> otherwise.
+ */
+ @Override
+ public boolean equals(Object obj) {
+ // 보안 취약점 점검 지적사항 반영 시작
+ if (obj == null)
+ return false;
+ // 보안 취약점 점검 지적사항 반영 시작 끝
+ if (!(obj instanceof EgovFormBasedUUID))
+ return false;
+ if (((EgovFormBasedUUID) obj).variant() != this.variant())
+ return false;
+ EgovFormBasedUUID id = (EgovFormBasedUUID) obj;
+ return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits);
+ }
+
+ // Comparison Operations
+
+ /**
+ * Compares this UUID with the specified UUID.
+ *
+ * <p>
+ * The first of two UUIDs follows the second if the most significant field
+ * in which the UUIDs differ is greater for the first UUID.
+ *
+ * @param val
+ * <tt>UUID</tt> to which this <tt>UUID</tt> is to be
+ * compared.
+ * @return -1, 0 or 1 as this <tt>UUID</tt> is less than, equal to, or
+ * greater than <tt>val</tt>.
+ */
+ public int compareTo(EgovFormBasedUUID val) {
+ // The ordering is intentionally set up so that the UUIDs
+ // can simply be numerically compared as two numbers
+ return (this.mostSigBits < val.mostSigBits ? -1
+ : (this.mostSigBits > val.mostSigBits ? 1
+ : (this.leastSigBits < val.leastSigBits ? -1
+ : (this.leastSigBits > val.leastSigBits ? 1 : 0))));
+ }
+
+ /**
+ * Reconstitute the <tt>UUID</tt> instance from a stream (that is,
+ * deserialize it). This is necessary to set the transient fields to their
+ * correct uninitialized value so they will be recomputed on demand.
+ */
+ private void readObject(java.io.ObjectInputStream in)
+ throws java.io.IOException, ClassNotFoundException {
+
+ in.defaultReadObject();
+
+ // Set "cached computation" fields to their initial values
+ version = -1;
+ variant = -1;
+ timestamp = -1;
+ sequence = -1;
+ node = -1;
+ hashCode = -1;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedUUID.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/jso/web/EgovUtlJsonController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/jso/web/EgovUtlJsonController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/jso/web/EgovUtlJsonController.java (revision 7)
@@ -0,0 +1,126 @@
+package egovframework.com.utl.jso.web;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.rte.fdl.property.EgovPropertyService;
+
+/**
+ * 요소기술 json 관한 controller 클래스를 정의한다.
+ * @author 2016 표준프레임웤크 유지보수 장동한
+ * @since 2016.07.14
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2016.07.14 장동한 최초 생성
+ *
+ * </pre>
+ */
+
+
+@Controller
+public class EgovUtlJsonController {
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "EgovCmmUseService")
+ EgovCmmUseService egovCmmUseService;
+
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovUtlJsonController.class);
+
+ /**
+ * json 단건조회
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/utl/jso/EgovUtlJsonInquire.do",method = RequestMethod.GET)
+ public String selectUtlJsonInquire() throws Exception {
+ return "egovframework/com/utl/jso/EgovUtlJsonInquire";
+ }
+
+ @RequestMapping(value="/utl/jso/EgovUtlJsonInquire.do",method = RequestMethod.POST)
+ public ModelAndView selectUtlJsonInquirePost(@RequestParam Map<?, ?> commandMap) throws Exception {
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("jsonView");
+ LOGGER.debug("EgovUtlJsonController EgovUtlJsonInquire START=========");
+
+ LOGGER.debug("commandMap>"+commandMap);
+
+ modelAndView.addObject("fruits1", "apple");
+ modelAndView.addObject("fruits2", "orange");
+ modelAndView.addObject("fruits3", "lemon");
+ modelAndView.addObject("fruits4", "lime");
+ modelAndView.addObject("fruits5", "mango");
+
+ LOGGER.debug("EgovUtlJsonController EgovUtlJsonInquire END=========");
+
+ return modelAndView;
+ }
+ /**
+ * json 다건조회
+ * @return String
+ * @exception Exception
+ */
+ @RequestMapping(value="/utl/jso/EgovUtlJsonMultiInquire.do",method = RequestMethod.GET)
+ public String selectUtlJsonMultiInquire(@RequestParam Map<?, ?> commandMap) throws Exception {
+ return "egovframework/com/utl/jso/EgovUtlJsonMultiInquire";
+ }
+ @RequestMapping(value="/utl/jso/EgovUtlJsonMultiInquire.do",method = RequestMethod.POST)
+ public ModelAndView selectUtlJsonMultiInquirePost(@RequestParam Map<?, ?> commandMap) throws Exception {
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("jsonView");
+ LOGGER.debug("EgovUtlJsonController selectUtlJsonMultiInquire START=========");
+
+ LOGGER.debug("commandMap>"+commandMap);
+
+ modelAndView.addObject("fruits1", "apple");
+ modelAndView.addObject("fruits2", "orange");
+ modelAndView.addObject("fruits3", "lemon");
+ modelAndView.addObject("fruits4", "lime");
+ modelAndView.addObject("fruits5", "mango");
+
+ HashMap<String,String> mp = new HashMap<String,String>();
+ mp.put("fruits1", "apple");
+ mp.put("fruits2", "orange");
+ mp.put("fruits3", "lemon");
+ mp.put("fruits4", "lime");
+ mp.put("fruits5", "mango");
+
+ List<HashMap> list = new ArrayList<HashMap>();
+ list.add(mp);
+ list.add(mp);
+ list.add(mp);
+ list.add(mp);
+ list.add(mp);
+
+ modelAndView.addObject("list", list);
+ LOGGER.debug("EgovUtlJsonController selectUtlJsonMultiInquire END=========");
+
+ return modelAndView;
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/jso/web/EgovUtlJsonController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovPdfCnvr.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovPdfCnvr.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovPdfCnvr.java (revision 7)
@@ -0,0 +1,164 @@
+/**
+ * Class Name : EgovPdfCnvr.java
+ * Description : xls,doc,ppt를 Pdf로 변환하는 화면 Business Interface class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.02 이 용 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ *
+ * @author 공통 서비스 개발팀 이 용
+ * @since 2009. 02. 02
+ * @version 1.0
+ * @see
+ * The type com.sun.star.lang.XeventListener cannot be resolved. It is indirectly referenced from required .class files
+ * Copyright (C) 2009 by EGOV All right reserved.
+ */
+
+package egovframework.com.utl.sim.service;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.util.WebUtils;
+
+import com.artofsolving.jodconverter.DocumentConverter;
+import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
+import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.util.EgovBasicLogger;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+
+public class EgovPdfCnvr {
+ public static String addrIP = "";
+ static final char FILE_SEPARATOR = File.separatorChar;
+ // 최대 문자길이
+ static final int MAX_STR_LEN = 1024;
+
+ public static final int BUFF_SIZE = 2048;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovPdfCnvr.class);
+
+ /**
+ * <pre>
+ * Comment : doc, xls 파일등을 PDF변환 변환한다. .
+ * </pre>
+ * @param String pdfFileSrc doc, xls 파일 전체경로
+ * @param String targetPdf 변환파일명(확장자 제외)
+ * @return boolean status true/false 를 리턴한다.
+ * @version 1.0 (2009.02.10)
+ * @see
+ */
+ public static boolean getPDF(String targetPdf, HttpServletRequest request, HttpServletResponse response) throws Exception {
+ boolean status = false;
+
+ try {
+ //MultipartHttpServletRequest mptRequest = (MultipartHttpServletRequest) request;
+ MultipartHttpServletRequest mptRequest = WebUtils.getNativeRequest(request,MultipartHttpServletRequest.class);
+ Iterator<String> file_iter = mptRequest.getFileNames();
+
+ while (file_iter.hasNext()) {
+ MultipartFile mFile = mptRequest.getFile((String) file_iter.next());
+
+ if (mFile.getSize() > 0) {
+
+ //Write File 이후 Move File????
+ String newName = "";
+ String stordFilePath = EgovProperties.getProperty("Globals.fileStorePath");
+
+ //String orginFileName = mFile.getOriginalFilename();
+ //int index = orginFileName.lastIndexOf(".");
+ //String fileExt = orginFileName.substring(index + 1);
+
+ //newName 은 Naming Convention에 의해서 생성
+ newName = EgovStringUtil.getTimeStamp();
+ writeFile(mFile, newName, stordFilePath);
+
+ String pdfFileSrcValue = stordFilePath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File inputFile = new File(EgovWebUtil.filePathBlackList(pdfFileSrcValue + newName));
+
+ if (inputFile.exists()) {
+ // connect to an OpenOffice.org instance running on port 8100
+ SocketOpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
+ connection.connect();
+ //원본 디렉토리에 targetPdf 명칭지정
+ String valueFile = null;
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ valueFile = EgovStringUtil.isNullToString(inputFile.getParent()).replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File outputFile = new File(valueFile + "/" + targetPdf + ".pdf");
+ // convert
+ DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
+ converter.convert(inputFile, outputFile);
+ // close the connection
+ connection.disconnect();
+
+ if (inputFile.exists()) {
+ //3. 삭제해줍니다.
+ status = inputFile.delete();
+ }
+ status = true;
+ } else {
+ status = false;
+ }
+ }
+ }
+ } catch (IOException ex) {
+ EgovBasicLogger.debug("PDF converting error", ex);
+
+ status = false;
+ }
+ // 메소드 종료 Log
+ return status;
+ }
+
+ /**
+ * 파일을 실제 물리적인 경로에 생성한다.
+ * @param file
+ * @param newName
+ * @param stordFilePath
+ * @throws Exception
+ */
+ protected static void writeFile(MultipartFile file, String newName, String stordFilePath) throws IOException {
+ InputStream stream = null;
+ OutputStream bos = null;
+
+ try {
+ stream = file.getInputStream();
+ File cFile = new File(EgovWebUtil.filePathBlackList(stordFilePath));
+
+ if (!cFile.isDirectory())
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(cFile.mkdirs()){
+ LOGGER.debug("[file.mkdirs] targetDir : Directory Creation Success");
+ }else{
+ LOGGER.error("[file.mkdirs] targetDir : Directory Creation Fail");
+ }
+ bos = new FileOutputStream(EgovWebUtil.filePathBlackList(stordFilePath + File.separator + newName));
+
+ int bytesRead = 0;
+ byte[] buffer = new byte[BUFF_SIZE];
+
+ while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) {
+ bos.write(buffer, 0, bytesRead);
+ }
+
+ } finally {
+ EgovResourceCloseHelper.close(bos, stream);
+ }
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovPdfCnvr.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileTool.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileTool.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileTool.java (revision 7)
@@ -0,0 +1,2943 @@
+/**
+ * Class Name : EgovFileTool.java
+ * Description : 시스템 디렉토리 정보를 확인하여 제공하는 Business class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.01.13 조재영 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ * 2018.03.19 신용호 createDirectories() 추가 : 여러 레벨의 디렉토리를 한번에 생성
+ *
+ *
+ * @author 공통 서비스 개발팀 조재영,박지욱
+ * @since 2009. 01. 13
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.service.Globals;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+import egovframework.com.utl.fcc.service.EgovStringUtil;
+
+/**
+ * EgovFileTool 클래스를 정의한다.
+ *
+ * @author 김진만
+ * @see
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2020.12.07 신용호 KISA 보안약점 조치
+ *
+ * </pre>
+ */
+
+public class EgovFileTool {
+
+ // 파일사이즈 1K
+ static final long BUFFER_SIZE = 1024L;
+ // 파일구분자
+ static final char FILE_SEPARATOR = File.separatorChar;
+ // 윈도우시스템 파일 접근권한
+ static final char ACCESS_READ = 'R'; // 읽기전용
+ static final char ACCESS_SYS = 'S'; // 시스템
+ static final char ACCESS_HIDE = 'H'; // 숨김
+ // 최대 문자길이
+ static final int MAX_STR_LEN = 1024;
+
+ // LOGGER
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileTool.class);
+
+ /**
+ * <pre>
+ * Comment : 디렉토리 존재여부를 확인한다. (단일디렉토리 확인용)
+ * </pre>
+ *
+ * @param String targetDirPath 존재여부를 확인할 디렉토리의 절대경로
+ * @return String result 존재하는 디렉토리 경로를 리턴한다.
+ */
+ public static boolean getExistDirectory(String targetDirPath) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (targetDirPath == null || targetDirPath.equals("")) {
+ return false;
+ }
+
+ boolean result = false;
+ File f = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ if (f.exists() && f.isDirectory()) {
+ result = true;
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리 존재여부를 확인한다. (하위디렉토리 확인용)
+ * </pre>
+ *
+ * @param String baseDirPath 존재여부를 확인할 디렉토리명의 기준경로
+ * @param String targetDirPath 확인할 대상 디렉토리. baseDirPath 하위에서 존재여부를 확인한다.
+ * @param int cnt 확인할 디렉토리 갯수 (0보다 큰값이 입력되어야 한다. -1 입력시 21474846까지 찾도록 지원함 )
+ * @return String result 존재하는 디렉토리 경로를 리턴한다.
+ */
+ public static List<String> getExistDirectory(String baseDirPath, String targetDirPath, int cnt) throws Exception {
+
+ // 인자값 유효하지 않은 경우 빈 ArrayList 리턴
+ if (baseDirPath == null || baseDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || cnt == 0) {
+ return new ArrayList<String>();
+ }
+ int dirCnt = 0;
+ if (cnt < 0) {
+ dirCnt = 21474846;
+ } else {
+ dirCnt = cnt;
+ }
+
+ // 찾은 결과를 전달할 ArrayList
+ List<String> result = new ArrayList<String>();
+ // 하위의 결과를 임시 보관할 ArrayList
+ List<String> subResult = new ArrayList<String>();
+ // 현재경로(baseDirPath)에서 발견된 targetDirPath 갯수
+ int dirFindCnt = 0;
+ boolean isExist = false;
+ String[] dirList = null;
+ String subDirPath = "";
+ File f = null;
+
+ f = new File(EgovWebUtil.filePathBlackList(baseDirPath));
+ isExist = f.exists();
+
+ if (isExist) {
+ dirList = f.list();
+ }
+
+ for (int i = 0; dirList != null && i < dirList.length; i++) {
+ //log.debug("dirList["+i+"]:"+dirList[i] +"--->"+baseDirPath+"/"+dirList[i]);
+ subDirPath = baseDirPath + "/" + dirList[i];
+ //log.debug("_"+targetDirPath+"_");
+ //log.debug("_"+dirList[i]+"_");
+
+ f = new File(EgovWebUtil.filePathBlackList(subDirPath));
+
+ //현재경로(baseDirPath)에서 검색
+ if (targetDirPath.equals(dirList[i])) {
+ // 중간에 발견하면 반복체크는 종료한다.(결과요청 갯수에 도달한 경우에 한해) - 이곳에서 종료되면 이후 하위에서 체크할 필요가 없다.
+ if (new File(EgovWebUtil.filePathBlackList(baseDirPath) + "/" + dirList[i]).isDirectory()) {
+ dirFindCnt++;
+ result.add(baseDirPath + "/" + dirList[i]);
+ if (dirFindCnt == dirCnt) {
+ break;
+ }
+ }
+ }
+
+ //현재경로(baseDirPath)에서 발견된 하위 경로에서 반복하여 재귀적으로 검색
+ int subCnt = dirCnt - dirFindCnt;
+ if (f.isDirectory()) {
+ //log.debug("f.isDirectory():"+f.isDirectory());
+ subResult = getExistDirectory(subDirPath, targetDirPath, subCnt);
+ // 하위에서 발견된 디렉토리 갯수를 현재까지 찾은 디렉토리갯수에 추가한다.
+ dirFindCnt = dirFindCnt + subResult.size();
+ // 하위에서 모두 발견된 경우 반복 체크는 종료한다.
+ if (dirCnt <= dirFindCnt) {
+ for (int j = 0; j < subResult.size(); j++) {
+ result.add((String) subResult.get(j));
+ }
+
+ break;
+ } else {
+ for (int j = 0; j < subResult.size(); j++) {
+ result.add((String) subResult.get(j));
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리 존재여부를 확인한다. (생성일자를 조건으로 조건구간내 포함되는지 확인)
+ * </pre>
+ *
+ * @param String targetDirPath 존재여부를 확인할 디렉토리의 절대경로
+ * @param String fromDate 생성일자 조건에 해당하는 시작일자(YYYYMMDD 형태로 입력)
+ * @param String toDate 생성일자 조건에 해당하는 종료일자(YYYYMMDD 형태로 입력)
+ * @return String result 존재하는 디렉토리 경로를 리턴한다.
+ */
+ public static boolean getExistDirectory(String targetDirPath, String fromDate, String toDate) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (targetDirPath == null || targetDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null || toDate.equals("")) {
+ return false;
+ }
+
+ boolean result = false;
+ String lastModifyedDate = "";
+ File f = null;
+
+ f = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ lastModifyedDate = getLastModifiedDateFromFile(f);
+ //log.debug("getLastModifiedDateFromFile(f):"+lastModifyedDate);
+ if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) {
+ result = true;
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리 존재여부를 확인한다. (생성자를 조건으로 일치하는지 확인)
+ * </pre>
+ *
+ * @param String targetDirPath 존재여부를 확인할 디렉토리의 절대경로
+ * @param String ownerName 생성자명(계정정보)
+ * @return String result 존재하는 디렉토리 경로를 리턴한다.
+ */
+ public static boolean getExistDirectory(String targetDirPath, String ownerName) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (targetDirPath == null || targetDirPath.equals("") || ownerName == null || ownerName.equals("")) {
+ return false;
+ }
+
+ boolean result = false;
+ //String tmp = "";
+
+ // 실행할 명령을 프로퍼티 파일에서 확인한다.
+ //Process p = null;
+
+ String realOwner = getOwner(targetDirPath);
+ if (ownerName.equals(realOwner)) {
+ result = true;
+ } else {
+ result = false;
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)의 최종 수정일자를 확인한다. (기본로케일 java.util.Locale.KOREA 기준)
+ * </pre>
+ *
+ * @param File f 수정일자를 확인할 대상파일
+ * @return String result 최종수정일자를 문자열로 리턴한다.
+ */
+ public static String getLastModifiedDateFromFile(File f) {
+
+ String result = "";
+
+ if (f.exists()) {
+ long date = f.lastModified();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA);
+ result = dateFormat.format(new java.util.Date(date));
+ } else {
+ result = "";
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)의 최종 수정일자를 확인한다. (기본로케일 java.util.Locale.KOREA 기준)
+ * </pre>
+ *
+ * @param String filePath 수정일자를 확인할 대상파일경로
+ * @return String result 최종수정일자를 문자열로 리턴한다.
+ */
+ public static String getLastModifiedDateFromFile(String filePath) {
+
+ File f = null;
+ String result = "";
+ f = new File(EgovWebUtil.filePathBlackList(filePath));
+ result = getLastModifiedDateFromFile(f);
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 조건구간내에 생성된 디렉토리 목록을 조회한다.
+ * </pre>
+ *
+ * @param String filePath 하위디렉토리를 확인할 경로
+ * @param String fromDate 조건시작일
+ * @param String toDate 조건 종료일
+ * @return ArrayList result 조건구간내에 생성된 디렉토리 목록을 리턴한다.
+ */
+ public static List<String> getLastDirectoryForModifiedDate(String baseDirPath, String fromDate, String toDate) {
+
+ // 인자값 유효하지 않은 경우 빈 ArrayList 리턴
+ if (baseDirPath == null || baseDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null || toDate.equals("")) {
+ return new ArrayList<String>();
+ }
+
+ File f = null;
+ File childFile = null;
+ String[] subDirList;
+ String subDirPath = "";
+ List<String> childResult = null;
+ List<String> result = new ArrayList<String>();
+
+ f = new File(EgovWebUtil.filePathBlackList(baseDirPath));
+ subDirList = f.list();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (subDirList != null) {
+ for (int i = 0; i < subDirList.length; i++) {
+
+ subDirPath = baseDirPath + "/" + subDirList[i];
+ childFile = new File(EgovWebUtil.filePathBlackList(subDirPath));
+ if (childFile.isDirectory()) {
+ //childResult = getLastDirectoryForModifiedDate(subDirPath , fromDate, toDate);
+ String lastModifyedDate = getLastModifiedDateFromFile(childFile);
+ if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) {
+ result.add(baseDirPath + "/" + subDirList[i]);
+ }
+ childResult = getLastDirectoryForModifiedDate(baseDirPath + "/" + subDirList[i], fromDate, toDate);
+ // 하위디렉토리의 결과를 추가한다.
+ for (int j = 0; j < childResult.size(); j++) {
+ result.add((String) childResult.get(j));
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)의 읽기권한을 확인한다.
+ * </pre>
+ *
+ * @param String filePath 읽기권한을 확인할 대상파일경로
+ * @return boolean result 읽기가능하면 true를 리턴한다. 권한이 없어가 파일이 없는 경우는 false를 리턴한다.
+ */
+ public static boolean canRead(String filePath) {
+
+ // 인자값 유효하지 않은 경우 빈 false 리턴
+ if (filePath == null || filePath.equals("")) {
+ return false;
+ }
+
+ File f = null;
+ boolean result = false;
+ f = new File(EgovWebUtil.filePathBlackList(filePath));
+ if (f.exists()) {
+ result = f.canRead();
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)의 쓰기권한을 확인한다.(대상경로가 파일인 경우만 정보가 유효함)
+ * </pre>
+ *
+ * @param String filePath 쓰기권한을 확인할 대상파일경로
+ * @return boolean result 쓰기가능하면 true를 리턴한다. 권한이 없어가 파일이 없는 경우는 false를 리턴한다.
+ */
+ public static boolean canWrite(String filePath) {
+
+ // 인자값 유효하지 않은 경우 빈 false 리턴
+ if (filePath == null || filePath.equals("")) {
+ return false;
+ }
+
+ File f = null;
+ boolean result = false;
+ f = new File(EgovWebUtil.filePathBlackList(filePath));
+ if (f.exists()) {
+ result = f.canWrite();
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)의 이름을 확인한다.
+ * </pre>
+ *
+ * @param String filePath 이름을 확인할 대상경로
+ * @return String result 이름을 리턴한다. 존재하지 않는 경우는 블랭크를 리턴한다.
+ */
+ public static String getName(String filePath) {
+
+ // 인자값 유효하지 않은 경우 빈 false 리턴
+ if (filePath == null || filePath.equals("")) {
+ return "";
+ }
+
+ File f = null;
+ String result = "";
+
+ f = new File(EgovWebUtil.filePathBlackList(filePath));
+ if (f.exists()) {
+ result = f.getName();
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)를 삭제한다. (파일,디렉토리 구분없이 존재하는 경우 무조건 삭제한다)
+ * </pre>
+ *
+ * @param filePathToBeDeleted 삭제하고자 하는 파일의 절대경로 + 파일명
+ * @return 성공하면 삭제된 절대경로, 아니면블랭크
+ */
+
+ public static String deletePath(String filePath) {
+ File file = new File(EgovWebUtil.filePathBlackList(filePath));
+ String result = "";
+
+ if (file.exists()) {
+ result = file.getAbsolutePath();
+ if (!file.delete()) {
+ result = "";
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 생성한다.
+ * </pre>
+ *
+ * @param dirPath 생성하고자 하는 절대경로
+ * @return 성공하면 생성된 절대경로, 아니면 블랭크
+ */
+
+ public static String createDirectory(String dirPath) {
+ File file = new File(EgovWebUtil.filePathBlackList(dirPath));
+ String result = "";
+ try {
+ if (!file.exists()) {
+ //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(file.createNewFile()){
+ LOGGER.debug("[file.createNewFile] file : Path Creation Success");
+ }else{
+ LOGGER.error("[file.createNewFile] file : Path Creation Fail");
+ }
+ file.getAbsolutePath();
+ }
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 생성한다. (여러 레벨의 경로를 동시에 생성)
+ * </pre>
+ *
+ * @param dirPath 생성하고자 하는 절대경로
+ * @return 성공하면 생성된 절대경로, 아니면 블랭크
+ */
+ public static String createDirectories(String dirPath) {
+ File file = new File(EgovWebUtil.filePathBlackList(dirPath));
+ String result = "";
+
+ if (!file.exists()) {
+ if(file.mkdirs()) {
+ LOGGER.debug("[file.mkdirs] file : Path Creation Success");
+ }else{
+ LOGGER.error("[file.mkdirs] file : Path Creation Fail");
+ }
+ file.getAbsolutePath();
+ }
+
+ return result;
+ }
+
+ /**
+ * 디렉토리에 파일이 존재하는지 체크하는 기능
+ *
+ * @param String dir 디렉토리
+ * @param String file 파일
+ * @return boolean result 존재여부 True / False
+ * @exception Exception
+ */
+ public static boolean checkFileExstByName(String dir, String file) throws Exception {
+
+ // 파일 존재 여부
+ boolean result = false;
+
+ // 디렉토리 오픈
+ String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry));
+
+ // 디렉토리이면서, 존재하면
+ if (srcDrctry.exists() && srcDrctry.isDirectory()) {
+
+ // 디렉토리 안 목록을 조회한다. (파일명)
+ File[] fileArray = srcDrctry.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesByName(fileArray, file);
+ if (list != null && list.size() > 0) {
+ result = true;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 확장자별로 디렉토리에 파일이 존재하는지 체크하는 기능
+ *
+ * @param String dir 디렉토리
+ * @param String eventn 확장자명(.txt 형태 입력)
+ * @return boolean result 존재여부 True / False
+ * @exception Exception
+ */
+ public static boolean checkFileExstByExtnt(String dir, String eventn) throws Exception {
+
+ // 파일 존재 여부
+ boolean result = false;
+
+ // 디렉토리 오픈
+ String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry));
+
+ // 디렉토리이면서, 존재하면
+ if (srcDrctry.exists() && srcDrctry.isDirectory()) {
+
+ // 디렉토리 안 목록을 조회한다. (확장자별)
+ File[] fileArray = srcDrctry.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesByExtnt(fileArray, eventn);
+ if (list != null && list.size() > 0) {
+ result = true;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 디렉토리에 생성자별 파일이 존재하는지 체크하는 기능
+ *
+ * @param String dir 디렉토리
+ * @param String owner 생성자
+ * @return boolean result 존재여부 True / False
+ * @exception Exception
+ */
+ public static boolean checkFileExstByOwner(String dir, String owner) throws Exception {
+
+ // 파일 존재 여부
+ boolean result = false;
+
+ // 디렉토리 오픈
+ String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry));
+
+ // 디렉토리이면서, 존재하면
+ if (srcDrctry.exists() && srcDrctry.isDirectory()) {
+
+ // 디렉토리 안 목록을 조회한다. (생성자)
+ File[] fileArray = srcDrctry.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesByOwner(fileArray, owner);
+ if (list != null && list.size() > 0) {
+ result = true;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 수정기간별로 디렉토리에 파일이 존재하는지 체크하는 기능
+ *
+ * @param String dir 디렉토리
+ * @param String updtFrom 수정일자From(YYYYMMDD 형태로 입력)
+ * @param String updtTo 수정일자To(YYYYMMDD 형태로 입력)
+ * @return boolean result 존재여부 True / False
+ * @exception Exception
+ */
+ public static boolean checkFileExstByUpdtPd(String dir, String updtFrom, String updtTo) throws Exception {
+
+ // 파일 존재 여부
+ boolean result = false;
+
+ // 디렉토리 오픈
+ String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry));
+
+ // 디렉토리이면서, 존재하면
+ if (srcDrctry.exists() && srcDrctry.isDirectory()) {
+
+ // 디렉토리 안 목록을 조회한다. (수정기간별)
+ File[] fileArray = srcDrctry.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesByUpdtPd(fileArray, updtFrom, updtTo);
+ if (list != null && list.size() > 0) {
+ result = true;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 사이즈별로 디렉토리에 파일이 존재하는지 체크하는 기능
+ *
+ * @param String dir 디렉토리
+ * @param long sizeFrom 사이즈From (KB)
+ * @param long sizeTo 사이즈To (KB)
+ * @return boolean result 존재여부 True / False
+ * @exception Exception
+ */
+ public static boolean checkFileExstBySize(String dir, long sizeFrom, long sizeTo) throws Exception {
+
+ // 파일 존재 여부
+ boolean result = false;
+
+ // 디렉토리 오픈
+ String drctry = dir.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcDrctry = new File(EgovWebUtil.filePathBlackList(drctry));
+
+ // 디렉토리이면서, 존재하면
+ if (srcDrctry.exists() && srcDrctry.isDirectory()) {
+
+ // 디렉토리 안 목록을 조회한다. (사이즈별)
+ File[] fileArray = srcDrctry.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesBySize(fileArray, sizeFrom, sizeTo);
+ if (list != null && list.size() > 0) {
+ result = true;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(모든 목록 조회)
+ *
+ * @param File[] fileArray 파일목록
+ * @return ArrayList list 파일목록(절대경로)
+ * @exception Exception
+ */
+ public static List<String> getSubFilesByAll(File[] fileArray) throws Exception {
+
+ ArrayList<String> list = new ArrayList<String>();
+
+ for (int i = 0; i < fileArray.length; i++) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ if (fileArray[i].isDirectory()) {
+ File[] tmpArray = fileArray[i].listFiles();
+ list.addAll(getSubFilesByAll(tmpArray));
+ // 파일이면 담는다.
+ } else {
+ list.add(fileArray[i].getAbsolutePath());
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(파일명)
+ *
+ * @param File[] fileArray 파일목록
+ * @param String file 파일명
+ * @return ArrayList list 파일목록(절대경로)
+ * @exception Exception
+ */
+ public static List<String> getSubFilesByName(File[] fileArray, String file) throws Exception {
+
+ List<String> list = new ArrayList<String>();
+
+ for (int i = 0; i < fileArray.length; i++) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ if (fileArray[i].isDirectory()) {
+ File[] tmpArray = fileArray[i].listFiles();
+ list.addAll(getSubFilesByName(tmpArray, file));
+ // 파일이면 파일명이 같은지 비교한다.
+ } else {
+ if (fileArray[i].getName().equals(file)) {
+ list.add(fileArray[i].getAbsolutePath());
+ }
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(확장자별)
+ *
+ * @param File[] fileArray 파일목록
+ * @param String extnt 확장자
+ * @return ArrayList list 파일목록(절대경로)
+ * @exception Exception
+ */
+ public static List<String> getSubFilesByExtnt(File[] fileArray, String extnt) throws Exception {
+
+ List<String> list = new ArrayList<String>();
+
+ for (int i = 0; i < fileArray.length; i++) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ if (fileArray[i].isDirectory()) {
+ File[] tmpArray = fileArray[i].listFiles();
+ list.addAll(getSubFilesByExtnt(tmpArray, extnt));
+ // 파일이면 확장자명이 들어있는지 비교한다.
+ } else {
+ if (fileArray[i].getName().indexOf(extnt) != -1) {
+ list.add(fileArray[i].getAbsolutePath());
+ }
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(최종수정기간별)
+ *
+ * @param File[] fileArray 파일목록
+ * @param String updtFrom 수정일자From(YYYYMMDD 형태로 입력)
+ * @param String updtTo 수정일자To(YYYYMMDD 형태로 입력)
+ * @return ArrayList list 파일목록(절대경로)
+ * @exception Exception
+ */
+ public static List<String> getSubFilesByUpdtPd(File[] fileArray, String updtFrom, String updtTo) throws Exception {
+
+ List<String> list = new ArrayList<String>();
+
+ for (int i = 0; i < fileArray.length; i++) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ if (fileArray[i].isDirectory()) {
+ File[] tmpArray = fileArray[i].listFiles();
+ list.addAll(getSubFilesByUpdtPd(tmpArray, updtFrom, updtTo));
+ // 파일이면 수정기간내에 존재하는지 비교한다.
+ } else {
+ // 파일의 최종수정일자 조회
+ long date = fileArray[i].lastModified();
+ java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA);
+ String lastUpdtDate = dateFormat.format(new java.util.Date(date));
+ // 수정기간 내에 존재하는지 확인
+ if (Integer.parseInt(lastUpdtDate) >= Integer.parseInt(updtFrom) && Integer.parseInt(lastUpdtDate) <= Integer.parseInt(updtTo)) {
+ list.add(fileArray[i].getAbsolutePath());
+ }
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(사이즈별)
+ *
+ * @param File[] fileArray 파일목록
+ * @param long sizeFrom 사이즈From(KB)
+ * @param long sizeTo 사이즈To(KB)
+ * @return ArrayList list 파일목록(절대경로)
+ * @exception Exception
+ */
+ public static List<String> getSubFilesBySize(File[] fileArray, long sizeFrom, long sizeTo) throws Exception {
+
+ List<String> list = new ArrayList<String>();
+
+ for (int i = 0; i < fileArray.length; i++) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ if (fileArray[i].isDirectory()) {
+ File[] tmpArray = fileArray[i].listFiles();
+ list.addAll(getSubFilesBySize(tmpArray, sizeFrom, sizeTo));
+ // 파일이면, 사이즈내에 존재하는지 비교한다.
+ } else {
+ // 파일의 사이즈 조회
+ long size = fileArray[i].length();
+ // 사이즈 내에 존재하는지 확인
+ if (size >= (sizeFrom * BUFFER_SIZE) && size <= (sizeTo * BUFFER_SIZE)) {
+ list.add(fileArray[i].getAbsolutePath());
+ }
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 디렉토리 내부 하위목록들 중에서 파일을 찾는 기능(생성자별)
+ *
+ * @param File[] fileArray 파일목록
+ * @param String creator 생성자
+ * @return ArrayList list 파일목록(절대경로)
+ * @exception Exception
+ */
+ public static List<String> getSubFilesByOwner(File[] fileArray, String owner) throws Exception {
+
+ List<String> list = new ArrayList<String>();
+
+ for (int i = 0; i < fileArray.length; i++) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ if (fileArray[i].isDirectory()) {
+ File[] tmpArray = fileArray[i].listFiles();
+ List<String> list1 = getSubFilesByOwner(tmpArray, owner);
+ if (list1 != null)
+ list.addAll(list1);
+
+ // 파일이면, 생성자가 같은지 비교한다.
+ } else {
+ // 파일 생성자 조회
+ String fullpath = EgovWebUtil.filePathBlackList(fileArray[i].getAbsolutePath());
+ Process p = null;
+ if (Globals.OS_TYPE.equals("UNIX")) {
+ String[] command = { EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryByOwner"),
+ fullpath.substring(0, fullpath.lastIndexOf("/")), fullpath.substring(fullpath.lastIndexOf("/"), fullpath.length()), owner };
+ p = Runtime.getRuntime().exec(command);
+ p.waitFor();
+ } else if (Globals.OS_TYPE.equals("WINDOWS")) {
+ String command = EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryByOwner");
+ p = Runtime.getRuntime().exec(command);
+ p.waitFor();
+ }
+ //프로세스 에러시 종료
+ if (p != null && p.exitValue() != 0) {
+ BufferedReader b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ try {
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err);
+ }
+ }
+ //프로세스 실행 성공시 결과 확인
+ else {
+ BufferedReader b_out = null;
+ try {
+ //2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ if(p != null){
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (b_out.ready()) {
+ // 결과문자가 있으면 생성자가 일치하는 파일이 존재한다는 의미
+ String tmpStr = b_out.readLine();
+ if (tmpStr != null && "".equals(tmpStr) && tmpStr.length() <= MAX_STR_LEN) {
+ list.add(fileArray[i].getAbsolutePath());
+ }
+ }
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_out);
+ }
+ }
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 생성한다.
+ * </pre>
+ *
+ * @param dirPath 생성하고자 하는 절대경로
+ * @return 성공하면 새성된 절대경로, 아니면 블랭크
+ */
+
+ public static String createNewDirectory(String dirPath) {
+
+ // 인자값 유효하지 않은 경우 블랭크 리턴
+ if (dirPath == null || dirPath.equals("")) {
+ return "";
+ }
+
+ File file = new File(EgovWebUtil.filePathBlackList(dirPath));
+ String result = "";
+ // 없으면 생성
+ if (file.exists()) {
+ // 혹시 존재해도 파일이면 생성 - 생성되지 않는다.(아래는 실질적으로는 진행되지 않음)
+ if (file.isFile()) {
+ //new File(file.getParent()).mkdirs();
+ if (file.mkdirs()) {
+ result = file.getAbsolutePath();
+ }
+ } else {
+ result = file.getAbsolutePath();
+ }
+ } else {
+ // 존해하지 않으면 생성
+ if (file.mkdirs()) {
+ result = file.getAbsolutePath();
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 파일을 생성한다.
+ * </pre>
+ *
+ * @param String fileName 파일의 절대경로 +파일명
+ * @param String content 저장할 문자열입니다. c:/test/test1/test44.txt
+ *
+ */
+ public static String createNewFile(String filePath) {
+
+ // 인자값 유효하지 않은 경우 블랭크 리턴
+ if (filePath == null || filePath.equals("")) {
+ return "";
+ }
+
+ File file = new File(EgovWebUtil.filePathBlackList(filePath));
+ String result = "";
+ try {
+ if (file.exists()) {
+ result = filePath;
+ } else {
+ // 존재하지 않으면 생성함
+ //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(new File(file.getParent()).mkdirs()){
+ LOGGER.debug("[file.mkdirs] file : File Creation Success");
+ }else{
+ LOGGER.error("[file.mkdirs] file : File Creation Fail");
+ }
+
+ if (file.createNewFile()) {
+ result = file.getAbsolutePath();
+ }
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 삭제한다.
+ * </pre>
+ *
+ * @param dirDeletePath 삭제하고자 하는디렉토리의 절대경로(파일의 경로가 들어오는 경우 삭제하지 않음)
+ * @return 성공하면 삭제된 절대경로, 아니면블랭크
+ */
+
+ public static String deleteDirectory(String dirDeletePath) {
+
+ // 인자값 유효하지 않은 경우 블랭크 리턴
+ if (dirDeletePath == null || dirDeletePath.equals("")) {
+ return "";
+ }
+ String result = "";
+ File file = new File(EgovWebUtil.filePathBlackList(dirDeletePath));
+ if (file.isDirectory()) {
+ String[] fileList = file.list();
+ //소속된 파일을 모두 삭제
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileList != null) {
+ for (int i = 0; i < fileList.length; i++) {
+
+ //log.debug("fileList["+i+"] : "+ dirDeletePath +"/"+fileList[i]);
+ File f = new File(EgovWebUtil.filePathBlackList(dirDeletePath) + "/" + fileList[i]);
+ if (f.isFile()) {
+ //디렉토리에 속한 파일들을 모두 삭제한다.
+ //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(f.delete()){
+ LOGGER.debug("[file.delete] f : File Deletion Success");
+ }else{
+ LOGGER.error("[file.delete] f : File Deletion Fail");
+ }
+ } else {
+ //디렉토리에 속한 하위 디렉토리들에 대한 삭제 명령을 재귀적으로 호출시킨다.
+ deleteDirectory(dirDeletePath + "/" + fileList[i]);
+ }
+ }
+ }
+ // 디렉토리에 속한 파일들과 하위 디렉토리가 삭제되었으면 디렉토리 자신을 삭제한다.
+ result = deletePath(dirDeletePath);
+ } else {
+ result = "";
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 파일을 삭제한다.
+ * </pre>
+ *
+ * @param fileDeletePath 삭제하고자 하는파일의 절대경로
+ * @return 성공하면 삭제된 파일의 절대경로, 아니면블랭크
+ */
+
+ public static String deleteFile(String fileDeletePath) {
+
+ // 인자값 유효하지 않은 경우 블랭크 리턴
+ if (fileDeletePath == null || fileDeletePath.equals("")) {
+ return "";
+ }
+ String result = "";
+ File file = new File(EgovWebUtil.filePathBlackList(fileDeletePath));
+ if (file.isFile()) {
+ result = deletePath(fileDeletePath);
+ } else {
+ result = "";
+ }
+
+ return result;
+ }
+
+ /**
+ * 파일의 읽기권한을 체크한다.
+ *
+ * @param String file 파일
+ * @return boolean result 읽기권한 True / False
+ * @exception Exception
+ */
+ public static boolean checkReadAuth(String file) throws Exception {
+
+ // 읽기가능여부
+ boolean result = false;
+
+ // 전달받은 경로를 통해 파일 인스턴스를 생성한다.
+ String file1 = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(EgovWebUtil.filePathBlackList(file1));
+
+ // 존재하는지 확인한다.
+ if (srcFile.exists()) {
+ // 읽기 가능한지 체크한다.
+ result = srcFile.canRead();
+ }
+
+ return result;
+ }
+
+ /**
+ * 파일의 쓰기권한을 체크한다.
+ *
+ * @param String file 파일
+ * @return boolean result 쓰기권한 True / False
+ * @exception Exception
+ */
+ public static boolean checkWriteAuth(String file) throws Exception {
+
+ // 쓰기가능여부
+ boolean result = false;
+
+ // 전달받은 경로를 통해 파일 인스턴스를 생성한다.
+ String file1 = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(EgovWebUtil.filePathBlackList(file1));
+
+ // 존재하는지 확인한다.
+ if (srcFile.exists()) {
+ // 쓰기 가능한지 체크한다.
+ result = srcFile.canWrite();
+ }
+
+ return result;
+ }
+
+ /**
+ * 파일의 최종수정일자별 파일목록 조회하는 기능
+ *
+ * @param String drctry 디렉토리
+ * @param String updtDate 최종수정일자(YYYYMMDD 형태로 입력)
+ * @return ArrayList list 파일목록
+ * @exception Exception
+ */
+ public static List<String> getFileListByDate(String drctry, String updtDate) throws Exception {
+
+ // 결과 목록
+ List<String> list = null;
+
+ // 디렉토리 오픈
+ String drctry1 = drctry.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file = new File(EgovWebUtil.filePathBlackList(drctry1));
+
+ // 디렉토리이며, 존재하면 최종수정일자가 같은 파일목록 조회 시작
+ if (file.exists() && file.isDirectory()) {
+ File[] fileArray = file.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ list = getSubFilesByDate(fileArray, updtDate);
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 파일의 최종수정기간내 파일목록 조회하는 기능
+ *
+ * @param String drctry 디렉토리
+ * @param String updtFrom 최종수정일자From(YYYYMMDD 형태로 입력)
+ * @param String updtTo 최종수정일자To(YYYYMMDD 형태로 입력)
+ * @return ArrayList list 파일목록
+ * @exception Exception
+ */
+ public static List<String> getFileListByUpdtPd(String drctry, String updtFrom, String updtTo) throws Exception {
+
+ // 결과 목록
+ List<String> list = null;
+
+ // 디렉토리 오픈
+ String drctry1 = drctry.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file = new File(EgovWebUtil.filePathBlackList(drctry1));
+
+ // 디렉토리이며, 최종수정기간내 존재하는 파일목록 조회 시작
+ if (file.exists() && file.isDirectory()) {
+ File[] fileArray = file.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ list = getSubFilesByUpdtPd(fileArray, updtFrom, updtTo);
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 하위디렉토리 포함 최종수정일자가 같은 파일목록을 찾는 기능
+ *
+ * @param File fileArray 파일목록
+ * @param String updtDate 최종수정일자(YYYYMMDD 형태로 입력)
+ * @return ArrayList list 파일목록
+ * @exception Exception
+ */
+ public static List<String> getSubFilesByDate(File[] fileArray, String updtDate) throws Exception {
+
+ List<String> list = new ArrayList<String>();
+
+ for (int i = 0; i < fileArray.length; i++) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ if (fileArray[i].isDirectory()) {
+ File[] tmpArray = fileArray[i].listFiles();
+ list.addAll(getSubFilesByDate(tmpArray, updtDate));
+ // 파일이면 파일명이 같은지 비교한다.
+ } else {
+ // 파일의 최종수정일자 조회
+ long date = fileArray[i].lastModified();
+ java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA);
+ String lastUpdtDate = dateFormat.format(new java.util.Date(date));
+ if (Integer.parseInt(lastUpdtDate) == Integer.parseInt(updtDate)) {
+ list.add(fileArray[i].getAbsolutePath());
+ }
+ }
+ }
+
+ return list;
+ }
+
+ /**
+ * 파일을 특정 구분자(',', '|', 'TAB')로 파싱하는 기능
+ *
+ * @param String parFile 파일
+ * @param String parChar 구분자(',', '|', 'TAB')
+ * @param int parField 필드수
+ * @return Vector parResult 파싱결과 구조체
+ * @exception Exception
+ */
+ public static Vector<List<String>> parsFileByChar(String parFile, String parChar, int parField) throws Exception {
+
+ // 파싱결과 구조체
+ Vector<List<String>> parResult = new Vector<List<String>>();
+
+ // 파일 오픈
+ String parFile1 = parFile.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file = new File(EgovWebUtil.filePathBlackList(parFile1));
+ BufferedReader br = null;
+ try {
+ // 파일이며, 존재하면 파싱 시작
+ if (file.exists() && file.isFile()) {
+
+ // 1. 파일 텍스트 내용을 읽어서 StringBuffer에 쌓는다.
+ br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
+ StringBuffer strBuff = new StringBuffer();
+ String line = "";
+ while ((line = br.readLine()) != null) {
+ if (line.length() < MAX_STR_LEN)
+ strBuff.append(line);
+ }
+
+ // 2. 쌓은 내용을 특정 구분자로 파싱하여 String 배열로 얻는다.
+ String[] strArr = EgovStringUtil.split(strBuff.toString(), parChar);
+
+ // 3. 필드 수 만큼 돌아가며 Vector<ArrayList> 형태로 만든다.
+ int filedCnt = 1;
+ List<String> arr = new ArrayList<String>();
+ for (int i = 0; i < strArr.length; i++) {
+
+ if (parField != 1) {
+ if ((filedCnt % parField) == 1) {
+ if (strArr[i] != null) {
+ arr.add(strArr[i]);
+ }
+ if (i == (strArr.length - 1)) {
+ parResult.add(arr);
+ }
+ } else if ((filedCnt % parField) == 0) {
+ if (strArr[i] != null) {
+ arr.add(strArr[i]);
+ parResult.add(arr);
+ }
+ } else {
+ if (strArr[i] != null) {
+ arr.add(strArr[i]);
+ if (i == (strArr.length - 1)) {
+ parResult.add(arr);
+ }
+ }
+ }
+ } else {
+ arr = new ArrayList<String>();
+ if (strArr[i] != null) {
+ arr.add(strArr[i]);
+ }
+ parResult.add(arr);
+ }
+
+ filedCnt++;
+ }
+ }
+ } finally {
+ EgovResourceCloseHelper.close(br);
+ }
+
+ return parResult;
+ }
+
+ /**
+ * 파일을 일정 길이로 파싱하는 기능
+ *
+ * @param String parFile 파일
+ * @param int[] parLen 각 필드의 길이
+ * @param int parLine 읽어낼 라인수
+ * @return Vector parResult 파싱결과 구조체
+ * @exception Exception
+ */
+ public static Vector<List<String>> parsFileBySize(String parFile, int[] parLen, int parLine) throws Exception {
+
+ // 파싱결과 구조체
+ Vector<List<String>> parResult = new Vector<List<String>>();
+
+ // 파일 오픈
+ String parFile1 = parFile.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file = new File(EgovWebUtil.filePathBlackList(parFile1));
+ BufferedReader br = null;
+ try {
+ // 파일이며, 존재하면 파싱 시작
+ if (file.exists() && file.isFile()) {
+
+ // 1. 입력된 라인수만큼 파일 텍스트 내용을 읽어서 String[]에 쌓는다.
+ br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
+ if (parLine < 0) {
+ parLine = 0;
+ }
+ String[] strArr = new String[parLine];
+ String line = "";
+ int readCnt = 0;
+ while ((line = br.readLine()) != null && readCnt < parLine) {
+ if (line.length() <= MAX_STR_LEN)
+ strArr[readCnt++] = line;
+ }
+
+ // 2. Vector<ArrayList> 형태로 만든다.
+ for (int i = 0; i < strArr.length; i++) {
+ String text = strArr[i];
+ List<String> arr = new ArrayList<String>();
+ int idx = 0;
+ boolean result = false;
+ for (int j = 0; j < parLen.length; j++) {
+ if (!result) { //if(result != true){
+ String split = "";
+ if (text.length() < (idx + parLen[j])) {
+ split = text.substring(idx, text.length());
+ result = true;
+ } else {
+ split = text.substring(idx, idx + parLen[j]);
+ }
+ arr.add(split);
+ idx = idx + parLen[j];
+ }
+ }
+ parResult.add(arr);
+ }
+ }
+ } finally {
+ EgovResourceCloseHelper.close(br);
+ }
+
+ return parResult;
+ }
+
+ /**
+ * 두 파일의 사이즈를 비교하는 기능 (KB 단위 비교)
+ *
+ * @param String cmprFile1 파일1
+ * @param String cmprFile2 파일2
+ * @return boolean result 동일여부 True / False
+ * @exception Exception
+ */
+ public static boolean cmprFilesBySize(String cmprFile1, String cmprFile2) throws Exception {
+
+ // 파일 동일 여부
+ boolean result = false;
+
+ // 파일 오픈
+ String cmprFile11 = cmprFile1.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ String cmprFile22 = cmprFile2.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file1 = new File(EgovWebUtil.filePathBlackList(cmprFile11));
+ File file2 = new File(EgovWebUtil.filePathBlackList(cmprFile22));
+
+ // 파일이며, 존재하면 파일 사이즈 비교
+ if (file1.exists() && file2.exists() && file1.isFile() && file2.isFile()) {
+
+ // 파일1 사이즈
+ long size1 = file1.length();
+
+ // 파일2 사이즈
+ long size2 = file2.length();
+
+ // 사이즈 비교
+ if (size1 == size2) {
+ result = true;
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * 두 파일의 수정일자를 비교하는 기능
+ *
+ * @param String cmprFile1 파일1
+ * @param String cmprFile2 파일2
+ * @return boolean result 동일여부 True / False
+ * @exception Exception
+ */
+ public static boolean cmprFilesByUpdtPd(String cmprFile1, String cmprFile2) throws Exception {
+
+ // 파일 동일 여부
+ boolean result = false;
+
+ // 파일 오픈
+ String cmprFile11 = cmprFile1.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ String cmprFile22 = cmprFile2.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file1 = new File(EgovWebUtil.filePathBlackList(cmprFile11));
+ File file2 = new File(EgovWebUtil.filePathBlackList(cmprFile22));
+
+ // 파일이며, 존재하면 파일 수정일자 비교
+ if (file1.exists() && file2.exists() && file1.isFile() && file2.isFile()) {
+
+ // 파일1 수정일자
+ long date1 = file1.lastModified();
+ java.text.SimpleDateFormat dateFormat1 = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA);
+ String lastUpdtDate1 = dateFormat1.format(new java.util.Date(date1));
+
+ // 파일2 수정일자
+ long date2 = file2.lastModified();
+ java.text.SimpleDateFormat dateFormat2 = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA);
+ String lastUpdtDate2 = dateFormat2.format(new java.util.Date(date2));
+
+ // 수정일자 비교
+ if (lastUpdtDate1.equals(lastUpdtDate2)) {
+ result = true;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 두 파일의 내용을 비교하는 기능 (TEXT파일만 가능)
+ *
+ * @param String cmprFile1 파일1
+ * @param String cmprFile2 파일2
+ * @return boolean result 동일여부 True / False
+ * @exception Exception
+ */
+ public static boolean cmprFilesByContent(String cmprFile1, String cmprFile2) throws Exception {
+
+ // 파일 동일 여부
+ boolean result = false;
+
+ // 파일 오픈
+ String cmprFile11 = cmprFile1.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ String cmprFile22 = cmprFile2.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file1 = new File(EgovWebUtil.filePathBlackList(cmprFile11));
+ File file2 = new File(EgovWebUtil.filePathBlackList(cmprFile22));
+
+ BufferedReader br1 = null;
+ BufferedReader br2 = null;
+
+ try {
+ // 파일이며, 존재하면 파일 내용 비교
+ if (file1.exists() && file2.exists() && file1.isFile() && file2.isFile()) {
+
+ List<String> cmprText1 = new ArrayList<String>();
+ List<String> cmprText2 = new ArrayList<String>();
+
+ // 파일1 텍스트 내용
+ br1 = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
+ String line1 = "";
+ while ((line1 = br1.readLine()) != null) {
+ if (line1.length() < MAX_STR_LEN)
+ cmprText1.add(line1);
+ }
+
+ // 파일2 텍스트 내용
+ br2 = new BufferedReader(new InputStreamReader(new FileInputStream(file2)));
+ String line2 = "";
+ while ((line2 = br2.readLine()) != null) {
+ if (line2.length() <= MAX_STR_LEN)
+ cmprText2.add(line2);
+ }
+
+ // 내용 비교
+ boolean isWrong = false;
+ for (int i = 0; i < cmprText1.size(); i++) {
+ if (!isWrong) { // if(isWrong != true){
+ String text1 = cmprText1.get(i);
+ String text2 = cmprText2.get(i);
+
+ if (!text1.equals(text2)) {
+ isWrong = true;
+ }
+ }
+ }
+
+ if (!isWrong) {
+ result = true;
+ }
+ }
+ } finally {
+ EgovResourceCloseHelper.close(br1, br2);
+ }
+
+ return result;
+ }
+
+ /**
+ * 두 파일의 생성자를 비교하는 기능
+ *
+ * @param String cmprFile1 파일1
+ * @param String cmprFile2 파일2
+ * @return boolean result 동일여부 True / False
+ * @exception Exception
+ */
+ public static boolean cmprFilesByOwner(String cmprFile1, String cmprFile2) throws Exception {
+
+ // 파일 동일 여부
+ boolean result = false;
+
+ // 파일1 생성자
+ String owner1 = getOwner(cmprFile1);
+
+ // 파일2 생성자
+ String owner2 = getOwner(cmprFile2);
+
+ if (owner1 != null && owner2 != null && !"".equals(owner1) && !"".equals(owner2) && owner1.equals(owner2)) {
+ result = true;
+ }
+
+ return result;
+ }
+
+ /**
+ * 단일 파일을 다른 파일에 복사(Copy)한다.
+ *
+ * @param String source 원본파일
+ * @param String target 타겟파일
+ * @return boolean result 복사여부 True / False
+ * @exception Exception
+ */
+ public static boolean copyFile(String source, String target) throws Exception {
+
+ // 복사여부
+ boolean result = false;
+
+ // 원본 파일
+ String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+
+ // 타켓 파일
+ String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ // 원본 파일이 존재하는지 확인한다.
+ if (srcFile.exists()) {
+
+ // 복사될 target 파일 생성
+ tar = createNewFile(tar);
+ //log.debug("tar:"+tar);
+ File tarFile = new File(EgovWebUtil.filePathBlackList(tar));
+ //log.debug("tarFile:"+tarFile.getAbsolutePath());
+ // 복사
+ result = execCopyFile(srcFile, tarFile);
+ }
+
+ return result;
+ }
+
+ /**
+ * 여러 파일을 다른 디렉토리에 복사(Copy)한다.
+ *
+ * @param String source 원본파일들
+ * @param String target 타겟디렉토리
+ * @return boolean result 복사여부 True / False
+ * @exception Exception
+ */
+ public static boolean copyFiles(String[] source, String target) throws Exception {
+
+ // 복사여부
+ boolean result = true;
+
+ // 복사 이전에 복사할 파일들의 경로가 올바른지 확인한다.
+ for (int i = 0; i < source.length; i++) {
+ String src = source[i].replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File chkFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (!chkFile.exists()) {
+ //log.debug("+++ 원본 파일이 존재하지 않습니다.");
+ return result;
+ }
+ }
+
+ String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ // 복사를 시작한다.
+ for (int j = 0; j < source.length; j++) {
+
+ if (result) { //result != false
+
+ // 타겟파일이름 명명
+ File chkFile = new File(EgovWebUtil.filePathBlackList(source[j]));
+ String tarTemp = tar + FILE_SEPARATOR + chkFile.getName();
+
+ // 복사될 target 파일 생성
+ tarTemp = createNewFile(tarTemp);
+ File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp));
+
+ // 복사
+ result = execCopyFile(chkFile, tarFile);
+ }
+ } // end for
+
+ return result;
+ }
+
+ /**
+ * 확장자별 파일들을 다른 디렉토리에 복사(Copy)한다.
+ *
+ * @param String source 원본디렉토리
+ * @param String extnt 확장자(.txt 형태 입력)
+ * @param String target 타겟디렉토리
+ * @return boolean result 복사여부 True / False
+ * @exception Exception
+ */
+ public static boolean copyFilesByExtnt(String source, String extnt, String target) throws Exception {
+
+ // 복사여부
+ boolean result = true;
+
+ // 원본 파일
+ String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+
+ // 원본 디렉토리가 존재하는지 확인한다.
+ if (srcFile.exists() && srcFile.isDirectory()) {
+
+ String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ // 원본 디렉토리 안에서 확장자가 일치하는 파일목록을 가져온다.
+ File[] fileArray = srcFile.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesByExtnt(fileArray, extnt);
+
+ // 복사를 시작한다.
+ for (int i = 0; i < list.size(); i++) {
+ if (result) { //f(result != false){
+ // 원본파일 절대경로
+ String abspath = (String) list.get(i);
+
+ // 타겟파일이름 명명
+ File chkFile = new File(EgovWebUtil.filePathBlackList(abspath));
+ String tarTemp = tar + FILE_SEPARATOR + chkFile.getName();
+
+ // 복사될 target 파일 생성
+ tarTemp = createNewFile(tarTemp);
+ File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp));
+
+ // 복사
+ result = execCopyFile(chkFile, tarFile);
+ }
+ } // end for
+ }
+ else {
+ result = false;
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * 수정기간내 파일들을 다른 디렉토리에 복사(Copy)한다.
+ *
+ * @param String source 원본디렉토리
+ * @param String updtFrom 수정시작일자(YYYYMMDD 형태로 입력)
+ * @param String updtTo 수정종료일자(YYYYMMDD 형태로 입력)
+ * @param String target 타겟디렉토리
+ * @return boolean result 복사여부 True / False
+ * @exception Exception
+ */
+ public static boolean copyFilesByUpdtPd(String source, String updtFrom, String updtTo, String target) throws Exception {
+
+ // 복사여부
+ boolean result = true;
+
+ // 원본 파일
+ String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+
+ // 원본 디렉토리가 존재하는지 확인한다.
+ if (srcFile.exists() && srcFile.isDirectory()) {
+
+ String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ // 원본 디렉토리 안에서 수정기간내 존재하는 파일목록을 가져온다.
+ File[] fileArray = srcFile.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesByUpdtPd(fileArray, updtFrom, updtTo);
+
+ // 복사를 시작한다.
+ for (int i = 0; i < list.size(); i++) {
+
+ if (result) { //f(result != false){
+
+ // 원본파일 절대경로
+ String abspath = (String) list.get(i);
+
+ // 타겟파일이름 명명
+ File chkFile = new File(EgovWebUtil.filePathBlackList(abspath));
+ String tarTemp = tar + FILE_SEPARATOR + chkFile.getName();
+
+ // 복사될 target 파일 생성
+ tarTemp = createNewFile(tarTemp);
+ File tarFile = new File(tarTemp);
+
+ // 복사
+ result = execCopyFile(chkFile, tarFile);
+ }
+ } // end for
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 사이즈내 파일들을 다른 디렉토리에 복사(Copy)한다.
+ *
+ * @param String source 원본디렉토리
+ * @param Long sizeFrom 최소사이즈(KB)
+ * @param Long sizeTo 최대사이즈(KB)
+ * @param String target 타겟디렉토리
+ * @return boolean result 복사여부 True / False
+ * @exception Exception
+ */
+ public static boolean copyFilesBySize(String source, long sizeFrom, long sizeTo, String target) throws Exception {
+
+ // 복사여부
+ boolean result = true;
+
+ // 원본 파일
+ String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+
+ // 원본 디렉토리가 존재하는지 확인한다.
+ if (srcFile.exists() && srcFile.isDirectory()) {
+
+ String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ // 원본 디렉토리 안에서 사이즈내 존재하는 파일목록을 가져온다.
+ File[] fileArray = srcFile.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesBySize(fileArray, sizeFrom, sizeTo);
+
+ // 복사를 시작한다.
+ for (int i = 0; i < list.size(); i++) {
+
+ if (result) { //result != false
+ // 원본파일 절대경로
+ String abspath = (String) list.get(i);
+
+ // 타겟파일이름 명명
+ File chkFile = new File(EgovWebUtil.filePathBlackList(abspath));
+ String tarTemp = tar + FILE_SEPARATOR + chkFile.getName();
+
+ // 복사될 target 파일 생성
+ tarTemp = createNewFile(tarTemp);
+ File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp));
+
+ // 복사
+ result = execCopyFile(chkFile, tarFile);
+ if (result) {
+ break;
+ }
+ }
+ } // end for
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * 생성자별 파일들을 다른 디렉토리에 복사(Copy)한다.
+ *
+ * @param String source 원본디렉토리
+ * @param String owner 생성자
+ * @param String target 타겟디렉토리
+ * @return boolean result 복사여부 True / False
+ * @exception Exception
+ */
+ public static boolean copyFilesByOwner(String source, String owner, String target) throws Exception {
+
+ // 복사여부
+ boolean result = true;
+
+ // 원본 파일
+ String src = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+
+ // 원본 디렉토리가 존재하는지 확인한다.
+ if (srcFile.exists() && srcFile.isDirectory()) {
+
+ String tar = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ // 원본 디렉토리 안에서 생성자별 일치하는 파일목록을 가져온다.
+ File[] fileArray = srcFile.listFiles();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (fileArray != null) {
+ List<String> list = getSubFilesByOwner(fileArray, owner);
+
+ // 복사를 시작한다.
+ for (int i = 0; i < list.size(); i++) {
+
+ if (result) { //result != false
+
+ // 원본파일 절대경로
+ String abspath = (String) list.get(i);
+
+ // 타겟파일이름 명명
+ File chkFile = new File(EgovWebUtil.filePathBlackList(abspath));
+ String tarTemp = tar + FILE_SEPARATOR + chkFile.getName();
+
+ // 복사될 target 파일 생성
+ tarTemp = createNewFile(tarTemp);
+ File tarFile = new File(EgovWebUtil.filePathBlackList(tarTemp));
+
+ // 복사
+ result = execCopyFile(chkFile, tarFile);
+
+ if (!result) {
+ break;
+ }
+ }
+ } // end for
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * 복사를 수행하는 기능
+ *
+ * @param File srcFile 원본파일
+ * @param File tarFile 타겟파일
+ * @return boolean result 복사여부 True / False
+ * @exception Exception
+ */
+ public static boolean execCopyFile(File srcFile, File tarFile) throws Exception {
+
+ // 결과
+ boolean result = false;
+ FileInputStream fis = null;
+ FileOutputStream fos = null;
+ try {
+ // 복사
+ fis = new FileInputStream(srcFile);
+
+ //예외상황에 따른 처리 추가함. -> 만약 tarFile 이 디렉토리명인 경우 디렉토리 밑으로 새로 파일을 생성해서 복사한다.. like DOS
+ File tarFile1 = tarFile;
+ if (tarFile1.isDirectory()) {
+ tarFile1 = new File(EgovWebUtil.filePathBlackList(tarFile1.getAbsolutePath()) + "/" + srcFile.getName());
+ }
+ fos = new FileOutputStream(tarFile1);
+ byte[] buffer = new byte[(int) BUFFER_SIZE];
+ int i = 0;
+ if (fis != null && fos != null) {
+ while ((i = fis.read(buffer)) != -1) {
+ fos.write(buffer, 0, i);
+ }
+ }
+
+ result = true;
+ } finally {
+ EgovResourceCloseHelper.close(fis, fos);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 삭제한다. (소유자 정보를 통해 삭제)
+ * </pre>
+ *
+ * @param dirDeletePath 삭제하고자 하는디렉토리의 절대경로(파일의 경로가 들어오는 경우 삭제하지 않음)
+ * @param owner 디렉토리의 삭제조건 생성자
+ * @return 성공하면 삭제된 절대경로, 아니면블랭크
+ */
+
+ public static String deleteDirectory(String dirDeletePath, String dirOwner) {
+
+ // 인자값 유효하지 않은 경우 블랭크 리턴
+ if (dirDeletePath == null || dirDeletePath.equals("") || dirOwner == null || dirOwner.equals("")) {
+ return "";
+ }
+
+ // 찾은 결과를 전달할 ArrayList
+ String result = "";
+
+ try {
+ File file = new File(EgovWebUtil.filePathBlackList(dirDeletePath));//KISA 보안약점 조치 (2018-10-29, 윤창원)
+
+ // 추가된 삭제조건 옵션에 합당한지 확인
+ boolean isInCondition = false;
+ String realOwner = getOwner(dirDeletePath);
+ //log.debug("realOwner:"+realOwner);
+ if (dirOwner.equals(realOwner)) {
+ isInCondition = true;
+ }
+ // 삭제조건에 부합되면 디렉토리 삭제조치함
+ if (file.isDirectory() && isInCondition) {
+ result = deleteDirectory(dirDeletePath);
+ } else {
+ result = realOwner;
+ }
+ } catch (NullPointerException e) {//KISA 보안약점 조치 (2018-10-29, 윤창원)
+ throw new RuntimeException(e);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 삭제한다. (생성일자 조건으로 삭제)
+ * </pre>
+ *
+ * @param dirDeletePath 삭제하고자 하는디렉토리의 절대경로(파일의 경로가 들어오는 경우 삭제하지 않음)
+ * @param fromDate 디렉토리의 삭제조건 시작일자
+ * @param toDate 디렉토리의 삭제조건 종료일자
+ * @return 성공하면 삭제된 절대경로, 아니면블랭크
+ */
+ public static String deleteDirectory(String dirDeletePath, String fromDate, String toDate) {
+
+ // 인자값 유효하지 않은 경우 블랭크 리턴
+ if (dirDeletePath == null || dirDeletePath.equals("") || fromDate == null || fromDate.equals("") || toDate == null || toDate.equals("")) {
+ return "";
+ }
+
+ // 찾은 결과를 전달할 ArrayList
+ String result = "";
+ File file = new File(EgovWebUtil.filePathBlackList(dirDeletePath));
+
+ // 추가된 삭제조건 옵션에 합당한지 확인
+ boolean isInCondition = false;
+ String lastModifyedDate = getLastModifiedDateFromFile(file);
+ //log.debug("lastModifyedDate:"+lastModifyedDate);
+
+ if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) {
+ isInCondition = true;
+ }
+
+ // 삭제조건에 부합되면 디렉토리 삭제조치함
+ if (file.isDirectory() && isInCondition) {
+ result = deleteDirectory(dirDeletePath);
+ }
+
+ return result;
+ }
+
+ /**
+ * 파일(디렉토리)가 존재하는 파일시스템(마운트된 위치)을 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return String mountLc 마운트위치
+ * @exception Exception
+ */
+ public static String getMountLc(String file) throws Exception {
+
+ // 디스크명
+ String diskName = "";
+
+ //String drctryName = "";
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (srcFile.exists()) {
+
+ // 유닉스 파일시스템명 조회 (df -k $1 | grep $2 | awk -F" " '{print $7}')
+ if (Globals.OS_TYPE.equals("UNIX")) {
+ Process p = null;
+ String[] command = { EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getMountLc"), src, "/" };
+ p = Runtime.getRuntime().exec(command);
+ //p.waitFor();
+
+ //boolean result = false;
+ BufferedReader b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ try {
+ while (true) {
+ String str = b_out.readLine();
+ if (str == null || "".equals(str)) {
+ break;
+ }
+ if (str.length() <= MAX_STR_LEN) {
+ diskName = str;
+ } else {
+ diskName = str.substring(0, MAX_STR_LEN);
+ }
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_out);
+ }
+
+ if (p != null) {
+ p.destroy();
+ }
+
+ // 윈도우 파일시스템명 조회
+ } else if (Globals.OS_TYPE.equals("WINDOWS")) {
+
+ diskName = src == null || src.length() < 1 ? "" : src.substring(0, 1).toUpperCase();
+ //log.debug(diskName);
+ }
+ }
+
+ return diskName;
+ }
+
+ /**
+ * 파일(디렉토리)가 존재하는 디렉토리(Parent)를 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return String drctryName 디렉토리
+ * @exception Exception
+ */
+ public static String getDrctryName(String file) throws Exception {
+
+ String drctryName = "";
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (srcFile.exists()) {
+ drctryName = srcFile.getParent();
+ }
+
+ return drctryName;
+ }
+
+ /**
+ * 파일(디렉토리)가 존재하는 파일명을 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return String fileName 파일명
+ * @exception Exception
+ */
+ public static String getFileName(String file) throws Exception {
+
+ String fileName = "";
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (srcFile.exists()) {
+ fileName = srcFile.getName();
+ }
+
+ return fileName;
+ }
+
+ /**
+ * 파일(디렉토리)의 최종수정일자를 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return String updtDate 최종수정일자(YYYYMMDD 형태)
+ * @exception Exception
+ */
+ public static String getUpdtDate(String file) throws Exception {
+
+ String updtDate = "";
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (srcFile.exists()) {
+ long date = srcFile.lastModified();
+ java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.KOREA);
+ updtDate = dateFormat.format(new java.util.Date(date));
+ }
+
+ return updtDate;
+ }
+
+ /**
+ * 파일(디렉토리)의 생성자를 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return String owner 생성자
+ * @exception Exception
+ */
+ public static String getOwner(String file) throws Exception {
+
+ String owner = "";
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ BufferedReader b_err = null;
+ BufferedReader b_out = null;
+ try {
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (srcFile.exists()) {
+
+ // 파일 생성자 조회
+ String parentPath = EgovStringUtil.isNullToString(srcFile.getParent());
+ String fname = EgovStringUtil.isNullToString(srcFile.getName());
+
+ Process p = null;
+ String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryOwner"));
+ String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), parentPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR),
+ fname };
+ p = Runtime.getRuntime().exec(command);
+ p.waitFor();
+ //프로세스 에러시 종료
+ if (p != null && p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ } else if (p != null) { //프로세스 실행 성공시 결과 확인
+ boolean result = false;
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (b_out.ready()) {
+ if (!result) { // result != true
+ // 결과문자가 있으면 생성자가 있다는 의미
+ owner = b_out.readLine();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (owner != null) {
+ if (owner.length() <= MAX_STR_LEN) {
+ if (!"".equals(owner)) {
+ result = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err, b_out);
+ }
+
+ return owner;
+ }
+
+ /**
+ * 파일(디렉토리)의 접근권한을 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return String access 접근권한(유닉스=777, 666, 윈도우=Read, Write, Read Only)
+ * @exception Exception
+ */
+ public static String getAccess(String file) throws Exception {
+
+ String access = "";
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ // 2020-12-07 KISA 보안코드 검증 조치
+ src = EgovWebUtil.filePathBlackList(src);
+
+ BufferedReader b_err = null;
+ BufferedReader b_out = null;
+ try {
+ File srcFile = new File(src);
+ if (srcFile.exists()) {
+
+ // 접근권한 조회
+ String parentPath = srcFile.getParent();
+ String fname = srcFile.getName();
+
+ Process p = null;
+ if (Globals.OS_TYPE.equals("UNIX")) {
+ String[] command = { EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getDrctryAccess"), parentPath, fname };
+ p = Runtime.getRuntime().exec(command);
+ p.waitFor();
+ //프로세스 에러시 종료
+ if (p != null && p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ b_err.close();
+ }
+ //프로세스 실행 성공시 결과 확인
+ else if (p != null) {
+ boolean result = false;
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (b_out.ready()) {
+ if (!result) { //result != true
+ access = b_out.readLine();
+ if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) {
+ result = true;
+ break;
+ }
+ }
+ }
+ b_out.close();
+ }
+ } else if (Globals.OS_TYPE.equals("WINDOWS")) {
+ String[] command = { "cmd", "/c", "attrib", src };
+ p = Runtime.getRuntime().exec(command);
+ p.waitFor();
+ //프로세스 에러시 종료
+ if (p != null && p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ } else { //프로세스 실행 성공시 결과 확인
+ boolean result = false;
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (b_out.ready()) {
+ if (!result) { //result != true
+ access = b_out.readLine();
+ if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) {
+ access = access.toUpperCase().replace(src.toUpperCase(), "");
+ access = access.replace(" ", "");
+ result = true;
+ if (result) {
+ break;
+ }
+ }
+ }
+ }
+
+ if (result) {
+ String acs = "";
+ boolean read = false;
+ boolean write = true;
+ boolean system = false;
+ boolean hidden = false;
+
+ for (int i = 0; i < access.length(); i++) {
+ char chr = access.charAt(i);
+ switch (chr) {
+ case ACCESS_READ:
+ read = true;
+ write = false;
+ break;
+ case ACCESS_SYS:
+ system = true;
+ break;
+ case ACCESS_HIDE:
+ hidden = true;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (read) {
+ acs += "READ-ONLY|";
+ } else {
+ acs += "READ|";
+ }
+ if (write) {
+ acs += "WRITE|";
+ }
+ if (system) {
+ acs += "SYSTEM|";
+ }
+ if (hidden) {
+ acs += "HIDDEN|";
+ }
+ access = acs;
+ }
+ }
+ }
+
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err, b_out);
+ }
+
+ return access;
+ }
+
+ /**
+ * 파일(디렉토리)의 사이즈를 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return Long size 사이즈(Byte)
+ * @exception Exception
+ */
+ public static long getSize(String file) throws Exception {
+
+ long size = 0L;
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (srcFile.exists()) {
+ size = srcFile.length();
+ }
+
+ return size;
+ }
+
+ /**
+ * 파일(디렉토리)의 포맷을 조회하는 기능
+ *
+ * @param String file 파일(디렉토리)
+ * @return String format 포맷
+ * @exception Exception
+ */
+ public static String getFormat(String file) throws Exception {
+
+ // 포맷, 타입
+ String format = "";
+ String type = "";
+
+ String src = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+
+ File srcFile = new File(EgovWebUtil.filePathBlackList(src));
+ if (srcFile.exists()) {
+
+ String[] strArr = (EgovStringUtil.isNullToString(src)).split("\\.");
+ if (strArr.length >= 2) {
+ format = strArr[strArr.length - 1].toLowerCase();
+ type = EgovProperties.getProperty(Globals.FILE_FORMAT_PATH, format);
+ }
+ }
+
+ return type;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 복사한다.
+ * </pre>
+ *
+ * @param String originalDirPath 원본 디렉토리 의 절대경로
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @return boolean result 복사가 성공하면 true, 실패하면 false를 리턴한다.
+ */
+ public static boolean copyDirectory(String originalDirPath, String targetDirPath) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("")) {
+ return false;
+ }
+ boolean result = false;
+ File f = null;
+
+ f = new File(EgovWebUtil.filePathBlackList(originalDirPath));
+ // 원본이 유효해야 진행한다.
+ if (f.exists() && f.isDirectory()) {
+
+ //타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함.
+ String targetDirPath1 = createNewDirectory(targetDirPath);
+ if (targetDirPath1.equals("")) {
+ result = false;
+ } else {
+ File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath1));
+ //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(targetDir.mkdirs()){
+ LOGGER.debug("[file.mkdirs] targetDir : Directory Creation Success");
+ }else{
+ LOGGER.error("[file.mkdirs] targetDir : Directory Creation Fail");
+ }
+
+ // 디렉토리에 속한 파일들을 복사한다.
+ String[] originalFileList = f.list();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (originalFileList != null) {
+ if (originalFileList.length > 0) {
+ for (int i = 0; i < originalFileList.length; i++) {
+ File subF = new File(EgovWebUtil.filePathBlackList(originalDirPath) + FILE_SEPARATOR + originalFileList[i]);
+ if (subF.isFile()) {
+ //하위목록이 파일이면 파일복사실행 -> 실패 발생하는 경우 복사를 중단한다.
+ result = copyFile(originalDirPath + FILE_SEPARATOR + originalFileList[i], targetDir.getAbsolutePath() + FILE_SEPARATOR + originalFileList[i]);
+ } else {
+ //하위목록이 디렉토리이면 복사를 재귀적으로 호출한다.
+ result = copyDirectory(originalDirPath + "/" + originalFileList[i], targetDirPath1 + "/" + originalFileList[i]);
+ }
+ }
+ } else {
+ result = true;
+ }
+ }
+ }
+ } else {
+ // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료
+ result = false;
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 복사한다. (생성일자 조건으로 복사)
+ * </pre>
+ *
+ * @param String originalDirPath 원본 디렉토리 의 절대경로
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @param fromDate 디렉토리의 복사조건 시작일자
+ * @param toDate 디렉토리의 복사조건 종료일자
+ * @return boolean result 복사가 성공함변 true, 실패하면 false를 리턴한다.
+ */
+ public static boolean copyDirectory(String originalDirPath, String targetDirPath, String fromDate, String toDate) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null
+ || toDate.equals("")) {
+ return false;
+ }
+ boolean result = false;
+ File f = null;
+
+ f = new File(EgovWebUtil.filePathBlackList(originalDirPath));
+ boolean isInCondition = false;
+ String lastModifyedDate = getLastModifiedDateFromFile(f);
+ if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) {
+ isInCondition = true;
+ }
+
+ // 원본이 유효하고 조건에 부합되야 진행한다.
+ if (f.exists() && f.isDirectory() && isInCondition) {
+
+ //타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함.
+ String targetDirPath1 = createNewDirectory(targetDirPath);
+ if (targetDirPath1.equals("")) {
+ result = false;
+ } else {
+ File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath1));
+ //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(targetDir.mkdirs()){
+ LOGGER.debug("[file.mkdirs] targetDir : Directory Creation Success");
+ }else{
+ LOGGER.error("[file.mkdirs] targetDir : Directory Creation Fail");
+ }
+
+ // 디렉토리에 속한 파일들을 복사한다.
+ String[] originalFileList = f.list();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (originalFileList != null) {
+ if (originalFileList.length > 0) {
+ for (int i = 0; i < originalFileList.length; i++) {
+ File subF = new File(EgovWebUtil.filePathBlackList(originalDirPath) + FILE_SEPARATOR + originalFileList[i]);
+ if (subF.isFile()) {
+ //하위목록이 파일이면 파일복사실행 -> 실패 발생하는 경우 복사를 중단한다.
+ result = copyFile(originalDirPath + FILE_SEPARATOR + originalFileList[i], targetDir.getAbsolutePath() + FILE_SEPARATOR + originalFileList[i]);
+ } else {
+ //하위목록이 디렉토리이면 복사를 재귀적으로 호출한다.
+ //하위목록에 해당하는 폴더에 대해서는 생성일자 검사를 하지 않는다.(현재 폴더가 복사대상이면 현재폴더의 하위는 제외없이 복사함)
+ result = copyDirectory(originalDirPath + "/" + originalFileList[i], targetDirPath1 + "/" + originalFileList[i]);
+ }
+ }
+ } else {
+ result = true;
+ }
+ }
+ }
+
+ } else {
+ // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료
+ result = false;
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 복사한다. (생성자 조건으로복사)
+ * </pre>
+ *
+ * @param String originalDirPath 원본 디렉토리 의 절대경로
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @param String owner 디렉토리의 복사조건생성자
+ * @return boolean result 복사가 성공함변 true, 실패하면 false를 리턴한다.
+ */
+ public static boolean copyDirectory(String originalDirPath, String targetDirPath, String owner) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || owner == null || owner.equals("")) {
+ return false;
+ }
+ boolean result = false;
+ File f = null;
+
+ f = new File(EgovWebUtil.filePathBlackList(originalDirPath));
+ boolean isInCondition = false;
+ String realOwner = getOwner(originalDirPath);
+ if (realOwner.equals(owner)) {
+ isInCondition = true;
+ }
+
+ // 원본이 유효하고 조건에 부합되야 진행한다.
+ if (f.exists() && f.isDirectory() && isInCondition) {
+
+ String targetDirPath1 = createNewDirectory(targetDirPath);
+ if (targetDirPath1.equals("")) {
+ //타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함.
+ result = false;
+ } else {
+ File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath1));
+
+ //2017.02.08 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(targetDir.mkdirs()){
+ LOGGER.debug("[file.mkdirs] targetDir : Directory Creation Success");
+ }else{
+ LOGGER.error("[file.mkdirs] targetDir : Directory Creation Fail");
+ }
+
+ // 디렉토리에 속한 파일들을 복사한다.
+ String[] originalFileList = f.list();
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (originalFileList != null) {
+ if (originalFileList.length > 0) {
+ for (int i = 0; i < originalFileList.length; i++) {
+ File subF = new File(EgovWebUtil.filePathBlackList(originalDirPath) + FILE_SEPARATOR + originalFileList[i]);
+ if (subF.isFile()) {
+ //하위목록이 파일이면 파일복사실행 -> 실패 발생하는 경우 복사를 중단한다.
+ result = copyFile(originalDirPath + FILE_SEPARATOR + originalFileList[i], targetDir.getAbsolutePath() + FILE_SEPARATOR + originalFileList[i]);
+ } else {
+ //하위목록이 디렉토리이면 복사를 재귀적으로 호출한다.
+ //하위목록에 해당하는 폴더에 대해서는 생성일자 검사를 하지 않는다.(현재 폴더가 복사대상이면 현재폴더의 하위는 제외없이 복사함)
+ result = copyDirectory(originalDirPath + "/" + originalFileList[i], targetDirPath1 + "/" + originalFileList[i]);
+ }
+ }
+ } else {
+ result = false;
+ }
+ }
+ }
+
+ } else {
+ // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료
+ result = false;
+ }
+
+ return result;
+ }
+
+ /**
+ * 디렉토리의 사이즈를 조회한다.
+ *
+ * @param String targetDirPath 디렉토리
+ * @return long size 디렉토리사이즈
+ * @exception Exception
+ */
+ public static long getDirectorySize(String targetDirPath) throws Exception {
+
+ File f = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ if (!f.exists()) {
+ return 0;
+ }
+ if (f.isFile()) {
+ return f.length();
+ }
+
+ File[] list = f.listFiles();
+ long size = 0;
+ long fileSize = 0;
+
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ if (list != null) {
+ for (int i = 0; i < list.length; i++) {
+
+ if (list[i].isDirectory()) {
+ // 디렉토리 안에 디렉토리면 그 안의 파일목록에서 찾도록 재귀호출한다.
+ fileSize = getDirectorySize(list[i].getAbsolutePath());
+ } else {
+ // 파일의 사이즈 조회
+ fileSize = list[i].length();
+ }
+ size = size + fileSize;
+ }
+ }
+ return size;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 이동한다.
+ * </pre>
+ *
+ * @param String originalDirPath 원본 디렉토리 의 절대경로
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @return boolean result 이동이 성공하면 true, 실패하면 false를 리턴한다.
+ */
+ public static boolean moveFile(String originalDirPath, String targetDirPath) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("")) {
+ return false;
+ }
+ boolean result = false;
+ File f = null;
+ BufferedReader b_err = null;
+ BufferedReader b_out = null;
+ try {
+ f = new File(EgovWebUtil.filePathBlackList(originalDirPath));
+ // 원본은 유효하고 대상이 신규로 생성가능한 상태인경우만 진행한다.
+ //if(f.exists() && f.isDirectory() ){ // 디렉토리만 이동할수 있도록 제한하는 경우
+ if (f.exists()) {
+ // 타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함.
+ File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ if (targetDir.exists()) {
+ // 타겟경로가 이미 있는 경우는 종료
+ result = false;
+ } else {
+ // 새로 생성되는 경우만 진행한다. (이동쉘을 실행시킨다.)
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".moveDrctry"));
+ String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR),
+ EgovWebUtil.filePathBlackList(originalDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)),
+ EgovWebUtil.filePathBlackList(targetDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)) };
+ Process p = Runtime.getRuntime().exec(command);
+ //String access = "";
+ p.waitFor();
+ //프로세스 에러시 종료
+ if (p != null && p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ b_err.close();
+ }
+ //프로세스 실행 성공시 결과 확인
+ else {
+ result = true;
+ }
+ }
+
+ } else {
+ // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료
+ result = false;
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err, b_out);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 이동한다. (생성일자 조건으로 이동)
+ * </pre>
+ *
+ * @param String originalDirPath 원본 디렉토리 의 절대경로
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @param fromDate 디렉토리의이동조건 시작일자
+ * @param toDate 디렉토리의 이동조건 종료일자
+ * @return boolean result 이동이 성공하면 true, 실패하면 false를 리턴한다.
+ */
+ public static boolean moveFile(String originalDirPath, String targetDirPath, String fromDate, String toDate) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || fromDate == null || fromDate.equals("") || toDate == null
+ || toDate.equals("")) {
+ return false;
+ }
+ boolean result = false;
+ File f = null;
+ BufferedReader b_err = null;
+ BufferedReader b_out = null;
+ try {
+ f = new File(originalDirPath);
+ // 원본은 유효하고 대상이 신규로 생성가능한 상태인경우만 진행한다.
+ //if(f.exists() && f.isDirectory() ){ // 디렉토리만 이동할수 있도록 제한하는 경우
+ if (f.exists()) {
+ // 타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함.
+ File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ if (targetDir.exists()) {
+ // 타겟경로가 이미 있는 경우는 종료
+ result = false;
+ } else {
+ // 새로 생성되는 경우만 진행한다. (이동쉘을 실행시킨다.)
+ boolean isInCondition = false;
+ String lastModifyedDate = getLastModifiedDateFromFile(f);
+ if (Integer.parseInt(lastModifyedDate) >= Integer.parseInt(fromDate) && Integer.parseInt(lastModifyedDate) <= Integer.parseInt(toDate)) {
+ isInCondition = true;
+ }
+
+ if (isInCondition) {
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".moveDrctry"));
+ String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR),
+ EgovWebUtil.filePathBlackList(originalDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)),
+ EgovWebUtil.filePathBlackList(targetDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)) };
+ Process p = Runtime.getRuntime().exec(command);
+ String access = "";
+ p.waitFor();
+ //프로세스 에러시 종료
+ if (p != null && p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ }
+ //프로세스 실행 성공시 결과 확인
+ else {
+ result = false;
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (b_out.ready()) {
+ if (!result) { // result != true
+ access = b_out.readLine();
+ if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) {
+ result = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ } else {
+ // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료
+ result = false;
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err, b_out);;
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리를 이동한다. (생성자 조건으로 이동)
+ * </pre>
+ *
+ * @param String originalDirPath 원본 디렉토리 의 절대경로
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @param String owner 디렉토리의 이동조건생성자
+ * @return boolean result 이동이 성공하면 true, 실패하면 false를 리턴한다.
+ */
+ public static boolean moveFile(String originalDirPath, String targetDirPath, String owner) throws Exception {
+
+ // 인자값 유효하지 않은 경우 공백 리턴
+ if (originalDirPath == null || originalDirPath.equals("") || targetDirPath == null || targetDirPath.equals("") || owner == null || owner.equals("")) {
+ return false;
+ }
+ //log.debug("originalDirPath:"+originalDirPath);
+ //log.debug("targetDirPath:"+targetDirPath);
+ boolean result = false;
+ File f = null;
+ BufferedReader b_err = null;
+ BufferedReader b_out = null;
+ try {
+ f = new File(originalDirPath);
+ // 원본은 유효하고 대상이 신규로 생성가능한 상태인경우만 진행한다.
+ //if(f.exists() && f.isDirectory() ){ // 디렉토리만 이동할수 있도록 제한하는 경우
+ if (f.exists()) {
+ // 타겟으로 설정한 경로가 유효한지 확인(중간경로에 파일명 이 포함되어있으면 유효하지 못하므로 진행안함.
+ File targetDir = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ if (targetDir.exists()) {
+ // 타겟경로가 이미 있는 경우는 종료
+ result = false;
+ } else {
+ // 새로 생성되는 경우만 진행한다. (이동쉘을 실행시킨다.)
+ boolean isInCondition = false;
+ String realOwner = getOwner(originalDirPath);
+ if (realOwner.equals(owner)) {
+ isInCondition = true;
+ }
+
+ if (isInCondition) {
+ //KISA 보안약점 조치 (2018-10-29, 윤창원)
+ String cmdStr = EgovStringUtil.isNullToString(EgovProperties.getProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".moveDrctry"));
+ String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR),
+ EgovWebUtil.filePathBlackList(originalDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)),
+ EgovWebUtil.filePathBlackList(targetDirPath.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR)) };
+ Process p = Runtime.getRuntime().exec(command);
+ String access = "";
+ p.waitFor();
+ //프로세스 에러시 종료
+ if (p != null && p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ }
+ //프로세스 실행 성공시 결과 확인
+ else if (p != null){
+ result = false;
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (b_out.ready()) {
+
+ if (!result) { //result != true
+ access = b_out.readLine();
+ if (access != null && !"".equals(access) && access.length() <= MAX_STR_LEN) {
+ result = true;
+ if (result) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } else {
+ // 원본자체가 유효하지 않은 경우는 false 리턴하고 종료
+ result = false;
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err, b_out);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리감시를 시작한다. 모니터링 시작시 해당 디렉토리의 이름으로 생성된 로그파일에 START기입하고 종료시END기입한다.
+ * (로그파일이 이미 존재하는 경우는 모니터링이 현재 진행중인 상태이므로 새로 감시기능을 시작하지 않는다.)
+ * </pre>
+ *
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @param String logFile 모니터링정보를 보관할 로그파일경로
+ * @param String eventPrg 이벤트 발생시 동작할 프로그램
+ * @return boolean result 모니터링 시작 여부를 리턴한다. (모니터링 시작했으면 true, 모니터링이 시작되지 않았으면 false)
+ */
+ public static boolean startDirectoryMonitering(String targetDirPath) throws Exception {
+
+ // 인자값 유효하지 않은 경우 false 리턴
+ if (targetDirPath == null || targetDirPath.equals("")) {
+ return false;
+ }
+
+ boolean result = false;
+ FileReader fr = null;
+ BufferedReader br = null;
+ try {
+ // 로그파일을 생성한다. 만약 로그파일이 존재하면 이미 감시 프로세스가 동작중이므로 새로 시작하지 않는다.
+
+ File targetF = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ File logF = new File(EgovWebUtil.filePathBlackList(Globals.CONF_PATH) + "/" + targetF.getName() + ".log");
+
+ if (targetF.exists() && targetF.isDirectory()) {
+
+ if (logF.exists()) {
+ // 이미 감시 프로세스 동작중임
+ result = true;
+ //로그파일에서 중단여부 확인하여 중단된 상태이면 재실행함
+ String lastStr = "";
+ fr = new FileReader(logF);
+ br = new BufferedReader(fr);
+ //int ch = 0;
+ String line = "";
+ while ((line = br.readLine()) != null) {
+ if (line.length() < MAX_STR_LEN)
+ lastStr = line;
+ }
+ //log.debug("lastStr:"+lastStr);
+ if (lastStr.equals("END")) {
+ EgovFileMntrg t = new EgovFileMntrg(EgovWebUtil.filePathBlackList(targetDirPath), logF);
+ t.start();
+ }
+ } else {
+ result = logF.createNewFile();
+ EgovFileMntrg t = new EgovFileMntrg(targetDirPath, logF);
+ t.start();
+ }
+ }
+ } finally {
+ EgovResourceCloseHelper.close(fr, br);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리감시를 종료한다. 모니터링 시작시 해당 디렉토리의 이름으로 생성된 로그파일에 START기입하고 종료시END기입한다.
+ * (로그파일이 존재하지 않는 경우는 모니터링이 아직 시작되지 않은 상태이므로별도로 종료하지 않는다.)
+ * </pre>
+ *
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @param String logFile 모니터링정보를 보관할 로그파일경로(감시프로세스 확인의 키값으로 사용된다)
+ * @return boolean result 모니터링 시작 여부를 리턴한다. (모니터링 시작했으면 true, 모니터링이 시작되지 않았으면 false)
+ */
+ public static boolean stopDirectoryMonitering(String targetDirPath) throws Exception {
+
+ // 인자값 유효하지 않은 경우 false 리턴
+ if (targetDirPath == null || targetDirPath.equals("")) {
+ return false;
+ }
+
+ boolean result = false;
+ FileReader fr = null;
+ BufferedReader br = null;
+ FileWriter fWriter = null;
+ BufferedWriter bWriter = null;
+ try {
+ File targetF = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ File logF = new File(EgovWebUtil.filePathBlackList(Globals.CONF_PATH) + "/" + targetF.getName() + ".log");
+ if (logF.exists()) {
+
+ //로그파일 최종라인 확인 : END 여부 확인
+ String lastStr = "";
+ fr = new FileReader(logF);
+ br = new BufferedReader(fr);
+ //int ch = 0;
+ String line = "";
+ while ((line = br.readLine()) != null) {
+ if (line.length() < MAX_STR_LEN)
+ lastStr = line;
+ }
+ br.close();
+
+ // if(lastStr.equals("END")){
+ // // 로그파일이 존재하고 이미 종료요청이 된 상태이므로 작업없음
+ // //log.debug("Already Ending Requested Status");
+ // }else{
+ if (!lastStr.equals("END")) {
+ fWriter = new FileWriter(logF, true);
+ bWriter = new BufferedWriter(fWriter);
+ br = new BufferedReader(new StringReader("END"));
+ while ((line = br.readLine()) != null && !lastStr.equals("END")) {
+ if (line.length() < MAX_STR_LEN) {
+ bWriter.write(line + "\n", 0, line.length() + 1);
+ }
+ }
+ }
+ result = true;
+ } else {
+ result = false;
+ }
+
+ } finally {
+ EgovResourceCloseHelper.close(fr, br, fWriter, bWriter);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리감시정보를 로그파일로부터 읽어온다.
+ * </pre>
+ *
+ * @param String targetDirPath 타겟 디렉토리 의 절대경로
+ * @param String logFile 모니터링정보를 보관하는 로그파일경로
+ * @return ArrayList result 로그파일의 정보를 라인단위로 담아서 리턴한다.
+ */
+ public static StringBuffer getDirectoryMoniteringInfo(String targetDirPath) throws Exception {
+
+ // 인자값 유효하지 않은 경우 빈 ArrayList 리턴
+ if (targetDirPath == null || targetDirPath.equals("")) {
+ return new StringBuffer();
+ }
+
+ StringBuffer result = new StringBuffer();
+ FileReader fr = null;
+ try {
+ File targetF = new File(EgovWebUtil.filePathBlackList(targetDirPath));
+ File logF = new File(EgovWebUtil.filePathBlackList(Globals.CONF_PATH) + "/" + targetF.getName() + ".log");
+ if (!logF.exists()) {
+ result = new StringBuffer();
+ }
+ fr = new FileReader(logF);
+ int ch = 0;
+ while ((ch = fr.read()) != -1) {
+ result.append((char) ch);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(fr);
+ }
+
+ return result;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileTool.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetworkState.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetworkState.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetworkState.java (revision 7)
@@ -0,0 +1,294 @@
+/**
+ * Class Name : EgovNetworkState.java
+ * Description : 네트워크(Network)상태 체크 Business Interface class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.02 이 용 최초 생성
+ *
+ * @author 공통 서비스 개발팀 이 용
+ * @since 2009. 02. 02
+ * @version 1.0
+ * @see
+ * The type com.sun.star.lang.XeventListener cannot be resolved. It is indirectly referenced from required .class files
+ * Copyright (C) 2009 by EGOV All right reserved.
+ */
+
+package egovframework.com.utl.sim.service;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.List;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.service.Globals;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+/**
+ * EgovNetworkState 클래스를 정의한다.
+ *
+ * @author 김진만
+ * @see
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2020.12.07 신용호 KISA 보안약점 조치
+ *
+ * </pre>
+ */
+
+public class EgovNetworkState {
+ public static String addrIP = "";
+ static final char FILE_SEPARATOR = File.separatorChar;
+ // 최대 문자길이
+ static final int MAX_STR_LEN = 1024;
+
+ public static final int BUFF_SIZE = 2048;
+ // Log
+ // protected static final Log log = LogFactory.getLog(EgovNetworkState.class);
+
+ /**
+ * <pre>
+ * Comment : Local MAC Address를 확인한다.
+ * </pre>
+ * @param String localIP 로컬 IP주소
+ * @return String mac MAC Address를 리턴한다.
+ * @version 1.0 (2009.02.03.)
+ * @see
+ */
+ public static String getMyMACAddress(String localIP) {
+ //log.debug("getMyMACAddress Start!! : ");
+ String mac = null;
+ try {
+ if ("WINDOWS".equals(Globals.OS_TYPE)) {
+ // 2020-12-07 KISA 보안코드 검증 조치
+ if (!EgovWebUtil.isIPAddress(localIP))
+ throw new SecurityException("IP Address is Not Valid~~~!");
+
+ Process p = null;
+ Runtime rt = Runtime.getRuntime();
+ String[] execStr = { "nbtstat", "-A", localIP };
+ p = rt.exec(execStr); // 여기다 아이피 주소 넣주세여
+
+ InputStream in = p.getInputStream();
+ String out = null;
+ int c;
+ while ((c = in.read()) != -1) {
+ out = out + new String(new Character((char) c).toString());
+ }
+ in.close();
+ if (out == null || out.indexOf("MAC Address = ") == -1) {
+ throw new IllegalArgumentException("String Split Error!");
+ }
+ mac = out.substring(out.indexOf("MAC Address = ") + 14, out.indexOf("MAC Address = ") + 31);
+
+ } else if ("UNIX".equals(Globals.OS_TYPE)) {
+ //log.debug("getMyMACAddress IP : " + localIP);
+ mac = getNetWorkInfo("MAC");
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return mac;
+ }
+
+ /**
+ * <pre>
+ * Comment : Local Port를 확인한다.
+ * </pre>
+
+ * @return String port port를 리턴한다.
+ * @version 1.0 (2009.02.03.)
+ * @see
+ */
+ public static List<String> getMyPortScan() {
+
+ List<String> processes = new ArrayList<String>();
+ BufferedReader input = null;
+
+ try {
+
+ Process p = null;
+ Runtime rt = Runtime.getRuntime();
+ if ("WINDOWS".equals(Globals.OS_TYPE)) {
+ String[] execStr = { "netstat", "-an" };
+ p = rt.exec(execStr);
+ input = new BufferedReader(new InputStreamReader(p.getInputStream()));
+
+ while (true) {
+ String str = input.readLine();
+ if (str == null)
+ break;
+ if (str.length() >= MAX_STR_LEN) {
+ throw new RuntimeException("input too long");
+ }
+ if (!str.trim().equals("")) {
+ processes.add(str);
+ }
+ }
+ } else if ("UNIX".equals(Globals.OS_TYPE)) {
+ String cmdStr = EgovProperties.getPathProperty(Globals.SERVER_CONF_PATH, "SHELL." + Globals.OS_TYPE + ".getNetWorkInfo");
+ String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), "SCAN" };
+ p = Runtime.getRuntime().exec(command);
+ p = rt.exec(command);
+
+ input = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (true) {
+ String str = input.readLine();
+ if (str == null)
+ break;
+ if (str.length() >= MAX_STR_LEN) {
+ throw new RuntimeException("input too long");
+ }
+ if (!str.trim().equals("")) {
+ processes.add(str);
+ }
+ }
+ //log.debug("getMyPortScan 6");
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("IO Exception", e);
+ } finally {
+ EgovResourceCloseHelper.close(input);
+ }
+
+ return processes;
+ }
+
+ /**
+ * <pre>
+ * Comment : Local IPAddress를 확인한다.
+ * </pre>
+ * @return String mac Local IPAddress를 리턴한다.
+ * @version 1.0 (2009.02.03.)
+ * @see
+ */
+ public static String getMyIPaddress() {
+ try {
+
+ if (!EgovWebUtil.isIPAddress(InetAddress.getLocalHost().getHostAddress())) {
+ throw new RuntimeException("IP is needed. (" + InetAddress.getLocalHost().getHostAddress() + ")");
+ }
+
+ InetAddress InetA = InetAddress.getLocalHost();
+ addrIP = InetA.getHostAddress();
+
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+
+ return addrIP;
+ }
+
+ /**
+ * <pre>
+ * Comment : 네트워크 상태체크를 확인한다.
+ * </pre>
+ * @param String localIP localhost, gateway, host 주소
+ * @return boolean status true/false 를 리턴한다.
+ * @version 1.0 (2009.02.03.)
+ * @see
+ */
+ public static boolean getPingTest(String requestIP) throws Exception {
+
+ boolean status = false;
+
+ if (!EgovWebUtil.isIPAddress(requestIP)) {
+ throw new RuntimeException("IP is needed. (" + requestIP + ")");
+ }
+
+ status = InetAddress.getByName(requestIP).isReachable(3000);
+
+ return status;
+ }
+
+ /**
+ * <pre>
+ * Comment : 네트워크(MAC,IP,S/M,G/W,DNS) 정보를 확인한다.
+ * </pre>
+ * @param String stringOne 확인할 네트웍 정보 표기 ( ex:"MAC","IP","S/M","G/W","DNS")
+ * @return String (MAC,IP,S/M,G/W,DNS) 정보를 리턴한다.
+ * @version 1.0 (2009.02.07.)
+ * @see
+ */
+ public static String getNetWorkInfo(String stringOne) throws IOException {
+ // 실행할 명령을 프로퍼티 파일에서 확인한다.
+ Process p = null;
+
+ BufferedReader b_out = null;
+
+ String tmp = "";
+ String outValue = "";
+ try {
+ String cmdStr = EgovProperties.getPathProperty(Globals.SERVER_CONF_PATH, "SHELL." + Globals.OS_TYPE + ".getNetWorkInfo");
+ String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), stringOne };
+ p = Runtime.getRuntime().exec(command);
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ while (true) {
+ tmp = b_out.readLine();
+ if (tmp == null)
+ break;
+ if (tmp.length() >= MAX_STR_LEN) {
+ throw new IllegalArgumentException("input too long");
+ }
+ // netstat -v ent0 | grep "하드웨어 주소" -MAC
+ // prtconf | grep "IP 주소" -IP
+ // prtconf | grep "서브넷 마스크" -SM
+ // prtconf | grep "게이트웨이" -GW
+ if ("MAC".equals(stringOne)) {
+ outValue = getCharFilter(tmp);
+ } else if ("IP".equals(stringOne)) {
+ outValue = getCharFilter(tmp);
+ } else if ("SM".equals(stringOne)) {
+ outValue = getCharFilter(tmp);
+ } else if ("GW".equals(stringOne)) {
+ outValue = getCharFilter(tmp);
+ } else if ("DNS".equals(stringOne)) {
+ //tmp = "was은(는) 192.168.200.21입니다";
+ outValue = getCharFilter(tmp);
+ } else {
+ outValue = "데이타가 존재하지 않습니다.";
+ }
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_out);
+
+ if (p != null) {
+ p.destroy();
+ }
+ }
+ return outValue;
+ }
+
+ /**
+ * <pre>
+ * Comment : String 타입의 str값 중 숫자 정보만 필터링, 담아서 리턴.
+ * </pre>
+ * @param String str 필터링 대상 정보
+ * @return String outValue 숫자 정보를 필터링 리턴한다.
+ * @version 1.0 (2009.02.07.)
+ * @see
+ */
+ private static String getCharFilter(String str) {
+ String outValue = "";
+
+ for (int i = 0; i < str.length(); i++) {
+ char c = str.charAt(i);
+
+ if (c > 45 && c < 59) {
+ Character cr = new Character(c);
+ outValue += cr.toString();
+ }
+ }
+ return outValue;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetworkState.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovXMLDoc.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovXMLDoc.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovXMLDoc.java (revision 7)
@@ -0,0 +1,337 @@
+/**
+ * Class Name : EgovXMLDoc.java
+ * Description : XML파일을 파싱하여 구조체 형태로 반환 또는 구조체 형태의 데이터를 XML파일로 저장하는 Business Interface class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.03 박지욱 최초 생성
+ *
+ * @author 공통 서비스 개발팀 박지욱
+ * @since 2009. 02. 03
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.service.Globals;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import noNamespace.SndngMailDocument;
+
+import org.apache.xmlbeans.XmlOptions;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+public class EgovXMLDoc {
+
+ // 파일구분자
+ static final char FILE_SEPARATOR = File.separatorChar;
+
+ // 최대 문자길이
+ static final int MAX_STR_LEN = 1024;
+
+ // Log
+ //protected static final Log log = LogFactory.getLog(EgovXMLDoc.class);
+ /**
+ * XML스키마를 자바클래스(임의)로 생성
+ * @param String xml XML스키마
+ * @param String ja 생성될JAR파일의 위치
+ * @return boolean result 생성여부 True/False
+ * @exception Exception
+ */
+ public static boolean creatSchemaToClass(String xml, String ja) throws Exception {
+
+ boolean result = false;
+
+ // 1. 스키마가 없으면 에러
+ String file = xml.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File xmlFile = new File(file);
+ if (!xmlFile.exists() || !xmlFile.isFile()) {
+ //log.debug("+++ 지정된 위치에 스키마 파일이 없습니다.");
+ return false;
+ }
+
+ // 2. 동일한 jar파일이 이미 존재하면 에러
+ String jar = ja.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File jarFile = new File(jar);
+ if (jarFile.exists()) {
+ //log.debug("+++ 동일한 JAR 파일이 존재합니다.");
+ return false;
+ }
+
+ // 3. scomp -src [소스생성위치] [xsd파일] : 입력받은 스키마를 컴파일하여 JAVA 소스파일로 생성
+ Process p = null;
+ BufferedReader b_err = null;
+ String cmdStr = EgovProperties.getPathProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".compileSchema");
+ String[] command = { cmdStr.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR), jar, file };
+
+ try {
+ p = Runtime.getRuntime().exec(command);
+ //프로세스가 처리될때까지 대기
+ p.waitFor();
+
+ //프로세스 에러시 종료
+ if (p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ //String line = b_err.readLine();
+ //if (line.length() <= MAX_STR_LEN) log.debug("ERR\n" + line);
+ }
+ b_err.close();
+ }
+ //프로세스 실행 성공시 결과 확인
+ else {
+ result = true;
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err);
+
+ if (p != null) {
+ p.destroy();
+ }
+ }
+ return result;
+ }
+
+ /**
+ * XML파일을 파싱하여 메일발송 클래스(임의)에 내용을 담아 반환
+ * @param String file XML파일
+ * @return SndngMailDocument mailDoc 메일발송 클래스(XML스키마를 통해 생성된 자바클래스)
+ * @exception Exception
+ */
+ public static SndngMailDocument getXMLToClass(String file) throws Exception {
+
+ File xmlFile = null;
+ FileInputStream fis = null;
+ SndngMailDocument mailDoc = null;
+ try {
+ String file1 = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ xmlFile = new File(EgovWebUtil.filePathBlackList(file1));
+ if (xmlFile.exists() && xmlFile.isFile()) {
+ fis = new FileInputStream(xmlFile);
+ mailDoc = SndngMailDocument.Factory.parse(xmlFile);
+
+ }
+ } finally {
+ EgovResourceCloseHelper.close(fis);
+ }
+
+ return mailDoc;
+ }
+
+ /**
+ * XML데이터를 XML파일로 저장
+ * @param UserinfoDocument userDoc 사용자 임의 클래스(XML스키마를 통해 생성된 자바클래스)
+ * @param String fiile 저장될 파일
+ * @return boolean 저장여부 True / False
+ * @exception Exception
+ */
+ public static boolean getClassToXML(SndngMailDocument mailDoc, String file) throws Exception {
+
+ boolean result = false;
+
+ FileOutputStream fos = null;
+
+ try {
+
+ String file1 = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ file1 = EgovFileTool.createNewFile(file1);
+ File xmlFile = new File(EgovWebUtil.filePathBlackList(file1));
+ fos = new FileOutputStream(xmlFile);
+
+ XmlOptions xmlOptions = new XmlOptions();
+ xmlOptions.setSavePrettyPrint();
+ xmlOptions.setSavePrettyPrintIndent(4);
+ xmlOptions.setCharacterEncoding("UTF-8");
+ String xmlStr = mailDoc.xmlText(xmlOptions);
+
+ fos.write(xmlStr.getBytes("UTF-8"));
+ result = true;
+
+ } finally {
+ EgovResourceCloseHelper.close(fos);
+ }
+
+ return result;
+ }
+
+ /**
+ * XML 파일을 파싱하여 데이터를 조작할 수 있는 Document 객체를 반환
+ * @param String file XML파일
+ * @return Document document 문서객체
+ * @exception Exception
+ */
+ public static Document getXMLDocument(String xml) throws Exception {
+
+ Document xmlDoc = null;
+
+ String file = xml.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(file);
+ FileInputStream fis = null;
+ try {
+ if (srcFile.exists() && srcFile.isFile()) {
+
+ fis = new FileInputStream(srcFile);
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = null;
+ factory.setValidating(true);
+ builder = factory.newDocumentBuilder();
+ xmlDoc = builder.parse(fis);
+ }
+ } finally {
+ EgovResourceCloseHelper.close(fis);
+ }
+
+ return xmlDoc;
+ }
+
+ /**
+ * Document의 최상의 Element로 이동
+ * @param Document document XML데이터
+ * @return Element root 루트
+ * @exception Exception
+ */
+ public static Element getRootElement(Document document) throws Exception {
+
+ Element root = document.getDocumentElement();
+ return root;
+ }
+
+ /**
+ * 하위에 새로운 Elemenet를 생성
+ * @param Document document XML데이터
+ * @prarm Element rt 추가될위치
+ * @param id 생성될 Element의 ID
+ * @return Element element 추가된 Element
+ * @exception Exception
+ */
+ public static Element insertElement(Document document, Element rt, String id) throws Exception {
+
+ Element child = null;
+ Element root = null;
+
+ if (rt == null) {
+ root = getRootElement(document);
+ } else {
+ root = rt;
+ }
+ child = document.createElement(id);
+ root.appendChild(child);
+
+ return child;
+ }
+
+ /**
+ * 하위에 문자열을 가지는 새로운 Elemenet를 생성
+ * @param Document document XML데이터
+ * @prarm Element rt 추가 위치
+ * @param id 생성될 Element의 ID
+ * @param text Element 하위에 들어갈 문자열
+ * @return Element element 추가된 Element
+ * @exception Exception
+ */
+ public static Element insertElement(Document document, Element rt, String id, String text) throws Exception {
+
+ Element echild = null;
+ Text tchild = null;
+ Element root = null;
+
+ if (rt == null) {
+ root = getRootElement(document);
+ } else {
+ root = rt;
+ }
+ echild = document.createElement(id);
+ root.appendChild(echild);
+ tchild = document.createTextNode(text);
+ echild.appendChild(tchild);
+
+ return echild;
+ }
+
+ /**
+ * 하위에 문자열을 추가
+ * @param Document document XML데이터
+ * @prarm Element rt 추가 위치
+ * @param id 생성될 Element의 ID
+ * @param text Element 하위에 들어갈 문자열
+ * @return Element element 추가된 Element
+ * @exception Exception
+ */
+ public static Text insertText(Document document, Element rt, String text) throws Exception {
+
+ Text tchild = null;
+ Element root = null;
+
+ if (rt == null) {
+ root = getRootElement(document);
+ } else {
+ root = rt;
+ }
+ tchild = document.createTextNode(text);
+ root.appendChild(tchild);
+
+ return tchild;
+ }
+
+ /**
+ * 마지막으로 입력되었거나 참조된 XML Node의 상위 Element를 리턴
+ * @prarm Element current 현재노드
+ * @return Element parent 상위노드
+ * @exception Exception
+ */
+ public static Element getParentNode(Element current) throws Exception {
+
+ Node parent = current.getParentNode();
+ return (Element) parent;
+ }
+
+ /**
+ * Document 객체를 XML파일로 저장
+ * @param Document document 문서객체
+ * @param String fiile 저장될 파일
+ * @return boolean 저장여부 True / False
+ * @exception Exception
+ */
+ public static boolean getXMLFile(Document document, String file) throws Exception {
+
+ boolean retVal = false;
+
+ String file1 = file.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(file1);
+ if (srcFile.exists() && srcFile.isFile()) {
+
+ Source source = new DOMSource(document);
+ Result result = new StreamResult(srcFile);
+ Transformer transformer = TransformerFactory.newInstance().newTransformer();
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformer.transform(source, result);
+ }
+
+ return retVal;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovXMLDoc.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovClntInfo.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovClntInfo.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovClntInfo.java (revision 7)
@@ -0,0 +1,122 @@
+/**
+ * Class Name : EgovClntInfo.java
+ * Description : 클라이언트(Client)의 IP주소, OS정보, 웹브라우저정보를 조회하는 Business Interface class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.01.19 박지욱 최초 생성
+ *
+ * @author 공통 서비스 개발팀 박지욱
+ * @since 2009. 01. 19
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.service.Globals;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class EgovClntInfo {
+
+ /**
+ * 클라이언트(Client)의 IP주소를 조회하는 기능
+ * @param HttpServletRequest request Request객체
+ * @return String ipAddr IP주소
+ * @exception Exception
+ */
+ public static String getClntIP(HttpServletRequest request) throws Exception {
+
+ // IP주소
+ String ipAddr = request.getRemoteAddr();
+ return ipAddr;
+ }
+
+ /**
+ * 클라이언트(Client)의 OS 정보를 조회하는 기능
+ * @param HttpServletRequest request Request객체
+ * @return String osInfo OS 정보
+ * @exception Exception
+ */
+ public static String getClntOsInfo(HttpServletRequest request) throws Exception {
+
+ String user_agent = request.getHeader("user-agent");
+ String os_info = user_agent.toUpperCase().split(";")[2].split("\\)")[0];
+ String os_conf = EgovProperties.getProperty(Globals.CLIENT_CONF_PATH, os_info.replaceAll(" ", ""));
+ String osInfo = "";
+ if (os_conf != null && !"".equals(os_conf)) {
+ osInfo = os_conf;
+ } else {
+ osInfo = os_info;
+ }
+ return osInfo;
+ }
+
+ /**
+ * 클라이언트(Client)의 웹브라우저 종류를 조회하는 기능
+ * @param HttpServletRequest request Request객체
+ * @return String webKind 웹브라우저 종류
+ * @exception Exception
+ */
+ public static String getClntWebKind(HttpServletRequest request) throws Exception {
+
+ String user_agent = request.getHeader("user-agent");
+
+ // 웹브라우저 종류 조회
+ String webKind = "";
+ if (user_agent.toUpperCase().indexOf("GECKO") != -1) {
+ if (user_agent.toUpperCase().indexOf("NESCAPE") != -1) {
+ webKind = "Netscape (Gecko/Netscape)";
+ } else if (user_agent.toUpperCase().indexOf("FIREFOX") != -1) {
+ webKind = "Mozilla Firefox (Gecko/Firefox)";
+ } else {
+ webKind = "Mozilla (Gecko/Mozilla)";
+ }
+ } else if (user_agent.toUpperCase().indexOf("MSIE") != -1) {
+ if (user_agent.toUpperCase().indexOf("OPERA") != -1) {
+ webKind = "Opera (MSIE/Opera/Compatible)";
+ } else {
+ webKind = "Internet Explorer (MSIE/Compatible)";
+ }
+ } else if (user_agent.toUpperCase().indexOf("SAFARI") != -1) {
+ if (user_agent.toUpperCase().indexOf("CHROME") != -1) {
+ webKind = "Google Chrome";
+ } else {
+ webKind = "Safari";
+ }
+ } else if (user_agent.toUpperCase().indexOf("THUNDERBIRD") != -1) {
+ webKind = "Thunderbird";
+ } else {
+ webKind = "Other Web Browsers";
+ }
+ return webKind;
+ }
+
+ /**
+ * 클라이언트(Client)의 웹브라우저 버전을 조회하는 기능
+ * @param HttpServletRequest request Request객체
+ * @return String webVer 웹브라우저 버전
+ * @exception Exception
+ */
+ public static String getClntWebVer(HttpServletRequest request) throws Exception {
+
+ String user_agent = request.getHeader("user-agent");
+
+ // 웹브라우저 버전 조회
+ String webVer = "";
+ String [] arr = {"MSIE", "OPERA", "NETSCAPE", "FIREFOX", "SAFARI"};
+ for (int i = 0; i < arr.length; i++) {
+ int s_loc = user_agent.toUpperCase().indexOf(arr[i]);
+ if (s_loc != -1) {
+ int f_loc = s_loc + arr[i].length();
+ webVer = user_agent.toUpperCase().substring(f_loc, f_loc+5);
+ webVer = webVer.replaceAll("/", "").replaceAll(";", "").replaceAll("^", "").replaceAll(",", "").replaceAll("//.", "");
+ }
+ }
+ return webVer;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovClntInfo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovMenuGov.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovMenuGov.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovMenuGov.java (revision 7)
@@ -0,0 +1,92 @@
+/**
+ * Class Name : EgovMenuGov.java
+ * Description : 메뉴관리 Business Interface class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.02 이 용 최초 생성
+ *
+ * @author 공통 서비스 개발팀 이 용
+ * @since 2009. 02. 02
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by EGOV All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.util.List;
+import java.util.Vector;
+
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+public class EgovMenuGov {
+
+ // 파일구분자
+ static final char FILE_SEPARATOR = File.separatorChar;
+
+ /**
+ * <pre>
+ * Comment : DAT 파일을 파싱하여 메뉴관리화면에 리턴.
+ * </pre>
+ * @param String parFile DAT파일명
+ * @param String parChar 구분자
+ * @param Int parField 필드수
+ * @return Vector list
+ * @version 1.0 (2009.02.04.)
+ * @see
+ */
+ public static Vector<List<String>> parsFileByMenuChar(String parFile, String parChar, int parField) throws Exception {
+ Vector<List<String>> list = null;
+ String FileName = null;
+
+ FileName = parFile.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file = new File(FileName);
+
+ // 파일이며, 존재하면 파싱 시작
+ if (file.exists() && file.isFile()) {
+ list = EgovFileTool.parsFileByChar(parFile, parChar, parField);
+ } else {
+ list = new Vector<List<String>>();
+ }
+
+ return list;
+ }
+
+ /**
+ * <pre>
+ * Comment : 메뉴관리 화면의 데이타를 DAT 파일로 생성.
+ * </pre>
+ * @param String[] menuIDArray ID Array
+ * @param String[] menuNameArray Name Array
+ * @param String[] menuLevelArray Lefel Array
+ * @param String[] menuURLArray URL Array
+ * @return boolean true/false
+ * @version 1.0 (2009.02.04.)
+ * @see
+ */
+
+ public static boolean setDataByDATFile(String parFile, String[] menuIDArray, String[] menuNameArray, String[] menuLevelArray, String[] menuURLArray) throws Exception {
+ boolean success = false;
+ String FileName = null;
+
+ FileName = parFile.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File file = new File(FileName);
+ BufferedWriter out = new BufferedWriter(new FileWriter(file));
+ try {
+
+ for (int i = 0; i < menuIDArray.length; i++) { //nodeId | parentNodeId | nodeName | nodeUrl
+ out.write(menuIDArray[i] + "|" + menuLevelArray[i] + "|" + menuNameArray[i] + "|" + menuURLArray[i] + "|");
+ out.newLine();
+ }
+ success = true;
+ } finally {
+ EgovResourceCloseHelper.close(out);
+ }
+ return success;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovMenuGov.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileMntrg.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileMntrg.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileMntrg.java (revision 7)
@@ -0,0 +1,335 @@
+/**
+ * Class Name : EgovFileMntrg.java
+ * Description : 시스템 네트워크 정보를 확인하여 제공하는 Business class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.01.13 조재영 최초 생성
+ * 2017.03.06 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ *
+ * @author 공통 서비스 개발팀 조재영
+ * @since 2009. 01. 13
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by EGOV All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import egovframework.com.cmm.util.EgovBasicLogger;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+public class EgovFileMntrg extends Thread {
+
+ /**
+ * <p>
+ * 해당 파일의 변경 유무를 체크하기 위한 Default 초의 stati final 변수, 기본 적용은 값은 60초
+ * </p>
+ */
+ //static final public long DEFAULT_DELAY = 60000; // 60초
+ static final public long DEFAULT_DELAY = 30000; // 30초
+
+ /**
+ * 최대 문자길이
+ **/
+ static final int MAX_STR_LEN = 1024;
+
+ /**
+ * <p>
+ * 파일의 변경 유무를 체크하기 위한 해당파일명 변수
+ * </p>
+ */
+ protected String filename;
+
+ /**
+ * <p>
+ * 해당 파일의 변경 유무를 체크하기 위한 Default 초의 stati final 변수, 기본 적용은 값은 60초{@link
+ * #DEFAULT_DELAY}.
+ * </p>
+ */
+ protected long delay = DEFAULT_DELAY;
+
+ File file; // 타겟(감시대상) 디렉토리
+ File logFile; // 감시정보보관용 로그파일
+ long lastModif = 0;
+ boolean warnedAlready = false;
+ boolean interrupted = false;
+ List<String> realOriginalList = new ArrayList<String>(); // 최초의 원본리스트
+ List<String> originalList = new ArrayList<String>(); // 직전리스트는 주기적으로 직전목록정보로 갱신된다.
+ List<String> currentList = new ArrayList<String>(); // 직전리스트와 비교할 현시점 리스트
+ List<String> changedList = new ArrayList<String>(); // 직전리스트와 비교한 시점에 발생된 변경리스트
+ List<String> totalChangedList = new ArrayList<String>(); // 최초리스트와 비교한 변경 리스트
+ // totalChangedList는 필요시 checkAndConfigure함수 내에서 주석해제후 사용(부하량을 고려하여 사용)
+ int cnt = 0;
+
+ /**
+ * <p>
+ * 감시 하고자 하는 파일명을 파라메타로 받는 기본 컨스트럭터(Constructor).
+ * </p>
+ *
+ * @param filename
+ */
+ protected EgovFileMntrg(String filename, File logFile) {
+ //log.debug("EgovFileMntrg start");
+ this.logFile = logFile;
+ this.filename = filename;
+ file = new File(filename);
+ // 1. 최초생성시 현재 디렉토리의 하위정보를 ArrayList에 보관한다. 보관정보 ==> 절대경로 + "," + 최종수정일시 + "," + 사이즈
+ File[] fList = file.listFiles();
+ //2017.03.06 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ if(fList == null){
+ fList = new File[0];
+ }
+ for (int i = 0; i < fList.length; i++) {
+ realOriginalList.add(fList[i].getAbsolutePath() + "$" + getLastModifiedTime(fList[i]) + "$" + ((fList[i].length() / 1024) > 0 ? (fList[i].length() / 1024) : 1) + "KB");
+ writeLog("ORI_" + fList[i].getAbsolutePath() + "$" + getLastModifiedTime(fList[i]) + "$" + ((fList[i].length() / 1024) > 0 ? (fList[i].length() / 1024) : 1) + "KB");
+ }
+
+ originalList = new ArrayList<String>(realOriginalList);
+ writeLog("START");
+ setDaemon(true);
+ checkAndConfigure();
+ //log.debug("EgovFileMntrg end");
+ }
+
+ /**
+ * <p>
+ * 감시 하고자 하는 파일의 변경 유무를 체크 하고자 하는 delay 초를 set.
+ * </p>
+ *
+ * @param delay 감시 주기 초
+ */
+ public void setDelay(long delay) {
+ this.delay = delay;
+ }
+
+ /**
+ * <p>
+ * 해당 파일의 변경시 작업 할 내용을 기술 할 추상(abstract) 메소드
+ * </p>
+ */
+ //abstract protected void doOnChange();
+ protected void doOnChange(List<String> changedList) {
+ //log.debug("doOnChange() start");
+ for (int i = 0; i < changedList.size(); i++) {
+ writeLog((String) changedList.get(i));
+ }
+ changedList.clear(); //직전리스트와 비교해서 변경된 내역은 로그처리한 후 초기화한다.
+ originalList = new ArrayList<String>(currentList); //현재리스트가 직전리스트가 된다.(새로 생성해야 함!)
+ cnt++;
+
+ //log.debug("doOnChange() end");
+ }
+
+ /**
+ * <p>
+ * 파일의 변경 유무를 체크하는 메소드
+ * </p>
+ */
+ protected void checkAndConfigure() {
+ //log.debug("checkAndConfigure start");
+ try {
+ currentList.clear();
+ file = new File(filename);
+ // 현재정보를 ArrayList에 담는다.
+ File[] fList = file.listFiles();
+ //2017.03.06 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ if(fList == null){
+ fList = new File[0];
+ }
+
+ for (int i = 0; i < fList.length; i++) {
+ currentList.add(fList[i].getAbsolutePath() + "$" + getLastModifiedTime(fList[i]) + "$" + ((fList[i].length() / 1024) > 0 ? (fList[i].length() / 1024) : 1) + "KB");
+ }
+ /*
+ for(int i = 0; i<originalList.size(); i++ ){
+ //log.debug("in checkAndConfigure() ::: originalList:" + originalList.get(i));
+ }
+ for(int i = 0; i<currentList.size(); i++ ){
+ //log.debug("in checkAndConfigure() ::: currentList:" + currentList.get(i));
+ }
+ */
+ boolean isSame = false;
+ boolean isNew = true;
+ boolean isDel = true;
+ String str1 = "";
+ String str2 = "";
+ //int tmpCnt = 0;
+
+ // 현재하위디렉토리정보와 초최하위디렉토리 정보를 비교한다. 삭제된 경우를 확인함
+ for (int i = 0; i < originalList.size(); i++) {
+ for (int j = 0; j < currentList.size(); j++) {
+ str1 = (String) originalList.get(i);
+ str2 = (String) currentList.get(j);
+ if (str1.substring(0, str1.indexOf("$")).equals(str2.substring(0, str2.indexOf("$")))) {
+ isDel = false;
+ }
+ }
+ if (isDel) {
+ changedList.add("DEL$" + originalList.get(i));
+ }
+ isDel = true; // 초기화
+ }
+
+ // 현재하위디렉토리 정보와 최초하위디렉토리 정보를 비교한다.(신규로 생성되었거나 수정된 경우를 확인함)
+ for (int i = 0; i < currentList.size(); i++) {
+ for (int j = 0; j < originalList.size(); j++) {
+ if (((String) currentList.get(i)).equals((String) originalList.get(j))) {
+ isSame = true;
+ }
+ str1 = (String) currentList.get(i);
+ str2 = (String) originalList.get(j);
+ if (str1.substring(0, str1.indexOf("$")).equals(str2.substring(0, str2.indexOf("$")))) {
+ isNew = false;
+ }
+ }
+ if (!isSame) {
+ if (isNew) {
+ changedList.add("NEW$" + currentList.get(i));
+ //totalChangedList.add("NEW$"+currentList.get(i));
+ } else {
+ changedList.add("MODI$" + currentList.get(i));
+ //totalChangedList.add("MODI$"+currentList.get(i));
+ }
+ }
+ isSame = false; // 초기화
+ isNew = true; // 초기화
+ }
+ } catch (NullPointerException e) {
+ EgovBasicLogger.debug("NullPointerException", e);
+
+ } catch (RuntimeException e) {
+ //interrupted = true; // there is no point in continuing
+
+ EgovBasicLogger.debug("Checking error", e);
+ }
+
+ if (changedList.size() > 0) {
+ //log.debug("change occur , changed file check count:"+cnt+ " , changed file count:"+changedList.size());
+ doOnChange(changedList);
+ }
+
+ if (isEnd()) {
+ //log.debug("Thread Process END !!! (CNT :"+cnt+")");
+ interrupted = true;
+ }
+ //log.debug("checkAndConfigure end"+changedList.size());
+ }
+
+ /**
+ * <p>
+ * 파일의 변경 유무의 체크를 주기적 초 단위로 실행 시키는 메소드
+ * </p>
+ */
+ public void run() {
+ while (!interrupted) {
+ try {
+ Thread.sleep(delay);
+ } catch (InterruptedException e) {
+ EgovBasicLogger.ignore("Interrupted Exception", e);
+ }
+ checkAndConfigure();
+ }
+ if (interrupted) {
+ this.interrupt();
+ }
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)의 최종 수정시간를 확인한다.(기본로케일 java.util.Locale.KOREA 기준)
+ * </pre>
+ * @param File f 수정일자를 확인할 대상파일
+ * @return String result 최종수정일자를 문자열로 리턴한다.
+ */
+ public static String getLastModifiedTime(File f) {
+ long date = f.lastModified();
+ java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMdd:HH:mm:ss", java.util.Locale.KOREA);
+ return dateFormat.format(new java.util.Date(date));
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리(파일)의 로그정보를 기록한다.
+ * </pre>
+ * @param String logStr 추가할 로그정보(라인단위)
+ * @return boolean result 로그추가 성공여부
+ */
+ public boolean writeLog(String logStr) {
+ boolean result = false;
+
+ FileWriter fWriter = null;
+ BufferedWriter bWriter = null;
+ BufferedReader br = null;
+ try {
+ fWriter = new FileWriter(logFile, true);
+ bWriter = new BufferedWriter(fWriter);
+ br = new BufferedReader(new StringReader(logStr));
+ String line = "";
+ while ((line = br.readLine()) != null) {
+ if (line.length() <= MAX_STR_LEN) {
+ bWriter.write(line + "\n", 0, line.length() + 1);
+ }
+ }
+ result = true;
+ } catch (IOException e) {
+ throw new RuntimeException("File IO exception", e);
+ } finally {
+ EgovResourceCloseHelper.close(br, bWriter, fWriter);
+ }
+
+ return result;
+ }
+
+ /**
+ * <pre>
+ * Comment : 디렉토리감시 종료여부를 확인한다. 해당 디렉토리에 대한 로그파일이 삭제된 경우는 감시를 종료한다.
+ * </pre>
+ * @return boolean isEnd 감시종료여부 중단하려면 true 리턴, 계속하려면 false 리턴
+ */
+ public boolean isEnd() {
+ //log.debug("isEnd start");
+ boolean isEnd = false;
+ String lastStr = "";
+ BufferedReader br = null;
+ FileReader fr = null;
+
+ try {
+ if (logFile.exists()) {
+ //로그파일을 읽어서 마지막 끝에 END가 있으면 종료된것임
+
+ fr = new FileReader(logFile);
+ br = new BufferedReader(fr);
+ //int ch = 0;
+ String line = "";
+ while ((line = br.readLine()) != null) {
+ if (line.length() <= MAX_STR_LEN) {
+ lastStr = line;
+ }
+ }
+ if (lastStr.equals("END")) {
+ isEnd = true;
+ }
+ } else {
+ //로그파일이 없는 경우(삭제된 경우)도 종료한다.
+ isEnd = true;
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("File IO exception", e);
+ } finally {
+ EgovResourceCloseHelper.close(br, fr);
+ }
+ return isEnd;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileMntrg.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileCmprs.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileCmprs.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileCmprs.java (revision 7)
@@ -0,0 +1,222 @@
+/**
+ * Class Name : EgovFileCmprs.java
+ * Description : 파일(디렉토리)의 압축 및 압축해제 하는 Business Interface class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.02.04 박지욱 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ * 2018.03.19 신용호 createDirectories() 호출및 예외처리 수정
+ * 2020.08.28 신용호 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2020.10.29 신용호 KISA 보안약점 조치 (경로 조작 및 자원 삽입)
+ *
+ * @author 공통 서비스 개발팀 박지욱
+ * @since 2009. 02. 04
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import egovframework.com.cmm.EgovWebUtil;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+public class EgovFileCmprs {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileCmprs.class);
+
+ final static int COMPRESSION_LEVEL = 8;
+ final static int BUFFER_SIZE = 64 * 1024;
+ final static char FILE_SEPARATOR = File.separatorChar;
+
+ /**
+ * 파일(디렉토리)을 압축하는 기능
+ * @param String source 원본파일명(디렉토리명)
+ * @param String target 압축파일명
+ * @return boolean result 압축성공여부 True / False
+ * @exception Exception
+ */
+ public static boolean cmprsFile(String source, String target) throws Exception {
+
+ // 압축성공여부
+ boolean result = false;
+ int cnt = 0;
+ // 읽어들일 byte 버퍼
+ byte[] buffer = new byte[BUFFER_SIZE];
+
+ FileInputStream finput = null;
+ FileOutputStream foutput = null;
+ ZipOutputStream zoutput = null;
+
+ String source1 = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ String target1 = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(source1);
+
+ if (srcFile.exists()) {
+
+ // 1. 파일인 경우
+ if (srcFile.isFile()) {
+
+ String target2 = EgovFileTool.createNewFile(target1);
+ File tarFile = new File(target2);
+
+ foutput = null;
+ zoutput = null;
+ ZipEntry zentry = null;
+
+ try {
+ foutput = new FileOutputStream(tarFile);
+ zoutput = new ZipOutputStream((OutputStream) foutput);
+ finput = new FileInputStream(srcFile);
+ zentry = new ZipEntry(srcFile.getName());
+ zoutput.putNextEntry(zentry);
+ zoutput.setLevel(COMPRESSION_LEVEL);
+ cnt = 0;
+ while ((cnt = finput.read(buffer)) != -1) {
+ zoutput.write(buffer, 0, cnt);
+ }
+ zoutput.closeEntry();
+ result = true;
+
+ } catch (IOException e) {
+ //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(tarFile.delete()){
+ LOGGER.debug("[file.delete] tarFile : File Deletion Success");
+ }else{
+ LOGGER.error("[file.delete] tarFile : File Deletion Fail");
+ }
+ throw e;
+ } finally {
+ EgovResourceCloseHelper.close(finput, zoutput, foutput);
+ }
+
+ // 2. 디렉토리인 경우
+ } else if (srcFile.isDirectory()) {
+
+ String target2 = EgovFileTool.createNewFile(target1);
+ File tarFile = new File(target2);
+
+ ZipEntry zentry = null;
+
+ try {
+ foutput = new FileOutputStream(tarFile);
+ zoutput = new ZipOutputStream((OutputStream) foutput);
+ File[] fileArr = srcFile.listFiles();
+
+ //2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ if(fileArr == null){
+ fileArr = new File[0];
+ }
+
+ List<String> list = EgovFileTool.getSubFilesByAll(fileArr);
+
+ for (int i = 0; i < list.size(); i++) {
+ File sfile = new File((String) list.get(i));
+ finput = new FileInputStream(sfile);
+ zentry = new ZipEntry(sfile.getAbsolutePath().replace('\\', '/').replaceAll(srcFile.getAbsolutePath().replace('\\', '/'), ""));
+ zoutput.putNextEntry(zentry);
+ zoutput.setLevel(COMPRESSION_LEVEL);
+ cnt = 0;
+ while ((cnt = finput.read(buffer)) != -1) {
+ zoutput.write(buffer, 0, cnt);
+ }
+ finput.close();
+ result = true;
+ }
+ zoutput.closeEntry();
+ } catch (IOException e) {
+
+ //2020.08.28 신용호 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ if(tarFile.delete()){
+ LOGGER.debug("[file.delete] tarFile : File Deletion Success");
+ }else{
+ LOGGER.error("[file.delete] tarFile : File Deletion Fail");
+ }
+ throw e;
+ } finally {
+ EgovResourceCloseHelper.close(finput, zoutput, foutput);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 파일(디렉토리)을 압축해제하는 기능
+ * @param String source 압축파일명
+ * @param String target 압출이 풀릴 디렉토리
+ * @return boolean result 압축해제성공여부 True / False
+ * @exception Exception
+ */
+ public static boolean decmprsFile(String source, String target) throws Exception {
+
+ // 압축해제성공여부
+ boolean result = false;
+ int cnt = 0;
+ // 읽어들일 byte 버퍼
+ byte[] buffer = new byte[BUFFER_SIZE];
+
+ FileInputStream finput = null;
+ FileOutputStream foutput = null;
+ ZipInputStream zinput = null;
+
+ String source1 = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ String target1 = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(source1);
+
+ if (srcFile.exists() && srcFile.isFile()) {
+
+ String target2 = EgovFileTool.createNewDirectory(target1);
+ File tarFile = new File(target2);
+ finput = new FileInputStream(srcFile);
+ zinput = new ZipInputStream((InputStream) finput);
+
+ ZipEntry entry;
+
+ try {
+
+ File efile;
+ while ((entry = zinput.getNextEntry()) != null) {
+
+ String filename = entry.getName();
+ String entryFilePath = tarFile.getAbsolutePath() + FILE_SEPARATOR + filename;
+ entryFilePath = EgovWebUtil.filePathBlackList(entryFilePath);
+ efile = new File(entryFilePath);
+ if (entry.isDirectory()) {
+ EgovFileTool.createDirectories(efile.getAbsolutePath());
+ } else {
+ foutput = new FileOutputStream(efile);
+ while ((cnt = zinput.read(buffer)) != -1) {
+ if (foutput != null)
+ foutput.write(buffer, 0, cnt);
+ }
+ }
+
+ }
+
+ result = true;
+
+ } finally {
+ EgovResourceCloseHelper.close(finput, zinput, foutput);
+ }
+ }
+ return result;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileCmprs.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java (revision 7)
@@ -0,0 +1,274 @@
+/**
+ * Class Name : EgovFileScrty.java
+ * Description : Base64인코딩/디코딩 방식을 이용한 데이터를 암호화/복호화하는 Business Interface class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.04 박지욱 최초 생성
+ *
+ * @author 공통 서비스 개발팀 박지욱
+ * @since 2009. 02. 04
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+import java.security.MessageDigest;
+
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ * @Class Name : EgovFileScrty.java
+ * @Description : 파일 및 텍스트 문자열 암호화 처리하는 구현 클래스
+ * @Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ---------- ------- -------------------
+ * 2019.11.29 신용호 encryptPassword(String data) 삭제 : KISA 보안약점 조치 (비밀번호 해시함수 적용 시 솔트를 사용하여야 함)
+ *
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.26
+ * @version 1.0
+ */
+public class EgovFileScrty {
+
+ // 파일구분자
+ static final char FILE_SEPARATOR = File.separatorChar;
+
+ static final int BUFFER_SIZE = 1024;
+
+ /**
+ * 파일을 암호화하는 기능
+ *
+ * @param String source 암호화할 파일
+ * @param String target 암호화된 파일
+ * @return boolean result 암호화여부 True/False
+ * @exception Exception
+ */
+ public static boolean encryptFile(String source, String target) throws Exception {
+
+ // 암호화 여부
+ boolean result = false;
+
+ String sourceFile = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ String targetFile = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(sourceFile);
+
+ BufferedInputStream input = null;
+ BufferedOutputStream output = null;
+
+ byte[] buffer = new byte[BUFFER_SIZE];
+
+ try {
+ if (srcFile.exists() && srcFile.isFile()) {
+
+ input = new BufferedInputStream(new FileInputStream(srcFile));
+ output = new BufferedOutputStream(new FileOutputStream(targetFile));
+
+ int length = 0;
+ while ((length = input.read(buffer)) >= 0) {
+ byte[] data = new byte[length];
+ System.arraycopy(buffer, 0, data, 0, length);
+ output.write(encodeBinary(data).getBytes());
+ output.write(System.getProperty("line.separator").getBytes());
+ }
+ result = true;
+ }
+ } finally {
+ EgovResourceCloseHelper.close(input, output);
+ }
+
+ return result;
+ }
+
+ /**
+ * 파일을 복호화하는 기능
+ *
+ * @param String source 복호화할 파일
+ * @param String target 복호화된 파일
+ * @return boolean result 복호화여부 True/False
+ * @exception Exception
+ */
+ public static boolean decryptFile(String source, String target) throws Exception {
+
+ // 복호화 여부
+ boolean result = false;
+
+ String sourceFile = source.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ String targetFile = target.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
+ File srcFile = new File(sourceFile);
+
+ BufferedReader input = null;
+ BufferedOutputStream output = null;
+
+ //byte[] buffer = new byte[BUFFER_SIZE];
+ String line = null;
+
+ try {
+ if (srcFile.exists() && srcFile.isFile()) {
+
+ input = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile)));
+ output = new BufferedOutputStream(new FileOutputStream(targetFile));
+
+ while ((line = input.readLine()) != null) {
+ byte[] data = line.getBytes();
+ output.write(decodeBinary(new String(data)));
+ }
+
+ result = true;
+ }
+ } finally {
+ EgovResourceCloseHelper.close(input, output);
+ }
+
+ return result;
+ }
+
+ /**
+ * 데이터를 암호화하는 기능
+ *
+ * @param byte[] data 암호화할 데이터
+ * @return String result 암호화된 데이터
+ * @exception Exception
+ */
+ public static String encodeBinary(byte[] data) throws Exception {
+ if (data == null) {
+ return "";
+ }
+
+ return new String(Base64.encodeBase64(data));
+ }
+
+ /**
+ * 데이터를 암호화하는 기능
+ *
+ * @param String data 암호화할 데이터
+ * @return String result 암호화된 데이터
+ * @exception Exception
+ */
+ @Deprecated
+ public static String encode(String data) throws Exception {
+ return encodeBinary(data.getBytes());
+ }
+
+ /**
+ * 데이터를 복호화하는 기능
+ *
+ * @param String data 복호화할 데이터
+ * @return String result 복호화된 데이터
+ * @exception Exception
+ */
+ public static byte[] decodeBinary(String data) throws Exception {
+ return Base64.decodeBase64(data.getBytes());
+ }
+
+ /**
+ * 데이터를 복호화하는 기능
+ *
+ * @param String data 복호화할 데이터
+ * @return String result 복호화된 데이터
+ * @exception Exception
+ */
+ @Deprecated
+ public static String decode(String data) throws Exception {
+ return new String(decodeBinary(data));
+ }
+
+ /**
+ * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용)
+ *
+ * @param password 암호화될 패스워드
+ * @param id salt로 사용될 사용자 ID 지정
+ * @return
+ * @throws Exception
+ */
+ public static String encryptPassword(String password, String id) throws Exception {
+
+ if (password == null) return "";
+ if (id == null) return ""; // KISA 보안약점 조치 (2018-12-11, 신용호)
+
+ byte[] hashValue = null; // 해쉬값
+
+ MessageDigest md = MessageDigest.getInstance("SHA-256");
+
+ md.reset();
+ md.update(id.getBytes());
+
+ hashValue = md.digest(password.getBytes());
+
+ return new String(Base64.encodeBase64(hashValue));
+ }
+
+ /**
+ * 비밀번호를 암호화하는 기능(복호화가 되면 안되므로 SHA-256 인코딩 방식 적용)
+ * @param data 암호화할 비밀번호
+ * @param salt Salt
+ * @return 암호화된 비밀번호
+ * @throws Exception
+ */
+ public static String encryptPassword(String data, byte[] salt) throws Exception {
+
+ if (data == null) {
+ return "";
+ }
+
+ byte[] hashValue = null; // 해쉬값
+
+ MessageDigest md = MessageDigest.getInstance("SHA-256");
+
+ md.reset();
+ md.update(salt);
+
+ hashValue = md.digest(data.getBytes());
+
+ return new String(Base64.encodeBase64(hashValue));
+ }
+
+ /**
+ * 비밀번호를 암호화된 패스워드 검증(salt가 사용된 경우만 적용).
+ *
+ * @param data 원 패스워드
+ * @param encoded 해쉬처리된 패스워드(Base64 인코딩)
+ * @return
+ * @throws Exception
+ */
+ public static boolean checkPassword(String data, String encoded, byte[] salt) throws Exception {
+ byte[] hashValue = null; // 해쉬값
+
+ MessageDigest md = MessageDigest.getInstance("SHA-256");
+
+ md.reset();
+ md.update(salt);
+ hashValue = md.digest(data.getBytes());
+
+ return MessageDigest.isEqual(hashValue, Base64.decodeBase64(encoded.getBytes()));
+ }
+
+ /*
+ public static void main(String[] args) {
+ try {
+ String password = "abc";
+ String salt = "def";
+
+ String first = encryptPassword(password, salt.getBytes());
+ String second = encryptPassword(password, salt.getBytes());
+ System.out.println(password + " => " + first + " : " + checkPassword(password, first, salt.getBytes()));
+ System.out.println(password + " => " + second + " : " + checkPassword(password, second, salt.getBytes()));
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ */
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovFileScrty.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetInfo.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetInfo.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetInfo.java (revision 7)
@@ -0,0 +1,83 @@
+/**
+ * Class Name : ComUtlSimNetInfo.java
+ * Description : 시스템 네트워크 정보를 확인하여 제공하는 Business class
+ * Modification Information
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.01.13 조재영 최초 생성
+ * 2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ *
+ * @author 공통 서비스 개발팀 조재영
+ * @since 2009. 01. 13
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by EGOV All right reserved.
+ */
+package egovframework.com.utl.sim.service;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+import egovframework.com.cmm.service.EgovProperties;
+import egovframework.com.cmm.service.Globals;
+import egovframework.com.cmm.util.EgovResourceCloseHelper;
+
+public class EgovNetInfo {
+ // 최대 문자길이
+ static final int MAX_STR_LEN = 1024;
+
+ /**
+ * <pre>
+ * Comment : 호스트 정보를 확인한다.
+ * </pre>
+ * @return String hostStr 호스트명을 리턴한다.(테스트용 함수)
+ * @version 1.0 (2009.01.12.)
+ * @see
+ */
+ public static String getHostName() throws Exception {
+ // 실행할 명령을 프로퍼티 파일에서 확인한다.
+ String command = EgovProperties.getPathProperty(Globals.SHELL_FILE_PATH, "SHELL." + Globals.OS_TYPE + ".getHostName");
+
+ // 출력할 결과 (파싱대상)
+ String hostStr = "";
+ String tmp = "";
+ BufferedReader b_err = null;
+ BufferedReader b_out = null;
+ try {
+ Process p = Runtime.getRuntime().exec(command);
+ //프로세스가 처리될때까지 대기
+ p.waitFor();
+
+ //프로세스 에러시 종료
+ if (p.exitValue() != 0) {
+ b_err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+ while (b_err.ready()) {
+ }
+ }
+ //프로세스 실행 성공시 결과 확인
+ else {
+ b_out = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ int i = 0;
+ while (b_out.ready()) {
+ //도스명령어 실행시 결과는 3번째 라인부터 출력됨..
+ tmp = b_out.readLine();
+ //2017.03.03 조성원 시큐어코딩(ES)-Null Pointer 역참조[CWE-476]
+ if(tmp != null){
+ if (tmp.length() <= MAX_STR_LEN) {
+ if (i > 1) {
+ hostStr += tmp + "\n";
+ }
+ i++;
+ }
+ }
+ }
+ // 시스템 로그 출력
+ }
+ } finally {
+ EgovResourceCloseHelper.close(b_err, b_out);
+ }
+ return hostStr;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sim/service/EgovNetInfo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sys/rsc/web/EgovLoginSesionController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sys/rsc/web/EgovLoginSesionController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sys/rsc/web/EgovLoginSesionController.java (revision 7)
@@ -0,0 +1,74 @@
+package egovframework.com.utl.sys.rsc.web;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.utl.sys.rsc.service.EgovLoginSesionCeckUtil;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+
+/**
+ * 개요
+ * - 로그인 세션정보체크 컴포넌트에 대한 controller 클래스를 정의한다.
+ *
+ * 상세내용
+ * - 로그인 세션정보체크에 대한 기능을 제공한다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 28-6-2010 오전 10:44:26
+ * <pre>
+ * == 개정이력(Modification Information) ==
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2010.06.28 lee.m.j 최초 생성
+ * 2011.8.26 정진오 IncludedInfo annotation 추가
+ * </pre>
+ */
+
+@Controller
+public class EgovLoginSesionController {
+
+ @Resource(name="egovLoginSesionCeckUtil")
+ private EgovLoginSesionCeckUtil egovLoginSesionCeckUtil;
+
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ /**
+ * 로그인 세션정보체크 화면 이동
+ * @return String
+ */
+ @IncludedInfo(name="로그인세션정보체크", order = 2160 ,gid = 90)
+ @RequestMapping(value="/utl/sys/rsc/loginSessionView.do")
+ public String checkLoginSessionView() throws Exception {
+ return "egovframework/com/utl/sys/rsc/EgovLoginSesionCheck";
+ }
+
+ /**
+ * 로그인 후 이동할 처리화면을 세션에 등록한다.
+ * @param url - String
+ * @return String
+ */
+ @RequestMapping(value="/utl/sys/rsc/setLoginSession.do")
+ public String setLoginSession(@RequestParam("url") String url) throws Exception {
+ egovLoginSesionCeckUtil.setLoginSession(url);
+ return "forward:/utl/sys/rsc/loginSessionView.do";
+ }
+
+ /**
+ * 로그인 세션정보체크
+ * @return String
+ */
+ @RequestMapping(value="/utl/sys/rsc/checkLloginSession.do")
+ public String checkLoginSession() throws Exception {
+ egovLoginSesionCeckUtil.checkLoginSessionView();
+ return "egovframework/com/utl/sys/rsc/EgovLoginSesionCheck";
+ }
+
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/sys/rsc/web/EgovLoginSesionController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/sys/rsc/service/EgovLoginSesionCeckUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/sys/rsc/service/EgovLoginSesionCeckUtil.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/sys/rsc/service/EgovLoginSesionCeckUtil.java (revision 7)
@@ -0,0 +1,52 @@
+package egovframework.com.utl.sys.rsc.service;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 개요
+ * - 로그인 세션정보체크 컴포넌트에 대한 util 클래스를 정의한다.
+ *
+ * 상세내용
+ * - 로그인 세션정보체크에 대한 기능을 제공한다.
+ * @author lee.m.j
+ * @version 1.0
+ * @created 28-6-2010 오전 10:44:26
+ */
+
+@Service("egovLoginSesionCeckUtil")
+public class EgovLoginSesionCeckUtil extends EgovAbstractServiceImpl {
+
+ /**
+ * 로그인 후 이동할 처리화면을 세션에 등록한다.
+ * @param url - String
+ * @return String
+ */
+ public void setLoginSession(String url) throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ // KISA 보안취약점 조치 (2018-12-10, 이정은)
+ if ( user != null ) {
+ user.setUrl("");
+ user.setUrl(url);
+ }
+ //new EgovUserDetails(user.getId(), user.getPassword(), true, user);
+ }
+
+ /**
+ * 로그인 세션정보체크 화면 이동
+ * @return String - 세션URL
+ */
+ public String checkLoginSessionView() throws Exception {
+ LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+ // KISA 보안취약점 조치 (2018-12-10, 이정은)
+ if ( user == null )
+ return "";
+ else
+ return user.getUrl();
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/sys/rsc/service/EgovLoginSesionCeckUtil.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/pao/web/EgovErncslController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/pao/web/EgovErncslController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/pao/web/EgovErncslController.java (revision 7)
@@ -0,0 +1,116 @@
+package egovframework.com.utl.pao.web;
+
+import java.io.IOException;
+import java.sql.SQLException;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import egovframework.com.utl.pao.service.EgovPrntngOutpt;
+import egovframework.com.utl.pao.service.PrntngOutptVO;
+
+/**
+ *
+ * 전자관인에 관한 Util 테스트를 위한 화면 Controller
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.04.01 이중호 최초 생성
+ * 2017-02-14 이정은 시큐어코딩(ES) - 시큐어코딩 부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ * 2019.12.06 신용호 KISA 보안약점 조치 (부적절한 예외처리) , EgovPropertyService 삭제
+ *
+ * </pre>
+ */
+@Controller
+public class EgovErncslController extends HttpServlet {
+
+ private static final long serialVersionUID = 8921470672390456794L;
+
+ @Resource(name = "PrntngOutpt")
+ private EgovPrntngOutpt prntngOutpt;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovErncslController.class);
+
+ /**
+ * 서블릿 초기화
+ */
+ public void init(ServletConfig config) throws ServletException {
+ super.init(config);
+ }
+
+ /**
+ * 관인이미지를 조회하여 출력
+ * @param
+ * @param
+ * @return
+ * @exception MyException
+ * @see
+ */
+ @RequestMapping(value = "/utl/pao/EgovErncsl.do")
+ public void doGet(@RequestParam("sOrgCode") String orgCode, @RequestParam("sErncslSe") String erncslSe, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ LOGGER.info("EgovErncsl start....");
+
+ PrntngOutptVO req = new PrntngOutptVO();
+
+ req.setOrgCode(orgCode);
+ req.setErncslSe(erncslSe);
+
+ PrntngOutptVO res = null;
+ try {
+ res = prntngOutpt.selectErncsl(req);
+ } catch (SQLException e) {
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ throw new RuntimeException("Service call error", e);
+ } catch (Exception e) {
+// LOGGER.error(e.getMessage());
+ // 2017-02-14 이정은 시큐어코딩(ES) - 시큐어코딩 부적절한 예외 처리[CWE-253, CWE-440, CWE-754]
+ LOGGER.error("["+ e.getClass() +"] : ", e.getMessage());
+ throw new RuntimeException("Service call error", e);
+ }
+
+ if (res == null) {
+ throw new RuntimeException("image not found!!!");
+ }
+
+ byte[] img = res.getImgInfo();
+ String imgtype = res.getImgType();
+ String type = "";
+
+ if (imgtype != null && !"".equals(imgtype)) {
+ type = "image/" + imgtype;
+ } else {
+ LOGGER.debug("Image fileType is null.");
+ }
+ if (img == null) {
+ LOGGER.debug("Image fileInfo is null.");
+ return;
+ }
+
+ response.setHeader("Content-Type", type.replaceAll("\r", "").replaceAll("\n", ""));
+ response.setHeader("Content-Length", "" + img.length);
+ response.getOutputStream().write(img);
+ response.getOutputStream().flush();
+ response.getOutputStream().close();
+
+ LOGGER.info("EgovErncsl end....");
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/pao/web/EgovErncslController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/pao/web/EgovPrntngOutptController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/pao/web/EgovPrntngOutptController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/pao/web/EgovPrntngOutptController.java (revision 7)
@@ -0,0 +1,74 @@
+package egovframework.com.utl.pao.web;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ *
+ * 전자관인 출력 화면 Controller 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+@Controller
+public class EgovPrntngOutptController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(EgovPrntngOutptController.class);
+
+ /**
+ * 전자관인 출력 화면 컨트롤
+ * @param request
+ * @param response
+ * @return
+ * @throws ServletException
+ * @throws IOException
+ */
+ @RequestMapping(value = "/utl/pao/EgovPrntngOutpt.do")
+ public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ LOGGER.info("EgovPrntngOutptController start....");
+ Map<String, Object> cmdModel = new HashMap<String, Object>();
+
+ // 이동할 JSP
+ String jspStr = "";
+ // 결과정보
+ //String resultStr = "";
+ // 실행명령어
+ String cmdStr = request.getParameter("cmdStr");
+ if (cmdStr == null || cmdStr.equals("")) {
+ cmdStr = "";
+ }
+
+ // 실행명령어에 따른 JSP 할당
+ if (cmdStr.equals("ComUtlPaoErncslOutpt")) { // test 샘플용 경로
+ jspStr = "egovframework/com/utl/pao/EgovErncslOutpt";
+
+ cmdModel.put("resultStr", "UTILITY 직접 호출");
+ } else {
+ jspStr = "/egovDevIndex";
+ }
+ LOGGER.info("EgovPrntngOutptController end....");
+
+ return new ModelAndView(jspStr, "cmdModel", cmdModel);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/utl/pao/web/EgovPrntngOutptController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/pao/service/impl/EgovPrntngOutptImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/pao/service/impl/EgovPrntngOutptImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/pao/service/impl/EgovPrntngOutptImpl.java (revision 7)
@@ -0,0 +1,42 @@
+package egovframework.com.utl.pao.service.impl;
+
+import egovframework.com.utl.pao.service.EgovPrntngOutpt;
+import egovframework.com.utl.pao.service.PrntngOutptVO;
+
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 관인이미지에 대한 서비스 구현클래스를 정의한다
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.04.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.04.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+@Service("PrntngOutpt")
+public class EgovPrntngOutptImpl extends EgovAbstractServiceImpl implements EgovPrntngOutpt {
+
+ @Resource(name="PrntngOutptDAO")
+ private PrntngOutptDAO prntngOutptDAO;
+
+ /**
+ * 관인이미지를 조회한다.
+ */
+ public PrntngOutptVO selectErncsl(PrntngOutptVO searchVO) throws Exception {
+ return prntngOutptDAO.selectErncsl(searchVO);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/pao/service/impl/EgovPrntngOutptImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/pao/service/impl/PrntngOutptDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/pao/service/impl/PrntngOutptDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/pao/service/impl/PrntngOutptDAO.java (revision 7)
@@ -0,0 +1,39 @@
+package egovframework.com.utl.pao.service.impl;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.utl.pao.service.PrntngOutptVO;
+
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * 전자관인에서 사용해야 하는 서비스를 정의하기위한 데이터 접근 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+@Repository("PrntngOutptDAO")
+public class PrntngOutptDAO extends EgovComAbstractDAO {
+
+ /**
+ * 주어진 조건에 따른 공통코드를 불러온다.
+ * @param vo
+ * @return
+ * @throws Exception
+ */
+ public PrntngOutptVO selectErncsl(PrntngOutptVO vo) throws Exception{
+ String queryId = "PrntngOutptDAO.selectErncsl";
+ return (PrntngOutptVO) selectOne(queryId, vo);
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/pao/service/impl/PrntngOutptDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/pao/service/PrntngOutptVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/pao/service/PrntngOutptVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/pao/service/PrntngOutptVO.java (revision 7)
@@ -0,0 +1,124 @@
+package egovframework.com.utl.pao.service;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 관인이미지 모델 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+public class PrntngOutptVO implements Serializable {
+
+ private static final long serialVersionUID = 941289557959718464L;
+
+ /*
+ * 이미지정보
+ */
+ private byte[] imgInfo;
+
+ /*
+ * 이미지타입
+ */
+ private String imgType;
+
+ /*
+ * 기관코드
+ */
+ private String orgCode;
+
+ /*
+ * 관인구분
+ */
+ private String erncslSe;
+
+ /**
+ * imgInfo attribute 를 리턴한다.
+ * @return byte[]
+ */
+ public byte[] getImgInfo() {
+ byte[] ret = null;
+
+ if (imgInfo != null) {
+ ret = new byte[imgInfo.length];
+
+ for (int i = 0; i < imgInfo.length; i++) {
+ ret[i] = imgInfo[i];
+ }
+ }
+ return ret;
+ }
+
+ /**
+ * imgInfo attribute 값을 설정한다.
+ * @param imgInfo byte[]
+ */
+ public void setImgInfo(byte[] imgInfo) {
+ this.imgInfo = new byte[imgInfo.length];
+
+ for (int i = 0; i < imgInfo.length; ++i) {
+ this.imgInfo[i] = imgInfo[i];
+ }
+ }
+
+ /**
+ * imgType attribute 를 리턴한다.
+ * @return String
+ */
+ public String getImgType() {
+ return imgType;
+ }
+
+ /**
+ * imgType attribute 값을 설정한다.
+ * @param imgType String
+ */
+ public void setImgType(String imgType) {
+ this.imgType = imgType;
+ }
+
+ /**
+ * orgCode attribute 를 리턴한다.
+ * @return String
+ */
+ public String getOrgCode() {
+ return orgCode;
+ }
+
+ /**
+ * orgCode attribute 값을 설정한다.
+ * @param orgCode String
+ */
+ public void setOrgCode(String orgCode) {
+ this.orgCode = orgCode;
+ }
+
+ /**
+ * erncslSe attribute 를 리턴한다.
+ * @return String
+ */
+ public String getErncslSe() {
+ return erncslSe;
+ }
+
+ /**
+ * erncslSe attribute 값을 설정한다.
+ * @param erncslSe String
+ */
+ public void setErncslSe(String erncslSe) {
+ this.erncslSe = erncslSe;
+ }
+
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/pao/service/PrntngOutptVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/utl/pao/service/EgovPrntngOutpt.java
===================================================================
--- base3.10/src/main/java/egovframework/com/utl/pao/service/EgovPrntngOutpt.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/utl/pao/service/EgovPrntngOutpt.java (revision 7)
@@ -0,0 +1,27 @@
+package egovframework.com.utl.pao.service;
+
+/**
+ *
+ * 관인 처리 Util 클래스
+ * @author 공통서비스 개발팀 이중호
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2009.02.01 이중호 최초 생성
+ *
+ * </pre>
+ */
+public interface EgovPrntngOutpt {
+
+ /**
+ * 전자관인 정보를 제공하는 기능
+ */
+ PrntngOutptVO selectErncsl(PrntngOutptVO searchVO) throws Exception;
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/utl/pao/service/EgovPrntngOutpt.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/logback.xml
===================================================================
--- base3.10/src/main/resources/logback.xml (nonexistent)
+++ base3.10/src/main/resources/logback.xml (revision 7)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+ <property name="LOGS_PATH" value="../logs"/> <!--로그 파일 저장 위치-->
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>[logback]%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="DAILY_ROLLING_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${LOGS_PATH}/logback.log</file>
+ <encoder>
+ <pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level%logger{35} - %msg%n</pattern>
+ </encoder>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <fileNamePattern>${LOGS_PATH}/logback.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+ <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <!-- or whenever the file size reaches 100MB -->
+ <maxFileSize>5MB</maxFileSize>
+ <!-- kb, mb, gb -->
+ </timeBasedFileNamingAndTriggeringPolicy>
+ <maxHistory>30</maxHistory>
+ </rollingPolicy>
+ </appender>
+
+ <logger name="java.sql" level="ERROR" />
+<!-- <logger name="ctm" level="ERROR" /> -->
+ <logger name="egovframework.com.cop.bbs" level="DEBUG" />
+ <logger name="egovframework.com.poll" level="DEBUG" />
+ <logger name="jdbc.sqltiming" level="ERROR" />
+ <logger name="jdbc.audit" level="ERROR" />
+ <logger name="jdbc.resultset" level="ERROR" />
+ <logger name="org.springframework" level="ERROR" />
+ <logger name="jdbc.sqlonly" level="INFO" />
+ <logger name="jdbc.resultsettable" level="INFO" />
+ <root level="ERROR">
+ <appender-ref ref="STDOUT" />
+ <!-- <appender-ref ref="DAILY_ROLLING_FILE_APPENDER" /> -->
+ </root>
+<typeAliases></typeAliases>
+</configuration>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/logback.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_tibero.xml (revision 7)
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorGroupDAO">
+
+ <resultMap id="authorGroup" type="egovframework.com.sec.rgm.service.AuthorGroupVO">
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="mberTyCode" column="MBER_TY_CODE"/>
+ <result property="mberTyNm" column="MBER_TY_NM"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="uniqId" column="ESNTL_ID"/>
+ </resultMap>
+
+ <select id="selectAuthorGroupList" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultMap="authorGroup">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.GROUP_ID,
+ A.MBER_TY_CODE,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM012'
+ AND CODE = A.MBER_TY_CODE
+ AND USE_AT = 'Y') AS MBER_TY_NM,
+ B.AUTHOR_CODE,
+ (CASE WHEN B.SCRTY_DTRMN_TRGET_ID IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN,
+ ESNTL_ID
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ INSERT INTO COMTNEMPLYRSCRTYESTBS
+ ( SCRTY_DTRMN_TRGET_ID
+ , MBER_TY_CODE
+ , AUTHOR_CODE)
+ VALUES ( #{uniqId}
+ , #{mberTyCode}
+ , #{authorCode})
+
+ </insert>
+
+ <update id="updateAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ UPDATE COMTNEMPLYRSCRTYESTBS
+ SET MBER_TY_CODE=#{mberTyCode}
+ , AUTHOR_CODE=#{authorCode}
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </update>
+
+ <delete id="deleteAuthorGroup">
+
+ DELETE FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </delete>
+
+ <select id="selectAuthorGroupListTotCnt" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_mysql.xml (revision 7)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorGroupDAO">
+
+ <resultMap id="authorGroup" type="egovframework.com.sec.rgm.service.AuthorGroupVO">
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="mberTyCode" column="MBER_TY_CODE"/>
+ <result property="mberTyNm" column="MBER_TY_NM"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="uniqId" column="ESNTL_ID"/>
+ </resultMap>
+
+ <select id="selectAuthorGroupList" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultMap="authorGroup">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.GROUP_ID,
+ A.MBER_TY_CODE,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM012'
+ AND CODE = A.MBER_TY_CODE
+ AND USE_AT = 'Y') AS MBER_TY_NM,
+ B.AUTHOR_CODE,
+ (CASE WHEN B.SCRTY_DTRMN_TRGET_ID IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN,
+ ESNTL_ID
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ INSERT INTO COMTNEMPLYRSCRTYESTBS
+ ( SCRTY_DTRMN_TRGET_ID
+ , MBER_TY_CODE
+ , AUTHOR_CODE)
+ VALUES ( #{uniqId}
+ , #{mberTyCode}
+ , #{authorCode})
+
+ </insert>
+
+ <update id="updateAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ UPDATE COMTNEMPLYRSCRTYESTBS
+ SET MBER_TY_CODE=#{mberTyCode}
+ , AUTHOR_CODE=#{authorCode}
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </update>
+
+ <delete id="deleteAuthorGroup">
+
+ DELETE FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </delete>
+
+ <select id="selectAuthorGroupListTotCnt" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_postgres.xml (revision 7)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorGroupDAO">
+
+ <resultMap id="authorGroup" type="egovframework.com.sec.rgm.service.AuthorGroupVO">
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="mberTyCode" column="MBER_TY_CODE"/>
+ <result property="mberTyNm" column="MBER_TY_NM"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="uniqId" column="ESNTL_ID"/>
+ </resultMap>
+
+ <select id="selectAuthorGroupList" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultMap="authorGroup">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.GROUP_ID,
+ A.MBER_TY_CODE,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM012'
+ AND CODE = A.MBER_TY_CODE
+ AND USE_AT = 'Y') AS MBER_TY_NM,
+ B.AUTHOR_CODE,
+ (CASE WHEN B.SCRTY_DTRMN_TRGET_ID IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN,
+ ESNTL_ID
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ INSERT INTO COMTNEMPLYRSCRTYESTBS
+ ( SCRTY_DTRMN_TRGET_ID
+ , MBER_TY_CODE
+ , AUTHOR_CODE)
+ VALUES ( #{uniqId}
+ , #{mberTyCode}
+ , #{authorCode})
+
+ </insert>
+
+ <update id="updateAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ UPDATE COMTNEMPLYRSCRTYESTBS
+ SET MBER_TY_CODE=#{mberTyCode}
+ , AUTHOR_CODE=#{authorCode}
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </update>
+
+ <delete id="deleteAuthorGroup">
+
+ DELETE FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </delete>
+
+ <select id="selectAuthorGroupListTotCnt" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_maria.xml (revision 7)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorGroupDAO">
+
+ <resultMap id="authorGroup" type="egovframework.com.sec.rgm.service.AuthorGroupVO">
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="mberTyCode" column="MBER_TY_CODE"/>
+ <result property="mberTyNm" column="MBER_TY_NM"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="uniqId" column="ESNTL_ID"/>
+ </resultMap>
+
+ <select id="selectAuthorGroupList" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultMap="authorGroup">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.GROUP_ID,
+ A.MBER_TY_CODE,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM012'
+ AND CODE = A.MBER_TY_CODE
+ AND USE_AT = 'Y') AS MBER_TY_NM,
+ B.AUTHOR_CODE,
+ (CASE WHEN B.SCRTY_DTRMN_TRGET_ID IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN,
+ ESNTL_ID
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ INSERT INTO COMTNEMPLYRSCRTYESTBS
+ ( SCRTY_DTRMN_TRGET_ID
+ , MBER_TY_CODE
+ , AUTHOR_CODE)
+ VALUES ( #{uniqId}
+ , #{mberTyCode}
+ , #{authorCode})
+
+ </insert>
+
+ <update id="updateAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ UPDATE COMTNEMPLYRSCRTYESTBS
+ SET MBER_TY_CODE=#{mberTyCode}
+ , AUTHOR_CODE=#{authorCode}
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </update>
+
+ <delete id="deleteAuthorGroup">
+
+ DELETE FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </delete>
+
+ <select id="selectAuthorGroupListTotCnt" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorGroupDAO">
+
+
+ <resultMap id="authorGroup" type="egovframework.com.sec.rgm.service.AuthorGroupVO">
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="mberTyCode" column="MBER_TY_CODE"/>
+ <result property="mberTyNm" column="MBER_TY_NM"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="uniqId" column="ESNTL_ID"/>
+ </resultMap>
+
+ <select id="selectAuthorGroupList" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultMap="authorGroup">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.GROUP_ID,
+ A.MBER_TY_CODE,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM012'
+ AND CODE = A.MBER_TY_CODE
+ AND USE_AT = 'Y') AS MBER_TY_NM,
+ B.AUTHOR_CODE,
+ (CASE WHEN B.SCRTY_DTRMN_TRGET_ID IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN,
+ ESNTL_ID
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ INSERT INTO COMTNEMPLYRSCRTYESTBS
+ ( SCRTY_DTRMN_TRGET_ID
+ , MBER_TY_CODE
+ , AUTHOR_CODE)
+ VALUES ( #{uniqId}
+ , #{mberTyCode}
+ , #{authorCode})
+
+ </insert>
+
+ <update id="updateAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ UPDATE COMTNEMPLYRSCRTYESTBS
+ SET MBER_TY_CODE=#{mberTyCode}
+ , AUTHOR_CODE=#{authorCode}
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </update>
+
+ <delete id="deleteAuthorGroup">
+
+ DELETE FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </delete>
+
+ <select id="selectAuthorGroupListTotCnt" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_oracle.xml (revision 7)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorGroupDAO">
+
+
+ <resultMap id="authorGroup" type="egovframework.com.sec.rgm.service.AuthorGroupVO">
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="mberTyCode" column="MBER_TY_CODE"/>
+ <result property="mberTyNm" column="MBER_TY_NM"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="uniqId" column="ESNTL_ID"/>
+ </resultMap>
+
+ <select id="selectAuthorGroupList" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultMap="authorGroup">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.GROUP_ID,
+ A.MBER_TY_CODE,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM012'
+ AND CODE = A.MBER_TY_CODE
+ AND USE_AT = 'Y') AS MBER_TY_NM,
+ B.AUTHOR_CODE,
+ (CASE WHEN B.SCRTY_DTRMN_TRGET_ID IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN,
+ ESNTL_ID
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ INSERT INTO COMTNEMPLYRSCRTYESTBS
+ ( SCRTY_DTRMN_TRGET_ID
+ , MBER_TY_CODE
+ , AUTHOR_CODE)
+ VALUES ( #{uniqId}
+ , #{mberTyCode}
+ , #{authorCode})
+
+ </insert>
+
+ <update id="updateAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ UPDATE COMTNEMPLYRSCRTYESTBS
+ SET MBER_TY_CODE=#{mberTyCode}
+ , AUTHOR_CODE=#{authorCode}
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </update>
+
+ <delete id="deleteAuthorGroup">
+
+ DELETE FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </delete>
+
+ <select id="selectAuthorGroupListTotCnt" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_altibase.xml (revision 7)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorGroupDAO">
+
+
+ <resultMap id="authorGroup" type="egovframework.com.sec.rgm.service.AuthorGroupVO">
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="mberTyCode" column="MBER_TY_CODE"/>
+ <result property="mberTyNm" column="MBER_TY_NM"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="uniqId" column="ESNTL_ID"/>
+ </resultMap>
+
+ <select id="selectAuthorGroupList" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultMap="authorGroup">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.GROUP_ID,
+ A.MBER_TY_CODE,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM012'
+ AND CODE = A.MBER_TY_CODE
+ AND USE_AT = 'Y') AS MBER_TY_NM,
+ B.AUTHOR_CODE,
+ (CASE WHEN B.SCRTY_DTRMN_TRGET_ID IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN,
+ ESNTL_ID
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE, ESNTL_ID
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+
+ </select>
+
+ <insert id="insertAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ INSERT INTO COMTNEMPLYRSCRTYESTBS
+ ( SCRTY_DTRMN_TRGET_ID
+ , MBER_TY_CODE
+ , AUTHOR_CODE)
+ VALUES ( #{uniqId}
+ , #{mberTyCode}
+ , #{authorCode})
+
+ </insert>
+
+ <update id="updateAuthorGroup" parameterType="egovframework.com.sec.rgm.service.AuthorGroup">
+
+ UPDATE COMTNEMPLYRSCRTYESTBS
+ SET MBER_TY_CODE=#{mberTyCode}
+ , AUTHOR_CODE=#{authorCode}
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </update>
+
+ <delete id="deleteAuthorGroup">
+
+ DELETE FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID=#{uniqId}
+
+ </delete>
+
+ <select id="selectAuthorGroupListTotCnt" parameterType="egovframework.com.sec.rgm.service.AuthorGroupVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM (SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, 'USR01' MBER_TY_CODE
+ FROM COMTNGNRLMBER
+ UNION ALL
+ SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, 'USR02' MBER_TY_CODE
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT EMPLYR_ID USER_ID, USER_NM USER_NM, GROUP_ID, 'USR03' MBER_TY_CODE
+ FROM COMTNEMPLYRINFO ) A LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS B
+ ON A.USER_ID = B.SCRTY_DTRMN_TRGET_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_ID LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 2">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <if test="searchCondition == 3">AND
+ A.GROUP_ID = #{searchKeyword}
+ </if>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rgm/EgovAuthorGroup_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="roleManageDAO">
+
+ <resultMap id="role" type="egovframework.com.sec.rmt.service.RoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="roleCreatDe" column="ROLE_CREAT_DE"/>
+ </resultMap>
+
+
+ <select id="selectRole" resultMap="role">
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE ROLE_CODE = #{roleCode}
+
+ </select>
+
+ <select id="selectRoleList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM029'
+ AND CODE = ROLE_TY) AS ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ROLE_CREAT_DE DESC
+
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ INSERT INTO COMTNROLEINFO
+ ( ROLE_CODE
+ , ROLE_NM
+ , ROLE_PTTRN
+ , ROLE_DC
+ , ROLE_TY
+ , ROLE_SORT
+ , ROLE_CREAT_DE )
+ VALUES ( #{roleCode}
+ , #{roleNm}
+ , #{rolePtn}
+ , #{roleDc}
+ , #{roleTyp}
+ , #{roleSort}
+ , SYSDATETIME)
+
+ </insert>
+
+ <update id="updateRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ UPDATE COMTNROLEINFO
+ SET ROLE_NM=#{roleNm}
+ , ROLE_PTTRN=#{rolePtn}
+ , ROLE_DC=#{roleDc}
+ , ROLE_TY=#{roleTyp}
+ , ROLE_SORT=#{roleSort}
+ , ROLE_CREAT_DE=SYSDATETIME
+ WHERE ROLE_CODE=#{roleCode}
+
+ </update>
+
+ <delete id="deleteRole">
+
+ DELETE FROM COMTNROLEINFO
+ WHERE ROLE_CODE=#{roleCode}
+
+ </delete>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectRoleAllList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE, ROLE_NM, ROLE_PTTRN, ROLE_DC, ROLE_TY, ROLE_SORT, ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="roleManageDAO">
+
+ <resultMap id="role" type="egovframework.com.sec.rmt.service.RoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="roleCreatDe" column="ROLE_CREAT_DE"/>
+ </resultMap>
+
+
+ <select id="selectRole" resultMap="role">
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE ROLE_CODE = #{roleCode}
+
+ </select>
+
+ <select id="selectRoleList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM029'
+ AND CODE = ROLE_TY) AS ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY ROLE_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ INSERT INTO COMTNROLEINFO
+ ( ROLE_CODE
+ , ROLE_NM
+ , ROLE_PTTRN
+ , ROLE_DC
+ , ROLE_TY
+ , ROLE_SORT
+ , ROLE_CREAT_DE )
+ VALUES ( #{roleCode}
+ , #{roleNm}
+ , #{rolePtn}
+ , #{roleDc}
+ , #{roleTyp}
+ , #{roleSort}
+ , now())
+
+ </insert>
+
+ <update id="updateRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ UPDATE COMTNROLEINFO
+ SET ROLE_NM=#{roleNm}
+ , ROLE_PTTRN=#{rolePtn}
+ , ROLE_DC=#{roleDc}
+ , ROLE_TY=#{roleTyp}
+ , ROLE_SORT=#{roleSort}
+ , ROLE_CREAT_DE=now()
+ WHERE ROLE_CODE=#{roleCode}
+
+ </update>
+
+ <delete id="deleteRole">
+
+ DELETE FROM COMTNROLEINFO
+ WHERE ROLE_CODE=#{roleCode}
+
+ </delete>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectRoleAllList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE, ROLE_NM, ROLE_PTTRN, ROLE_DC, ROLE_TY, ROLE_SORT, ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="roleManageDAO">
+
+ <resultMap id="role" type="egovframework.com.sec.rmt.service.RoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="roleCreatDe" column="ROLE_CREAT_DE"/>
+ </resultMap>
+
+
+ <select id="selectRole" resultMap="role">
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE ROLE_CODE = #{roleCode}
+
+ </select>
+
+ <select id="selectRoleList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM029'
+ AND CODE = ROLE_TY) AS ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ROLE_CREAT_DE DESC
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ INSERT INTO COMTNROLEINFO
+ ( ROLE_CODE
+ , ROLE_NM
+ , ROLE_PTTRN
+ , ROLE_DC
+ , ROLE_TY
+ , ROLE_SORT
+ , ROLE_CREAT_DE )
+ VALUES ( #{roleCode}
+ , #{roleNm}
+ , #{rolePtn}
+ , #{roleDc}
+ , #{roleTyp}
+ , #{roleSort}
+ , SYSDATE)
+
+ </insert>
+
+ <update id="updateRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ UPDATE COMTNROLEINFO
+ SET ROLE_NM=#{roleNm}
+ , ROLE_PTTRN=#{rolePtn}
+ , ROLE_DC=#{roleDc}
+ , ROLE_TY=#{roleTyp}
+ , ROLE_SORT=#{roleSort}
+ , ROLE_CREAT_DE=SYSDATE
+ WHERE ROLE_CODE=#{roleCode}
+
+ </update>
+
+ <delete id="deleteRole">
+
+ DELETE FROM COMTNROLEINFO
+ WHERE ROLE_CODE=#{roleCode}
+
+ </delete>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectRoleAllList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE, ROLE_NM, ROLE_PTTRN, ROLE_DC, ROLE_TY, ROLE_SORT, ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="roleManageDAO">
+
+ <resultMap id="role" type="egovframework.com.sec.rmt.service.RoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="roleCreatDe" column="ROLE_CREAT_DE"/>
+ </resultMap>
+
+
+ <select id="selectRole" resultMap="role">
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE ROLE_CODE = #{roleCode}
+
+ </select>
+
+ <select id="selectRoleList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM029'
+ AND CODE = ROLE_TY) AS ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ROLE_CREAT_DE DESC
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ INSERT INTO COMTNROLEINFO
+ ( ROLE_CODE
+ , ROLE_NM
+ , ROLE_PTTRN
+ , ROLE_DC
+ , ROLE_TY
+ , ROLE_SORT
+ , ROLE_CREAT_DE )
+ VALUES ( #{roleCode}
+ , #{roleNm}
+ , #{rolePtn}
+ , #{roleDc}
+ , #{roleTyp}
+ , #{roleSort}
+ , TO_CHAR(SYSDATE, 'YYYYMMDD'))
+
+ </insert>
+
+ <update id="updateRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ UPDATE COMTNROLEINFO
+ SET ROLE_NM=#{roleNm}
+ , ROLE_PTTRN=#{rolePtn}
+ , ROLE_DC=#{roleDc}
+ , ROLE_TY=#{roleTyp}
+ , ROLE_SORT=#{roleSort}
+ , ROLE_CREAT_DE=TO_CHAR(SYSDATE, 'YYYYMMDD')
+ WHERE ROLE_CODE=#{roleCode}
+
+ </update>
+
+ <delete id="deleteRole">
+
+ DELETE FROM COMTNROLEINFO
+ WHERE ROLE_CODE=#{roleCode}
+
+ </delete>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectRoleAllList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE, ROLE_NM, ROLE_PTTRN, ROLE_DC, ROLE_TY, ROLE_SORT, ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="roleManageDAO">
+
+ <resultMap id="role" type="egovframework.com.sec.rmt.service.RoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="roleCreatDe" column="ROLE_CREAT_DE"/>
+ </resultMap>
+
+
+ <select id="selectRole" resultMap="role">
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE ROLE_CODE = #{roleCode}
+
+ </select>
+
+ <select id="selectRoleList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM029'
+ AND CODE = ROLE_TY) AS ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ROLE_CREAT_DE DESC
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ INSERT INTO COMTNROLEINFO
+ ( ROLE_CODE
+ , ROLE_NM
+ , ROLE_PTTRN
+ , ROLE_DC
+ , ROLE_TY
+ , ROLE_SORT
+ , ROLE_CREAT_DE )
+ VALUES ( #{roleCode}
+ , #{roleNm}
+ , #{rolePtn}
+ , #{roleDc}
+ , #{roleTyp}
+ , #{roleSort}
+ , SYSDATE)
+
+ </insert>
+
+ <update id="updateRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ UPDATE COMTNROLEINFO
+ SET ROLE_NM=#{roleNm}
+ , ROLE_PTTRN=#{rolePtn}
+ , ROLE_DC=#{roleDc}
+ , ROLE_TY=#{roleTyp}
+ , ROLE_SORT=#{roleSort}
+ , ROLE_CREAT_DE=SYSDATE
+ WHERE ROLE_CODE=#{roleCode}
+
+ </update>
+
+ <delete id="deleteRole">
+
+ DELETE FROM COMTNROLEINFO
+ WHERE ROLE_CODE=#{roleCode}
+
+ </delete>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectRoleAllList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE, ROLE_NM, ROLE_PTTRN, ROLE_DC, ROLE_TY, ROLE_SORT, ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="roleManageDAO">
+
+ <resultMap id="role" type="egovframework.com.sec.rmt.service.RoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="roleCreatDe" column="ROLE_CREAT_DE"/>
+ </resultMap>
+
+
+ <select id="selectRole" resultMap="role">
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE ROLE_CODE = #{roleCode}
+
+ </select>
+
+ <select id="selectRoleList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM029'
+ AND CODE = ROLE_TY) AS ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY ROLE_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ INSERT INTO COMTNROLEINFO
+ ( ROLE_CODE
+ , ROLE_NM
+ , ROLE_PTTRN
+ , ROLE_DC
+ , ROLE_TY
+ , ROLE_SORT
+ , ROLE_CREAT_DE )
+ VALUES ( #{roleCode}
+ , #{roleNm}
+ , #{rolePtn}
+ , #{roleDc}
+ , #{roleTyp}
+ , #{roleSort}
+ , TO_CHAR(NOW(), 'YYYY-mm-dd HH24:MI:SS'))
+
+ </insert>
+
+ <update id="updateRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ UPDATE COMTNROLEINFO
+ SET ROLE_NM=#{roleNm}
+ , ROLE_PTTRN=#{rolePtn}
+ , ROLE_DC=#{roleDc}
+ , ROLE_TY=#{roleTyp}
+ , ROLE_SORT=#{roleSort}
+ , ROLE_CREAT_DE=TO_CHAR(NOW(), 'YYYY-mm-dd HH24:MI:SS')
+ WHERE ROLE_CODE=#{roleCode}
+
+ </update>
+
+ <delete id="deleteRole">
+
+ DELETE FROM COMTNROLEINFO
+ WHERE ROLE_CODE=#{roleCode}
+
+ </delete>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectRoleAllList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE, ROLE_NM, ROLE_PTTRN, ROLE_DC, ROLE_TY, ROLE_SORT, ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="roleManageDAO">
+
+ <resultMap id="role" type="egovframework.com.sec.rmt.service.RoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="roleCreatDe" column="ROLE_CREAT_DE"/>
+ </resultMap>
+
+
+ <select id="selectRole" resultMap="role">
+
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE ROLE_CODE = #{roleCode}
+
+ </select>
+
+ <select id="selectRoleList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE,
+ ROLE_NM,
+ ROLE_PTTRN,
+ ROLE_DC,
+ (SELECT CODE_NM
+ FROM COMTCCMMNDETAILCODE
+ WHERE CODE_ID = 'COM029'
+ AND CODE = ROLE_TY) AS ROLE_TY,
+ ROLE_SORT,
+ ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY ROLE_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ INSERT INTO COMTNROLEINFO
+ ( ROLE_CODE
+ , ROLE_NM
+ , ROLE_PTTRN
+ , ROLE_DC
+ , ROLE_TY
+ , ROLE_SORT
+ , ROLE_CREAT_DE )
+ VALUES ( #{roleCode}
+ , #{roleNm}
+ , #{rolePtn}
+ , #{roleDc}
+ , #{roleTyp}
+ , #{roleSort}
+ , now())
+
+ </insert>
+
+ <update id="updateRole" parameterType="egovframework.com.sec.rmt.service.RoleManage">
+
+ UPDATE COMTNROLEINFO
+ SET ROLE_NM=#{roleNm}
+ , ROLE_PTTRN=#{rolePtn}
+ , ROLE_DC=#{roleDc}
+ , ROLE_TY=#{roleTyp}
+ , ROLE_SORT=#{roleSort}
+ , ROLE_CREAT_DE=now()
+ WHERE ROLE_CODE=#{roleCode}
+
+ </update>
+
+ <delete id="deleteRole">
+
+ DELETE FROM COMTNROLEINFO
+ WHERE ROLE_CODE=#{roleCode}
+
+ </delete>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ROLE_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectRoleAllList" parameterType="egovframework.com.sec.rmt.service.RoleManageVO" resultMap="role">
+ SELECT ROLE_CODE, ROLE_NM, ROLE_PTTRN, ROLE_DC, ROLE_TY, ROLE_SORT, ROLE_CREAT_DE
+ FROM COMTNROLEINFO
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/rmt/EgovRoleManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="groupManageDAO">
+
+ <resultMap id="group" type="egovframework.com.sec.gmt.service.GroupManageVO">
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="groupNm" column="GROUP_NM"/>
+ <result property="groupDc" column="GROUP_DC"/>
+ <result property="groupCreatDe" column="GROUP_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectGroup" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </select>
+
+ <select id="selectGroupList" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+
+ ORDER BY GROUP_CREAT_DE DESC
+ ) ALL_LIST
+ )
+ <![CDATA[
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <insert id="insertGroup">
+
+ INSERT INTO COMTNAUTHORGROUPINFO
+ ( GROUP_ID
+ , GROUP_NM
+ , GROUP_DC
+ , GROUP_CREAT_DE )
+ VALUES ( #{groupId}
+ , #{groupNm}
+ , #{groupDc}
+ , SYSDATE)
+
+ </insert>
+
+ <update id="updateGroup" parameterType="egovframework.com.sec.gmt.service.GroupManage">
+
+ UPDATE COMTNAUTHORGROUPINFO
+ SET GROUP_NM=#{groupNm}
+ , GROUP_DC=#{groupDc}
+ WHERE GROUP_ID=#{groupId}
+
+ </update>
+
+ <delete id="deleteGroup">
+
+ DELETE FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </delete>
+
+ <select id="selectGroupListTotCnt" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="groupManageDAO">
+
+ <resultMap id="group" type="egovframework.com.sec.gmt.service.GroupManageVO">
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="groupNm" column="GROUP_NM"/>
+ <result property="groupDc" column="GROUP_DC"/>
+ <result property="groupCreatDe" column="GROUP_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectGroup" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </select>
+
+ <select id="selectGroupList" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY GROUP_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertGroup">
+
+ INSERT INTO COMTNAUTHORGROUPINFO
+ ( GROUP_ID
+ , GROUP_NM
+ , GROUP_DC
+ , GROUP_CREAT_DE )
+ VALUES ( #{groupId}
+ , #{groupNm}
+ , #{groupDc}
+ , now())
+
+ </insert>
+
+ <update id="updateGroup" parameterType="egovframework.com.sec.gmt.service.GroupManage">
+
+ UPDATE COMTNAUTHORGROUPINFO
+ SET GROUP_NM=#{groupNm}
+ , GROUP_DC=#{groupDc}
+ , GROUP_CREAT_DE=now()
+ WHERE GROUP_ID=#{groupId}
+
+ </update>
+
+ <delete id="deleteGroup">
+
+ DELETE FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </delete>
+
+ <select id="selectGroupListTotCnt" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="groupManageDAO">
+
+ <resultMap id="group" type="egovframework.com.sec.gmt.service.GroupManageVO">
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="groupNm" column="GROUP_NM"/>
+ <result property="groupDc" column="GROUP_DC"/>
+ <result property="groupCreatDe" column="GROUP_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectGroup" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </select>
+
+ <select id="selectGroupList" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY GROUP_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertGroup">
+
+ INSERT INTO COMTNAUTHORGROUPINFO
+ ( GROUP_ID
+ , GROUP_NM
+ , GROUP_DC
+ , GROUP_CREAT_DE )
+ VALUES ( #{groupId}
+ , #{groupNm}
+ , #{groupDc}
+ , TO_CHAR(NOW(),'YYYY-mm-dd HH24:MI:SS') )
+
+ </insert>
+
+ <update id="updateGroup" parameterType="egovframework.com.sec.gmt.service.GroupManage">
+
+ UPDATE COMTNAUTHORGROUPINFO
+ SET GROUP_NM=#{groupNm}
+ , GROUP_DC=#{groupDc}
+ , GROUP_CREAT_DE=TO_CHAR(NOW(),'YYYY-mm-dd HH24:MI:SS')
+ WHERE GROUP_ID=#{groupId}
+
+ </update>
+
+ <delete id="deleteGroup">
+
+ DELETE FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </delete>
+
+ <select id="selectGroupListTotCnt" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="groupManageDAO">
+
+ <resultMap id="group" type="egovframework.com.sec.gmt.service.GroupManageVO">
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="groupNm" column="GROUP_NM"/>
+ <result property="groupDc" column="GROUP_DC"/>
+ <result property="groupCreatDe" column="GROUP_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectGroup" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </select>
+
+ <select id="selectGroupList" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY GROUP_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertGroup">
+
+ INSERT INTO COMTNAUTHORGROUPINFO
+ ( GROUP_ID
+ , GROUP_NM
+ , GROUP_DC
+ , GROUP_CREAT_DE )
+ VALUES ( #{groupId}
+ , #{groupNm}
+ , #{groupDc}
+ , now())
+
+ </insert>
+
+ <update id="updateGroup" parameterType="egovframework.com.sec.gmt.service.GroupManage">
+
+ UPDATE COMTNAUTHORGROUPINFO
+ SET GROUP_NM=#{groupNm}
+ , GROUP_DC=#{groupDc}
+ , GROUP_CREAT_DE=now()
+ WHERE GROUP_ID=#{groupId}
+
+ </update>
+
+ <delete id="deleteGroup">
+
+ DELETE FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </delete>
+
+ <select id="selectGroupListTotCnt" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="groupManageDAO">
+
+ <resultMap id="group" type="egovframework.com.sec.gmt.service.GroupManageVO">
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="groupNm" column="GROUP_NM"/>
+ <result property="groupDc" column="GROUP_DC"/>
+ <result property="groupCreatDe" column="GROUP_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectGroup" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </select>
+
+ <select id="selectGroupList" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+
+ ORDER BY GROUP_CREAT_DE DESC
+ ) ALL_LIST
+ ) Z
+ <![CDATA[
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <insert id="insertGroup">
+
+ INSERT INTO COMTNAUTHORGROUPINFO
+ ( GROUP_ID
+ , GROUP_NM
+ , GROUP_DC
+ , GROUP_CREAT_DE )
+ VALUES ( #{groupId}
+ , #{groupNm}
+ , #{groupDc}
+ , SYSDATETIME)
+
+ </insert>
+
+ <update id="updateGroup" parameterType="egovframework.com.sec.gmt.service.GroupManage">
+
+ UPDATE COMTNAUTHORGROUPINFO
+ SET GROUP_NM=#{groupNm}
+ , GROUP_DC=#{groupDc}
+ WHERE GROUP_ID=#{groupId}
+
+ </update>
+
+ <delete id="deleteGroup">
+
+ DELETE FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </delete>
+
+ <select id="selectGroupListTotCnt" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="groupManageDAO">
+
+ <resultMap id="group" type="egovframework.com.sec.gmt.service.GroupManageVO">
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="groupNm" column="GROUP_NM"/>
+ <result property="groupDc" column="GROUP_DC"/>
+ <result property="groupCreatDe" column="GROUP_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectGroup" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </select>
+
+ <select id="selectGroupList" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+
+ ORDER BY GROUP_CREAT_DE DESC
+ ) ALL_LIST
+ )
+ <![CDATA[
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <insert id="insertGroup">
+
+ INSERT INTO COMTNAUTHORGROUPINFO
+ ( GROUP_ID
+ , GROUP_NM
+ , GROUP_DC
+ , GROUP_CREAT_DE )
+ VALUES ( #{groupId}
+ , #{groupNm}
+ , #{groupDc}
+ , SYSDATE)
+
+ </insert>
+
+ <update id="updateGroup" parameterType="egovframework.com.sec.gmt.service.GroupManage">
+
+ UPDATE COMTNAUTHORGROUPINFO
+ SET GROUP_NM=#{groupNm}
+ , GROUP_DC=#{groupDc}
+ WHERE GROUP_ID=#{groupId}
+
+ </update>
+
+ <delete id="deleteGroup">
+
+ DELETE FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </delete>
+
+ <select id="selectGroupListTotCnt" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="groupManageDAO">
+
+ <resultMap id="group" type="egovframework.com.sec.gmt.service.GroupManageVO">
+ <result property="groupId" column="GROUP_ID"/>
+ <result property="groupNm" column="GROUP_NM"/>
+ <result property="groupDc" column="GROUP_DC"/>
+ <result property="groupCreatDe" column="GROUP_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectGroup" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </select>
+
+ <select id="selectGroupList" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultMap="group">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT GROUP_ID, GROUP_NM, GROUP_DC, GROUP_CREAT_DE
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+
+ ORDER BY GROUP_CREAT_DE DESC
+ ) ALL_LIST
+ )
+ <![CDATA[
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <insert id="insertGroup">
+
+ INSERT INTO COMTNAUTHORGROUPINFO
+ ( GROUP_ID
+ , GROUP_NM
+ , GROUP_DC
+ , GROUP_CREAT_DE )
+ VALUES ( #{groupId}
+ , #{groupNm}
+ , #{groupDc}
+ , TO_CHAR(SYSDATE, 'YYYYMMDD'))
+
+ </insert>
+
+ <update id="updateGroup" parameterType="egovframework.com.sec.gmt.service.GroupManage">
+
+ UPDATE COMTNAUTHORGROUPINFO
+ SET GROUP_NM=#{groupNm}
+ , GROUP_DC=#{groupDc}
+ WHERE GROUP_ID=#{groupId}
+
+ </update>
+
+ <delete id="deleteGroup">
+
+ DELETE FROM COMTNAUTHORGROUPINFO
+ WHERE GROUP_ID=#{groupId}
+
+ </delete>
+
+ <select id="selectGroupListTotCnt" parameterType="egovframework.com.sec.gmt.service.GroupManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORGROUPINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ GROUP_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/gmt/EgovGroupManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorManageDAO">
+
+ <resultMap id="author" type="egovframework.com.sec.ram.service.AuthorManageVO">
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="authorNm" column="AUTHOR_NM"/>
+ <result property="authorDc" column="AUTHOR_DC"/>
+ <result property="authorCreatDe" column="AUTHOR_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectAuthorList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY AUTHOR_CREAT_DE DESC
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <insert id="insertAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ INSERT INTO COMTNAUTHORINFO
+ ( AUTHOR_CODE
+ , AUTHOR_NM
+ , AUTHOR_DC
+ , AUTHOR_CREAT_DE )
+ VALUES ( #{authorCode}
+ , #{authorNm}
+ , #{authorDc}
+ , SYSDATE)
+
+ </insert>
+
+ <update id="updateAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ UPDATE COMTNAUTHORINFO
+ SET AUTHOR_NM=#{authorNm}
+ , AUTHOR_DC=#{authorDc}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </update>
+
+ <delete id="deleteAuthor">
+
+ DELETE FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthor" resultMap="author">
+
+ SELECT AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </select>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultType="int">
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectAuthorAllList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorRoleManageDAO">
+
+ <resultMap id="authorRole" type="egovframework.com.sec.ram.service.AuthorRoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <select id="selectAuthorRoleList" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultMap="authorRole">
+
+ SELECT A.ROLE_CODE,
+ A.ROLE_NM,
+ A.ROLE_PTTRN,
+ A.ROLE_DC,
+ A.ROLE_TY,
+ A.ROLE_SORT,
+ B.AUTHOR_CODE,
+ B.CREAT_DT,
+ (CASE WHEN B.ROLE_CODE IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectAuthorRoleListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ </select>
+
+ <insert id="insertAuthorRole" parameterType="egovframework.com.sec.ram.service.AuthorRoleManage">
+
+ INSERT INTO COMTNAUTHORROLERELATE
+ ( AUTHOR_CODE
+ , ROLE_CODE
+ , CREAT_DT)
+ VALUES ( #{authorCode}
+ , #{roleCode}
+ , NOW())
+
+ </insert>
+
+ <delete id="deleteAuthorRole">
+
+ DELETE FROM COMTNAUTHORROLERELATE
+ WHERE AUTHOR_CODE=#{authorCode}
+ AND ROLE_CODE=#{roleCode}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorManageDAO">
+
+ <resultMap id="author" type="egovframework.com.sec.ram.service.AuthorManageVO">
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="authorNm" column="AUTHOR_NM"/>
+ <result property="authorDc" column="AUTHOR_DC"/>
+ <result property="authorCreatDe" column="AUTHOR_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectAuthorList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY AUTHOR_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ INSERT INTO COMTNAUTHORINFO
+ ( AUTHOR_CODE
+ , AUTHOR_NM
+ , AUTHOR_DC
+ , AUTHOR_CREAT_DE )
+ VALUES ( #{authorCode}
+ , #{authorNm}
+ , #{authorDc}
+ , now())
+
+ </insert>
+
+ <update id="updateAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ UPDATE COMTNAUTHORINFO
+ SET AUTHOR_NM=#{authorNm}
+ , AUTHOR_DC=#{authorDc}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </update>
+
+ <delete id="deleteAuthor">
+
+ DELETE FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthor" resultMap="author">
+
+ SELECT AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </select>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultType="int">
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectAuthorAllList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorManageDAO">
+
+ <resultMap id="author" type="egovframework.com.sec.ram.service.AuthorManageVO">
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="authorNm" column="AUTHOR_NM"/>
+ <result property="authorDc" column="AUTHOR_DC"/>
+ <result property="authorCreatDe" column="AUTHOR_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectAuthorList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY AUTHOR_CREAT_DE DESC
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <insert id="insertAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ INSERT INTO COMTNAUTHORINFO
+ ( AUTHOR_CODE
+ , AUTHOR_NM
+ , AUTHOR_DC
+ , AUTHOR_CREAT_DE )
+ VALUES ( #{authorCode}
+ , #{authorNm}
+ , #{authorDc}
+ , SYSDATE)
+
+ </insert>
+
+ <update id="updateAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ UPDATE COMTNAUTHORINFO
+ SET AUTHOR_NM=#{authorNm}
+ , AUTHOR_DC=#{authorDc}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </update>
+
+ <delete id="deleteAuthor">
+
+ DELETE FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthor" resultMap="author">
+
+ SELECT AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </select>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultType="int">
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectAuthorAllList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorRoleManageDAO">
+
+ <resultMap id="authorRole" type="egovframework.com.sec.ram.service.AuthorRoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <select id="selectAuthorRoleList" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultMap="authorRole">
+<![CDATA[
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT A.ROLE_CODE,
+ A.ROLE_NM,
+ A.ROLE_PTTRN,
+ A.ROLE_DC,
+ A.ROLE_TY,
+ A.ROLE_SORT,
+ B.AUTHOR_CODE,
+ B.CREAT_DT,
+ (CASE WHEN B.ROLE_CODE IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+
+ ) ALL_LIST
+ ) Z
+
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+]]>
+ </select>
+
+ <select id="selectAuthorRoleListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ </select>
+
+ <insert id="insertAuthorRole" parameterType="egovframework.com.sec.ram.service.AuthorRoleManage">
+
+ INSERT INTO COMTNAUTHORROLERELATE
+ ( AUTHOR_CODE
+ , ROLE_CODE
+ , CREAT_DT)
+ VALUES ( #{authorCode}
+ , #{roleCode}
+ , SYSDATETIME)
+
+ </insert>
+
+ <delete id="deleteAuthorRole">
+
+ DELETE FROM COMTNAUTHORROLERELATE
+ WHERE AUTHOR_CODE=#{authorCode}
+ AND ROLE_CODE=#{roleCode}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorManageDAO">
+
+ <resultMap id="author" type="egovframework.com.sec.ram.service.AuthorManageVO">
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="authorNm" column="AUTHOR_NM"/>
+ <result property="authorDc" column="AUTHOR_DC"/>
+ <result property="authorCreatDe" column="AUTHOR_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectAuthorList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY AUTHOR_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ INSERT INTO COMTNAUTHORINFO
+ ( AUTHOR_CODE
+ , AUTHOR_NM
+ , AUTHOR_DC
+ , AUTHOR_CREAT_DE )
+ VALUES ( #{authorCode}
+ , #{authorNm}
+ , #{authorDc}
+ , now())
+
+ </insert>
+
+ <update id="updateAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ UPDATE COMTNAUTHORINFO
+ SET AUTHOR_NM=#{authorNm}
+ , AUTHOR_DC=#{authorDc}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </update>
+
+ <delete id="deleteAuthor">
+
+ DELETE FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthor" resultMap="author">
+
+ SELECT AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </select>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultType="int">
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectAuthorAllList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorRoleManageDAO">
+
+ <resultMap id="authorRole" type="egovframework.com.sec.ram.service.AuthorRoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <select id="selectAuthorRoleList" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultMap="authorRole">
+<![CDATA[
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT A.ROLE_CODE,
+ A.ROLE_NM,
+ A.ROLE_PTTRN,
+ A.ROLE_DC,
+ A.ROLE_TY,
+ A.ROLE_SORT,
+ B.AUTHOR_CODE,
+ B.CREAT_DT,
+ (CASE WHEN B.ROLE_CODE IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+
+ ) ALL_LIST
+ )
+
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+]]>
+ </select>
+
+ <select id="selectAuthorRoleListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ </select>
+
+ <insert id="insertAuthorRole" parameterType="egovframework.com.sec.ram.service.AuthorRoleManage">
+
+ INSERT INTO COMTNAUTHORROLERELATE
+ ( AUTHOR_CODE
+ , ROLE_CODE
+ , CREAT_DT)
+ VALUES ( #{authorCode}
+ , #{roleCode}
+ , SYSDATE)
+
+ </insert>
+
+ <delete id="deleteAuthorRole">
+
+ DELETE FROM COMTNAUTHORROLERELATE
+ WHERE AUTHOR_CODE=#{authorCode}
+ AND ROLE_CODE=#{roleCode}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorManageDAO">
+
+ <resultMap id="author" type="egovframework.com.sec.ram.service.AuthorManageVO">
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="authorNm" column="AUTHOR_NM"/>
+ <result property="authorDc" column="AUTHOR_DC"/>
+ <result property="authorCreatDe" column="AUTHOR_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectAuthorList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ ORDER BY AUTHOR_CREAT_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <insert id="insertAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ INSERT INTO COMTNAUTHORINFO
+ ( AUTHOR_CODE
+ , AUTHOR_NM
+ , AUTHOR_DC
+ , AUTHOR_CREAT_DE )
+ VALUES ( #{authorCode}
+ , #{authorNm}
+ , #{authorDc}
+ , TO_CHAR(now(), 'YYYY-mm-dd HH24:MI:SS'))
+
+ </insert>
+
+ <update id="updateAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ UPDATE COMTNAUTHORINFO
+ SET AUTHOR_NM=#{authorNm}
+ , AUTHOR_DC=#{authorDc}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </update>
+
+ <delete id="deleteAuthor">
+
+ DELETE FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthor" resultMap="author">
+
+ SELECT AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </select>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultType="int">
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectAuthorAllList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorRoleManageDAO">
+
+ <resultMap id="authorRole" type="egovframework.com.sec.ram.service.AuthorRoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <select id="selectAuthorRoleList" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultMap="authorRole">
+
+ SELECT A.ROLE_CODE,
+ A.ROLE_NM,
+ A.ROLE_PTTRN,
+ A.ROLE_DC,
+ A.ROLE_TY,
+ A.ROLE_SORT,
+ B.AUTHOR_CODE,
+ B.CREAT_DT,
+ (CASE WHEN B.ROLE_CODE IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectAuthorRoleListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ </select>
+
+ <insert id="insertAuthorRole" parameterType="egovframework.com.sec.ram.service.AuthorRoleManage">
+
+ INSERT INTO COMTNAUTHORROLERELATE
+ ( AUTHOR_CODE
+ , ROLE_CODE
+ , CREAT_DT)
+ VALUES ( #{authorCode}
+ , #{roleCode}
+ , now())
+
+ </insert>
+
+ <delete id="deleteAuthorRole">
+
+ DELETE FROM COMTNAUTHORROLERELATE
+ WHERE AUTHOR_CODE=#{authorCode}
+ AND ROLE_CODE=#{roleCode}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorRoleManageDAO">
+
+ <resultMap id="authorRole" type="egovframework.com.sec.ram.service.AuthorRoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <select id="selectAuthorRoleList" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultMap="authorRole">
+<![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT A.ROLE_CODE,
+ A.ROLE_NM,
+ A.ROLE_PTTRN,
+ A.ROLE_DC,
+ A.ROLE_TY,
+ A.ROLE_SORT,
+ B.AUTHOR_CODE,
+ B.CREAT_DT,
+ (CASE WHEN B.ROLE_CODE IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+
+ ) ALL_LIST
+ )
+
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+]]>
+ </select>
+
+ <select id="selectAuthorRoleListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ </select>
+
+ <insert id="insertAuthorRole" parameterType="egovframework.com.sec.ram.service.AuthorRoleManage">
+
+ INSERT INTO COMTNAUTHORROLERELATE
+ ( AUTHOR_CODE
+ , ROLE_CODE
+ , CREAT_DT)
+ VALUES ( #{authorCode}
+ , #{roleCode}
+ , SYSDATE)
+
+ </insert>
+
+ <delete id="deleteAuthorRole">
+
+ DELETE FROM COMTNAUTHORROLERELATE
+ WHERE AUTHOR_CODE=#{authorCode}
+ AND ROLE_CODE=#{roleCode}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorManageDAO">
+
+ <resultMap id="author" type="egovframework.com.sec.ram.service.AuthorManageVO">
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="authorNm" column="AUTHOR_NM"/>
+ <result property="authorDc" column="AUTHOR_DC"/>
+ <result property="authorCreatDe" column="AUTHOR_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectAuthorList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY AUTHOR_CREAT_DE DESC
+
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <insert id="insertAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ INSERT INTO COMTNAUTHORINFO
+ ( AUTHOR_CODE
+ , AUTHOR_NM
+ , AUTHOR_DC
+ , AUTHOR_CREAT_DE )
+ VALUES ( #{authorCode}
+ , #{authorNm}
+ , #{authorDc}
+ , SYSDATETIME)
+
+ </insert>
+
+ <update id="updateAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ UPDATE COMTNAUTHORINFO
+ SET AUTHOR_NM=#{authorNm}
+ , AUTHOR_DC=#{authorDc}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </update>
+
+ <delete id="deleteAuthor">
+
+ DELETE FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthor" resultMap="author">
+
+ SELECT AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </select>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultType="int">
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectAuthorAllList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorManageDAO">
+
+ <resultMap id="author" type="egovframework.com.sec.ram.service.AuthorManageVO">
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="authorNm" column="AUTHOR_NM"/>
+ <result property="authorDc" column="AUTHOR_DC"/>
+ <result property="authorCreatDe" column="AUTHOR_CREAT_DE"/>
+ </resultMap>
+
+ <select id="selectAuthorList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY AUTHOR_CREAT_DE DESC
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <insert id="insertAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ INSERT INTO COMTNAUTHORINFO
+ ( AUTHOR_CODE
+ , AUTHOR_NM
+ , AUTHOR_DC
+ , AUTHOR_CREAT_DE )
+ VALUES ( #{authorCode}
+ , #{authorNm}
+ , #{authorDc}
+ , SYSDATE)
+
+ </insert>
+
+ <update id="updateAuthor" parameterType="egovframework.com.sec.ram.service.AuthorManage">
+
+ UPDATE COMTNAUTHORINFO
+ SET AUTHOR_NM=#{authorNm}
+ , AUTHOR_DC=#{authorDc}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </update>
+
+ <delete id="deleteAuthor">
+
+ DELETE FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthor" resultMap="author">
+
+ SELECT AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </select>
+
+ <select id="selectAuthorListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultType="int">
+ SELECT COUNT(*) totcnt
+ FROM COMTNAUTHORINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ AUTHOR_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectAuthorAllList" parameterType="egovframework.com.sec.ram.service.AuthorManageVO" resultMap="author">
+ SELECT
+ AUTHOR_CODE, AUTHOR_NM, AUTHOR_DC, AUTHOR_CREAT_DE
+ FROM COMTNAUTHORINFO
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorRoleManageDAO">
+
+ <resultMap id="authorRole" type="egovframework.com.sec.ram.service.AuthorRoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <select id="selectAuthorRoleList" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultMap="authorRole">
+
+ SELECT A.ROLE_CODE,
+ A.ROLE_NM,
+ A.ROLE_PTTRN,
+ A.ROLE_DC,
+ A.ROLE_TY,
+ A.ROLE_SORT,
+ B.AUTHOR_CODE,
+ B.CREAT_DT,
+ (CASE WHEN B.ROLE_CODE IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectAuthorRoleListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ </select>
+
+ <insert id="insertAuthorRole" parameterType="egovframework.com.sec.ram.service.AuthorRoleManage">
+
+ INSERT INTO COMTNAUTHORROLERELATE
+ ( AUTHOR_CODE
+ , ROLE_CODE
+ , CREAT_DT)
+ VALUES ( #{authorCode}
+ , #{roleCode}
+ , now())
+
+ </insert>
+
+ <delete id="deleteAuthorRole">
+
+ DELETE FROM COMTNAUTHORROLERELATE
+ WHERE AUTHOR_CODE=#{authorCode}
+ AND ROLE_CODE=#{roleCode}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="authorRoleManageDAO">
+
+ <resultMap id="authorRole" type="egovframework.com.sec.ram.service.AuthorRoleManageVO">
+ <result property="roleCode" column="ROLE_CODE"/>
+ <result property="roleNm" column="ROLE_NM"/>
+ <result property="rolePtn" column="ROLE_PTTRN"/>
+ <result property="roleDc" column="ROLE_DC"/>
+ <result property="roleTyp" column="ROLE_TY"/>
+ <result property="roleSort" column="ROLE_SORT"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="regYn" column="REG_YN"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <select id="selectAuthorRoleList" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultMap="authorRole">
+<![CDATA[
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT A.ROLE_CODE,
+ A.ROLE_NM,
+ A.ROLE_PTTRN,
+ A.ROLE_DC,
+ A.ROLE_TY,
+ A.ROLE_SORT,
+ B.AUTHOR_CODE,
+ B.CREAT_DT,
+ (CASE WHEN B.ROLE_CODE IS NULL THEN 'N'
+ ELSE 'Y'
+ END) AS REG_YN
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+
+ ) ALL_LIST
+ )
+
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+]]>
+ </select>
+
+ <select id="selectAuthorRoleListTotCnt" parameterType="egovframework.com.sec.ram.service.AuthorRoleManageVO" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNROLEINFO A
+ LEFT OUTER JOIN (SELECT AUTHOR_CODE , ROLE_CODE, CREAT_DT FROM COMTNAUTHORROLERELATE WHERE AUTHOR_CODE = #{searchKeyword}) B
+ ON A.ROLE_CODE = B.ROLE_CODE
+ </select>
+
+ <insert id="insertAuthorRole" parameterType="egovframework.com.sec.ram.service.AuthorRoleManage">
+
+ INSERT INTO COMTNAUTHORROLERELATE
+ ( AUTHOR_CODE
+ , ROLE_CODE
+ , CREAT_DT)
+ VALUES ( #{authorCode}
+ , #{roleCode}
+ , SYSDATE)
+
+ </insert>
+
+ <delete id="deleteAuthorRole">
+
+ DELETE FROM COMTNAUTHORROLERELATE
+ WHERE AUTHOR_CODE=#{authorCode}
+ AND ROLE_CODE=#{roleCode}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sec/ram/EgovAuthorRoleManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_tibero.xml (revision 7)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmUseDAO">
+
+ <resultMap id="CmmCodeDetail" type="egovframework.com.cmm.service.CmmnDetailCode">
+ <result property="codeId" column="CODE_ID"/>
+ <result property="code" column="CODE"/>
+ <result property="codeNm" column="CODE_NM"/>
+ <result property="codeDc" column="CODE_DC"/>
+ </resultMap>
+
+ <select id="selectCmmCodeDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ CODE_ID, CODE, CODE_NM, CODE_DC
+ FROM
+ COMTCCMMNDETAILCODE
+ WHERE
+ USE_AT = 'Y'
+ AND CODE_ID = #{codeId}
+
+ </select>
+
+ <select id="selectOgrnztIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ ORGNZT_ID CODE,
+ ORGNZT_NM CODE_NM,
+ ORGNZT_DC CODE_DC
+ FROM
+ COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ ORGNZT_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+ <select id="selectGroupIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ GROUP_ID CODE,
+ GROUP_NM CODE_NM,
+ GROUP_DC CODE_DC
+ FROM
+ COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ GROUP_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_postgres.xml (revision 7)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmUseDAO">
+
+ <resultMap id="CmmCodeDetail" type="egovframework.com.cmm.service.CmmnDetailCode">
+ <result property="codeId" column="CODE_ID"/>
+ <result property="code" column="CODE"/>
+ <result property="codeNm" column="CODE_NM"/>
+ <result property="codeDc" column="CODE_DC"/>
+ </resultMap>
+
+ <select id="selectCmmCodeDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ CODE_ID, CODE, CODE_NM, CODE_DC
+ FROM
+ COMTCCMMNDETAILCODE
+ WHERE
+ USE_AT = 'Y'
+ AND CODE_ID = #{codeId}
+
+ </select>
+
+ <select id="selectOgrnztIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ ORGNZT_ID CODE,
+ ORGNZT_NM CODE_NM,
+ ORGNZT_DC CODE_DC
+ FROM
+ COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ ORGNZT_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+ <select id="selectGroupIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ GROUP_ID CODE,
+ GROUP_NM CODE_NM,
+ GROUP_DC CODE_DC
+ FROM
+ COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ GROUP_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_mysql.xml (revision 7)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmUseDAO">
+
+ <resultMap id="CmmCodeDetail" type="egovframework.com.cmm.service.CmmnDetailCode">
+ <result property="codeId" column="CODE_ID"/>
+ <result property="code" column="CODE"/>
+ <result property="codeNm" column="CODE_NM"/>
+ <result property="codeDc" column="CODE_DC"/>
+ </resultMap>
+
+ <select id="selectCmmCodeDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ CODE_ID, CODE, CODE_NM, CODE_DC
+ FROM
+ COMTCCMMNDETAILCODE
+ WHERE
+ USE_AT = 'Y'
+ AND CODE_ID = #{codeId}
+
+ </select>
+
+ <select id="selectOgrnztIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ ORGNZT_ID CODE,
+ ORGNZT_NM CODE_NM,
+ ORGNZT_DC CODE_DC
+ FROM
+ COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ ORGNZT_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+ <select id="selectGroupIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ GROUP_ID CODE,
+ GROUP_NM CODE_NM,
+ GROUP_DC CODE_DC
+ FROM
+ COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ GROUP_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmUseDAO">
+
+ <resultMap id="CmmCodeDetail" type="egovframework.com.cmm.service.CmmnDetailCode">
+ <result property="codeId" column="CODE_ID"/>
+ <result property="code" column="CODE"/>
+ <result property="codeNm" column="CODE_NM"/>
+ <result property="codeDc" column="CODE_DC"/>
+ </resultMap>
+
+ <select id="selectCmmCodeDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ CODE_ID, CODE, CODE_NM, CODE_DC
+ FROM
+ COMTCCMMNDETAILCODE
+ WHERE
+ USE_AT = 'Y'
+ AND CODE_ID = #{codeId}
+
+ </select>
+
+ <select id="selectOgrnztIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ ORGNZT_ID CODE,
+ ORGNZT_NM CODE_NM,
+ ORGNZT_DC CODE_DC
+ FROM
+ COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ ORGNZT_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+ <select id="selectGroupIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ GROUP_ID CODE,
+ GROUP_NM CODE_NM,
+ GROUP_DC CODE_DC
+ FROM
+ COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ GROUP_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_oracle.xml (revision 7)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmUseDAO">
+
+ <resultMap id="CmmCodeDetail" type="egovframework.com.cmm.service.CmmnDetailCode">
+ <result property="codeId" column="CODE_ID"/>
+ <result property="code" column="CODE"/>
+ <result property="codeNm" column="CODE_NM"/>
+ <result property="codeDc" column="CODE_DC"/>
+ </resultMap>
+
+ <select id="selectCmmCodeDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ CODE_ID, CODE, CODE_NM, CODE_DC
+ FROM
+ COMTCCMMNDETAILCODE
+ WHERE
+ USE_AT = 'Y'
+ AND CODE_ID = #{codeId}
+
+ </select>
+
+ <select id="selectOgrnztIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ ORGNZT_ID CODE,
+ ORGNZT_NM CODE_NM,
+ ORGNZT_DC CODE_DC
+ FROM
+ COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ ORGNZT_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+ <select id="selectGroupIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ GROUP_ID CODE,
+ GROUP_NM CODE_NM,
+ GROUP_DC CODE_DC
+ FROM
+ COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ GROUP_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_maria.xml (revision 7)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmUseDAO">
+
+ <resultMap id="CmmCodeDetail" type="egovframework.com.cmm.service.CmmnDetailCode">
+ <result property="codeId" column="CODE_ID"/>
+ <result property="code" column="CODE"/>
+ <result property="codeNm" column="CODE_NM"/>
+ <result property="codeDc" column="CODE_DC"/>
+ </resultMap>
+
+ <select id="selectCmmCodeDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ CODE_ID, CODE, CODE_NM, CODE_DC
+ FROM
+ COMTCCMMNDETAILCODE
+ WHERE
+ USE_AT = 'Y'
+ AND CODE_ID = #{codeId}
+
+ </select>
+
+ <select id="selectOgrnztIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ ORGNZT_ID CODE,
+ ORGNZT_NM CODE_NM,
+ ORGNZT_DC CODE_DC
+ FROM
+ COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ ORGNZT_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+ <select id="selectGroupIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ SELECT
+ #{tableNm} CODE_ID,
+ GROUP_ID CODE,
+ GROUP_NM CODE_NM,
+ GROUP_DC CODE_DC
+ FROM
+ COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ <if test='haveDetailCondition == "Y"'>AND
+ GROUP_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_altibase.xml (revision 7)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmUseDAO">
+
+ <resultMap id="CmmCodeDetail" type="egovframework.com.cmm.service.CmmnDetailCode">
+ <result property="codeId" column="CODE_ID"/>
+ <result property="code" column="CODE"/>
+ <result property="codeNm" column="CODE_NM"/>
+ <result property="codeDc" column="CODE_DC"/>
+ </resultMap>
+
+ <select id="selectCmmCodeDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+
+
+ SELECT
+ CODE_ID, CODE, CODE_NM, CODE_DC
+ FROM
+ COMTCCMMNDETAILCODE
+ WHERE
+ USE_AT = 'Y'
+ AND CODE_ID = #{codeId}
+
+ </select>
+
+ <select id="selectOgrnztIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ <if test="tableNm == 'COMTNORGNZTINFO'">
+
+ SELECT
+ 'COMTNORGNZTINFO' CODE_ID,
+ ORGNZT_ID CODE,
+ ORGNZT_NM CODE_NM,
+ ORGNZT_DC CODE_DC
+ FROM
+ COMTNORGNZTINFO
+ WHERE 1=1
+
+ </if>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(haveDetailCondition,'Y')">
+ AND ORGNZT_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+ <select id="selectGroupIdDetail" parameterType="ComDefaultCodeVO" resultMap="CmmCodeDetail">
+
+ <if test="tableNm == 'COMTNORGNZTINFO'">
+
+ SELECT
+ 'COMTNORGNZTINFO' CODE_ID,
+ GROUP_ID CODE,
+ GROUP_NM CODE_NM,
+ GROUP_DC CODE_DC
+ FROM
+ COMTNAUTHORGROUPINFO
+ WHERE 1=1
+
+ </if>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(haveDetailCondition,'Y')">
+ AND GROUP_ID LIKE #{detailConditionValue}
+ </if>
+ </select>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/use/EgovCmmUse_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_mysql.xml (revision 7)
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="FileManageDAO">
+
+ <resultMap id="fileList" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <resultMap id="fileDetail" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ </resultMap>
+
+
+ <select id="selectFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+ <insert id="insertFileMaster" parameterType="FileVO">
+
+ INSERT INTO COMTNFILE
+ (ATCH_FILE_ID, CREAT_DT, USE_AT)
+ VALUES
+ ( #{atchFileId}, SYSDATE(), 'Y')
+
+ </insert>
+
+ <insert id="insertFileDetail" parameterType="FileVO">
+
+ INSERT INTO COMTNFILEDETAIL
+ ( ATCH_FILE_ID, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ ORIGNL_FILE_NM, FILE_EXTSN, FILE_SIZE, FILE_CN )
+ VALUES
+ ( #{atchFileId}, #{fileSn}, #{fileStreCours}, #{streFileNm},
+ #{orignlFileNm}, #{fileExtsn}, #{fileMg}, #{fileCn} )
+
+ </insert>
+
+ <delete id="deleteFileDetail" parameterType="FileVO">
+
+ DELETE FROM COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </delete>
+
+ <select id="getMaxFileSN" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT IFNULL(MAX(FILE_SN),0)+1 AS FILE_SN
+ FROM COMTNFILEDETAIL
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </select>
+
+ <select id="selectFileInf" parameterType="FileVO" resultMap="fileDetail">
+
+ SELECT
+ ATCH_FILE_ID, FILE_CN, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ FILE_EXTSN, ORIGNL_FILE_NM, FILE_SIZE
+ FROM
+ COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </select>
+
+ <update id="deleteCOMTNFILE" parameterType="FileVO">
+
+ UPDATE COMTNFILE
+ SET USE_AT = 'N'
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </update>
+
+ <select id="selectFileListByFileNm" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.ATCH_FILE_ID, b.FILE_SN
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectFileListCntByFileNm" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ATCH_FILE_ID)
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectImageFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ UPPER(b.FILE_EXTSN) IN ('GIF','JPG','BMP','PNG')
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="FileManageDAO">
+
+ <resultMap id="fileList" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <resultMap id="fileDetail" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ </resultMap>
+
+
+ <select id="selectFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+ <insert id="insertFileMaster" parameterType="FileVO">
+
+ INSERT INTO COMTNFILE
+ (ATCH_FILE_ID, CREAT_DT, USE_AT)
+ VALUES
+ ( #{atchFileId}, SYSDATETIME, 'Y')
+
+ </insert>
+
+ <insert id="insertFileDetail" parameterType="FileVO">
+
+ INSERT INTO COMTNFILEDETAIL
+ ( ATCH_FILE_ID, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ ORIGNL_FILE_NM, FILE_EXTSN, FILE_SIZE, FILE_CN )
+ VALUES
+ ( #{atchFileId}, #{fileSn}, #{fileStreCours}, #{streFileNm},
+ #{orignlFileNm}, #{fileExtsn}, #{fileMg}, #{fileCn} )
+
+ </insert>
+
+ <delete id="deleteFileDetail" parameterType="FileVO">
+
+ DELETE FROM COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </delete>
+
+ <select id="getMaxFileSN" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(FILE_SN),0)+1 AS FILE_SN
+ FROM COMTNFILEDETAIL
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </select>
+
+ <select id="selectFileInf" parameterType="FileVO" resultMap="fileDetail">
+
+ SELECT
+ ATCH_FILE_ID, FILE_CN, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ FILE_EXTSN, ORIGNL_FILE_NM, FILE_SIZE
+ FROM
+ COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </select>
+
+ <update id="deleteCOMTNFILE" parameterType="FileVO">
+
+ UPDATE COMTNFILE
+ SET USE_AT = 'N'
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </update>
+
+ <select id="selectFileListByFileNm" parameterType="FileVO" resultMap="fileList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.ATCH_FILE_ID, b.FILE_SN
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectFileListCntByFileNm" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ATCH_FILE_ID)
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectImageFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ UPPER(b.FILE_EXTSN) IN ('GIF','JPG','BMP','PNG')
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_oracle.xml (revision 7)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="FileManageDAO">
+
+ <resultMap id="fileList" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <resultMap id="fileDetail" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ </resultMap>
+
+
+ <select id="selectFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+ <insert id="insertFileMaster" parameterType="FileVO">
+
+ INSERT INTO COMTNFILE
+ (ATCH_FILE_ID, CREAT_DT, USE_AT)
+ VALUES
+ ( #{atchFileId}, SYSDATE, 'Y')
+
+ </insert>
+
+ <insert id="insertFileDetail" parameterType="FileVO">
+
+ INSERT INTO COMTNFILEDETAIL
+ ( ATCH_FILE_ID, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ ORIGNL_FILE_NM, FILE_EXTSN, FILE_SIZE, FILE_CN )
+ VALUES
+ ( #{atchFileId}, #{fileSn}, #{fileStreCours}, #{streFileNm},
+ #{orignlFileNm}, #{fileExtsn}, #{fileMg}, #{fileCn} )
+
+ </insert>
+
+ <delete id="deleteFileDetail" parameterType="FileVO">
+
+ DELETE FROM COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </delete>
+
+ <select id="getMaxFileSN" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(FILE_SN),0)+1 AS FILE_SN
+ FROM COMTNFILEDETAIL
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </select>
+
+ <select id="selectFileInf" parameterType="FileVO" resultMap="fileDetail">
+
+ SELECT
+ ATCH_FILE_ID, FILE_CN, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ FILE_EXTSN, ORIGNL_FILE_NM, FILE_SIZE
+ FROM
+ COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </select>
+
+ <update id="deleteCOMTNFILE" parameterType="FileVO">
+
+ UPDATE COMTNFILE
+ SET USE_AT = 'N'
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </update>
+
+ <select id="selectFileListByFileNm" parameterType="FileVO" resultMap="fileList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.ATCH_FILE_ID, b.FILE_SN
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectFileListCntByFileNm" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ATCH_FILE_ID)
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectImageFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ UPPER(b.FILE_EXTSN) IN ('GIF','JPG','BMP','PNG')
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_maria.xml (revision 7)
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="FileManageDAO">
+
+ <resultMap id="fileList" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <resultMap id="fileDetail" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ </resultMap>
+
+
+ <select id="selectFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+ <insert id="insertFileMaster" parameterType="FileVO">
+
+ INSERT INTO COMTNFILE
+ (ATCH_FILE_ID, CREAT_DT, USE_AT)
+ VALUES
+ ( #{atchFileId}, SYSDATE(), 'Y')
+
+ </insert>
+
+ <insert id="insertFileDetail" parameterType="FileVO">
+
+ INSERT INTO COMTNFILEDETAIL
+ ( ATCH_FILE_ID, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ ORIGNL_FILE_NM, FILE_EXTSN, FILE_SIZE, FILE_CN )
+ VALUES
+ ( #{atchFileId}, #{fileSn}, #{fileStreCours}, #{streFileNm},
+ #{orignlFileNm}, #{fileExtsn}, #{fileMg}, #{fileCn} )
+
+ </insert>
+
+ <delete id="deleteFileDetail" parameterType="FileVO">
+
+ DELETE FROM COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </delete>
+
+ <select id="getMaxFileSN" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT IFNULL(MAX(FILE_SN),0)+1 AS FILE_SN
+ FROM COMTNFILEDETAIL
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </select>
+
+ <select id="selectFileInf" parameterType="FileVO" resultMap="fileDetail">
+
+ SELECT
+ ATCH_FILE_ID, FILE_CN, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ FILE_EXTSN, ORIGNL_FILE_NM, FILE_SIZE
+ FROM
+ COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </select>
+
+ <update id="deleteCOMTNFILE" parameterType="FileVO">
+
+ UPDATE COMTNFILE
+ SET USE_AT = 'N'
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </update>
+
+ <select id="selectFileListByFileNm" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.ATCH_FILE_ID, b.FILE_SN
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectFileListCntByFileNm" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ATCH_FILE_ID)
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectImageFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ UPPER(b.FILE_EXTSN) IN ('GIF','JPG','BMP','PNG')
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_altibase.xml (revision 7)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="FileManageDAO">
+
+ <resultMap id="fileList" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <resultMap id="fileDetail" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ </resultMap>
+
+
+ <select id="selectFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+ <insert id="insertFileMaster" parameterType="FileVO">
+
+ INSERT INTO COMTNFILE
+ (ATCH_FILE_ID, CREAT_DT, USE_AT)
+ VALUES
+ ( #{atchFileId}, SYSDATE, 'Y')
+
+ </insert>
+
+ <insert id="insertFileDetail" parameterType="FileVO">
+
+ INSERT INTO COMTNFILEDETAIL
+ ( ATCH_FILE_ID, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ ORIGNL_FILE_NM, FILE_EXTSN, FILE_SIZE, FILE_CN )
+ VALUES
+ ( #{atchFileId}, #{fileSn}, #{fileStreCours}, #{streFileNm},
+ #{orignlFileNm}, #{fileExtsn}, #{fileMg}, #{fileCn} )
+
+ </insert>
+
+ <delete id="deleteFileDetail" parameterType="FileVO">
+
+ DELETE FROM COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </delete>
+
+ <select id="getMaxFileSN" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(FILE_SN),0)+1 AS FILE_SN
+ FROM COMTNFILEDETAIL
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </select>
+
+ <select id="selectFileInf" parameterType="FileVO" resultMap="fileDetail">
+
+ SELECT
+ ATCH_FILE_ID, FILE_CN, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ FILE_EXTSN, ORIGNL_FILE_NM, FILE_SIZE
+ FROM
+ COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </select>
+
+ <update id="deleteCOMTNFILE" parameterType="FileVO">
+
+ UPDATE COMTNFILE
+ SET USE_AT = 'N'
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </update>
+
+ <select id="selectFileListByFileNm" parameterType="FileVO" resultMap="fileList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.ATCH_FILE_ID, b.FILE_SN
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectFileListCntByFileNm" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ATCH_FILE_ID) as cnt
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectImageFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ UPPER(b.FILE_EXTSN) IN ('GIF','JPG','BMP','PNG')
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_tibero.xml (revision 7)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="FileManageDAO">
+
+ <resultMap id="fileList" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <resultMap id="fileDetail" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ </resultMap>
+
+
+ <select id="selectFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+ <insert id="insertFileMaster" parameterType="FileVO">
+
+ INSERT INTO COMTNFILE
+ (ATCH_FILE_ID, CREAT_DT, USE_AT)
+ VALUES
+ ( #{atchFileId}, SYSDATE, 'Y')
+
+ </insert>
+
+ <insert id="insertFileDetail" parameterType="FileVO">
+
+ INSERT INTO COMTNFILEDETAIL
+ ( ATCH_FILE_ID, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ ORIGNL_FILE_NM, FILE_EXTSN, FILE_SIZE, FILE_CN )
+ VALUES
+ ( #{atchFileId}, #{fileSn}, #{fileStreCours}, #{streFileNm},
+ #{orignlFileNm}, #{fileExtsn}, #{fileMg}, #{fileCn} )
+
+ </insert>
+
+ <delete id="deleteFileDetail" parameterType="FileVO">
+
+ DELETE FROM COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </delete>
+
+ <select id="getMaxFileSN" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(FILE_SN),0)+1 AS FILE_SN
+ FROM COMTNFILEDETAIL
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </select>
+
+ <select id="selectFileInf" parameterType="FileVO" resultMap="fileDetail">
+
+ SELECT
+ ATCH_FILE_ID, FILE_CN, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ FILE_EXTSN, ORIGNL_FILE_NM, FILE_SIZE
+ FROM
+ COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = #{fileSn}
+
+ </select>
+
+ <update id="deleteCOMTNFILE" parameterType="FileVO">
+
+ UPDATE COMTNFILE
+ SET USE_AT = 'N'
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </update>
+
+ <select id="selectFileListByFileNm" parameterType="FileVO" resultMap="fileList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.ATCH_FILE_ID, b.FILE_SN
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectFileListCntByFileNm" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ATCH_FILE_ID)
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectImageFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ UPPER(b.FILE_EXTSN) IN ('GIF','JPG','BMP','PNG')
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_postgres.xml (revision 7)
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:38 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="FileManageDAO">
+
+ <resultMap id="fileList" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ </resultMap>
+
+ <resultMap id="fileDetail" type="egovframework.com.cmm.service.FileVO">
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="fileCn" column="FILE_CN"/>
+ <result property="fileExtsn" column="FILE_EXTSN"/>
+ <result property="fileMg" column="FILE_SIZE"/>
+ <result property="fileSn" column="FILE_SN"/>
+ <result property="fileStreCours" column="FILE_STRE_COURS"/>
+ <result property="orignlFileNm" column="ORIGNL_FILE_NM"/>
+ <result property="streFileNm" column="STRE_FILE_NM"/>
+ </resultMap>
+
+
+ <select id="selectFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+ <insert id="insertFileMaster" parameterType="FileVO">
+
+ INSERT INTO COMTNFILE
+ (ATCH_FILE_ID, CREAT_DT, USE_AT)
+ VALUES
+ ( #{atchFileId}, NOW(), 'Y')
+
+ </insert>
+
+ <insert id="insertFileDetail" parameterType="FileVO">
+
+ INSERT INTO COMTNFILEDETAIL
+ ( ATCH_FILE_ID, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ ORIGNL_FILE_NM, FILE_EXTSN, FILE_SIZE, FILE_CN )
+ VALUES
+ ( #{atchFileId}, CAST(#{fileSn} AS NUMERIC), #{fileStreCours}, #{streFileNm},
+ #{orignlFileNm}, #{fileExtsn}, CAST(#{fileMg} AS NUMERIC), #{fileCn} )
+
+ </insert>
+
+ <delete id="deleteFileDetail" parameterType="FileVO">
+
+ DELETE FROM COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = CAST(#{fileSn} AS NUMERIC)
+
+ </delete>
+
+ <select id="getMaxFileSN" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT COALESCE(MAX(FILE_SN),0)+1 AS FILE_SN
+ FROM COMTNFILEDETAIL
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </select>
+
+ <select id="selectFileInf" parameterType="FileVO" resultMap="fileDetail">
+
+ SELECT
+ ATCH_FILE_ID, FILE_CN, FILE_SN, FILE_STRE_COURS, STRE_FILE_NM,
+ FILE_EXTSN, ORIGNL_FILE_NM, FILE_SIZE
+ FROM
+ COMTNFILEDETAIL
+ WHERE
+ ATCH_FILE_ID = #{atchFileId}
+ AND
+ FILE_SN = CAST(#{fileSn} AS NUMERIC)
+
+ </select>
+
+ <update id="deleteCOMTNFILE" parameterType="FileVO">
+
+ UPDATE COMTNFILE
+ SET USE_AT = 'N'
+ WHERE ATCH_FILE_ID = #{atchFileId}
+
+ </update>
+
+ <select id="selectFileListByFileNm" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.ATCH_FILE_ID, b.FILE_SN
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectFileListCntByFileNm" parameterType="FileVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ATCH_FILE_ID)
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ a.USE_AT = 'Y'
+
+ <if test="searchCnd == 'streFileNm'">AND
+ b.STRE_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 'orignlFileNm'">AND
+ b.ORIGNL_FILE_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectImageFileList" parameterType="FileVO" resultMap="fileList">
+
+ SELECT
+ a.ATCH_FILE_ID, b.FILE_CN, b.FILE_SN, b.FILE_STRE_COURS, b.STRE_FILE_NM,
+ b.FILE_EXTSN, b.ORIGNL_FILE_NM, b.FILE_SIZE, a.CREAT_DT
+ FROM
+ COMTNFILE a, COMTNFILEDETAIL b
+ WHERE
+ a.ATCH_FILE_ID = #{atchFileId}
+ AND
+ a.ATCH_FILE_ID = b.ATCH_FILE_ID
+ AND
+ UPPER(b.FILE_EXTSN) IN ('GIF','JPG','BMP','PNG')
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY b.FILE_SN
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cmm/fms/EgovFile_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_tibero.xml (revision 7)
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:51 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="EgovUserInfManageDAO">
+
+ <resultMap id="UserInfs" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ </resultMap>
+
+ <resultMap id="UserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="deletedAt" column="DELETED_AT"/>
+ </resultMap>
+
+ <resultMap id="AllUserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="trgetId" column="TRGET_ID"/>
+ </resultMap>
+
+ <select id="selectUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfs">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ESNTL_ID)
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectCmmntyUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectCmmntyMngrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyMngrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectClubUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectClubOprtrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubOprtrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectAllClubUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CLB_ID as TRGET_ID
+ FROM COMTNCLUBUSER WHERE USE_AT = 'Y'
+ AND CLB_ID = #{trgetId}
+
+ </select>
+
+ <select id="selectAllCmmntyUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CMMNTY_ID as TRGET_ID
+ FROM COMTNCMMNTYUSER WHERE USE_AT = 'Y'
+ AND CMMNTY_ID = #{trgetId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_postgres.xml (revision 7)
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:51 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="EgovUserInfManageDAO">
+
+ <resultMap id="UserInfs" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ </resultMap>
+
+ <resultMap id="UserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="deletedAt" column="DELETED_AT"/>
+ </resultMap>
+
+ <resultMap id="AllUserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="trgetId" column="TRGET_ID"/>
+ </resultMap>
+
+ <select id="selectUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfs">
+
+ SELECT
+ ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ESNTL_ID)
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectCmmntyUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectCmmntyUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+
+ <select id="selectCmmntyMngrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectCmmntyMngrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+
+ <select id="selectClubUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectClubUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectClubOprtrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectClubOprtrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectAllClubUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CLB_ID as TRGET_ID
+ FROM COMTNCLUBUSER WHERE USE_AT = 'Y'
+ AND CLB_ID = #{trgetId}
+
+ </select>
+
+ <select id="selectAllCmmntyUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CMMNTY_ID as TRGET_ID
+ FROM COMTNCMMNTYUSER WHERE USE_AT = 'Y'
+ AND CMMNTY_ID = #{trgetId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_mysql.xml (revision 7)
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:51 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="EgovUserInfManageDAO">
+
+ <resultMap id="UserInfs" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ </resultMap>
+
+ <resultMap id="UserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="deletedAt" column="DELETED_AT"/>
+ </resultMap>
+
+ <resultMap id="AllUserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="trgetId" column="TRGET_ID"/>
+ </resultMap>
+
+ <select id="selectUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfs">
+
+ SELECT
+ ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ESNTL_ID)
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectCmmntyUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectCmmntyUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+
+ <select id="selectCmmntyMngrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectCmmntyMngrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+
+ <select id="selectClubUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectClubUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectClubOprtrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectClubOprtrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectAllClubUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CLB_ID as TRGET_ID
+ FROM COMTNCLUBUSER WHERE USE_AT = 'Y'
+ AND CLB_ID = #{trgetId}
+
+ </select>
+
+ <select id="selectAllCmmntyUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CMMNTY_ID as TRGET_ID
+ FROM COMTNCMMNTYUSER WHERE USE_AT = 'Y'
+ AND CMMNTY_ID = #{trgetId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:50 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="EgovUserInfManageDAO">
+
+ <resultMap id="UserInfs" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ </resultMap>
+
+ <resultMap id="UserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="deletedAt" column="DELETED_AT"/>
+ </resultMap>
+
+ <resultMap id="AllUserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="trgetId" column="TRGET_ID"/>
+ </resultMap>
+
+ <select id="selectUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfs">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY USER_NM
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ESNTL_ID)
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectCmmntyUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectCmmntyMngrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyMngrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectClubUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectClubOprtrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubOprtrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectAllClubUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CLB_ID as TRGET_ID
+ FROM COMTNCLUBUSER WHERE USE_AT = 'Y'
+ AND CLB_ID = #{trgetId}
+
+ </select>
+
+ <select id="selectAllCmmntyUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CMMNTY_ID as TRGET_ID
+ FROM COMTNCMMNTYUSER WHERE USE_AT = 'Y'
+ AND CMMNTY_ID = #{trgetId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_oracle.xml (revision 7)
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:51 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="EgovUserInfManageDAO">
+
+ <resultMap id="UserInfs" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ </resultMap>
+
+ <resultMap id="UserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="deletedAt" column="DELETED_AT"/>
+ </resultMap>
+
+ <resultMap id="AllUserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="trgetId" column="TRGET_ID"/>
+ </resultMap>
+
+ <select id="selectUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfs">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ESNTL_ID)
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectCmmntyUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectCmmntyMngrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyMngrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectClubUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectClubOprtrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubOprtrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectAllClubUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CLB_ID as TRGET_ID
+ FROM COMTNCLUBUSER WHERE USE_AT = 'Y'
+ AND CLB_ID = #{trgetId}
+
+ </select>
+
+ <select id="selectAllCmmntyUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CMMNTY_ID as TRGET_ID
+ FROM COMTNCMMNTYUSER WHERE USE_AT = 'Y'
+ AND CMMNTY_ID = #{trgetId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_maria.xml (revision 7)
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:51 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="EgovUserInfManageDAO">
+
+ <resultMap id="UserInfs" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ </resultMap>
+
+ <resultMap id="UserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="deletedAt" column="DELETED_AT"/>
+ </resultMap>
+
+ <resultMap id="AllUserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="trgetId" column="TRGET_ID"/>
+ </resultMap>
+
+ <select id="selectUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfs">
+
+ SELECT
+ ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ESNTL_ID)
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectCmmntyUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectCmmntyUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+
+ <select id="selectCmmntyMngrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectCmmntyMngrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+
+ <select id="selectClubUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectClubUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectClubOprtrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.USER_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectClubOprtrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID)
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectAllClubUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CLB_ID as TRGET_ID
+ FROM COMTNCLUBUSER WHERE USE_AT = 'Y'
+ AND CLB_ID = #{trgetId}
+
+ </select>
+
+ <select id="selectAllCmmntyUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CMMNTY_ID as TRGET_ID
+ FROM COMTNCMMNTYUSER WHERE USE_AT = 'Y'
+ AND CMMNTY_ID = #{trgetId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_altibase.xml (revision 7)
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:50 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="EgovUserInfManageDAO">
+
+ <resultMap id="UserInfs" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ </resultMap>
+
+ <resultMap id="UserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="userId" column="USER_ID"/>
+ <result property="userNm" column="USER_NM"/>
+ <result property="userZip" column="USER_ZIP"/>
+ <result property="userAdres" column="USER_ADRES"/>
+ <result property="userEmail" column="USER_EMAIL"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="deletedAt" column="DELETED_AT"/>
+ </resultMap>
+
+ <resultMap id="AllUserInfList" type="egovframework.com.cop.com.service.UserInfVO">
+ <result property="uniqId" column="ESNTL_ID"/>
+ <result property="trgetId" column="TRGET_ID"/>
+ </resultMap>
+
+ <select id="selectUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfs">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID, USER_ID, USER_NM, USER_ZIP, USER_ADRES, USER_EMAIL
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ESNTL_ID) as cnt
+ FROM
+ COMVNUSERMASTER
+ WHERE 1=1
+
+ <if test="searchCnd == 0">AND
+ USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectCmmntyUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID) as cnt
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectCmmntyMngrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCMMNTY WHERE CMMNTY_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectCmmntyMngrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID) as cnt
+ FROM
+ COMVNUSERMASTER a, COMTNCMMNTYUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.MNGR_AT = 'Y'
+ AND
+ b.CMMNTY_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+
+ <select id="selectClubUserList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubUserListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID) as cnt
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectClubOprtrList" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="UserInfList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ESNTL_ID, a.USER_ID, a.USER_NM, a.USER_ZIP, a.USER_ADRES, a.USER_EMAIL, b.USE_AT,
+ (SELECT USE_AT from COMTNCLUB WHERE CLB_ID = #{trgetId}) AS DELETED_AT
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.USER_NM
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectClubOprtrListCnt" parameterType="egovframework.com.cop.com.service.UserInfVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.ESNTL_ID) as cnt
+ FROM
+ COMVNUSERMASTER a, COMTNCLUBUSER b
+ WHERE
+ a.ESNTL_ID = b.EMPLYR_ID
+ AND
+ b.OPRTR_AT = 'Y'
+ AND
+ b.CLB_ID = #{trgetId}
+
+ <if test="searchCnd == 0">AND
+ a.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectAllClubUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CLB_ID as TRGET_ID
+ FROM COMTNCLUBUSER WHERE USE_AT = 'Y'
+ AND CLB_ID = #{trgetId}
+
+ </select>
+
+ <select id="selectAllCmmntyUser" parameterType="egovframework.com.cop.com.service.UserInfVO" resultMap="AllUserInfList">
+
+ SELECT EMPLYR_ID as ESNTL_ID, CMMNTY_ID as TRGET_ID
+ FROM COMTNCMMNTYUSER WHERE USE_AT = 'Y'
+ AND CMMNTY_ID = #{trgetId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/com/EgovUserInf_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_altibase.xml (revision 7)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:40 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSAddedOptions">
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="commentAt" column="ANSWER_AT"/>
+ <result property="stsfdgAt" column="STSFDG_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <insert id="insertAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTEROPTN
+ (BBS_ID, ANSWER_AT, STSFDG_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM )
+ VALUES
+ ( #{bbsId},
+
+ <if test="option == ''">
+ 'N', 'N',
+ </if>
+ <if test="option == 'comment'">
+ 'Y', 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ 'N', 'Y',
+ </if>
+
+ #{frstRegisterId}, SYSDATE
+ )
+
+ </insert>
+
+ <select id="selectAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
+ a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTEROPTN a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ UPDATE COMTNBBSMASTEROPTN SET
+
+ <if test="option == ''">
+ ANSWER_AT = 'N', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'comment'">
+ ANSWER_AT = 'Y', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ ANSWER_AT = 'N', STSFDG_AT = 'Y',
+ </if>
+
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_tibero.xml (revision 7)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSAddedOptions">
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="commentAt" column="ANSWER_AT"/>
+ <result property="stsfdgAt" column="STSFDG_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <insert id="insertAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTEROPTN
+ (BBS_ID, ANSWER_AT, STSFDG_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM )
+ VALUES
+ ( #{bbsId},
+
+ <if test="option == ''">
+ 'N', 'N',
+ </if>
+ <if test="option == 'comment'">
+ 'Y', 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ 'N', 'Y',
+ </if>
+
+ #{frstRegisterId}, SYSDATE
+ )
+
+ </insert>
+
+ <select id="selectAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
+ a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTEROPTN a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ UPDATE COMTNBBSMASTEROPTN SET
+
+ <if test="option == ''">
+ ANSWER_AT = 'N', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'comment'">
+ ANSWER_AT = 'Y', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ ANSWER_AT = 'N', STSFDG_AT = 'Y',
+ </if>
+
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_tibero.xml (revision 7)
@@ -0,0 +1,604 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.09.07 서준식 NTCE_BGNDE, NTCE_ENDDE 컬럼 빈공간에 의한 비교 오류 때문에 Rtrim() 추가
+ 2011.09.21 서준식 selectMaxNttId문에 COMMIT 될때까지 LOCK설정
+ 2011.09.21 서준식 NTT_ID를 IDGENT서비스를 사용해서 생성하므로 selectMaxNttId문은 실제 사용하지 않음
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSArticle">
+
+ <resultMap id="boardList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardDetail" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN" jdbcType="CLOB"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ </resultMap>
+
+ <resultMap id="sortList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ </resultMap>
+
+ <resultMap id="guestList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="detailCn" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardCnOne" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="nttCn" column="NTT_CN"/>
+ </resultMap>
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="boardBlogManager" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardSubJectList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <select id="selectMaxNttId" resultType="java.lang.Long">
+
+ SELECT NVL(NTT_ID,0)+1 AS NTT_ID FROM COMTNBBS WHERE NTT_ID=(SELECT MAX(NTT_ID) AS NTT_ID FROM COMTNBBS) FOR UPDATE WAIT 3
+
+ </select>
+
+ <insert id="insertArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT NVL(MAX(SORT_ORDR),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT, BLOG_ID
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{nttId},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}, #{blogId}
+ )
+
+ </insert>
+
+ <insert id="replyArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT NVL(MAX(NTT_NO),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId} AND SORT_ORDR = #{sortOrdr}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{sortOrdr},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+
+ <select id="selectArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.NTT_ID)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectArticleDetail" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardDetail">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailCn" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="detailCn">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailDefault" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardSubJectList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO,
+ a.NTCR_ID, d.BLOG_ID, d.REPLY_POSBL_AT
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="searchCnd == 5">
+ ) TB ) WHERE rn BETWEEN 1 AND 5
+ </if>
+ <if test="searchCnd == 10">
+ ) TB ) WHERE rn BETWEEN 1 AND 10
+ </if>
+ <if test="searchCnd == 15">
+ ) TB ) WHERE rn BETWEEN 1 AND 15
+ </if>
+ <if test="searchCnd == 20">
+ ) TB ) WHERE rn BETWEEN 1 AND 20
+ </if>
+ <if test="searchCnd == 30">
+ ) TB ) WHERE rn BETWEEN 1 AND 30
+ </if>
+
+ </select>
+
+ <update id="updateArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ NTT_CN = #{nttCn},
+ NTCE_BGNDE = #{ntceBgnde},
+ NTCE_ENDDE = #{ntceEndde},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ ATCH_FILE_ID = #{atchFileId},
+ LAST_UPDT_PNTTM = SYSDATE,
+ SJ_BOLD_AT = #{sjBoldAt},
+ NOTICE_AT = #{noticeAt},
+ SECRET_AT = #{secretAt}
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <update id="deleteArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectMaxInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(RDCNT),0)+1 AS RDCNT FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </select>
+
+
+ <update id="updateInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ RDCNT = #{inqireCo},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectNoticeArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ AND a.NOTICE_AT = 'Y'
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN 1 AND 5
+
+ </select>
+
+ <select id="selectGuestArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="guestList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH:MI:SS') as FRST_REGIST_PNTTM,
+ a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
+ FROM
+ COMTNBBS a, COMVNUSERMASTER b
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.FRST_REGISTER_ID = b.ESNTL_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, a.NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectGuestArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(NTT_ID)
+ FROM
+ COMTNBBS
+ WHERE
+ BBS_ID = #{bbsId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleCnOne" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardCnOne">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_CN
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC
+ ) TB ) WHERE rn BETWEEN 1 AND 1
+
+ </select>
+
+ <select id="selectBlogNmList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardMasterList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN 1 AND 7
+
+ </select>
+
+ <select id="selectLoginUser" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE
+ FRST_REGISTER_ID = #{frstRegisterId}
+ AND
+ BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="selectBlogListManager" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardBlogManager">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM, C.USER_NM AS FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ A.USE_AT
+ FROM
+ COMTNBBSMASTER A
+ LEFT OUTER JOIN
+ COMTNBLOG B
+ ON A.BLOG_ID = B.BLOG_ID
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) C
+ ON A.FRST_REGISTER_ID = C.ESNTL_ID
+ WHERE A.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBlogListManagerCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(1)
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectArticleDetailDefaultCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_postgres.xml (revision 7)
@@ -0,0 +1,625 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.09.21 서준식 NTT_ID를 IDGENT서비스를 사용해서 생성하므로 selectMaxNttId문은 실제 사용하지 않음
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSArticle">
+
+ <resultMap id="boardList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardDetail" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ </resultMap>
+
+ <resultMap id="sortList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ </resultMap>
+
+ <resultMap id="guestList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="detailCn" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardCnOne" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="nttCn" column="NTT_CN"/>
+ </resultMap>
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="boardBlogManager" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardSubJectList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <select id="selectMaxNttId" resultType="java.lang.Long">
+ SELECT COALESCE(MAX(NTT_ID),0)+1 AS NTT_ID FROM COMTNBBS
+ </select>
+
+ <insert id="insertArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT COALESCE(MAX(SORT_ORDR),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT, BLOG_ID
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{nttId},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ CAST(#{parnts} AS NUMERIC), 1, CAST(#{replyLc} AS NUMERIC), #{atchFileId},
+ #{frstRegisterId}, NOW(), 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}, #{blogId}
+ )
+
+ </insert>
+
+ <insert id="replyArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT COALESCE(MAX(NTT_NO),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId} AND SORT_ORDR = #{sortOrdr}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{sortOrdr},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ CAST(#{parnts} AS NUMERIC), #{nttNo}, CAST(#{replyLc} AS NUMERIC), #{atchFileId},
+ #{frstRegisterId}, NOW(), 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+ <select id="selectArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, COALESCE(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE CONCAT ('%', #{searchKeyword},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE CONCAT ('%', #{searchKeyword},'%')
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE CONCAT ('%', #{searchKeyword},'%')
+ </if>
+ <if test="searchCondition == 99">AND
+ (
+ a.NTT_SJ LIKE CONCAT ('%', #{searchKeyword},'%')
+ OR a.NTT_CN LIKE CONCAT ('%', #{searchKeyword},'%')
+ OR b.USER_NM LIKE CONCAT ('%', #{searchKeyword},'%')
+ )
+ </if>
+ <if test="searchBgnPnttm != null and searchBgnPnttm != ''">
+ AND a.FRST_REGIST_PNTTM <![CDATA[>=]]> #{searchBgnPnttm}::date
+ </if>
+ <if test="searchEndPnttm != null and searchEndPnttm != ''">
+ AND a.FRST_REGIST_PNTTM <![CDATA[<]]> #{searchEndPnttm}::date + cast('1 day' as interval)
+ </if>
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="pagingAt == true">
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </if>
+
+ </select>
+
+ <select id="selectArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.NTT_ID)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCondition == 0">AND
+ a.NTT_SJ LIKE CONCAT ('%', #{searchKeyword},'%')
+ </if>
+ <if test="searchCondition == 1">AND
+ a.NTT_CN LIKE CONCAT ('%', #{searchKeyword},'%')
+ </if>
+ <if test="searchCondition == 2">AND
+ b.USER_NM LIKE CONCAT ('%', #{searchKeyword},'%')
+ </if>
+ <if test="searchCondition == 99">AND
+ (
+ a.NTT_SJ LIKE CONCAT ('%', #{searchKeyword},'%')
+ OR a.NTT_CN LIKE CONCAT ('%', #{searchKeyword},'%')
+ OR b.USER_NM LIKE CONCAT ('%', #{searchKeyword},'%')
+ )
+ </if>
+
+ <if test="searchBgnPnttm != null and searchBgnPnttm != ''">
+ AND a.FRST_REGIST_PNTTM <![CDATA[>=]]> #{searchBgnPnttm}::date
+ </if>
+ <if test="searchEndPnttm != null and searchEndPnttm != ''">
+ AND a.FRST_REGIST_PNTTM <![CDATA[<]]> #{searchEndPnttm}::date + cast('1 day' as interval)
+ </if>
+ </select>
+
+ <select id="selectArticleDetail" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardDetail">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, COALESCE(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailCn" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="detailCn">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, COALESCE(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <update id="updateArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ NTT_CN = #{nttCn},
+ NTCE_BGNDE = #{ntceBgnde},
+ NTCE_ENDDE = #{ntceEndde},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ ATCH_FILE_ID = #{atchFileId},
+ LAST_UPDT_PNTTM = NOW(),
+ SJ_BOLD_AT = #{sjBoldAt},
+ NOTICE_AT = #{noticeAt},
+ SECRET_AT = #{secretAt}
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <update id="deleteArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = NOW()
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectMaxInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT COALESCE(MAX(RDCNT),0)+1 AS RDCNT FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </select>
+
+
+ <update id="updateInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ RDCNT = #{inqireCo},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = NOW()
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+
+ <select id="selectNoticeArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, COALESCE(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.NOTICE_AT = 'Y'
+ AND a.USE_AT = 'Y'
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ LIMIT 5
+
+ </select>
+
+ <select id="selectGuestArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="guestList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd HH24:MI:SS') as FRST_REGIST_PNTTM,
+ a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
+ FROM
+ COMTNBBS a, COMVNUSERMASTER b
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.FRST_REGISTER_ID = b.ESNTL_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, a.NTT_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectGuestArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(NTT_ID)
+ FROM
+ COMTNBBS
+ WHERE
+ BBS_ID = #{bbsId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectLoginUser" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE
+ FRST_REGISTER_ID = #{frstRegisterId}
+ AND
+ BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="selectBlogListManager" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardBlogManager">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM, C.USER_NM AS FRST_REGISTER_NM,
+ TO_CHAR(A.FRST_REGIST_PNTTM, 'YYYY-mm-dd') as FRST_REGIST_PNTTM,
+ A.USE_AT
+ FROM
+ COMTNBBSMASTER A
+ LEFT OUTER JOIN
+ COMTNBLOG B
+ ON A.BLOG_ID = B.BLOG_ID
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) C
+ ON A.FRST_REGISTER_ID = C.ESNTL_ID
+ WHERE A.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBlogListManagerCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(1)
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectArticleCnOne" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardCnOne">
+
+ SELECT
+ a.NTT_CN
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC
+ LIMIT 1
+
+ </select>
+
+ <select id="selectBlogNmList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardMasterList">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+ LIMIT 7 OFFSET 0
+
+ </select>
+
+ <select id="selectArticleDetailDefault" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardSubJectList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, COALESCE(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO,
+ a.NTCR_ID, d.BLOG_ID, d.REPLY_POSBL_AT
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="searchCnd == 5">
+ LIMIT 5
+ </if>
+ <if test="searchCnd == 10">
+ LIMIT 10
+ </if>
+ <if test="searchCnd == 15">
+ LIMIT 15
+ </if>
+ <if test="searchCnd == 20">
+ LIMIT 20
+ </if>
+ <if test="searchCnd == 30">
+ LIMIT 30
+ </if>
+
+ </select>
+
+ <select id="selectArticleDetailDefaultCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_mysql.xml (revision 7)
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.07.14 신용호 게시판마스터 페이징처리 오류수정 (180. 게시판관리)
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSMaster">
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="bbsIntrcn" column="BBS_INTRCN"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="atchPosblFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="atchPosblFileSize" column="ATCH_POSBL_FILE_SIZE"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="tmplatNm" column="TMPLAT_NM"/>
+ <result property="authFlag" column="AUTH_FLAG"/>
+ <result property="tmplatCours" column="TMPLAT_COURS"/>
+ <result property="cmmntyId" column="CMMNTY_ID"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <resultMap id="boardMasterAll" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogList" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="registSeCode" column="REGIST_SE_CODE"/>
+ <result property="registSeCodeNm" column="REGIST_SE_CODE_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="selectBlogDetail" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="blogIntrcn" column="BLOG_INTRCN"/>
+ </resultMap>
+
+ <resultMap id="selectBlogUser" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogListPortlet" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ </resultMap>
+
+ <resultMap id="BBSListPortlet" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <insert id="insertBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ INSERT INTO COMTNBBSMASTER
+ (BBS_ID, BBS_TY_CODE, BBS_NM, BBS_INTRCN,
+ REPLY_POSBL_AT, FILE_ATCH_POSBL_AT, ATCH_POSBL_FILE_NUMBER,
+ TMPLAT_ID, USE_AT, CMMNTY_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, BLOG_ID, BLOG_AT )
+ VALUES
+ ( #{bbsId}, #{bbsTyCode}, #{bbsNm}, #{bbsIntrcn},
+ #{replyPosblAt}, #{fileAtchPosblAt}, #{atchPosblFileNumber},
+ #{tmplatId}, #{useAt}, #{cmmntyId}, #{frstRegisterId}, SYSDATE(), #{blogId}, #{blogAt}
+ )
+
+ </insert>
+
+ <select id="selectBBSMasterList" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterList">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM,
+ a.BBS_NM,
+ a.TMPLAT_ID, a.USE_AT,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ d.USER_NM AS FRST_REGISTER_NM
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>
+ AND a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBBSMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.BBS_ID)
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>AND
+ a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectBBSMasterDetail" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM, a.BBS_INTRCN,
+ a.BBS_NM,
+ a.TMPLAT_ID, d.TMPLAT_NM, d.TMPLAT_COURS, a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
+ a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM, a.CMMNTY_ID,
+ a.USE_AT, DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM, BLOG_ID
+ ,(SELECT IFNULL(USE_AT,'N') FROM COMTNBBSUSE
+ WHERE BBS_ID = #{bbsId}
+ AND TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')
+ ) as AUTH_FLAG
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN COMTNTMPLATINFO d
+ ON a.TMPLAT_ID = d.TMPLAT_ID
+ LEFT OUTER JOIN COMVNUSERMASTER e
+ ON a.FRST_REGISTER_ID = e.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ BBS_NM = #{bbsNm},
+ BBS_INTRCN = #{bbsIntrcn},
+ BBS_TY_CODE = #{bbsTyCode},
+ FILE_ATCH_POSBL_AT = #{fileAtchPosblAt},
+ ATCH_POSBL_FILE_NUMBER = #{atchPosblFileNumber},
+ TMPLAT_ID = #{tmplatId},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE(),
+ USE_AT = #{useAt}
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <update id="deleteBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <select id="selectBlogMasterList" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogList">
+
+ SELECT
+ a.BLOG_ID, a.BLOG_NM, a.USE_AT, a.REGIST_SE_CODE,
+ c.CODE_NM as REGIST_SE_CODE_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.FRST_REGISTER_ID,
+ b.USER_NM as FRST_REGISTER_NM,
+ a.BBS_ID, d.AUTHOR_CODE
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBlogMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectBlogDetail" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogDetail">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, BLOG_INTRCN
+ FROM
+ COMTNBLOG
+ WHERE BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="checkExistUser" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <select id="checkExistUser2" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogUser">
+
+ SELECT
+ FRST_REGISTER_ID
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <insert id="insertBoardBlogUserRqst" parameterType="egovframework.com.cop.bbs.service.BlogUser">
+
+ INSERT INTO COMTNBLOGUSER
+ (BLOG_ID, EMPLYR_ID, MNGR_AT, SBSCRB_DE,
+ MBER_STTUS, USE_AT, FRST_REGIST_PNTTM, FRST_REGISTER_ID)
+ VALUES (#{blogId}, #{emplyrId}, #{mngrAt}, SYSDATE(),
+ #{mberSttus}, #{useAt}, SYSDATE(), #{frstRegisterId})
+
+ </insert>
+
+ <insert id="insertBlogMaster" parameterType="egovframework.com.cop.bbs.service.BlogVO">
+
+ INSERT INTO COMTNBLOG
+ (BLOG_ID, BLOG_NM, BLOG_INTRCN, REGIST_SE_CODE,
+ TMPLAT_ID, USE_AT, FRST_REGISTER_ID, FRST_REGIST_PNTTM, BBS_ID, BLOG_AT)
+ VALUES
+ (#{blogId}, #{blogNm}, #{blogIntrcn}, #{registSeCode},
+ #{tmplatId}, #{useAt}, #{frstRegisterId}, SYSDATE(), #{bbsId}, #{blogAt})
+
+ </insert>
+
+ <select id="selectBlogListPortlet" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogListPortlet">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBLOG
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBBSListPortlet" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="BBSListPortlet">
+
+ SELECT
+ BBS_ID, BBS_TY_CODE, BBS_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTER
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_mysql.xml (revision 7)
@@ -0,0 +1,599 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.09.21 서준식 NTT_ID를 IDGENT서비스를 사용해서 생성하므로 selectMaxNttId문은 실제 사용하지 않음
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSArticle">
+
+ <resultMap id="boardList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardDetail" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ </resultMap>
+
+ <resultMap id="sortList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ </resultMap>
+
+ <resultMap id="guestList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="detailCn" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardCnOne" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="nttCn" column="NTT_CN"/>
+ </resultMap>
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="boardBlogManager" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardSubJectList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <select id="selectMaxNttId" resultType="java.lang.Long">
+ SELECT IFNULL(MAX(NTT_ID),0)+1 AS NTT_ID FROM COMTNBBS
+ </select>
+
+ <insert id="insertArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT IFNULL(MAX(SORT_ORDR),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT, BLOG_ID
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{nttId},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE(), 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}, #{blogId}
+ )
+
+ </insert>
+
+ <insert id="replyArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT IFNULL(MAX(NTT_NO),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId} AND SORT_ORDR = #{sortOrdr}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{sortOrdr},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, #{nttNo}, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE(), 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+ <select id="selectArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.NTT_ID)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectArticleDetail" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardDetail">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailCn" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="detailCn">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <update id="updateArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ NTT_CN = #{nttCn},
+ NTCE_BGNDE = #{ntceBgnde},
+ NTCE_ENDDE = #{ntceEndde},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ ATCH_FILE_ID = #{atchFileId},
+ LAST_UPDT_PNTTM = SYSDATE(),
+ SJ_BOLD_AT = #{sjBoldAt},
+ NOTICE_AT = #{noticeAt},
+ SECRET_AT = #{secretAt}
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <update id="deleteArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectMaxInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT IFNULL(MAX(RDCNT),0)+1 AS RDCNT FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </select>
+
+
+ <update id="updateInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ RDCNT = #{inqireCo},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+
+ <select id="selectNoticeArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.NOTICE_AT = 'Y'
+ AND a.USE_AT = 'Y'
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ LIMIT 5
+
+ </select>
+
+ <select id="selectGuestArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="guestList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S') as FRST_REGIST_PNTTM,
+ a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
+ FROM
+ COMTNBBS a, COMVNUSERMASTER b
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.FRST_REGISTER_ID = b.ESNTL_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, a.NTT_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectGuestArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(NTT_ID)
+ FROM
+ COMTNBBS
+ WHERE
+ BBS_ID = #{bbsId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectLoginUser" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE
+ FRST_REGISTER_ID = #{frstRegisterId}
+ AND
+ BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="selectBlogListManager" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardBlogManager">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM, C.USER_NM AS FRST_REGISTER_NM,
+ DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ A.USE_AT
+ FROM
+ COMTNBBSMASTER A
+ LEFT OUTER JOIN
+ COMTNBLOG B
+ ON A.BLOG_ID = B.BLOG_ID
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) C
+ ON A.FRST_REGISTER_ID = C.ESNTL_ID
+ WHERE A.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBlogListManagerCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(1)
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectArticleCnOne" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardCnOne">
+
+ SELECT
+ a.NTT_CN
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC
+ LIMIT 1
+
+ </select>
+
+ <select id="selectBlogNmList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardMasterList">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+ LIMIT 7 OFFSET 0
+
+ </select>
+
+ <select id="selectArticleDetailDefault" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardSubJectList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO,
+ a.NTCR_ID, d.BLOG_ID, d.REPLY_POSBL_AT
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="searchCnd == 5">
+ LIMIT 5
+ </if>
+ <if test="searchCnd == 10">
+ LIMIT 10
+ </if>
+ <if test="searchCnd == 15">
+ LIMIT 15
+ </if>
+ <if test="searchCnd == 20">
+ LIMIT 20
+ </if>
+ <if test="searchCnd == 30">
+ LIMIT 30
+ </if>
+
+ </select>
+
+ <select id="selectArticleDetailDefaultCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_oracle.xml (revision 7)
@@ -0,0 +1,604 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.09.07 서준식 NTCE_BGNDE, NTCE_ENDDE 컬럼 빈공간에 의한 비교 오류 때문에 Rtrim() 추가
+ 2011.09.21 서준식 selectMaxNttId문에 COMMIT 될때까지 LOCK설정
+ 2011.09.21 서준식 NTT_ID를 IDGENT서비스를 사용해서 생성하므로 selectMaxNttId문은 실제 사용하지 않음
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSArticle">
+
+ <resultMap id="boardList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardDetail" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN" jdbcType="CLOB"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ </resultMap>
+
+ <resultMap id="sortList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ </resultMap>
+
+ <resultMap id="guestList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="detailCn" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardCnOne" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="nttCn" column="NTT_CN"/>
+ </resultMap>
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="boardBlogManager" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardSubJectList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <select id="selectMaxNttId" resultType="java.lang.Long">
+
+ SELECT NVL(NTT_ID,0)+1 AS NTT_ID FROM COMTNBBS WHERE NTT_ID=(SELECT MAX(NTT_ID) AS NTT_ID FROM COMTNBBS) FOR UPDATE WAIT 3
+
+ </select>
+
+ <insert id="insertArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT NVL(MAX(SORT_ORDR),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT, BLOG_ID
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{nttId},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}, #{blogId}
+ )
+
+ </insert>
+
+ <insert id="replyArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order ="BEFORE">
+ SELECT NVL(MAX(NTT_NO),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId} AND SORT_ORDR = #{sortOrdr}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{sortOrdr},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+
+ <select id="selectArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.NTT_ID)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectArticleDetail" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardDetail">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND a.USE_AT = 'Y'
+
+ </select>
+
+ <update id="updateArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ NTT_CN = #{nttCn},
+ NTCE_BGNDE = #{ntceBgnde},
+ NTCE_ENDDE = #{ntceEndde},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ ATCH_FILE_ID = #{atchFileId},
+ LAST_UPDT_PNTTM = SYSDATE,
+ SJ_BOLD_AT = #{sjBoldAt},
+ NOTICE_AT = #{noticeAt},
+ SECRET_AT = #{secretAt}
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <update id="deleteArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectMaxInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(RDCNT),0)+1 AS RDCNT FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </select>
+
+
+ <update id="updateInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ RDCNT = #{inqireCo},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectNoticeArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ AND a.NOTICE_AT = 'Y'
+
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN 1 AND 5
+
+ </select>
+
+ <select id="selectGuestArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="guestList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH:MI:SS') as FRST_REGIST_PNTTM,
+ a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
+ FROM
+ COMTNBBS a, COMVNUSERMASTER b
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.FRST_REGISTER_ID = b.ESNTL_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, a.NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectGuestArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(NTT_ID)
+ FROM
+ COMTNBBS
+ WHERE
+ BBS_ID = #{bbsId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleCnOne" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardCnOne">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_CN
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC
+ ) TB ) WHERE rn BETWEEN 1 AND 1
+
+ </select>
+
+ <select id="selectArticleDetailCn" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="detailCn">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailDefault" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardSubJectList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO,
+ a.NTCR_ID, d.BLOG_ID, d.REPLY_POSBL_AT
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="searchCnd == 5">
+ ) TB ) WHERE rn BETWEEN 1 AND 5
+ </if>
+ <if test="searchCnd == 10">
+ ) TB ) WHERE rn BETWEEN 1 AND 10
+ </if>
+ <if test="searchCnd == 15">
+ ) TB ) WHERE rn BETWEEN 1 AND 15
+ </if>
+ <if test="searchCnd == 20">
+ ) TB ) WHERE rn BETWEEN 1 AND 20
+ </if>
+ <if test="searchCnd == 30">
+ ) TB ) WHERE rn BETWEEN 1 AND 30
+ </if>
+
+ </select>
+
+ <select id="selectBlogNmList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardMasterList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN 1 AND 7
+ </select>
+
+ <select id="selectLoginUser" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE
+ FRST_REGISTER_ID = #{frstRegisterId}
+ AND
+ BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="selectBlogListManager" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardBlogManager">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM, C.USER_NM AS FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ A.USE_AT
+ FROM
+ COMTNBBSMASTER A
+ LEFT OUTER JOIN
+ COMTNBLOG B
+ ON A.BLOG_ID = B.BLOG_ID
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) C
+ ON A.FRST_REGISTER_ID = C.ESNTL_ID
+ WHERE A.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBlogListManagerCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(1)
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectArticleDetailDefaultCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_postgres.xml (revision 7)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSAddedOptions">
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="commentAt" column="ANSWER_AT"/>
+ <result property="stsfdgAt" column="STSFDG_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <insert id="insertAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTEROPTN
+ (BBS_ID, ANSWER_AT, STSFDG_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM )
+ VALUES
+ ( #{bbsId},
+
+ <if test="option == ''">
+ 'N', 'N',
+ </if>
+ <if test="option == 'comment'">
+ 'Y', 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ 'N', 'Y',
+ </if>
+
+ #{frstRegisterId}, NOW()
+ )
+
+ </insert>
+
+ <select id="selectAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
+ a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYYmmdd') as FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTEROPTN a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ UPDATE COMTNBBSMASTEROPTN SET
+
+ <if test="option == ''">
+ ANSWER_AT = 'N', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'comment'">
+ ANSWER_AT = 'Y', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ ANSWER_AT = 'N', STSFDG_AT = 'Y',
+ </if>
+
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = NOW()
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.07.14 신용호 게시판마스터 페이징처리 오류수정 (180. 게시판관리)
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSMaster">
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="bbsIntrcn" column="BBS_INTRCN"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="atchPosblFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="atchPosblFileSize" column="ATCH_POSBL_FILE_SIZE"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="tmplatNm" column="TMPLAT_NM"/>
+ <result property="authFlag" column="AUTH_FLAG"/>
+ <result property="tmplatCours" column="TMPLAT_COURS"/>
+ <result property="cmmntyId" column="CMMNTY_ID"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <resultMap id="boardMasterAll" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogList" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="registSeCode" column="REGIST_SE_CODE"/>
+ <result property="registSeCodeNm" column="REGIST_SE_CODE_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="selectBlogDetail" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="blogIntrcn" column="BLOG_INTRCN"/>
+ </resultMap>
+
+ <resultMap id="selectBlogUser" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogListPortlet" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ </resultMap>
+
+ <resultMap id="BBSListPortlet" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <insert id="insertBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTER
+ (BBS_ID, BBS_TY_CODE, BBS_NM, BBS_INTRCN,
+ REPLY_POSBL_AT, FILE_ATCH_POSBL_AT, ATCH_POSBL_FILE_NUMBER,
+ ATCH_POSBL_FILE_SIZE, TMPLAT_ID, USE_AT, CMMNTY_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, BLOG_ID, BLOG_AT )
+ VALUES
+ ( #{bbsId}, #{bbsTyCode}, #{bbsNm}, #{bbsIntrcn},
+ #{replyPosblAt}, #{fileAtchPosblAt}, #{atchPosblFileNumber},
+ #{atchPosblFileSize}, #{tmplatId}, #{useAt}, #{cmmntyId}, #{frstRegisterId}, SYSDATETIME, #{blogId}, #{blogAt}
+ )
+
+ </insert>
+
+ <select id="selectBBSMasterList" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM,
+ a.BBS_NM,
+ a.TMPLAT_ID, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ d.USER_NM AS FRST_REGISTER_NM
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>
+ AND a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ b.CODE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBBSMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.BBS_ID)
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>AND
+ a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ b.CODE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectBBSMasterDetail" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM, a.BBS_INTRCN,
+ a.BBS_NM,
+ a.TMPLAT_ID, d.TMPLAT_NM, d.TMPLAT_COURS, a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
+ a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM, a.CMMNTY_ID,
+ a.USE_AT, TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM, BLOG_ID
+ ,(SELECT NVL(USE_AT,'N') FROM COMTNBBSUSE
+ WHERE BBS_ID = #{bbsId}
+ AND TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')
+ ) as AUTH_FLAG
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN COMTNTMPLATINFO d
+ ON a.TMPLAT_ID = d.TMPLAT_ID
+ LEFT OUTER JOIN COMVNUSERMASTER e
+ ON a.FRST_REGISTER_ID = e.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ BBS_NM = #{bbsNm},
+ BBS_INTRCN = #{bbsIntrcn},
+ BBS_TY_CODE = #{bbsTyCode},
+ FILE_ATCH_POSBL_AT = #{fileAtchPosblAt},
+ ATCH_POSBL_FILE_NUMBER = #{atchPosblFileNumber},
+ ATCH_POSBL_FILE_SIZE = #{atchPosblFileSize},
+ TMPLAT_ID = #{tmplatId},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATETIME,
+ USE_AT = #{useAt}
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <update id="deleteBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATETIME
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <select id="selectBlogMasterList" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BLOG_ID, a.BLOG_NM, a.USE_AT, a.REGIST_SE_CODE,
+ c.CODE_NM as REGIST_SE_CODE_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.FRST_REGISTER_ID,
+ b.USER_NM as FRST_REGISTER_NM,
+ a.BBS_ID, d.AUTHOR_CODE
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBlogMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ </select>
+
+ <select id="selectBlogDetail" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogDetail">
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, BLOG_INTRCN
+ FROM
+ COMTNBLOG
+ WHERE BLOG_ID = #{blogId}
+ </select>
+
+ <select id="checkExistUser" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultType="java.lang.Integer">
+
+ SELECT COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <select id="checkExistUser2" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogUser">
+
+ SELECT
+ FRST_REGISTER_ID
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <insert id="insertBoardBlogUserRqst" parameterType="egovframework.com.cop.bbs.service.BlogUser">
+
+ INSERT INTO COMTNBLOGUSER
+ (BLOG_ID, EMPLYR_ID, MNGR_AT, SBSCRB_DE,
+ MBER_STTUS, USE_AT, FRST_REGIST_PNTTM, FRST_REGISTER_ID)
+ VALUES (#{blogId}, #{emplyrId}, #{mngrAt}, SYSDATE,
+ #{mberSttus}, #{useAt}, SYSDATE, #{frstRegisterId})
+
+ </insert>
+
+ <insert id="insertBlogMaster" parameterType="egovframework.com.cop.bbs.service.BlogVO">
+
+ INSERT INTO COMTNBLOG
+ (BLOG_ID, BLOG_NM, BLOG_INTRCN, REGIST_SE_CODE,
+ TMPLAT_ID, USE_AT, FRST_REGISTER_ID, FRST_REGIST_PNTTM, BBS_ID, BLOG_AT)
+ VALUES
+ (#{blogId}, #{blogNm}, #{blogIntrcn}, #{registSeCode},
+ #{tmplatId}, #{useAt}, #{frstRegisterId}, SYSDATE, #{bbsId}, #{blogAt})
+
+ </insert>
+
+ <select id="selectBlogListPortlet" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogListPortlet">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBLOG
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBBSListPortlet" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="BBSListPortlet">
+
+ SELECT
+ BBS_ID, BBS_TY_CODE, BBS_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTER
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_maria.xml (revision 7)
@@ -0,0 +1,599 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.09.21 서준식 NTT_ID를 IDGENT서비스를 사용해서 생성하므로 selectMaxNttId문은 실제 사용하지 않음
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSArticle">
+
+ <resultMap id="boardList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardDetail" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ </resultMap>
+
+ <resultMap id="sortList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ </resultMap>
+
+ <resultMap id="guestList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="detailCn" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardCnOne" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="nttCn" column="NTT_CN"/>
+ </resultMap>
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="boardBlogManager" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardSubJectList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <select id="selectMaxNttId" resultType="java.lang.Long">
+ SELECT IFNULL(MAX(NTT_ID),0)+1 AS NTT_ID FROM COMTNBBS
+ </select>
+
+ <insert id="insertArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT IFNULL(MAX(SORT_ORDR),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT, BLOG_ID
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{nttId},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE(), 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}, #{blogId}
+ )
+
+ </insert>
+
+ <insert id="replyArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT IFNULL(MAX(NTT_NO),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId} AND SORT_ORDR = #{sortOrdr}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{sortOrdr},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, #{nttNo}, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE(), 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+ <select id="selectArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.NTT_ID)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectArticleDetail" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardDetail">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailCn" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="detailCn">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <update id="updateArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ NTT_CN = #{nttCn},
+ NTCE_BGNDE = #{ntceBgnde},
+ NTCE_ENDDE = #{ntceEndde},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ ATCH_FILE_ID = #{atchFileId},
+ LAST_UPDT_PNTTM = SYSDATE(),
+ SJ_BOLD_AT = #{sjBoldAt},
+ NOTICE_AT = #{noticeAt},
+ SECRET_AT = #{secretAt}
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <update id="deleteArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectMaxInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT IFNULL(MAX(RDCNT),0)+1 AS RDCNT FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </select>
+
+
+ <update id="updateInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ RDCNT = #{inqireCo},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+
+ <select id="selectNoticeArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.NOTICE_AT = 'Y'
+ AND a.USE_AT = 'Y'
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ LIMIT 5
+
+ </select>
+
+ <select id="selectGuestArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="guestList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S') as FRST_REGIST_PNTTM,
+ a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
+ FROM
+ COMTNBBS a, COMVNUSERMASTER b
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.FRST_REGISTER_ID = b.ESNTL_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, a.NTT_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectGuestArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(NTT_ID)
+ FROM
+ COMTNBBS
+ WHERE
+ BBS_ID = #{bbsId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectLoginUser" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE
+ FRST_REGISTER_ID = #{frstRegisterId}
+ AND
+ BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="selectBlogListManager" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardBlogManager">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM, C.USER_NM AS FRST_REGISTER_NM,
+ DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ A.USE_AT
+ FROM
+ COMTNBBSMASTER A
+ LEFT OUTER JOIN
+ COMTNBLOG B
+ ON A.BLOG_ID = B.BLOG_ID
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) C
+ ON A.FRST_REGISTER_ID = C.ESNTL_ID
+ WHERE A.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBlogListManagerCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(1)
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectArticleCnOne" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardCnOne">
+
+ SELECT
+ a.NTT_CN
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC
+ LIMIT 1
+
+ </select>
+
+ <select id="selectBlogNmList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardMasterList">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+ LIMIT 7 OFFSET 0
+
+ </select>
+
+ <select id="selectArticleDetailDefault" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardSubJectList">
+
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, IFNULL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO,
+ a.NTCR_ID, d.BLOG_ID, d.REPLY_POSBL_AT
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="searchCnd == 5">
+ LIMIT 5
+ </if>
+ <if test="searchCnd == 10">
+ LIMIT 10
+ </if>
+ <if test="searchCnd == 15">
+ LIMIT 15
+ </if>
+ <if test="searchCnd == 20">
+ LIMIT 20
+ </if>
+ <if test="searchCnd == 30">
+ LIMIT 30
+ </if>
+
+ </select>
+
+ <select id="selectArticleDetailDefaultCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_altibase.xml (revision 7)
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.07.14 신용호 게시판마스터 페이징처리 오류수정 (180. 게시판관리)
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSMaster">
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="bbsIntrcn" column="BBS_INTRCN"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="atchPosblFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="atchPosblFileSize" column="ATCH_POSBL_FILE_SIZE"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="tmplatNm" column="TMPLAT_NM"/>
+ <result property="authFlag" column="AUTH_FLAG"/>
+ <result property="tmplatCours" column="TMPLAT_COURS"/>
+ <result property="cmmntyId" column="CMMNTY_ID"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <resultMap id="boardMasterAll" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogList" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="registSeCode" column="REGIST_SE_CODE"/>
+ <result property="registSeCodeNm" column="REGIST_SE_CODE_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="selectBlogDetail" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="blogIntrcn" column="BLOG_INTRCN"/>
+ </resultMap>
+
+ <resultMap id="selectBlogUser" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogListPortlet" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ </resultMap>
+
+ <resultMap id="BBSListPortlet" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <insert id="insertBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTER
+ (BBS_ID, BBS_TY_CODE, BBS_NM, BBS_INTRCN,
+ REPLY_POSBL_AT, FILE_ATCH_POSBL_AT, ATCH_POSBL_FILE_NUMBER,
+ ATCH_POSBL_FILE_SIZE, TMPLAT_ID, USE_AT, CMMNTY_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, BLOG_ID, BLOG_AT )
+ VALUES
+ ( #{bbsId}, #{bbsTyCode}, #{bbsNm}, #{bbsIntrcn},
+ #{replyPosblAt}, #{fileAtchPosblAt}, #{atchPosblFileNumber},
+ #{atchPosblFileSize}, #{tmplatId}, #{useAt}, #{cmmntyId}, #{frstRegisterId}, SYSDATE, #{blogId}, #{blogAt}
+ )
+
+ </insert>
+
+ <select id="selectBBSMasterList" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM,
+ a.BBS_NM,
+ a.TMPLAT_ID, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ d.USER_NM AS FRST_REGISTER_NM
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>
+ AND a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ b.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBBSMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.BBS_ID) as cnt
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>AND
+ a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ b.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectBBSMasterDetail" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM, a.BBS_INTRCN,
+ a.BBS_NM,
+ a.TMPLAT_ID, d.TMPLAT_NM, d.TMPLAT_COURS, a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
+ a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM, a.CMMNTY_ID,
+ a.USE_AT, TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM, BLOG_ID
+ ,(SELECT NVL(USE_AT,'N') FROM COMTNBBSUSE
+ WHERE BBS_ID = #{bbsId}
+ AND TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')
+ ) as AUTH_FLAG
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN COMTNTMPLATINFO d
+ ON a.TMPLAT_ID = d.TMPLAT_ID
+ LEFT OUTER JOIN COMVNUSERMASTER e
+ ON a.FRST_REGISTER_ID = e.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ BBS_NM = #{bbsNm},
+ BBS_INTRCN = #{bbsIntrcn},
+ BBS_TY_CODE = #{bbsTyCode},
+ FILE_ATCH_POSBL_AT = #{fileAtchPosblAt},
+ ATCH_POSBL_FILE_NUMBER = #{atchPosblFileNumber},
+ ATCH_POSBL_FILE_SIZE = #{atchPosblFileSize},
+ TMPLAT_ID = #{tmplatId},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE,
+ USE_AT = #{useAt}
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <update id="deleteBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <select id="selectBlogMasterList" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BLOG_ID, a.BLOG_NM, a.USE_AT, a.REGIST_SE_CODE,
+ c.CODE_NM as REGIST_SE_CODE_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.FRST_REGISTER_ID,
+ b.USER_NM as FRST_REGISTER_NM,
+ a.BBS_ID, d.AUTHOR_CODE
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBlogMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ </select>
+
+ <select id="selectBlogDetail" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogDetail">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, BLOG_INTRCN
+ FROM
+ COMTNBLOG
+ WHERE BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="checkExistUser" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <select id="checkExistUser2" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogUser">
+
+ SELECT
+ FRST_REGISTER_ID
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <insert id="insertBoardBlogUserRqst" parameterType="egovframework.com.cop.bbs.service.BlogUser">
+
+ INSERT INTO COMTNBLOGUSER
+ (BLOG_ID, EMPLYR_ID, MNGR_AT, SBSCRB_DE,
+ MBER_STTUS, USE_AT, FRST_REGIST_PNTTM, FRST_REGISTER_ID)
+ VALUES (#{blogId}, #{emplyrId}, #{mngrAt}, SYSDATE,
+ #{mberSttus}, #{useAt}, SYSDATE, #{frstRegisterId})
+
+ </insert>
+
+ <insert id="insertBlogMaster" parameterType="egovframework.com.cop.bbs.service.BlogVO">
+
+ INSERT INTO COMTNBLOG
+ (BLOG_ID, BLOG_NM, BLOG_INTRCN, REGIST_SE_CODE,
+ TMPLAT_ID, USE_AT, FRST_REGISTER_ID, FRST_REGIST_PNTTM, BBS_ID, BLOG_AT)
+ VALUES
+ (#{blogId}, #{blogNm}, #{blogIntrcn}, #{registSeCode},
+ #{tmplatId}, #{useAt}, #{frstRegisterId}, SYSDATE, #{bbsId}, #{blogAt})
+
+ </insert>
+
+ <select id="selectBlogListPortlet" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogListPortlet">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBLOG
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBBSListPortlet" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="BBSListPortlet">
+
+ SELECT
+ BBS_ID, BBS_TY_CODE, BBS_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTER
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_oracle.xml (revision 7)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSAddedOptions">
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="commentAt" column="ANSWER_AT"/>
+ <result property="stsfdgAt" column="STSFDG_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <insert id="insertAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTEROPTN
+ (BBS_ID, ANSWER_AT, STSFDG_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM )
+ VALUES
+ ( #{bbsId},
+
+ <if test="option == ''">
+ 'N', 'N',
+ </if>
+ <if test="option == 'comment'">
+ 'Y', 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ 'N', 'Y',
+ </if>
+
+ #{frstRegisterId}, SYSDATE
+ )
+
+ </insert>
+
+ <select id="selectAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
+ a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTEROPTN a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ UPDATE COMTNBBSMASTEROPTN SET
+
+ <if test="option == ''">
+ ANSWER_AT = 'N', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'comment'">
+ ANSWER_AT = 'Y', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ ANSWER_AT = 'N', STSFDG_AT = 'Y',
+ </if>
+
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_maria.xml (revision 7)
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.07.14 신용호 게시판마스터 페이징처리 오류수정 (180. 게시판관리)
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSMaster">
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="bbsIntrcn" column="BBS_INTRCN"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="atchPosblFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="atchPosblFileSize" column="ATCH_POSBL_FILE_SIZE"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="tmplatNm" column="TMPLAT_NM"/>
+ <result property="authFlag" column="AUTH_FLAG"/>
+ <result property="tmplatCours" column="TMPLAT_COURS"/>
+ <result property="cmmntyId" column="CMMNTY_ID"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <resultMap id="boardMasterAll" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogList" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="registSeCode" column="REGIST_SE_CODE"/>
+ <result property="registSeCodeNm" column="REGIST_SE_CODE_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="selectBlogDetail" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="blogIntrcn" column="BLOG_INTRCN"/>
+ </resultMap>
+
+ <resultMap id="selectBlogUser" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogListPortlet" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ </resultMap>
+
+ <resultMap id="BBSListPortlet" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <insert id="insertBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ INSERT INTO COMTNBBSMASTER
+ (BBS_ID, BBS_TY_CODE, BBS_NM, BBS_INTRCN,
+ REPLY_POSBL_AT, FILE_ATCH_POSBL_AT, ATCH_POSBL_FILE_NUMBER,
+ TMPLAT_ID, USE_AT, CMMNTY_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, BLOG_ID, BLOG_AT )
+ VALUES
+ ( #{bbsId}, #{bbsTyCode}, #{bbsNm}, #{bbsIntrcn},
+ #{replyPosblAt}, #{fileAtchPosblAt}, #{atchPosblFileNumber},
+ #{tmplatId}, #{useAt}, #{cmmntyId}, #{frstRegisterId}, SYSDATE(), #{blogId}, #{blogAt}
+ )
+
+ </insert>
+
+ <select id="selectBBSMasterList" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterList">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM,
+ a.BBS_NM,
+ a.TMPLAT_ID, a.USE_AT,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ d.USER_NM AS FRST_REGISTER_NM
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>
+ AND a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBBSMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.BBS_ID)
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>AND
+ a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectBBSMasterDetail" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM, a.BBS_INTRCN,
+ a.BBS_NM,
+ a.TMPLAT_ID, d.TMPLAT_NM, d.TMPLAT_COURS, a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
+ a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM, a.CMMNTY_ID,
+ a.USE_AT, DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM, BLOG_ID
+ ,(SELECT IFNULL(USE_AT,'N') FROM COMTNBBSUSE
+ WHERE BBS_ID = #{bbsId}
+ AND TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')
+ ) as AUTH_FLAG
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN COMTNTMPLATINFO d
+ ON a.TMPLAT_ID = d.TMPLAT_ID
+ LEFT OUTER JOIN COMVNUSERMASTER e
+ ON a.FRST_REGISTER_ID = e.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ BBS_NM = #{bbsNm},
+ BBS_INTRCN = #{bbsIntrcn},
+ BBS_TY_CODE = #{bbsTyCode},
+ FILE_ATCH_POSBL_AT = #{fileAtchPosblAt},
+ ATCH_POSBL_FILE_NUMBER = #{atchPosblFileNumber},
+ TMPLAT_ID = #{tmplatId},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE(),
+ USE_AT = #{useAt}
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <update id="deleteBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <select id="selectBlogMasterList" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogList">
+
+ SELECT
+ a.BLOG_ID, a.BLOG_NM, a.USE_AT, a.REGIST_SE_CODE,
+ c.CODE_NM as REGIST_SE_CODE_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ a.FRST_REGISTER_ID,
+ b.USER_NM as FRST_REGISTER_NM,
+ a.BBS_ID, d.AUTHOR_CODE
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBlogMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectBlogDetail" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogDetail">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, BLOG_INTRCN
+ FROM
+ COMTNBLOG
+ WHERE BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="checkExistUser" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <select id="checkExistUser2" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogUser">
+
+ SELECT
+ FRST_REGISTER_ID
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <insert id="insertBoardBlogUserRqst" parameterType="egovframework.com.cop.bbs.service.BlogUser">
+
+ INSERT INTO COMTNBLOGUSER
+ (BLOG_ID, EMPLYR_ID, MNGR_AT, SBSCRB_DE,
+ MBER_STTUS, USE_AT, FRST_REGIST_PNTTM, FRST_REGISTER_ID)
+ VALUES (#{blogId}, #{emplyrId}, #{mngrAt}, SYSDATE(),
+ #{mberSttus}, #{useAt}, SYSDATE(), #{frstRegisterId})
+
+ </insert>
+
+ <insert id="insertBlogMaster" parameterType="egovframework.com.cop.bbs.service.BlogVO">
+
+ INSERT INTO COMTNBLOG
+ (BLOG_ID, BLOG_NM, BLOG_INTRCN, REGIST_SE_CODE,
+ TMPLAT_ID, USE_AT, FRST_REGISTER_ID, FRST_REGIST_PNTTM, BBS_ID, BLOG_AT)
+ VALUES
+ (#{blogId}, #{blogNm}, #{blogIntrcn}, #{registSeCode},
+ #{tmplatId}, #{useAt}, #{frstRegisterId}, SYSDATE(), #{bbsId}, #{blogAt})
+
+ </insert>
+
+ <select id="selectBlogListPortlet" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogListPortlet">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBLOG
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBBSListPortlet" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="BBSListPortlet">
+
+ SELECT
+ BBS_ID, BBS_TY_CODE, BBS_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTER
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_tibero.xml (revision 7)
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.07.14 신용호 게시판마스터 페이징처리 오류수정 (180. 게시판관리)
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSMaster">
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="bbsIntrcn" column="BBS_INTRCN"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="atchPosblFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="atchPosblFileSize" column="ATCH_POSBL_FILE_SIZE"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="tmplatNm" column="TMPLAT_NM"/>
+ <result property="authFlag" column="AUTH_FLAG"/>
+ <result property="tmplatCours" column="TMPLAT_COURS"/>
+ <result property="cmmntyId" column="CMMNTY_ID"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <resultMap id="boardMasterAll" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogList" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="registSeCode" column="REGIST_SE_CODE"/>
+ <result property="registSeCodeNm" column="REGIST_SE_CODE_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="selectBlogDetail" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="blogIntrcn" column="BLOG_INTRCN"/>
+ </resultMap>
+
+ <resultMap id="selectBlogUser" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogListPortlet" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ </resultMap>
+
+ <resultMap id="BBSListPortlet" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <insert id="insertBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ INSERT INTO COMTNBBSMASTER
+ (BBS_ID, BBS_TY_CODE, BBS_NM, BBS_INTRCN,
+ REPLY_POSBL_AT, FILE_ATCH_POSBL_AT, ATCH_POSBL_FILE_NUMBER,
+ TMPLAT_ID, USE_AT, CMMNTY_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, BLOG_ID, BLOG_AT )
+ VALUES
+ ( #{bbsId}, #{bbsTyCode}, #{bbsNm}, #{bbsIntrcn},
+ #{replyPosblAt}, #{fileAtchPosblAt}, #{atchPosblFileNumber},
+ #{tmplatId}, #{useAt}, #{cmmntyId}, #{frstRegisterId}, SYSDATE, #{blogId}, #{blogAt}
+ )
+
+ </insert>
+
+ <select id="selectBBSMasterList" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM,
+ a.BBS_NM,
+ a.TMPLAT_ID, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ d.USER_NM AS FRST_REGISTER_NM
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>
+ AND a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ b.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBBSMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.BBS_ID)
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>AND
+ a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectBBSMasterDetail" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM, a.BBS_INTRCN,
+ a.BBS_NM,
+ a.TMPLAT_ID, d.TMPLAT_NM, d.TMPLAT_COURS, a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
+ a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM, a.CMMNTY_ID,
+ a.USE_AT, TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM
+ ,(SELECT NVL(USE_AT,'N') FROM COMTNBBSUSE
+ WHERE BBS_ID = #{bbsId}
+ AND TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')
+ ) as AUTH_FLAG
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN COMTNTMPLATINFO d
+ ON a.TMPLAT_ID = d.TMPLAT_ID
+ LEFT OUTER JOIN COMVNUSERMASTER e
+ ON a.FRST_REGISTER_ID = e.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ BBS_NM = #{bbsNm},
+ BBS_INTRCN = #{bbsIntrcn},
+ BBS_TY_CODE = #{bbsTyCode},
+ FILE_ATCH_POSBL_AT = #{fileAtchPosblAt},
+ ATCH_POSBL_FILE_NUMBER = #{atchPosblFileNumber},
+ ATCH_POSBL_FILE_SIZE = #{atchPosblFileSize},
+ TMPLAT_ID = #{tmplatId},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE,
+ USE_AT = #{useAt}
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <update id="deleteBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <select id="selectBlogMasterList" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BLOG_ID, a.BLOG_NM, a.USE_AT, a.REGIST_SE_CODE,
+ c.CODE_NM as REGIST_SE_CODE_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.FRST_REGISTER_ID,
+ b.USER_NM as FRST_REGISTER_NM,
+ a.BBS_ID, d.AUTHOR_CODE
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBlogMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ </select>
+
+ <select id="selectBlogDetail" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogDetail">
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, BLOG_INTRCN
+ FROM
+ COMTNBLOG
+ WHERE BLOG_ID = #{blogId}
+ </select>
+
+ <select id="checkExistUser" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultType="java.lang.Integer">
+
+ SELECT COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <select id="checkExistUser2" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogUser">
+
+ SELECT
+ FRST_REGISTER_ID
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <insert id="insertBoardBlogUserRqst" parameterType="egovframework.com.cop.bbs.service.BlogUser">
+
+ INSERT INTO COMTNBLOGUSER
+ (BLOG_ID, EMPLYR_ID, MNGR_AT, SBSCRB_DE,
+ MBER_STTUS, USE_AT, FRST_REGIST_PNTTM, FRST_REGISTER_ID)
+ VALUES (#{blogId}, #{emplyrId}, #{mngrAt}, SYSDATE,
+ #{mberSttus}, #{useAt}, SYSDATE, #{frstRegisterId})
+
+ </insert>
+
+ <insert id="insertBlogMaster" parameterType="egovframework.com.cop.bbs.service.BlogVO">
+
+ INSERT INTO COMTNBLOG
+ (BLOG_ID, BLOG_NM, BLOG_INTRCN, REGIST_SE_CODE,
+ TMPLAT_ID, USE_AT, FRST_REGISTER_ID, FRST_REGIST_PNTTM, BBS_ID, BLOG_AT)
+ VALUES
+ (#{blogId}, #{blogNm}, #{blogIntrcn}, #{registSeCode},
+ #{tmplatId}, #{useAt}, #{frstRegisterId}, SYSDATE, #{bbsId}, #{blogAt})
+
+ </insert>
+
+ <select id="selectBlogListPortlet" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogListPortlet">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBLOG
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBBSListPortlet" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="BBSListPortlet">
+
+ SELECT
+ BBS_ID, BBS_TY_CODE, BBS_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTER
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_postgres.xml (revision 7)
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.07.14 신용호 게시판마스터 페이징처리 오류수정 (180. 게시판관리)
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSMaster">
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="bbsIntrcn" column="BBS_INTRCN"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="atchPosblFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="atchPosblFileSize" column="ATCH_POSBL_FILE_SIZE"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="tmplatNm" column="TMPLAT_NM"/>
+ <result property="authFlag" column="AUTH_FLAG"/>
+ <result property="tmplatCours" column="TMPLAT_COURS"/>
+ <result property="cmmntyId" column="CMMNTY_ID"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <resultMap id="boardMasterAll" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="BlogList" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="registSeCode" column="REGIST_SE_CODE"/>
+ <result property="registSeCodeNm" column="REGIST_SE_CODE_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="selectBlogDetail" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="blogIntrcn" column="BLOG_INTRCN"/>
+ </resultMap>
+
+ <resultMap id="selectBlogUser" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogListPortlet" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ </resultMap>
+
+ <resultMap id="BBSListPortlet" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <insert id="insertBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ INSERT INTO COMTNBBSMASTER
+ (BBS_ID, BBS_TY_CODE, BBS_NM, BBS_INTRCN,
+ REPLY_POSBL_AT, FILE_ATCH_POSBL_AT, ATCH_POSBL_FILE_NUMBER,
+ USE_AT, CMMNTY_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, BLOG_ID, BLOG_AT )
+ VALUES
+ ( #{bbsId}, #{bbsTyCode}, #{bbsNm}, #{bbsIntrcn},
+ #{replyPosblAt}, #{fileAtchPosblAt}, #{atchPosblFileNumber},
+ #{useAt}, #{cmmntyId}, #{frstRegisterId}, NOW(), #{blogId}, #{blogAt}
+ )
+
+ </insert>
+
+ <select id="selectBBSMasterList" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterList">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM,
+ a.BBS_NM,
+ a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYYmmdd') as FRST_REGIST_PNTTM,
+ d.USER_NM AS FRST_REGISTER_NM
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>
+ AND a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBBSMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.BBS_ID)
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>AND
+ a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ </select>
+
+ <select id="selectBBSMasterDetail" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM, a.BBS_INTRCN,
+ a.BBS_NM,
+ a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
+ a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM, a.CMMNTY_ID,
+ a.USE_AT, TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYYmmdd') as FRST_REGIST_PNTTM, BLOG_ID
+ ,(SELECT COALESCE(USE_AT,'N') FROM COMTNBBSUSE
+ WHERE BBS_ID = #{bbsId}
+ AND TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')
+ ) as AUTH_FLAG
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN COMVNUSERMASTER e
+ ON a.FRST_REGISTER_ID = e.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ BBS_NM = #{bbsNm},
+ BBS_INTRCN = #{bbsIntrcn},
+ BBS_TY_CODE = #{bbsTyCode},
+ FILE_ATCH_POSBL_AT = #{fileAtchPosblAt},
+ ATCH_POSBL_FILE_NUMBER = #{atchPosblFileNumber},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = NOW(),
+ USE_AT = #{useAt}
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <update id="deleteBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = NOW()
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <select id="selectBlogMasterList" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogList">
+
+ SELECT
+ a.BLOG_ID, a.BLOG_NM, a.USE_AT, a.REGIST_SE_CODE,
+ c.CODE_NM as REGIST_SE_CODE_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYYmmdd') as FRST_REGIST_PNTTM,
+ a.FRST_REGISTER_ID,
+ b.USER_NM as FRST_REGISTER_NM,
+ a.BBS_ID, d.AUTHOR_CODE
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBlogMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectBlogDetail" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogDetail">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, BLOG_INTRCN
+ FROM
+ COMTNBLOG
+ WHERE BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="checkExistUser" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <select id="checkExistUser2" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogUser">
+
+ SELECT
+ FRST_REGISTER_ID
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <insert id="insertBoardBlogUserRqst" parameterType="egovframework.com.cop.bbs.service.BlogUser">
+
+ INSERT INTO COMTNBLOGUSER
+ (BLOG_ID, EMPLYR_ID, MNGR_AT, SBSCRB_DE,
+ MBER_STTUS, USE_AT, FRST_REGIST_PNTTM, FRST_REGISTER_ID)
+ VALUES (#{blogId}, #{emplyrId}, #{mngrAt}, NOW(),
+ #{mberSttus}, #{useAt}, NOW(), #{frstRegisterId})
+
+ </insert>
+
+ <insert id="insertBlogMaster" parameterType="egovframework.com.cop.bbs.service.BlogVO">
+
+ INSERT INTO COMTNBLOG
+ (BLOG_ID, BLOG_NM, BLOG_INTRCN, REGIST_SE_CODE,
+ USE_AT, FRST_REGISTER_ID, FRST_REGIST_PNTTM, BBS_ID, BLOG_AT)
+ VALUES
+ (#{blogId}, #{blogNm}, #{blogIntrcn}, #{registSeCode},
+ #{useAt}, #{frstRegisterId}, NOW(), #{bbsId}, #{blogAt})
+
+ </insert>
+
+ <select id="selectBlogListPortlet" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogListPortlet">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBLOG
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBBSListPortlet" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="BBSListPortlet">
+
+ SELECT
+ BBS_ID, BBS_TY_CODE, BBS_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTER
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_mysql.xml (revision 7)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSAddedOptions">
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="commentAt" column="ANSWER_AT"/>
+ <result property="stsfdgAt" column="STSFDG_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <insert id="insertAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTEROPTN
+ (BBS_ID, ANSWER_AT, STSFDG_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM )
+ VALUES
+ ( #{bbsId},
+
+ <if test="option == ''">
+ 'N', 'N',
+ </if>
+ <if test="option == 'comment'">
+ 'Y', 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ 'N', 'Y',
+ </if>
+
+ #{frstRegisterId}, SYSDATE()
+ )
+
+ </insert>
+
+ <select id="selectAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
+ a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTEROPTN a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ UPDATE COMTNBBSMASTEROPTN SET
+
+ <if test="option == ''">
+ ANSWER_AT = 'N', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'comment'">
+ ANSWER_AT = 'Y', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ ANSWER_AT = 'N', STSFDG_AT = 'Y',
+ </if>
+
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_maria.xml (revision 7)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSAddedOptions">
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="commentAt" column="ANSWER_AT"/>
+ <result property="stsfdgAt" column="STSFDG_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <insert id="insertAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTEROPTN
+ (BBS_ID, ANSWER_AT, STSFDG_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM )
+ VALUES
+ ( #{bbsId},
+
+ <if test="option == ''">
+ 'N', 'N',
+ </if>
+ <if test="option == 'comment'">
+ 'Y', 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ 'N', 'Y',
+ </if>
+
+ #{frstRegisterId}, SYSDATE()
+ )
+
+ </insert>
+
+ <select id="selectAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
+ a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTEROPTN a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ UPDATE COMTNBBSMASTEROPTN SET
+
+ <if test="option == ''">
+ ANSWER_AT = 'N', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'comment'">
+ ANSWER_AT = 'Y', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ ANSWER_AT = 'N', STSFDG_AT = 'Y',
+ </if>
+
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:40 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSAddedOptions">
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="commentAt" column="ANSWER_AT"/>
+ <result property="stsfdgAt" column="STSFDG_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <insert id="insertAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ INSERT INTO COMTNBBSMASTEROPTN
+ (BBS_ID, ANSWER_AT, STSFDG_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM )
+ VALUES
+ ( #{bbsId},
+
+ <if test="option == ''">
+ 'N', 'N',
+ </if>
+ <if test="option == 'comment'">
+ 'Y', 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ 'N', 'Y',
+ </if>
+
+ #{frstRegisterId}, SYSDATETIME
+ )
+
+ </insert>
+
+ <select id="selectAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.ANSWER_AT, a.STSFDG_AT,
+ a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTEROPTN a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateAddedOptionsInf" parameterType="egovframework.com.cop.bbs.service.BoardMaster">
+
+ UPDATE COMTNBBSMASTEROPTN SET
+
+ <if test="option == ''">
+ ANSWER_AT = 'N', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'comment'">
+ ANSWER_AT = 'Y', STSFDG_AT = 'N',
+ </if>
+ <if test="option == 'stsfdg'">
+ ANSWER_AT = 'N', STSFDG_AT = 'Y',
+ </if>
+
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATETIME
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSAddedOptions_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,604 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.09.07 서준식 NTCE_BGNDE, NTCE_ENDDE 컬럼 빈공간에 의한 비교 오류 때문에 Rtrim() 추가
+ 2011.09.21 서준식 selectMaxNttId문에 COMMIT 될때까지 LOCK설정
+ 2011.09.21 서준식 NTT_ID를 IDGENT서비스를 사용해서 생성하므로 selectMaxNttId문은 실제 사용하지 않음
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSArticle">
+
+ <resultMap id="boardList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardDetail" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ </resultMap>
+
+ <resultMap id="sortList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ </resultMap>
+
+ <resultMap id="guestList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="detailCn" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardCnOne" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="nttCn" column="NTT_CN"/>
+ </resultMap>
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="boardBlogManager" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardSubJectList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+
+ <select id="selectMaxNttId" resultType="java.lang.Long">
+
+ SELECT NVL(NTT_ID,0)+1 AS NTT_ID FROM COMTNBBS WHERE NTT_ID=(SELECT MAX(NTT_ID) AS NTT_ID FROM COMTNBBS) FOR UPDATE WAIT 3
+
+ </select>
+
+ <insert id="insertArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT NVL(MAX(SORT_ORDR),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{nttId},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATETIME, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+ <insert id="replyArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT NVL(MAX(NTT_NO),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId} AND SORT_ORDR = #{sortOrdr}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{sortOrdr},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATETIME, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+
+
+ <select id="selectArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.NTT_ID)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectArticleDetail" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardDetail">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND a.USE_AT = 'Y'
+
+ </select>
+
+ <update id="updateArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ NTT_CN = #{nttCn},
+ NTCE_BGNDE = #{ntceBgnde},
+ NTCE_ENDDE = #{ntceEndde},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ ATCH_FILE_ID = #{atchFileId},
+ LAST_UPDT_PNTTM = SYSDATETIME,
+ SJ_BOLD_AT = #{sjBoldAt},
+ NOTICE_AT = #{noticeAt},
+ SECRET_AT = #{secretAt}
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <update id="deleteArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATETIME
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectMaxInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(RDCNT),0)+1 AS RDCNT FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </select>
+
+
+ <update id="updateInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ RDCNT = #{inqireCo},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATETIME
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectNoticeArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ AND a.NOTICE_AT = 'Y'
+
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) Z WHERE rn BETWEEN 1 AND 5
+
+ </select>
+
+ <select id="selectGuestArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="guestList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH:MI:SS') as FRST_REGIST_PNTTM,
+ a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
+ FROM
+ COMTNBBS a, COMVNUSERMASTER b
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.FRST_REGISTER_ID = b.ESNTL_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, a.NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectGuestArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(NTT_ID)
+ FROM
+ COMTNBBS
+ WHERE
+ BBS_ID = #{bbsId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleCnOne" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardCnOne">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_CN
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC
+ ) TB ) WHERE rn BETWEEN 1 AND 1
+
+ </select>
+
+ <select id="selectArticleDetailCn" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="detailCn">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailDefault" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardSubJectList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO,
+ a.NTCR_ID, d.BLOG_ID, d.REPLY_POSBL_AT
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="searchCnd == 5">
+ ) TB ) WHERE rn BETWEEN 1 AND 5
+ </if>
+ <if test="searchCnd == 10">
+ ) TB ) WHERE rn BETWEEN 1 AND 10
+ </if>
+ <if test="searchCnd == 15">
+ ) TB ) WHERE rn BETWEEN 1 AND 15
+ </if>
+ <if test="searchCnd == 20">
+ ) TB ) WHERE rn BETWEEN 1 AND 20
+ </if>
+ <if test="searchCnd == 30">
+ ) TB ) WHERE rn BETWEEN 1 AND 30
+ </if>
+
+ </select>
+
+ <select id="selectBlogNmList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardMasterList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN 1 AND 7
+ </select>
+
+ <select id="selectLoginUser" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE
+ FRST_REGISTER_ID = #{frstRegisterId}
+ AND
+ BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="selectBlogListManager" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardBlogManager">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM, C.USER_NM AS FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ A.USE_AT
+ FROM
+ COMTNBBSMASTER A
+ LEFT OUTER JOIN
+ COMTNBLOG B
+ ON A.BLOG_ID = B.BLOG_ID
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) C
+ ON A.FRST_REGISTER_ID = C.ESNTL_ID
+ WHERE A.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBlogListManagerCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(1)
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectArticleDetailDefaultCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_oracle.xml (revision 7)
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.07.14 신용호 게시판마스터 페이징처리 오류수정 (180. 게시판관리)
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSMaster">
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardMasterDetail" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="bbsIntrcn" column="BBS_INTRCN"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="atchPosblFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="atchPosblFileSize" column="ATCH_POSBL_FILE_SIZE"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE_NM"/>
+ <result property="tmplatNm" column="TMPLAT_NM"/>
+ <result property="authFlag" column="AUTH_FLAG"/>
+ <result property="tmplatCours" column="TMPLAT_COURS"/>
+ <result property="cmmntyId" column="CMMNTY_ID"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+ <resultMap id="boardMasterAll" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="tmplatId" column="TMPLAT_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogList" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="registSeCode" column="REGIST_SE_CODE"/>
+ <result property="registSeCodeNm" column="REGIST_SE_CODE_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="selectBlogDetail" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID" />
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ <result property="blogIntrcn" column="BLOG_INTRCN"/>
+ </resultMap>
+
+ <resultMap id="selectBlogUser" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="BlogListPortlet" type="egovframework.com.cop.bbs.service.BlogVO">
+ <result property="blogId" column="BLOG_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="blogNm" column="BLOG_NM"/>
+ </resultMap>
+
+ <resultMap id="BBSListPortlet" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsTyCodeNm" column="BBS_TY_CODE"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <insert id="insertBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ INSERT INTO COMTNBBSMASTER
+ (BBS_ID, BBS_TY_CODE, BBS_NM, BBS_INTRCN,
+ REPLY_POSBL_AT, FILE_ATCH_POSBL_AT, ATCH_POSBL_FILE_NUMBER,
+ TMPLAT_ID, USE_AT, CMMNTY_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, BLOG_ID, BLOG_AT )
+ VALUES
+ ( #{bbsId}, #{bbsTyCode}, #{bbsNm}, #{bbsIntrcn},
+ #{replyPosblAt}, #{fileAtchPosblAt}, #{atchPosblFileNumber},
+ #{tmplatId}, #{useAt}, #{cmmntyId}, #{frstRegisterId}, SYSDATE, #{blogId}, #{blogAt}
+ )
+
+ </insert>
+
+ <select id="selectBBSMasterList" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM,
+ a.BBS_NM,
+ a.TMPLAT_ID, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ d.USER_NM AS FRST_REGISTER_NM
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) d
+ ON a.FRST_REGISTER_ID = d.ESNTL_ID
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>
+ AND a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ b.CODE_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBBSMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.BBS_ID)
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM
+ COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ WHERE 1=1
+ <if test='cmmntyId != null and cmmntyId != ""'>AND
+ a.CMMNTY_ID = #{cmmntyId}
+ </if>
+ <if test="searchCnd == 0">AND
+ a.BBS_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.BBS_INTRCN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectBBSMasterDetail" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="boardMasterDetail">
+
+ SELECT
+ a.BBS_ID, a.BBS_TY_CODE, b.CODE_NM as BBS_TY_CODE_NM, a.BBS_INTRCN,
+ a.BBS_NM,
+ a.TMPLAT_ID, d.TMPLAT_NM, d.TMPLAT_COURS, a.FILE_ATCH_POSBL_AT, a.ATCH_POSBL_FILE_NUMBER,
+ a.ATCH_POSBL_FILE_SIZE, a.REPLY_POSBL_AT, a.FRST_REGISTER_ID, e.USER_NM as FRST_REGISTER_NM, a.CMMNTY_ID,
+ a.USE_AT, TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM
+ ,(SELECT NVL(USE_AT,'N') FROM COMTNBBSUSE
+ WHERE BBS_ID = #{bbsId}
+ AND TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')
+ ) as AUTH_FLAG
+ FROM
+ COMTNBBSMASTER a
+ LEFT OUTER JOIN
+ (SELECT CODE_ID, CODE, CODE_NM FROM COMTCCMMNDETAILCODE WHERE CODE_ID = 'COM101' AND USE_AT='Y') b
+ ON a.BBS_TY_CODE = b.CODE
+ LEFT OUTER JOIN COMTNTMPLATINFO d
+ ON a.TMPLAT_ID = d.TMPLAT_ID
+ LEFT OUTER JOIN COMVNUSERMASTER e
+ ON a.FRST_REGISTER_ID = e.ESNTL_ID
+ WHERE a.BBS_ID = #{bbsId}
+
+ </select>
+
+ <update id="updateBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ BBS_NM = #{bbsNm},
+ BBS_INTRCN = #{bbsIntrcn},
+ BBS_TY_CODE = #{bbsTyCode},
+ FILE_ATCH_POSBL_AT = #{fileAtchPosblAt},
+ ATCH_POSBL_FILE_NUMBER = #{atchPosblFileNumber},
+ ATCH_POSBL_FILE_SIZE = #{atchPosblFileSize},
+ TMPLAT_ID = #{tmplatId},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE,
+ USE_AT = #{useAt}
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <update id="deleteBBSMaster" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO">
+
+ UPDATE COMTNBBSMASTER SET
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+
+ </update>
+
+ <select id="selectBlogMasterList" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.BLOG_ID, a.BLOG_NM, a.USE_AT, a.REGIST_SE_CODE,
+ c.CODE_NM as REGIST_SE_CODE_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.FRST_REGISTER_ID,
+ b.USER_NM as FRST_REGISTER_NM,
+ a.BBS_ID, d.AUTHOR_CODE
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectBlogMasterListTotCnt" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.REGIST_SE_CODE = c.CODE
+ LEFT OUTER JOIN COMTNEMPLYRSCRTYESTBS d
+ ON a.FRST_REGISTER_ID = d.SCRTY_DTRMN_TRGET_ID
+ WHERE c.CODE_ID = 'COM001'
+
+ <if test="searchCnd == 0">AND
+ a.BLOG_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ </select>
+
+ <select id="selectBlogDetail" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogDetail">
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, BLOG_INTRCN
+ FROM
+ COMTNBLOG
+ WHERE BLOG_ID = #{blogId}
+ </select>
+
+ <select id="checkExistUser" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultType="java.lang.Integer">
+
+ SELECT COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <select id="checkExistUser2" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="selectBlogUser">
+
+ SELECT
+ FRST_REGISTER_ID
+ FROM
+ COMTNBLOG
+ WHERE FRST_REGISTER_ID = #{frstRegisterId}
+
+ </select>
+
+ <insert id="insertBoardBlogUserRqst" parameterType="egovframework.com.cop.bbs.service.BlogUser">
+
+ INSERT INTO COMTNBLOGUSER
+ (BLOG_ID, EMPLYR_ID, MNGR_AT, SBSCRB_DE,
+ MBER_STTUS, USE_AT, FRST_REGIST_PNTTM, FRST_REGISTER_ID)
+ VALUES (#{blogId}, #{emplyrId}, #{mngrAt}, SYSDATE,
+ #{mberSttus}, #{useAt}, SYSDATE, #{frstRegisterId})
+
+ </insert>
+
+ <insert id="insertBlogMaster" parameterType="egovframework.com.cop.bbs.service.BlogVO">
+
+ INSERT INTO COMTNBLOG
+ (BLOG_ID, BLOG_NM, BLOG_INTRCN, REGIST_SE_CODE,
+ TMPLAT_ID, USE_AT, FRST_REGISTER_ID, FRST_REGIST_PNTTM, BBS_ID, BLOG_AT)
+ VALUES
+ (#{blogId}, #{blogNm}, #{blogIntrcn}, #{registSeCode},
+ #{tmplatId}, #{useAt}, #{frstRegisterId}, SYSDATE, #{bbsId}, #{blogAt})
+
+ </insert>
+
+ <select id="selectBlogListPortlet" parameterType="egovframework.com.cop.bbs.service.BlogVO" resultMap="BlogListPortlet">
+
+ SELECT
+ BLOG_ID, BBS_ID, BLOG_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBLOG
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBBSListPortlet" parameterType="egovframework.com.cop.bbs.service.BoardMasterVO" resultMap="BBSListPortlet">
+
+ SELECT
+ BBS_ID, BBS_TY_CODE, BBS_NM, FRST_REGIST_PNTTM
+ FROM
+ COMTNBBSMASTER
+ WHERE USE_AT = 'Y'
+ ORDER BY FRST_REGIST_PNTTM DESC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovBBSMaster_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_altibase.xml (revision 7)
@@ -0,0 +1,604 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.09.07 서준식 NTCE_BGNDE, NTCE_ENDDE 컬럼 빈공간에 의한 비교 오류 때문에 Rtrim() 추가
+ 2011.09.21 서준식 selectMaxNttId문에 COMMIT 될때까지 LOCK설정
+ 2011.09.21 서준식 NTT_ID를 IDGENT서비스를 사용해서 생성하므로 selectMaxNttId문은 실제 사용하지 않음
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BBSArticle">
+
+ <resultMap id="boardList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardDetail" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ </resultMap>
+
+ <resultMap id="sortList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ </resultMap>
+
+ <resultMap id="guestList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="detailCn" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="ntcrId" column="NTCR_ID"/>
+ <result property="ntcrNm" column="NTCR_NM"/>
+ <result property="nttNo" column="NTT_NO"/>
+ <result property="nttCn" column="NTT_CN"/>
+ <result property="password" column="PASSWORD"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="sortOrdr" column="SORT_ORDR"/>
+ <result property="bbsTyCode" column="BBS_TY_CODE"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="fileAtchPosblAt" column="FILE_ATCH_POSBL_AT"/>
+ <result property="posblAtchFileNumber" column="ATCH_POSBL_FILE_NUMBER"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ </resultMap>
+
+ <resultMap id="boardCnOne" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="nttCn" column="NTT_CN"/>
+ </resultMap>
+
+ <resultMap id="boardMasterList" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ </resultMap>
+
+ <resultMap id="boardBlogManager" type="egovframework.com.cop.bbs.service.BoardMasterVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="bbsNm" column="BBS_NM"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ </resultMap>
+
+ <resultMap id="boardSubJectList" type="egovframework.com.cop.bbs.service.BoardVO">
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="nttSj" column="NTT_SJ"/>
+ <result property="frstRegisterId" column="FRST_REGISTER_ID"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="inqireCo" column="RDCNT"/>
+ <result property="parnts" column="PARNTSCTT_NO"/>
+ <result property="replyAt" column="ANSWER_AT"/>
+ <result property="replyLc" column="ANSWER_LC"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="atchFileId" column="ATCH_FILE_ID"/>
+ <result property="ntceBgnde" column="NTCE_BGNDE"/>
+ <result property="ntceEndde" column="NTCE_ENDDE"/>
+ <result property="sjBoldAt" column="SJ_BOLD_AT"/>
+ <result property="noticeAt" column="NOTICE_AT"/>
+ <result property="secretAt" column="SECRET_AT"/>
+ <result property="commentCo" column="COMMENT_CO"/>
+ <result property="replyPosblAt" column="REPLY_POSBL_AT"/>
+ <result property="blogId" column="BLOG_ID"/>
+ </resultMap>
+
+
+ <select id="selectMaxNttId" resultType="java.lang.Long">
+
+ SELECT NVL(NTT_ID,0)+1 AS NTT_ID FROM COMTNBBS WHERE NTT_ID=(SELECT MAX(NTT_ID) AS NTT_ID FROM COMTNBBS) FOR UPDATE WAIT 3
+
+ </select>
+
+ <insert id="insertArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT NVL(MAX(SORT_ORDR),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{nttId},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+ <insert id="replyArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+ <selectKey keyProperty="nttNo" resultType="java.lang.Long" order="BEFORE">
+ SELECT NVL(MAX(NTT_NO),0)+1 AS NTT_NO FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId} AND SORT_ORDR = #{sortOrdr}
+ </selectKey>
+
+ INSERT INTO COMTNBBS
+ (NTT_ID, BBS_ID, NTT_SJ, NTT_CN, SORT_ORDR,
+ NTCR_ID, NTCR_NM, PASSWORD, RDCNT,
+ NTCE_BGNDE, NTCE_ENDDE, ANSWER_AT,
+ PARNTSCTT_NO, NTT_NO, ANSWER_LC, ATCH_FILE_ID,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM, USE_AT,
+ SJ_BOLD_AT, NOTICE_AT, SECRET_AT
+ )
+ VALUES
+ ( #{nttId}, #{bbsId}, #{nttSj}, #{nttCn}, #{sortOrdr},
+ #{ntcrId}, #{ntcrNm}, #{password}, #{inqireCo},
+ #{ntceBgnde}, #{ntceEndde}, #{replyAt},
+ #{parnts}, 1, #{replyLc}, #{atchFileId},
+ #{frstRegisterId}, SYSDATE, 'Y',
+ #{sjBoldAt}, #{noticeAt}, #{secretAt}
+ )
+
+ </insert>
+
+ <select id="selectArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(a.NTT_ID) as cnt
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+
+ <if test="searchCnd == 0">AND
+ a.NTT_SJ LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 1">AND
+ a.NTT_CN LIKE '%' || #{searchWrd} || '%'
+ </if>
+ <if test="searchCnd == 2">AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%'
+ </if>
+ </select>
+
+ <select id="selectArticleDetail" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardDetail">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, b.USER_NM as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND a.USE_AT = 'Y'
+
+ </select>
+
+ <update id="updateArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ NTT_CN = #{nttCn},
+ NTCE_BGNDE = #{ntceBgnde},
+ NTCE_ENDDE = #{ntceEndde},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ ATCH_FILE_ID = #{atchFileId},
+ LAST_UPDT_PNTTM = SYSDATE,
+ SJ_BOLD_AT = #{sjBoldAt},
+ NOTICE_AT = #{noticeAt},
+ SECRET_AT = #{secretAt}
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <update id="deleteArticle" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ NTT_SJ = #{nttSj},
+ USE_AT = 'N',
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectMaxInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT NVL(MAX(RDCNT),0)+1 AS RDCNT FROM COMTNBBS
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </select>
+
+
+ <update id="updateInqireCo" parameterType="egovframework.com.cop.bbs.service.BoardVO">
+
+ UPDATE COMTNBBS SET
+ RDCNT = #{inqireCo},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE BBS_ID = #{bbsId}
+ AND NTT_ID = #{nttId}
+
+ </update>
+
+ <select id="selectNoticeArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, rtrim(a.NTCE_BGNDE) NTCE_BGNDE, rtrim(a.NTCE_ENDDE) NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ AND a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ AND a.NOTICE_AT = 'Y'
+
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN 1 AND 5
+
+ </select>
+
+ <select id="selectGuestArticleList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="guestList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH:MI:SS') as FRST_REGIST_PNTTM,
+ a.NTT_CN, a.USE_AT, a.BBS_ID, b.USER_NM as FRST_REGISTER_NM, a.FRST_REGISTER_ID
+ FROM
+ COMTNBBS a, COMVNUSERMASTER b
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.FRST_REGISTER_ID = b.ESNTL_ID
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, a.NTT_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectGuestArticleListCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(NTT_ID)
+ FROM
+ COMTNBBS
+ WHERE
+ BBS_ID = #{bbsId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectArticleDetailCn" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="detailCn">
+
+ SELECT
+ a.NTT_SJ, a.NTCR_ID, a.NTCR_NM, a.NTT_NO, a.NTT_CN,
+ a.PASSWORD, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.NTCE_BGNDE, a.NTCE_ENDDE, a.RDCNT,
+ a.USE_AT, a.ATCH_FILE_ID, a.BBS_ID, a.NTT_ID,
+ a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT,
+ a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.SORT_ORDR,
+ c.BBS_TY_CODE, c.REPLY_POSBL_AT,
+ c.FILE_ATCH_POSBL_AT, c.ATCH_POSBL_FILE_NUMBER, c.BBS_NM
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+
+ </select>
+
+ <select id="selectLoginUser" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(FRST_REGISTER_ID)
+ FROM
+ COMTNBLOG
+ WHERE
+ FRST_REGISTER_ID = #{frstRegisterId}
+ AND
+ BLOG_ID = #{blogId}
+
+ </select>
+
+ <select id="selectBlogListManager" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardBlogManager">
+
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM, C.USER_NM AS FRST_REGISTER_NM,
+ DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d') as FRST_REGIST_PNTTM,
+ A.USE_AT
+ FROM
+ COMTNBBSMASTER A
+ LEFT OUTER JOIN
+ COMTNBLOG B
+ ON A.BLOG_ID = B.BLOG_ID
+ LEFT OUTER JOIN
+ (SELECT ESNTL_ID, USER_ID, USER_NM FROM COMVNUSERMASTER) C
+ ON A.FRST_REGISTER_ID = C.ESNTL_ID
+ WHERE A.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectBlogListManagerCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(1)
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ <if test="searchCnd == 0">AND
+ A.BBS_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ <if test="searchCnd == 1">AND
+ A.BBS_INTRCN LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+
+ </select>
+
+ <select id="selectArticleCnOne" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardCnOne">
+
+ SELECT
+ a.NTT_CN
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER c
+ ON a.BBS_ID = c.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC
+ LIMIT 1
+
+ </select>
+
+ <select id="selectBlogNmList" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardMasterList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ A.BBS_ID, A.BLOG_ID, A.BBS_NM
+ FROM
+ COMTNBBSMASTER A, COMTNBLOG B
+ WHERE A.BLOG_ID = B.BLOG_ID
+ AND B.BLOG_ID = #{blogId}
+ ORDER BY A.FRST_REGIST_PNTTM DESC
+ ) TB ) WHERE rn BETWEEN 1 AND 7
+
+ </select>
+
+ <select id="selectArticleDetailDefault" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultMap="boardSubJectList">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.NTT_ID, a.NTT_SJ, a.NTT_CN, a.FRST_REGISTER_ID, NVL(b.USER_NM, a.NTCR_NM) as FRST_REGISTER_NM,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD') as FRST_REGIST_PNTTM,
+ a.RDCNT, a.PARNTSCTT_NO, a.ANSWER_AT, a.ANSWER_LC, a.USE_AT, a.ATCH_FILE_ID,
+ a.BBS_ID, a.NTCE_BGNDE, a.NTCE_ENDDE, a.SJ_BOLD_AT, a.NOTICE_AT, a.SECRET_AT, c.COMMENT_CO,
+ a.NTCR_ID, d.BLOG_ID, d.REPLY_POSBL_AT
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+ <if test="searchCnd == 5">
+ ) TB ) WHERE rn BETWEEN 1 AND 5
+ </if>
+ <if test="searchCnd == 10">
+ ) TB ) WHERE rn BETWEEN 1 AND 10
+ </if>
+ <if test="searchCnd == 15">
+ ) TB ) WHERE rn BETWEEN 1 AND 15
+ </if>
+ <if test="searchCnd == 20">
+ ) TB ) WHERE rn BETWEEN 1 AND 20
+ </if>
+ <if test="searchCnd == 30">
+ ) TB ) WHERE rn BETWEEN 1 AND 30
+ </if>
+
+ </select>
+
+ <select id="selectArticleDetailDefaultCnt" parameterType="egovframework.com.cop.bbs.service.BoardVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(*)
+ FROM
+ COMTNBBS a
+ LEFT OUTER JOIN
+ COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN
+ (SELECT NTT_ID, BBS_ID, COUNT(1) AS COMMENT_CO
+ FROM COMTNCOMMENT
+ WHERE USE_AT = 'Y'
+ GROUP BY NTT_ID, BBS_ID) c
+ ON a.NTT_ID = c.NTT_ID
+ LEFT OUTER JOIN
+ COMTNBBSMASTER d
+ ON a.BBS_ID = d.BBS_ID
+ WHERE
+ a.BBS_ID = #{bbsId}
+ AND a.USE_AT = 'Y'
+ ORDER BY a.SORT_ORDR DESC, NTT_NO ASC
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/bbs/EgovArticle_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_postgres.xml (revision 7)
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.9.7 정진오 resultMap id="commentDetail" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ "selectComment" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ 오라클 SQL MAP과 일치하도록 하기 위해 수정함
+ 2011.10.18 서준식 insertComment : select key 태그 삭제
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ArticleComment">
+
+ <resultMap id="commentList" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="commentDetail" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ </resultMap>
+
+ <select id="selectArticleCommentList" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentList">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_ID
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId} AND a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.FRST_REGIST_PNTTM ASC
+ LIMIT #{subRecordCountPerPage} OFFSET #{subFirstIndex}
+
+ </select>
+
+ <select id="selectArticleCommentListCnt" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ANSWER_NO)
+ FROM
+ COMTNCOMMENT
+ WHERE
+ BBS_ID = #{bbsId} AND NTT_ID = #{nttId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <insert id="insertArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+
+ INSERT INTO COMTNCOMMENT
+ (ANSWER_NO, NTT_ID, BBS_ID, WRTER_ID, WRTER_NM, PASSWORD,
+ ANSWER, USE_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM
+ )
+ VALUES
+ ( CAST(#{commentNo} AS NUMERIC), #{nttId}, #{bbsId}, #{wrterId}, #{wrterNm}, #{commentPassword},
+ #{commentCn}, 'Y',
+ #{frstRegisterId}, NOW()
+ )
+
+ </insert>
+
+ <update id="deleteArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT
+ SET USE_AT = 'N'
+ WHERE ANSWER_NO = CAST(#{commentNo} AS NUMERIC)
+
+ </update>
+
+ <select id="selectArticleCommentDetail" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentDetail">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-mm-dd HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_NM
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.ANSWER_NO = CAST(#{commentNo} AS NUMERIC)
+
+
+ </select>
+
+ <update id="updateArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT SET
+ ANSWER = #{commentCn},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = NOW()
+ WHERE ANSWER_NO = CAST(#{commentNo} AS NUMERIC)
+
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_maria.xml (revision 7)
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.9.7 정진오 resultMap id="commentDetail" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ "selectComment" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ 오라클 SQL MAP과 일치하도록 하기 위해 수정함
+ 2011.10.18 서준식 insertComment : select key 태그 삭제
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ArticleComment">
+
+ <resultMap id="commentList" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="commentDetail" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ </resultMap>
+
+ <select id="selectArticleCommentList" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentList">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_ID
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId} AND a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.FRST_REGIST_PNTTM ASC
+ LIMIT #{subRecordCountPerPage} OFFSET #{subFirstIndex}
+
+ </select>
+
+ <select id="selectArticleCommentListCnt" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ANSWER_NO)
+ FROM
+ COMTNCOMMENT
+ WHERE
+ BBS_ID = #{bbsId} AND NTT_ID = #{nttId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <insert id="insertArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+
+ INSERT INTO COMTNCOMMENT
+ (ANSWER_NO, NTT_ID, BBS_ID, WRTER_ID, WRTER_NM, PASSWORD,
+ ANSWER, USE_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM
+ )
+ VALUES
+ ( #{commentNo}, #{nttId}, #{bbsId}, #{wrterId}, #{wrterNm}, #{commentPassword},
+ #{commentCn}, 'Y',
+ #{frstRegisterId}, SYSDATE()
+ )
+
+ </insert>
+
+ <update id="deleteArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT
+ SET USE_AT = 'N'
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+ <select id="selectArticleCommentDetail" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentDetail">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_NM
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.ANSWER_NO = #{commentNo}
+
+
+ </select>
+
+ <update id="updateArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT SET
+ ANSWER = #{commentCn},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.9.7 정진오 resultMap id="commentDetail" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ "selectComment" : FRST_REGISTER_NM
+ 두 요소간 불일치로 인한 에러 발생 수정
+ 2011.10.18 서준식 insertComment : select key 태그 삭제
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ArticleComment">
+
+ <resultMap id="commentList" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="commentDetail" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ </resultMap>
+
+ <select id="selectArticleCommentList" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_ID
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId} AND a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.FRST_REGIST_PNTTM ASC
+ ) TB ) Z WHERE rn BETWEEN #{subFirstIndex} + 1 AND #{subFirstIndex} + #{subRecordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleCommentListCnt" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ANSWER_NO)
+ FROM
+ COMTNCOMMENT
+ WHERE
+ BBS_ID = #{bbsId} AND NTT_ID = #{nttId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <insert id="insertArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+
+ INSERT INTO COMTNCOMMENT
+ (ANSWER_NO, NTT_ID, BBS_ID, WRTER_ID, WRTER_NM, PASSWORD,
+ ANSWER, USE_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM
+ )
+ VALUES
+ ( #{commentNo}, #{nttId}, #{bbsId}, #{wrterId}, #{wrterNm}, #{commentPassword},
+ #{commentCn}, 'Y',
+ #{frstRegisterId}, SYSDATETIME
+ )
+
+ </insert>
+
+ <update id="deleteArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT
+ SET USE_AT = 'N'
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+ <select id="selectArticleCommentDetail" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentDetail">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_NM
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.ANSWER_NO = #{commentNo}
+
+
+ </select>
+
+ <update id="updateArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT SET
+ ANSWER = #{commentCn},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATETIME
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_oracle.xml (revision 7)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.9.7 정진오 resultMap id="commentDetail" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ "selectComment" : FRST_REGISTER_NM
+ 두 요소간 불일치로 인한 에러 발생 수정
+ 2011.10.18 서준식 insertComment : select key 태그 삭제
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ArticleComment">
+
+ <resultMap id="commentList" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="commentDetail" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ </resultMap>
+
+ <select id="selectArticleCommentList" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_ID
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId} AND a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.FRST_REGIST_PNTTM ASC
+ ) TB ) WHERE rn BETWEEN #{subFirstIndex} + 1 AND #{subFirstIndex} + #{subRecordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleCommentListCnt" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ANSWER_NO)
+ FROM
+ COMTNCOMMENT
+ WHERE
+ BBS_ID = #{bbsId} AND NTT_ID = #{nttId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <insert id="insertArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+
+ INSERT INTO COMTNCOMMENT
+ (ANSWER_NO, NTT_ID, BBS_ID, WRTER_ID, WRTER_NM, PASSWORD,
+ ANSWER, USE_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM
+ )
+ VALUES
+ ( #{commentNo}, #{nttId}, #{bbsId}, #{wrterId}, #{wrterNm}, #{commentPassword},
+ #{commentCn}, 'Y',
+ #{frstRegisterId}, SYSDATE
+ )
+
+ </insert>
+
+ <update id="deleteArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT
+ SET USE_AT = 'N'
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+ <select id="selectArticleCommentDetail" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentDetail">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_NM
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.ANSWER_NO = #{commentNo}
+
+
+ </select>
+
+ <update id="updateArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT SET
+ ANSWER = #{commentCn},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_altibase.xml (revision 7)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.9.7 정진오 resultMap id="commentDetail" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ "selectComment" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ 오라클 SQL MAP과 일치하도록 하기 위해 수정함
+ 2011.10.18 서준식 insertComment : select key 태그 삭제
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ArticleComment">
+
+ <resultMap id="commentList" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="commentDetail" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ </resultMap>
+
+ <select id="selectArticleCommentList" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_ID
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId} AND a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.FRST_REGIST_PNTTM ASC
+ ) TB ) WHERE rn BETWEEN #{subFirstIndex} + 1 AND #{subFirstIndex} + #{subRecordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleCommentListCnt" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ANSWER_NO) as cnt
+ FROM
+ COMTNCOMMENT
+ WHERE
+ BBS_ID = #{bbsId} AND NTT_ID = #{nttId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <insert id="insertArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+
+ INSERT INTO COMTNCOMMENT
+ (ANSWER_NO, NTT_ID, BBS_ID, WRTER_ID, WRTER_NM, PASSWORD,
+ ANSWER, USE_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM
+ )
+ VALUES
+ ( #{commentNo}, #{nttId}, #{bbsId}, #{wrterId}, #{wrterNm}, #{commentPassword},
+ #{commentCn}, 'Y',
+ #{frstRegisterId}, SYSDATE
+ )
+
+ </insert>
+
+ <update id="deleteArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT
+ SET USE_AT = 'N'
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+ <select id="selectArticleCommentDetail" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentDetail">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_NM
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.ANSWER_NO = #{commentNo}
+
+
+ </select>
+
+ <update id="updateArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT SET
+ ANSWER = #{commentCn},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_tibero.xml (revision 7)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.9.7 정진오 resultMap id="commentDetail" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ "selectComment" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ 오라클 SQL MAP과 일치하도록 하기 위해 수정함
+ 2011.10.18 서준식 insertComment : select key 태그 삭제
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ArticleComment">
+
+ <resultMap id="commentList" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="commentDetail" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ </resultMap>
+
+ <select id="selectArticleCommentList" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentList">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_ID
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId} AND a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.FRST_REGIST_PNTTM ASC
+ ) TB ) WHERE rn BETWEEN #{subFirstIndex} + 1 AND #{subFirstIndex} + #{subRecordCountPerPage}
+
+ </select>
+
+ <select id="selectArticleCommentListCnt" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ANSWER_NO)
+ FROM
+ COMTNCOMMENT
+ WHERE
+ BBS_ID = #{bbsId} AND NTT_ID = #{nttId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <insert id="insertArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+
+ INSERT INTO COMTNCOMMENT
+ (ANSWER_NO, NTT_ID, BBS_ID, WRTER_ID, WRTER_NM, PASSWORD,
+ ANSWER, USE_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM
+ )
+ VALUES
+ ( #{commentNo}, #{nttId}, #{bbsId}, #{wrterId}, #{wrterNm}, #{commentPassword},
+ #{commentCn}, 'Y',
+ #{frstRegisterId}, SYSDATE
+ )
+
+ </insert>
+
+ <update id="deleteArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT
+ SET USE_AT = 'N'
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+ <select id="selectArticleCommentDetail" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentDetail">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ TO_CHAR(a.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_NM
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.ANSWER_NO = #{commentNo}
+
+
+ </select>
+
+ <update id="updateArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT SET
+ ANSWER = #{commentCn},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_mysql.xml (revision 7)
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.9.7 정진오 resultMap id="commentDetail" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ "selectComment" : FRST_REGISTER_ID -> FRST_REGISTER_NM
+ 오라클 SQL MAP과 일치하도록 하기 위해 수정함
+ 2011.10.18 서준식 insertComment : select key 태그 삭제
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="ArticleComment">
+
+ <resultMap id="commentList" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_ID"/>
+ </resultMap>
+
+ <resultMap id="commentDetail" type="egovframework.com.cop.cmt.service.CommentVO">
+ <result property="commentNo" column="ANSWER_NO"/>
+ <result property="nttId" column="NTT_ID"/>
+ <result property="bbsId" column="BBS_ID"/>
+ <result property="wrterId" column="WRTER_ID"/>
+ <result property="wrterNm" column="WRTER_NM"/>
+ <result property="commentPassword" column="PASSWORD"/>
+ <result property="commentCn" column="ANSWER"/>
+ <result property="useAt" column="USE_AT"/>
+ <result property="frstRegisterPnttm" column="FRST_REGIST_PNTTM"/>
+ <result property="frstRegisterNm" column="FRST_REGISTER_NM"/>
+ </resultMap>
+
+ <select id="selectArticleCommentList" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentList">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_ID
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.BBS_ID = #{bbsId} AND a.NTT_ID = #{nttId}
+ AND
+ a.USE_AT = 'Y'
+ ORDER BY a.FRST_REGIST_PNTTM ASC
+ LIMIT #{subRecordCountPerPage} OFFSET #{subFirstIndex}
+
+ </select>
+
+ <select id="selectArticleCommentListCnt" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultType="java.lang.Integer">
+
+ SELECT
+ COUNT(ANSWER_NO)
+ FROM
+ COMTNCOMMENT
+ WHERE
+ BBS_ID = #{bbsId} AND NTT_ID = #{nttId}
+ AND
+ USE_AT = 'Y'
+
+ </select>
+
+ <insert id="insertArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+
+ INSERT INTO COMTNCOMMENT
+ (ANSWER_NO, NTT_ID, BBS_ID, WRTER_ID, WRTER_NM, PASSWORD,
+ ANSWER, USE_AT,
+ FRST_REGISTER_ID, FRST_REGIST_PNTTM
+ )
+ VALUES
+ ( #{commentNo}, #{nttId}, #{bbsId}, #{wrterId}, #{wrterNm}, #{commentPassword},
+ #{commentCn}, 'Y',
+ #{frstRegisterId}, SYSDATE()
+ )
+
+ </insert>
+
+ <update id="deleteArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT
+ SET USE_AT = 'N'
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+ <select id="selectArticleCommentDetail" parameterType="egovframework.com.cop.cmt.service.CommentVO" resultMap="commentDetail">
+
+ SELECT
+ a.ANSWER_NO, a.NTT_ID, a.BBS_ID,
+ a.WRTER_ID, a.WRTER_NM, a.PASSWORD, a.ANSWER, a.USE_AT,
+ DATE_FORMAT(a.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%S')
+ as FRST_REGIST_PNTTM,
+ b.USER_NM as FRST_REGISTER_NM
+ FROM
+ COMTNCOMMENT a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.FRST_REGISTER_ID = b.ESNTL_ID
+ WHERE
+ a.ANSWER_NO = #{commentNo}
+
+
+ </select>
+
+ <update id="updateArticleComment" parameterType="egovframework.com.cop.cmt.service.CommentVO">
+
+ UPDATE COMTNCOMMENT SET
+ ANSWER = #{commentCn},
+ LAST_UPDUSR_ID = #{lastUpdusrId},
+ LAST_UPDT_PNTTM = SYSDATE()
+ WHERE ANSWER_NO = #{commentNo}
+
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/cop/cmt/EgovArticleComment_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="entrprsManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <insert id="insertEntrprs_S">
+
+ INSERT INTO COMTNENTRPRSMBER
+ ( ESNTL_ID ,
+ ENTRPRS_MBER_ID ,
+ ENTRPRS_SE_CODE ,
+ BIZRNO ,
+ JURIRNO ,
+ CMPNY_NM ,
+ CXFC ,
+ ZIP ,
+ ADRES ,
+ ENTRPRS_MIDDLE_TELNO ,
+ FXNUM ,
+ INDUTY_CODE ,
+ APPLCNT_NM ,
+ SBSCRB_DE ,
+ ENTRPRS_MBER_STTUS ,
+ ENTRPRS_MBER_PASSWORD ,
+ ENTRPRS_MBER_PASSWORD_HINT ,
+ ENTRPRS_MBER_PASSWORD_CNSR ,
+ GROUP_ID ,
+ DETAIL_ADRES ,
+ ENTRPRS_END_TELNO ,
+ AREA_NO ,
+ APPLCNT_EMAIL_ADRES ,
+ APPLCNT_IHIDNUM ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId},
+ #{entrprsmberId},
+ #{entrprsSeCode},
+ #{bizrno},
+ #{jurirno},
+ #{cmpnyNm},
+ #{cxfc},
+ #{zip},
+ #{adres},
+ #{entrprsMiddleTelno},
+ #{fxnum},
+ #{indutyCode},
+ #{applcntNm},
+ sysdate(),
+ #{entrprsMberSttus},
+ #{entrprsMberPassword},
+ #{entrprsMberPasswordHint},
+ #{entrprsMberPasswordCnsr},
+ #{groupId},
+ #{detailAdres},
+ #{entrprsEndTelno},
+ #{areaNo},
+ #{applcntEmailAdres},
+ #{applcntIhidnum},
+ sysdate() )
+
+ </insert>
+
+ <delete id="deleteEntrprs_S">
+
+ DELETE FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectEntrprs_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID entrprsmberId,
+ ENTRPRS_SE_CODE entrprsSeCode,
+ BIZRNO bizrno,
+ JURIRNO jurirno,
+ CMPNY_NM cmpnyNm,
+ CXFC cxfc,
+ ZIP zip,
+ ADRES adres,
+ ENTRPRS_MIDDLE_TELNO entrprsMiddleTelno,
+ FXNUM fxnum,
+ INDUTY_CODE indutyCode,
+ APPLCNT_NM applcntNm,
+ SBSCRB_DE sbscrbDe,
+ ENTRPRS_MBER_STTUS entrprsMberSttus,
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword,
+ ENTRPRS_MBER_PASSWORD_HINT entrprsMberPasswordHint,
+ ENTRPRS_MBER_PASSWORD_CNSR entrprsMberPasswordCnsr,
+ GROUP_ID groupId,
+ DETAIL_ADRES detailAdres,
+ ENTRPRS_END_TELNO entrprsEndTelno,
+ AREA_NO areaNo,
+ APPLCNT_IHIDNUM applcntIhidnum,
+ APPLCNT_EMAIL_ADRES applcntEmailAdres,
+ LOCK_AT lockAt
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateEntrprs_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_ID = #{entrprsmberId},
+ ENTRPRS_SE_CODE = #{entrprsSeCode},
+ BIZRNO = #{bizrno},
+ JURIRNO = #{jurirno},
+ CMPNY_NM = #{cmpnyNm},
+ CXFC = #{cxfc},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ ENTRPRS_MIDDLE_TELNO = #{entrprsMiddleTelno},
+ FXNUM = #{fxnum},
+ INDUTY_CODE = #{indutyCode},
+ APPLCNT_NM = #{applcntNm},
+ ENTRPRS_MBER_STTUS = #{entrprsMberSttus},
+ ENTRPRS_MBER_PASSWORD_HINT = #{entrprsMberPasswordHint},
+ ENTRPRS_MBER_PASSWORD_CNSR = #{entrprsMberPasswordCnsr},
+ GROUP_ID = #{groupId},
+ DETAIL_ADRES = #{detailAdres},
+ ENTRPRS_END_TELNO = #{entrprsEndTelno},
+ AREA_NO = #{areaNo},
+ APPLCNT_EMAIL_ADRES = #{applcntEmailAdres}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_PASSWORD = #{entrprsMberPassword}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <select id="selectEntrprsMberList" resultType="egovMap">
+ SELECT
+ uniqId, userTy, userId , cmpnyNm, userNm, emailAdres, areaNo, middleTelno, endTelno, moblphonNo, groupId, sttus, sbscrbDe
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID userId,
+ CMPNY_NM cmpnyNm,
+ APPLCNT_NM userNm,
+ APPLCNT_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ ENTRPRS_MIDDLE_TELNO middleTelno,
+ ENTRPRS_END_TELNO endTelno,
+ '' moblphonNo,
+ GROUP_ID groupId,
+ ENTRPRS_MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNENTRPRSMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE '%' #{searchKeyword} '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+
+ ORDER BY sbscrbDe DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+
+ <select id="selectEntrprsMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID userId,
+ CMPNY_NM cmpnyNm,
+ APPLCNT_NM userNm,
+ APPLCNT_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ ENTRPRS_MIDDLE_TELNO middleTelno,
+ ENTRPRS_END_TELNO endTelno,
+ '' moblphonNo,
+ GROUP_ID groupId,
+ ENTRPRS_MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNENTRPRSMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE '%' #{searchKeyword} '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="mberManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <select id="selectMberList" resultType="egovMap">
+SELECT
+ uniqId, userTy, userId , userNm, emailAdres, areaNo, middleTelno, endTelno, moblphonNo, groupId, sttus, sbscrbDe
+FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID userId,
+ MBER_NM userNm,
+ MBER_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ MIDDLE_TELNO middleTelno,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+ ORDER BY sbscrbDe DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+
+ <select id="selectMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID userId,
+ MBER_NM userNm,
+ MBER_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ MIDDLE_TELNO middleTelno,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertMber_S">
+
+ INSERT INTO COMTNGNRLMBER
+ (
+ ESNTL_ID ,
+ MBER_ID ,
+ MBER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ ZIP ,
+ ADRES ,
+ AREA_NO ,
+ MBER_STTUS ,
+ DETAIL_ADRES ,
+ END_TELNO ,
+ MBTLNUM ,
+ GROUP_ID ,
+ MBER_FXNUM ,
+ MBER_EMAIL_ADRES ,
+ MIDDLE_TELNO ,
+ SBSCRB_DE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES(
+ #{uniqId},
+ #{mberId},
+ #{mberNm},
+ #{password},
+ #{passwordHint},
+ #{passwordCnsr},
+ #{ihidnum},
+ #{sexdstnCode},
+ #{zip},
+ #{adres},
+ #{areaNo},
+ #{mberSttus},
+ #{detailAdres},
+ #{endTelno},
+ #{moblphonNo},
+ #{groupId},
+ #{mberFxnum},
+ #{mberEmailAdres},
+ #{middleTelno},
+ sysdate(),
+ sysdate() )
+
+ </insert>
+
+ <delete id="deleteMber_S">
+
+ DELETE FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectMber_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID mberId,
+ MBER_NM mberNm,
+ PASSWORD password,
+ PASSWORD_HINT passwordHint,
+ PASSWORD_CNSR passwordCnsr,
+ IHIDNUM ihidnum,
+ SEXDSTN_CODE sexdstnCode,
+ ZIP zip,
+ ADRES adres,
+ AREA_NO areaNo,
+ MBER_STTUS mberSttus,
+ DETAIL_ADRES detailAdres,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_FXNUM mberFxnum,
+ MBER_EMAIL_ADRES mberEmailAdres,
+ MIDDLE_TELNO middleTelno,
+ SBSCRB_DE sbscrbDe,
+ LOCK_AT lockAt
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateMber_S">
+
+ UPDATE COMTNGNRLMBER
+ SET MBER_ID = #{mberId},
+ MBER_NM = #{mberNm},
+ PASSWORD_HINT = #{passwordHint},
+ PASSWORD_CNSR = #{passwordCnsr},
+ IHIDNUM = #{ihidnum},
+ SEXDSTN_CODE = #{sexdstnCode},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ AREA_NO = #{areaNo},
+ MBER_STTUS = #{mberSttus},
+ DETAIL_ADRES = #{detailAdres},
+ END_TELNO = #{endTelno},
+ MBTLNUM = #{moblphonNo},
+ GROUP_ID = #{groupId},
+ MBER_FXNUM = #{mberFxnum},
+ MBER_EMAIL_ADRES = #{mberEmailAdres},
+ MIDDLE_TELNO = #{middleTelno}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNGNRLMBER
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="deptManageDAO">
+
+ <resultMap id="deptManageVO" type="egovframework.com.uss.umt.service.DeptManageVO">
+ <result property="orgnztId" column="ORGNZT_ID"/>
+ <result property="orgnztNm" column="ORGNZT_NM"/>
+ <result property="orgnztDc" column="ORGNZT_DC"/>
+ </resultMap>
+
+ <select id="selectDeptManageList" resultMap="deptManageVO">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ORGNZT_ID DESC
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectDeptManageListTotCnt" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectDeptManage" resultMap="deptManageVO">
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </select>
+
+ <insert id="insertDeptManage">
+
+ INSERT INTO COMTNORGNZTINFO
+ (ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC)
+ VALUES (#{orgnztId},
+ #{orgnztNm},
+ #{orgnztDc})
+
+ </insert>
+
+ <update id="updateDeptManage">
+ UPDATE COMTNORGNZTINFO
+ SET ORGNZT_NM = #{orgnztNm},
+ ORGNZT_DC = #{orgnztDc}
+ WHERE ORGNZT_ID = #{orgnztId}
+ </update>
+
+ <delete id="deleteDeptManage">
+
+ DELETE FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="mberManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <select id="selectMberList" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR01' as "userTy",
+ MBER_ID as "userId",
+ MBER_NM as "userNm",
+ MBER_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ MIDDLE_TELNO as "middleTelno",
+ END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+
+ <select id="selectMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertMber_S">
+
+ INSERT INTO COMTNGNRLMBER
+ (
+ ESNTL_ID ,
+ MBER_ID ,
+ MBER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ ZIP ,
+ ADRES ,
+ AREA_NO ,
+ MBER_STTUS ,
+ DETAIL_ADRES ,
+ END_TELNO ,
+ MBTLNUM ,
+ GROUP_ID ,
+ MBER_FXNUM ,
+ MBER_EMAIL_ADRES ,
+ MIDDLE_TELNO ,
+ SBSCRB_DE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES(
+ #{uniqId},
+ #{mberId},
+ #{mberNm},
+ #{password},
+ #{passwordHint},
+ #{passwordCnsr},
+ #{ihidnum},
+ #{sexdstnCode},
+ #{zip},
+ #{adres},
+ #{areaNo},
+ #{mberSttus},
+ #{detailAdres},
+ #{endTelno},
+ #{moblphonNo},
+ #{groupId},
+ #{mberFxnum},
+ #{mberEmailAdres},
+ #{middleTelno},
+ SYSDATETIME,
+ SYSDATETIME )
+
+ </insert>
+
+ <delete id="deleteMber_S">
+
+ DELETE FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectMber_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID mberId,
+ MBER_NM mberNm,
+ PASSWORD password,
+ PASSWORD_HINT passwordHint,
+ PASSWORD_CNSR passwordCnsr,
+ IHIDNUM ihidnum,
+ SEXDSTN_CODE sexdstnCode,
+ ZIP zip,
+ ADRES adres,
+ AREA_NO areaNo,
+ MBER_STTUS mberSttus,
+ DETAIL_ADRES detailAdres,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_FXNUM mberFxnum,
+ MBER_EMAIL_ADRES mberEmailAdres,
+ MIDDLE_TELNO middleTelno,
+ SBSCRB_DE sbscrbDe,
+ LOCK_AT lockAt
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateMber_S">
+
+ UPDATE COMTNGNRLMBER
+ SET MBER_ID = #{mberId},
+ MBER_NM = #{mberNm},
+ PASSWORD_HINT = #{passwordHint},
+ PASSWORD_CNSR = #{passwordCnsr},
+ IHIDNUM = #{ihidnum},
+ SEXDSTN_CODE = #{sexdstnCode},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ AREA_NO = #{areaNo},
+ MBER_STTUS = #{mberSttus},
+ DETAIL_ADRES = #{detailAdres},
+ END_TELNO = #{endTelno},
+ MBTLNUM = #{moblphonNo},
+ GROUP_ID = #{groupId},
+ MBER_FXNUM = #{mberFxnum},
+ MBER_EMAIL_ADRES = #{mberEmailAdres},
+ MIDDLE_TELNO = #{middleTelno}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNGNRLMBER
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = SYSDATETIME
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="deptManageDAO">
+
+ <resultMap id="deptManageVO" type="egovframework.com.uss.umt.service.DeptManageVO">
+ <result property="orgnztId" column="ORGNZT_ID"/>
+ <result property="orgnztNm" column="ORGNZT_NM"/>
+ <result property="orgnztDc" column="ORGNZT_DC"/>
+ </resultMap>
+
+ <select id="selectDeptManageList" resultMap="deptManageVO">
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <![CDATA[
+ ORDER BY ORGNZT_ID DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ ]]>
+ </select>
+
+ <select id="selectDeptManageListTotCnt" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectDeptManage" resultMap="deptManageVO">
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </select>
+
+ <insert id="insertDeptManage">
+
+ INSERT INTO COMTNORGNZTINFO
+ (ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC)
+ VALUES (#{orgnztId},
+ #{orgnztNm},
+ #{orgnztDc})
+
+ </insert>
+
+ <update id="updateDeptManage">
+ UPDATE COMTNORGNZTINFO
+ SET ORGNZT_NM = #{orgnztNm},
+ ORGNZT_DC = #{orgnztDc}
+ WHERE ORGNZT_ID = #{orgnztId}
+ </update>
+
+ <delete id="deleteDeptManage">
+
+ DELETE FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="entrprsManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <insert id="insertEntrprs_S">
+
+ INSERT INTO COMTNENTRPRSMBER
+ ( ESNTL_ID ,
+ ENTRPRS_MBER_ID ,
+ ENTRPRS_SE_CODE ,
+ BIZRNO ,
+ JURIRNO ,
+ CMPNY_NM ,
+ CXFC ,
+ ZIP ,
+ ADRES ,
+ ENTRPRS_MIDDLE_TELNO ,
+ FXNUM ,
+ INDUTY_CODE ,
+ APPLCNT_NM ,
+ SBSCRB_DE ,
+ ENTRPRS_MBER_STTUS ,
+ ENTRPRS_MBER_PASSWORD ,
+ ENTRPRS_MBER_PASSWORD_HINT ,
+ ENTRPRS_MBER_PASSWORD_CNSR ,
+ GROUP_ID ,
+ DETAIL_ADRES ,
+ ENTRPRS_END_TELNO ,
+ AREA_NO ,
+ APPLCNT_EMAIL_ADRES ,
+ APPLCNT_IHIDNUM ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId},
+ #{entrprsmberId},
+ #{entrprsSeCode},
+ #{bizrno},
+ #{jurirno},
+ #{cmpnyNm},
+ #{cxfc},
+ #{zip},
+ #{adres},
+ #{entrprsMiddleTelno},
+ #{fxnum},
+ #{indutyCode},
+ #{applcntNm},
+ SYSDATETIME,
+ #{entrprsMberSttus},
+ #{entrprsMberPassword},
+ #{entrprsMberPasswordHint},
+ #{entrprsMberPasswordCnsr},
+ #{groupId},
+ #{detailAdres},
+ #{entrprsEndTelno},
+ #{areaNo},
+ #{applcntEmailAdres},
+ #{applcntIhidnum},
+ SYSDATETIME )
+
+ </insert>
+
+ <delete id="deleteEntrprs_S">
+
+ DELETE FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectEntrprs_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID entrprsmberId,
+ ENTRPRS_SE_CODE entrprsSeCode,
+ BIZRNO bizrno,
+ JURIRNO jurirno,
+ CMPNY_NM cmpnyNm,
+ CXFC cxfc,
+ ZIP zip,
+ ADRES adres,
+ ENTRPRS_MIDDLE_TELNO entrprsMiddleTelno,
+ FXNUM fxnum,
+ INDUTY_CODE indutyCode,
+ APPLCNT_NM applcntNm,
+ SBSCRB_DE sbscrbDe,
+ ENTRPRS_MBER_STTUS entrprsMberSttus,
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword,
+ ENTRPRS_MBER_PASSWORD_HINT entrprsMberPasswordHint,
+ ENTRPRS_MBER_PASSWORD_CNSR entrprsMberPasswordCnsr,
+ GROUP_ID groupId,
+ DETAIL_ADRES detailAdres,
+ ENTRPRS_END_TELNO entrprsEndTelno,
+ AREA_NO areaNo,
+ APPLCNT_IHIDNUM applcntIhidnum,
+ APPLCNT_EMAIL_ADRES applcntEmailAdres,
+ LOCK_AT lockAt
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateEntrprs_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_ID = #{entrprsmberId},
+ ENTRPRS_SE_CODE = #{entrprsSeCode},
+ BIZRNO = #{bizrno},
+ JURIRNO = #{jurirno},
+ CMPNY_NM = #{cmpnyNm},
+ CXFC = #{cxfc},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ ENTRPRS_MIDDLE_TELNO = #{entrprsMiddleTelno},
+ FXNUM = #{fxnum},
+ INDUTY_CODE = #{indutyCode},
+ APPLCNT_NM = #{applcntNm},
+ ENTRPRS_MBER_STTUS = #{entrprsMberSttus},
+ ENTRPRS_MBER_PASSWORD_HINT = #{entrprsMberPasswordHint},
+ ENTRPRS_MBER_PASSWORD_CNSR = #{entrprsMberPasswordCnsr},
+ GROUP_ID = #{groupId},
+ DETAIL_ADRES = #{detailAdres},
+ ENTRPRS_END_TELNO = #{entrprsEndTelno},
+ AREA_NO = #{areaNo},
+ APPLCNT_EMAIL_ADRES = #{applcntEmailAdres}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_PASSWORD = #{entrprsMberPassword}
+ , CHG_PWD_LAST_PNTTM = SYSDATETIME
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <select id="selectEntrprsMberList" resultType="egovMap">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR02' as "userTy",
+ ENTRPRS_MBER_ID as "userId",
+ CMPNY_NM as "cmpnyNm",
+ APPLCNT_NM as "userNm",
+ APPLCNT_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ ENTRPRS_MIDDLE_TELNO as "middleTelno",
+ ENTRPRS_END_TELNO as "endTelno",
+ '' as "moblphonNo",
+ GROUP_ID as "groupId",
+ ENTRPRS_MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND APPLCNT_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 13 DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+
+ <select id="selectEntrprsMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">
+ AND APPLCNT_NM LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="mberManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <select id="selectMberList" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR01' as "userTy",
+ MBER_ID as "userId",
+ MBER_NM as "userNm",
+ MBER_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ MIDDLE_TELNO as "middleTelno",
+ END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+
+ <select id="selectMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertMber_S">
+
+ INSERT INTO COMTNGNRLMBER
+ (
+ ESNTL_ID ,
+ MBER_ID ,
+ MBER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ ZIP ,
+ ADRES ,
+ AREA_NO ,
+ MBER_STTUS ,
+ DETAIL_ADRES ,
+ END_TELNO ,
+ MBTLNUM ,
+ GROUP_ID ,
+ MBER_FXNUM ,
+ MBER_EMAIL_ADRES ,
+ MIDDLE_TELNO ,
+ SBSCRB_DE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES(
+ #{uniqId},
+ #{mberId},
+ #{mberNm},
+ #{password},
+ #{passwordHint},
+ #{passwordCnsr},
+ #{ihidnum},
+ #{sexdstnCode},
+ #{zip},
+ #{adres},
+ #{areaNo},
+ #{mberSttus},
+ #{detailAdres},
+ #{endTelno},
+ #{moblphonNo},
+ #{groupId},
+ #{mberFxnum},
+ #{mberEmailAdres},
+ #{middleTelno},
+ sysdate,
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteMber_S">
+
+ DELETE FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectMber_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID mberId,
+ MBER_NM mberNm,
+ PASSWORD password,
+ PASSWORD_HINT passwordHint,
+ PASSWORD_CNSR passwordCnsr,
+ IHIDNUM ihidnum,
+ SEXDSTN_CODE sexdstnCode,
+ ZIP zip,
+ ADRES adres,
+ AREA_NO areaNo,
+ MBER_STTUS mberSttus,
+ DETAIL_ADRES detailAdres,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_FXNUM mberFxnum,
+ MBER_EMAIL_ADRES mberEmailAdres,
+ MIDDLE_TELNO middleTelno,
+ SBSCRB_DE sbscrbDe,
+ LOCK_AT lockAt
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateMber_S">
+
+ UPDATE COMTNGNRLMBER
+ SET MBER_ID = #{mberId},
+ MBER_NM = #{mberNm},
+ PASSWORD_HINT = #{passwordHint},
+ PASSWORD_CNSR = #{passwordCnsr},
+ IHIDNUM = #{ihidnum},
+ SEXDSTN_CODE = #{sexdstnCode},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ AREA_NO = #{areaNo},
+ MBER_STTUS = #{mberSttus},
+ DETAIL_ADRES = #{detailAdres},
+ END_TELNO = #{endTelno},
+ MBTLNUM = #{moblphonNo},
+ GROUP_ID = #{groupId},
+ MBER_FXNUM = #{mberFxnum},
+ MBER_EMAIL_ADRES = #{mberEmailAdres},
+ MIDDLE_TELNO = #{middleTelno}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNGNRLMBER
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userManageDAO">
+
+ <select id="selectUserList_S" resultType="egovMap">
+SELECT
+ uniqId, userTy, userId , userNm, emailAdres, areaNo, middleTelno, endTelno, moblphonNo, groupId, sttus, sbscrbDe
+FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR03' userTy,
+ EMPLYR_ID userId,
+ USER_NM userNm,
+ EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ HOUSE_MIDDLE_TELNO middleTelno,
+ HOUSE_END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ EMPLYR_STTUS_CODE sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNEMPLYRINFO
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+
+ ORDER BY sbscrbDe DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectUserListTotCnt_S" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR03' userTy,
+ EMPLYR_ID userId,
+ USER_NM userNm,
+ EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ HOUSE_MIDDLE_TELNO middleTelno,
+ HOUSE_END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ EMPLYR_STTUS_CODE sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNEMPLYRINFO
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertUser_S">
+
+ INSERT INTO COMTNEMPLYRINFO
+ ( ESNTL_ID ,
+ EMPLYR_ID ,
+ USER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ EMPL_NO ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ OFCPS_NM ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ SBSCRB_DE ,
+ CRTFC_DN_VALUE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId} ,
+ #{emplyrId} ,
+ #{emplyrNm} ,
+ #{password} ,
+ #{passwordHint} ,
+ #{passwordCnsr} ,
+ #{emplNo} ,
+ #{ihidnum} ,
+ #{sexdstnCode} ,
+ #{brth} ,
+ #{areaNo} ,
+ #{homemiddleTelno} ,
+ #{homeendTelno} ,
+ #{fxnum} ,
+ #{homeadres} ,
+ #{detailAdres} ,
+ #{zip} ,
+ #{offmTelno} ,
+ #{moblphonNo} ,
+ #{emailAdres} ,
+ #{ofcpsNm} ,
+ #{groupId} ,
+ #{orgnztId} ,
+ #{insttCode} ,
+ #{emplyrSttusCode} ,
+ sysdate() ,
+ #{subDn} ,
+ sysdate() )
+
+ </insert>
+
+ <delete id="deleteUser_S">
+
+ DELETE FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectUser_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ ESNTL_ID uniqId ,
+ 'USR03' userTy,
+ EMPLYR_ID emplyrId ,
+ USER_NM emplyrNm ,
+ PASSWORD password ,
+ PASSWORD_HINT passwordHint ,
+ PASSWORD_CNSR passwordCnsr ,
+ EMPL_NO emplNo ,
+ IHIDNUM ihidnum ,
+ SEXDSTN_CODE sexdstnCode ,
+ BRTHDY brth ,
+ AREA_NO areaNo ,
+ HOUSE_MIDDLE_TELNO homemiddleTelno ,
+ HOUSE_END_TELNO homeendTelno ,
+ FXNUM fxnum ,
+ HOUSE_ADRES homeadres ,
+ DETAIL_ADRES detailAdres ,
+ ZIP zip ,
+ OFFM_TELNO offmTelno ,
+ MBTLNUM moblphonNo ,
+ EMAIL_ADRES emailAdres ,
+ OFCPS_NM ofcpsNm ,
+ GROUP_ID groupId ,
+ ORGNZT_ID orgnztId ,
+ PSTINST_CODE insttCode ,
+ EMPLYR_STTUS_CODE emplyrSttusCode ,
+ SBSCRB_DE sbscrbDe ,
+ CRTFC_DN_VALUE subDn,
+ LOCK_AT lockAt
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateUser_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET EMPLYR_ID = #{emplyrId} ,
+ USER_NM = #{emplyrNm} ,
+ PASSWORD_HINT = #{passwordHint} ,
+ PASSWORD_CNSR = #{passwordCnsr} ,
+ EMPL_NO = #{emplNo} ,
+ IHIDNUM = #{ihidnum} ,
+ SEXDSTN_CODE = #{sexdstnCode} ,
+ BRTHDY = #{brth} ,
+ AREA_NO = #{areaNo} ,
+ HOUSE_MIDDLE_TELNO = #{homemiddleTelno} ,
+ HOUSE_END_TELNO = #{homeendTelno} ,
+ FXNUM = #{fxnum} ,
+ HOUSE_ADRES = #{homeadres} ,
+ DETAIL_ADRES = #{detailAdres} ,
+ ZIP = #{zip} ,
+ OFFM_TELNO = #{offmTelno} ,
+ MBTLNUM = #{moblphonNo} ,
+ EMAIL_ADRES = #{emailAdres} ,
+ OFCPS_NM = #{ofcpsNm} ,
+ GROUP_ID = #{groupId} ,
+ ORGNZT_ID = #{orgnztId} ,
+ PSTINST_CODE = #{insttCode} ,
+ EMPLYR_STTUS_CODE = #{emplyrSttusCode} ,
+ CRTFC_DN_VALUE = #{subDn}
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <insert id="insertUserHistory_S">
+
+ INSERT INTO COMTHEMPLYRINFOCHANGEDTLS
+ ( EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ CHANGE_DE )
+ SELECT
+ EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ now()
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+
+ </insert>
+
+ <select id="checkIdDplct_S" resultType="int">
+
+ SELECT COUNT(1) usedCnt
+ FROM(
+ SELECT
+ EMPLYR_ID userId
+ FROM COMTNEMPLYRINFO
+ UNION ALL
+ SELECT
+ ENTRPRS_MBER_ID userId
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT
+ MBER_ID userId
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE userId = #{checkId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="entrprsManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <insert id="insertEntrprs_S">
+
+ INSERT INTO COMTNENTRPRSMBER
+ ( ESNTL_ID ,
+ ENTRPRS_MBER_ID ,
+ ENTRPRS_SE_CODE ,
+ BIZRNO ,
+ JURIRNO ,
+ CMPNY_NM ,
+ CXFC ,
+ ZIP ,
+ ADRES ,
+ ENTRPRS_MIDDLE_TELNO ,
+ FXNUM ,
+ INDUTY_CODE ,
+ APPLCNT_NM ,
+ SBSCRB_DE ,
+ ENTRPRS_MBER_STTUS ,
+ ENTRPRS_MBER_PASSWORD ,
+ ENTRPRS_MBER_PASSWORD_HINT ,
+ ENTRPRS_MBER_PASSWORD_CNSR ,
+ GROUP_ID ,
+ DETAIL_ADRES ,
+ ENTRPRS_END_TELNO ,
+ AREA_NO ,
+ APPLCNT_EMAIL_ADRES ,
+ APPLCNT_IHIDNUM ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId},
+ #{entrprsmberId},
+ #{entrprsSeCode},
+ #{bizrno},
+ #{jurirno},
+ #{cmpnyNm},
+ #{cxfc},
+ #{zip},
+ #{adres},
+ #{entrprsMiddleTelno},
+ #{fxnum},
+ #{indutyCode},
+ #{applcntNm},
+ sysdate(),
+ #{entrprsMberSttus},
+ #{entrprsMberPassword},
+ #{entrprsMberPasswordHint},
+ #{entrprsMberPasswordCnsr},
+ #{groupId},
+ #{detailAdres},
+ #{entrprsEndTelno},
+ #{areaNo},
+ #{applcntEmailAdres},
+ #{applcntIhidnum},
+ sysdate() )
+
+ </insert>
+
+ <delete id="deleteEntrprs_S">
+
+ DELETE FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectEntrprs_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID entrprsmberId,
+ ENTRPRS_SE_CODE entrprsSeCode,
+ BIZRNO bizrno,
+ JURIRNO jurirno,
+ CMPNY_NM cmpnyNm,
+ CXFC cxfc,
+ ZIP zip,
+ ADRES adres,
+ ENTRPRS_MIDDLE_TELNO entrprsMiddleTelno,
+ FXNUM fxnum,
+ INDUTY_CODE indutyCode,
+ APPLCNT_NM applcntNm,
+ SBSCRB_DE sbscrbDe,
+ ENTRPRS_MBER_STTUS entrprsMberSttus,
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword,
+ ENTRPRS_MBER_PASSWORD_HINT entrprsMberPasswordHint,
+ ENTRPRS_MBER_PASSWORD_CNSR entrprsMberPasswordCnsr,
+ GROUP_ID groupId,
+ DETAIL_ADRES detailAdres,
+ ENTRPRS_END_TELNO entrprsEndTelno,
+ AREA_NO areaNo,
+ APPLCNT_IHIDNUM applcntIhidnum,
+ APPLCNT_EMAIL_ADRES applcntEmailAdres,
+ LOCK_AT lockAt
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateEntrprs_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_ID = #{entrprsmberId},
+ ENTRPRS_SE_CODE = #{entrprsSeCode},
+ BIZRNO = #{bizrno},
+ JURIRNO = #{jurirno},
+ CMPNY_NM = #{cmpnyNm},
+ CXFC = #{cxfc},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ ENTRPRS_MIDDLE_TELNO = #{entrprsMiddleTelno},
+ FXNUM = #{fxnum},
+ INDUTY_CODE = #{indutyCode},
+ APPLCNT_NM = #{applcntNm},
+ ENTRPRS_MBER_STTUS = #{entrprsMberSttus},
+ ENTRPRS_MBER_PASSWORD_HINT = #{entrprsMberPasswordHint},
+ ENTRPRS_MBER_PASSWORD_CNSR = #{entrprsMberPasswordCnsr},
+ GROUP_ID = #{groupId},
+ DETAIL_ADRES = #{detailAdres},
+ ENTRPRS_END_TELNO = #{entrprsEndTelno},
+ AREA_NO = #{areaNo},
+ APPLCNT_EMAIL_ADRES = #{applcntEmailAdres}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_PASSWORD = #{entrprsMberPassword}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <select id="selectEntrprsMberList" resultType="egovMap">
+ SELECT
+ uniqId, userTy, userId , cmpnyNm, userNm, emailAdres, areaNo, middleTelno, endTelno, moblphonNo, groupId, sttus, sbscrbDe
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID userId,
+ CMPNY_NM cmpnyNm,
+ APPLCNT_NM userNm,
+ APPLCNT_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ ENTRPRS_MIDDLE_TELNO middleTelno,
+ ENTRPRS_END_TELNO endTelno,
+ '' moblphonNo,
+ GROUP_ID groupId,
+ ENTRPRS_MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNENTRPRSMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE '%' #{searchKeyword} '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+
+ ORDER BY sbscrbDe DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+
+ <select id="selectEntrprsMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID userId,
+ CMPNY_NM cmpnyNm,
+ APPLCNT_NM userNm,
+ APPLCNT_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ ENTRPRS_MIDDLE_TELNO middleTelno,
+ ENTRPRS_END_TELNO endTelno,
+ '' moblphonNo,
+ GROUP_ID groupId,
+ ENTRPRS_MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNENTRPRSMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE '%' #{searchKeyword} '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userManageDAO">
+
+ <select id="selectUserList_S" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR03' as "userTy",
+ EMPLYR_ID as "userId",
+ USER_NM as "userNm",
+ EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ HOUSE_MIDDLE_TELNO as "middleTelno",
+ HOUSE_END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ EMPLYR_STTUS_CODE as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectUserListTotCnt_S" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertUser_S">
+
+ INSERT INTO COMTNEMPLYRINFO
+ ( ESNTL_ID ,
+ EMPLYR_ID ,
+ USER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ EMPL_NO ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ OFCPS_NM ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ SBSCRB_DE ,
+ CRTFC_DN_VALUE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId} ,
+ #{emplyrId} ,
+ #{emplyrNm} ,
+ #{password} ,
+ #{passwordHint} ,
+ #{passwordCnsr} ,
+ #{emplNo} ,
+ #{ihidnum} ,
+ #{sexdstnCode} ,
+ #{brth} ,
+ #{areaNo} ,
+ #{homemiddleTelno} ,
+ #{homeendTelno} ,
+ #{fxnum} ,
+ #{homeadres} ,
+ #{detailAdres} ,
+ #{zip} ,
+ #{offmTelno} ,
+ #{moblphonNo} ,
+ #{emailAdres} ,
+ #{ofcpsNm} ,
+ #{groupId} ,
+ #{orgnztId} ,
+ #{insttCode} ,
+ #{emplyrSttusCode} ,
+ SYSDATETIME ,
+ #{subDn} ,
+ SYSDATETIME )
+
+ </insert>
+
+ <delete id="deleteUser_S">
+
+ DELETE FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectUser_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ ESNTL_ID uniqId ,
+ 'USR03' userTy,
+ EMPLYR_ID emplyrId ,
+ USER_NM emplyrNm ,
+ PASSWORD password ,
+ PASSWORD_HINT passwordHint ,
+ PASSWORD_CNSR passwordCnsr ,
+ EMPL_NO emplNo ,
+ IHIDNUM ihidnum ,
+ SEXDSTN_CODE sexdstnCode ,
+ BRTHDY brth ,
+ AREA_NO areaNo ,
+ HOUSE_MIDDLE_TELNO homemiddleTelno ,
+ HOUSE_END_TELNO homeendTelno ,
+ FXNUM fxnum ,
+ HOUSE_ADRES homeadres ,
+ DETAIL_ADRES detailAdres ,
+ ZIP zip ,
+ OFFM_TELNO offmTelno ,
+ MBTLNUM moblphonNo ,
+ EMAIL_ADRES emailAdres ,
+ OFCPS_NM ofcpsNm ,
+ GROUP_ID groupId ,
+ ORGNZT_ID orgnztId ,
+ PSTINST_CODE insttCode ,
+ EMPLYR_STTUS_CODE emplyrSttusCode ,
+ SBSCRB_DE sbscrbDe ,
+ CRTFC_DN_VALUE subDn,
+ LOCK_AT lockAt
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateUser_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET EMPLYR_ID = #{emplyrId} ,
+ USER_NM = #{emplyrNm} ,
+ PASSWORD_HINT = #{passwordHint} ,
+ PASSWORD_CNSR = #{passwordCnsr} ,
+ EMPL_NO = #{emplNo} ,
+ IHIDNUM = #{ihidnum} ,
+ SEXDSTN_CODE = #{sexdstnCode} ,
+ BRTHDY = #{brth} ,
+ AREA_NO = #{areaNo} ,
+ HOUSE_MIDDLE_TELNO = #{homemiddleTelno} ,
+ HOUSE_END_TELNO = #{homeendTelno} ,
+ FXNUM = #{fxnum} ,
+ HOUSE_ADRES = #{homeadres} ,
+ DETAIL_ADRES = #{detailAdres} ,
+ ZIP = #{zip} ,
+ OFFM_TELNO = #{offmTelno} ,
+ MBTLNUM = #{moblphonNo} ,
+ EMAIL_ADRES = #{emailAdres} ,
+ OFCPS_NM = #{ofcpsNm} ,
+ GROUP_ID = #{groupId} ,
+ ORGNZT_ID = #{orgnztId} ,
+ PSTINST_CODE = #{insttCode} ,
+ EMPLYR_STTUS_CODE = #{emplyrSttusCode} ,
+ CRTFC_DN_VALUE = #{subDn}
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <insert id="insertUserHistory_S">
+
+ INSERT INTO COMTHEMPLYRINFOCHANGEDTLS
+ ( EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ CHANGE_DE )
+ SELECT
+ EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ SYSDATETIME
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+
+ </insert>
+
+ <select id="checkIdDplct_S" resultType="int">
+
+ SELECT COUNT(1) usedCnt
+ FROM(
+ SELECT
+ EMPLYR_ID userId
+ FROM COMTNEMPLYRINFO
+ UNION ALL
+ SELECT
+ ENTRPRS_MBER_ID userId
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT
+ MBER_ID userId
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE userId = #{checkId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = SYSDATETIME
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="mberManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <select id="selectMberList" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR01' as "userTy",
+ MBER_ID as "userId",
+ MBER_NM as "userNm",
+ MBER_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ MIDDLE_TELNO as "middleTelno",
+ END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+
+ <select id="selectMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertMber_S">
+
+ INSERT INTO COMTNGNRLMBER
+ (
+ ESNTL_ID ,
+ MBER_ID ,
+ MBER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ ZIP ,
+ ADRES ,
+ AREA_NO ,
+ MBER_STTUS ,
+ DETAIL_ADRES ,
+ END_TELNO ,
+ MBTLNUM ,
+ GROUP_ID ,
+ MBER_FXNUM ,
+ MBER_EMAIL_ADRES ,
+ MIDDLE_TELNO ,
+ SBSCRB_DE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES(
+ #{uniqId},
+ #{mberId},
+ #{mberNm},
+ #{password},
+ #{passwordHint},
+ #{passwordCnsr},
+ #{ihidnum},
+ #{sexdstnCode},
+ #{zip},
+ #{adres},
+ #{areaNo},
+ #{mberSttus},
+ #{detailAdres},
+ #{endTelno},
+ #{moblphonNo},
+ #{groupId},
+ #{mberFxnum},
+ #{mberEmailAdres},
+ #{middleTelno},
+ sysdate,
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteMber_S">
+
+ DELETE FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectMber_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID mberId,
+ MBER_NM mberNm,
+ PASSWORD password,
+ PASSWORD_HINT passwordHint,
+ PASSWORD_CNSR passwordCnsr,
+ IHIDNUM ihidnum,
+ SEXDSTN_CODE sexdstnCode,
+ ZIP zip,
+ ADRES adres,
+ AREA_NO areaNo,
+ MBER_STTUS mberSttus,
+ DETAIL_ADRES detailAdres,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_FXNUM mberFxnum,
+ MBER_EMAIL_ADRES mberEmailAdres,
+ MIDDLE_TELNO middleTelno,
+ SBSCRB_DE sbscrbDe,
+ LOCK_AT lockAt
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateMber_S">
+
+ UPDATE COMTNGNRLMBER
+ SET MBER_ID = #{mberId},
+ MBER_NM = #{mberNm},
+ PASSWORD_HINT = #{passwordHint},
+ PASSWORD_CNSR = #{passwordCnsr},
+ IHIDNUM = #{ihidnum},
+ SEXDSTN_CODE = #{sexdstnCode},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ AREA_NO = #{areaNo},
+ MBER_STTUS = #{mberSttus},
+ DETAIL_ADRES = #{detailAdres},
+ END_TELNO = #{endTelno},
+ MBTLNUM = #{moblphonNo},
+ GROUP_ID = #{groupId},
+ MBER_FXNUM = #{mberFxnum},
+ MBER_EMAIL_ADRES = #{mberEmailAdres},
+ MIDDLE_TELNO = #{middleTelno}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNGNRLMBER
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="mberManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <select id="selectMberList" resultType="egovMap">
+SELECT
+ uniqId, userTy, userId , userNm, emailAdres, areaNo, middleTelno, endTelno, moblphonNo, groupId, sttus, sbscrbDe
+FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID userId,
+ MBER_NM userNm,
+ MBER_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ MIDDLE_TELNO middleTelno,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+ ORDER BY sbscrbDe DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+
+ <select id="selectMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID userId,
+ MBER_NM userNm,
+ MBER_EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ MIDDLE_TELNO middleTelno,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_STTUS sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertMber_S">
+
+ INSERT INTO COMTNGNRLMBER
+ (
+ ESNTL_ID ,
+ MBER_ID ,
+ MBER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ ZIP ,
+ ADRES ,
+ AREA_NO ,
+ MBER_STTUS ,
+ DETAIL_ADRES ,
+ END_TELNO ,
+ MBTLNUM ,
+ GROUP_ID ,
+ MBER_FXNUM ,
+ MBER_EMAIL_ADRES ,
+ MIDDLE_TELNO ,
+ SBSCRB_DE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES(
+ #{uniqId},
+ #{mberId},
+ #{mberNm},
+ #{password},
+ #{passwordHint},
+ #{passwordCnsr},
+ #{ihidnum},
+ #{sexdstnCode},
+ #{zip},
+ #{adres},
+ #{areaNo},
+ #{mberSttus},
+ #{detailAdres},
+ #{endTelno},
+ #{moblphonNo},
+ #{groupId},
+ #{mberFxnum},
+ #{mberEmailAdres},
+ #{middleTelno},
+ sysdate(),
+ sysdate() )
+
+ </insert>
+
+ <delete id="deleteMber_S">
+
+ DELETE FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectMber_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID mberId,
+ MBER_NM mberNm,
+ PASSWORD password,
+ PASSWORD_HINT passwordHint,
+ PASSWORD_CNSR passwordCnsr,
+ IHIDNUM ihidnum,
+ SEXDSTN_CODE sexdstnCode,
+ ZIP zip,
+ ADRES adres,
+ AREA_NO areaNo,
+ MBER_STTUS mberSttus,
+ DETAIL_ADRES detailAdres,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_FXNUM mberFxnum,
+ MBER_EMAIL_ADRES mberEmailAdres,
+ MIDDLE_TELNO middleTelno,
+ SBSCRB_DE sbscrbDe,
+ LOCK_AT lockAt
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateMber_S">
+
+ UPDATE COMTNGNRLMBER
+ SET MBER_ID = #{mberId},
+ MBER_NM = #{mberNm},
+ PASSWORD_HINT = #{passwordHint},
+ PASSWORD_CNSR = #{passwordCnsr},
+ IHIDNUM = #{ihidnum},
+ SEXDSTN_CODE = #{sexdstnCode},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ AREA_NO = #{areaNo},
+ MBER_STTUS = #{mberSttus},
+ DETAIL_ADRES = #{detailAdres},
+ END_TELNO = #{endTelno},
+ MBTLNUM = #{moblphonNo},
+ GROUP_ID = #{groupId},
+ MBER_FXNUM = #{mberFxnum},
+ MBER_EMAIL_ADRES = #{mberEmailAdres},
+ MIDDLE_TELNO = #{middleTelno}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNGNRLMBER
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="entrprsManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <insert id="insertEntrprs_S">
+
+ INSERT INTO COMTNENTRPRSMBER
+ ( ESNTL_ID ,
+ ENTRPRS_MBER_ID ,
+ ENTRPRS_SE_CODE ,
+ BIZRNO ,
+ JURIRNO ,
+ CMPNY_NM ,
+ CXFC ,
+ ZIP ,
+ ADRES ,
+ ENTRPRS_MIDDLE_TELNO ,
+ FXNUM ,
+ INDUTY_CODE ,
+ APPLCNT_NM ,
+ SBSCRB_DE ,
+ ENTRPRS_MBER_STTUS ,
+ ENTRPRS_MBER_PASSWORD ,
+ ENTRPRS_MBER_PASSWORD_HINT ,
+ ENTRPRS_MBER_PASSWORD_CNSR ,
+ GROUP_ID ,
+ DETAIL_ADRES ,
+ ENTRPRS_END_TELNO ,
+ AREA_NO ,
+ APPLCNT_EMAIL_ADRES ,
+ APPLCNT_IHIDNUM ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId},
+ #{entrprsmberId},
+ #{entrprsSeCode},
+ #{bizrno},
+ #{jurirno},
+ #{cmpnyNm},
+ #{cxfc},
+ #{zip},
+ #{adres},
+ #{entrprsMiddleTelno},
+ #{fxnum},
+ #{indutyCode},
+ #{applcntNm},
+ sysdate,
+ #{entrprsMberSttus},
+ #{entrprsMberPassword},
+ #{entrprsMberPasswordHint},
+ #{entrprsMberPasswordCnsr},
+ #{groupId},
+ #{detailAdres},
+ #{entrprsEndTelno},
+ #{areaNo},
+ #{applcntEmailAdres},
+ #{applcntIhidnum},
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteEntrprs_S">
+
+ DELETE FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectEntrprs_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID entrprsmberId,
+ ENTRPRS_SE_CODE entrprsSeCode,
+ BIZRNO bizrno,
+ JURIRNO jurirno,
+ CMPNY_NM cmpnyNm,
+ CXFC cxfc,
+ ZIP zip,
+ ADRES adres,
+ ENTRPRS_MIDDLE_TELNO entrprsMiddleTelno,
+ FXNUM fxnum,
+ INDUTY_CODE indutyCode,
+ APPLCNT_NM applcntNm,
+ SBSCRB_DE sbscrbDe,
+ ENTRPRS_MBER_STTUS entrprsMberSttus,
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword,
+ ENTRPRS_MBER_PASSWORD_HINT entrprsMberPasswordHint,
+ ENTRPRS_MBER_PASSWORD_CNSR entrprsMberPasswordCnsr,
+ GROUP_ID groupId,
+ DETAIL_ADRES detailAdres,
+ ENTRPRS_END_TELNO entrprsEndTelno,
+ AREA_NO areaNo,
+ APPLCNT_IHIDNUM applcntIhidnum,
+ APPLCNT_EMAIL_ADRES applcntEmailAdres,
+ LOCK_AT lockAt
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateEntrprs_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_ID = #{entrprsmberId},
+ ENTRPRS_SE_CODE = #{entrprsSeCode},
+ BIZRNO = #{bizrno},
+ JURIRNO = #{jurirno},
+ CMPNY_NM = #{cmpnyNm},
+ CXFC = #{cxfc},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ ENTRPRS_MIDDLE_TELNO = #{entrprsMiddleTelno},
+ FXNUM = #{fxnum},
+ INDUTY_CODE = #{indutyCode},
+ APPLCNT_NM = #{applcntNm},
+ ENTRPRS_MBER_STTUS = #{entrprsMberSttus},
+ ENTRPRS_MBER_PASSWORD_HINT = #{entrprsMberPasswordHint},
+ ENTRPRS_MBER_PASSWORD_CNSR = #{entrprsMberPasswordCnsr},
+ GROUP_ID = #{groupId},
+ DETAIL_ADRES = #{detailAdres},
+ ENTRPRS_END_TELNO = #{entrprsEndTelno},
+ AREA_NO = #{areaNo},
+ APPLCNT_EMAIL_ADRES = #{applcntEmailAdres}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_PASSWORD = #{entrprsMberPassword}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+ </select>
+
+ <select id="selectEntrprsMberList" resultType="egovMap">
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR02' as "userTy",
+ ENTRPRS_MBER_ID as "userId",
+ CMPNY_NM as "cmpnyNm",
+ APPLCNT_NM as "userNm",
+ APPLCNT_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ ENTRPRS_MIDDLE_TELNO as "middleTelno",
+ ENTRPRS_END_TELNO as "endTelno",
+ '' as "moblphonNo",
+ GROUP_ID as "groupId",
+ ENTRPRS_MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ ]]>
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND APPLCNT_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 13 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectEntrprsMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND APPLCNT_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userManageDAO">
+
+ <select id="selectUserList_S" resultType="egovMap">
+SELECT
+ uniqId, userTy, userId , userNm, emailAdres, areaNo, middleTelno, endTelno, moblphonNo, groupId, sttus, sbscrbDe
+FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR03' userTy,
+ EMPLYR_ID userId,
+ USER_NM userNm,
+ EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ HOUSE_MIDDLE_TELNO middleTelno,
+ HOUSE_END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ EMPLYR_STTUS_CODE sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNEMPLYRINFO
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+
+ ORDER BY sbscrbDe DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectUserListTotCnt_S" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR03' userTy,
+ EMPLYR_ID userId,
+ USER_NM userNm,
+ EMAIL_ADRES emailAdres,
+ AREA_NO areaNo,
+ HOUSE_MIDDLE_TELNO middleTelno,
+ HOUSE_END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ EMPLYR_STTUS_CODE sttus,
+ SBSCRB_DE sbscrbDe
+ FROM COMTNEMPLYRINFO
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ userId LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ userNm LIKE '%' #{searchKeyword} '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertUser_S">
+
+ INSERT INTO COMTNEMPLYRINFO
+ ( ESNTL_ID ,
+ EMPLYR_ID ,
+ USER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ EMPL_NO ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ OFCPS_NM ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ SBSCRB_DE ,
+ CRTFC_DN_VALUE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId} ,
+ #{emplyrId} ,
+ #{emplyrNm} ,
+ #{password} ,
+ #{passwordHint} ,
+ #{passwordCnsr} ,
+ #{emplNo} ,
+ #{ihidnum} ,
+ #{sexdstnCode} ,
+ #{brth} ,
+ #{areaNo} ,
+ #{homemiddleTelno} ,
+ #{homeendTelno} ,
+ #{fxnum} ,
+ #{homeadres} ,
+ #{detailAdres} ,
+ #{zip} ,
+ #{offmTelno} ,
+ #{moblphonNo} ,
+ #{emailAdres} ,
+ #{ofcpsNm} ,
+ #{groupId} ,
+ #{orgnztId} ,
+ #{insttCode} ,
+ #{emplyrSttusCode} ,
+ sysdate() ,
+ #{subDn} ,
+ sysdate() )
+
+ </insert>
+
+ <delete id="deleteUser_S">
+
+ DELETE FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectUser_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ ESNTL_ID uniqId ,
+ 'USR03' userTy,
+ EMPLYR_ID emplyrId ,
+ USER_NM emplyrNm ,
+ PASSWORD password ,
+ PASSWORD_HINT passwordHint ,
+ PASSWORD_CNSR passwordCnsr ,
+ EMPL_NO emplNo ,
+ IHIDNUM ihidnum ,
+ SEXDSTN_CODE sexdstnCode ,
+ BRTHDY brth ,
+ AREA_NO areaNo ,
+ HOUSE_MIDDLE_TELNO homemiddleTelno ,
+ HOUSE_END_TELNO homeendTelno ,
+ FXNUM fxnum ,
+ HOUSE_ADRES homeadres ,
+ DETAIL_ADRES detailAdres ,
+ ZIP zip ,
+ OFFM_TELNO offmTelno ,
+ MBTLNUM moblphonNo ,
+ EMAIL_ADRES emailAdres ,
+ OFCPS_NM ofcpsNm ,
+ GROUP_ID groupId ,
+ ORGNZT_ID orgnztId ,
+ PSTINST_CODE insttCode ,
+ EMPLYR_STTUS_CODE emplyrSttusCode ,
+ SBSCRB_DE sbscrbDe ,
+ CRTFC_DN_VALUE subDn,
+ LOCK_AT lockAt
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateUser_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET EMPLYR_ID = #{emplyrId} ,
+ USER_NM = #{emplyrNm} ,
+ PASSWORD_HINT = #{passwordHint} ,
+ PASSWORD_CNSR = #{passwordCnsr} ,
+ EMPL_NO = #{emplNo} ,
+ IHIDNUM = #{ihidnum} ,
+ SEXDSTN_CODE = #{sexdstnCode} ,
+ BRTHDY = #{brth} ,
+ AREA_NO = #{areaNo} ,
+ HOUSE_MIDDLE_TELNO = #{homemiddleTelno} ,
+ HOUSE_END_TELNO = #{homeendTelno} ,
+ FXNUM = #{fxnum} ,
+ HOUSE_ADRES = #{homeadres} ,
+ DETAIL_ADRES = #{detailAdres} ,
+ ZIP = #{zip} ,
+ OFFM_TELNO = #{offmTelno} ,
+ MBTLNUM = #{moblphonNo} ,
+ EMAIL_ADRES = #{emailAdres} ,
+ OFCPS_NM = #{ofcpsNm} ,
+ GROUP_ID = #{groupId} ,
+ ORGNZT_ID = #{orgnztId} ,
+ PSTINST_CODE = #{insttCode} ,
+ EMPLYR_STTUS_CODE = #{emplyrSttusCode} ,
+ CRTFC_DN_VALUE = #{subDn}
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <insert id="insertUserHistory_S">
+
+ INSERT INTO COMTHEMPLYRINFOCHANGEDTLS
+ ( EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ CHANGE_DE )
+ SELECT
+ EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ now()
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+
+ </insert>
+
+ <select id="checkIdDplct_S" resultType="int">
+
+ SELECT COUNT(1) usedCnt
+ FROM(
+ SELECT
+ EMPLYR_ID userId
+ FROM COMTNEMPLYRINFO
+ UNION ALL
+ SELECT
+ ENTRPRS_MBER_ID userId
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT
+ MBER_ID userId
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE userId = #{checkId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="deptManageDAO">
+
+ <resultMap id="deptManageVO" type="egovframework.com.uss.umt.service.DeptManageVO">
+ <result property="orgnztId" column="ORGNZT_ID"/>
+ <result property="orgnztNm" column="ORGNZT_NM"/>
+ <result property="orgnztDc" column="ORGNZT_DC"/>
+ </resultMap>
+
+ <select id="selectDeptManageList" resultMap="deptManageVO">
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <![CDATA[
+ ORDER BY ORGNZT_ID DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ ]]>
+ </select>
+
+ <select id="selectDeptManageListTotCnt" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectDeptManage" resultMap="deptManageVO">
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </select>
+
+ <insert id="insertDeptManage">
+
+ INSERT INTO COMTNORGNZTINFO
+ (ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC)
+ VALUES (#{orgnztId},
+ #{orgnztNm},
+ #{orgnztDc})
+
+ </insert>
+
+ <update id="updateDeptManage">
+ UPDATE COMTNORGNZTINFO
+ SET ORGNZT_NM = #{orgnztNm},
+ ORGNZT_DC = #{orgnztDc}
+ WHERE ORGNZT_ID = #{orgnztId}
+ </update>
+
+ <delete id="deleteDeptManage">
+
+ DELETE FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="mberManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <select id="selectMberList" resultType="egovMap">
+ SELECT
+ ESNTL_ID "uniqId",
+ 'USR01' "userTy",
+ MBER_ID "userId",
+ MBER_NM "userNm",
+ MBER_EMAIL_ADRES "emailAdres",
+ AREA_NO "areaNo",
+ MIDDLE_TELNO "middleTelno",
+ END_TELNO "endTelno",
+ MBTLNUM "moblphonNo",
+ GROUP_ID "groupId",
+ MBER_STTUS "sttus",
+ SBSCRB_DE "sbscrbDe"
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ MBER_ID LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ MBER_NM LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+ ORDER BY SBSCRB_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+
+ <select id="selectMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID "uniqId",
+ 'USR01' "userTy",
+ MBER_ID "userId",
+ MBER_NM "userNm",
+ MBER_EMAIL_ADRES "emailAdres",
+ AREA_NO "areaNo",
+ MIDDLE_TELNO "middleTelno",
+ END_TELNO "endTelno",
+ MBTLNUM "moblphonNo",
+ GROUP_ID "groupId",
+ MBER_STTUS "sttus",
+ SBSCRB_DE "sbscrbDe"
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND a.sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ "userId" LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ "userNm" LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertMber_S">
+
+ INSERT INTO COMTNGNRLMBER
+ (
+ ESNTL_ID ,
+ MBER_ID ,
+ MBER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ ZIP ,
+ ADRES ,
+ AREA_NO ,
+ MBER_STTUS ,
+ DETAIL_ADRES ,
+ END_TELNO ,
+ MBTLNUM ,
+ GROUP_ID ,
+ MBER_FXNUM ,
+ MBER_EMAIL_ADRES ,
+ MIDDLE_TELNO ,
+ SBSCRB_DE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES(
+ #{uniqId},
+ #{mberId},
+ #{mberNm},
+ #{password},
+ #{passwordHint},
+ #{passwordCnsr},
+ #{ihidnum},
+ #{sexdstnCode},
+ #{zip},
+ #{adres},
+ #{areaNo},
+ #{mberSttus},
+ #{detailAdres},
+ #{endTelno},
+ #{moblphonNo},
+ #{groupId},
+ #{mberFxnum},
+ #{mberEmailAdres},
+ #{middleTelno},
+ NOW(),
+ NOW() )
+
+ </insert>
+
+ <delete id="deleteMber_S">
+
+ DELETE FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectMber_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID mberId,
+ MBER_NM mberNm,
+ PASSWORD "password",
+ PASSWORD_HINT passwordHint,
+ PASSWORD_CNSR passwordCnsr,
+ IHIDNUM ihidnum,
+ SEXDSTN_CODE sexdstnCode,
+ ZIP zip,
+ ADRES adres,
+ AREA_NO areaNo,
+ MBER_STTUS mberSttus,
+ DETAIL_ADRES detailAdres,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_FXNUM mberFxnum,
+ MBER_EMAIL_ADRES mberEmailAdres,
+ MIDDLE_TELNO middleTelno,
+ SBSCRB_DE sbscrbDe,
+ LOCK_AT lockAt
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateMber_S">
+
+ UPDATE COMTNGNRLMBER
+ SET MBER_ID = #{mberId},
+ MBER_NM = #{mberNm},
+ PASSWORD_HINT = #{passwordHint},
+ PASSWORD_CNSR = #{passwordCnsr},
+ IHIDNUM = #{ihidnum},
+ SEXDSTN_CODE = #{sexdstnCode},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ AREA_NO = #{areaNo},
+ MBER_STTUS = #{mberSttus},
+ DETAIL_ADRES = #{detailAdres},
+ END_TELNO = #{endTelno},
+ MBTLNUM = #{moblphonNo},
+ GROUP_ID = #{groupId},
+ MBER_FXNUM = #{mberFxnum},
+ MBER_EMAIL_ADRES = #{mberEmailAdres},
+ MIDDLE_TELNO = #{middleTelno}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNGNRLMBER
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = NOW()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ PASSWORD "password"
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="deptManageDAO">
+
+ <resultMap id="deptManageVO" type="egovframework.com.uss.umt.service.DeptManageVO">
+ <result property="orgnztId" column="ORGNZT_ID"/>
+ <result property="orgnztNm" column="ORGNZT_NM"/>
+ <result property="orgnztDc" column="ORGNZT_DC"/>
+ </resultMap>
+
+ <select id="selectDeptManageList" resultMap="deptManageVO">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ORGNZT_ID DESC
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectDeptManageListTotCnt" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectDeptManage" resultMap="deptManageVO">
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </select>
+
+ <insert id="insertDeptManage">
+
+ INSERT INTO COMTNORGNZTINFO
+ (ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC)
+ VALUES (#{orgnztId},
+ #{orgnztNm},
+ #{orgnztDc})
+
+ </insert>
+
+ <update id="updateDeptManage">
+ UPDATE COMTNORGNZTINFO
+ SET ORGNZT_NM = #{orgnztNm},
+ ORGNZT_DC = #{orgnztDc}
+ WHERE ORGNZT_ID = #{orgnztId}
+ </update>
+
+ <delete id="deleteDeptManage">
+
+ DELETE FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="entrprsManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <insert id="insertEntrprs_S">
+
+ INSERT INTO COMTNENTRPRSMBER
+ ( ESNTL_ID ,
+ ENTRPRS_MBER_ID ,
+ ENTRPRS_SE_CODE ,
+ BIZRNO ,
+ JURIRNO ,
+ CMPNY_NM ,
+ CXFC ,
+ ZIP ,
+ ADRES ,
+ ENTRPRS_MIDDLE_TELNO ,
+ FXNUM ,
+ INDUTY_CODE ,
+ APPLCNT_NM ,
+ SBSCRB_DE ,
+ ENTRPRS_MBER_STTUS ,
+ ENTRPRS_MBER_PASSWORD ,
+ ENTRPRS_MBER_PASSWORD_HINT ,
+ ENTRPRS_MBER_PASSWORD_CNSR ,
+ GROUP_ID ,
+ DETAIL_ADRES ,
+ ENTRPRS_END_TELNO ,
+ AREA_NO ,
+ APPLCNT_EMAIL_ADRES ,
+ APPLCNT_IHIDNUM ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId},
+ #{entrprsmberId},
+ #{entrprsSeCode},
+ #{bizrno},
+ #{jurirno},
+ #{cmpnyNm},
+ #{cxfc},
+ #{zip},
+ #{adres},
+ #{entrprsMiddleTelno},
+ #{fxnum},
+ #{indutyCode},
+ #{applcntNm},
+ sysdate,
+ #{entrprsMberSttus},
+ #{entrprsMberPassword},
+ #{entrprsMberPasswordHint},
+ #{entrprsMberPasswordCnsr},
+ #{groupId},
+ #{detailAdres},
+ #{entrprsEndTelno},
+ #{areaNo},
+ #{applcntEmailAdres},
+ #{applcntIhidnum},
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteEntrprs_S">
+
+ DELETE FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectEntrprs_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ESNTL_ID as uniqId,
+ 'USR02' as userTy,
+ ENTRPRS_MBER_ID as entrprsmberId,
+ ENTRPRS_SE_CODE as entrprsSeCode,
+ BIZRNO as bizrno,
+ JURIRNO as jurirno,
+ CMPNY_NM as cmpnyNm,
+ CXFC as cxfc,
+ ZIP as zip,
+ ADRES as adres,
+ ENTRPRS_MIDDLE_TELNO as entrprsMiddleTelno,
+ FXNUM as fxnum,
+ INDUTY_CODE as indutyCode,
+ APPLCNT_NM as applcntNm,
+ SBSCRB_DE as sbscrbDe,
+ ENTRPRS_MBER_STTUS as entrprsMberSttus,
+ ENTRPRS_MBER_PASSWORD as entrprsMberPassword,
+ ENTRPRS_MBER_PASSWORD_HINT as entrprsMberPasswordHint,
+ ENTRPRS_MBER_PASSWORD_CNSR as entrprsMberPasswordCnsr,
+ GROUP_ID as groupId,
+ DETAIL_ADRES as detailAdres,
+ ENTRPRS_END_TELNO as entrprsEndTelno,
+ AREA_NO as areaNo,
+ APPLCNT_IHIDNUM as applcntIhidnum,
+ APPLCNT_EMAIL_ADRES as applcntEmailAdres,
+ LOCK_AT as lockAt
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateEntrprs_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_ID = #{entrprsmberId},
+ ENTRPRS_SE_CODE = #{entrprsSeCode},
+ BIZRNO = #{bizrno},
+ JURIRNO = #{jurirno},
+ CMPNY_NM = #{cmpnyNm},
+ CXFC = #{cxfc},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ ENTRPRS_MIDDLE_TELNO = #{entrprsMiddleTelno},
+ FXNUM = #{fxnum},
+ INDUTY_CODE = #{indutyCode},
+ APPLCNT_NM = #{applcntNm},
+ ENTRPRS_MBER_STTUS = #{entrprsMberSttus},
+ ENTRPRS_MBER_PASSWORD_HINT = #{entrprsMberPasswordHint},
+ ENTRPRS_MBER_PASSWORD_CNSR = #{entrprsMberPasswordCnsr},
+ GROUP_ID = #{groupId},
+ DETAIL_ADRES = #{detailAdres},
+ ENTRPRS_END_TELNO = #{entrprsEndTelno},
+ AREA_NO = #{areaNo},
+ APPLCNT_EMAIL_ADRES = #{applcntEmailAdres}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_PASSWORD = #{entrprsMberPassword}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <select id="selectEntrprsMberList" resultType="egovMap">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR02' as "userTy",
+ ENTRPRS_MBER_ID as "userId",
+ CMPNY_NM as "cmpnyNm",
+ APPLCNT_NM as "userNm",
+ APPLCNT_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ ENTRPRS_MIDDLE_TELNO as "middleTelno",
+ ENTRPRS_END_TELNO as "endTelno",
+ '' as "moblphonNo",
+ GROUP_ID as "groupId",
+ ENTRPRS_MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND APPLCNT_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 13 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+
+ <select id="selectEntrprsMberListTotCnt" resultType="int">
+ <![CDATA[
+ SELECT COUNT(1) totcnt
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ ]]>
+
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">
+ APPLCNT_NM LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="entrprsManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <insert id="insertEntrprs_S">
+
+ INSERT INTO COMTNENTRPRSMBER
+ ( ESNTL_ID ,
+ ENTRPRS_MBER_ID ,
+ ENTRPRS_SE_CODE ,
+ BIZRNO ,
+ JURIRNO ,
+ CMPNY_NM ,
+ CXFC ,
+ ZIP ,
+ ADRES ,
+ ENTRPRS_MIDDLE_TELNO ,
+ FXNUM ,
+ INDUTY_CODE ,
+ APPLCNT_NM ,
+ SBSCRB_DE ,
+ ENTRPRS_MBER_STTUS ,
+ ENTRPRS_MBER_PASSWORD ,
+ ENTRPRS_MBER_PASSWORD_HINT ,
+ ENTRPRS_MBER_PASSWORD_CNSR ,
+ GROUP_ID ,
+ DETAIL_ADRES ,
+ ENTRPRS_END_TELNO ,
+ AREA_NO ,
+ APPLCNT_EMAIL_ADRES ,
+ APPLCNT_IHIDNUM ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId},
+ #{entrprsmberId},
+ #{entrprsSeCode},
+ #{bizrno},
+ #{jurirno},
+ #{cmpnyNm},
+ #{cxfc},
+ #{zip},
+ #{adres},
+ #{entrprsMiddleTelno},
+ #{fxnum},
+ #{indutyCode},
+ #{applcntNm},
+ NOW(),
+ #{entrprsMberSttus},
+ #{entrprsMberPassword},
+ #{entrprsMberPasswordHint},
+ #{entrprsMberPasswordCnsr},
+ #{groupId},
+ #{detailAdres},
+ #{entrprsEndTelno},
+ #{areaNo},
+ #{applcntEmailAdres},
+ #{applcntIhidnum},
+ NOW() )
+
+ </insert>
+
+ <delete id="deleteEntrprs_S">
+
+ DELETE FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectEntrprs_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ESNTL_ID "uniqId",
+ 'USR02' "userTy",
+ ENTRPRS_MBER_ID "entrprsmberId",
+ ENTRPRS_SE_CODE "entrprsSeCode",
+ BIZRNO "bizrno",
+ JURIRNO "jurirno",
+ CMPNY_NM "cmpnyNm",
+ CXFC "cxfc",
+ ZIP "zip",
+ ADRES "adres",
+ ENTRPRS_MIDDLE_TELNO "entrprsMiddleTelno",
+ FXNUM "fxnum",
+ INDUTY_CODE "indutyCode",
+ APPLCNT_NM "applcntNm",
+ SBSCRB_DE "sbscrbDe",
+ ENTRPRS_MBER_STTUS "entrprsMberSttus",
+ ENTRPRS_MBER_PASSWORD "entrprsMberPassword",
+ ENTRPRS_MBER_PASSWORD_HINT "entrprsMberPasswordHint",
+ ENTRPRS_MBER_PASSWORD_CNSR "entrprsMberPasswordCnsr",
+ GROUP_ID "groupId",
+ DETAIL_ADRES "detailAdres",
+ ENTRPRS_END_TELNO "entrprsEndTelno",
+ AREA_NO "areaNo",
+ APPLCNT_IHIDNUM "applcntIhidnum",
+ APPLCNT_EMAIL_ADRES "applcntEmailAdres",
+ LOCK_AT "lockAt"
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateEntrprs_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_ID = #{entrprsmberId},
+ ENTRPRS_SE_CODE = #{entrprsSeCode},
+ BIZRNO = #{bizrno},
+ JURIRNO = #{jurirno},
+ CMPNY_NM = #{cmpnyNm},
+ CXFC = #{cxfc},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ ENTRPRS_MIDDLE_TELNO = #{entrprsMiddleTelno},
+ FXNUM = #{fxnum},
+ INDUTY_CODE = #{indutyCode},
+ APPLCNT_NM = #{applcntNm},
+ ENTRPRS_MBER_STTUS = #{entrprsMberSttus},
+ ENTRPRS_MBER_PASSWORD_HINT = #{entrprsMberPasswordHint},
+ ENTRPRS_MBER_PASSWORD_CNSR = #{entrprsMberPasswordCnsr},
+ GROUP_ID = #{groupId},
+ DETAIL_ADRES = #{detailAdres},
+ ENTRPRS_END_TELNO = #{entrprsEndTelno},
+ AREA_NO = #{areaNo},
+ APPLCNT_EMAIL_ADRES = #{applcntEmailAdres}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_PASSWORD = #{entrprsMberPassword}
+ , CHG_PWD_LAST_PNTTM = NOW()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <select id="selectEntrprsMberList" resultType="egovMap">
+
+ SELECT
+ ESNTL_ID "uniqId",
+ 'USR02' "userTy",
+ ENTRPRS_MBER_ID "userId",
+ CMPNY_NM "cmpnyNm",
+ APPLCNT_NM "userNm",
+ APPLCNT_EMAIL_ADRES "emailAdres",
+ AREA_NO "areaNo",
+ ENTRPRS_MIDDLE_TELNO "middleTelno",
+ ENTRPRS_END_TELNO "endTelno",
+ '' "moblphonNo",
+ GROUP_ID "groupId",
+ ENTRPRS_MBER_STTUS "sttus",
+ SBSCRB_DE "sbscrbDe"
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ ENTRPRS_MBER_ID LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ APPLCNT_NM LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+
+ ORDER BY SBSCRB_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+
+ <select id="selectEntrprsMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID "uniqId",
+ 'USR02' "userTy",
+ ENTRPRS_MBER_ID "userId",
+ CMPNY_NM "cmpnyNm",
+ APPLCNT_NM "userNm",
+ APPLCNT_EMAIL_ADRES "emailAdres",
+ AREA_NO "areaNo",
+ ENTRPRS_MIDDLE_TELNO "middleTelno",
+ ENTRPRS_END_TELNO "endTelno",
+ '' "moblphonNo",
+ GROUP_ID "groupId",
+ ENTRPRS_MBER_STTUS "sttus",
+ SBSCRB_DE "sbscrbDe"
+ FROM COMTNENTRPRSMBER
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND a.sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ a."userId" LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ a."userNm" LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="mberManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <select id="selectMberList" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR01' as "userTy",
+ MBER_ID as "userId",
+ MBER_NM as "userNm",
+ MBER_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ MIDDLE_TELNO as "middleTelno",
+ END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+
+ <select id="selectMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNGNRLMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ MBER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertMber_S">
+
+ INSERT INTO COMTNGNRLMBER
+ (
+ ESNTL_ID ,
+ MBER_ID ,
+ MBER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ ZIP ,
+ ADRES ,
+ AREA_NO ,
+ MBER_STTUS ,
+ DETAIL_ADRES ,
+ END_TELNO ,
+ MBTLNUM ,
+ GROUP_ID ,
+ MBER_FXNUM ,
+ MBER_EMAIL_ADRES ,
+ MIDDLE_TELNO ,
+ SBSCRB_DE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES(
+ #{uniqId},
+ #{mberId},
+ #{mberNm},
+ #{password},
+ #{passwordHint},
+ #{passwordCnsr},
+ #{ihidnum},
+ #{sexdstnCode},
+ #{zip},
+ #{adres},
+ #{areaNo},
+ #{mberSttus},
+ #{detailAdres},
+ #{endTelno},
+ #{moblphonNo},
+ #{groupId},
+ #{mberFxnum},
+ #{mberEmailAdres},
+ #{middleTelno},
+ sysdate,
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteMber_S">
+
+ DELETE FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectMber_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR01' userTy,
+ MBER_ID mberId,
+ MBER_NM mberNm,
+ PASSWORD password,
+ PASSWORD_HINT passwordHint,
+ PASSWORD_CNSR passwordCnsr,
+ IHIDNUM ihidnum,
+ SEXDSTN_CODE sexdstnCode,
+ ZIP zip,
+ ADRES adres,
+ AREA_NO areaNo,
+ MBER_STTUS mberSttus,
+ DETAIL_ADRES detailAdres,
+ END_TELNO endTelno,
+ MBTLNUM moblphonNo,
+ GROUP_ID groupId,
+ MBER_FXNUM mberFxnum,
+ MBER_EMAIL_ADRES mberEmailAdres,
+ MIDDLE_TELNO middleTelno,
+ SBSCRB_DE sbscrbDe,
+ LOCK_AT lockAt
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateMber_S">
+
+ UPDATE COMTNGNRLMBER
+ SET MBER_ID = #{mberId},
+ MBER_NM = #{mberNm},
+ PASSWORD_HINT = #{passwordHint},
+ PASSWORD_CNSR = #{passwordCnsr},
+ IHIDNUM = #{ihidnum},
+ SEXDSTN_CODE = #{sexdstnCode},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ AREA_NO = #{areaNo},
+ MBER_STTUS = #{mberSttus},
+ DETAIL_ADRES = #{detailAdres},
+ END_TELNO = #{endTelno},
+ MBTLNUM = #{moblphonNo},
+ GROUP_ID = #{groupId},
+ MBER_FXNUM = #{mberFxnum},
+ MBER_EMAIL_ADRES = #{mberEmailAdres},
+ MIDDLE_TELNO = #{middleTelno}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNGNRLMBER
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.MberManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovMberManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="entrprsManageDAO">
+
+ <resultMap id="stplatMap" type="egovframework.com.uss.umt.service.StplatVO">
+ <result property="useStplatId" column="USE_STPLAT_ID"/>
+ <result property="useStplatCn" column="USE_STPLAT_CN"/>
+ <result property="infoProvdAgeCn" column="INFO_PROVD_AGRE_CN"/>
+ </resultMap>
+
+ <insert id="insertEntrprs_S">
+
+ INSERT INTO COMTNENTRPRSMBER
+ ( ESNTL_ID ,
+ ENTRPRS_MBER_ID ,
+ ENTRPRS_SE_CODE ,
+ BIZRNO ,
+ JURIRNO ,
+ CMPNY_NM ,
+ CXFC ,
+ ZIP ,
+ ADRES ,
+ ENTRPRS_MIDDLE_TELNO ,
+ FXNUM ,
+ INDUTY_CODE ,
+ APPLCNT_NM ,
+ SBSCRB_DE ,
+ ENTRPRS_MBER_STTUS ,
+ ENTRPRS_MBER_PASSWORD ,
+ ENTRPRS_MBER_PASSWORD_HINT ,
+ ENTRPRS_MBER_PASSWORD_CNSR ,
+ GROUP_ID ,
+ DETAIL_ADRES ,
+ ENTRPRS_END_TELNO ,
+ AREA_NO ,
+ APPLCNT_EMAIL_ADRES ,
+ APPLCNT_IHIDNUM ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId},
+ #{entrprsmberId},
+ #{entrprsSeCode},
+ #{bizrno},
+ #{jurirno},
+ #{cmpnyNm},
+ #{cxfc},
+ #{zip},
+ #{adres},
+ #{entrprsMiddleTelno},
+ #{fxnum},
+ #{indutyCode},
+ #{applcntNm},
+ sysdate,
+ #{entrprsMberSttus},
+ #{entrprsMberPassword},
+ #{entrprsMberPasswordHint},
+ #{entrprsMberPasswordCnsr},
+ #{groupId},
+ #{detailAdres},
+ #{entrprsEndTelno},
+ #{areaNo},
+ #{applcntEmailAdres},
+ #{applcntIhidnum},
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteEntrprs_S">
+
+ DELETE FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectEntrprs_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ESNTL_ID uniqId,
+ 'USR02' userTy,
+ ENTRPRS_MBER_ID entrprsmberId,
+ ENTRPRS_SE_CODE entrprsSeCode,
+ BIZRNO bizrno,
+ JURIRNO jurirno,
+ CMPNY_NM cmpnyNm,
+ CXFC cxfc,
+ ZIP zip,
+ ADRES adres,
+ ENTRPRS_MIDDLE_TELNO entrprsMiddleTelno,
+ FXNUM fxnum,
+ INDUTY_CODE indutyCode,
+ APPLCNT_NM applcntNm,
+ SBSCRB_DE sbscrbDe,
+ ENTRPRS_MBER_STTUS entrprsMberSttus,
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword,
+ ENTRPRS_MBER_PASSWORD_HINT entrprsMberPasswordHint,
+ ENTRPRS_MBER_PASSWORD_CNSR entrprsMberPasswordCnsr,
+ GROUP_ID groupId,
+ DETAIL_ADRES detailAdres,
+ ENTRPRS_END_TELNO entrprsEndTelno,
+ AREA_NO areaNo,
+ APPLCNT_IHIDNUM applcntIhidnum,
+ APPLCNT_EMAIL_ADRES applcntEmailAdres,
+ LOCK_AT lockAt
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateEntrprs_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_ID = #{entrprsmberId},
+ ENTRPRS_SE_CODE = #{entrprsSeCode},
+ BIZRNO = #{bizrno},
+ JURIRNO = #{jurirno},
+ CMPNY_NM = #{cmpnyNm},
+ CXFC = #{cxfc},
+ ZIP = #{zip},
+ ADRES = #{adres},
+ ENTRPRS_MIDDLE_TELNO = #{entrprsMiddleTelno},
+ FXNUM = #{fxnum},
+ INDUTY_CODE = #{indutyCode},
+ APPLCNT_NM = #{applcntNm},
+ ENTRPRS_MBER_STTUS = #{entrprsMberSttus},
+ ENTRPRS_MBER_PASSWORD_HINT = #{entrprsMberPasswordHint},
+ ENTRPRS_MBER_PASSWORD_CNSR = #{entrprsMberPasswordCnsr},
+ GROUP_ID = #{groupId},
+ DETAIL_ADRES = #{detailAdres},
+ ENTRPRS_END_TELNO = #{entrprsEndTelno},
+ AREA_NO = #{areaNo},
+ APPLCNT_EMAIL_ADRES = #{applcntEmailAdres}
+ WHERE ESNTL_ID=#{uniqId}
+
+ </update>
+
+ <select id="selectStplat_S" resultMap="stplatMap">
+
+ SELECT
+ USE_STPLAT_ID ,
+ USE_STPLAT_CN ,
+ INFO_PROVD_AGRE_CN
+ FROM COMTNSTPLATINFO
+ WHERE USE_STPLAT_ID=#{stplatId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNENTRPRSMBER
+ SET
+ ENTRPRS_MBER_PASSWORD = #{entrprsMberPassword}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.EntrprsManageVO">
+
+ SELECT
+ ENTRPRS_MBER_PASSWORD entrprsMberPassword
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <select id="selectEntrprsMberList" resultType="egovMap">
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR02' as "userTy",
+ ENTRPRS_MBER_ID as "userId",
+ CMPNY_NM as "cmpnyNm",
+ APPLCNT_NM as "userNm",
+ APPLCNT_EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ ENTRPRS_MIDDLE_TELNO as "middleTelno",
+ ENTRPRS_END_TELNO as "endTelno",
+ '' as "moblphonNo",
+ GROUP_ID as "groupId",
+ ENTRPRS_MBER_STTUS as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND APPLCNT_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 13 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+
+ <select id="selectEntrprsMberListTotCnt" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNENTRPRSMBER
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND ENTRPRS_MBER_ID LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">
+ AND APPLCNT_NM LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovEntrprsManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userManageDAO">
+
+ <select id="selectUserList_S" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR03' as "userTy",
+ EMPLYR_ID as "userId",
+ USER_NM as "userNm",
+ EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ HOUSE_MIDDLE_TELNO as "middleTelno",
+ HOUSE_END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ EMPLYR_STTUS_CODE as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectUserListTotCnt_S" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertUser_S">
+
+ INSERT INTO COMTNEMPLYRINFO
+ ( ESNTL_ID ,
+ EMPLYR_ID ,
+ USER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ EMPL_NO ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ OFCPS_NM ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ SBSCRB_DE ,
+ CRTFC_DN_VALUE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId} ,
+ #{emplyrId} ,
+ #{emplyrNm} ,
+ #{password} ,
+ #{passwordHint} ,
+ #{passwordCnsr} ,
+ #{emplNo} ,
+ #{ihidnum} ,
+ #{sexdstnCode} ,
+ #{brth} ,
+ #{areaNo} ,
+ #{homemiddleTelno} ,
+ #{homeendTelno} ,
+ #{fxnum} ,
+ #{homeadres} ,
+ #{detailAdres} ,
+ #{zip} ,
+ #{offmTelno} ,
+ #{moblphonNo} ,
+ #{emailAdres} ,
+ #{ofcpsNm} ,
+ #{groupId} ,
+ #{orgnztId} ,
+ #{insttCode} ,
+ #{emplyrSttusCode} ,
+ sysdate ,
+ #{subDn} ,
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteUser_S">
+
+ DELETE FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectUser_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ ESNTL_ID uniqId ,
+ 'USR03' userTy,
+ EMPLYR_ID emplyrId ,
+ USER_NM emplyrNm ,
+ PASSWORD password ,
+ PASSWORD_HINT passwordHint ,
+ PASSWORD_CNSR passwordCnsr ,
+ EMPL_NO emplNo ,
+ IHIDNUM ihidnum ,
+ SEXDSTN_CODE sexdstnCode ,
+ BRTHDY brth ,
+ AREA_NO areaNo ,
+ HOUSE_MIDDLE_TELNO homemiddleTelno ,
+ HOUSE_END_TELNO homeendTelno ,
+ FXNUM fxnum ,
+ HOUSE_ADRES homeadres ,
+ DETAIL_ADRES detailAdres ,
+ ZIP zip ,
+ OFFM_TELNO offmTelno ,
+ MBTLNUM moblphonNo ,
+ EMAIL_ADRES emailAdres ,
+ OFCPS_NM ofcpsNm ,
+ GROUP_ID groupId ,
+ ORGNZT_ID orgnztId ,
+ PSTINST_CODE insttCode ,
+ EMPLYR_STTUS_CODE emplyrSttusCode ,
+ SBSCRB_DE sbscrbDe ,
+ CRTFC_DN_VALUE subDn,
+ LOCK_AT lockAt
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateUser_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET EMPLYR_ID = #{emplyrId} ,
+ USER_NM = #{emplyrNm} ,
+ PASSWORD_HINT = #{passwordHint} ,
+ PASSWORD_CNSR = #{passwordCnsr} ,
+ EMPL_NO = #{emplNo} ,
+ IHIDNUM = #{ihidnum} ,
+ SEXDSTN_CODE = #{sexdstnCode} ,
+ BRTHDY = #{brth} ,
+ AREA_NO = #{areaNo} ,
+ HOUSE_MIDDLE_TELNO = #{homemiddleTelno} ,
+ HOUSE_END_TELNO = #{homeendTelno} ,
+ FXNUM = #{fxnum} ,
+ HOUSE_ADRES = #{homeadres} ,
+ DETAIL_ADRES = #{detailAdres} ,
+ ZIP = #{zip} ,
+ OFFM_TELNO = #{offmTelno} ,
+ MBTLNUM = #{moblphonNo} ,
+ EMAIL_ADRES = #{emailAdres} ,
+ OFCPS_NM = #{ofcpsNm} ,
+ GROUP_ID = #{groupId} ,
+ ORGNZT_ID = #{orgnztId} ,
+ PSTINST_CODE = #{insttCode} ,
+ EMPLYR_STTUS_CODE = #{emplyrSttusCode} ,
+ CRTFC_DN_VALUE = #{subDn}
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <insert id="insertUserHistory_S">
+
+ INSERT INTO COMTHEMPLYRINFOCHANGEDTLS
+ ( EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ CHANGE_DE )
+ SELECT
+ EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ TO_CHAR(SYSDATE, 'YYYYMMDD')
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+
+ </insert>
+
+ <select id="checkIdDplct_S" resultType="int">
+
+ SELECT COUNT(1) usedCnt
+ FROM(
+ SELECT
+ EMPLYR_ID userId
+ FROM COMTNEMPLYRINFO
+ UNION ALL
+ SELECT
+ ENTRPRS_MBER_ID userId
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT
+ MBER_ID userId
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE userId = #{checkId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,304 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userManageDAO">
+
+ <select id="selectUserList_S" resultType="egovMap">
+ SELECT
+ ESNTL_ID "uniqId",
+ 'USR03' "userTy",
+ EMPLYR_ID "userId",
+ USER_NM "userNm",
+ EMAIL_ADRES "emailAdres",
+ AREA_NO "areaNo",
+ HOUSE_MIDDLE_TELNO "middleTelno",
+ HOUSE_END_TELNO "endTelno",
+ MBTLNUM "moblphonNo",
+ GROUP_ID "groupId",
+ EMPLYR_STTUS_CODE "sttus",
+ SBSCRB_DE "sbscrbDe"
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ EMPLYR_ID LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ USER_NM LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+
+ ORDER BY SBSCRB_DE DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectUserListTotCnt_S" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM(
+ SELECT
+ ESNTL_ID "uniqId",
+ 'USR03' "userTy",
+ EMPLYR_ID "userId",
+ USER_NM "userNm",
+ EMAIL_ADRES "emailAdres",
+ AREA_NO "areaNo",
+ HOUSE_MIDDLE_TELNO "middleTelno",
+ HOUSE_END_TELNO "endTelno",
+ MBTLNUM "moblphonNo",
+ GROUP_ID "groupId",
+ EMPLYR_STTUS_CODE "sttus",
+ SBSCRB_DE "sbscrbDe"
+ FROM COMTNEMPLYRINFO
+ ) A
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND sttus LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ "userId" LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ <if test="searchCondition == 1">AND
+ "userNm" LIKE '%' || #{searchKeyword} || '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertUser_S">
+
+ INSERT INTO COMTNEMPLYRINFO
+ ( ESNTL_ID ,
+ EMPLYR_ID ,
+ USER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ EMPL_NO ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ OFCPS_NM ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ SBSCRB_DE ,
+ CRTFC_DN_VALUE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId} ,
+ #{emplyrId} ,
+ #{emplyrNm} ,
+ #{password} ,
+ #{passwordHint} ,
+ #{passwordCnsr} ,
+ #{emplNo} ,
+ #{ihidnum} ,
+ #{sexdstnCode} ,
+ #{brth} ,
+ #{areaNo} ,
+ #{homemiddleTelno} ,
+ #{homeendTelno} ,
+ #{fxnum} ,
+ #{homeadres} ,
+ #{detailAdres} ,
+ #{zip} ,
+ #{offmTelno} ,
+ #{moblphonNo} ,
+ #{emailAdres} ,
+ #{ofcpsNm} ,
+ #{groupId} ,
+ #{orgnztId} ,
+ #{insttCode} ,
+ #{emplyrSttusCode} ,
+ NOW() ,
+ #{subDn} ,
+ NOW() )
+
+ </insert>
+
+ <delete id="deleteUser_S">
+
+ DELETE FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectUser_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ ESNTL_ID "uniqId" ,
+ 'USR03' "userTy" ,
+ EMPLYR_ID "emplyrId" ,
+ USER_NM "emplyrNm" ,
+ PASSWORD "password" ,
+ PASSWORD_HINT "passwordHint" ,
+ PASSWORD_CNSR "passwordCnsr" ,
+ EMPL_NO "emplNo" ,
+ IHIDNUM "ihidnum" ,
+ SEXDSTN_CODE "sexdstnCode" ,
+ BRTHDY "brth" ,
+ AREA_NO "areaNo" ,
+ HOUSE_MIDDLE_TELNO "homemiddleTelno" ,
+ HOUSE_END_TELNO "homeendTelno" ,
+ FXNUM "fxnum" ,
+ HOUSE_ADRES "homeadres" ,
+ DETAIL_ADRES "detailAdres" ,
+ ZIP "zip" ,
+ OFFM_TELNO "offmTelno" ,
+ MBTLNUM "moblphonNo" ,
+ EMAIL_ADRES "emailAdres" ,
+ OFCPS_NM "ofcpsNm" ,
+ GROUP_ID "groupId" ,
+ ORGNZT_ID "orgnztId" ,
+ PSTINST_CODE "insttCode" ,
+ EMPLYR_STTUS_CODE "emplyrSttusCode" ,
+ SBSCRB_DE "sbscrbDe" ,
+ CRTFC_DN_VALUE "subDn" ,
+ LOCK_AT "lockAt"
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateUser_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET EMPLYR_ID = #{emplyrId} ,
+ USER_NM = #{emplyrNm} ,
+ PASSWORD_HINT = #{passwordHint} ,
+ PASSWORD_CNSR = #{passwordCnsr} ,
+ EMPL_NO = #{emplNo} ,
+ IHIDNUM = #{ihidnum} ,
+ SEXDSTN_CODE = #{sexdstnCode} ,
+ BRTHDY = #{brth} ,
+ AREA_NO = #{areaNo} ,
+ HOUSE_MIDDLE_TELNO = #{homemiddleTelno} ,
+ HOUSE_END_TELNO = #{homeendTelno} ,
+ FXNUM = #{fxnum} ,
+ HOUSE_ADRES = #{homeadres} ,
+ DETAIL_ADRES = #{detailAdres} ,
+ ZIP = #{zip} ,
+ OFFM_TELNO = #{offmTelno} ,
+ MBTLNUM = #{moblphonNo} ,
+ EMAIL_ADRES = #{emailAdres} ,
+ OFCPS_NM = #{ofcpsNm} ,
+ GROUP_ID = #{groupId} ,
+ ORGNZT_ID = #{orgnztId} ,
+ PSTINST_CODE = #{insttCode} ,
+ EMPLYR_STTUS_CODE = #{emplyrSttusCode} ,
+ CRTFC_DN_VALUE = #{subDn}
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <insert id="insertUserHistory_S">
+
+ INSERT INTO COMTHEMPLYRINFOCHANGEDTLS
+ ( EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ CHANGE_DE )
+ SELECT
+ EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ TO_CHAR(NOW(),'YYYYmmddHH24MISS')
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+
+ </insert>
+
+ <select id="checkIdDplct_S" resultType="int">
+
+ SELECT COUNT(1) "usedCnt"
+ FROM(
+ SELECT
+ EMPLYR_ID "userId"
+ FROM COMTNEMPLYRINFO
+ UNION ALL
+ SELECT
+ ENTRPRS_MBER_ID "userId"
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT
+ MBER_ID "userId"
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE "userId" = #{checkId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = NOW()
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ PASSWORD "password"
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="DeptManage">
+
+ <resultMap id="deptManageVO" type="egovframework.com.uss.umt.service.DeptManageVO">
+ <result property="orgnztId" column="ORGNZT_ID"/>
+ <result property="orgnztNm" column="ORGNZT_NM"/>
+ <result property="orgnztDc" column="ORGNZT_DC"/>
+ </resultMap>
+
+ <select id="selectDeptManageList" resultMap="deptManageVO">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ORGNZT_ID DESC
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectDeptManageListTotCnt" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectDeptManage" resultMap="deptManageVO">
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </select>
+
+ <insert id="insertDeptManage">
+
+ INSERT INTO COMTNORGNZTINFO
+ (ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC)
+ VALUES (#{orgnztId},
+ #{orgnztNm},
+ #{orgnztDc})
+
+ </insert>
+
+ <update id="updateDeptManage">
+ UPDATE COMTNORGNZTINFO
+ SET ORGNZT_NM = #{orgnztNm},
+ ORGNZT_DC = #{orgnztDc}
+ WHERE ORGNZT_ID = #{orgnztId}
+ </update>
+
+ <delete id="deleteDeptManage">
+
+ DELETE FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userManageDAO">
+
+ <select id="selectUserList_S" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR03' as "userTy",
+ EMPLYR_ID as "userId",
+ USER_NM as "userNm",
+ EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ HOUSE_MIDDLE_TELNO as "middleTelno",
+ HOUSE_END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ EMPLYR_STTUS_CODE as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectUserListTotCnt_S" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">
+ AND EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">
+ AND USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertUser_S">
+
+ INSERT INTO COMTNEMPLYRINFO
+ ( ESNTL_ID ,
+ EMPLYR_ID ,
+ USER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ EMPL_NO ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ OFCPS_NM ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ SBSCRB_DE ,
+ CRTFC_DN_VALUE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId} ,
+ #{emplyrId} ,
+ #{emplyrNm} ,
+ #{password} ,
+ #{passwordHint} ,
+ #{passwordCnsr} ,
+ #{emplNo} ,
+ #{ihidnum} ,
+ #{sexdstnCode} ,
+ #{brth} ,
+ #{areaNo} ,
+ #{homemiddleTelno} ,
+ #{homeendTelno} ,
+ #{fxnum} ,
+ #{homeadres} ,
+ #{detailAdres} ,
+ #{zip} ,
+ #{offmTelno} ,
+ #{moblphonNo} ,
+ #{emailAdres} ,
+ #{ofcpsNm} ,
+ #{groupId} ,
+ #{orgnztId} ,
+ #{insttCode} ,
+ #{emplyrSttusCode} ,
+ sysdate ,
+ #{subDn} ,
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteUser_S">
+
+ DELETE FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectUser_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ ESNTL_ID uniqId ,
+ 'USR03' userTy,
+ EMPLYR_ID emplyrId ,
+ USER_NM emplyrNm ,
+ PASSWORD password ,
+ PASSWORD_HINT passwordHint ,
+ PASSWORD_CNSR passwordCnsr ,
+ EMPL_NO emplNo ,
+ IHIDNUM ihidnum ,
+ SEXDSTN_CODE sexdstnCode ,
+ BRTHDY brth ,
+ AREA_NO areaNo ,
+ HOUSE_MIDDLE_TELNO homemiddleTelno ,
+ HOUSE_END_TELNO homeendTelno ,
+ FXNUM fxnum ,
+ HOUSE_ADRES homeadres ,
+ DETAIL_ADRES detailAdres ,
+ ZIP zip ,
+ OFFM_TELNO offmTelno ,
+ MBTLNUM moblphonNo ,
+ EMAIL_ADRES emailAdres ,
+ OFCPS_NM ofcpsNm ,
+ GROUP_ID groupId ,
+ ORGNZT_ID orgnztId ,
+ PSTINST_CODE insttCode ,
+ EMPLYR_STTUS_CODE emplyrSttusCode ,
+ SBSCRB_DE sbscrbDe ,
+ CRTFC_DN_VALUE subDn,
+ LOCK_AT lockAt
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateUser_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET EMPLYR_ID = #{emplyrId} ,
+ USER_NM = #{emplyrNm} ,
+ PASSWORD_HINT = #{passwordHint} ,
+ PASSWORD_CNSR = #{passwordCnsr} ,
+ EMPL_NO = #{emplNo} ,
+ IHIDNUM = #{ihidnum} ,
+ SEXDSTN_CODE = #{sexdstnCode} ,
+ BRTHDY = #{brth} ,
+ AREA_NO = #{areaNo} ,
+ HOUSE_MIDDLE_TELNO = #{homemiddleTelno} ,
+ HOUSE_END_TELNO = #{homeendTelno} ,
+ FXNUM = #{fxnum} ,
+ HOUSE_ADRES = #{homeadres} ,
+ DETAIL_ADRES = #{detailAdres} ,
+ ZIP = #{zip} ,
+ OFFM_TELNO = #{offmTelno} ,
+ MBTLNUM = #{moblphonNo} ,
+ EMAIL_ADRES = #{emailAdres} ,
+ OFCPS_NM = #{ofcpsNm} ,
+ GROUP_ID = #{groupId} ,
+ ORGNZT_ID = #{orgnztId} ,
+ PSTINST_CODE = #{insttCode} ,
+ EMPLYR_STTUS_CODE = #{emplyrSttusCode} ,
+ CRTFC_DN_VALUE = #{subDn}
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <insert id="insertUserHistory_S">
+
+ INSERT INTO COMTHEMPLYRINFOCHANGEDTLS
+ ( EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ CHANGE_DE )
+ SELECT
+ EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ SYSDATE
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+
+ </insert>
+
+ <select id="checkIdDplct_S" resultType="int">
+
+ SELECT COUNT(1) usedCnt
+ FROM(
+ SELECT
+ EMPLYR_ID userId
+ FROM COMTNEMPLYRINFO
+ UNION ALL
+ SELECT
+ ENTRPRS_MBER_ID userId
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT
+ MBER_ID userId
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE userId = #{checkId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="userManageDAO">
+
+ <select id="selectUserList_S" resultType="egovMap">
+SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ ESNTL_ID as "uniqId",
+ 'USR03' as "userTy",
+ EMPLYR_ID as "userId",
+ USER_NM as "userNm",
+ EMAIL_ADRES as "emailAdres",
+ AREA_NO as "areaNo",
+ HOUSE_MIDDLE_TELNO as "middleTelno",
+ HOUSE_END_TELNO as "endTelno",
+ MBTLNUM as "moblphonNo",
+ GROUP_ID as "groupId",
+ EMPLYR_STTUS_CODE as "sttus",
+ SBSCRB_DE as "sbscrbDe"
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ <![CDATA[
+ ORDER BY 12 DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectUserListTotCnt_S" resultType="int">
+ SELECT COUNT(1) totcnt
+ FROM COMTNEMPLYRINFO
+ WHERE 1=1
+ <if test='sbscrbSttus != null and sbscrbSttus neq "0" and sbscrbSttus neq ""'>
+ AND EMPLYR_STTUS_CODE LIKE #{sbscrbSttus}
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isNotEmpty(searchKeyword)">
+ <if test="searchCondition == 0">AND
+ EMPLYR_ID LIKE #{searchKeyword}
+ </if>
+ <if test="searchCondition == 1">AND
+ USER_NM LIKE '%' ||#{searchKeyword}|| '%'
+ </if>
+ </if>
+ </select>
+
+ <insert id="insertUser_S">
+
+ INSERT INTO COMTNEMPLYRINFO
+ ( ESNTL_ID ,
+ EMPLYR_ID ,
+ USER_NM ,
+ PASSWORD ,
+ PASSWORD_HINT ,
+ PASSWORD_CNSR ,
+ EMPL_NO ,
+ IHIDNUM ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ OFCPS_NM ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ SBSCRB_DE ,
+ CRTFC_DN_VALUE ,
+ CHG_PWD_LAST_PNTTM )
+ VALUES (
+ #{uniqId} ,
+ #{emplyrId} ,
+ #{emplyrNm} ,
+ #{password} ,
+ #{passwordHint} ,
+ #{passwordCnsr} ,
+ #{emplNo} ,
+ #{ihidnum} ,
+ #{sexdstnCode} ,
+ #{brth} ,
+ #{areaNo} ,
+ #{homemiddleTelno} ,
+ #{homeendTelno} ,
+ #{fxnum} ,
+ #{homeadres} ,
+ #{detailAdres} ,
+ #{zip} ,
+ #{offmTelno} ,
+ #{moblphonNo} ,
+ #{emailAdres} ,
+ #{ofcpsNm} ,
+ #{groupId} ,
+ #{orgnztId} ,
+ #{insttCode} ,
+ #{emplyrSttusCode} ,
+ sysdate ,
+ #{subDn} ,
+ sysdate )
+
+ </insert>
+
+ <delete id="deleteUser_S">
+
+ DELETE FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{delId}
+
+ </delete>
+
+ <select id="selectUser_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ ESNTL_ID uniqId ,
+ 'USR03' userTy,
+ EMPLYR_ID emplyrId ,
+ USER_NM emplyrNm ,
+ PASSWORD password ,
+ PASSWORD_HINT passwordHint ,
+ PASSWORD_CNSR passwordCnsr ,
+ EMPL_NO emplNo ,
+ IHIDNUM ihidnum ,
+ SEXDSTN_CODE sexdstnCode ,
+ BRTHDY brth ,
+ AREA_NO areaNo ,
+ HOUSE_MIDDLE_TELNO homemiddleTelno ,
+ HOUSE_END_TELNO homeendTelno ,
+ FXNUM fxnum ,
+ HOUSE_ADRES homeadres ,
+ DETAIL_ADRES detailAdres ,
+ ZIP zip ,
+ OFFM_TELNO offmTelno ,
+ MBTLNUM moblphonNo ,
+ EMAIL_ADRES emailAdres ,
+ OFCPS_NM ofcpsNm ,
+ GROUP_ID groupId ,
+ ORGNZT_ID orgnztId ,
+ PSTINST_CODE insttCode ,
+ EMPLYR_STTUS_CODE emplyrSttusCode ,
+ SBSCRB_DE sbscrbDe ,
+ CRTFC_DN_VALUE subDn,
+ LOCK_AT lockAt
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateUser_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET EMPLYR_ID = #{emplyrId} ,
+ USER_NM = #{emplyrNm} ,
+ PASSWORD_HINT = #{passwordHint} ,
+ PASSWORD_CNSR = #{passwordCnsr} ,
+ EMPL_NO = #{emplNo} ,
+ IHIDNUM = #{ihidnum} ,
+ SEXDSTN_CODE = #{sexdstnCode} ,
+ BRTHDY = #{brth} ,
+ AREA_NO = #{areaNo} ,
+ HOUSE_MIDDLE_TELNO = #{homemiddleTelno} ,
+ HOUSE_END_TELNO = #{homeendTelno} ,
+ FXNUM = #{fxnum} ,
+ HOUSE_ADRES = #{homeadres} ,
+ DETAIL_ADRES = #{detailAdres} ,
+ ZIP = #{zip} ,
+ OFFM_TELNO = #{offmTelno} ,
+ MBTLNUM = #{moblphonNo} ,
+ EMAIL_ADRES = #{emailAdres} ,
+ OFCPS_NM = #{ofcpsNm} ,
+ GROUP_ID = #{groupId} ,
+ ORGNZT_ID = #{orgnztId} ,
+ PSTINST_CODE = #{insttCode} ,
+ EMPLYR_STTUS_CODE = #{emplyrSttusCode} ,
+ CRTFC_DN_VALUE = #{subDn}
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <insert id="insertUserHistory_S">
+
+ INSERT INTO COMTHEMPLYRINFOCHANGEDTLS
+ ( EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ CHANGE_DE )
+ SELECT
+ EMPLYR_ID ,
+ EMPL_NO ,
+ SEXDSTN_CODE ,
+ BRTHDY ,
+ AREA_NO ,
+ HOUSE_MIDDLE_TELNO ,
+ HOUSE_END_TELNO ,
+ FXNUM ,
+ HOUSE_ADRES ,
+ DETAIL_ADRES ,
+ ZIP ,
+ OFFM_TELNO ,
+ MBTLNUM ,
+ EMAIL_ADRES ,
+ GROUP_ID ,
+ ORGNZT_ID ,
+ PSTINST_CODE ,
+ EMPLYR_STTUS_CODE ,
+ ESNTL_ID ,
+ SYSDATE
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+
+ </insert>
+
+ <select id="checkIdDplct_S" resultType="int">
+
+ SELECT COUNT(1) usedCnt
+ FROM(
+ SELECT
+ EMPLYR_ID userId
+ FROM COMTNEMPLYRINFO
+ UNION ALL
+ SELECT
+ ENTRPRS_MBER_ID userId
+ FROM COMTNENTRPRSMBER
+ UNION ALL
+ SELECT
+ MBER_ID userId
+ FROM COMTNGNRLMBER
+ ) A
+ WHERE userId = #{checkId}
+
+ </select>
+
+ <update id="updatePassword_S">
+
+ UPDATE COMTNEMPLYRINFO
+ SET
+ PASSWORD = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ESNTL_ID = #{uniqId}
+
+ </update>
+
+ <select id="selectPassword_S" resultType="egovframework.com.uss.umt.service.UserManageVO">
+
+ SELECT
+ PASSWORD password
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID=#{uniqId}
+
+ </select>
+
+ <update id="updateLockIncorrect">
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ESNTL_ID = #{uniqId}
+ </update>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovUserManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="deptManageDAO">
+
+ <resultMap id="deptManageVO" type="egovframework.com.uss.umt.service.DeptManageVO">
+ <result property="orgnztId" column="ORGNZT_ID"/>
+ <result property="orgnztNm" column="ORGNZT_NM"/>
+ <result property="orgnztDc" column="ORGNZT_DC"/>
+ </resultMap>
+
+ <select id="selectDeptManageList" resultMap="deptManageVO">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ <![CDATA[
+ ORDER BY ORGNZT_ID DESC
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectDeptManageListTotCnt" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <select id="selectDeptManage" resultMap="deptManageVO">
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </select>
+
+ <insert id="insertDeptManage">
+
+ INSERT INTO COMTNORGNZTINFO
+ (ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC)
+ VALUES (#{orgnztId},
+ #{orgnztNm},
+ #{orgnztDc})
+
+ </insert>
+
+ <update id="updateDeptManage">
+ UPDATE COMTNORGNZTINFO
+ SET ORGNZT_NM = #{orgnztNm},
+ ORGNZT_DC = #{orgnztDc}
+ WHERE ORGNZT_ID = #{orgnztId}
+ </update>
+
+ <delete id="deleteDeptManage">
+
+ DELETE FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="deptManageDAO">
+
+ <resultMap id="deptManageVO" type="egovframework.com.uss.umt.service.DeptManageVO">
+ <result property="orgnztId" column="ORGNZT_ID"/>
+ <result property="orgnztNm" column="ORGNZT_NM"/>
+ <result property="orgnztDc" column="ORGNZT_DC"/>
+ </resultMap>
+
+ <select id="selectDeptManageList" resultMap="deptManageVO">
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ <![CDATA[
+ ORDER BY ORGNZT_ID DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ ]]>
+ </select>
+
+ <select id="selectDeptManageListTotCnt" resultType="int">
+
+ SELECT COUNT(*) totcnt
+ FROM COMTNORGNZTINFO
+ WHERE 1=1
+ <if test="searchCondition == 1">AND
+ ORGNZT_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <select id="selectDeptManage" resultMap="deptManageVO">
+
+ SELECT ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC
+ FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </select>
+
+ <insert id="insertDeptManage">
+
+ INSERT INTO COMTNORGNZTINFO
+ (ORGNZT_ID,
+ ORGNZT_NM,
+ ORGNZT_DC)
+ VALUES (#{orgnztId},
+ #{orgnztNm},
+ #{orgnztDc})
+
+ </insert>
+
+ <update id="updateDeptManage">
+ UPDATE COMTNORGNZTINFO
+ SET ORGNZT_NM = #{orgnztNm},
+ ORGNZT_DC = #{orgnztDc}
+ WHERE ORGNZT_ID = #{orgnztId}
+ </update>
+
+ <delete id="deleteDeptManage">
+
+ DELETE FROM COMTNORGNZTINFO
+ WHERE ORGNZT_ID = #{orgnztId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uss/umt/EgovDeptManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_postgres.xml (revision 7)
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+ -->
+ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="UserLog">
+
+
+ <!-- 사용자로그 맵 -->
+ <resultMap id="UserLogVO" type="egovframework.com.sym.log.ulg.service.UserLog">
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="creatCo" column="CREAT_CO"/>
+ <result property="updtCo" column="UPDT_CO"/>
+ <result property="rdCnt" column="RDCNT"/>
+ <result property="deleteCo" column="DELETE_CO"/>
+ <result property="outptCo" column="OUTPT_CO"/>
+ <result property="errorCo" column="ERROR_CO"/>
+ </resultMap>
+
+ <!-- 사용자 로그 등록 -->
+ <insert id="logInsertUserLog">
+ <![CDATA[
+ INSERT INTO COMTNUSERLOG
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTNUSERLOG c
+ WHERE c.OCCRRNC_DE = TO_CHAR(NOW() - interval '1 day', 'YYYYmmdd')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' ) = TO_CHAR(NOW() - interval '1 day', 'YYYYmmdd')
+ AND b.RQESTER_ID IS NOT NULL
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 사용자 로그 상세 조회 -->
+ <select id="selectUserLog" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ TO_CHAR(TO_DATE(a.OCCRRNC_DE, 'YYYYmmdd'), 'YYYYmmdd') = #{occrrncDe}
+ AND a.RQESTER_ID = #{rqesterId}
+ AND a.SVC_NM = #{srvcNm}
+ AND a.METHOD_NM = #{methodNm}
+
+ ]]>
+ </select>
+
+ <!-- 사용자 로그 목록 조회 -->
+ <select id="selectUserLogInf" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 사용자 로그 총건수 -->
+ <select id="selectUserLogInfCnt" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.OCCRRNC_DE) as cnt
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+
+--><!--Converted at: Wed May 11 15:50:44 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="UserLog">
+
+ <!-- 사용자로그 맵 -->
+ <resultMap id="UserLogVO" type="egovframework.com.sym.log.ulg.service.UserLog">
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="creatCo" column="CREAT_CO"/>
+ <result property="updtCo" column="UPDT_CO"/>
+ <result property="rdCnt" column="RDCNT"/>
+ <result property="deleteCo" column="DELETE_CO"/>
+ <result property="outptCo" column="OUTPT_CO"/>
+ <result property="errorCo" column="ERROR_CO"/>
+ </resultMap>
+
+ <!-- 사용자 로그 등록 -->
+ <insert id="logInsertUserLog">
+
+ <![CDATA[
+ INSERT INTO COMTNUSERLOG
+ SELECT TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTNUSERLOG c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ AND b.RQESTER_ID IS NOT NULL
+ GROUP BY TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+
+ <!-- 사용자 로그 상세 조회 -->
+ <select id="selectUserLog" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.OCCRRNC_DE = #{occrrncDe}
+ AND a.RQESTER_ID = #{rqesterId}
+ AND a.SVC_NM = #{srvcNm}
+ AND a.METHOD_NM = #{methodNm}
+ ]]>
+
+ </select>
+
+ <!-- 사용자 로그 목록 조회 -->
+ <select id="selectUserLogInf" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 사용자 로그 총건수 -->
+ <select id="selectUserLogInfCnt" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.OCCRRNC_DE) as cnt
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_oracle.xml (revision 7)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+
+--><!--Converted at: Wed May 11 15:50:45 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="UserLog">
+
+ <!-- 사용자로그 맵 -->
+ <resultMap id="UserLogVO" type="egovframework.com.sym.log.ulg.service.UserLog">
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="creatCo" column="CREAT_CO"/>
+ <result property="updtCo" column="UPDT_CO"/>
+ <result property="rdCnt" column="RDCNT"/>
+ <result property="deleteCo" column="DELETE_CO"/>
+ <result property="outptCo" column="OUTPT_CO"/>
+ <result property="errorCo" column="ERROR_CO"/>
+ </resultMap>
+
+ <!-- 사용자 로그 등록 -->
+ <insert id="logInsertUserLog">
+
+ <![CDATA[
+ INSERT INTO COMTNUSERLOG
+ SELECT TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTNUSERLOG c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ AND b.RQESTER_ID IS NOT NULL
+ GROUP BY TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+ </insert>
+
+
+ <!-- 사용자 로그 상세 조회 -->
+ <select id="selectUserLog" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.OCCRRNC_DE = #{occrrncDe}
+ AND a.RQESTER_ID = #{rqesterId}
+ AND a.SVC_NM = #{srvcNm}
+ AND a.METHOD_NM = #{methodNm}
+ ]]>
+ </select>
+
+ <!-- 사용자 로그 목록 조회 -->
+ <select id="selectUserLogInf" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 사용자 로그 총건수 -->
+ <select id="selectUserLogInfCnt" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.OCCRRNC_DE) as cnt
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_altibase.xml (revision 7)
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+
+--><!--Converted at: Wed May 11 15:50:44 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="UserLog">
+
+ <!-- 사용자로그 맵 -->
+ <resultMap id="UserLogVO" type="egovframework.com.sym.log.ulg.service.UserLog">
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="creatCo" column="CREAT_CO"/>
+ <result property="updtCo" column="UPDT_CO"/>
+ <result property="rdCnt" column="RDCNT"/>
+ <result property="deleteCo" column="DELETE_CO"/>
+ <result property="outptCo" column="OUTPT_CO"/>
+ <result property="errorCo" column="ERROR_CO"/>
+ </resultMap>
+
+ <!-- 사용자 로그 등록 -->
+ <insert id="logInsertUserLog">
+
+ <![CDATA[
+ INSERT INTO COMTNUSERLOG
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTNUSERLOG c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ AND b.RQESTER_ID IS NOT NULL
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 사용자 로그 상세 조회 -->
+ <select id="selectUserLog" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.OCCRRNC_DE = #{occrrncDe}
+ AND a.RQESTER_ID = #{rqesterId}
+ AND a.SVC_NM = #{srvcNm}
+ AND a.METHOD_NM = #{methodNm}
+ ]]>
+
+ </select>
+
+ <!-- 사용자 로그 목록 조회 -->
+ <select id="selectUserLogInf" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 사용자 로그 총건수 -->
+ <select id="selectUserLogInfCnt" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.OCCRRNC_DE) as cnt
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_mysql.xml (revision 7)
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+ -->
+ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="UserLog">
+
+
+ <!-- 사용자로그 맵 -->
+ <resultMap id="UserLogVO" type="egovframework.com.sym.log.ulg.service.UserLog">
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="creatCo" column="CREAT_CO"/>
+ <result property="updtCo" column="UPDT_CO"/>
+ <result property="rdCnt" column="RDCNT"/>
+ <result property="deleteCo" column="DELETE_CO"/>
+ <result property="outptCo" column="OUTPT_CO"/>
+ <result property="errorCo" column="ERROR_CO"/>
+ </resultMap>
+
+ <!-- 사용자 로그 등록 -->
+ <insert id="logInsertUserLog">
+ <![CDATA[
+ INSERT INTO COMTNUSERLOG
+ SELECT DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d' )
+ FROM COMTNUSERLOG c
+ WHERE DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ )
+ AND DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ AND b.RQESTER_ID IS NOT NULL
+ GROUP BY DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 사용자 로그 상세 조회 -->
+ <select id="selectUserLog" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ DATE_FORMAT(a.OCCRRNC_DE, '%Y%m%d') = #{occrrncDe}
+ AND a.RQESTER_ID = #{rqesterId}
+ AND a.SVC_NM = #{srvcNm}
+ AND a.METHOD_NM = #{methodNm}
+
+ ]]>
+ </select>
+
+ <!-- 사용자 로그 목록 조회 -->
+ <select id="selectUserLogInf" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 사용자 로그 총건수 -->
+ <select id="selectUserLogInfCnt" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.OCCRRNC_DE) as cnt
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_tibero.xml (revision 7)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+
+--><!--Converted at: Wed May 11 15:50:45 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="UserLog">
+
+ <!-- 사용자로그 맵 -->
+ <resultMap id="UserLogVO" type="egovframework.com.sym.log.ulg.service.UserLog">
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="creatCo" column="CREAT_CO"/>
+ <result property="updtCo" column="UPDT_CO"/>
+ <result property="rdCnt" column="RDCNT"/>
+ <result property="deleteCo" column="DELETE_CO"/>
+ <result property="outptCo" column="OUTPT_CO"/>
+ <result property="errorCo" column="ERROR_CO"/>
+ </resultMap>
+
+ <!-- 사용자 로그 등록 -->
+ <insert id="logInsertUserLog">
+
+ <![CDATA[
+ INSERT INTO COMTNUSERLOG
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD')
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTNUSERLOG c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ AND b.RQESTER_ID IS NOT NULL
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD')
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 사용자 로그 상세 조회 -->
+ <select id="selectUserLog" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.OCCRRNC_DE = #{occrrncDe}
+ AND a.RQESTER_ID = #{rqesterId}
+ AND a.SVC_NM = #{srvcNm}
+ AND a.METHOD_NM = #{methodNm}
+ ]]>
+
+ </select>
+
+ <!-- 사용자 로그 목록 조회 -->
+ <select id="selectUserLogInf" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 사용자 로그 총건수 -->
+ <select id="selectUserLogInfCnt" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.OCCRRNC_DE) as cnt
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_maria.xml (revision 7)
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+ -->
+ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="UserLog">
+
+
+ <!-- 사용자로그 맵 -->
+ <resultMap id="UserLogVO" type="egovframework.com.sym.log.ulg.service.UserLog">
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="creatCo" column="CREAT_CO"/>
+ <result property="updtCo" column="UPDT_CO"/>
+ <result property="rdCnt" column="RDCNT"/>
+ <result property="deleteCo" column="DELETE_CO"/>
+ <result property="outptCo" column="OUTPT_CO"/>
+ <result property="errorCo" column="ERROR_CO"/>
+ </resultMap>
+
+ <!-- 사용자 로그 등록 -->
+ <insert id="logInsertUserLog">
+ <![CDATA[
+ INSERT INTO COMTNUSERLOG
+ SELECT DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d' )
+ FROM COMTNUSERLOG c
+ WHERE DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ )
+ AND DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ AND b.RQESTER_ID IS NOT NULL
+ GROUP BY DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.RQESTER_ID
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 사용자 로그 상세 조회 -->
+ <select id="selectUserLog" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ DATE_FORMAT(a.OCCRRNC_DE, '%Y%m%d') = #{occrrncDe}
+ AND a.RQESTER_ID = #{rqesterId}
+ AND a.SVC_NM = #{srvcNm}
+ AND a.METHOD_NM = #{methodNm}
+
+ ]]>
+ </select>
+
+ <!-- 사용자 로그 목록 조회 -->
+ <select id="selectUserLogInf" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultMap="UserLogVO">
+ <![CDATA[
+ SELECT
+ a.OCCRRNC_DE
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.CREAT_CO
+ , a.UPDT_CO
+ , a.RDCNT
+ , a.DELETE_CO
+ , a.OUTPT_CO
+ , a.ERROR_CO
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 사용자 로그 총건수 -->
+ <select id="selectUserLogInfCnt" parameterType="egovframework.com.sym.log.ulg.service.UserLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.OCCRRNC_DE) as cnt
+ FROM
+ COMTNUSERLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ b.USER_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN REPLACE(#{searchBgnDe},'-','') AND REPLACE(#{searchEndDe},'-','') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/ulg/EgovUserLog_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_postgres.xml (revision 7)
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SysLog">
+
+ <!-- 시스템로그 맵 -->
+ <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="processSeCode" column="PROCESS_SE_CODE"/>
+ <result property="processSeCodeNm" column="PROCESS_SE_CODE_NM"/>
+ <result property="processTime" column="PROCESS_TIME"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 시스템 로그 등록 -->
+ <insert id="logInsertSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog">
+
+ <![CDATA[
+ INSERT INTO COMTNSYSLOG
+ ( REQUST_ID
+ , SVC_NM
+ , METHOD_NM
+ , PROCESS_SE_CODE
+ , PROCESS_TIME
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{srvcNm}
+ , #{methodNm}
+ , #{processSeCode}
+ , #{processTime}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , NOW())
+ ]]>
+ </insert>
+
+ <!-- 시스템 로그 상세 조회 -->
+ <select id="selectSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ AND a.REQUST_ID = #{requstId}
+ ]]>
+ </select>
+
+ <!-- 시스템 로그 목록 조회 -->
+ <select id="selectSysLogInf" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_TIMESTAMP(CONCAT(#{searchBgnDe},' 00:00:00'), 'YYYY-mm-dd HH24:MI:SS')
+ AND TO_TIMESTAMP(CONCAT(#{searchEndDe},' 23:59:59'), 'YYYY-mm-dd HH24:MI:SS') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 시스템 로그 총건수 -->
+ <select id="selectSysLogInfCnt" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_TIMESTAMP(CONCAT(#{searchBgnDe},' 00:00:00'), 'YYYY-mm-dd HH24:MI:SS')
+ AND TO_TIMESTAMP(CONCAT(#{searchEndDe},' 23:59:59'), 'YYYY-mm-dd HH24:MI:SS') ]]>
+ </if>
+
+ </select>
+
+ <!-- 시스템 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertSysLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSSYSLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSSYSLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR(NOW() - interval '1 day', 'YYYYmmdd')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' ) = TO_CHAR(NOW() - interval '1 day', 'YYYYmmdd')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+ </insert>
+
+
+<!-- 시스템 로그 6개월전 로그 삭제 -->
+ <delete id="SysLog.logDeleteSysLogSummary">
+ <![CDATA[
+
+ DELETE FROM COMTNSYSLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYYmmdd') < TO_CHAR(NOW() - interval '6 month', 'YYYYmmdd')
+ ]]>
+
+ </delete>
+
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+--><!--Converted at: Wed May 11 15:50:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SysLog">
+
+ <!-- 시스템로그 맵 -->
+ <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="processSeCode" column="PROCESS_SE_CODE"/>
+ <result property="processSeCodeNm" column="PROCESS_SE_CODE_NM"/>
+ <result property="processTime" column="PROCESS_TIME"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 시스템 로그 등록 -->
+ <insert id="logInsertSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog">
+
+ <![CDATA[
+ INSERT INTO COMTNSYSLOG
+ ( REQUST_ID
+ , SVC_NM
+ , METHOD_NM
+ , PROCESS_SE_CODE
+ , PROCESS_TIME
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{srvcNm}
+ , #{methodNm}
+ , #{processSeCode}
+ , #{processTime}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , SYSDATETIME)
+ ]]>
+
+ </insert>
+
+ <!-- 시스템 로그 상세 조회 -->
+ <select id="selectSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ AND a.REQUST_ID = #{requstId}
+ ]]>
+
+ </select>
+
+ <!-- 시스템 로그 목록 조회 -->
+ <select id="selectSysLogInf" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATETIME(#{searchBgnDe} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATETIME(#{searchEndDe} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 시스템 로그 총건수 -->
+ <select id="selectSysLogInfCnt" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATETIME(#{searchBgnDe} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATETIME(#{searchEndDe} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 시스템 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertSysLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSSYSLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSSYSLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 시스템 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteSysLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNSYSLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY-MM-DD')
+ ]]>
+
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_oracle.xml (revision 7)
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+
+--><!--Converted at: Wed May 11 15:50:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SysLog">
+
+ <!-- 시스템로그 맵 -->
+ <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="processSeCode" column="PROCESS_SE_CODE"/>
+ <result property="processSeCodeNm" column="PROCESS_SE_CODE_NM"/>
+ <result property="processTime" column="PROCESS_TIME"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 시스템 로그 등록 -->
+ <insert id="logInsertSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog">
+ <![CDATA[
+ INSERT INTO COMTNSYSLOG
+ ( REQUST_ID
+ , SVC_NM
+ , METHOD_NM
+ , PROCESS_SE_CODE
+ , PROCESS_TIME
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{srvcNm}
+ , #{methodNm}
+ , #{processSeCode}
+ , #{processTime}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate)
+
+ ]]>
+ </insert>
+
+ <!-- 시스템 로그 상세 조회 -->
+ <select id="selectSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ AND a.REQUST_ID = #{requstId}
+
+ ]]>
+ </select>
+
+ <!-- 시스템 로그 목록 조회 -->
+ <select id="selectSysLogInf" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 시스템 로그 총건수 -->
+ <select id="selectSysLogInfCnt" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 시스템 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertSysLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSSYSLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSSYSLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 시스템 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteSysLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNSYSLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY-MM-DD')
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_altibase.xml (revision 7)
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+
+--><!--Converted at: Wed May 11 15:50:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SysLog">
+
+ <!-- 시스템로그 맵 -->
+ <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="processSeCode" column="PROCESS_SE_CODE"/>
+ <result property="processSeCodeNm" column="PROCESS_SE_CODE_NM"/>
+ <result property="processTime" column="PROCESS_TIME"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 시스템 로그 등록 -->
+ <insert id="logInsertSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog">
+
+ <![CDATA[
+ INSERT INTO COMTNSYSLOG
+ ( REQUST_ID
+ , SVC_NM
+ , METHOD_NM
+ , PROCESS_SE_CODE
+ , PROCESS_TIME
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{srvcNm}
+ , #{methodNm}
+ , #{processSeCode}
+ , #{processTime}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate)
+ ]]>
+
+ </insert>
+
+ <!-- 시스템 로그 상세 조회 -->
+ <select id="selectSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ AND a.REQUST_ID = #{requstId}
+
+ ]]>
+ </select>
+
+ <!-- 시스템 로그 목록 조회 -->
+ <select id="selectSysLogInf" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 시스템 로그 총건수 -->
+ <select id="selectSysLogInfCnt" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 시스템 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertSysLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSSYSLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSSYSLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 시스템 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteSysLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNSYSLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY-MM-DD')
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_mysql.xml (revision 7)
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SysLog">
+
+ <!-- 시스템로그 맵 -->
+ <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="processSeCode" column="PROCESS_SE_CODE"/>
+ <result property="processSeCodeNm" column="PROCESS_SE_CODE_NM"/>
+ <result property="processTime" column="PROCESS_TIME"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 시스템 로그 등록 -->
+ <insert id="logInsertSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog">
+
+ <![CDATA[
+ INSERT INTO COMTNSYSLOG
+ ( REQUST_ID
+ , SVC_NM
+ , METHOD_NM
+ , PROCESS_SE_CODE
+ , PROCESS_TIME
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{srvcNm}
+ , #{methodNm}
+ , #{processSeCode}
+ , #{processTime}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate())
+ ]]>
+ </insert>
+
+ <!-- 시스템 로그 상세 조회 -->
+ <select id="selectSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ AND a.REQUST_ID = #{requstId}
+ ]]>
+ </select>
+
+ <!-- 시스템 로그 목록 조회 -->
+ <select id="selectSysLogInf" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 시스템 로그 총건수 -->
+ <select id="selectSysLogInfCnt" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+
+ </select>
+
+ <!-- 시스템 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertSysLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSSYSLOGSUMMARY
+ SELECT DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT DATE_FORMAT(c.OCCRRNC_DE, '%Y-%m-%d' )
+ FROM COMTSSYSLOGSUMMARY c
+ WHERE DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d') = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ )
+ AND DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ GROUP BY DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+ </insert>
+
+
+<!-- 시스템 로그 6개월전 로그 삭제 -->
+ <delete id="SysLog.logDeleteSysLogSummary">
+ <![CDATA[
+
+ DELETE FROM COMTNSYSLOG
+ WHERE DATE_FORMAT(OCCRRNC_DE, '%Y-%m-%d') < DATE_FORMAT(ADDDATE(SYSDATE(), INTERVAL -6 MONTH), '%Y-%m-%d')
+ ]]>
+
+ </delete>
+
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_tibero.xml (revision 7)
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+
+--><!--Converted at: Wed May 11 15:50:41 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SysLog">
+
+ <!-- 시스템로그 맵 -->
+ <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="processSeCode" column="PROCESS_SE_CODE"/>
+ <result property="processSeCodeNm" column="PROCESS_SE_CODE_NM"/>
+ <result property="processTime" column="PROCESS_TIME"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 시스템 로그 등록 -->
+ <insert id="logInsertSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog">
+
+ <![CDATA[
+ INSERT INTO COMTNSYSLOG
+ ( REQUST_ID
+ , SVC_NM
+ , METHOD_NM
+ , PROCESS_SE_CODE
+ , PROCESS_TIME
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{srvcNm}
+ , #{methodNm}
+ , #{processSeCode}
+ , #{processTime}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate)
+ ]]>
+
+ </insert>
+
+ <!-- 시스템 로그 상세 조회 -->
+ <select id="selectSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ AND a.REQUST_ID = #{requstId}
+ ]]>
+
+ </select>
+
+ <!-- 시스템 로그 목록 조회 -->
+ <select id="selectSysLogInf" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 시스템 로그 총건수 -->
+ <select id="selectSysLogInfCnt" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON TRIM(a.PROCESS_SE_CODE) = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 시스템 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertSysLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSSYSLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD')
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSSYSLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD')
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+
+ </insert>
+
+ <!-- 시스템 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteSysLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNSYSLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, - 6), 'YYYY-MM-DD')
+ ]]>
+
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_maria.xml (revision 7)
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SysLog">
+
+ <!-- 시스템로그 맵 -->
+ <resultMap id="SysLogVO" type="egovframework.com.sym.log.lgm.service.SysLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="srvcNm" column="SVC_NM"/>
+ <result property="methodNm" column="METHOD_NM"/>
+ <result property="processSeCode" column="PROCESS_SE_CODE"/>
+ <result property="processSeCodeNm" column="PROCESS_SE_CODE_NM"/>
+ <result property="processTime" column="PROCESS_TIME"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 시스템 로그 등록 -->
+ <insert id="logInsertSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog">
+
+ <![CDATA[
+ INSERT INTO COMTNSYSLOG
+ ( REQUST_ID
+ , SVC_NM
+ , METHOD_NM
+ , PROCESS_SE_CODE
+ , PROCESS_TIME
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{srvcNm}
+ , #{methodNm}
+ , #{processSeCode}
+ , #{processTime}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate())
+ ]]>
+ </insert>
+
+ <!-- 시스템 로그 상세 조회 -->
+ <select id="selectSysLog" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ AND a.REQUST_ID = #{requstId}
+ ]]>
+ </select>
+
+ <!-- 시스템 로그 목록 조회 -->
+ <select id="selectSysLogInf" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultMap="SysLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.SVC_NM
+ , a.METHOD_NM
+ , a.PROCESS_SE_CODE
+ , c.CODE_NM AS PROCESS_SE_CODE_NM
+ , a.PROCESS_TIME
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 시스템 로그 총건수 -->
+ <select id="selectSysLogInfCnt" parameterType="egovframework.com.sym.log.lgm.service.SysLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNSYSLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ LEFT OUTER JOIN COMTCCMMNDETAILCODE c
+ ON a.PROCESS_SE_CODE = c.CODE
+ WHERE
+ c.CODE_ID = 'COM033'
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ c.CODE_NM LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+
+ </select>
+
+ <!-- 시스템 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertSysLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSSYSLOGSUMMARY
+ SELECT DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'C' THEN 1 ELSE 0 END) AS CREAT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'U' THEN 1 ELSE 0 END) AS UPDT_CO
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'R' THEN 1 ELSE 0 END) AS RDCNT
+ , SUM(CASE WHEN b.PROCESS_SE_CODE = 'D' THEN 1 ELSE 0 END) AS DELETE_CO
+ , 0 AS OUTPT_CO
+ , 0 AS ERROR_CO
+ FROM COMTNSYSLOG b
+ WHERE NOT EXISTS (SELECT DATE_FORMAT(c.OCCRRNC_DE, '%Y-%m-%d' )
+ FROM COMTSSYSLOGSUMMARY c
+ WHERE DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d') = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ )
+ AND DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ GROUP BY DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.SVC_NM
+ , b.METHOD_NM
+ ]]>
+
+ </insert>
+
+
+<!-- 시스템 로그 6개월전 로그 삭제 -->
+ <delete id="SysLog.logDeleteSysLogSummary">
+ <![CDATA[
+
+ DELETE FROM COMTNSYSLOG
+ WHERE DATE_FORMAT(OCCRRNC_DE, '%Y-%m-%d') < DATE_FORMAT(ADDDATE(SYSDATE(), INTERVAL -6 MONTH), '%Y-%m-%d')
+ ]]>
+
+ </delete>
+
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/lgm/EgovSysLog_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_altibase.xml (revision 7)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+
+--><!--Converted at: Wed May 11 15:50:45 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="WebLog">
+
+ <!-- 웹로그 맵 -->
+ <resultMap id="WebLogVO" type="egovframework.com.sym.log.wlg.service.WebLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="url" column="URL"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 웹 로그 등록 -->
+ <insert id="logInsertWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog">
+ <![CDATA[
+ INSERT INTO COMTNWEBLOG
+ ( REQUST_ID
+ , URL
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{url}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate)
+ ]]>
+
+ </insert>
+
+ <!-- 웹 로그 상세 조회 -->
+ <select id="selectWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.REQUST_ID = #{requstId}
+ ]]>
+
+ </select>
+
+ <!-- 웹 로그 목록 조회 -->
+ <select id="selectWebLogInf" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 웹 로그 총건수 -->
+ <select id="selectWebLogInfCnt" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 웹 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertWebLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSWEBLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD' )
+ , b.URL
+ , COUNT(b.OCCRRNC_DE) AS RDCNT
+ FROM COMTNWEBLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSWEBLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD' )
+ , b.URL
+ ]]>
+
+
+ </insert>
+
+ <!-- 웹 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteWebLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNWEBLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY-MM-DD')
+ ]]>
+
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_mysql.xml (revision 7)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환, 로그삭제기한 210일 -> 6개월로 변경
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="WebLog">
+
+ <!-- 웹로그 맵 -->
+ <resultMap id="WebLogVO" type="egovframework.com.sym.log.wlg.service.WebLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="url" column="URL"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 웹 로그 등록 -->
+ <insert id="logInsertWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog">
+ <![CDATA[
+ INSERT INTO COMTNWEBLOG
+ ( REQUST_ID
+ , URL
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{url}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate())
+ ]]>
+ </insert>
+
+ <!-- 웹 로그 상세 조회 -->
+ <select id="selectWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.REQUST_ID = #{requstId}
+ ]]>
+ </select>
+
+ <!-- 웹 로그 목록 조회 -->
+ <select id="selectWebLogInf" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 웹 로그 총건수 -->
+ <select id="selectWebLogInfCnt" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+
+ a.URL LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ </select>
+
+ <!-- 웹 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertWebLogSummary">
+ <![CDATA[
+ INSERT INTO COMTSWEBLOGSUMMARY
+ SELECT DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.URL
+ , COUNT(DATE_FORMAT(b.OCCRRNC_DE, '%Y-%m-%d' )) AS RDCNT
+ FROM COMTNWEBLOG b
+ WHERE NOT EXISTS (SELECT DATE_FORMAT(c.OCCRRNC_DE, '%Y-%m-%d' )
+ FROM COMTSWEBLOGSUMMARY c
+ WHERE DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d') = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ )
+ AND DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ GROUP BY DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.URL
+
+ ]]>
+ </insert>
+
+ <!-- 웹 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteWebLogSummary">
+ <![CDATA[
+ DELETE FROM COMTNWEBLOG
+ WHERE DATE_FORMAT(OCCRRNC_DE, '%Y-%m-%d') < DATE_FORMAT(ADDDATE(SYSDATE(), INTERVAL -6 MONTH), '%Y-%m-%d')
+
+ ]]>
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_tibero.xml (revision 7)
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환
+
+--><!--Converted at: Wed May 11 15:50:46 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="WebLog">
+
+ <!-- 웹로그 맵 -->
+ <resultMap id="WebLogVO" type="egovframework.com.sym.log.wlg.service.WebLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="url" column="URL"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 웹 로그 등록 -->
+ <insert id="logInsertWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog">
+
+ <![CDATA[
+ INSERT INTO COMTNWEBLOG
+ ( REQUST_ID
+ , URL
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{url}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate)
+ ]]>
+
+ </insert>
+
+ <!-- 웹 로그 상세 조회 -->
+ <select id="selectWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.REQUST_ID = #{requstId}
+ ]]>
+
+ </select>
+
+ <!-- 웹 로그 목록 조회 -->
+ <select id="selectWebLogInf" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 웹 로그 총건수 -->
+ <select id="selectWebLogInfCnt" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 웹 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertWebLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSWEBLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD')
+ , b.URL
+ , COUNT(b.OCCRRNC_DE) AS RDCNT
+ FROM COMTNWEBLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSWEBLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD')
+ , b.URL
+ ]]>
+
+
+ </insert>
+
+ <!-- 웹 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteWebLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNWEBLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, - 6), 'YYYY-MM-DD')
+ ]]>
+
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_maria.xml (revision 7)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환, 로그삭제기한 210일 -> 6개월로 변경
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="WebLog">
+
+ <!-- 웹로그 맵 -->
+ <resultMap id="WebLogVO" type="egovframework.com.sym.log.wlg.service.WebLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="url" column="URL"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 웹 로그 등록 -->
+ <insert id="logInsertWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog">
+ <![CDATA[
+ INSERT INTO COMTNWEBLOG
+ ( REQUST_ID
+ , URL
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{url}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate())
+ ]]>
+ </insert>
+
+ <!-- 웹 로그 상세 조회 -->
+ <select id="selectWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.REQUST_ID = #{requstId}
+ ]]>
+ </select>
+
+ <!-- 웹 로그 목록 조회 -->
+ <select id="selectWebLogInf" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 웹 로그 총건수 -->
+ <select id="selectWebLogInfCnt" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+
+ a.URL LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ </select>
+
+ <!-- 웹 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertWebLogSummary">
+ <![CDATA[
+ INSERT INTO COMTSWEBLOGSUMMARY
+ SELECT DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.URL
+ , COUNT(DATE_FORMAT(b.OCCRRNC_DE, '%Y-%m-%d' )) AS RDCNT
+ FROM COMTNWEBLOG b
+ WHERE NOT EXISTS (SELECT DATE_FORMAT(c.OCCRRNC_DE, '%Y-%m-%d' )
+ FROM COMTSWEBLOGSUMMARY c
+ WHERE DATE_FORMAT(c.OCCRRNC_DE, '%Y%m%d') = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ )
+ AND DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' ) = DATE_FORMAT(ADDDATE(SYSDATE(), -1), '%Y%m%d')
+ GROUP BY DATE_FORMAT(b.OCCRRNC_DE, '%Y%m%d' )
+ , b.URL
+
+ ]]>
+ </insert>
+
+ <!-- 웹 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteWebLogSummary">
+ <![CDATA[
+ DELETE FROM COMTNWEBLOG
+ WHERE DATE_FORMAT(OCCRRNC_DE, '%Y-%m-%d') < DATE_FORMAT(ADDDATE(SYSDATE(), INTERVAL -6 MONTH), '%Y-%m-%d')
+
+ ]]>
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_postgres.xml (revision 7)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.09.19 이정은 날짜로 검색 시 '-'를 공백으로 변환, 로그삭제기한 210일 -> 6개월로 변경
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="WebLog">
+
+ <!-- 웹로그 맵 -->
+ <resultMap id="WebLogVO" type="egovframework.com.sym.log.wlg.service.WebLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="url" column="URL"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 웹 로그 등록 -->
+ <insert id="logInsertWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog">
+ <![CDATA[
+ INSERT INTO COMTNWEBLOG
+ ( REQUST_ID
+ , URL
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{url}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , NOW())
+ ]]>
+ </insert>
+
+ <!-- 웹 로그 상세 조회 -->
+ <select id="selectWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.REQUST_ID = #{requstId}
+ ]]>
+ </select>
+
+ <!-- 웹 로그 목록 조회 -->
+ <select id="selectWebLogInf" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_TIMESTAMP(CONCAT(#{searchBgnDe},' 00:00:00'), 'YYYY-mm-dd HH24:MI:SS')
+ AND TO_TIMESTAMP(CONCAT(#{searchEndDe},' 23:59:59'), 'YYYY-mm-dd HH24:MI:SS') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.OCCRRNC_DE DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 웹 로그 총건수 -->
+ <select id="selectWebLogInfCnt" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+
+ a.URL LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_TIMESTAMP(CONCAT(#{searchBgnDe},' 00:00:00'), 'YYYY-mm-dd HH24:MI:SS')
+ AND TO_TIMESTAMP(CONCAT(#{searchEndDe},' 23:59:59'), 'YYYY-mm-dd HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 웹 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertWebLogSummary">
+ <![CDATA[
+ INSERT INTO COMTSWEBLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' )
+ , b.URL
+ , COUNT(TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' )) AS RDCNT
+ FROM COMTNWEBLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSWEBLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR(now() - interval '1 day', 'YYYYmmdd')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' ) = TO_CHAR(now() - interval '1 day', 'YYYYmmdd')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE, 'YYYYmmdd' )
+ , b.URL
+
+ ]]>
+ </insert>
+
+ <!-- 웹 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteWebLogSummary">
+ <![CDATA[
+ DELETE FROM COMTNWEBLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYYmmdd') < TO_CHAR(now() - interval '6 month', 'YYYYmmdd')
+
+ ]]>
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+
+--><!--Converted at: Wed May 11 15:50:45 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="WebLog">
+
+ <!-- 웹로그 맵 -->
+ <resultMap id="WebLogVO" type="egovframework.com.sym.log.wlg.service.WebLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="url" column="URL"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 웹 로그 등록 -->
+ <insert id="logInsertWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog">
+
+ <![CDATA[
+ INSERT INTO COMTNWEBLOG
+ ( REQUST_ID
+ , URL
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{url}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , SYSDATETIME)
+ ]]>
+
+ </insert>
+
+ <!-- 웹 로그 상세 조회 -->
+ <select id="selectWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.REQUST_ID = #{requstId}
+ ]]>
+
+ </select>
+
+ <!-- 웹 로그 목록 조회 -->
+ <select id="selectWebLogInf" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATETIME(#{searchBgnDe} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATETIME(#{searchEndDe} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 웹 로그 총건수 -->
+ <select id="selectWebLogInfCnt" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATETIME(#{searchBgnDe} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATETIME(#{searchEndDe} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 웹 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertWebLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSWEBLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.URL
+ , COUNT(b.OCCRRNC_DE) AS RDCNT
+ FROM COMTNWEBLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSWEBLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.URL
+ ]]>
+
+
+ </insert>
+
+ <!-- 웹 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteWebLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNWEBLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY-MM-DD')
+ ]]>
+
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_oracle.xml (revision 7)
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.10.17 서준식 OCCRRNC_DE 컬럼과 날짜 비교문에 RTRIM 함수 적용
+ 2017.09.19 이정은 날짜로 검색 시 시분초 추가, 로그삭제기한 210일 -> 6개월로 변경
+
+--><!--Converted at: Wed May 11 15:50:45 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="WebLog">
+
+ <!-- 웹로그 맵 -->
+ <resultMap id="WebLogVO" type="egovframework.com.sym.log.wlg.service.WebLog">
+ <result property="requstId" column="REQUST_ID"/>
+ <result property="occrrncDe" column="OCCRRNC_DE"/>
+ <result property="url" column="URL"/>
+ <result property="rqesterIp" column="RQESTER_IP"/>
+ <result property="rqesterId" column="RQESTER_ID"/>
+ <result property="rqsterNm" column="RQESTER_NM"/>
+ </resultMap>
+
+ <!-- 웹 로그 등록 -->
+ <insert id="logInsertWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog">
+
+ <![CDATA[
+ INSERT INTO COMTNWEBLOG
+ ( REQUST_ID
+ , URL
+ , RQESTER_ID
+ , RQESTER_IP
+ , OCCRRNC_DE )
+ VALUES ( #{requstId}
+ , #{url}
+ , #{rqesterId}
+ , #{rqesterIp}
+ , sysdate)
+ ]]>
+
+ </insert>
+
+ <!-- 웹 로그 상세 조회 -->
+ <select id="selectWebLog" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+
+ <![CDATA[
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ a.REQUST_ID = #{requstId}
+ ]]>
+
+ </select>
+
+ <!-- 웹 로그 목록 조회 -->
+ <select id="selectWebLogInf" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultMap="WebLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.REQUST_ID
+ , a.OCCRRNC_DE
+ , a.URL
+ , a.RQESTER_IP
+ , a.RQESTER_ID
+ , b.USER_NM AS RQESTER_NM
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ <![CDATA[
+ ORDER BY a.OCCRRNC_DE DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 웹 로그 총건수 -->
+ <select id="selectWebLogInfCnt" parameterType="egovframework.com.sym.log.wlg.service.WebLog" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(a.REQUST_ID) as cnt
+ FROM
+ COMTNWEBLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.RQESTER_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.URL LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.OCCRRNC_DE BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+ <!-- 웹 로그 전날 로그 요약 등록 -->
+ <insert id="logInsertWebLogSummary">
+
+ <![CDATA[
+ INSERT INTO COMTSWEBLOGSUMMARY
+ SELECT TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.URL
+ , COUNT(b.OCCRRNC_DE) AS RDCNT
+ FROM COMTNWEBLOG b
+ WHERE NOT EXISTS (SELECT c.OCCRRNC_DE
+ FROM COMTSWEBLOGSUMMARY c
+ WHERE c.OCCRRNC_DE = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ )
+ AND TO_CHAR(b.OCCRRNC_DE, 'YYYYMMDD') = TO_CHAR((SYSDATE - 1), 'YYYYMMDD')
+ GROUP BY TO_CHAR(b.OCCRRNC_DE,'YYYYMMDD')
+ , b.URL
+ ]]>
+
+ </insert>
+
+ <!-- 웹 로그 6개월전 로그 삭제 -->
+ <delete id="logDeleteWebLogSummary">
+
+ <![CDATA[
+ DELETE FROM COMTNWEBLOG
+ WHERE TO_CHAR(OCCRRNC_DE, 'YYYY-MM-DD') < TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYY-MM-DD')
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/wlg/EgovWebLog_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.11.07 이정은 날짜로 검색 시 시분초 추가
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginLog">
+
+ <!-- 로그인로그 맵 -->
+ <resultMap id="LoginLogVO" type="egovframework.com.sym.log.clg.service.LoginLog">
+ <result property="logId" column="LOG_ID"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ <result property="loginMthd" column="CONECT_MTHD"/>
+ <result property="loginIp" column="CONECT_IP"/>
+ <result property="loginId" column="CONECT_ID"/>
+ <result property="loginNm" column="LOGIN_NM"/>
+ </resultMap>
+
+ <!-- 로그인 로그 등록 -->
+ <insert id="LoginLog.logInsertLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog">
+
+ <![CDATA[
+ INSERT INTO COMTNLOGINLOG
+ ( LOG_ID
+ , CONECT_MTHD
+ , CONECT_ID
+ , CONECT_IP
+ , ERROR_OCCRRNC_AT
+ , ERROR_CODE
+ , CREAT_DT )
+ VALUES ( #{logId}
+ , #{loginMthd}
+ , #{loginId}
+ , #{loginIp}
+ , #{errOccrrAt}
+ , #{errorCode}
+ , SYSDATETIME)
+ ]]>
+
+ </insert>
+
+ <!-- 로그인 로그 상세 조회 -->
+ <select id="LoginLog.selectLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ a.LOG_ID = #{logId}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 목록 조회 -->
+ <select id="LoginLog.selectLoginLogInf" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATETIME(#{searchBgnDe} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATETIME(#{searchEndDe} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.CREAT_DT DESC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 총건수 -->
+ <select id="LoginLog.selectLoginLogInfCnt" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.LOG_ID) as cnt
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATETIME(#{searchBgnDe} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATETIME(#{searchEndDe} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_maria.xml (revision 7)
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.11.07 이정은 날짜로 검색 시 시분초 추가
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginLog">
+
+ <!-- 로그인로그 맵 -->
+ <resultMap id="LoginLogVO" type="egovframework.com.sym.log.clg.service.LoginLog">
+ <result property="logId" column="LOG_ID"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ <result property="loginMthd" column="CONECT_MTHD"/>
+ <result property="loginIp" column="CONECT_IP"/>
+ <result property="loginId" column="CONECT_ID"/>
+ <result property="loginNm" column="LOGIN_NM"/>
+ </resultMap>
+
+ <!-- 로그인 로그 등록 -->
+ <insert id="logInsertLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog">
+ <![CDATA[
+ INSERT INTO COMTNLOGINLOG
+ ( LOG_ID
+ , CONECT_MTHD
+ , CONECT_ID
+ , CONECT_IP
+ , ERROR_OCCRRNC_AT
+ , ERROR_CODE
+ , CREAT_DT )
+ VALUES ( #{logId}
+ , #{loginMthd}
+ , #{loginId}
+ , #{loginIp}
+ , #{errOccrrAt}
+ , #{errorCode}
+ , sysdate())
+ ]]>
+
+ </insert>
+
+ <!-- 로그인 로그 상세 조회 -->
+ <select id="selectLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ a.LOG_ID = #{logId}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 목록 조회 -->
+ <select id="selectLoginLogInf" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.CREAT_DT DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 로그인 로그 총건수 -->
+ <select id="selectLoginLogInfCnt" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.LOG_ID) as cnt
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_oracle.xml (revision 7)
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.11.07 이정은 날짜로 검색 시 시분초 추가
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginLog">
+ <!-- 로그인로그 맵 -->
+ <resultMap id="LoginLogVO" type="egovframework.com.sym.log.clg.service.LoginLog">
+ <result property="logId" column="LOG_ID"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ <result property="loginMthd" column="CONECT_MTHD"/>
+ <result property="loginIp" column="CONECT_IP"/>
+ <result property="loginId" column="CONECT_ID"/>
+ <result property="loginNm" column="LOGIN_NM"/>
+ </resultMap>
+
+ <!-- 로그인 로그 등록 -->
+ <insert id="logInsertLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog">
+ <![CDATA[
+ INSERT INTO COMTNLOGINLOG
+ ( LOG_ID
+ , CONECT_MTHD
+ , CONECT_ID
+ , CONECT_IP
+ , ERROR_OCCRRNC_AT
+ , ERROR_CODE
+ , CREAT_DT )
+ VALUES ( #{logId}
+ , #{loginMthd}
+ , #{loginId}
+ , #{loginIp}
+ , #{errOccrrAt}
+ , #{errorCode}
+ , sysdate)
+ ]]>
+ </insert>
+
+ <!-- 로그인 로그 상세 조회 -->
+ <select id="selectLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ a.LOG_ID = #{logId}
+ ]]>
+ </select>
+
+ <!-- 로그인 로그 목록 조회 -->
+ <select id="selectLoginLogInf" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+ <if test="searchWrd != null and searchWrd != ''"><![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"><![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[ ORDER BY a.CREAT_DT DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 로그인 로그 총건수 -->
+ <select id="selectLoginLogInfCnt" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.LOG_ID) as cnt
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_altibase.xml (revision 7)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.11.07 이정은 날짜로 검색 시 시분초 추가
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginLog">
+
+ <!-- 로그인로그 맵 -->
+ <resultMap id="LoginLogVO" type="egovframework.com.sym.log.clg.service.LoginLog">
+ <result property="logId" column="LOG_ID"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ <result property="loginMthd" column="CONECT_MTHD"/>
+ <result property="loginIp" column="CONECT_IP"/>
+ <result property="loginId" column="CONECT_ID"/>
+ <result property="loginNm" column="LOGIN_NM"/>
+ </resultMap>
+
+ <!-- 로그인 로그 등록 -->
+ <insert id="LoginLog.logInsertLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog">
+
+ <![CDATA[
+ INSERT INTO COMTNLOGINLOG
+ ( LOG_ID
+ , CONECT_MTHD
+ , CONECT_ID
+ , CONECT_IP
+ , ERROR_OCCRRNC_AT
+ , ERROR_CODE
+ , CREAT_DT )
+ VALUES ( #{logId}
+ , #{loginMthd}
+ , #{loginId}
+ , #{loginIp}
+ , #{errOccrrAt}
+ , #{errorCode}
+ , sysdate)
+ ]]>
+ </insert>
+
+ <!-- 로그인 로그 상세 조회 -->
+ <select id="LoginLog.selectLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ a.LOG_ID = #{logId}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 목록 조회 -->
+ <select id="LoginLog.selectLoginLogInf" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.CREAT_DT DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} ]]>
+
+ </select>
+
+ <!-- 로그인 로그 총건수 -->
+ <select id="LoginLog.selectLoginLogInfCnt" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.LOG_ID) as cnt
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_tibero.xml (revision 7)
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.11.07 이정은 날짜로 검색 시 시분초 추가
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginLog">
+
+ <!-- 로그인로그 맵 -->
+ <resultMap id="LoginLogVO" type="egovframework.com.sym.log.clg.service.LoginLog">
+ <result property="logId" column="LOG_ID"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ <result property="loginMthd" column="CONECT_MTHD"/>
+ <result property="loginIp" column="CONECT_IP"/>
+ <result property="loginId" column="CONECT_ID"/>
+ <result property="loginNm" column="LOGIN_NM"/>
+ </resultMap>
+
+ <!-- 로그인 로그 등록 -->
+ <insert id="LoginLog.logInsertLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog">
+
+ <![CDATA[
+ INSERT INTO COMTNLOGINLOG
+ ( LOG_ID
+ , CONECT_MTHD
+ , CONECT_ID
+ , CONECT_IP
+ , ERROR_OCCRRNC_AT
+ , ERROR_CODE
+ , CREAT_DT )
+ VALUES ( #{logId}
+ , #{loginMthd}
+ , #{loginId}
+ , #{loginIp}
+ , #{errOccrrAt}
+ , #{errorCode}
+ , sysdate)
+ ]]>
+
+ </insert>
+
+ <!-- 로그인 로그 상세 조회 -->
+ <select id="LoginLog.selectLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ a.LOG_ID = #{logId}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 목록 조회 -->
+ <select id="LoginLog.selectLoginLogInf" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+
+ <![CDATA[
+ ORDER BY a.CREAT_DT DESC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 총건수 -->
+ <select id="LoginLog.selectLoginLogInfCnt" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.LOG_ID) as cnt
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
+ AND TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_postgres.xml (revision 7)
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.11.07 이정은 날짜로 검색 시 시분초 추가
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginLog">
+
+ <!-- 로그인로그 맵 -->
+ <resultMap id="LoginLogVO" type="egovframework.com.sym.log.clg.service.LoginLog">
+ <result property="logId" column="LOG_ID"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ <result property="loginMthd" column="CONECT_MTHD"/>
+ <result property="loginIp" column="CONECT_IP"/>
+ <result property="loginId" column="CONECT_ID"/>
+ <result property="loginNm" column="LOGIN_NM"/>
+ </resultMap>
+
+ <!-- 로그인 로그 등록 -->
+ <insert id="logInsertLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog">
+ <![CDATA[
+ INSERT INTO COMTNLOGINLOG
+ ( LOG_ID
+ , CONECT_MTHD
+ , CONECT_ID
+ , CONECT_IP
+ , ERROR_OCCRRNC_AT
+ , ERROR_CODE
+ , CREAT_DT )
+ VALUES ( #{logId}
+ , #{loginMthd}
+ , #{loginId}
+ , #{loginIp}
+ , #{errOccrrAt}
+ , #{errorCode}
+ , NOW())
+ ]]>
+
+ </insert>
+
+ <!-- 로그인 로그 상세 조회 -->
+ <select id="selectLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ a.LOG_ID = #{logId}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 목록 조회 -->
+ <select id="selectLoginLogInf" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_TIMESTAMP(CONCAT(#{searchBgnDe},' 00:00:00'), 'YYYY-mm-dd HH24:MI:SS')
+ AND TO_TIMESTAMP(CONCAT(#{searchEndDe},' 23:59:59'), 'YYYY-mm-dd HH24:MI:SS') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.CREAT_DT DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 로그인 로그 총건수 -->
+ <select id="selectLoginLogInfCnt" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.LOG_ID) as cnt
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN TO_TIMESTAMP(CONCAT(#{searchBgnDe},' 00:00:00'), 'YYYY-mm-dd HH24:MI:SS')
+ AND TO_TIMESTAMP(CONCAT(#{searchEndDe},' 23:59:59'), 'YYYY-mm-dd HH24:MI:SS') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_mysql.xml (revision 7)
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:41 KST 2016
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2017.11.07 이정은 날짜로 검색 시 시분초 추가
+ -->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginLog">
+
+ <!-- 로그인로그 맵 -->
+ <resultMap id="LoginLogVO" type="egovframework.com.sym.log.clg.service.LoginLog">
+ <result property="logId" column="LOG_ID"/>
+ <result property="creatDt" column="CREAT_DT"/>
+ <result property="loginMthd" column="CONECT_MTHD"/>
+ <result property="loginIp" column="CONECT_IP"/>
+ <result property="loginId" column="CONECT_ID"/>
+ <result property="loginNm" column="LOGIN_NM"/>
+ </resultMap>
+
+ <!-- 로그인 로그 등록 -->
+ <insert id="logInsertLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog">
+ <![CDATA[
+ INSERT INTO COMTNLOGINLOG
+ ( LOG_ID
+ , CONECT_MTHD
+ , CONECT_ID
+ , CONECT_IP
+ , ERROR_OCCRRNC_AT
+ , ERROR_CODE
+ , CREAT_DT )
+ VALUES ( #{logId}
+ , #{loginMthd}
+ , #{loginId}
+ , #{loginIp}
+ , #{errOccrrAt}
+ , #{errorCode}
+ , sysdate())
+ ]]>
+
+ </insert>
+
+ <!-- 로그인 로그 상세 조회 -->
+ <select id="selectLoginLog" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ a.LOG_ID = #{logId}
+ ]]>
+
+ </select>
+
+ <!-- 로그인 로그 목록 조회 -->
+ <select id="selectLoginLogInf" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultMap="LoginLogVO">
+
+ <![CDATA[
+ SELECT
+ a.LOG_ID
+ , a.CREAT_DT
+ , a.CONECT_MTHD
+ , a.CONECT_IP
+ , a.CONECT_ID
+ , b.USER_NM AS LOGIN_NM
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ <![CDATA[ ORDER BY a.CREAT_DT DESC ]]>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 로그인 로그 총건수 -->
+ <select id="selectLoginLogInfCnt" parameterType="egovframework.com.sym.log.clg.service.LoginLog" resultType="java.lang.Integer">
+
+ <![CDATA[
+ SELECT COUNT(a.LOG_ID) as cnt
+ FROM
+ COMTNLOGINLOG a
+ LEFT OUTER JOIN COMVNUSERMASTER b
+ ON a.CONECT_ID = b.ESNTL_ID
+ WHERE
+ 1 = 1
+ ]]>
+
+ <if test="searchWrd != null and searchWrd != ''"> <![CDATA[ AND
+ a.CONECT_MTHD LIKE CONCAT ('%', #{searchWrd},'%') ]]>
+ </if>
+ <if test="searchBgnDe != null and searchBgnDe != ''"> <![CDATA[ AND
+ a.CREAT_DT BETWEEN STR_TO_DATE(CONCAT(#{searchBgnDe},' 00:00:00'), '%Y-%m-%d %H:%i:%s')
+ AND STR_TO_DATE(CONCAT(#{searchEndDe},' 23:59:59'), '%Y-%m-%d %H:%i:%s') ]]>
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/log/clg/EgovLoginLog_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BkmkMenuManageDAO">
+
+ <resultMap id="BkmkInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_ID"/>
+ <result property="userId" column="EMPLYR_ID"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="progrmStrePath" column="PROGRM_STRE_PATH"/>
+ </resultMap>
+
+ <resultMap id="MenuInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuDc" column="MENU_DC"/>
+ </resultMap>
+
+ <resultMap id="menuManage" type="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="upperMenuId" column="UPPER_MENU_NO"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImagePath" column="RELATE_IMAGE_PATH"/>
+ <result property="relateImageNm" column="RELATE_IMAGE_NM"/>
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ </resultMap>
+
+ <select id="selectBkmkPreview" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="menuManage">
+
+ SELECT
+ MENU_NO, MENU_ORDR, MENU_NM, UPPER_MENU_NO,MENU_DC, RELATE_IMAGE_PATH, RELATE_IMAGE_NM,
+ PROGRM_FILE_NM
+ FROM
+ COMTNMENUINFO , (SELECT MENU_ID
+ FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId} )b
+ WHERE
+ MENU_NO = b.MENU_ID
+
+ </select>
+
+ <select id="selectBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </select>
+
+ <insert id="insertBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ INSERT INTO COMTNBKMKMENUMANAGERESULT
+ ( MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ )
+ VALUES
+ ( #{menuId}, #{userId}, #{menuNm}, #{progrmStrePath}
+ )
+
+ </insert>
+
+ <delete id="deleteBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ DELETE FROM COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </delete>
+
+ <select id="selectBkmkMenuManageList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="BkmkInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuManageListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(MENU_ID)
+ from COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectBkmkMenuList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="MenuInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ d.MENU_NO, d.MENU_NM, d.MENU_DC
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(d.MENU_NM)
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectUrl" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage" resultType="java.lang.String">
+
+ SELECT a.URL
+ FROM COMTNPROGRMLIST a, (SELECT MENU_NO , PROGRM_FILE_NM
+ FROM COMTNMENUINFO WHERE MENU_NO = #{menuId} )b
+ WHERE
+ a.PROGRM_FILE_NM = b.PROGRM_FILE_NM
+
+
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BkmkMenuManageDAO">
+
+ <resultMap id="BkmkInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_ID"/>
+ <result property="userId" column="EMPLYR_ID"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="progrmStrePath" column="PROGRM_STRE_PATH"/>
+ </resultMap>
+
+ <resultMap id="MenuInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuDc" column="MENU_DC"/>
+ </resultMap>
+
+ <resultMap id="menuManage" type="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="upperMenuId" column="UPPER_MENU_NO"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImagePath" column="RELATE_IMAGE_PATH"/>
+ <result property="relateImageNm" column="RELATE_IMAGE_NM"/>
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ </resultMap>
+
+ <select id="selectBkmkPreview" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="menuManage">
+
+ SELECT
+ MENU_NO, MENU_ORDR, MENU_NM, UPPER_MENU_NO,MENU_DC, RELATE_IMAGE_PATH, RELATE_IMAGE_NM,
+ PROGRM_FILE_NM
+ FROM
+ COMTNMENUINFO , (SELECT MENU_ID
+ FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId} )b
+ WHERE
+ MENU_NO = b.MENU_ID
+
+ </select>
+
+ <select id="selectBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </select>
+
+ <insert id="insertBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ INSERT INTO COMTNBKMKMENUMANAGERESULT
+ ( MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ )
+ VALUES
+ ( #{menuId}, #{userId}, #{menuNm}, #{progrmStrePath}
+ )
+
+ </insert>
+
+ <delete id="deleteBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ DELETE FROM COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </delete>
+
+ <select id="selectBkmkMenuManageList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="BkmkInfs">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+
+ ORDER BY MENU_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBkmkMenuManageListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="int">
+
+ select count(MENU_ID)
+ from COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectBkmkMenuList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="MenuInfs">
+
+ SELECT
+ d.MENU_NO, d.MENU_NM, d.MENU_DC
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+
+ ORDER BY MENU_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBkmkMenuListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="int">
+
+ select count(d.MENU_NO)
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectUrl" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage" resultType="String">
+
+ SELECT a.URL
+ FROM COMTNPROGRMLIST a, (SELECT MENU_NO , PROGRM_FILE_NM
+ FROM COMTNMENUINFO WHERE MENU_NO = #{menuId} )b
+ WHERE
+ a.PROGRM_FILE_NM = b.PROGRM_FILE_NM
+
+
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BkmkMenuManageDAO">
+
+ <resultMap id="BkmkInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_ID"/>
+ <result property="userId" column="EMPLYR_ID"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="progrmStrePath" column="PROGRM_STRE_PATH"/>
+ </resultMap>
+
+ <resultMap id="MenuInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuDc" column="MENU_DC"/>
+ </resultMap>
+
+ <resultMap id="menuManage" type="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="upperMenuId" column="UPPER_MENU_NO"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImagePath" column="RELATE_IMAGE_PATH"/>
+ <result property="relateImageNm" column="RELATE_IMAGE_NM"/>
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ </resultMap>
+
+ <select id="selectBkmkPreview" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="menuManage">
+
+ SELECT
+ MENU_NO, MENU_ORDR, MENU_NM, UPPER_MENU_NO,MENU_DC, RELATE_IMAGE_PATH, RELATE_IMAGE_NM,
+ PROGRM_FILE_NM
+ FROM
+ COMTNMENUINFO , (SELECT MENU_ID
+ FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId} )b
+ WHERE
+ MENU_NO = b.MENU_ID
+
+ </select>
+
+ <select id="selectBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </select>
+
+ <insert id="insertBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ INSERT INTO COMTNBKMKMENUMANAGERESULT
+ ( MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ )
+ VALUES
+ ( #{menuId}, #{userId}, #{menuNm}, #{progrmStrePath}
+ )
+
+ </insert>
+
+ <delete id="deleteBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ DELETE FROM COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </delete>
+
+ <select id="selectBkmkMenuManageList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="BkmkInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuManageListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(MENU_ID)
+ from COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectBkmkMenuList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="MenuInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ d.MENU_NO, d.MENU_NM, d.MENU_DC
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(d.MENU_NM)
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectUrl" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage" resultType="java.lang.String">
+
+ SELECT a.URL
+ FROM COMTNPROGRMLIST a, (SELECT MENU_NO , PROGRM_FILE_NM
+ FROM COMTNMENUINFO WHERE MENU_NO = #{menuId} )b
+ WHERE
+ a.PROGRM_FILE_NM = b.PROGRM_FILE_NM
+
+
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BkmkMenuManageDAO">
+
+ <resultMap id="BkmkInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_ID"/>
+ <result property="userId" column="EMPLYR_ID"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="progrmStrePath" column="PROGRM_STRE_PATH"/>
+ </resultMap>
+
+ <resultMap id="MenuInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuDc" column="MENU_DC"/>
+ </resultMap>
+
+ <resultMap id="menuManage" type="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="upperMenuId" column="UPPER_MENU_NO"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImagePath" column="RELATE_IMAGE_PATH"/>
+ <result property="relateImageNm" column="RELATE_IMAGE_NM"/>
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ </resultMap>
+
+ <select id="selectBkmkPreview" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="menuManage">
+
+ SELECT
+ MENU_NO, MENU_ORDR, MENU_NM, UPPER_MENU_NO,MENU_DC, RELATE_IMAGE_PATH, RELATE_IMAGE_NM,
+ PROGRM_FILE_NM
+ FROM
+ COMTNMENUINFO , (SELECT MENU_ID
+ FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId} )b
+ WHERE
+ MENU_NO = b.MENU_ID
+
+ </select>
+
+ <select id="selectBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </select>
+
+ <insert id="insertBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ INSERT INTO COMTNBKMKMENUMANAGERESULT
+ ( MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ )
+ VALUES
+ ( #{menuId}, #{userId}, #{menuNm}, #{progrmStrePath}
+ )
+
+ </insert>
+
+ <delete id="deleteBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ DELETE FROM COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </delete>
+
+ <select id="selectBkmkMenuManageList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="BkmkInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuManageListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(MENU_ID)
+ from COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectBkmkMenuList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="MenuInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ d.MENU_NO, d.MENU_NM, d.MENU_DC
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(d.MENU_NM)
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectUrl" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage" resultType="java.lang.String">
+
+ SELECT a.URL
+ FROM COMTNPROGRMLIST a, (SELECT MENU_NO , PROGRM_FILE_NM
+ FROM COMTNMENUINFO WHERE MENU_NO = #{menuId} )b
+ WHERE
+ a.PROGRM_FILE_NM = b.PROGRM_FILE_NM
+
+
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BkmkMenuManageDAO">
+
+ <resultMap id="BkmkInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_ID"/>
+ <result property="userId" column="EMPLYR_ID"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="progrmStrePath" column="PROGRM_STRE_PATH"/>
+ </resultMap>
+
+ <resultMap id="MenuInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuDc" column="MENU_DC"/>
+ </resultMap>
+
+ <resultMap id="menuManage" type="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="upperMenuId" column="UPPER_MENU_NO"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImagePath" column="RELATE_IMAGE_PATH"/>
+ <result property="relateImageNm" column="RELATE_IMAGE_NM"/>
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ </resultMap>
+
+ <select id="selectBkmkPreview" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="menuManage">
+
+ SELECT
+ MENU_NO, MENU_ORDR, MENU_NM, UPPER_MENU_NO,MENU_DC, RELATE_IMAGE_PATH, RELATE_IMAGE_NM,
+ PROGRM_FILE_NM
+ FROM
+ COMTNMENUINFO , (SELECT MENU_ID
+ FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId} )b
+ WHERE
+ MENU_NO = b.MENU_ID
+
+ </select>
+
+ <select id="selectBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </select>
+
+ <insert id="insertBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ INSERT INTO COMTNBKMKMENUMANAGERESULT
+ ( MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ )
+ VALUES
+ ( #{menuId}, #{userId}, #{menuNm}, #{progrmStrePath}
+ )
+
+ </insert>
+
+ <delete id="deleteBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ DELETE FROM COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </delete>
+
+ <select id="selectBkmkMenuManageList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="BkmkInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuManageListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(MENU_ID)
+ from COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectBkmkMenuList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="MenuInfs">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+
+
+ SELECT
+ d.MENU_NO, d.MENU_NM, d.MENU_DC
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ <![CDATA[
+ ORDER BY MENU_NM
+
+
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectBkmkMenuListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="java.lang.Integer">
+
+ select count(d.MENU_NM)
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ d.MENU_NM LIKE '%'|| #{searchWrd}||'%'
+ </if>
+
+ </select>
+
+ <select id="selectUrl" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage" resultType="java.lang.String">
+
+ SELECT a.URL
+ FROM COMTNPROGRMLIST a, (SELECT MENU_NO , PROGRM_FILE_NM
+ FROM COMTNMENUINFO WHERE MENU_NO = #{menuId} )b
+ WHERE
+ a.PROGRM_FILE_NM = b.PROGRM_FILE_NM
+
+
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BkmkMenuManageDAO">
+
+ <resultMap id="BkmkInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_ID"/>
+ <result property="userId" column="EMPLYR_ID"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="progrmStrePath" column="PROGRM_STRE_PATH"/>
+ </resultMap>
+
+ <resultMap id="MenuInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuDc" column="MENU_DC"/>
+ </resultMap>
+
+ <resultMap id="menuManage" type="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="upperMenuId" column="UPPER_MENU_NO"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImagePath" column="RELATE_IMAGE_PATH"/>
+ <result property="relateImageNm" column="RELATE_IMAGE_NM"/>
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ </resultMap>
+
+ <select id="selectBkmkPreview" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="menuManage">
+
+ SELECT
+ MENU_NO, MENU_ORDR, MENU_NM, UPPER_MENU_NO,MENU_DC, RELATE_IMAGE_PATH, RELATE_IMAGE_NM,
+ PROGRM_FILE_NM
+ FROM
+ COMTNMENUINFO , (SELECT MENU_ID
+ FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId} )b
+ WHERE
+ MENU_NO = b.MENU_ID
+
+ </select>
+
+ <select id="selectBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </select>
+
+ <insert id="insertBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ INSERT INTO COMTNBKMKMENUMANAGERESULT
+ ( MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ )
+ VALUES
+ ( #{menuId}::NUMERIC, #{userId}, #{menuNm}, #{progrmStrePath}
+ )
+
+ </insert>
+
+ <delete id="deleteBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ DELETE FROM COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID::varchar = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </delete>
+
+ <select id="selectBkmkMenuManageList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="BkmkInfs">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+
+ ORDER BY MENU_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBkmkMenuManageListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="int">
+
+ select count(MENU_ID)
+ from COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectBkmkMenuList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="MenuInfs">
+
+ SELECT
+ d.MENU_NO, d.MENU_NM, d.MENU_DC
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+
+ ORDER BY MENU_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBkmkMenuListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="int">
+
+ select count(d.MENU_NO)
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectUrl" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage" resultType="String">
+
+ SELECT a.URL
+ FROM COMTNPROGRMLIST a, (SELECT MENU_NO , PROGRM_FILE_NM
+ FROM COMTNMENUINFO WHERE MENU_NO::VARCHAR = #{menuId} ) b
+ WHERE
+ a.PROGRM_FILE_NM = b.PROGRM_FILE_NM
+
+
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="BkmkMenuManageDAO">
+
+ <resultMap id="BkmkInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_ID"/>
+ <result property="userId" column="EMPLYR_ID"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="progrmStrePath" column="PROGRM_STRE_PATH"/>
+ </resultMap>
+
+ <resultMap id="MenuInfs" type="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+ <result property="menuId" column="MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuDc" column="MENU_DC"/>
+ </resultMap>
+
+ <resultMap id="menuManage" type="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="upperMenuId" column="UPPER_MENU_NO"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImagePath" column="RELATE_IMAGE_PATH"/>
+ <result property="relateImageNm" column="RELATE_IMAGE_NM"/>
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ </resultMap>
+
+ <select id="selectBkmkPreview" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="menuManage">
+
+ SELECT
+ MENU_NO, MENU_ORDR, MENU_NM, UPPER_MENU_NO,MENU_DC, RELATE_IMAGE_PATH, RELATE_IMAGE_NM,
+ PROGRM_FILE_NM
+ FROM
+ COMTNMENUINFO , (SELECT MENU_ID
+ FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId} )b
+ WHERE
+ MENU_NO = b.MENU_ID
+
+ </select>
+
+ <select id="selectBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </select>
+
+ <insert id="insertBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ INSERT INTO COMTNBKMKMENUMANAGERESULT
+ ( MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ )
+ VALUES
+ ( #{menuId}, #{userId}, #{menuNm}, #{progrmStrePath}
+ )
+
+ </insert>
+
+ <delete id="deleteBkmkMenuManage" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage">
+
+ DELETE FROM COMTNBKMKMENUMANAGERESULT
+ WHERE
+ MENU_ID = #{menuId} AND EMPLYR_ID = #{userId}
+
+ </delete>
+
+ <select id="selectBkmkMenuManageList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="BkmkInfs">
+
+ SELECT
+ MENU_ID , EMPLYR_ID, MENU_NM, PROGRM_STRE_PATH
+ FROM
+ COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+
+ ORDER BY MENU_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBkmkMenuManageListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="int">
+
+ select count(MENU_ID)
+ from COMTNBKMKMENUMANAGERESULT
+ WHERE
+ EMPLYR_ID = #{userId}
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectBkmkMenuList" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultMap="MenuInfs">
+
+ SELECT
+ d.MENU_NO, d.MENU_NM, d.MENU_DC
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+
+ ORDER BY MENU_NM
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectBkmkMenuListCnt" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManageVO" resultType="int">
+
+ select count(d.MENU_NO)
+ FROM
+ COMTNMENUINFO d, (SELECT a.MENU_NO FROM COMTNMENUCREATDTLS a, COMTNEMPLYRSCRTYESTBS b , COMVNUSERMASTER c
+ WHERE a.AUTHOR_CODE = b.AUTHOR_CODE AND b.SCRTY_DTRMN_TRGET_ID = c.ESNTL_ID AND c.USER_ID = #{userId})temp
+ WHERE
+ d.PROGRM_FILE_NM != 'dir'
+ AND d.MENU_NO = temp.MENU_NO
+ AND d.menu_no not in (SELECT MENU_ID FROM COMTNBKMKMENUMANAGERESULT WHERE EMPLYR_ID = #{userId})
+
+ <if test="searchCnd == 0">AND
+ MENU_NM LIKE CONCAT ('%', #{searchWrd},'%')
+ </if>
+
+ </select>
+
+ <select id="selectUrl" parameterType="egovframework.com.sym.mnu.bmm.service.BkmkMenuManage" resultType="String">
+
+ SELECT a.URL
+ FROM COMTNPROGRMLIST a, (SELECT MENU_NO , PROGRM_FILE_NM
+ FROM COMTNMENUINFO WHERE MENU_NO = #{menuId} )b
+ WHERE
+ a.PROGRM_FILE_NM = b.PROGRM_FILE_NM
+
+
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/bmm/EgovBkmkMenuManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_maria.xml (revision 7)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT AUTHOR_CODE AS authorCode,
+ AUTHOR_NM AS authorNm,
+ AUTHOR_DC AS authorDc,
+ AUTHOR_CREAT_DE AS authorCreatDe,
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS chkYeoBu
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS totcnt
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <select id="selectMenuCreatList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT count(B.MENU_NO)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.MENU_NO = A.MENU_NO
+ AND B.AUTHOR_CODE = #{authorCode}) AS chkYeoBu
+ FROM COMTNMENUINFO A
+ WHERE A.MENU_NO > 0
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <insert id="insertMenuCreat_S">
+
+ INSERT INTO COMTNMENUCREATDTLS ( AUTHOR_CODE ,MENU_NO )
+ VALUES ( #{authorCode}, #{menuNo} )
+
+ </insert>
+
+ <select id="selectMenuCreatCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS totcnt
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE = #{authorCode}
+
+ </select>
+
+ <delete id="updateMenuCreat_S">
+
+ UPDATE COMTNMENUCREATDTLS
+ SET MAPNG_CREAT_ID=#{mapCreatId}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <delete id="deleteMenuCreat_S">
+
+ DELETE FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthorByUsr" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO">
+
+ select AUTHOR_CODE AS authorCode from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+ <select id="selectUsrByPk" parameterType="comDefaultVO" resultType="int">
+
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_postgres.xml (revision 7)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT AUTHOR_CODE AS "authorCode",
+ AUTHOR_NM AS "authorNm",
+ AUTHOR_DC AS "authorDc",
+ AUTHOR_CREAT_DE AS "authorCreatDe",
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu"
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <select id="selectMenuCreatList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS "menuNo"
+ , A.MENU_ORDR AS "menuOrdr"
+ , A.MENU_NM AS "menuNm"
+ , A.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT count(B.MENU_NO)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.MENU_NO = A.MENU_NO
+ AND B.AUTHOR_CODE = #{authorCode}) AS "chkYeoBu"
+ FROM COMTNMENUINFO A
+ WHERE A.MENU_NO > 0
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <insert id="insertMenuCreat_S">
+
+ INSERT INTO COMTNMENUCREATDTLS ( AUTHOR_CODE ,MENU_NO )
+ VALUES ( #{authorCode}, #{menuNo} )
+
+ </insert>
+
+ <select id="selectMenuCreatCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE = #{authorCode}
+
+ </select>
+
+ <delete id="updateMenuCreat_S">
+
+ UPDATE COMTNMENUCREATDTLS
+ SET MAPNG_CREAT_ID=#{mapCreatId}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <delete id="deleteMenuCreat_S">
+
+ DELETE FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthorByUsr" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO">
+
+ select AUTHOR_CODE AS "authorCode" from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+ <select id="selectUsrByPk" parameterType="comDefaultVO" resultType="int">
+
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_tibero.xml (revision 7)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatSiteMapList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = #{authorCode}
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectSiteMapByUser" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT Z.URL FROM COMTNPROGRMLIST Z WHERE A.PROGRM_FILE_NM = Z.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUINFO A, COMTNMENUCREATDTLS B, COMTNEMPLYRSCRTYESTBS C, COMVNUSERMASTER D
+ WHERE A.MENU_NO > 0
+ AND A.MENU_NO = B.MENU_NO
+ AND B.AUTHOR_CODE = C.AUTHOR_CODE
+ AND C.SCRTY_DTRMN_TRGET_ID = D.ESNTL_ID
+ AND D.USER_ID = #{creatPersonId}
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <select id="selectMenuCreatSiteMapURL_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.PROGRM_FILE_NM AS "progrmFileNm",
+ B.PROGRM_STRE_PATH AS "progrmStrePath",
+ B.PROGRM_KOREAN_NM AS "progrmKoreanNm",
+ B.URL AS "URL"
+ FROM COMTNMENUINFO A, COMTNPROGRMLIST B
+ WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
+ AND A.MENU_NO = #{menuNo}
+
+ </select>
+
+ <insert id="insertSiteMap_S">
+
+ INSERT INTO COMTNSITEMAP ( MAPNG_CREAT_ID, CREATR_ID, MAPNG_FILE_NM, MAPNG_FILE_PATH )
+ VALUES ( #{mapCreatId}, #{creatPersonId}, #{bndeFileNm}, #{bndeFilePath})
+
+ </insert>
+
+ <select id="selectSiteMapCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="int">
+
+ SELECT COUNT(MAPNG_CREAT_ID) AS "totcnt"
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID like CONCAT(#{mapCreatId}, '%')
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT *
+ FROM
+ (SELECT rownum rn, TB.*
+ FROM
+ (SELECT AUTHOR_CODE AS "authorCode",
+ AUTHOR_NM AS "authorNm",
+ AUTHOR_DC AS "authorDc",
+ AUTHOR_CREAT_DE AS "authorCreatDe",
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu"
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like '%'||#{searchKeyword}||'%') TB
+
+ ) Z
+ WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectMenuCreatList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS "menuNo"
+ , A.MENU_ORDR AS "menuOrdr"
+ , A.MENU_NM AS "menuNm"
+ , A.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT count(B.MENU_NO)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.MENU_NO = A.MENU_NO
+ AND B.AUTHOR_CODE = #{authorCode}) AS "chkYeoBu"
+ FROM COMTNMENUINFO A
+ WHERE A.MENU_NO > 0
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <insert id="insertMenuCreat_S">
+
+ INSERT INTO COMTNMENUCREATDTLS ( AUTHOR_CODE ,MENU_NO )
+ VALUES ( #{authorCode}, #{menuNo} )
+
+ </insert>
+
+ <select id="selectMenuCreatCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE = #{authorCode}
+
+ </select>
+
+ <delete id="updateMenuCreat_S">
+
+ UPDATE COMTNMENUCREATDTLS
+ SET MAPNG_CREAT_ID=#{mapCreatId}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <delete id="deleteMenuCreat_S">
+
+ DELETE FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthorByUsr" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO">
+
+ select AUTHOR_CODE AS "authorCode" from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+ <select id="selectUsrByPk" parameterType="comDefaultVO" resultType="int">
+
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_postgres.xml (revision 7)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatSiteMapList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = #{authorCode}
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectSiteMapByUser" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS "menuNo"
+ , A.MENU_ORDR AS "menuOrdr"
+ , A.MENU_NM AS "menuNm"
+ , A.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT Z.URL FROM COMTNPROGRMLIST Z WHERE A.PROGRM_FILE_NM = Z.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUINFO A, COMTNMENUCREATDTLS B, COMTNEMPLYRSCRTYESTBS C, COMVNUSERMASTER D
+ WHERE A.MENU_NO > 0
+ AND A.MENU_NO = B.MENU_NO
+ AND B.AUTHOR_CODE = C.AUTHOR_CODE
+ AND C.SCRTY_DTRMN_TRGET_ID = D.ESNTL_ID
+ AND D.USER_ID = #{creatPersonId}
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <select id="selectMenuCreatSiteMapURL_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.PROGRM_FILE_NM AS "progrmFileNm",
+ B.PROGRM_STRE_PATH AS "progrmStrePath",
+ B.PROGRM_KOREAN_NM AS "progrmKoreanNm",
+ B.URL AS URL
+ FROM COMTNMENUINFO A, COMTNPROGRMLIST B
+ WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
+ AND A.MENU_NO = #{menuNo}
+
+ </select>
+
+ <insert id="insertSiteMap_S">
+
+ INSERT INTO COMTNSITEMAP ( MAPNG_CREAT_ID, CREATR_ID, MAPNG_FILE_NM, MAPNG_FILE_PATH )
+ VALUES ( #{mapCreatId}, #{creatPersonId}, #{bndeFileNm}, #{bndeFilePath})
+
+ </insert>
+
+ <select id="selectSiteMapCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="int">
+
+ SELECT COUNT(MAPNG_CREAT_ID) AS totcnt
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID like CONCAT(#{mapCreatId}, '%')
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_oracle.xml (revision 7)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT *
+ FROM
+ (SELECT rownum rn, TB.*
+ FROM
+ (SELECT AUTHOR_CODE AS "authorCode",
+ AUTHOR_NM AS "authorNm",
+ AUTHOR_DC AS "authorDc",
+ AUTHOR_CREAT_DE AS "authorCreatDe",
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu"
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like '%'||#{searchKeyword}||'%') TB
+
+ )
+ WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectMenuCreatList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS "menuNo"
+ , A.MENU_ORDR AS "menuOrdr"
+ , A.MENU_NM AS "menuNm"
+ , A.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT count(B.MENU_NO)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.MENU_NO = A.MENU_NO
+ AND B.AUTHOR_CODE = #{authorCode}) AS "chkYeoBu"
+ FROM COMTNMENUINFO A
+ WHERE A.MENU_NO > 0
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <insert id="insertMenuCreat_S">
+
+ INSERT INTO COMTNMENUCREATDTLS ( AUTHOR_CODE ,MENU_NO )
+ VALUES ( #{authorCode}, #{menuNo} )
+
+ </insert>
+
+ <select id="selectMenuCreatCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE = #{authorCode}
+
+ </select>
+
+ <delete id="updateMenuCreat_S">
+
+ UPDATE COMTNMENUCREATDTLS
+ SET MAPNG_CREAT_ID=#{mapCreatId}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <delete id="deleteMenuCreat_S">
+
+ DELETE FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthorByUsr" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO">
+
+ select AUTHOR_CODE AS "authorCode" from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+ <select id="selectUsrByPk" parameterType="comDefaultVO" resultType="int">
+
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_mysql.xml (revision 7)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatSiteMapList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS menuNo
+ , B.MENU_ORDR AS menuOrdr
+ , B.MENU_NM AS menuNm
+ , B.UPPER_MENU_NO AS upperMenuId
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = #{authorCode}
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectSiteMapByUser" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT Z.URL FROM COMTNPROGRMLIST Z WHERE A.PROGRM_FILE_NM = Z.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUINFO A, COMTNMENUCREATDTLS B, COMTNEMPLYRSCRTYESTBS C, COMVNUSERMASTER D
+ WHERE A.MENU_NO > 0
+ AND A.MENU_NO = B.MENU_NO
+ AND B.AUTHOR_CODE = C.AUTHOR_CODE
+ AND C.SCRTY_DTRMN_TRGET_ID = D.ESNTL_ID
+ AND D.USER_ID = #{creatPersonId}
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <select id="selectMenuCreatSiteMapURL_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.PROGRM_FILE_NM AS progrmFileNm,
+ B.PROGRM_STRE_PATH AS progrmStrePath,
+ B.PROGRM_KOREAN_NM AS progrmKoreanNm,
+ B.URL AS URL
+ FROM COMTNMENUINFO A, COMTNPROGRMLIST B
+ WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
+ AND A.MENU_NO = #{menuNo}
+
+ </select>
+
+ <insert id="insertSiteMap_S">
+
+ INSERT INTO COMTNSITEMAP ( MAPNG_CREAT_ID, CREATR_ID, MAPNG_FILE_NM, MAPNG_FILE_PATH )
+ VALUES ( #{mapCreatId}, #{creatPersonId}, #{bndeFileNm}, #{bndeFilePath})
+
+ </insert>
+
+ <select id="selectSiteMapCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="int">
+
+ SELECT COUNT(MAPNG_CREAT_ID) AS totcnt
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID like CONCAT(#{mapCreatId}, '%')
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_altibase.xml (revision 7)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT *
+ FROM
+ (SELECT rownum rn, TB.*
+ FROM
+ (SELECT AUTHOR_CODE AS "authorCode",
+ AUTHOR_NM AS "authorNm",
+ AUTHOR_DC AS "authorDc",
+ AUTHOR_CREAT_DE AS "authorCreatDe",
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu"
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like '%'||#{searchKeyword}||'%') TB
+
+ )
+ WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectMenuCreatList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS "menuNo"
+ , A.MENU_ORDR AS "menuOrdr"
+ , A.MENU_NM AS "menuNm"
+ , A.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT count(B.MENU_NO)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.MENU_NO = A.MENU_NO
+ AND B.AUTHOR_CODE = #{authorCode}) AS "chkYeoBu"
+ FROM COMTNMENUINFO A
+ WHERE A.MENU_NO > 0
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <insert id="insertMenuCreat_S">
+
+ INSERT INTO COMTNMENUCREATDTLS ( AUTHOR_CODE ,MENU_NO )
+ VALUES ( #{authorCode}, #{menuNo} )
+
+ </insert>
+
+ <select id="selectMenuCreatCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE = #{authorCode}
+
+ </select>
+
+ <delete id="updateMenuCreat_S">
+
+ UPDATE COMTNMENUCREATDTLS
+ SET MAPNG_CREAT_ID=#{mapCreatId}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <delete id="deleteMenuCreat_S">
+
+ DELETE FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthorByUsr" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO">
+
+ select AUTHOR_CODE AS "authorCode" from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+ <select id="selectUsrByPk" parameterType="comDefaultVO" resultType="int">
+
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatSiteMapList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = #{authorCode}
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectSiteMapByUser" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT Z.URL FROM COMTNPROGRMLIST Z WHERE A.PROGRM_FILE_NM = Z.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUINFO A, COMTNMENUCREATDTLS B, COMTNEMPLYRSCRTYESTBS C, COMVNUSERMASTER D
+ WHERE A.MENU_NO > 0
+ AND A.MENU_NO = B.MENU_NO
+ AND B.AUTHOR_CODE = C.AUTHOR_CODE
+ AND C.SCRTY_DTRMN_TRGET_ID = D.ESNTL_ID
+ AND D.USER_ID = #{creatPersonId}
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <select id="selectMenuCreatSiteMapURL_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.PROGRM_FILE_NM AS "progrmFileNm",
+ B.PROGRM_STRE_PATH AS "progrmStrePath",
+ B.PROGRM_KOREAN_NM AS "progrmKoreanNm",
+ B.URL AS "URL"
+ FROM COMTNMENUINFO A, COMTNPROGRMLIST B
+ WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
+ AND A.MENU_NO = #{menuNo}
+
+ </select>
+
+ <insert id="insertSiteMap_S">
+
+ INSERT INTO COMTNSITEMAP ( MAPNG_CREAT_ID, CREATR_ID, MAPNG_FILE_NM, MAPNG_FILE_PATH )
+ VALUES ( #{mapCreatId}, #{creatPersonId}, #{bndeFileNm}, #{bndeFilePath})
+
+ </insert>
+
+ <select id="selectSiteMapCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="int">
+
+ SELECT COUNT(MAPNG_CREAT_ID) AS "totcnt"
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID like CONCAT(#{mapCreatId}, '%')
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_oracle.xml (revision 7)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatSiteMapList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = #{authorCode}
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectSiteMapByUser" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT Z.URL FROM COMTNPROGRMLIST Z WHERE A.PROGRM_FILE_NM = Z.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUINFO A, COMTNMENUCREATDTLS B, COMTNEMPLYRSCRTYESTBS C, COMVNUSERMASTER D
+ WHERE A.MENU_NO > 0
+ AND A.MENU_NO = B.MENU_NO
+ AND B.AUTHOR_CODE = C.AUTHOR_CODE
+ AND C.SCRTY_DTRMN_TRGET_ID = D.ESNTL_ID
+ AND D.USER_ID = #{creatPersonId}
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <select id="selectMenuCreatSiteMapURL_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.PROGRM_FILE_NM AS "progrmFileNm",
+ B.PROGRM_STRE_PATH AS "progrmStrePath",
+ B.PROGRM_KOREAN_NM AS "progrmKoreanNm",
+ B.URL AS "URL"
+ FROM COMTNMENUINFO A, COMTNPROGRMLIST B
+ WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
+ AND A.MENU_NO = #{menuNo}
+
+ </select>
+
+ <insert id="insertSiteMap_S">
+
+ INSERT INTO COMTNSITEMAP ( MAPNG_CREAT_ID, CREATR_ID, MAPNG_FILE_NM, MAPNG_FILE_PATH )
+ VALUES ( #{mapCreatId}, #{creatPersonId}, #{bndeFileNm}, #{bndeFilePath})
+
+ </insert>
+
+ <select id="selectSiteMapCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="int">
+
+ SELECT COUNT(MAPNG_CREAT_ID) AS "totcnt"
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID like CONCAT(#{mapCreatId}, '%')
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_mysql.xml (revision 7)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT AUTHOR_CODE AS authorCode,
+ AUTHOR_NM AS authorNm,
+ AUTHOR_DC AS authorDc,
+ AUTHOR_CREAT_DE AS authorCreatDe,
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS chkYeoBu
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS totcnt
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <select id="selectMenuCreatList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT count(B.MENU_NO)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.MENU_NO = A.MENU_NO
+ AND B.AUTHOR_CODE = #{authorCode}) AS chkYeoBu
+ FROM COMTNMENUINFO A
+ WHERE A.MENU_NO > 0
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <insert id="insertMenuCreat_S">
+
+ INSERT INTO COMTNMENUCREATDTLS ( AUTHOR_CODE ,MENU_NO )
+ VALUES ( #{authorCode}, #{menuNo} )
+
+ </insert>
+
+ <select id="selectMenuCreatCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS totcnt
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE = #{authorCode}
+
+ </select>
+
+ <delete id="updateMenuCreat_S">
+
+ UPDATE COMTNMENUCREATDTLS
+ SET MAPNG_CREAT_ID=#{mapCreatId}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <delete id="deleteMenuCreat_S">
+
+ DELETE FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthorByUsr" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO">
+
+ select AUTHOR_CODE AS authorCode from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+ <select id="selectUsrByPk" parameterType="comDefaultVO" resultType="int">
+
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_maria.xml (revision 7)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatSiteMapList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS menuNo
+ , B.MENU_ORDR AS menuOrdr
+ , B.MENU_NM AS menuNm
+ , B.UPPER_MENU_NO AS upperMenuId
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = #{authorCode}
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectSiteMapByUser" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT Z.URL FROM COMTNPROGRMLIST Z WHERE A.PROGRM_FILE_NM = Z.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUINFO A, COMTNMENUCREATDTLS B, COMTNEMPLYRSCRTYESTBS C, COMVNUSERMASTER D
+ WHERE A.MENU_NO > 0
+ AND A.MENU_NO = B.MENU_NO
+ AND B.AUTHOR_CODE = C.AUTHOR_CODE
+ AND C.SCRTY_DTRMN_TRGET_ID = D.ESNTL_ID
+ AND D.USER_ID = #{creatPersonId}
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <select id="selectMenuCreatSiteMapURL_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.PROGRM_FILE_NM AS progrmFileNm,
+ B.PROGRM_STRE_PATH AS progrmStrePath,
+ B.PROGRM_KOREAN_NM AS progrmKoreanNm,
+ B.URL AS URL
+ FROM COMTNMENUINFO A, COMTNPROGRMLIST B
+ WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
+ AND A.MENU_NO = #{menuNo}
+
+ </select>
+
+ <insert id="insertSiteMap_S">
+
+ INSERT INTO COMTNSITEMAP ( MAPNG_CREAT_ID, CREATR_ID, MAPNG_FILE_NM, MAPNG_FILE_PATH )
+ VALUES ( #{mapCreatId}, #{creatPersonId}, #{bndeFileNm}, #{bndeFilePath})
+
+ </insert>
+
+ <select id="selectSiteMapCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="int">
+
+ SELECT COUNT(MAPNG_CREAT_ID) AS totcnt
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID like CONCAT(#{mapCreatId}, '%')
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_tibero.xml (revision 7)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT *
+ FROM
+ (SELECT rownum rn, TB.*
+ FROM
+ (SELECT AUTHOR_CODE AS "authorCode",
+ AUTHOR_NM AS "authorNm",
+ AUTHOR_DC AS "authorDc",
+ AUTHOR_CREAT_DE AS "authorCreatDe",
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu"
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like '%'||#{searchKeyword}||'%') TB
+
+ )
+ WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectMenuCreatList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS "menuNo"
+ , A.MENU_ORDR AS "menuOrdr"
+ , A.MENU_NM AS "menuNm"
+ , A.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT count(B.MENU_NO)
+ FROM COMTNMENUCREATDTLS B
+ WHERE B.MENU_NO = A.MENU_NO
+ AND B.AUTHOR_CODE = #{authorCode}) AS "chkYeoBu"
+ FROM COMTNMENUINFO A
+ WHERE A.MENU_NO > 0
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <insert id="insertMenuCreat_S">
+
+ INSERT INTO COMTNMENUCREATDTLS ( AUTHOR_CODE ,MENU_NO )
+ VALUES ( #{authorCode}, #{menuNo} )
+
+ </insert>
+
+ <select id="selectMenuCreatCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO" resultType="int">
+
+ SELECT COUNT(AUTHOR_CODE) AS "totcnt"
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE = #{authorCode}
+
+ </select>
+
+ <delete id="updateMenuCreat_S">
+
+ UPDATE COMTNMENUCREATDTLS
+ SET MAPNG_CREAT_ID=#{mapCreatId}
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <delete id="deleteMenuCreat_S">
+
+ DELETE FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE=#{authorCode}
+
+ </delete>
+
+ <select id="selectAuthorByUsr" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mcm.service.MenuCreatVO">
+
+ select AUTHOR_CODE AS "authorCode" from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+ <select id="selectUsrByPk" parameterType="comDefaultVO" resultType="int">
+
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuCreat_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_altibase.xml (revision 7)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuCreatSiteMapList_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = #{authorCode}
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectSiteMapByUser" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ A.MENU_NO AS menuNo
+ , A.MENU_ORDR AS menuOrdr
+ , A.MENU_NM AS menuNm
+ , A.UPPER_MENU_NO AS upperMenuId
+ , (SELECT Z.URL FROM COMTNPROGRMLIST Z WHERE A.PROGRM_FILE_NM = Z.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUINFO A, COMTNMENUCREATDTLS B, COMTNEMPLYRSCRTYESTBS C, COMVNUSERMASTER D
+ WHERE A.MENU_NO > 0
+ AND A.MENU_NO = B.MENU_NO
+ AND B.AUTHOR_CODE = C.AUTHOR_CODE
+ AND C.SCRTY_DTRMN_TRGET_ID = D.ESNTL_ID
+ AND D.USER_ID = #{creatPersonId}
+ ORDER BY A.MENU_ORDR
+
+ </select>
+
+ <select id="selectMenuCreatSiteMapURL_D" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="egovMap">
+
+ SELECT
+ B.PROGRM_FILE_NM AS "progrmFileNm",
+ B.PROGRM_STRE_PATH AS "progrmStrePath",
+ B.PROGRM_KOREAN_NM AS "progrmKoreanNm",
+ B.URL AS "URL"
+ FROM COMTNMENUINFO A, COMTNPROGRMLIST B
+ WHERE A.PROGRM_FILE_NM = B.PROGRM_FILE_NM
+ AND A.MENU_NO = #{menuNo}
+
+ </select>
+
+ <insert id="insertSiteMap_S">
+
+ INSERT INTO COMTNSITEMAP ( MAPNG_CREAT_ID, CREATR_ID, MAPNG_FILE_NM, MAPNG_FILE_PATH )
+ VALUES ( #{mapCreatId}, #{creatPersonId}, #{bndeFileNm}, #{bndeFilePath})
+
+ </insert>
+
+ <select id="selectSiteMapCnt_S" parameterType="egovframework.com.sym.mnu.mcm.service.MenuSiteMapVO" resultType="int">
+
+ SELECT COUNT(MAPNG_CREAT_ID) AS "totcnt"
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID like CONCAT(#{mapCreatId}, '%')
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mcm/EgovMenuSiteMap_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_maria.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMainMenuHead" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS menuNo
+ , B.MENU_ORDR AS menuOrdr
+ , B.MENU_NM AS menuNm
+ , B.UPPER_MENU_NO AS upperMenuId
+ , B.MENU_DC AS menuDc
+ , B.RELATE_IMAGE_PATH AS relateImagePath
+ , B.RELATE_IMAGE_NM AS relateImageNm
+ , B.PROGRM_FILE_NM AS progrmFileNm
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE B.Menu_NO > 0
+ AND B.UPPER_MENU_NO = 0
+ AND A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT C.AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS C
+ WHERE C.SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <select id="selectMainMenuLeft" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS menuNo
+ , B.MENU_ORDR AS menuOrdr
+ , B.MENU_NM AS menuNm
+ , B.UPPER_MENU_NO AS upperMenuId
+ , B.RELATE_IMAGE_PATH AS relateImagePath
+ , B.RELATE_IMAGE_NM AS relateImageNm
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectLastMenuURL" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="String">
+
+ SELECT URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM =
+ (SELECT PROGRM_FILE_NM FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNo" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select MIN(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNoCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select count(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_postgres.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMainMenuHead" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.MENU_DC AS "menuDc"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , B.PROGRM_FILE_NM AS "progrmFileNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE B.Menu_NO > 0
+ AND B.UPPER_MENU_NO = 0
+ AND A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT C.AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS C
+ WHERE C.SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <select id="selectMainMenuLeft" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectLastMenuURL" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="String">
+
+ SELECT URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM =
+ (SELECT PROGRM_FILE_NM FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNo" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select MIN(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNoCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select count(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectMenuManageListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+
+ <select id="selectMenuManage_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{searchKeyword}
+
+ </select>
+
+ <insert id="insertMenuManage_S">
+
+ INSERT INTO COMTNMENUINFO
+ ( MENU_NO
+ , MENU_ORDR
+ , MENU_NM
+ , UPPER_MENU_NO
+ , MENU_DC
+ , RELATE_IMAGE_PATH
+ , RELATE_IMAGE_NM
+ , PROGRM_FILE_NM )
+ VALUES ( #{menuNo}
+ , #{menuOrdr}
+ , #{menuNm}
+ , #{upperMenuId}
+ , #{menuDc}
+ , #{relateImagePath}
+ , #{relateImageNm}
+ , #{progrmFileNm} )
+
+ </insert>
+
+ <update id="updateMenuManage_S">
+
+ UPDATE COMTNMENUINFO
+ SET MENU_ORDR = #{menuOrdr}
+ , MENU_NM = #{menuNm}
+ , UPPER_MENU_NO = #{upperMenuId}
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE_PATH = #{relateImagePath}
+ , RELATE_IMAGE_NM = #{relateImageNm}
+ , PROGRM_FILE_NM = #{progrmFileNm}
+ WHERE MENU_NO=#{menuNo}
+
+ </update>
+
+ <delete id="deleteMenuManage_S">
+
+ DELETE FROM COMTNMENUINFO
+ WHERE MENU_NO=#{menuNo}
+
+ </delete>
+
+ <!-- 메뉴번호 존재여부 조회 -->
+ <select id="selectMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo}
+
+ </select>
+
+ <!-- 상위 메뉴번호 존재여부 조회 -->
+ <select id="selectUpperMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE UPPER_MENU_NO = #{menuNo}
+
+ </select>
+
+
+ <select id="selectMenuListT_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE Menu_NO > 0
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <delete id="deleteAllMenuList">
+
+ DELETE FROM COMTNMENUINFO
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectMenuListTotCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMainMenuHead" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.MENU_DC AS "menuDc"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , B.PROGRM_FILE_NM AS "progrmFileNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE B.Menu_NO > 0
+ AND B.UPPER_MENU_NO = 0
+ AND A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT C.AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS C
+ WHERE C.SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <select id="selectMainMenuLeft" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectLastMenuURL" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="String">
+
+ SELECT URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM =
+ (SELECT PROGRM_FILE_NM FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNo" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select MIN(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNoCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select count(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectMenuManageListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+
+ <select id="selectMenuManage_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO::VARCHAR = #{searchKeyword}
+
+ </select>
+
+ <insert id="insertMenuManage_S">
+
+ INSERT INTO COMTNMENUINFO
+ ( MENU_NO
+ , MENU_ORDR
+ , MENU_NM
+ , UPPER_MENU_NO
+ , MENU_DC
+ , RELATE_IMAGE_PATH
+ , RELATE_IMAGE_NM
+ , PROGRM_FILE_NM )
+ VALUES ( #{menuNo}
+ , #{menuOrdr}
+ , #{menuNm}
+ , #{upperMenuId}
+ , #{menuDc}
+ , #{relateImagePath}
+ , #{relateImageNm}
+ , #{progrmFileNm} )
+
+ </insert>
+
+ <update id="updateMenuManage_S">
+
+ UPDATE COMTNMENUINFO
+ SET MENU_ORDR = #{menuOrdr}
+ , MENU_NM = #{menuNm}
+ , UPPER_MENU_NO = #{upperMenuId}
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE_PATH = #{relateImagePath}
+ , RELATE_IMAGE_NM = #{relateImageNm}
+ , PROGRM_FILE_NM = #{progrmFileNm}
+ WHERE MENU_NO=#{menuNo}
+
+ </update>
+
+ <delete id="deleteMenuManage_S">
+
+ DELETE FROM COMTNMENUINFO
+ WHERE MENU_NO=#{menuNo}
+
+ </delete>
+
+ <!-- 메뉴번호 존재여부 조회 -->
+ <select id="selectMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo}
+
+ </select>
+
+ <!-- 상위 메뉴번호 존재여부 조회 -->
+ <select id="selectUpperMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE UPPER_MENU_NO = #{menuNo}
+
+ </select>
+
+ <select id="selectMenuListT_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE Menu_NO > 0
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <delete id="deleteAllMenuList">
+
+ DELETE FROM COMTNMENUINFO
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectMenuListTotCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_oracle.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMainMenuHead" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.MENU_DC AS "menuDc"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , B.PROGRM_FILE_NM AS "progrmFileNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE B.Menu_NO > 0
+ AND B.UPPER_MENU_NO = 0
+ AND A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT C.AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS C
+ WHERE C.SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <select id="selectMainMenuLeft" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectLastMenuURL" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="String">
+
+ SELECT URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM =
+ (SELECT PROGRM_FILE_NM FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNo" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select MIN(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNoCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select count(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS menuNo
+ , MENU_ORDR AS menuOrdr
+ , MENU_NM AS menuNm
+ , UPPER_MENU_NO AS upperMenuId
+ , MENU_DC AS menuDc
+ , RELATE_IMAGE_PATH AS relateImagePath
+ , RELATE_IMAGE_NM AS relateImageNm
+ , PROGRM_FILE_NM AS progrmFileNm
+ FROM COMTNMENUINFO
+ WHERE binary(MENU_NM) like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectMenuManageListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE binary(MENU_NM) like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+
+ <select id="selectMenuManage_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+
+ SELECT
+ MENU_NO AS menuNo
+ , MENU_ORDR AS menuOrdr
+ , MENU_NM AS menuNm
+ , UPPER_MENU_NO AS upperMenuId
+ , MENU_DC AS menuDc
+ , RELATE_IMAGE_PATH AS relateImagePath
+ , RELATE_IMAGE_NM AS relateImageNm
+ , PROGRM_FILE_NM AS progrmFileNm
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{searchKeyword}
+
+ </select>
+
+ <insert id="insertMenuManage_S">
+
+ INSERT INTO COMTNMENUINFO
+ ( MENU_NO
+ , MENU_ORDR
+ , MENU_NM
+ , UPPER_MENU_NO
+ , MENU_DC
+ , RELATE_IMAGE_PATH
+ , RELATE_IMAGE_NM
+ , PROGRM_FILE_NM )
+ VALUES ( #{menuNo}
+ , #{menuOrdr}
+ , #{menuNm}
+ , #{upperMenuId}
+ , #{menuDc}
+ , #{relateImagePath}
+ , #{relateImageNm}
+ , #{progrmFileNm} )
+
+ </insert>
+
+ <update id="updateMenuManage_S">
+
+ UPDATE COMTNMENUINFO
+ SET MENU_ORDR = #{menuOrdr}
+ , MENU_NM = #{menuNm}
+ , UPPER_MENU_NO = #{upperMenuId}
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE_PATH = #{relateImagePath}
+ , RELATE_IMAGE_NM = #{relateImageNm}
+ , PROGRM_FILE_NM = #{progrmFileNm}
+ WHERE MENU_NO=#{menuNo}
+
+ </update>
+
+ <delete id="deleteMenuManage_S">
+
+ DELETE FROM COMTNMENUINFO
+ WHERE MENU_NO=#{menuNo}
+
+ </delete>
+
+ <!-- 메뉴번호 존재여부 조회 -->
+ <select id="selectMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo}
+
+ </select>
+
+ <!-- 상위 메뉴번호 존재여부 조회 -->
+ <select id="selectUpperMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE UPPER_MENU_NO = #{menuNo}
+
+ </select>
+
+ <select id="selectMenuListT_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS menuNo
+ , MENU_ORDR AS menuOrdr
+ , MENU_NM AS menuNm
+ , UPPER_MENU_NO AS upperMenuId
+ , MENU_DC AS menuDc
+ , RELATE_IMAGE_PATH AS relateImagePath
+ , RELATE_IMAGE_NM AS relateImageNm
+ , PROGRM_FILE_NM AS progrmFileNm
+ FROM COMTNMENUINFO
+ WHERE Menu_NO > 0
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <delete id="deleteAllMenuList">
+
+ DELETE FROM COMTNMENUINFO
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectMenuListTotCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_altibase.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:48 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMainMenuHead" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.MENU_DC AS "menuDc"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , B.PROGRM_FILE_NM AS "progrmFileNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE B.Menu_NO > 0
+ AND B.UPPER_MENU_NO = 0
+ AND A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT C.AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS C
+ WHERE C.SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <select id="selectMainMenuLeft" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectLastMenuURL" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="String">
+
+ SELECT URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM =
+ (SELECT PROGRM_FILE_NM FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNo" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select MIN(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNoCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select count(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectMenuManageListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+
+ <select id="selectMenuManage_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{searchKeyword}
+
+ </select>
+
+ <insert id="insertMenuManage_S">
+
+ INSERT INTO COMTNMENUINFO
+ ( MENU_NO
+ , MENU_ORDR
+ , MENU_NM
+ , UPPER_MENU_NO
+ , MENU_DC
+ , RELATE_IMAGE_PATH
+ , RELATE_IMAGE_NM
+ , PROGRM_FILE_NM )
+ VALUES ( #{menuNo}
+ , #{menuOrdr}
+ , #{menuNm}
+ , #{upperMenuId}
+ , #{menuDc}
+ , #{relateImagePath}
+ , #{relateImageNm}
+ , #{progrmFileNm} )
+
+ </insert>
+
+ <update id="updateMenuManage_S">
+
+ UPDATE COMTNMENUINFO
+ SET MENU_ORDR = #{menuOrdr}
+ , MENU_NM = #{menuNm}
+ , UPPER_MENU_NO = #{upperMenuId}
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE_PATH = #{relateImagePath}
+ , RELATE_IMAGE_NM = #{relateImageNm}
+ , PROGRM_FILE_NM = #{progrmFileNm}
+ WHERE MENU_NO=#{menuNo}
+
+ </update>
+
+ <delete id="deleteMenuManage_S">
+
+ DELETE FROM COMTNMENUINFO
+ WHERE MENU_NO=#{menuNo}
+
+ </delete>
+
+ <!-- 메뉴번호 존재여부 조회 -->
+ <select id="selectMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo}
+
+ </select>
+
+ <!-- 상위 메뉴번호 존재여부 조회 -->
+ <select id="selectUpperMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE UPPER_MENU_NO = #{menuNo}
+
+ </select>
+
+ <select id="selectMenuListT_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE Menu_NO > 0
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <delete id="deleteAllMenuList">
+
+ DELETE FROM COMTNMENUINFO
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectMenuListTotCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectMenuManageListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+
+ <select id="selectMenuManage_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{searchKeyword}
+
+ </select>
+
+ <insert id="insertMenuManage_S">
+
+ INSERT INTO COMTNMENUINFO
+ ( MENU_NO
+ , MENU_ORDR
+ , MENU_NM
+ , UPPER_MENU_NO
+ , MENU_DC
+ , RELATE_IMAGE_PATH
+ , RELATE_IMAGE_NM
+ , PROGRM_FILE_NM )
+ VALUES ( #{menuNo}
+ , #{menuOrdr}
+ , #{menuNm}
+ , #{upperMenuId}
+ , #{menuDc}
+ , #{relateImagePath}
+ , #{relateImageNm}
+ , #{progrmFileNm} )
+
+ </insert>
+
+ <update id="updateMenuManage_S">
+
+ UPDATE COMTNMENUINFO
+ SET MENU_ORDR = #{menuOrdr}
+ , MENU_NM = #{menuNm}
+ , UPPER_MENU_NO = #{upperMenuId}
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE_PATH = #{relateImagePath}
+ , RELATE_IMAGE_NM = #{relateImageNm}
+ , PROGRM_FILE_NM = #{progrmFileNm}
+ WHERE MENU_NO=#{menuNo}
+
+ </update>
+
+ <delete id="deleteMenuManage_S">
+
+ DELETE FROM COMTNMENUINFO
+ WHERE MENU_NO=#{menuNo}
+
+ </delete>
+
+ <!-- 메뉴번호 존재여부 조회 -->
+ <select id="selectMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo}
+
+ </select>
+
+ <!-- 상위 메뉴번호 존재여부 조회 -->
+ <select id="selectUpperMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE UPPER_MENU_NO = #{menuNo}
+
+ </select>
+
+ <select id="selectMenuListT_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE Menu_NO > 0
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <delete id="deleteAllMenuList">
+
+ DELETE FROM COMTNMENUINFO
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectMenuListTotCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_mysql.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMainMenuHead" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS menuNo
+ , B.MENU_ORDR AS menuOrdr
+ , B.MENU_NM AS menuNm
+ , B.UPPER_MENU_NO AS upperMenuId
+ , B.MENU_DC AS menuDc
+ , B.RELATE_IMAGE_PATH AS relateImagePath
+ , B.RELATE_IMAGE_NM AS relateImageNm
+ , B.PROGRM_FILE_NM AS progrmFileNm
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE B.Menu_NO > 0
+ AND B.UPPER_MENU_NO = 0
+ AND A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT C.AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS C
+ WHERE C.SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <select id="selectMainMenuLeft" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS menuNo
+ , B.MENU_ORDR AS menuOrdr
+ , B.MENU_NM AS menuNm
+ , B.UPPER_MENU_NO AS upperMenuId
+ , B.RELATE_IMAGE_PATH AS relateImagePath
+ , B.RELATE_IMAGE_NM AS relateImageNm
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS chkURL
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectLastMenuURL" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="String">
+
+ SELECT URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM =
+ (SELECT PROGRM_FILE_NM FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNo" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select MIN(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNoCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select count(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS menuNo
+ , MENU_ORDR AS menuOrdr
+ , MENU_NM AS menuNm
+ , UPPER_MENU_NO AS upperMenuId
+ , MENU_DC AS menuDc
+ , RELATE_IMAGE_PATH AS relateImagePath
+ , RELATE_IMAGE_NM AS relateImageNm
+ , PROGRM_FILE_NM AS progrmFileNm
+ FROM COMTNMENUINFO
+ WHERE binary(MENU_NM) like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectMenuManageListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE binary(MENU_NM) like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+
+ <select id="selectMenuManage_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+
+ SELECT
+ MENU_NO AS menuNo
+ , MENU_ORDR AS menuOrdr
+ , MENU_NM AS menuNm
+ , UPPER_MENU_NO AS upperMenuId
+ , MENU_DC AS menuDc
+ , RELATE_IMAGE_PATH AS relateImagePath
+ , RELATE_IMAGE_NM AS relateImageNm
+ , PROGRM_FILE_NM AS progrmFileNm
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{searchKeyword}
+
+ </select>
+
+ <insert id="insertMenuManage_S">
+
+ INSERT INTO COMTNMENUINFO
+ ( MENU_NO
+ , MENU_ORDR
+ , MENU_NM
+ , UPPER_MENU_NO
+ , MENU_DC
+ , RELATE_IMAGE_PATH
+ , RELATE_IMAGE_NM
+ , PROGRM_FILE_NM )
+ VALUES ( #{menuNo}
+ , #{menuOrdr}
+ , #{menuNm}
+ , #{upperMenuId}
+ , #{menuDc}
+ , #{relateImagePath}
+ , #{relateImageNm}
+ , #{progrmFileNm} )
+
+ </insert>
+
+ <update id="updateMenuManage_S">
+
+ UPDATE COMTNMENUINFO
+ SET MENU_ORDR = #{menuOrdr}
+ , MENU_NM = #{menuNm}
+ , UPPER_MENU_NO = #{upperMenuId}
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE_PATH = #{relateImagePath}
+ , RELATE_IMAGE_NM = #{relateImageNm}
+ , PROGRM_FILE_NM = #{progrmFileNm}
+ WHERE MENU_NO=#{menuNo}
+
+ </update>
+
+ <delete id="deleteMenuManage_S">
+
+ DELETE FROM COMTNMENUINFO
+ WHERE MENU_NO=#{menuNo}
+
+ </delete>
+
+ <!-- 메뉴번호 존재여부 조회 -->
+ <select id="selectMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo}
+
+ </select>
+
+ <!-- 상위 메뉴번호 존재여부 조회 -->
+ <select id="selectUpperMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE UPPER_MENU_NO = #{menuNo}
+
+ </select>
+
+ <select id="selectMenuListT_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS menuNo
+ , MENU_ORDR AS menuOrdr
+ , MENU_NM AS menuNm
+ , UPPER_MENU_NO AS upperMenuId
+ , MENU_DC AS menuDc
+ , RELATE_IMAGE_PATH AS relateImagePath
+ , RELATE_IMAGE_NM AS relateImageNm
+ , PROGRM_FILE_NM AS progrmFileNm
+ FROM COMTNMENUINFO
+ WHERE Menu_NO > 0
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <delete id="deleteAllMenuList">
+
+ DELETE FROM COMTNMENUINFO
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectMenuListTotCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_tibero.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMainMenuHead" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.MENU_DC AS "menuDc"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , B.PROGRM_FILE_NM AS "progrmFileNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE B.Menu_NO > 0
+ AND B.UPPER_MENU_NO = 0
+ AND A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT C.AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS C
+ WHERE C.SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <select id="selectMainMenuLeft" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="egovMap">
+
+ SELECT
+ B.MENU_NO AS "menuNo"
+ , B.MENU_ORDR AS "menuOrdr"
+ , B.MENU_NM AS "menuNm"
+ , B.UPPER_MENU_NO AS "upperMenuId"
+ , B.RELATE_IMAGE_PATH AS "relateImagePath"
+ , B.RELATE_IMAGE_NM AS "relateImageNm"
+ , (SELECT C.URL FROM COMTNPROGRMLIST C WHERE B.PROGRM_FILE_NM = C.PROGRM_FILE_NM) AS "chkURL"
+ FROM COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tmpUniqId})
+ ORDER BY B.MENU_ORDR
+
+ </select>
+
+ <select id="selectLastMenuURL" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="String">
+
+ SELECT URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM =
+ (SELECT PROGRM_FILE_NM FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNo" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select MIN(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+
+ <select id="selectLastMenuNoCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ select count(MENU_NO)
+ from COMTNMENUINFO
+ where UPPER_MENU_NO = #{menuNo}
+ and MENU_ORDR =
+ (select MIN(MENU_ORDR)
+ from COMTNMENUCREATDTLS A, COMTNMENUINFO B
+ where A.MENU_NO = B.MENU_NO
+ AND A.AUTHOR_CODE = (SELECT AUTHOR_CODE from COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{tempValue})
+ AND B.UPPER_MENU_NO = #{menuNo})
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMainMenu_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="menuManageDAO">
+
+ <select id="selectMenuManageList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectMenuManageListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NM like '%'||#{searchKeyword}||'%'
+
+ </select>
+
+
+ <select id="selectMenuManage_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.mpm.service.MenuManageVO">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{searchKeyword}
+
+ </select>
+
+ <insert id="insertMenuManage_S">
+
+ INSERT INTO COMTNMENUINFO
+ ( MENU_NO
+ , MENU_ORDR
+ , MENU_NM
+ , UPPER_MENU_NO
+ , MENU_DC
+ , RELATE_IMAGE_PATH
+ , RELATE_IMAGE_NM
+ , PROGRM_FILE_NM )
+ VALUES ( #{menuNo}
+ , #{menuOrdr}
+ , #{menuNm}
+ , #{upperMenuId}
+ , #{menuDc}
+ , #{relateImagePath}
+ , #{relateImageNm}
+ , #{progrmFileNm} )
+
+ </insert>
+
+ <update id="updateMenuManage_S">
+
+ UPDATE COMTNMENUINFO
+ SET MENU_ORDR = #{menuOrdr}
+ , MENU_NM = #{menuNm}
+ , UPPER_MENU_NO = #{upperMenuId}
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE_PATH = #{relateImagePath}
+ , RELATE_IMAGE_NM = #{relateImageNm}
+ , PROGRM_FILE_NM = #{progrmFileNm}
+ WHERE MENU_NO=#{menuNo}
+
+ </update>
+
+ <delete id="deleteMenuManage_S">
+
+ DELETE FROM COMTNMENUINFO
+ WHERE MENU_NO=#{menuNo}
+
+ </delete>
+
+ <!-- 메뉴번호 존재여부 조회 -->
+ <select id="selectMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS "totcnt"
+ FROM COMTNMENUINFO
+ WHERE MENU_NO = #{menuNo}
+
+ </select>
+
+ <!-- 상위 메뉴번호 존재여부 조회 -->
+ <select id="selectUpperMenuNoByPk" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+ WHERE UPPER_MENU_NO = #{menuNo}
+
+ </select>
+
+ <select id="selectMenuListT_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ MENU_NO AS "menuNo"
+ , MENU_ORDR AS "menuOrdr"
+ , MENU_NM AS "menuNm"
+ , UPPER_MENU_NO AS "upperMenuId"
+ , MENU_DC AS "menuDc"
+ , RELATE_IMAGE_PATH AS "relateImagePath"
+ , RELATE_IMAGE_NM AS "relateImageNm"
+ , PROGRM_FILE_NM AS "progrmFileNm"
+ FROM COMTNMENUINFO
+ WHERE Menu_NO > 0
+ ORDER BY MENU_ORDR
+
+ </select>
+
+ <delete id="deleteAllMenuList">
+
+ DELETE FROM COMTNMENUINFO
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectMenuListTotCnt" parameterType="egovframework.com.sym.mnu.mpm.service.MenuManageVO" resultType="int">
+
+ SELECT COUNT(MENU_NO) AS totcnt
+ FROM COMTNMENUINFO
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/mpm/EgovMenuManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_mysql.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="siteMapngDAO">
+
+ <select id="selectSiteMapngByMapCreatID" parameterType="comDefaultVO" resultType="String">
+
+ SELECT MAPNG_CREAT_ID AS mapCreatId
+ FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE =
+ (SELECT AUTHOR_CODE
+ FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{searchKeyword} )
+ group by MAPNG_CREAT_ID
+
+ </select>
+
+ <select id="selectSiteMapng_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.stm.service.SiteMapngVO">
+
+ SELECT CONCAT(MAPNG_FILE_PATH, MAPNG_FILE_NM) AS bndeFileNm
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID = #{searchKeyword}
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="siteMapngDAO">
+
+ <select id="selectSiteMapngByMapCreatID" parameterType="comDefaultVO" resultType="String">
+
+ SELECT trim(MAPNG_CREAT_ID) AS "mapCreatId"
+ FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE =
+ (SELECT AUTHOR_CODE
+ FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{searchKeyword} )
+ group by MAPNG_CREAT_ID
+
+ </select>
+
+ <select id="selectSiteMapng_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.stm.service.SiteMapngVO">
+
+ SELECT CONCAT(MAPNG_FILE_PATH, MAPNG_FILE_NM) AS "bndeFileNm"
+ FROM COMTNSITEMAP
+ WHERE trim(MAPNG_CREAT_ID) = #{searchKeyword}
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_oracle.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="siteMapngDAO">
+
+ <select id="selectSiteMapngByMapCreatID" parameterType="comDefaultVO" resultType="String">
+
+ SELECT trim(MAPNG_CREAT_ID) AS "mapCreatId"
+ FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE =
+ (SELECT AUTHOR_CODE
+ FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{searchKeyword} )
+ group by MAPNG_CREAT_ID
+
+ </select>
+
+ <select id="selectSiteMapng_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.stm.service.SiteMapngVO">
+
+ SELECT CONCAT(MAPNG_FILE_PATH, MAPNG_FILE_NM) AS "bndeFileNm"
+ FROM COMTNSITEMAP
+ WHERE trim(MAPNG_CREAT_ID) = #{searchKeyword}
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_maria.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="siteMapngDAO">
+
+ <select id="selectSiteMapngByMapCreatID" parameterType="comDefaultVO" resultType="String">
+
+ SELECT MAPNG_CREAT_ID AS mapCreatId
+ FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE =
+ (SELECT AUTHOR_CODE
+ FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{searchKeyword} )
+ group by MAPNG_CREAT_ID
+
+ </select>
+
+ <select id="selectSiteMapng_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.stm.service.SiteMapngVO">
+
+ SELECT CONCAT(MAPNG_FILE_PATH, MAPNG_FILE_NM) AS bndeFileNm
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID = #{searchKeyword}
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_altibase.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="siteMapngDAO">
+
+ <select id="selectSiteMapngByMapCreatID" parameterType="comDefaultVO" resultType="String">
+
+ SELECT trim(MAPNG_CREAT_ID) AS "mapCreatId"
+ FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE =
+ (SELECT AUTHOR_CODE
+ FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{searchKeyword} )
+ group by MAPNG_CREAT_ID
+
+ </select>
+
+ <select id="selectSiteMapng_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.stm.service.SiteMapngVO">
+
+ SELECT CONCAT(MAPNG_FILE_PATH, MAPNG_FILE_NM) AS "bndeFileNm"
+ FROM COMTNSITEMAP
+ WHERE trim(MAPNG_CREAT_ID) = #{searchKeyword}
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_tibero.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="siteMapngDAO">
+
+ <select id="selectSiteMapngByMapCreatID" parameterType="comDefaultVO" resultType="String">
+
+ SELECT trim(MAPNG_CREAT_ID) AS "mapCreatId"
+ FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE =
+ (SELECT AUTHOR_CODE
+ FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{searchKeyword} )
+ group by MAPNG_CREAT_ID
+
+ </select>
+
+ <select id="selectSiteMapng_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.stm.service.SiteMapngVO">
+
+ SELECT CONCAT(MAPNG_FILE_PATH, MAPNG_FILE_NM) AS "bndeFileNm"
+ FROM COMTNSITEMAP
+ WHERE trim(MAPNG_CREAT_ID) = #{searchKeyword}
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_postgres.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="siteMapngDAO">
+
+ <select id="selectSiteMapngByMapCreatID" parameterType="comDefaultVO" resultType="String">
+
+ SELECT MAPNG_CREAT_ID AS mapCreatId
+ FROM COMTNMENUCREATDTLS
+ WHERE AUTHOR_CODE =
+ (SELECT AUTHOR_CODE
+ FROM COMTNEMPLYRSCRTYESTBS
+ WHERE SCRTY_DTRMN_TRGET_ID = #{searchKeyword} )
+ group by MAPNG_CREAT_ID
+
+ </select>
+
+ <select id="selectSiteMapng_D" parameterType="comDefaultVO" resultType="egovframework.com.sym.mnu.stm.service.SiteMapngVO">
+
+ SELECT CONCAT(MAPNG_FILE_PATH, MAPNG_FILE_NM) AS bndeFileNm
+ FROM COMTNSITEMAP
+ WHERE MAPNG_CREAT_ID = #{searchKeyword}
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/mnu/stm/EgovSiteMapng_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_altibase.xml (revision 7)
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램 변경요청 -->
+ <resultMap id="progrmManageDtl" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ <result property="rqesterNo" column="REQUST_NO"/>
+ <result property="rqesterPersonId" column="RQESTER_ID"/>
+ <result property="changerqesterCn" column="CHANGE_REQUST_CN"/>
+ <result property="rqesterProcessCn" column="REQUST_PROCESS_CN"/>
+ <result property="opetrId" column="OPETR_ID"/>
+ <result property="processSttus" column="PROCESS_STTUS_CODE"/>
+ <result property="processDe" column="PROCESS_DE"/>
+ <result property="rqesterDe" column="RQESTDE"/>
+ <result property="rqesterSj" column="REQUST_SJ"/>
+ </resultMap>
+
+ <!-- 프로그램 변경요청 TMP -->
+ <resultMap id="progrmManageDtl_Temp" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="rqesterNo" column="REQUST_NO"/>
+ </resultMap>
+
+ <select id="selectProgrmChangeRequstList_D" parameterType="comDefaultVO" resultMap="progrmManageDtl">
+
+ SELECT
+ PROGRM_FILE_NM AS "PROGRM_FILE_NM"
+ , REQUST_NO AS "REQUST_NO"
+ , RQESTER_ID AS "RQESTER_ID"
+ , CHANGE_REQUST_CN AS "CHANGE_REQUST_CN"
+ , REQUST_PROCESS_CN AS "REQUST_PROCESS_CN"
+ , OPETR_ID AS "OPETR_ID"
+ , trim(PROCESS_STTUS_CODE) AS "PROCESS_STTUS_CODE"
+ , PROCESS_DE AS "PROCESS_DE"
+ , RQESTDE AS "RQESTDE"
+ , REQUST_SJ AS "REQUST_SJ"
+ FROM (
+ SELECT rownum rn
+ , TB.PROGRM_FILE_NM
+ , TB.REQUST_NO
+ , TB.RQESTER_ID
+ , TB.CHANGE_REQUST_CN
+ , TB.REQUST_PROCESS_CN
+ , TB.OPETR_ID
+ , TB.PROCESS_STTUS_CODE
+ , TB.PROCESS_DE
+ , TB.RQESTDE
+ , TB.REQUST_SJ
+ FROM (
+ SELECT
+ PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , REQUST_PROCESS_CN
+ , OPETR_ID
+ , PROCESS_STTUS_CODE
+ , PROCESS_DE
+ , RQESTDE
+ , REQUST_SJ
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmChangeRequstListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectProgrmChangeRequstNo_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select nvl(max(REQUST_NO),0)+1 AS "rqesterNo"
+ from COMTHPROGRMCHANGEDTLS
+
+ </select>
+
+ <select id="selectProgrmChangeRequst_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultMap="progrmManageDtl">
+
+ SELECT
+ PROGRM_FILE_NM AS "PROGRM_FILE_NM"
+ , REQUST_NO AS "REQUST_NO"
+ , RQESTER_ID AS "RQESTER_ID"
+ , CHANGE_REQUST_CN AS "CHANGE_REQUST_CN"
+ , REQUST_PROCESS_CN AS "REQUST_PROCESS_CN"
+ , OPETR_ID AS "OPETR_ID"
+ , trim(PROCESS_STTUS_CODE) AS "PROCESS_STTUS_CODE"
+ , PROCESS_DE AS "PROCESS_DE"
+ , RQESTDE AS "RQESTDE"
+ , REQUST_SJ AS "REQUST_SJ"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </select>
+
+ <insert id="insertProgrmChangeRequst_S" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ INSERT INTO COMTHPROGRMCHANGEDTLS
+ ( PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , RQESTDE
+ , REQUST_SJ
+ ,PROCESS_STTUS_CODE)
+ VALUES ( #{progrmFileNm}
+ , #{rqesterNo}
+ , #{rqesterPersonId}
+ , #{changerqesterCn}
+ , #{rqesterDe}
+ , #{rqesterSj}
+ , 'A')
+
+ </insert>
+
+ <update id="updateProgrmChangeRequst_S" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET RQESTER_ID = #{rqesterPersonId}
+ , CHANGE_REQUST_CN = #{changerqesterCn}
+ , REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , RQESTDE = #{rqesterDe}
+ , REQUST_SJ = #{rqesterSj}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <delete id="deleteProgrmChangeRequst_S">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </delete>
+
+ <update id="updateProgrmChangeRequstProcess_S" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET CHANGE_REQUST_CN = #{changerqesterCn}
+ , REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , OPETR_ID = #{opetrId}
+ , PROCESS_STTUS_CODE = #{processSttus}
+ , PROCESS_DE = #{processDe}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <select id="selectChangeRequstProcessList_D" parameterType="comDefaultVO" resultMap="progrmManageDtl">
+
+ SELECT
+ PROGRM_FILE_NM AS "PROGRM_FILE_NM"
+ , REQUST_NO AS "REQUST_NO"
+ , RQESTER_ID AS "RQESTER_ID"
+ , CHANGE_REQUST_CN AS "CHANGE_REQUST_CN"
+ , REQUST_PROCESS_CN AS "REQUST_PROCESS_CN"
+ , OPETR_ID AS "OPETR_ID"
+ , trim(PROCESS_STTUS_CODE) AS "PROCESS_STTUS_CODE"
+ , PROCESS_DE AS "PROCESS_DE"
+ , RQESTDE AS "RQESTDE"
+ , REQUST_SJ AS "REQUST_SJ"
+ FROM (
+ SELECT rownum rn
+ , TB.PROGRM_FILE_NM
+ , TB.REQUST_NO
+ , TB.RQESTER_ID
+ , TB.CHANGE_REQUST_CN
+ , TB.REQUST_PROCESS_CN
+ , TB.OPETR_ID
+ , TB.PROCESS_STTUS_CODE
+ , TB.PROCESS_DE
+ , TB.RQESTDE
+ , TB.REQUST_SJ
+ FROM (
+ SELECT
+ PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , REQUST_PROCESS_CN
+ , OPETR_ID
+ , PROCESS_STTUS_CODE
+ , PROCESS_DE
+ , RQESTDE
+ , REQUST_SJ
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ ORDER BY REQUST_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 binary(PROCESS_DE) >= #{searchKeywordFrom} and binary(PROCESS_DE) =< #{searchKeywordTo} -->
+ <select id="selectChangeRequstProcessListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(REQUST_NO) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <delete id="deleteAllProgrmDtls">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+
+ </delete>
+
+ <select id="selectRqesterEmail" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select user_email AS tmpEmail from COMVNUSERMASTER
+ where ESNTL_ID = #{rqesterPersonId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램목록 관리 -->
+ <resultMap id="progrmManage" type="egovframework.com.sym.prm.service.ProgrmManageVO">
+ <result property="progrmFileNm" column="progrmFileNm"/>
+ <result property="progrmStrePath" column="progrmStrePath"/>
+ <result property="progrmKoreanNm" column="progrmKoreanNm"/>
+ <result property="progrmDc" column="progrmDc"/>
+ <result property="URL" column="URL"/>
+ </resultMap>
+
+ <select id="selectProgrmList_D" parameterType="comDefaultVO" resultMap="progrmManage">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE binary(PROGRM_KOREAN_NM) like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTNPROGRMLIST
+ WHERE binary(PROGRM_KOREAN_NM) like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <!-- 파일명존재여부 조회 -->
+ <select id="selectProgrmNMTotCnt" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{searchKeyword}
+
+ </select>
+
+ <select id="selectProgrm_D" resultType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , PROGRM_STRE_PATH AS progrmStrePath
+ , PROGRM_KOREAN_NM AS progrmKoreanNm
+ , PROGRM_DC AS progrmDc
+ , URL AS URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{progrmFileNm}
+
+ </select>
+
+ <insert id="insertProgrm_S">
+
+ INSERT INTO COMTNPROGRMLIST
+ ( PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL )
+ VALUES ( #{progrmFileNm}
+ , #{progrmStrePath}
+ , #{progrmKoreanNm}
+ , #{progrmDc}
+ , #{URL} )
+
+ </insert>
+
+ <update id="updateProgrm_S">
+
+ UPDATE COMTNPROGRMLIST
+ SET PROGRM_STRE_PATH=#{progrmStrePath}
+ , PROGRM_KOREAN_NM=#{progrmKoreanNm}
+ , PROGRM_DC =#{progrmDc}
+ , URL =#{URL}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </update>
+
+ <delete id="deleteProgrm_S">
+
+ DELETE FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </delete>
+
+ <delete id="progrmManageDAO.deleteAllProgrm">
+
+ DELETE FROM COMTNPROGRMLIST
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectProgrmListTotCnt" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt FROM COMTNPROGRMLIST
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램목록 관리 -->
+ <resultMap id="progrmManage" type="egovframework.com.sym.prm.service.ProgrmManageVO">
+ <result property="progrmFileNm" column="progrmFileNm"/>
+ <result property="progrmStrePath" column="progrmStrePath"/>
+ <result property="progrmKoreanNm" column="progrmKoreanNm"/>
+ <result property="progrmDc" column="progrmDc"/>
+ <result property="URL" column="URL"/>
+ </resultMap>
+
+ <select id="selectProgrmList_D" parameterType="comDefaultVO" resultMap="progrmManage">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , substr(PROGRM_DC, 1, 18)||'...' AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 , PROGRM_DC AS "progrmDc" -->
+ <select id="selectProgrmListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <!-- 파일명존재여부 조회 -->
+ <select id="selectProgrmNMTotCnt" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{searchKeyword}
+
+ </select>
+
+ <select id="selectProgrm_D" resultType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{progrmFileNm}
+
+ </select>
+
+ <insert id="insertProgrm_S">
+
+ INSERT INTO COMTNPROGRMLIST
+ ( PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL )
+ VALUES ( #{progrmFileNm}
+ , #{progrmStrePath}
+ , #{progrmKoreanNm}
+ , #{progrmDc}
+ , #{URL} )
+
+ </insert>
+
+ <update id="updateProgrm_S">
+
+ UPDATE COMTNPROGRMLIST
+ SET PROGRM_STRE_PATH=#{progrmStrePath}
+ , PROGRM_KOREAN_NM=#{progrmKoreanNm}
+ , PROGRM_DC =#{progrmDc}
+ , URL =#{URL}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </update>
+
+ <delete id="deleteProgrm_S">
+
+ DELETE FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </delete>
+
+ <delete id="deleteAllProgrm">
+
+ DELETE FROM COMTNPROGRMLIST
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectProgrmListTotCnt" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO" resultType="int">
+
+ SELECT COUNT(PROGRM_FILE_NM) AS "totcnt" FROM COMTNPROGRMLIST
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_mysql.xml (revision 7)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램 변경요청 -->
+ <resultMap id="progrmManageDtlVO" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ <result property="rqesterNo" column="REQUST_NO"/>
+ <result property="rqesterPersonId" column="RQESTER_ID"/>
+ <result property="changerqesterCn" column="CHANGE_REQUST_CN"/>
+ <result property="rqesterProcessCn" column="REQUST_PROCESS_CN"/>
+ <result property="opetrId" column="OPETR_ID"/>
+ <result property="processSttus" column="PROCESS_STTUS_CODE"/>
+ <result property="processDe" column="PROCESS_DE"/>
+ <result property="rqesterDe" column="RQESTDE"/>
+ <result property="rqesterSj" column="REQUST_SJ"/>
+ </resultMap>
+
+ <!-- 프로그램 변경요청 TMP -->
+ <resultMap id="progrmManageDtl_Temp" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="rqesterNo" column="REQUST_NO"/>
+ </resultMap>
+
+ <select id="selectProgrmChangeRequstList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , REQUST_NO AS rqesterNo
+ , RQESTER_ID AS rqesterPersonId
+ , CHANGE_REQUST_CN AS changerqesterCn
+ , REQUST_PROCESS_CN AS rqesterProcessCn
+ , OPETR_ID AS opetrId
+ , PROCESS_STTUS_CODE AS processSttus
+ , PROCESS_DE AS processDe
+ , RQESTDE AS rqesterDe
+ , REQUST_SJ AS rqesterSj
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE binary(PROGRM_FILE_NM) like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmChangeRequstListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE binary(PROGRM_FILE_NM) like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <select id="selectProgrmChangeRequstNo_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultMap="progrmManageDtl_Temp">
+
+ select IFNULL(max(REQUST_NO),0)+1 AS REQUST_NO
+ from COMTHPROGRMCHANGEDTLS
+
+ </select>
+
+ <select id="selectProgrmChangeRequst_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , REQUST_NO AS rqesterNo
+ , RQESTER_ID AS rqesterPersonId
+ , CHANGE_REQUST_CN AS changerqesterCn
+ , REQUST_PROCESS_CN AS rqesterProcessCn
+ , OPETR_ID AS opetrId
+ , PROCESS_STTUS_CODE AS processSttus
+ , PROCESS_DE AS processDe
+ , RQESTDE AS rqesterDe
+ , REQUST_SJ AS rqesterSj
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </select>
+
+ <insert id="insertProgrmChangeRequst_S">
+
+ INSERT INTO COMTHPROGRMCHANGEDTLS
+ ( PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , RQESTDE
+ , REQUST_SJ
+ ,PROCESS_STTUS_CODE)
+ VALUES ( #{progrmFileNm}
+ , #{rqesterNo}
+ , #{rqesterPersonId}
+ , #{changerqesterCn}
+ , #{rqesterDe}
+ , #{rqesterSj}
+ , 'A')
+
+ </insert>
+
+ <update id="updateProgrmChangeRequst_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET RQESTER_ID = #{rqesterPersonId}
+ , CHANGE_REQUST_CN = #{changerqesterCn}
+ , RQESTDE = #{rqesterDe}
+ , REQUST_SJ = #{rqesterSj}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <delete id="deleteProgrmChangeRequst_S">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </delete>
+
+ <update id="updateProgrmChangeRequstProcess_S" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , OPETR_ID = #{opetrId}
+ , PROCESS_STTUS_CODE = #{processSttus}
+ , PROCESS_DE = #{processDe}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <select id="selectChangeRequstProcessList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , REQUST_NO AS rqesterNo
+ , RQESTER_ID AS rqesterPersonId
+ , CHANGE_REQUST_CN AS changerqesterCn
+ , REQUST_PROCESS_CN AS rqesterProcessCn
+ , OPETR_ID AS opetrId
+ , PROCESS_STTUS_CODE AS processSttus
+ , PROCESS_DE AS processDe
+ , RQESTDE AS rqesterDe
+ , REQUST_SJ AS rqesterSj
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ binary(PROCESS_STTUS_CODE) like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ binary(PROCESS_STTUS_CODE) = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ binary(RQESTER_ID) like CONCAT('%', #{searchKeyword}, '%')
+ </if>
+ ORDER BY REQUST_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 총건수 조회 binary(PROCESS_DE) >= #{searchKeywordFrom} and binary(PROCESS_DE) =< #{searchKeywordTo} -->
+ <select id="selectChangeRequstProcessListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ binary(PROCESS_STTUS_CODE) like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ binary(PROCESS_STTUS_CODE) = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ binary(RQESTER_ID) like CONCAT('%', #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <delete id="deleteAllProgrmDtls">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+
+ </delete>
+
+ <select id="selectRqesterEmail" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select user_email AS tmpEmail from COMVNUSERMASTER
+ where ESNTL_ID = #{rqesterPersonId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램목록 관리 -->
+ <resultMap id="progrmManage" type="egovframework.com.sym.prm.service.ProgrmManageVO">
+ <result property="progrmFileNm" column="progrmFileNm"/>
+ <result property="progrmStrePath" column="progrmStrePath"/>
+ <result property="progrmKoreanNm" column="progrmKoreanNm"/>
+ <result property="progrmDc" column="progrmDc"/>
+ <result property="URL" column="URL"/>
+ </resultMap>
+
+ <select id="selectProgrmList_D" parameterType="comDefaultVO" resultMap="progrmManage">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , dbms_lob.substr(PROGRM_DC, 10, 1)||'...' AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 , PROGRM_DC AS "progrmDc" -->
+ <select id="selectProgrmListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <!-- 파일명존재여부 조회 -->
+ <select id="selectProgrmNMTotCnt" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{searchKeyword}
+
+ </select>
+
+ <select id="selectProgrm_D" resultType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{progrmFileNm}
+
+ </select>
+
+ <insert id="insertProgrm_S">
+
+ INSERT INTO COMTNPROGRMLIST
+ ( PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL )
+ VALUES ( #{progrmFileNm}
+ , #{progrmStrePath}
+ , #{progrmKoreanNm}
+ , #{progrmDc}
+ , #{URL} )
+
+ </insert>
+
+ <update id="updateProgrm_S">
+
+ UPDATE COMTNPROGRMLIST
+ SET PROGRM_STRE_PATH=#{progrmStrePath}
+ , PROGRM_KOREAN_NM=#{progrmKoreanNm}
+ , PROGRM_DC =#{progrmDc}
+ , URL =#{URL}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </update>
+
+ <delete id="deleteProgrm_S">
+
+ DELETE FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </delete>
+
+ <delete id="deleteAllProgrm">
+
+ DELETE FROM COMTNPROGRMLIST
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectProgrmListTotCnt" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO" resultType="int">
+
+ SELECT COUNT(PROGRM_FILE_NM) AS "totcnt" FROM COMTNPROGRMLIST
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_tibero.xml (revision 7)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램 변경요청 -->
+ <resultMap id="progrmManageDtlVO" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ <result property="rqesterNo" column="REQUST_NO"/>
+ <result property="rqesterPersonId" column="RQESTER_ID"/>
+ <result property="changerqesterCn" column="CHANGE_REQUST_CN"/>
+ <result property="rqesterProcessCn" column="REQUST_PROCESS_CN"/>
+ <result property="opetrId" column="OPETR_ID"/>
+ <result property="processSttus" column="PROCESS_STTUS_CODE"/>
+ <result property="processDe" column="PROCESS_DE"/>
+ <result property="rqesterDe" column="RQESTDE"/>
+ <result property="rqesterSj" column="REQUST_SJ"/>
+ </resultMap>
+
+ <!-- 프로그램 변경요청 TMP -->
+ <resultMap id="progrmManageDtl_Temp" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="rqesterNo" column="REQUST_NO"/>
+ </resultMap>
+
+ <select id="selectProgrmChangeRequstList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , dbms_lob.substr(CHANGE_REQUST_CN, 10, 1)||'...' AS "changerqesterCn"
+ , dbms_lob.substr(REQUST_PROCESS_CN, 10, 1)||'...' AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmChangeRequstListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectProgrmChangeRequstNo_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select nvl(max(REQUST_NO),0)+1 AS "rqesterNo"
+ from COMTHPROGRMCHANGEDTLS
+
+ </select>
+
+ <select id="selectProgrmChangeRequst_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , CHANGE_REQUST_CN AS "changerqesterCn"
+ , REQUST_PROCESS_CN AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </select>
+
+ <insert id="insertProgrmChangeRequst_S">
+
+ INSERT INTO COMTHPROGRMCHANGEDTLS
+ ( PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , RQESTDE
+ , REQUST_SJ
+ ,PROCESS_STTUS_CODE)
+ VALUES ( #{progrmFileNm}
+ , #{rqesterNo}
+ , #{rqesterPersonId}
+ , #{changerqesterCn}
+ , #{rqesterDe}
+ , #{rqesterSj}
+ , 'A')
+
+ </insert>
+
+ <update id="updateProgrmChangeRequst_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET RQESTER_ID = #{rqesterPersonId}
+ , CHANGE_REQUST_CN = #{changerqesterCn}
+ , RQESTDE = #{rqesterDe}
+ , REQUST_SJ = #{rqesterSj}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <delete id="deleteProgrmChangeRequst_S">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </delete>
+
+ <update id="updateProgrmChangeRequstProcess_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , OPETR_ID = #{opetrId}
+ , PROCESS_STTUS_CODE = #{processSttus}
+ , PROCESS_DE = #{processDe}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <select id="selectChangeRequstProcessList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , dbms_lob.substr(CHANGE_REQUST_CN, 10, 1)||'...' AS "changerqesterCn"
+ , dbms_lob.substr(REQUST_PROCESS_CN, 10, 1)||'...' AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ ORDER BY REQUST_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 binary(PROCESS_DE) >= #{searchKeywordFrom} and binary(PROCESS_DE) =< #{searchKeywordTo} -->
+ <select id="selectChangeRequstProcessListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(REQUST_NO) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <delete id="deleteAllProgrmDtls">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+
+ </delete>
+
+ <select id="selectRqesterEmail" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select user_email AS tmpEmail from COMVNUSERMASTER
+ where ESNTL_ID = #{rqesterPersonId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램목록 관리 -->
+ <resultMap id="progrmManage" type="egovframework.com.sym.prm.service.ProgrmManageVO">
+ <result property="progrmFileNm" column="progrmFileNm"/>
+ <result property="progrmStrePath" column="progrmStrePath"/>
+ <result property="progrmKoreanNm" column="progrmKoreanNm"/>
+ <result property="progrmDc" column="progrmDc"/>
+ <result property="URL" column="URL"/>
+ </resultMap>
+
+ <select id="selectProgrmList_D" parameterType="comDefaultVO" resultMap="progrmManage">
+
+ SELECT PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM ( SELECT rownum rn,
+ TB.PROGRM_FILE_NM
+ , TB.PROGRM_STRE_PATH
+ , TB.PROGRM_KOREAN_NM
+ , TB.PROGRM_DC
+ , TB.URL
+ FROM (
+ SELECT
+ PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <!-- 파일명존재여부 조회 -->
+ <select id="selectProgrmNMTotCnt" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{searchKeyword}
+
+ </select>
+
+ <select id="selectProgrm_D" resultMap="progrmManage">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{progrmFileNm}
+
+ </select>
+
+ <insert id="insertProgrm_S" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ INSERT INTO COMTNPROGRMLIST
+ ( PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL )
+ VALUES ( #{progrmFileNm}
+ , #{progrmStrePath}
+ , #{progrmKoreanNm}
+ , #{progrmDc}
+ , #{URL} )
+
+ </insert>
+
+ <update id="updateProgrm_S" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ UPDATE COMTNPROGRMLIST
+ SET PROGRM_STRE_PATH =#{progrmStrePath}
+ , PROGRM_KOREAN_NM=#{progrmKoreanNm}
+ , PROGRM_DC =#{progrmDc}
+ , URL =#{URL}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </update>
+
+ <delete id="deleteProgrm_S">
+
+ DELETE FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </delete>
+
+ <delete id="deleteAllProgrm">
+
+ DELETE FROM COMTNPROGRMLIST
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectProgrmListTotCnt" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO" resultType="int">
+
+ SELECT COUNT(PROGRM_FILE_NM) AS "totcnt" FROM COMTNPROGRMLIST
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_maria.xml (revision 7)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램 변경요청 -->
+ <resultMap id="progrmManageDtlVO" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ <result property="rqesterNo" column="REQUST_NO"/>
+ <result property="rqesterPersonId" column="RQESTER_ID"/>
+ <result property="changerqesterCn" column="CHANGE_REQUST_CN"/>
+ <result property="rqesterProcessCn" column="REQUST_PROCESS_CN"/>
+ <result property="opetrId" column="OPETR_ID"/>
+ <result property="processSttus" column="PROCESS_STTUS_CODE"/>
+ <result property="processDe" column="PROCESS_DE"/>
+ <result property="rqesterDe" column="RQESTDE"/>
+ <result property="rqesterSj" column="REQUST_SJ"/>
+ </resultMap>
+
+ <!-- 프로그램 변경요청 TMP -->
+ <resultMap id="progrmManageDtl_Temp" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="rqesterNo" column="REQUST_NO"/>
+ </resultMap>
+
+ <select id="selectProgrmChangeRequstList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , REQUST_NO AS rqesterNo
+ , RQESTER_ID AS rqesterPersonId
+ , CHANGE_REQUST_CN AS changerqesterCn
+ , REQUST_PROCESS_CN AS rqesterProcessCn
+ , OPETR_ID AS opetrId
+ , PROCESS_STTUS_CODE AS processSttus
+ , PROCESS_DE AS processDe
+ , RQESTDE AS rqesterDe
+ , REQUST_SJ AS rqesterSj
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE binary(PROGRM_FILE_NM) like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmChangeRequstListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE binary(PROGRM_FILE_NM) like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <select id="selectProgrmChangeRequstNo_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultMap="progrmManageDtl_Temp">
+
+ select IFNULL(max(REQUST_NO),0)+1 AS REQUST_NO
+ from COMTHPROGRMCHANGEDTLS
+
+ </select>
+
+ <select id="selectProgrmChangeRequst_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , REQUST_NO AS rqesterNo
+ , RQESTER_ID AS rqesterPersonId
+ , CHANGE_REQUST_CN AS changerqesterCn
+ , REQUST_PROCESS_CN AS rqesterProcessCn
+ , OPETR_ID AS opetrId
+ , PROCESS_STTUS_CODE AS processSttus
+ , PROCESS_DE AS processDe
+ , RQESTDE AS rqesterDe
+ , REQUST_SJ AS rqesterSj
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </select>
+
+ <insert id="insertProgrmChangeRequst_S">
+
+ INSERT INTO COMTHPROGRMCHANGEDTLS
+ ( PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , RQESTDE
+ , REQUST_SJ
+ ,PROCESS_STTUS_CODE)
+ VALUES ( #{progrmFileNm}
+ , #{rqesterNo}
+ , #{rqesterPersonId}
+ , #{changerqesterCn}
+ , #{rqesterDe}
+ , #{rqesterSj}
+ , 'A')
+
+ </insert>
+
+ <update id="updateProgrmChangeRequst_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET RQESTER_ID = #{rqesterPersonId}
+ , CHANGE_REQUST_CN = #{changerqesterCn}
+ , RQESTDE = #{rqesterDe}
+ , REQUST_SJ = #{rqesterSj}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <delete id="deleteProgrmChangeRequst_S">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </delete>
+
+ <update id="updateProgrmChangeRequstProcess_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , OPETR_ID = #{opetrId}
+ , PROCESS_STTUS_CODE = #{processSttus}
+ , PROCESS_DE = #{processDe}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <select id="selectChangeRequstProcessList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , REQUST_NO AS rqesterNo
+ , RQESTER_ID AS rqesterPersonId
+ , CHANGE_REQUST_CN AS changerqesterCn
+ , REQUST_PROCESS_CN AS rqesterProcessCn
+ , OPETR_ID AS opetrId
+ , PROCESS_STTUS_CODE AS processSttus
+ , PROCESS_DE AS processDe
+ , RQESTDE AS rqesterDe
+ , REQUST_SJ AS rqesterSj
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ binary(PROCESS_STTUS_CODE) like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ binary(PROCESS_STTUS_CODE) = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ binary(RQESTER_ID) like CONCAT('%', #{searchKeyword}, '%')
+ </if>
+ ORDER BY REQUST_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 총건수 조회 binary(PROCESS_DE) >= #{searchKeywordFrom} and binary(PROCESS_DE) =< #{searchKeywordTo} -->
+ <select id="selectChangeRequstProcessListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ binary(PROCESS_STTUS_CODE) like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ binary(PROCESS_STTUS_CODE) = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ binary(RQESTER_ID) like CONCAT('%', #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <delete id="deleteAllProgrmDtls">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+
+ </delete>
+
+ <select id="selectRqesterEmail" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultMap="progrmManageDtlVO">
+
+ select user_email AS tmpEmail from COMVNUSERMASTER
+ where ESNTL_ID = #{rqesterPersonId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_postgres.xml (revision 7)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램 변경요청 -->
+ <resultMap id="progrmManageDtlVO" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ <result property="rqesterNo" column="REQUST_NO"/>
+ <result property="rqesterPersonId" column="RQESTER_ID"/>
+ <result property="changerqesterCn" column="CHANGE_REQUST_CN"/>
+ <result property="rqesterProcessCn" column="REQUST_PROCESS_CN"/>
+ <result property="opetrId" column="OPETR_ID"/>
+ <result property="processSttus" column="PROCESS_STTUS_CODE"/>
+ <result property="processDe" column="PROCESS_DE"/>
+ <result property="rqesterDe" column="RQESTDE"/>
+ <result property="rqesterSj" column="REQUST_SJ"/>
+ </resultMap>
+
+ <!-- 프로그램 변경요청 TMP -->
+ <resultMap id="progrmManageDtl_Temp" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="rqesterNo" column="REQUST_NO"/>
+ </resultMap>
+
+ <select id="selectProgrmChangeRequstList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , CHANGE_REQUST_CN AS "changerqesterCn"
+ , REQUST_PROCESS_CN AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , PROCESS_STTUS_CODE AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmChangeRequstListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <select id="selectProgrmChangeRequstNo_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultMap="progrmManageDtl_Temp">
+
+ select COALESCE(max(REQUST_NO),0)+1 AS rqesterNo
+ from COMTHPROGRMCHANGEDTLS
+
+ </select>
+
+ <select id="selectProgrmChangeRequst_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , REQUST_NO AS rqesterNo
+ , RQESTER_ID AS rqesterPersonId
+ , CHANGE_REQUST_CN AS changerqesterCn
+ , REQUST_PROCESS_CN AS rqesterProcessCn
+ , OPETR_ID AS opetrId
+ , PROCESS_STTUS_CODE AS processSttus
+ , PROCESS_DE AS processDe
+ , RQESTDE AS rqesterDe
+ , REQUST_SJ AS rqesterSj
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </select>
+
+ <insert id="insertProgrmChangeRequst_S">
+
+ INSERT INTO COMTHPROGRMCHANGEDTLS
+ ( PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , RQESTDE
+ , REQUST_SJ
+ ,PROCESS_STTUS_CODE)
+ VALUES ( #{progrmFileNm}
+ , #{rqesterNo}
+ , #{rqesterPersonId}
+ , #{changerqesterCn}
+ , #{rqesterDe}
+ , #{rqesterSj}
+ , 'A')
+
+ </insert>
+
+ <update id="updateProgrmChangeRequst_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET RQESTER_ID = #{rqesterPersonId}
+ , CHANGE_REQUST_CN = #{changerqesterCn}
+ , RQESTDE = #{rqesterDe}
+ , REQUST_SJ = #{rqesterSj}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <delete id="deleteProgrmChangeRequst_S">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </delete>
+
+ <update id="updateProgrmChangeRequstProcess_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , OPETR_ID = #{opetrId}
+ , PROCESS_STTUS_CODE = #{processSttus}
+ , PROCESS_DE = #{processDe}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <select id="selectChangeRequstProcessList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , CHANGE_REQUST_CN AS "changerqesterCn"
+ , REQUST_PROCESS_CN AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , PROCESS_STTUS_CODE AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like CONCAT('%', #{searchKeyword}, '%')
+ </if>
+ ORDER BY REQUST_NO ASC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <!-- 총건수 조회 PROCESS_DE >= #{searchKeywordFrom} and PROCESS_DE =< #{searchKeywordTo} -->
+ <select id="selectChangeRequstProcessListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like CONCAT('%', #{searchKeyword}, '%')
+ </if>
+ </select>
+
+ <delete id="deleteAllProgrmDtls">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+
+ </delete>
+
+ <select id="selectRqesterEmail" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultMap="progrmManageDtlVO">
+
+ select user_email AS tmpEmail from COMVNUSERMASTER
+ where ESNTL_ID = #{rqesterPersonId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램목록 관리 -->
+ <resultMap id="progrmManage" type="egovframework.com.sym.prm.service.ProgrmManageVO">
+ <result property="progrmFileNm" column="progrmFileNm"/>
+ <result property="progrmStrePath" column="progrmStrePath"/>
+ <result property="progrmKoreanNm" column="progrmKoreanNm"/>
+ <result property="progrmDc" column="progrmDc"/>
+ <result property="URL" column="URL"/>
+ </resultMap>
+
+ <select id="selectProgrmList_D" parameterType="comDefaultVO" resultMap="progrmManage">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <!-- 파일명존재여부 조회 -->
+ <select id="selectProgrmNMTotCnt" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{searchKeyword}
+
+ </select>
+
+ <select id="selectProgrm_D" resultType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{progrmFileNm}
+
+ </select>
+
+ <insert id="insertProgrm_S">
+
+ INSERT INTO COMTNPROGRMLIST
+ ( PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL )
+ VALUES ( #{progrmFileNm}
+ , #{progrmStrePath}
+ , #{progrmKoreanNm}
+ , #{progrmDc}
+ , #{URL} )
+
+ </insert>
+
+ <update id="updateProgrm_S">
+
+ UPDATE COMTNPROGRMLIST
+ SET PROGRM_STRE_PATH=#{progrmStrePath}
+ , PROGRM_KOREAN_NM=#{progrmKoreanNm}
+ , PROGRM_DC =#{progrmDc}
+ , URL =#{URL}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </update>
+
+ <delete id="deleteProgrm_S">
+
+ DELETE FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </delete>
+
+ <delete id="deleteAllProgrm">
+
+ DELETE FROM COMTNPROGRMLIST
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectProgrmListTotCnt" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO" resultType="int">
+
+ SELECT COUNT(PROGRM_FILE_NM) AS "totcnt" FROM COMTNPROGRMLIST
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램 변경요청 -->
+ <resultMap id="progrmManageDtlVO" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ <result property="rqesterNo" column="REQUST_NO"/>
+ <result property="rqesterPersonId" column="RQESTER_ID"/>
+ <result property="changerqesterCn" column="CHANGE_REQUST_CN"/>
+ <result property="rqesterProcessCn" column="REQUST_PROCESS_CN"/>
+ <result property="opetrId" column="OPETR_ID"/>
+ <result property="processSttus" column="PROCESS_STTUS_CODE"/>
+ <result property="processDe" column="PROCESS_DE"/>
+ <result property="rqesterDe" column="RQESTDE"/>
+ <result property="rqesterSj" column="REQUST_SJ"/>
+ </resultMap>
+
+ <!-- 프로그램 변경요청 TMP -->
+ <resultMap id="progrmManageDtl_Temp" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="rqesterNo" column="REQUST_NO"/>
+ </resultMap>
+
+ <select id="selectProgrmChangeRequstList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , substr(CHANGE_REQUST_CN, 1, 18)||'...' AS "changerqesterCn"
+ , substr(REQUST_PROCESS_CN, 1, 18)||'...' AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmChangeRequstListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectProgrmChangeRequstNo_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select nvl(max(REQUST_NO),0)+1 AS "rqesterNo"
+ from COMTHPROGRMCHANGEDTLS
+
+ </select>
+
+ <select id="selectProgrmChangeRequst_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , CHANGE_REQUST_CN AS "changerqesterCn"
+ , REQUST_PROCESS_CN AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </select>
+
+ <insert id="insertProgrmChangeRequst_S">
+
+ INSERT INTO COMTHPROGRMCHANGEDTLS
+ ( PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , RQESTDE
+ , REQUST_SJ
+ ,PROCESS_STTUS_CODE)
+ VALUES ( #{progrmFileNm}
+ , #{rqesterNo}
+ , #{rqesterPersonId}
+ , #{changerqesterCn}
+ , #{rqesterDe}
+ , #{rqesterSj}
+ , 'A')
+
+ </insert>
+
+ <update id="updateProgrmChangeRequst_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET RQESTER_ID = #{rqesterPersonId}
+ , CHANGE_REQUST_CN = #{changerqesterCn}
+ , RQESTDE = #{rqesterDe}
+ , REQUST_SJ = #{rqesterSj}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <delete id="deleteProgrmChangeRequst_S">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </delete>
+
+ <update id="updateProgrmChangeRequstProcess_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , OPETR_ID = #{opetrId}
+ , PROCESS_STTUS_CODE = #{processSttus}
+ , PROCESS_DE = #{processDe}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <select id="selectChangeRequstProcessList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , substr(CHANGE_REQUST_CN, 1, 18)||'...' AS "changerqesterCn"
+ , substr(REQUST_PROCESS_CN, 1, 18)||'...' AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ ORDER BY REQUST_NO ASC
+ ) TB ) Z WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 binary(PROCESS_DE) >= #{searchKeywordFrom} and binary(PROCESS_DE) =< #{searchKeywordTo} -->
+ <select id="selectChangeRequstProcessListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(REQUST_NO) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <delete id="deleteAllProgrmDtls">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+
+ </delete>
+
+ <select id="selectRqesterEmail" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select user_email AS tmpEmail from COMVNUSERMASTER
+ where ESNTL_ID = #{rqesterPersonId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_oracle.xml (revision 7)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램 변경요청 -->
+ <resultMap id="progrmManageDtlVO" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="progrmFileNm" column="PROGRM_FILE_NM"/>
+ <result property="rqesterNo" column="REQUST_NO"/>
+ <result property="rqesterPersonId" column="RQESTER_ID"/>
+ <result property="changerqesterCn" column="CHANGE_REQUST_CN"/>
+ <result property="rqesterProcessCn" column="REQUST_PROCESS_CN"/>
+ <result property="opetrId" column="OPETR_ID"/>
+ <result property="processSttus" column="PROCESS_STTUS_CODE"/>
+ <result property="processDe" column="PROCESS_DE"/>
+ <result property="rqesterDe" column="RQESTDE"/>
+ <result property="rqesterSj" column="REQUST_SJ"/>
+ </resultMap>
+
+ <!-- 프로그램 변경요청 TMP -->
+ <resultMap id="progrmManageDtl_Temp" type="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+ <result property="rqesterNo" column="REQUST_NO"/>
+ </resultMap>
+
+ <select id="selectProgrmChangeRequstList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , dbms_lob.substr(CHANGE_REQUST_CN, 10, 1)||'...' AS "changerqesterCn"
+ , dbms_lob.substr(REQUST_PROCESS_CN, 10, 1)||'...' AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmChangeRequstListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM like '%'|| #{searchKeyword}||'%'
+
+ </select>
+
+ <select id="selectProgrmChangeRequstNo_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select nvl(max(REQUST_NO),0)+1 AS "rqesterNo"
+ from COMTHPROGRMCHANGEDTLS
+
+ </select>
+
+ <select id="selectProgrmChangeRequst_D" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , CHANGE_REQUST_CN AS "changerqesterCn"
+ , REQUST_PROCESS_CN AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </select>
+
+ <insert id="insertProgrmChangeRequst_S">
+
+ INSERT INTO COMTHPROGRMCHANGEDTLS
+ ( PROGRM_FILE_NM
+ , REQUST_NO
+ , RQESTER_ID
+ , CHANGE_REQUST_CN
+ , RQESTDE
+ , REQUST_SJ
+ ,PROCESS_STTUS_CODE)
+ VALUES ( #{progrmFileNm}
+ , #{rqesterNo}
+ , #{rqesterPersonId}
+ , #{changerqesterCn}
+ , #{rqesterDe}
+ , #{rqesterSj}
+ , 'A')
+
+ </insert>
+
+ <update id="updateProgrmChangeRequst_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET RQESTER_ID = #{rqesterPersonId}
+ , CHANGE_REQUST_CN = #{changerqesterCn}
+ , RQESTDE = #{rqesterDe}
+ , REQUST_SJ = #{rqesterSj}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <delete id="deleteProgrmChangeRequst_S">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </delete>
+
+ <update id="updateProgrmChangeRequstProcess_S">
+
+ UPDATE COMTHPROGRMCHANGEDTLS
+ SET REQUST_PROCESS_CN = #{rqesterProcessCn}
+ , OPETR_ID = #{opetrId}
+ , PROCESS_STTUS_CODE = #{processSttus}
+ , PROCESS_DE = #{processDe}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+ AND REQUST_NO =#{rqesterNo}
+
+ </update>
+
+ <select id="selectChangeRequstProcessList_D" parameterType="comDefaultVO" resultType="egovMap">
+
+ SELECT * FROM ( SELECT rownum rn, TB.* FROM (
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , REQUST_NO AS "rqesterNo"
+ , RQESTER_ID AS "rqesterPersonId"
+ , dbms_lob.substr(CHANGE_REQUST_CN, 10, 1)||'...' AS "changerqesterCn"
+ , dbms_lob.substr(REQUST_PROCESS_CN, 10, 1)||'...' AS "rqesterProcessCn"
+ , OPETR_ID AS "opetrId"
+ , trim(PROCESS_STTUS_CODE) AS "processSttus"
+ , PROCESS_DE AS "processDe"
+ , RQESTDE AS "rqesterDe"
+ , REQUST_SJ AS "rqesterSj"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ ORDER BY REQUST_NO ASC
+ ) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
+
+ </select>
+
+ <!-- 총건수 조회 binary(PROCESS_DE) >= #{searchKeywordFrom} and binary(PROCESS_DE) =< #{searchKeywordTo} -->
+ <select id="selectChangeRequstProcessListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(REQUST_NO) AS "totcnt"
+ FROM COMTHPROGRMCHANGEDTLS
+ WHERE 1=1
+
+ <if test="searchCondition == 1">AND
+ PROCESS_STTUS_CODE like #{searchKeyword}
+ </if>
+ <if test="searchCondition == 2">AND
+ PROCESS_STTUS_CODE = #{searchKeyword}
+ </if>
+ <if test="searchCondition == 3">AND
+ RQESTDE between #{searchKeywordFrom} and #{searchKeywordTo}
+ </if>
+ <if test="searchCondition == 4">AND
+ RQESTER_ID like '%'||#{searchKeyword}||'%'
+ </if>
+ </select>
+
+ <delete id="deleteAllProgrmDtls">
+
+ DELETE FROM COMTHPROGRMCHANGEDTLS
+
+ </delete>
+
+ <select id="selectRqesterEmail" parameterType="egovframework.com.sym.prm.service.ProgrmManageDtlVO" resultType="egovframework.com.sym.prm.service.ProgrmManageDtlVO">
+
+ select user_email AS tmpEmail from COMVNUSERMASTER
+ where ESNTL_ID = #{rqesterPersonId}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManageDtl_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램목록 관리 -->
+ <resultMap id="progrmManage" type="egovframework.com.sym.prm.service.ProgrmManageVO">
+ <result property="progrmFileNm" column="progrmFileNm"/>
+ <result property="progrmStrePath" column="progrmStrePath"/>
+ <result property="progrmKoreanNm" column="progrmKoreanNm"/>
+ <result property="progrmDc" column="progrmDc"/>
+ <result property="URL" column="URL"/>
+ </resultMap>
+
+ <select id="selectProgrmList_D" parameterType="comDefaultVO" resultMap="progrmManage">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE binary(PROGRM_KOREAN_NM) like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTNPROGRMLIST
+ WHERE binary(PROGRM_KOREAN_NM) like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <!-- 파일명존재여부 조회 -->
+ <select id="selectProgrmNMTotCnt" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{searchKeyword}
+
+ </select>
+
+ <select id="selectProgrm_D" resultType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , PROGRM_STRE_PATH AS progrmStrePath
+ , PROGRM_KOREAN_NM AS progrmKoreanNm
+ , PROGRM_DC AS progrmDc
+ , URL AS URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{progrmFileNm}
+
+ </select>
+
+ <insert id="insertProgrm_S">
+
+ INSERT INTO COMTNPROGRMLIST
+ ( PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL )
+ VALUES ( #{progrmFileNm}
+ , #{progrmStrePath}
+ , #{progrmKoreanNm}
+ , #{progrmDc}
+ , #{URL} )
+
+ </insert>
+
+ <update id="updateProgrm_S">
+
+ UPDATE COMTNPROGRMLIST
+ SET PROGRM_STRE_PATH=#{progrmStrePath}
+ , PROGRM_KOREAN_NM=#{progrmKoreanNm}
+ , PROGRM_DC =#{progrmDc}
+ , URL =#{URL}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </update>
+
+ <delete id="deleteProgrm_S">
+
+ DELETE FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </delete>
+
+ <delete id="progrmManageDAO.deleteAllProgrm">
+
+ DELETE FROM COMTNPROGRMLIST
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectProgrmListTotCnt" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt FROM COMTNPROGRMLIST
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="progrmManageDAO">
+
+ <!-- 프로그램목록 관리 -->
+ <resultMap id="progrmManage" type="egovframework.com.sym.prm.service.ProgrmManageVO">
+ <result property="progrmFileNm" column="progrmFileNm"/>
+ <result property="progrmStrePath" column="progrmStrePath"/>
+ <result property="progrmKoreanNm" column="progrmKoreanNm"/>
+ <result property="progrmDc" column="progrmDc"/>
+ <result property="URL" column="URL"/>
+ </resultMap>
+
+ <select id="selectProgrmList_D" parameterType="comDefaultVO" resultMap="progrmManage">
+
+ SELECT
+ PROGRM_FILE_NM AS "progrmFileNm"
+ , PROGRM_STRE_PATH AS "progrmStrePath"
+ , PROGRM_KOREAN_NM AS "progrmKoreanNm"
+ , PROGRM_DC AS "progrmDc"
+ , URL AS "URL"
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like CONCAT('%', #{searchKeyword}, '%')
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+
+ </select>
+
+ <!-- 총건수 조회 -->
+ <select id="selectProgrmListTotCnt_S" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_KOREAN_NM like CONCAT('%', #{searchKeyword}, '%')
+
+ </select>
+
+ <!-- 파일명존재여부 조회 -->
+ <select id="selectProgrmNMTotCnt" parameterType="comDefaultVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{searchKeyword}
+
+ </select>
+
+ <select id="selectProgrm_D" resultType="egovframework.com.sym.prm.service.ProgrmManageVO">
+
+ SELECT
+ PROGRM_FILE_NM AS progrmFileNm
+ , PROGRM_STRE_PATH AS progrmStrePath
+ , PROGRM_KOREAN_NM AS progrmKoreanNm
+ , PROGRM_DC AS progrmDc
+ , URL AS URL
+ FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM = #{progrmFileNm}
+
+ </select>
+
+ <insert id="insertProgrm_S">
+
+ INSERT INTO COMTNPROGRMLIST
+ ( PROGRM_FILE_NM
+ , PROGRM_STRE_PATH
+ , PROGRM_KOREAN_NM
+ , PROGRM_DC
+ , URL )
+ VALUES ( #{progrmFileNm}
+ , #{progrmStrePath}
+ , #{progrmKoreanNm}
+ , #{progrmDc}
+ , #{URL} )
+
+ </insert>
+
+ <update id="updateProgrm_S">
+
+ UPDATE COMTNPROGRMLIST
+ SET PROGRM_STRE_PATH=#{progrmStrePath}
+ , PROGRM_KOREAN_NM=#{progrmKoreanNm}
+ , PROGRM_DC =#{progrmDc}
+ , URL =#{URL}
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </update>
+
+ <delete id="deleteProgrm_S">
+
+ DELETE FROM COMTNPROGRMLIST
+ WHERE PROGRM_FILE_NM=#{progrmFileNm}
+
+ </delete>
+
+ <delete id="progrmManageDAO.deleteAllProgrm">
+
+ DELETE FROM COMTNPROGRMLIST
+
+ </delete>
+
+ <!-- 메뉴정보 총건수 조회 -->
+ <select id="selectProgrmListTotCnt" parameterType="egovframework.com.sym.prm.service.ProgrmManageVO" resultType="int">
+
+ SELECT COUNT(*) AS totcnt FROM COMTNPROGRMLIST
+
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/prm/EgovProgrmManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnCodeManage">
+
+ <select id="selectCmmnCodeList" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT B.CL_CODE_NM
+ , A.CODE_ID
+ , A.CODE_ID_NM
+ , A.USE_AT
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+
+ ]]>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'1')"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'2')"> <![CDATA[ AND
+ A.CODE_ID_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.USE_AT = 'Y' ]]>
+ </if>
+
+ /* 구현 Sql */
+ <![CDATA[
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+
+ </select>
+
+ <select id="selectCmmnCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CODE_ID_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnCodeDetail" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+
+ <![CDATA[
+ SELECT B.CL_CODE_NM clCodeNm
+ , A.CL_CODE clCode
+ , A.CODE_ID codeId
+ , A.CODE_ID_NM codeIdNm
+ , A.CODE_ID_DC codeIdDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ AND A.CODE_ID = #{codeId}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCODE
+ ( CODE_ID
+ , CODE_ID_NM
+ , CODE_ID_DC
+ , CL_CODE
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{codeIdNm}
+ , #{codeIdDc}
+ , #{clCode}
+ , #{useAt}
+ , SYSDATETIME
+ , #{frstRegisterId}
+ , SYSDATETIME
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET CODE_ID_NM = #{codeIdNm}
+ , CODE_ID_DC = #{codeIdDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = SYSDATETIME
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnCodeManage">
+
+ <select id="selectCmmnCodeList" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+ <![CDATA[
+ SELECT B.CL_CODE_NM
+ , A.CODE_ID
+ , A.CODE_ID_NM
+ , A.USE_AT
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'1')"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'2')"> <![CDATA[ AND
+ A.CODE_ID_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.USE_AT = 'Y' ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="int">
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CODE_ID_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+
+ </select>
+
+ <select id="selectCmmnCodeDetail" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+ <![CDATA[
+ SELECT B.CL_CODE_NM clCodeNm
+ , A.CL_CODE clCode
+ , A.CODE_ID codeId
+ , A.CODE_ID_NM codeIdNm
+ , A.CODE_ID_DC codeIdDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ AND A.CODE_ID = #{codeId}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnCode">
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCODE
+ ( CODE_ID
+ , CODE_ID_NM
+ , CODE_ID_DC
+ , CL_CODE
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{codeIdNm}
+ , #{codeIdDc}
+ , #{clCode}
+ , #{useAt}
+ , sysdate()
+ , #{frstRegisterId}
+ , sysdate()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnCode">
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET CODE_ID_NM = #{codeIdNm}
+ , CODE_ID_DC = #{codeIdDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnCode">
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnCodeManage">
+
+ <select id="selectCmmnCodeList" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT B.CL_CODE_NM
+ , A.CODE_ID
+ , A.CODE_ID_NM
+ , A.USE_AT
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'1')"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%']]>
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'2')"> <![CDATA[ AND
+ A.CODE_ID_NM LIKE '%' || #{searchKeyword} || '%']]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.CL_CODE LIKE '%' || #{searchKeyword} || '%']]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[AND
+ A.USE_AT = 'Y']]>
+ </if>
+
+ /* 구현 Sql */
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+
+ </select>
+
+ <select id="selectCmmnCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CODE_ID_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnCodeDetail" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+
+ <![CDATA[
+ SELECT B.CL_CODE_NM clCodeNm
+ , A.CL_CODE clCode
+ , A.CODE_ID codeId
+ , A.CODE_ID_NM codeIdNm
+ , A.CODE_ID_DC codeIdDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ AND A.CODE_ID = #{codeId}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCODE
+ ( CODE_ID
+ , CODE_ID_NM
+ , CODE_ID_DC
+ , CL_CODE
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{codeIdNm}
+ , #{codeIdDc}
+ , #{clCode}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET CODE_ID_NM = #{codeIdNm}
+ , CODE_ID_DC = #{codeIdDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ ]]>
+ </update>
+
+ <delete id="deleteCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ ]]>
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnCodeManage">
+
+ <select id="selectCmmnCodeList" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT B.CL_CODE_NM
+ , A.CODE_ID
+ , A.CODE_ID_NM
+ , A.USE_AT
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'1')"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'2')"> <![CDATA[ AND
+ A.CODE_ID_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[AND
+ A.USE_AT = 'Y' ]]>
+ </if>
+
+ /* 구현 Sql */
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage} ]]>
+
+
+ </select>
+
+ <select id="selectCmmnCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CODE_ID_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnCodeDetail" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+
+ <![CDATA[
+ SELECT B.CL_CODE_NM clCodeNm
+ , A.CL_CODE clCode
+ , A.CODE_ID codeId
+ , A.CODE_ID_NM codeIdNm
+ , A.CODE_ID_DC codeIdDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ AND A.CODE_ID = #{codeId}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCODE
+ ( CODE_ID
+ , CODE_ID_NM
+ , CODE_ID_DC
+ , CL_CODE
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{codeIdNm}
+ , #{codeIdDc}
+ , #{clCode}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET CODE_ID_NM = #{codeIdNm}
+ , CODE_ID_DC = #{codeIdDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnCodeManage">
+
+ <select id="selectCmmnCodeList" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+ <![CDATA[
+ SELECT B.CL_CODE_NM
+ , A.CODE_ID
+ , A.CODE_ID_NM
+ , A.USE_AT
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'1')"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'2')"> <![CDATA[ AND
+ A.CODE_ID_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.USE_AT = 'Y' ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="int">
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CODE_ID_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+
+ </select>
+
+ <select id="selectCmmnCodeDetail" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+ <![CDATA[
+ SELECT B.CL_CODE_NM clCodeNm
+ , A.CL_CODE clCode
+ , A.CODE_ID codeId
+ , A.CODE_ID_NM codeIdNm
+ , A.CODE_ID_DC codeIdDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ AND A.CODE_ID = #{codeId}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnCode">
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCODE
+ ( CODE_ID
+ , CODE_ID_NM
+ , CODE_ID_DC
+ , CL_CODE
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{codeIdNm}
+ , #{codeIdDc}
+ , #{clCode}
+ , #{useAt}
+ , sysdate()
+ , #{frstRegisterId}
+ , sysdate()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnCode">
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET CODE_ID_NM = #{codeIdNm}
+ , CODE_ID_DC = #{codeIdDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnCode">
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnCodeManage">
+
+ <select id="selectCmmnCodeList" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT B.CL_CODE_NM
+ , A.CODE_ID
+ , A.CODE_ID_NM
+ , A.USE_AT
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'1')"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'2')"> <![CDATA[AND
+ A.CODE_ID_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[AND
+ A.USE_AT = 'Y' ]]>
+ </if>
+
+ /* 구현 Sql */
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CODE_ID_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnCodeDetail" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+
+ <![CDATA[
+ SELECT B.CL_CODE_NM clCodeNm
+ , A.CL_CODE clCode
+ , A.CODE_ID codeId
+ , A.CODE_ID_NM codeIdNm
+ , A.CODE_ID_DC codeIdDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ AND A.CODE_ID = #{codeId}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCODE
+ ( CODE_ID
+ , CODE_ID_NM
+ , CODE_ID_DC
+ , CL_CODE
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{codeIdNm}
+ , #{codeIdDc}
+ , #{clCode}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET CODE_ID_NM = #{codeIdNm}
+ , CODE_ID_DC = #{codeIdDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnCodeManage">
+
+ <select id="selectCmmnCodeList" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+ <![CDATA[
+ SELECT B.CL_CODE_NM
+ , A.CODE_ID
+ , A.CODE_ID_NM
+ , A.USE_AT
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'1')"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(searchCondition,'2')"> <![CDATA[ AND
+ A.CODE_ID_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 'clCode'"> <![CDATA[ AND
+ A.USE_AT = 'Y' ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="int">
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CODE_ID_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+
+ </select>
+
+ <select id="selectCmmnCodeDetail" parameterType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO" resultType="egovframework.com.sym.ccm.cca.service.CmmnCodeVO">
+ <![CDATA[
+ SELECT B.CL_CODE_NM clCodeNm
+ , A.CL_CODE clCode
+ , A.CODE_ID codeId
+ , A.CODE_ID_NM codeIdNm
+ , A.CODE_ID_DC codeIdDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNCODE A
+ , COMTCCMMNCLCODE B
+ WHERE A.CL_CODE = B.CL_CODE
+ AND A.CODE_ID = #{codeId}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnCode">
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCODE
+ ( CODE_ID
+ , CODE_ID_NM
+ , CODE_ID_DC
+ , CL_CODE
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{codeIdNm}
+ , #{codeIdDc}
+ , #{clCode}
+ , #{useAt}
+ , NOW()
+ , #{frstRegisterId}
+ , NOW()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnCode">
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET CODE_ID_NM = #{codeIdNm}
+ , CODE_ID_DC = #{codeIdDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = NOW()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnCode">
+ <![CDATA[
+ UPDATE COMTCCMMNCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cca/EgovCmmnCodeManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnClCodeManage">
+
+ <select id="selectCmmnClCodeList" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT CL_CODE
+ , CL_CODE_NM
+ , USE_AT
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ USE_AT = 'Y' ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnClCodeListTotCnt" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnClCodeDetail" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT CL_CODE clCode
+ , CL_CODE_NM clCodeNm
+ , CL_CODE_DC clCodeDc
+ , USE_AT useAt
+ FROM COMTCCMMNCLCODE
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnClCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCLCODE
+ ( CL_CODE
+ , CL_CODE_NM
+ , CL_CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{clCode}
+ , #{clCodeNm}
+ , #{clCodeDc}
+ , #{useAt}
+ , NOW()
+ , #{frstRegisterId}
+ , NOW()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET CL_CODE_NM = #{clCodeNm}
+ , CL_CODE_DC = #{clCodeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = NOW()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnClCode" >
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET USE_AT = 'N'
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnClCodeManage">
+
+ <select id="selectCmmnClCodeList" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCode">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT CL_CODE
+ , CL_CODE_NM
+ , USE_AT
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ USE_AT = 'Y' ]]>
+ </if>
+
+ <![CDATA[
+ /* 구현 Sql */
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnClCodeListTotCnt" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnClCodeDetail" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCode">
+
+ <![CDATA[
+ SELECT CL_CODE clCode
+ , CL_CODE_NM clCodeNm
+ , CL_CODE_DC clCodeDc
+ , USE_AT useAt
+ FROM COMTCCMMNCLCODE
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnClCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCLCODE
+ ( CL_CODE
+ , CL_CODE_NM
+ , CL_CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{clCode}
+ , #{clCodeNm}
+ , #{clCodeDc}
+ , #{useAt}
+ , SYSDATETIME
+ , #{frstRegisterId}
+ , SYSDATETIME
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET CL_CODE_NM = #{clCodeNm}
+ , CL_CODE_DC = #{clCodeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = SYSDATETIME
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET USE_AT = 'N'
+ WHERE CL_CODE = #{clCode}
+ ]]>
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnClCodeManage">
+
+ <select id="selectCmmnClCodeList" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT CL_CODE
+ , CL_CODE_NM
+ , USE_AT
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ USE_AT = 'Y' ]]>
+ </if>
+
+ /* 구현 Sql */
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnClCodeListTotCnt" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnClCodeDetail" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT CL_CODE clCode
+ , CL_CODE_NM clCodeNm
+ , CL_CODE_DC clCodeDc
+ , USE_AT useAt
+ FROM COMTCCMMNCLCODE
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnClCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCLCODE
+ ( CL_CODE
+ , CL_CODE_NM
+ , CL_CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{clCode}
+ , #{clCodeNm}
+ , #{clCodeDc}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET CL_CODE_NM = #{clCodeNm}
+ , CL_CODE_DC = #{clCodeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET USE_AT = 'N'
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnClCodeManage">
+
+ <select id="selectCmmnClCodeList" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT CL_CODE
+ , CL_CODE_NM
+ , USE_AT
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ USE_AT = 'Y' ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnClCodeListTotCnt" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnClCodeDetail" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT CL_CODE clCode
+ , CL_CODE_NM clCodeNm
+ , CL_CODE_DC clCodeDc
+ , USE_AT useAt
+ FROM COMTCCMMNCLCODE
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnClCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCLCODE
+ ( CL_CODE
+ , CL_CODE_NM
+ , CL_CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{clCode}
+ , #{clCodeNm}
+ , #{clCodeDc}
+ , #{useAt}
+ , sysdate()
+ , #{frstRegisterId}
+ , sysdate()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET CL_CODE_NM = #{clCodeNm}
+ , CL_CODE_DC = #{clCodeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnClCode" >
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET USE_AT = 'N'
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:35 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnClCodeManage">
+
+ <select id="selectCmmnClCodeList" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCode">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT CL_CODE
+ , CL_CODE_NM
+ , USE_AT
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND ]]>
+ USE_AT = 'Y'
+ </if>
+
+ <![CDATA[
+ /* 구현 Sql */
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnClCodeListTotCnt" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+
+ ]]>
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnClCodeDetail" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCode">
+
+ <![CDATA[
+ SELECT CL_CODE clCode
+ , CL_CODE_NM clCodeNm
+ , CL_CODE_DC clCodeDc
+ , USE_AT useAt
+ FROM COMTCCMMNCLCODE
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnClCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCLCODE
+ ( CL_CODE
+ , CL_CODE_NM
+ , CL_CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{clCode}
+ , #{clCodeNm}
+ , #{clCodeDc}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET CL_CODE_NM = #{clCodeNm}
+ , CL_CODE_DC = #{clCodeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET USE_AT = 'N'
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnClCodeManage">
+
+ <select id="selectCmmnClCodeList" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT CL_CODE
+ , CL_CODE_NM
+ , USE_AT
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ USE_AT = 'Y' ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnClCodeListTotCnt" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnClCodeDetail" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO">
+
+ <![CDATA[
+ SELECT CL_CODE clCode
+ , CL_CODE_NM clCodeNm
+ , CL_CODE_DC clCodeDc
+ , USE_AT useAt
+ FROM COMTCCMMNCLCODE
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnClCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCLCODE
+ ( CL_CODE
+ , CL_CODE_NM
+ , CL_CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{clCode}
+ , #{clCodeNm}
+ , #{clCodeDc}
+ , #{useAt}
+ , sysdate()
+ , #{frstRegisterId}
+ , sysdate()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET CL_CODE_NM = #{clCodeNm}
+ , CL_CODE_DC = #{clCodeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnClCode" >
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET USE_AT = 'N'
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnClCodeManage">
+
+ <select id="selectCmmnClCodeList" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCode">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT CL_CODE
+ , CL_CODE_NM
+ , USE_AT
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ USE_AT = 'Y' ]]>
+ </if>
+
+ /* 구현 Sql */
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnClCodeListTotCnt" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNCLCODE
+ WHERE 1 = 1
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ CL_CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ CL_CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnClCodeDetail" parameterType="egovframework.com.sym.ccm.ccc.service.CmmnClCodeVO" resultType="egovframework.com.sym.ccm.ccc.service.CmmnClCode">
+
+ <![CDATA[
+ SELECT CL_CODE clCode
+ , CL_CODE_NM clCodeNm
+ , CL_CODE_DC clCodeDc
+ , USE_AT useAt
+ FROM COMTCCMMNCLCODE
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnClCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNCLCODE
+ ( CL_CODE
+ , CL_CODE_NM
+ , CL_CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{clCode}
+ , #{clCodeNm}
+ , #{clCodeDc}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET CL_CODE_NM = #{clCodeNm}
+ , CL_CODE_DC = #{clCodeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </update>
+
+
+ <delete id="deleteCmmnClCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNCLCODE
+ SET USE_AT = 'N'
+ WHERE CL_CODE = #{clCode}
+ ]]>
+
+ </delete>
+
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/ccc/EgovCmmnClCodeManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_oracle.xml (revision 7)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:37 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnDetailCodeManage">
+
+ <select id="selectCmmnDetailCodeList" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT A.CODE_ID
+ , A.CODE
+ , A.CODE_NM
+ , A.USE_AT
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+
+ <![CDATA[
+ /* 구현 Sql */
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnDetailCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnDetailCodeDetail" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID codeId
+ , B.CODE_ID_NM codeIdNm
+ , A.CODE code
+ , A.CODE_NM codeNm
+ , A.CODE_DC codeDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ AND A.CODE_ID = #{codeId}
+ AND A.CODE = #{code}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnDetailCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNDETAILCODE
+ ( CODE_ID
+ , CODE
+ , CODE_NM
+ , CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{code}
+ , #{codeNm}
+ , #{codeDc}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET CODE_NM = #{codeNm}
+ , CODE_DC = #{codeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_mysql.xml (revision 7)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:37 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnDetailCodeManage">
+
+ <select id="selectCmmnDetailCodeList" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID
+ , A.CODE
+ , A.CODE_NM
+ , A.USE_AT
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnDetailCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+
+ </select>
+
+ <select id="selectCmmnDetailCodeDetail" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID codeId
+ , B.CODE_ID_NM codeIdNm
+ , A.CODE code
+ , A.CODE_NM codeNm
+ , A.CODE_DC codeDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ AND A.CODE_ID = #{codeId}
+ AND A.CODE = #{code}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnDetailCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNDETAILCODE
+ ( CODE_ID
+ , CODE
+ , CODE_NM
+ , CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{code}
+ , #{codeNm}
+ , #{codeDc}
+ , #{useAt}
+ , sysdate()
+ , #{frstRegisterId}
+ , sysdate()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET CODE_NM = #{codeNm}
+ , CODE_DC = #{codeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_altibase.xml (revision 7)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnDetailCodeManage">
+
+ <select id="selectCmmnDetailCodeList" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT A.CODE_ID
+ , A.CODE
+ , A.CODE_NM
+ , A.USE_AT
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+
+ ]]>
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+
+ <![CDATA[
+ /* 구현 Sql */
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnDetailCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnDetailCodeDetail" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID codeId
+ , B.CODE_ID_NM codeIdNm
+ , A.CODE code
+ , A.CODE_NM codeNm
+ , A.CODE_DC codeDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ AND A.CODE_ID = #{codeId}
+ AND A.CODE = #{code}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnDetailCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNDETAILCODE
+ ( CODE_ID
+ , CODE
+ , CODE_NM
+ , CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{code}
+ , #{codeNm}
+ , #{codeDc}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET CODE_NM = #{codeNm}
+ , CODE_DC = #{codeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_maria.xml (revision 7)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:37 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnDetailCodeManage">
+
+ <select id="selectCmmnDetailCodeList" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID
+ , A.CODE
+ , A.CODE_NM
+ , A.USE_AT
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnDetailCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+
+ </select>
+
+ <select id="selectCmmnDetailCodeDetail" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID codeId
+ , B.CODE_ID_NM codeIdNm
+ , A.CODE code
+ , A.CODE_NM codeNm
+ , A.CODE_DC codeDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ AND A.CODE_ID = #{codeId}
+ AND A.CODE = #{code}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnDetailCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNDETAILCODE
+ ( CODE_ID
+ , CODE
+ , CODE_NM
+ , CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{code}
+ , #{codeNm}
+ , #{codeDc}
+ , #{useAt}
+ , sysdate()
+ , #{frstRegisterId}
+ , sysdate()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET CODE_NM = #{codeNm}
+ , CODE_DC = #{codeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_tibero.xml (revision 7)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:37 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnDetailCodeManage">
+
+ <select id="selectCmmnDetailCodeList" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT A.CODE_ID
+ , A.CODE
+ , A.CODE_NM
+ , A.USE_AT
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+
+ <![CDATA[
+ /* 구현 Sql */
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnDetailCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnDetailCodeDetail" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID codeId
+ , B.CODE_ID_NM codeIdNm
+ , A.CODE code
+ , A.CODE_NM codeNm
+ , A.CODE_DC codeDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ AND A.CODE_ID = #{codeId}
+ AND A.CODE = #{code}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnDetailCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNDETAILCODE
+ ( CODE_ID
+ , CODE
+ , CODE_NM
+ , CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{code}
+ , #{codeNm}
+ , #{codeDc}
+ , #{useAt}
+ , sysdate
+ , #{frstRegisterId}
+ , sysdate
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET CODE_NM = #{codeNm}
+ , CODE_DC = #{codeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = sysdate
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_postgres.xml (revision 7)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:37 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnDetailCodeManage">
+
+ <select id="selectCmmnDetailCodeList" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID
+ , A.CODE
+ , A.CODE_NM
+ , A.USE_AT
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectCmmnDetailCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE CONCAT ('%', #{searchKeyword},'%') ]]>
+ </if>
+
+ </select>
+
+ <select id="selectCmmnDetailCodeDetail" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID codeId
+ , B.CODE_ID_NM codeIdNm
+ , A.CODE code
+ , A.CODE_NM codeNm
+ , A.CODE_DC codeDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ AND A.CODE_ID = #{codeId}
+ AND A.CODE = #{code}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnDetailCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNDETAILCODE
+ ( CODE_ID
+ , CODE
+ , CODE_NM
+ , CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{code}
+ , #{codeNm}
+ , #{codeDc}
+ , #{useAt}
+ , NOW()
+ , #{frstRegisterId}
+ , NOW()
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET CODE_NM = #{codeNm}
+ , CODE_DC = #{codeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = NOW()
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ =========== ======== =================================================
+ 2011.10.06 이기하 보안 취약점 점검사항 반영 $->#변경
+--><!--Converted at: Wed May 11 15:50:36 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="CmmnDetailCodeManage">
+
+
+ <select id="selectCmmnDetailCodeList" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ /* 구현 Sql */
+ SELECT A.CODE_ID
+ , A.CODE
+ , A.CODE_NM
+ , A.USE_AT
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+
+ <![CDATA[
+ /* 구현 Sql */
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+
+ </select>
+
+ <select id="selectCmmnDetailCodeListTotCnt" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="int">
+
+ <![CDATA[
+ SELECT COUNT(*) totcnt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ ]]>
+
+ <if test="searchCondition == 1"> <![CDATA[ AND
+ A.CODE_ID LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 2"> <![CDATA[ AND
+ A.CODE LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ <if test="searchCondition == 3"> <![CDATA[ AND
+ A.CODE_NM LIKE '%' || #{searchKeyword} || '%' ]]>
+ </if>
+ </select>
+
+ <select id="selectCmmnDetailCodeDetail" parameterType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO" resultType="egovframework.com.sym.ccm.cde.service.CmmnDetailCodeVO">
+
+ <![CDATA[
+ SELECT A.CODE_ID codeId
+ , B.CODE_ID_NM codeIdNm
+ , A.CODE code
+ , A.CODE_NM codeNm
+ , A.CODE_DC codeDc
+ , A.USE_AT useAt
+ FROM COMTCCMMNDETAILCODE A
+ , COMTCCMMNCODE B
+ WHERE B.USE_AT = 'Y'
+ AND A.CODE_ID = B.CODE_ID
+ AND A.CODE_ID = #{codeId}
+ AND A.CODE = #{code}
+ ]]>
+
+ </select>
+
+ <insert id="insertCmmnDetailCode">
+
+ <![CDATA[
+ INSERT
+ INTO COMTCCMMNDETAILCODE
+ ( CODE_ID
+ , CODE
+ , CODE_NM
+ , CODE_DC
+ , USE_AT
+ , FRST_REGIST_PNTTM
+ , FRST_REGISTER_ID
+ , LAST_UPDT_PNTTM
+ , LAST_UPDUSR_ID
+ )
+ VALUES
+ ( #{codeId}
+ , #{code}
+ , #{codeNm}
+ , #{codeDc}
+ , #{useAt}
+ , SYSDATETIME
+ , #{frstRegisterId}
+ , SYSDATETIME
+ , #{frstRegisterId}
+ )
+ ]]>
+
+ </insert>
+
+ <update id="updateCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET CODE_NM = #{codeNm}
+ , CODE_DC = #{codeDc}
+ , USE_AT = #{useAt}
+ , LAST_UPDT_PNTTM = SYSDATETIME
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </update>
+
+ <delete id="deleteCmmnDetailCode">
+
+ <![CDATA[
+ UPDATE COMTCCMMNDETAILCODE
+ SET USE_AT = 'N'
+ WHERE CODE_ID = #{codeId}
+ AND CODE = #{code}
+ ]]>
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/sym/ccm/cde/EgovCmmnDetailCodeManage_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_postgres.xml (revision 7)
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:59 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="loginPolicyDAO">
+
+ <resultMap id="loginPolicy" type="egovframework.com.uat.uap.service.LoginPolicyVO">
+ <result property="emplyrId" column="USER_ID"/>
+ <result property="emplyrNm" column="USER_NM"/>
+ <result property="emplyrSe" column="USER_SE"/>
+ <result property="ipInfo" column="IP_INFO"/>
+ <result property="dplctPermAt" column="DPLCT_PERM_AT"/>
+ <result property="lmttAt" column="LMTT_AT"/>
+ <result property="userId" column="LAST_UPDUSR_ID"/>
+ <result property="regDate" column="LAST_UPDT_PNTTM"/>
+ <result property="regYn" column="REG_YN"/>
+ </resultMap>
+
+ <select id="selectLoginPolicyList" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ B.LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ CASE WHEN B.EMPLYR_ID IS NULL THEN 'N' ELSE 'Y' END AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectLoginPolicyListTotCnt" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultType="int">
+ SELECT COUNT(*) AS totcnt
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </if>
+ </select>
+
+ <select id="selectLoginPolicy" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ CASE WHEN B.LMTT_AT IS NULL THEN 'N' ELSE B.LMTT_AT END AS LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ CASE WHEN B.EMPLYR_ID IS NULL THEN 'N' ELSE 'Y' END AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ AND A.USER_ID = #{emplyrId}
+ </select>
+
+ <insert id="insertLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ INSERT INTO COMTNLOGINPOLICY
+ (EMPLYR_ID
+ ,IP_INFO
+ ,DPLCT_PERM_AT
+ ,LMTT_AT
+ ,FRST_REGISTER_ID
+ ,FRST_REGIST_PNTTM
+ ,LAST_UPDUSR_ID
+ ,LAST_UPDT_PNTTM)
+ VALUES (#{emplyrId}
+ ,#{ipInfo}
+ ,#{dplctPermAt}
+ ,#{lmttAt}
+ ,#{userId}
+ ,NOW()
+ ,#{userId}
+ ,NOW())
+
+ </insert>
+
+ <update id="updateLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ UPDATE COMTNLOGINPOLICY
+ SET IP_INFO = #{ipInfo}
+ ,DPLCT_PERM_AT = #{dplctPermAt}
+ ,LMTT_AT = #{lmttAt}
+ ,LAST_UPDUSR_ID = #{userId}
+ ,LAST_UPDT_PNTTM = NOW()
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </update>
+
+ <delete id="deleteLoginPolicy">
+
+ DELETE FROM COMTNLOGINPOLICY
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_maria.xml (revision 7)
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:59 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="loginPolicyDAO">
+
+ <resultMap id="loginPolicy" type="egovframework.com.uat.uap.service.LoginPolicyVO">
+ <result property="emplyrId" column="USER_ID"/>
+ <result property="emplyrNm" column="USER_NM"/>
+ <result property="emplyrSe" column="USER_SE"/>
+ <result property="ipInfo" column="IP_INFO"/>
+ <result property="dplctPermAt" column="DPLCT_PERM_AT"/>
+ <result property="lmttAt" column="LMTT_AT"/>
+ <result property="userId" column="LAST_UPDUSR_ID"/>
+ <result property="regDate" column="LAST_UPDT_PNTTM"/>
+ <result property="regYn" column="REG_YN"/>
+ </resultMap>
+
+ <select id="selectLoginPolicyList" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ B.LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ IF(B.EMPLYR_ID IS NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectLoginPolicyListTotCnt" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultType="int">
+ SELECT COUNT(*) AS totcnt
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </if>
+ </select>
+
+ <select id="selectLoginPolicy" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ IF(B.LMTT_AT IS NULL, 'N', B.LMTT_AT) AS LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ IF(B.EMPLYR_ID IS NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ AND A.USER_ID = #{emplyrId}
+ </select>
+
+ <insert id="insertLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ INSERT INTO COMTNLOGINPOLICY
+ (EMPLYR_ID
+ ,IP_INFO
+ ,DPLCT_PERM_AT
+ ,LMTT_AT
+ ,FRST_REGISTER_ID
+ ,FRST_REGIST_PNTTM
+ ,LAST_UPDUSR_ID
+ ,LAST_UPDT_PNTTM)
+ VALUES (#{emplyrId}
+ ,#{ipInfo}
+ ,#{dplctPermAt}
+ ,#{lmttAt}
+ ,#{userId}
+ ,now()
+ ,#{userId}
+ ,now())
+
+ </insert>
+
+ <update id="updateLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ UPDATE COMTNLOGINPOLICY
+ SET IP_INFO = #{ipInfo}
+ ,DPLCT_PERM_AT = #{dplctPermAt}
+ ,LMTT_AT = #{lmttAt}
+ ,LAST_UPDUSR_ID = #{userId}
+ ,LAST_UPDT_PNTTM = now()
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </update>
+
+ <delete id="deleteLoginPolicy">
+
+ DELETE FROM COMTNLOGINPOLICY
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:58 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="loginPolicyDAO">
+
+ <resultMap id="loginPolicy" type="egovframework.com.uat.uap.service.LoginPolicyVO">
+ <result property="emplyrId" column="USER_ID"/>
+ <result property="emplyrNm" column="USER_NM"/>
+ <result property="emplyrSe" column="USER_SE"/>
+ <result property="ipInfo" column="IP_INFO"/>
+ <result property="dplctPermAt" column="DPLCT_PERM_AT"/>
+ <result property="lmttAt" column="LMTT_AT"/>
+ <result property="userId" column="LAST_UPDUSR_ID"/>
+ <result property="regDate" column="LAST_UPDT_PNTTM"/>
+ <result property="regYn" column="REG_YN"/>
+ </resultMap>
+
+ <select id="selectLoginPolicyList" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultMap="loginPolicy">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ B.LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ ) Z
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectLoginPolicyListTotCnt" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultType="int">
+ SELECT COUNT(*) AS totcnt
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ </select>
+
+ <select id="selectLoginPolicy" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ NVL(B.LMTT_AT,'N') AS LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ AND A.USER_ID = #{emplyrId}
+ </select>
+
+ <insert id="insertLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ INSERT INTO COMTNLOGINPOLICY
+ (EMPLYR_ID
+ ,IP_INFO
+ ,DPLCT_PERM_AT
+ ,LMTT_AT
+ ,FRST_REGISTER_ID
+ ,FRST_REGIST_PNTTM
+ ,LAST_UPDUSR_ID
+ ,LAST_UPDT_PNTTM)
+ VALUES (#{emplyrId}
+ ,#{ipInfo}
+ ,#{dplctPermAt}
+ ,#{lmttAt}
+ ,#{userId}
+ ,SYSDATETIME
+ ,#{userId}
+ ,SYSDATETIME)
+
+ </insert>
+
+ <update id="updateLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ UPDATE COMTNLOGINPOLICY
+ SET IP_INFO = #{ipInfo}
+ ,DPLCT_PERM_AT = #{dplctPermAt}
+ ,LMTT_AT = #{lmttAt}
+ ,LAST_UPDUSR_ID = #{userId}
+ ,LAST_UPDT_PNTTM = SYSDATETIME
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </update>
+
+ <delete id="deleteLoginPolicy">
+
+ DELETE FROM COMTNLOGINPOLICY
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_oracle.xml (revision 7)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:59 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="loginPolicyDAO">
+
+ <resultMap id="loginPolicy" type="egovframework.com.uat.uap.service.LoginPolicyVO">
+ <result property="emplyrId" column="USER_ID"/>
+ <result property="emplyrNm" column="USER_NM"/>
+ <result property="emplyrSe" column="USER_SE"/>
+ <result property="ipInfo" column="IP_INFO"/>
+ <result property="dplctPermAt" column="DPLCT_PERM_AT"/>
+ <result property="lmttAt" column="LMTT_AT"/>
+ <result property="userId" column="LAST_UPDUSR_ID"/>
+ <result property="regDate" column="LAST_UPDT_PNTTM"/>
+ <result property="regYn" column="REG_YN"/>
+ </resultMap>
+
+ <select id="selectLoginPolicyList" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultMap="loginPolicy">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ B.LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectLoginPolicyListTotCnt" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultType="int">
+ SELECT COUNT(*) AS totcnt
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ </select>
+
+ <select id="selectLoginPolicy" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ NVL(B.LMTT_AT,'N') AS LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ AND A.USER_ID = #{emplyrId}
+ </select>
+
+ <insert id="insertLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ INSERT INTO COMTNLOGINPOLICY
+ (EMPLYR_ID
+ ,IP_INFO
+ ,DPLCT_PERM_AT
+ ,LMTT_AT
+ ,FRST_REGISTER_ID
+ ,FRST_REGIST_PNTTM
+ ,LAST_UPDUSR_ID
+ ,LAST_UPDT_PNTTM)
+ VALUES (#{emplyrId}
+ ,#{ipInfo}
+ ,#{dplctPermAt}
+ ,#{lmttAt}
+ ,#{userId}
+ ,SYSDATE
+ ,#{userId}
+ ,SYSDATE)
+
+ </insert>
+
+ <update id="updateLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ UPDATE COMTNLOGINPOLICY
+ SET IP_INFO = #{ipInfo}
+ ,DPLCT_PERM_AT = #{dplctPermAt}
+ ,LMTT_AT = #{lmttAt}
+ ,LAST_UPDUSR_ID = #{userId}
+ ,LAST_UPDT_PNTTM = SYSDATE
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </update>
+
+ <delete id="deleteLoginPolicy">
+
+ DELETE FROM COMTNLOGINPOLICY
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_altibase.xml (revision 7)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="loginPolicyDAO">
+
+ <resultMap id="loginPolicy" type="egovframework.com.uat.uap.service.LoginPolicyVO">
+ <result property="emplyrId" column="USER_ID"/>
+ <result property="emplyrNm" column="USER_NM"/>
+ <result property="emplyrSe" column="USER_SE"/>
+ <result property="ipInfo" column="IP_INFO"/>
+ <result property="dplctPermAt" column="DPLCT_PERM_AT"/>
+ <result property="lmttAt" column="LMTT_AT"/>
+ <result property="userId" column="LAST_UPDUSR_ID"/>
+ <result property="regDate" column="LAST_UPDT_PNTTM"/>
+ <result property="regYn" column="REG_YN"/>
+ </resultMap>
+
+ <select id="selectLoginPolicyList" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultMap="loginPolicy">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ B.LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="selectLoginPolicyListTotCnt" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultType="int">
+ SELECT COUNT(*) AS totcnt
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ </select>
+
+ <select id="selectLoginPolicy" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ NVL(B.LMTT_AT,'N') AS LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ AND A.USER_ID = #{emplyrId}
+ </select>
+
+ <insert id="insertLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ INSERT INTO COMTNLOGINPOLICY
+ (EMPLYR_ID
+ ,IP_INFO
+ ,DPLCT_PERM_AT
+ ,LMTT_AT
+ ,FRST_REGISTER_ID
+ ,FRST_REGIST_PNTTM
+ ,LAST_UPDUSR_ID
+ ,LAST_UPDT_PNTTM)
+ VALUES (#{emplyrId}
+ ,#{ipInfo}
+ ,#{dplctPermAt}
+ ,#{lmttAt}
+ ,#{userId}
+ ,SYSDATE
+ ,#{userId}
+ ,SYSDATE)
+
+ </insert>
+
+ <update id="updateLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ UPDATE COMTNLOGINPOLICY
+ SET IP_INFO = #{ipInfo}
+ ,DPLCT_PERM_AT = #{dplctPermAt}
+ ,LMTT_AT = #{lmttAt}
+ ,LAST_UPDUSR_ID = #{userId}
+ ,LAST_UPDT_PNTTM = SYSDATE
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </update>
+
+ <delete id="deleteLoginPolicy">
+
+ DELETE FROM COMTNLOGINPOLICY
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_tibero.xml (revision 7)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:59 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="loginPolicyDAO">
+
+ <resultMap id="loginPolicy" type="egovframework.com.uat.uap.service.LoginPolicyVO">
+ <result property="emplyrId" column="USER_ID"/>
+ <result property="emplyrNm" column="USER_NM"/>
+ <result property="emplyrSe" column="USER_SE"/>
+ <result property="ipInfo" column="IP_INFO"/>
+ <result property="dplctPermAt" column="DPLCT_PERM_AT"/>
+ <result property="lmttAt" column="LMTT_AT"/>
+ <result property="userId" column="LAST_UPDUSR_ID"/>
+ <result property="regDate" column="LAST_UPDT_PNTTM"/>
+ <result property="regYn" column="REG_YN"/>
+ </resultMap>
+
+ <select id="loginPolicyDAO.selectLoginPolicyList" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultMap="loginPolicy">
+
+ SELECT *
+ FROM (
+ SELECT ROWNUM RNUM, ALL_LIST.*
+ FROM (
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ B.LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ <![CDATA[
+ ) ALL_LIST
+ )
+ WHERE RNUM > #{firstIndex}
+ AND RNUM <= #{firstIndex} + #{recordCountPerPage}
+ ]]>
+ </select>
+
+ <select id="loginPolicyDAO.selectLoginPolicyListTotCnt" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultType="int">
+ SELECT COUNT(*) AS totcnt
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE '%'||#{searchKeyword}||'%'
+ </if>
+ </if>
+ </select>
+
+ <select id="loginPolicyDAO.selectLoginPolicy" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ NVL(B.LMTT_AT,'N') AS LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ DECODE(B.EMPLYR_ID, NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ AND A.USER_ID = #{emplyrId}
+ </select>
+
+ <insert id="loginPolicyDAO.insertLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ INSERT INTO COMTNLOGINPOLICY
+ (EMPLYR_ID
+ ,IP_INFO
+ ,DPLCT_PERM_AT
+ ,LMTT_AT
+ ,FRST_REGISTER_ID
+ ,FRST_REGIST_PNTTM
+ ,LAST_UPDUSR_ID
+ ,LAST_UPDT_PNTTM)
+ VALUES (#{emplyrId}
+ ,#{ipInfo}
+ ,#{dplctPermAt}
+ ,#{lmttAt}
+ ,#{userId}
+ ,SYSDATE
+ ,#{userId}
+ ,SYSDATE)
+
+ </insert>
+
+ <update id="loginPolicyDAO.updateLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ UPDATE COMTNLOGINPOLICY
+ SET IP_INFO = #{ipInfo}
+ ,DPLCT_PERM_AT = #{dplctPermAt}
+ ,LMTT_AT = #{lmttAt}
+ ,LAST_UPDUSR_ID = #{userId}
+ ,LAST_UPDT_PNTTM = SYSDATE
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </update>
+
+ <delete id="loginPolicyDAO.deleteLoginPolicy">
+
+ DELETE FROM COMTNLOGINPOLICY
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_mysql.xml (revision 7)
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:50:59 KST 2016-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="loginPolicyDAO">
+
+ <resultMap id="loginPolicy" type="egovframework.com.uat.uap.service.LoginPolicyVO">
+ <result property="emplyrId" column="USER_ID"/>
+ <result property="emplyrNm" column="USER_NM"/>
+ <result property="emplyrSe" column="USER_SE"/>
+ <result property="ipInfo" column="IP_INFO"/>
+ <result property="dplctPermAt" column="DPLCT_PERM_AT"/>
+ <result property="lmttAt" column="LMTT_AT"/>
+ <result property="userId" column="LAST_UPDUSR_ID"/>
+ <result property="regDate" column="LAST_UPDT_PNTTM"/>
+ <result property="regYn" column="REG_YN"/>
+ </resultMap>
+
+ <select id="selectLoginPolicyList" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ B.LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ IF(B.EMPLYR_ID IS NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </if>
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </select>
+
+ <select id="selectLoginPolicyListTotCnt" parameterType="egovframework.com.uat.uap.service.LoginPolicyVO" resultType="int">
+ SELECT COUNT(*) AS totcnt
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ <if test="searchKeyword != null and searchKeyword != ''">
+ <if test="searchCondition == 1">AND
+ A.USER_NM LIKE CONCAT('%' , #{searchKeyword}, '%')
+ </if>
+ </if>
+ </select>
+
+ <select id="selectLoginPolicy" resultMap="loginPolicy">
+ SELECT A.USER_ID,
+ A.USER_NM,
+ A.USER_SE,
+ B.IP_INFO,
+ B.DPLCT_PERM_AT,
+ IF(B.LMTT_AT IS NULL, 'N', B.LMTT_AT) AS LMTT_AT,
+ B.LAST_UPDUSR_ID,
+ B.LAST_UPDT_PNTTM,
+ IF(B.EMPLYR_ID IS NULL, 'N', 'Y') AS REG_YN
+ FROM COMVNUSERMASTER A LEFT OUTER JOIN COMTNLOGINPOLICY B
+ ON A.USER_ID = B.EMPLYR_ID
+ WHERE 1 = 1
+ AND A.USER_ID = #{emplyrId}
+ </select>
+
+ <insert id="insertLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ INSERT INTO COMTNLOGINPOLICY
+ (EMPLYR_ID
+ ,IP_INFO
+ ,DPLCT_PERM_AT
+ ,LMTT_AT
+ ,FRST_REGISTER_ID
+ ,FRST_REGIST_PNTTM
+ ,LAST_UPDUSR_ID
+ ,LAST_UPDT_PNTTM)
+ VALUES (#{emplyrId}
+ ,#{ipInfo}
+ ,#{dplctPermAt}
+ ,#{lmttAt}
+ ,#{userId}
+ ,now()
+ ,#{userId}
+ ,now())
+
+ </insert>
+
+ <update id="updateLoginPolicy" parameterType="egovframework.com.uat.uap.service.LoginPolicy">
+
+ UPDATE COMTNLOGINPOLICY
+ SET IP_INFO = #{ipInfo}
+ ,DPLCT_PERM_AT = #{dplctPermAt}
+ ,LMTT_AT = #{lmttAt}
+ ,LAST_UPDUSR_ID = #{userId}
+ ,LAST_UPDT_PNTTM = now()
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </update>
+
+ <delete id="deleteLoginPolicy">
+
+ DELETE FROM COMTNLOGINPOLICY
+ WHERE EMPLYR_ID = #{emplyrId}
+
+ </delete>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uap/EgovLoginPolicy_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,438 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.08.26 서준식 SSO 로그인을 위한 쿼리 추가
+ 2011.09.27 서준식 컬럼 변경 SUB_DN 을 CRTFC_DN_VALUE 로 변경
+ 2011.09.28 서준식 컬럼 변경 entrprsmber_id 을 ENTRPRS_MBER_ID 로 변경
+ 2020.07.06 신용호 비밀번호 만료여부 조회
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginUsr">
+
+ <!-- 로그인 처리를 위한 resultMap -->
+ <resultMap id="login" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ <result property="name" column="name"/>
+ <result property="ihidNum" column="ihidNum"/>
+ <result property="email" column="email"/>
+ <result property="password" column="password"/>
+ <result property="userSe" column="userSe"/>
+ <result property="orgnztId" column="orgnztId"/>
+ <result property="uniqId" column="uniqId"/>
+ </resultMap>
+
+ <!-- 아이디 찾기를 위한 resultMap -->
+ <resultMap id="id" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ </resultMap>
+
+ <!-- 비밀번호 처리를 위한 resultMap -->
+ <resultMap id="password" type="egovframework.com.cmm.LoginVO">
+ <result property="password" column="password"/>
+ </resultMap>
+
+ <!-- SSO용 ESNTL_ID를 이용한 로그인(2011.8.26) -->
+
+ <select id="ssoLoginByEsntlId" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , ESNTL_ID AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+
+ <!-- 일반 로그인 -->
+ <select id="actionLogin" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND password = #{password}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND entrprs_mber_password = #{password}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 인증서 로그인 -->
+ <select id="actionCrtfctLogin" resultMap="login">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE CRTFC_DN_VALUE = #{dn}
+
+ </select>
+
+ <!-- 아이디 찾기 -->
+ <select id="searchId" resultMap="id">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ FROM COMTNGNRLMBER
+ WHERE mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ FROM COMTNENTRPRSMBER
+ WHERE cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ FROM COMTNEMPLYRINFO
+ WHERE user_nm = #{name}
+ AND email_adres = #{email}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 비밀번호 찾기 -->
+ <select id="searchPassword" resultMap="password">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT password AS password
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT entrprs_mber_password AS password
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_password_hint = #{passwordHint}
+ AND entrprs_mber_password_cnsr = #{passwordCnsr}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT password AS password
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND user_nm = #{name}
+ AND email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 변경된 비밀번호를 저장 -->
+ <update id="updatePassword">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ UPDATE COMTNGNRLMBER
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = SYSDATETIME
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ UPDATE COMTNENTRPRSMBER
+ SET entrprs_mber_password = #{password}
+ , CHG_PWD_LAST_PNTTM = SYSDATETIME
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ UPDATE COMTNEMPLYRINFO
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = SYSDATETIME
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 조회 -->
+ <select id="selectLoginIncorrect" resultType="egovMap">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+ <![CDATA[
+ SELECT MBER_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , MBER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNGNRLMBER
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+ <![CDATA[
+ SELECT ENTRPRS_MBER_ID AS USER_ID
+ , ENTRPRS_MBER_PASSWORD AS USER_PW
+ , CMPNY_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+ <![CDATA[
+ SELECT EMPLYR_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , USER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNEMPLYRINFO
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </select>
+
+ <!-- 로그인인증제한 변경 > 일반회원 -->
+ <update id="updateLoginIncorrectGNR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = SYSDATETIME
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = SYSDATETIME
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 기업사용자 -->
+ <update id="updateLoginIncorrectENT">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = SYSDATETIME
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = SYSDATETIME
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 업무사용자 -->
+ <update id="updateLoginIncorrectUSR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = SYSDATETIME
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = SYSDATETIME
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 비밀번호 만료 기간 체크 -->
+ <select id="selectPassedDayChangePWD" resultType="int">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT COALESCE(DATEDIFF(SYSDATETIME,CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT COALESCE(DATEDIFF(SYSDATETIME,CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT COALESCE(DATEDIFF(SYSDATETIME,CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_maria.xml (revision 7)
@@ -0,0 +1,453 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.08.26 서준식 SSO 로그인을 위한 쿼리 추가
+ 2011.09.27 서준식 컬럼 변경 SUB_DN 을 CRTFC_DN_VALUE 로 변경
+ 2011.09.28 서준식 컬럼 변경 entrprsmber_id 을 ENTRPRS_MBER_ID 로 변경
+ 2020.07.06 서준식 비밀번호 만료여부 조회
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginUsr">
+
+
+ <!-- 로그인 처리를 위한 resultMap -->
+ <resultMap id="login" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ <result property="name" column="name"/>
+ <result property="ihidNum" column="ihidNum"/>
+ <result property="email" column="email"/>
+ <result property="password" column="password"/>
+ <result property="userSe" column="userSe"/>
+ <result property="orgnztId" column="orgnztId"/>
+ <result property="uniqId" column="uniqId"/>
+ </resultMap>
+
+ <!-- 아이디 찾기를 위한 resultMap -->
+ <resultMap id="id" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ </resultMap>
+
+ <!-- 비밀번호 처리를 위한 resultMap -->
+ <resultMap id="password" type="egovframework.com.cmm.LoginVO">
+ <result property="password" column="password"/>
+ </resultMap>
+
+ <!-- SSO용 ESNTL_ID를 이용한 로그인(2011.8.26) -->
+ <select id="ssoLoginByEsntlId" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , ESNTL_ID AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+
+ <!-- 일반 로그인 -->
+ <select id="actionLogin" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND password = #{password}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND entrprs_mber_password = #{password}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+
+
+ <!--
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+ -->
+ </if>
+ </select>
+
+ <!-- 인증서 로그인 -->
+ <select id="actionCrtfctLogin" resultMap="login">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE CRTFC_DN_VALUE = #{dn}
+
+ </select>
+
+ <!-- 아이디 찾기 -->
+ <select id="searchId" resultMap="id">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ FROM COMTNGNRLMBER
+ WHERE mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ FROM COMTNENTRPRSMBER
+ WHERE cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ FROM COMTNEMPLYRINFO
+ WHERE user_nm = #{name}
+ AND email_adres = #{email}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 비밀번호 찾기 -->
+ <select id="searchPassword" resultMap="password">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT password AS password
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT entrprs_mber_password AS password
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_password_hint = #{passwordHint}
+ AND entrprs_mber_password_cnsr = #{passwordCnsr}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT password AS password
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND user_nm = #{name}
+ AND email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 변경된 비밀번호를 저장 -->
+ <update id="updatePassword">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ UPDATE COMTNGNRLMBER
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ UPDATE COMTNENTRPRSMBER
+ SET entrprs_mber_password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ UPDATE COMTNEMPLYRINFO
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 조회 -->
+ <select id="selectLoginIncorrect" resultType="egovMap">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+ <![CDATA[
+ SELECT MBER_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , MBER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , IFNULL(LOCK_AT,'N') LOCK_AT
+ , IFNULL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNGNRLMBER
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+ <![CDATA[
+ SELECT ENTRPRS_MBER_ID AS USER_ID
+ , ENTRPRS_MBER_PASSWORD AS USER_PW
+ , CMPNY_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , IFNULL(LOCK_AT,'N') LOCK_AT
+ , IFNULL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+ <![CDATA[
+ SELECT EMPLYR_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , USER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , IFNULL(LOCK_AT,'N') LOCK_AT
+ , IFNULL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNEMPLYRINFO
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </select>
+
+ <!-- 로그인인증제한 변경 > 일반회원 -->
+ <update id="updateLoginIncorrectGNR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_CNT = IFNULL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 기업사용자 -->
+ <update id="updateLoginIncorrectENT">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_CNT = IFNULL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 업무사용자 -->
+ <update id="updateLoginIncorrectUSR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_CNT = IFNULL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 비밀번호 만료 기간 체크 -->
+ <select id="selectPassedDayChangePWD" resultType="int">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT IFNULL(TIMESTAMPDIFF(day,CHG_PWD_LAST_PNTTM,sysdate()),0)
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT IFNULL(TIMESTAMPDIFF(day,CHG_PWD_LAST_PNTTM,sysdate()),0)
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT IFNULL(TIMESTAMPDIFF(day,CHG_PWD_LAST_PNTTM,sysdate()),0)
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_oracle.xml (revision 7)
@@ -0,0 +1,438 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.08.26 서준식 SSO 로그인을 위한 쿼리 추가
+ 2011.09.27 서준식 컬럼 변경 SUB_DN 을 CRTFC_DN_VALUE 로 변경
+ 2011.09.28 서준식 컬럼 변경 entrprsmber_id 을 ENTRPRS_MBER_ID 로 변경
+ 2020.07.06 신용호 비밀번호 만료여부 조회
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginUsr">
+
+ <!-- 로그인 처리를 위한 resultMap -->
+ <resultMap id="login" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ <result property="name" column="name"/>
+ <result property="ihidNum" column="ihidNum"/>
+ <result property="email" column="email"/>
+ <result property="password" column="password"/>
+ <result property="userSe" column="userSe"/>
+ <result property="orgnztId" column="orgnztId"/>
+ <result property="uniqId" column="uniqId"/>
+ </resultMap>
+
+ <!-- 아이디 찾기를 위한 resultMap -->
+ <resultMap id="id" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ </resultMap>
+
+ <!-- 비밀번호 처리를 위한 resultMap -->
+ <resultMap id="password" type="egovframework.com.cmm.LoginVO">
+ <result property="password" column="password"/>
+ </resultMap>
+
+ <!-- SSO용 ESNTL_ID를 이용한 로그인(2011.8.26) -->
+
+ <select id="ssoLoginByEsntlId" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , ESNTL_ID AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+
+ <!-- 일반 로그인 -->
+ <select id="actionLogin" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND password = #{password}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND entrprs_mber_password = #{password}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 인증서 로그인 -->
+ <select id="actionCrtfctLogin" resultMap="login">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE CRTFC_DN_VALUE = #{dn}
+
+ </select>
+
+ <!-- 아이디 찾기 -->
+ <select id="searchId" resultMap="id">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ FROM COMTNGNRLMBER
+ WHERE mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ FROM COMTNENTRPRSMBER
+ WHERE cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ FROM COMTNEMPLYRINFO
+ WHERE user_nm = #{name}
+ AND email_adres = #{email}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 비밀번호 찾기 -->
+ <select id="searchPassword" resultMap="password">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT password AS password
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT entrprs_mber_password AS password
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_password_hint = #{passwordHint}
+ AND entrprs_mber_password_cnsr = #{passwordCnsr}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT password AS password
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND user_nm = #{name}
+ AND email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 변경된 비밀번호를 저장 -->
+ <update id="updatePassword">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ UPDATE COMTNGNRLMBER
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ UPDATE COMTNENTRPRSMBER
+ SET entrprs_mber_password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ UPDATE COMTNEMPLYRINFO
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 조회 -->
+ <select id="selectLoginIncorrect" resultType="egovMap">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+ <![CDATA[
+ SELECT MBER_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , MBER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNGNRLMBER
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+ <![CDATA[
+ SELECT ENTRPRS_MBER_ID AS USER_ID
+ , ENTRPRS_MBER_PASSWORD AS USER_PW
+ , CMPNY_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+ <![CDATA[
+ SELECT EMPLYR_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , USER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNEMPLYRINFO
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </select>
+
+ <!-- 로그인인증제한 변경 > 일반회원 -->
+ <update id="updateLoginIncorrectGNR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 기업사용자 -->
+ <update id="updateLoginIncorrectENT">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 업무사용자 -->
+ <update id="updateLoginIncorrectUSR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 비밀번호 만료 기간 체크 -->
+ <select id="selectPassedDayChangePWD" resultType="int">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT NVL(TO_DATE(sysdate) - TO_DATE(CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT NVL(TO_DATE(sysdate) - TO_DATE(CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT NVL(TO_DATE(sysdate) - TO_DATE(CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_altibase.xml (revision 7)
@@ -0,0 +1,438 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.08.26 서준식 SSO 로그인을 위한 쿼리 추가
+ 2011.09.27 서준식 컬럼 변경 SUB_DN 을 CRTFC_DN_VALUE 로 변경
+ 2011.09.28 서준식 컬럼 변경 entrprsmber_id 을 ENTRPRS_MBER_ID 로 변경
+ 2020.07.06 신용호 비밀번호 만료여부 조회
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginUsr">
+
+ <!-- 로그인 처리를 위한 resultMap -->
+ <resultMap id="login" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ <result property="name" column="name"/>
+ <result property="ihidNum" column="ihidNum"/>
+ <result property="email" column="email"/>
+ <result property="password" column="password"/>
+ <result property="userSe" column="userSe"/>
+ <result property="orgnztId" column="orgnztId"/>
+ <result property="uniqId" column="uniqId"/>
+ </resultMap>
+
+ <!-- 아이디 찾기를 위한 resultMap -->
+ <resultMap id="id" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ </resultMap>
+
+ <!-- 비밀번호 처리를 위한 resultMap -->
+ <resultMap id="password" type="egovframework.com.cmm.LoginVO">
+ <result property="password" column="password"/>
+ </resultMap>
+
+
+ <!-- SSO용 ESNTL_ID를 이용한 로그인(2011.8.26) -->
+
+ <select id="ssoLoginByEsntlId" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , ESNTL_ID AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 일반 로그인 -->
+ <select id="actionLogin" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND password = #{password}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND entrprs_mber_password = #{password}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 인증서 로그인 -->
+ <select id="actionCrtfctLogin" resultMap="login">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE CRTFC_DN_VALUE = #{dn}
+
+ </select>
+
+ <!-- 아이디 찾기 -->
+ <select id="searchId" resultMap="id">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ FROM COMTNGNRLMBER
+ WHERE mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ FROM COMTNENTRPRSMBER
+ WHERE cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ FROM COMTNEMPLYRINFO
+ WHERE user_nm = #{name}
+ AND email_adres = #{email}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 비밀번호 찾기 -->
+ <select id="searchPassword" resultMap="password">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT password AS password
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT entrprs_mber_password AS password
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_password_hint = #{passwordHint}
+ AND entrprs_mber_password_cnsr = #{passwordCnsr}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT password AS password
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND user_nm = #{name}
+ AND email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 변경된 비밀번호를 저장 -->
+ <update id="updatePassword">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ UPDATE COMTNGNRLMBER
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ UPDATE COMTNENTRPRSMBER
+ SET entrprs_mber_password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ UPDATE COMTNEMPLYRINFO
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 조회 -->
+ <select id="selectLoginIncorrect" resultType="egovMap">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+ <![CDATA[
+ SELECT MBER_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , MBER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNGNRLMBER
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+ <![CDATA[
+ SELECT ENTRPRS_MBER_ID AS USER_ID
+ , ENTRPRS_MBER_PASSWORD AS USER_PW
+ , CMPNY_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+ <![CDATA[
+ SELECT EMPLYR_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , USER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNEMPLYRINFO
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </select>
+
+ <!-- 로그인인증제한 변경 > 일반회원 -->
+ <update id="updateLoginIncorrectGNR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 기업사용자 -->
+ <update id="updateLoginIncorrectENT">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 업무사용자 -->
+ <update id="updateLoginIncorrectUSR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 비밀번호 만료 기간 체크 -->
+ <select id="selectPassedDayChangePWD" resultType="int">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT NVL(DATEDIFF(CHG_PWD_LAST_PNTTM,SYSDATE,'day'),0)
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT NVL(DATEDIFF(CHG_PWD_LAST_PNTTM,SYSDATE,'day'),0)
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT NVL(DATEDIFF(CHG_PWD_LAST_PNTTM,SYSDATE,'day'),0)
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_tibero.xml (revision 7)
@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.08.26 서준식 SSO 로그인을 위한 쿼리 추가
+ 2011.09.27 서준식 컬럼 변경 SUB_DN 을 CRTFC_DN_VALUE 로 변경
+ 2011.09.28 서준식 컬럼 변경 entrprsmber_id 을 ENTRPRS_MBER_ID 로 변경
+ 2020.07.06 신용호 비밀번호 만료여부 조회
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginUsr">
+
+ <!-- 로그인 처리를 위한 resultMap -->
+ <resultMap id="login" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ <result property="name" column="name"/>
+ <result property="ihidNum" column="ihidNum"/>
+ <result property="email" column="email"/>
+ <result property="password" column="password"/>
+ <result property="userSe" column="userSe"/>
+ <result property="orgnztId" column="orgnztId"/>
+ <result property="uniqId" column="uniqId"/>
+ </resultMap>
+
+ <!-- 아이디 찾기를 위한 resultMap -->
+ <resultMap id="id" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ </resultMap>
+
+ <!-- 비밀번호 처리를 위한 resultMap -->
+ <resultMap id="password" type="egovframework.com.cmm.LoginVO">
+ <result property="password" column="password"/>
+ </resultMap>
+
+ <!-- SSO용 ESNTL_ID를 이용한 로그인(2011.8.26) -->
+
+ <select id="ssoLoginByEsntlId" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , ESNTL_ID AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 일반 로그인 -->
+ <select id="actionLogin" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND password = #{password}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND entrprs_mber_password = #{password}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 인증서 로그인 -->
+ <select id="actionCrtfctLogin" resultMap="login">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE CRTFC_DN_VALUE = #{dn}
+
+ </select>
+
+ <!-- 아이디 찾기 -->
+ <select id="searchId" resultMap="id">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ FROM COMTNGNRLMBER
+ WHERE mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ FROM COMTNENTRPRSMBER
+ WHERE cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ FROM COMTNEMPLYRINFO
+ WHERE user_nm = #{name}
+ AND email_adres = #{email}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 비밀번호 찾기 -->
+ <select id="searchPassword" resultMap="password">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT password AS password
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT entrprs_mber_password AS password
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_password_hint = #{passwordHint}
+ AND entrprs_mber_password_cnsr = #{passwordCnsr}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT password AS password
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND user_nm = #{name}
+ AND email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 변경된 비밀번호를 저장 -->
+ <update id="updatePassword">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ UPDATE COMTNGNRLMBER
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ UPDATE COMTNENTRPRSMBER
+ SET entrprs_mber_password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ UPDATE COMTNEMPLYRINFO
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 조회 -->
+ <select id="selectLoginIncorrect" resultType="egovMap">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+ <![CDATA[
+ SELECT MBER_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , MBER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNGNRLMBER
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+ <![CDATA[
+ SELECT ENTRPRS_MBER_ID AS USER_ID
+ , ENTRPRS_MBER_PASSWORD AS USER_PW
+ , CMPNY_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+ <![CDATA[
+ SELECT EMPLYR_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , USER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , NVL(LOCK_AT,'N') LOCK_AT
+ , NVL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNEMPLYRINFO
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </select>
+
+ <!-- 로그인인증제한 변경 > 일반회원 -->
+ <update id="updateLoginIncorrectGNR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 기업사용자 -->
+ <update id="updateLoginIncorrectENT">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 업무사용자 -->
+ <update id="updateLoginIncorrectUSR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_CNT = NVL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 비밀번호 만료 기간 체크 -->
+ <select id="selectPassedDayChangePWD" resultType="int">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT NVL(TO_DATE(sysdate) - TO_DATE(CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT NVL(TO_DATE(sysdate) - TO_DATE(CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT NVL(TO_DATE(sysdate) - TO_DATE(CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_postgres.xml (revision 7)
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.08.26 서준식 SSO 로그인을 위한 쿼리 추가
+ 2011.09.27 서준식 컬럼 변경 SUB_DN 을 CRTFC_DN_VALUE 로 변경
+ 2011.09.28 서준식 컬럼 변경 entrprsmber_id 을 ENTRPRS_MBER_ID 로 변경
+ 2020.07.06 신용호 비밀번호 만료여부 조회
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginUsr">
+
+
+ <!-- 로그인 처리를 위한 resultMap -->
+ <resultMap id="login" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ <result property="name" column="name"/>
+ <result property="ihidNum" column="ihidNum"/>
+ <result property="email" column="email"/>
+ <result property="password" column="password"/>
+ <result property="userSe" column="userSe"/>
+ <result property="orgnztId" column="orgnztId"/>
+ <result property="uniqId" column="uniqId"/>
+ </resultMap>
+
+ <!-- 아이디 찾기를 위한 resultMap -->
+ <resultMap id="id" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ </resultMap>
+
+ <!-- 비밀번호 처리를 위한 resultMap -->
+ <resultMap id="password" type="egovframework.com.cmm.LoginVO">
+ <result property="password" column="password"/>
+ </resultMap>
+
+ <!-- 일반 로그인 -->
+ <select id="actionLogin" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND password = #{password}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND entrprs_mber_password = #{password}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+
+
+ <!--
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+ -->
+ </if>
+ </select>
+
+ <!-- 아이디 찾기 -->
+ <select id="searchId" resultMap="id">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ FROM COMTNGNRLMBER
+ WHERE mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ FROM COMTNENTRPRSMBER
+ WHERE cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ FROM COMTNEMPLYRINFO
+ WHERE user_nm = #{name}
+ AND email_adres = #{email}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 비밀번호 찾기 -->
+ <select id="searchPassword" resultMap="password">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT password AS password
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT entrprs_mber_password AS password
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_password_hint = #{passwordHint}
+ AND entrprs_mber_password_cnsr = #{passwordCnsr}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT password AS password
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND user_nm = #{name}
+ AND email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 변경된 비밀번호를 저장 -->
+ <update id="updatePassword">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ UPDATE COMTNGNRLMBER
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = NOW()
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ UPDATE COMTNENTRPRSMBER
+ SET entrprs_mber_password = #{password}
+ , CHG_PWD_LAST_PNTTM = NOW()
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ UPDATE COMTNEMPLYRINFO
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = NOW()
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 조회 -->
+ <select id="selectLoginIncorrect" resultType="egovMap">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+ <![CDATA[
+ SELECT MBER_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , MBER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , COALESCE(LOCK_AT,'N') LOCK_AT
+ , COALESCE(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNGNRLMBER
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+ <![CDATA[
+ SELECT ENTRPRS_MBER_ID AS USER_ID
+ , ENTRPRS_MBER_PASSWORD AS USER_PW
+ , CMPNY_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , COALESCE(LOCK_AT,'N') LOCK_AT
+ , COALESCE(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+ <![CDATA[
+ SELECT EMPLYR_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , USER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , COALESCE(LOCK_AT,'N') LOCK_AT
+ , COALESCE(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNEMPLYRINFO
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </select>
+
+ <!-- 로그인인증제한 변경 > 일반회원 -->
+ <update id="updateLoginIncorrectGNR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = NOW()
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_CNT = COALESCE(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = NOW()
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 기업사용자 -->
+ <update id="updateLoginIncorrectENT">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = NOW()
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_CNT = COALESCE(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = NOW()
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 업무사용자 -->
+ <update id="updateLoginIncorrectUSR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = NOW()
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_CNT = COALESCE(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = NOW()
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 비밀번호 만료 기간 체크 -->
+ <select id="selectPassedDayChangePWD" resultType="int">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT COALESCE(DATE_PART('day', NOW() - CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT COALESCE(DATE_PART('day', NOW() - CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT COALESCE(DATE_PART('day', NOW() - CHG_PWD_LAST_PNTTM),0)
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_mysql.xml (revision 7)
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2011.08.26 서준식 SSO 로그인을 위한 쿼리 추가
+ 2011.09.27 서준식 컬럼 변경 SUB_DN 을 CRTFC_DN_VALUE 로 변경
+ 2011.09.28 서준식 컬럼 변경 entrprsmber_id 을 ENTRPRS_MBER_ID 로 변경
+ 2020.07.06 신용호 비밀번호 만료여부 조회
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="LoginUsr">
+
+ <!-- 로그인 처리를 위한 resultMap -->
+ <resultMap id="login" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ <result property="name" column="name"/>
+ <result property="ihidNum" column="ihidNum"/>
+ <result property="email" column="email"/>
+ <result property="password" column="password"/>
+ <result property="userSe" column="userSe"/>
+ <result property="orgnztId" column="orgnztId"/>
+ <result property="uniqId" column="uniqId"/>
+ </resultMap>
+
+ <!-- 아이디 찾기를 위한 resultMap -->
+ <resultMap id="id" type="egovframework.com.cmm.LoginVO">
+ <result property="id" column="id"/>
+ </resultMap>
+
+ <!-- 비밀번호 처리를 위한 resultMap -->
+ <resultMap id="password" type="egovframework.com.cmm.LoginVO">
+ <result property="password" column="password"/>
+ </resultMap>
+
+ <!-- SSO용 ESNTL_ID를 이용한 로그인(2011.8.26) -->
+ <select id="ssoLoginByEsntlId" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , ESNTL_ID AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ESNTL_ID = #{uniqId}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE ESNTL_ID = #{uniqId}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+
+ <!-- 일반 로그인 -->
+ <select id="actionLogin" resultMap="login">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ , mber_nm AS name
+ , ihidNum AS ihidNum
+ , password AS password
+ , mber_email_adres AS email
+ , 'GNR' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND password = #{password}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ , cmpny_nm AS name
+ , entrprs_mber_password AS password
+ , bizrno AS ihidNum
+ , applcnt_email_adres AS email
+ , 'ENT' AS userSe
+ , '-' AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND entrprs_mber_password = #{password}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+
+
+ <!--
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND password = #{password}
+ AND emplyr_sttus_code = 'P'
+ -->
+ </if>
+ </select>
+
+ <!-- 인증서 로그인 -->
+ <select id="actionCrtfctLogin" resultMap="login">
+
+ SELECT emplyr_id AS id
+ , user_nm AS name
+ , password AS password
+ , ihidnum AS ihidNum
+ , email_adres AS email
+ , 'USR' AS userSe
+ , orgnzt_id AS orgnztId
+ , esntl_id AS uniqId
+ FROM COMTNEMPLYRINFO
+ WHERE CRTFC_DN_VALUE = #{dn}
+
+ </select>
+
+ <!-- 아이디 찾기 -->
+ <select id="searchId" resultMap="id">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT mber_id AS id
+ FROM COMTNGNRLMBER
+ WHERE mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT ENTRPRS_MBER_ID AS id
+ FROM COMTNENTRPRSMBER
+ WHERE cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT emplyr_id AS id
+ FROM COMTNEMPLYRINFO
+ WHERE user_nm = #{name}
+ AND email_adres = #{email}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 비밀번호 찾기 -->
+ <select id="searchPassword" resultMap="password">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT password AS password
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+ AND mber_nm = #{name}
+ AND mber_email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND mber_sttus = 'P'
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT entrprs_mber_password AS password
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ AND cmpny_nm = #{name}
+ AND applcnt_email_adres = #{email}
+ AND entrprs_mber_password_hint = #{passwordHint}
+ AND entrprs_mber_password_cnsr = #{passwordCnsr}
+ AND entrprs_mber_sttus = 'P'
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT password AS password
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+ AND user_nm = #{name}
+ AND email_adres = #{email}
+ AND password_hint = #{passwordHint}
+ AND password_cnsr = #{passwordCnsr}
+ AND emplyr_sttus_code = 'P'
+
+ </if>
+ </select>
+
+ <!-- 변경된 비밀번호를 저장 -->
+ <update id="updatePassword">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ UPDATE COMTNGNRLMBER
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ UPDATE COMTNENTRPRSMBER
+ SET entrprs_mber_password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ UPDATE COMTNEMPLYRINFO
+ SET password = #{password}
+ , CHG_PWD_LAST_PNTTM = sysdate()
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 조회 -->
+ <select id="selectLoginIncorrect" resultType="egovMap">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+ <![CDATA[
+ SELECT MBER_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , MBER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , IFNULL(LOCK_AT,'N') LOCK_AT
+ , IFNULL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNGNRLMBER
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+ <![CDATA[
+ SELECT ENTRPRS_MBER_ID AS USER_ID
+ , ENTRPRS_MBER_PASSWORD AS USER_PW
+ , CMPNY_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , IFNULL(LOCK_AT,'N') LOCK_AT
+ , IFNULL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+ <![CDATA[
+ SELECT EMPLYR_ID AS USER_ID
+ , PASSWORD AS USER_PW
+ , USER_NM AS USER_NM
+ , ESNTL_ID AS UNIQ_ID
+ , IFNULL(LOCK_AT,'N') LOCK_AT
+ , IFNULL(LOCK_CNT,0) AS LOCK_CNT
+ FROM COMTNEMPLYRINFO
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </select>
+
+ <!-- 로그인인증제한 변경 > 일반회원 -->
+ <update id="updateLoginIncorrectGNR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNGNRLMBER
+ SET LOCK_CNT = IFNULL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 기업사용자 -->
+ <update id="updateLoginIncorrectENT">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNENTRPRSMBER
+ SET LOCK_CNT = IFNULL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE ENTRPRS_MBER_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 로그인인증제한 변경 > 업무사용자 -->
+ <update id="updateLoginIncorrectUSR">
+ <!-- LOCK 해제 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'E')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = NULL
+ , LOCK_CNT = NULL
+ , LOCK_LAST_PNTTM = NULL
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'L')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_AT = 'Y'
+ , LOCK_CNT = LOCK_CNT+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ <!-- LOCK 카운트 설정 -->
+ <if test="@egovframework.com.cmm.util.EgovMybaitsUtil@isEquals(updateAt,'C')">
+ <![CDATA[
+ UPDATE COMTNEMPLYRINFO
+ SET LOCK_CNT = IFNULL(LOCK_CNT,0)+1
+ , LOCK_LAST_PNTTM = sysdate()
+ WHERE EMPLYR_ID = #{id}
+ ]]>
+ </if>
+ </update>
+
+ <!-- 비밀번호 만료 기간 체크 -->
+ <select id="selectPassedDayChangePWD" resultType="int">
+ <!-- 일반회원 -->
+ <if test="userSe != null and userSe == 'GNR'">
+
+ SELECT IFNULL(TIMESTAMPDIFF(day,CHG_PWD_LAST_PNTTM,sysdate()),0)
+ FROM COMTNGNRLMBER
+ WHERE mber_id = #{id}
+
+ </if>
+ <!-- 기업회원 -->
+ <if test="userSe != null and userSe == 'ENT'">
+
+ SELECT IFNULL(TIMESTAMPDIFF(day,CHG_PWD_LAST_PNTTM,sysdate()),0)
+ FROM COMTNENTRPRSMBER
+ WHERE ENTRPRS_MBER_ID = #{id}
+
+ </if>
+ <!-- 업무사용자 -->
+ <if test="userSe != null and userSe == 'USR'">
+
+ SELECT IFNULL(TIMESTAMPDIFF(day,CHG_PWD_LAST_PNTTM,sysdate()),0)
+ FROM COMTNEMPLYRINFO
+ WHERE emplyr_id = #{id}
+
+ </if>
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_postgres.xml (revision 7)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="Editor">
+
+ <insert id="insertEditorFile" parameterType="froala.editor.EditorFileVO">
+ INSERT INTO TNFILE
+ (
+ FILE_ID
+ , FULL_PATH
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ , FILE_EXTSN
+ , LINK
+ )
+ VALUES
+ (
+ #{fileId}
+ , #{fullPath}
+ , #{originFileNm}
+ , #{sysFileNm}
+ , #{uploadDir}
+ , #{fileSize}
+ , #{mime}
+ , #{fileExtsn}
+ , #{link}
+ )
+ </insert>
+
+ <update id="updateEditorFile" parameterType="froala.editor.EditorFileVO">
+ UPDATE TNFILE SET
+ LINK = #{link}
+ WHERE FILE_ID = #{fileId}
+ </update>
+
+ <delete id="deleteEditorFile" parameterType="string">
+ DELETE FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </delete>
+
+ <select id="selectEditorFile" parameterType="string" resultType="froala.editor.EditorFileVO">
+ SELECT FILE_ID
+ , LINK
+ , FULL_PATH
+ , FILE_EXTSN
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </select>
+</mapper>
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_mysql.xml (revision 7)
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="Editor">
+
+ <insert id="insertEditorFile" parameterType="froala.editor.EditorFileVO">
+ INSERT INTO TNFILE
+ (
+ FILE_ID
+ , FULL_PATH
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ , FILE_EXTSN
+ , LINK
+ )
+ VALUES
+ (
+ #{fileId}
+ , #{fullPath}
+ , #{originFileNm}
+ , #{sysFileNm}
+ , #{uploadDir}
+ , #{fileSize}
+ , #{mime}
+ , #{fileExtsn}
+ , #{link}
+ )
+ </insert>
+
+ <update id="updateEditorFile" parameterType="froala.editor.EditorFileVO">
+ UPDATE TNFILE SET
+ LINK = #{link}
+ WHERE FILE_ID = #{fileId}
+ </update>
+
+ <delete id="deleteEditorFile" parameterType="string">
+ DELETE FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </delete>
+
+ <select id="selectEditorFile" parameterType="string" resultType="froala.editor.EditorFileVO">
+ SELECT FILE_ID
+ , LINK
+ , FULL_PATH
+ , FILE_EXTSN
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </select>
+
+ <insert id="insertTmpFile" parameterType="froala.editor.EditorFileVO" useGeneratedKeys="true" keyProperty="fileId">
+ INSERT INTO TNFILETMP
+ (
+ FULL_PATH
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ , FILE_EXTSN
+ )
+ VALUES
+ (
+ #{fullPath}
+ , #{originFileNm}
+ , #{sysFileNm}
+ , #{uploadDir}
+ , #{fileSize}
+ , #{mime}
+ , #{fileExtsn}
+ )
+ </insert>
+
+ <update id="updateTmpFile" parameterType="froala.editor.EditorFileVO">
+ UPDATE TNFILETMP SET
+ LINK = #{link}
+ WHERE FILE_ID = #{fileId}
+ </update>
+
+ <delete id="deleteTmpFile" parameterType="string">
+ DELETE FROM TNFILETMP
+ WHERE FILE_ID = #{fileId}
+ </delete>
+
+ <select id="selectTmpFile" parameterType="string" resultType="froala.editor.EditorFileVO">
+ SELECT FILE_ID
+ , LINK
+ , FULL_PATH
+ , FILE_EXTSN
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ FROM TNFILETMP
+ WHERE FILE_ID = #{fileId}
+ </select>
+</mapper>
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_sqlite.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_sqlite.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_sqlite.xml (revision 7)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="Editor">
+
+ <insert id="insertEditorFile" parameterType="froala.editor.EditorFileVO">
+ INSERT INTO TNFILE
+ (
+ FILE_ID
+ , FULL_PATH
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ , FILE_EXTSN
+ )
+ VALUES
+ (
+ #{fileId}
+ , #{fullPath}
+ , #{originFileNm}
+ , #{sysFileNm}
+ , #{uploadDir}
+ , #{fileSize}
+ , #{mime}
+ , #{fileExtsn}
+ )
+ </insert>
+
+ <update id="updateEditorFile" parameterType="froala.editor.EditorFileVO">
+ UPDATE TNFILE SET
+ LINK = #{link}
+ WHERE FILE_ID = #{fileId}
+ </update>
+
+ <delete id="deleteEditorFile" parameterType="string">
+ DELETE FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </delete>
+
+ <select id="selectEditorFile" parameterType="string" resultType="froala.editor.EditorFileVO">
+ SELECT FILE_ID
+ , LINK
+ , FULL_PATH
+ , FILE_EXTSN
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </select>
+</mapper>
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_sqlite.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_oracle.xml (revision 7)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="Editor">
+
+ <insert id="insertEditorFile" parameterType="froala.editor.EditorFileVO">
+ INSERT INTO TNFILE
+ (
+ FILE_ID
+ , FULL_PATH
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ , FILE_EXTSN
+ )
+ VALUES
+ (
+ #{fileId}
+ , #{fullPath}
+ , #{originFileNm}
+ , #{sysFileNm}
+ , #{uploadDir}
+ , #{fileSize}
+ , #{mime}
+ , #{fileExtsn}
+ )
+ </insert>
+
+ <update id="updateEditorFile" parameterType="froala.editor.EditorFileVO">
+ UPDATE TNFILE SET
+ LINK = #{link}
+ WHERE FILE_ID = #{fileId}
+ </update>
+
+ <delete id="deleteEditorFile" parameterType="string">
+ DELETE FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </delete>
+
+ <select id="selectEditorFile" parameterType="string" resultType="froala.editor.EditorFileVO">
+ SELECT FILE_ID
+ , LINK
+ , FULL_PATH
+ , FILE_EXTSN
+ , ORIGIN_FILE_NM
+ , SYS_FILE_NM
+ , UPLOAD_DIR
+ , FILE_SIZE
+ , MIME
+ FROM TNFILE
+ WHERE FILE_ID = #{fileId}
+ </select>
+</mapper>
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/editor/Editor_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_altibase.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_altibase.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_altibase.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="PrntngOutptDA">
+
+ <resultMap id="PrntngOutptResult" type="egovframework.com.utl.pao.service.PrntngOutptVO">
+ <result property="imgInfo" column="IMAGE_INFO"/>
+ <result property="imgType" column="IMAGE_TY"/>
+ </resultMap>
+
+ <select id="selectErncsl" parameterType="egovframework.com.utl.pao.service.PrntngOutptVO" resultMap="PrntngOutptResult">
+
+ SELECT IMAGE_INFO
+ , IMAGE_TY
+ FROM IMGTEMP
+ WHERE ORGNZT_CODE = #{orgCode}
+ AND ERNCSL_SE = #{erncslSe}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_altibase.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_mysql.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="PrntngOutptDA">
+
+ <resultMap id="PrntngOutptResult" type="egovframework.com.utl.pao.service.PrntngOutptVO">
+ <result property="imgInfo" column="IMAGE_INFO"/>
+ <result property="imgType" column="IMAGE_TY"/>
+ </resultMap>
+
+ <select id="selectErncsl" parameterType="egovframework.com.utl.pao.service.PrntngOutptVO" resultMap="PrntngOutptResult">
+
+ SELECT IMAGE_INFO
+ , IMAGE_TY
+ FROM IMGTEMP
+ WHERE ORGNZT_CODE = #{orgCode}
+ AND ERNCSL_SE = #{erncslSe}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_mysql.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_tibero.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_tibero.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_tibero.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="PrntngOutptDA">
+
+ <resultMap id="PrntngOutptResult" type="egovframework.com.utl.pao.service.PrntngOutptVO">
+ <result property="imgInfo" column="IMAGE_INFO"/>
+ <result property="imgType" column="IMAGE_TY"/>
+ </resultMap>
+
+ <select id="selectErncsl" parameterType="egovframework.com.utl.pao.service.PrntngOutptVO" resultMap="PrntngOutptResult">
+
+ SELECT IMAGE_INFO
+ , IMAGE_TY
+ FROM IMGTEMP
+ WHERE ORGNZT_CODE = #{orgCode}
+ AND ERNCSL_SE = #{erncslSe}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_tibero.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_maria.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_maria.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_maria.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="PrntngOutptDA">
+
+ <resultMap id="PrntngOutptResult" type="egovframework.com.utl.pao.service.PrntngOutptVO">
+ <result property="imgInfo" column="IMAGE_INFO"/>
+ <result property="imgType" column="IMAGE_TY"/>
+ </resultMap>
+
+ <select id="selectErncsl" parameterType="egovframework.com.utl.pao.service.PrntngOutptVO" resultMap="PrntngOutptResult">
+
+ SELECT IMAGE_INFO
+ , IMAGE_TY
+ FROM IMGTEMP
+ WHERE ORGNZT_CODE = #{orgCode}
+ AND ERNCSL_SE = #{erncslSe}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_maria.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_postgres.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="PrntngOutptDA">
+
+ <resultMap id="PrntngOutptResult" type="egovframework.com.utl.pao.service.PrntngOutptVO">
+ <result property="imgInfo" column="IMAGE_INFO"/>
+ <result property="imgType" column="IMAGE_TY"/>
+ </resultMap>
+
+ <select id="selectErncsl" parameterType="egovframework.com.utl.pao.service.PrntngOutptVO" resultMap="PrntngOutptResult">
+
+ SELECT IMAGE_INFO
+ , IMAGE_TY
+ FROM IMGTEMP
+ WHERE ORGNZT_CODE = #{orgCode}
+ AND ERNCSL_SE = #{erncslSe}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_cubrid.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_cubrid.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_cubrid.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="PrntngOutptDA">
+
+ <resultMap id="PrntngOutptResult" type="egovframework.com.utl.pao.service.PrntngOutptVO">
+ <result property="imgInfo" column="IMAGE_INFO"/>
+ <result property="imgType" column="IMAGE_TY"/>
+ </resultMap>
+
+ <select id="selectErncsl" parameterType="egovframework.com.utl.pao.service.PrntngOutptVO" resultMap="PrntngOutptResult">
+
+ SELECT IMAGE_INFO
+ , IMAGE_TY
+ FROM IMGTEMP
+ WHERE ORGNZT_CODE = #{orgCode}
+ AND ERNCSL_SE = #{erncslSe}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_cubrid.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_oracle.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_oracle.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_oracle.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="PrntngOutptDA">
+
+ <resultMap id="PrntngOutptResult" type="egovframework.com.utl.pao.service.PrntngOutptVO">
+ <result property="imgInfo" column="IMAGE_INFO"/>
+ <result property="imgType" column="IMAGE_TY"/>
+ </resultMap>
+
+ <select id="selectErncsl" parameterType="egovframework.com.utl.pao.service.PrntngOutptVO" resultMap="PrntngOutptResult">
+
+ SELECT IMAGE_INFO
+ , IMAGE_TY
+ FROM IMGTEMP
+ WHERE ORGNZT_CODE = #{orgCode}
+ AND ERNCSL_SE = #{erncslSe}
+
+ </select>
+
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/utl/pao/EgovPrntngOutpt_SQL_oracle.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/config/mapper-config.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/config/mapper-config.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/config/mapper-config.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+
+ <!--Mybatis 설정 -->
+ <settings>
+ <!-- 전통적인 데이터베이스 컬럼명 형태인 A_COLUMN을 CamelCase형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 -->
+ <setting name="mapUnderscoreToCamelCase" value="true"></setting>
+ <!-- 파라미터에 Null 값이 있을 경우 에러 처리 -->
+ <setting name="jdbcTypeForNull" value="VARCHAR"></setting>
+ </settings>
+
+ <!-- Type Aliases 설정-->
+ <typeAliases>
+ <typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap" />
+ <typeAlias alias="FileVO" type="egovframework.com.cmm.service.FileVO" />
+ <typeAlias alias="ComDefaultCodeVO" type="egovframework.com.cmm.ComDefaultCodeVO" />
+ <typeAlias alias="comDefaultVO" type="egovframework.com.cmm.ComDefaultVO" />
+ </typeAliases>
+
+</configuration>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/config/mapper-config.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sec/ram/EgovSecurityManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sec/ram/EgovSecurityManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sec/ram/EgovSecurityManage.xml (revision 7)
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="authorManage">
+ <field property="authorCode" depends="required, maxlength">
+ <arg0 key="권한 코드" resource="true"/>
+ <arg1 key="30" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>30</var-value>
+ </var>
+ </field>
+ <field property="authorNm" depends="required, maxlength">
+ <arg0 key="권한 명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="authorDc" depends="maxlength">
+ <arg0 key="설명" resource="true"/>
+ <arg1 key="200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+ <formset>
+ <form name="groupManage">
+ <field property="groupNm" depends="required, maxlength">
+ <arg0 key="그룹 명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="groupDc" depends="maxlength">
+ <arg0 key="설명" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+ <formset>
+ <form name="roleManage">
+ <field property="roleNm" depends="required, maxlength">
+ <arg0 key="롤 명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="rolePtn" depends="required, maxlength">
+ <arg0 key="롤 패턴" resource="true"/>
+ <arg1 key="300" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>300</var-value>
+ </var>
+ </field>
+ <field property="roleDc" depends="maxlength">
+ <arg0 key="롤 설명" resource="true"/>
+ <arg1 key="200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ <field property="roleSort" depends="required, integer, maxlength">
+ <arg0 key="롤 Sort" resource="true"/>
+ <arg1 key="10" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>10</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sec/ram/EgovSecurityManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/scp/EgovArticleScrapRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/scp/EgovArticleScrapRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/scp/EgovArticleScrapRegist.xml (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="articleScrapVO">
+ <field property="scrapNm" depends="required">
+ <arg0 key="comCopScp.articleScrapVO.regist.scrapNm" />
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/scp/EgovArticleScrapRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/com/EgovCopComManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/com/EgovCopComManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/com/EgovCopComManage.xml (revision 7)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+ <formset>
+ <form name="templateInf" >
+ <field property="tmplatNm" depends="required, maxlength">
+ <arg0 key="cop.tmplatNm" />
+ <arg1 key="120" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>120</var-value>
+ </var>
+ </field>
+ <field property="tmplatCours" depends="required, maxlength">
+ <arg0 key="cop.tmplatCours" />
+ <arg1 key="2000" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>2000</var-value>
+ </var>
+ </field>
+ <field property="tmplatSeCode" depends="required">
+ <arg0 key="cop.tmplatSeCode" />
+ </field>
+ </form>
+ <form name="boardUseInf" >
+ <field property="bbsId" depends="required">
+ <arg0 key="cop.bbsNm" />
+ </field>
+ <field property="trgetId" depends="required">
+ <arg0 key="cop.trgetNm" />
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/com/EgovCopComManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovSatisfactionRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovSatisfactionRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovSatisfactionRegist.xml (revision 7)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="satisfaction">
+ <field property="wrterNm" depends="required, maxlength">
+ <arg0 key="cop.satisfaction.wrterNm" />
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+ <field property="stsfdgCn" depends="maxlength">
+ <arg0 key="cop.satisfaction.stsfdgCn" />
+ <arg1 key="200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ <field property="stsfdg" depends="required">
+ <arg0 key="cop.satisfaction.stsfdg" />
+ </field>
+ <field property="stsfdgPassword" depends="required">
+ <arg0 key="cop.satisfaction.stsfdgPassword" />
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovSatisfactionRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBlogRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBlogRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBlogRegist.xml (revision 7)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="blogMasterVO">
+
+ <field property="blogNm" depends="required, maxlength">
+ <arg0 key="comCopBlog.blogMasterVO.regist.blogNm" />
+ <arg1 key="120" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>120</var-value>
+ </var>
+ </field>
+
+ <field property="blogIntrcn" depends="required, maxlength">
+ <arg0 key="comCopBlog.blogMasterVO.regist.blogIntrcn" />
+ <arg1 key="2000" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>2000</var-value>
+ </var>
+ </field>
+
+ <field property="useAt" depends="required">
+ <arg0 key="comCopBlog.blogMasterVO.regist.useAt" />
+ </field>
+
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBlogRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBBSMasterRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBBSMasterRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBBSMasterRegist.xml (revision 7)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="boardMasterVO">
+ <field property="bbsNm" depends="required, maxlength">
+ <arg0 key="comCopBbs.boardMasterVO.regist.bbsNm" />
+ <arg1 key="120" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>120</var-value>
+ </var>
+ </field>
+
+ <field property="bbsIntrcn" depends="required, maxlength">
+ <arg0 key="comCopBbs.boardMasterVO.regist.bbsIntrcn" />
+ <arg1 key="2000" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>2000</var-value>
+ </var>
+ </field>
+ <field property="bbsTyCode" depends="required">
+ <arg0 key="comCopBbs.boardMasterVO.regist.bbsTyCode" />
+ </field>
+ <field property="replyPosblAt" depends="required">
+ <arg0 key="comCopBbs.boardMasterVO.regist.replyPosblAt" />
+ </field>
+ <field property="fileAtchPosblAt" depends="required">
+ <arg0 key="comCopBbs.boardMasterVO.regist.fileAtchPosblAt" />
+ </field>
+ <field property="useAt" depends="required">
+ <arg0 key="comCopBbs.boardMasterVO.regist.useAt" />
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovBBSMasterRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovArticleRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovArticleRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovArticleRegist.xml (revision 7)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="articleVO">
+ <field property="nttSj" depends="required, maxlength">
+ <arg0 key="comCopBbs.articleVO.regist.nttSj" />
+ <arg1 key="1200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>1200</var-value>
+ </var>
+ </field>
+ <field property="nttCn" depends="required">
+ <arg0 key="comCopBbs.articleVO.regist.nttCn" />
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/bbs/EgovArticleRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/clb/EgovClubRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/clb/EgovClubRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/clb/EgovClubRegist.xml (revision 7)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+ <formset>
+ <form name="club">
+ <field property="cmmntyId" depends="required">
+ <arg0 key="cop.cmmntyNm" />
+ </field>
+ <field property="clbNm" depends="required, maxlength">
+ <arg0 key="cop.clbNm" />
+ <arg1 key="120" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>120</var-value>
+ </var>
+ </field>
+ <field property="clbIntrcn" depends="required, maxlength">
+ <arg0 key="cop.clbIntrcn" />
+ <arg1 key="1200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>1200</var-value>
+ </var>
+ </field>
+ <field property="tmplatId" depends="required">
+ <arg0 key="cop.tmplatId" />
+ </field>
+ <field property="emplyrId" depends="required">
+ <arg0 key="cop.clbOprtr" />
+ </field>
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/clb/EgovClubRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/cmt/EgovArticleCommentRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/cmt/EgovArticleCommentRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/cmt/EgovArticleCommentRegist.xml (revision 7)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="formComment">
+ <field property="commentCn" depends="required, maxlength">
+ <arg0 key="comCopCmt.articleCommentVO.commentCn" />
+ <arg1 key="200" resource="false"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+ <formset>
+ <form name="articleCommentVO">
+ <field property="commentCn" depends="required, maxlength">
+ <arg0 key="comCopCmt.articleCommentVO.commentCn" />
+ <arg1 key="200" resource="false"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/cmt/EgovArticleCommentRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/ems/EgovMailRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/ems/EgovMailRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/ems/EgovMailRegist.xml (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="sndngMailVO">
+ <field property="recptnPerson" depends="required, email, maxlength">
+ <arg0 key="받는사람" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ <field property="sj" depends="required, maxlength">
+ <arg0 key="제목" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/ems/EgovMailRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/cop/cmy/EgovCommuMasterRegist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/cop/cmy/EgovCommuMasterRegist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/cop/cmy/EgovCommuMasterRegist.xml (revision 7)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+ <formset>
+ <form name="commuMasterVO">
+ <field property="cmmntyNm" depends="required, maxlength">
+ <arg0 key="comCopCmy.commuMasterVO.regist.cmmntyNm" />
+ <arg1 key="120" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>120</var-value>
+ </var>
+ </field>
+ <field property="cmmntyIntrcn" depends="required, maxlength">
+ <arg0 key="comCopCmy.commuMasterVO.regist.cmmntyIntrcn" />
+ <arg1 key="1200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>1200</var-value>
+ </var>
+ </field>
+<!-- <field property="tmplatId" depends="required"> -->
+<!-- <arg0 key="cop.tmplatId" /> -->
+<!-- </field> -->
+<!-- <field property="emplyrId" depends="required"> -->
+<!-- <arg0 key="cop.cmmntyMngr" /> -->
+<!-- </field> -->
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/cop/cmy/EgovCommuMasterRegist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovUserManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovUserManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovUserManage.xml (revision 7)
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+
+ <form name="userManageVO">
+
+ <field property="emplyrId" depends="required, maxlength">
+ <arg0 key="사용자아이디" resource="true"/>
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+
+ <field property="emplyrNm" depends="required, maxlength">
+ <arg0 key="사용자이름" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ <field property="password" depends="required, password1, pwdCheckSeries, pwdCheckRepeat, pwdCheckComb3">
+ <arg0 key="비밀번호" resource="true"/>
+ </field>
+
+ <field property="passwordHint" depends="required">
+ <arg0 key="비밀번호힌트" resource="true"/>
+ </field>
+
+ <field property="passwordCnsr" depends="required, maxlength">
+ <arg0 key="비밀번호정답" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <!--
+ <field property="ihidnum" depends="required, ihidnum">
+ <arg0 key="주민등록번호" resource="true"/>
+ </field>
+ -->
+ <field property="areaNo" depends="required, maxlength, integer">
+ <arg0 key="집지역번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="homemiddleTelno" depends="required, maxlength, integer">
+ <arg0 key="집중간전화번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="homeendTelno" depends="required, maxlength, integer">
+ <arg0 key="집마지막전화번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="offmTelno" depends="maxlength">
+ <arg0 key="사무실전화번호" resource="true"/>
+ <arg1 key="15" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>15</var-value>
+ </var>
+ </field>
+
+ <field property="fxnum" depends="maxlength">
+ <arg0 key="팩스번호" resource="true"/>
+ <arg1 key="15" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>15</var-value>
+ </var>
+ </field>
+
+ <field property="moblphonNo" depends="maxlength">
+ <arg0 key="핸드폰번호" resource="true"/>
+ <arg1 key="15" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>15</var-value>
+ </var>
+ </field>
+
+ <field property="emailAdres" depends="required, email, maxlength">
+ <arg0 key="이메일주소" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ <field property="zip" depends="required">
+ <arg0 key="우편번호" resource="true"/>
+ </field>
+
+ <field property="homeadres" depends="required, maxlength">
+ <arg0 key="주소" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+
+ <field property="groupId" depends="required">
+ <arg0 key="그룹아이디" resource="true"/>
+ </field>
+
+
+ <field property="emplyrSttusCode" depends="required">
+ <arg0 key="사용자상태코드" resource="true"/>
+ </field>
+
+ <field property="subDn" depends="maxlength">
+ <arg0 key="사용자DN" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovUserManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovMberManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovMberManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovMberManage.xml (revision 7)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+
+ <form name="mberManageVO">
+
+ <field property="mberId" depends="required, maxlength">
+ <arg0 key="일반회원아이디" resource="true"/>
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+
+ <field property="mberNm" depends="required, maxlength">
+ <arg0 key="일반회원이름" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ <field property="password" depends="required, password1, pwdCheckSeries, pwdCheckRepeat, pwdCheckComb3">
+ <arg0 key="비밀번호" resource="true"/>
+ </field>
+
+ <field property="passwordHint" depends="required">
+ <arg0 key="비밀번호힌트" resource="true"/>
+ </field>
+
+ <field property="passwordCnsr" depends="required, maxlength">
+ <arg0 key="비밀번호정답" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <!--
+ <field property="ihidnum" depends="required, ihidnum">
+ <arg0 key="주민등록번호" resource="true"/>
+ </field>
+ -->
+ <field property="areaNo" depends="required, maxlength, integer">
+ <arg0 key="집지역번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="middleTelno" depends="required, maxlength, integer">
+ <arg0 key="집중간전화번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="endTelno" depends="required, maxlength, integer">
+ <arg0 key="집마지막전화번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="mberFxnum" depends="maxlength">
+ <arg0 key="팩스번호" resource="true"/>
+ <arg1 key="15" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>15</var-value>
+ </var>
+ </field>
+
+ <field property="moblphonNo" depends="required, maxlength">
+ <arg0 key="핸드폰번호" resource="true"/>
+ <arg1 key="15" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>15</var-value>
+ </var>
+ </field>
+
+ <field property="mberEmailAdres" depends="required, email, maxlength">
+ <arg0 key="이메일주소" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ <field property="zip" depends="required">
+ <arg0 key="우편번호" resource="true"/>
+ <arg1 key="6" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>6</var-value>
+ </var>
+ </field>
+
+ <field property="adres" depends="required, maxlength">
+ <arg0 key="주소" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+
+ <!--<field property="groupId" depends="required">
+ <arg0 key="그룹코드" resource="true"/>
+ </field>-->
+
+ <field property="mberSttus" depends="required">
+ <arg0 key="일반회원상태코드" resource="true"/>
+ </field>
+
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovMberManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovPassword.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovPassword.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovPassword.xml (revision 7)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+
+ <form name="passwordChgVO">
+
+ <field property="newPassword" depends="required, password1, pwdCheckSeries, pwdCheckRepeat, pwdCheckComb3">
+ <arg0 key="비밀번호" resource="true"/>
+ </field>
+
+ <field property="oldPassword" depends="required">
+ <arg0 key="이전비밀번호" resource="true"/>
+ </field>
+
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovPassword.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovEntrprsManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovEntrprsManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovEntrprsManage.xml (revision 7)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+
+ <form name="entrprsManageVO">
+ <field property="entrprsmberId" depends="required, maxlength">
+ <arg0 key="기업회원아이디" resource="true"/>
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+
+ <field property="cmpnyNm" depends="required, maxlength">
+ <arg0 key="회사명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ <field property="entrprsMberPassword" depends="required, password1, pwdCheckSeries, pwdCheckRepeat, pwdCheckComb3">
+ <arg0 key="비밀번호" resource="true"/>
+ </field>
+
+ <field property="entrprsMberPasswordHint" depends="required">
+ <arg0 key="비밀번호힌트" resource="true"/>
+ </field>
+
+ <field property="entrprsMberPasswordCnsr" depends="required, maxlength">
+ <arg0 key="비밀번호정답" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+
+ <field property="bizrno" depends="required">
+ <arg0 key="사업자등록번호" resource="true"/>
+ </field>
+
+ <field property="areaNo" depends="required, maxlength, integer">
+ <arg0 key="회사지역번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="entrprsMiddleTelno" depends="required, maxlength, integer">
+ <arg0 key="회사중간전화번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="entrprsEndTelno" depends="required, maxlength, integer">
+ <arg0 key="회사마지막전화번호" resource="true"/>
+ <arg1 key="4" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>4</var-value>
+ </var>
+ </field>
+
+ <field property="zip" depends="required">
+ <arg0 key="우편번호" resource="true"/>
+ </field>
+
+ <field property="adres" depends="required, maxlength">
+ <arg0 key="주소" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+
+ <field property="applcntNm" depends="required">
+ <arg0 key="신청자이름" resource="true"/>
+ </field>
+ <!--
+ <field property="applcntIhidnum" depends="required, ihidnum">
+ <arg0 key="신청자주민등록번호" resource="true"/>
+ </field>
+ -->
+ <field property="applcntEmailAdres" depends="required, email,maxlength">
+ <arg0 key="신청자이메일주소" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ <!--<field property="groupId" depends="required">
+ <arg0 key="그룹코드" resource="true"/>
+ </field> -->
+
+ <field property="entrprsMberSttus" depends="required">
+ <arg0 key="사용자상태코드" resource="true"/>
+ </field>
+
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/uss/umt/EgovEntrprsManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/bmm/EgovBkmkmanage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/mnu/bmm/EgovBkmkmanage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/mnu/bmm/EgovBkmkmanage.xml (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+ <formset>
+ <form name="bkmk">
+ <field property="menuNm" depends="required, maxlength">
+ <arg0 key="메뉴명" />
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/bmm/EgovBkmkmanage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuSiteMap.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuSiteMap.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuSiteMap.xml (revision 7)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+ <formset>
+ <form name="menuSiteMapVO">
+ <field property="menuNo" depends="required, integer">
+ <arg0 key="메뉴번호" resource="true"/>
+ </field>
+ <field property="menuOrdr" depends="required, integer">
+ <arg0 key="메뉴순서" resource="true"/>
+ </field>
+ <field property="menuNm" depends="required, maxlength">
+ <arg0 key="메뉴명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="upperMenuId" depends="required, integer">
+ <arg0 key="메뉴상위번호" resource="true"/>
+ </field>
+ <field property="progrmFileNm" depends="required, maxlength">
+ <arg0 key="프로그램파일명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="menuDc" depends="maxlength">
+ <arg0 key="메뉴설명" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="relateImagePath" depends="maxlength">
+ <arg0 key="관련이미지경로" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="relateImageNm" depends="maxlength">
+ <arg0 key="관련이미지명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuSiteMap.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuCreat.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuCreat.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuCreat.xml (revision 7)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+ <formset>
+ <form name="menuCreatVO">
+ <field property="menuNo" depends="required, integer">
+ <arg0 key="메뉴번호" resource="true"/>
+ </field>
+ <field property="menuOrdr" depends="required, integer">
+ <arg0 key="메뉴순서" resource="true"/>
+ </field>
+ <field property="menuNm" depends="required, maxlength">
+ <arg0 key="메뉴명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="upperMenuId" depends="required, integer">
+ <arg0 key="메뉴상위번호" resource="true"/>
+ </field>
+ <field property="progrmFileNm" depends="required, maxlength">
+ <arg0 key="프로그램파일명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="menuDc" depends="maxlength">
+ <arg0 key="메뉴설명" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="relateImagePath" depends="maxlength">
+ <arg0 key="관련이미지경로" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="relateImageNm" depends="maxlength">
+ <arg0 key="관련이미지명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mcm/EgovMenuCreat.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mpm/EgovMenuManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mpm/EgovMenuManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mpm/EgovMenuManage.xml (revision 7)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+ <formset>
+ <form name="menuManageVO">
+ <field property="menuNo" depends="required, integer">
+ <arg0 key="comSymMnuMpm.menuManage.validate.menuNo"/>
+ </field>
+ <field property="menuOrdr" depends="required, integer">
+ <arg0 key="comSymMnuMpm.menuManage.validate.menuOrdr"/>
+ </field>
+ <field property="menuNm" depends="required, maxlength">
+ <arg0 key="comSymMnuMpm.menuManage.validate.menuNm"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="upperMenuId" depends="required, integer">
+ <arg0 key="comSymMnuMpm.menuManage.validate.upperMenuId"/>
+ </field>
+ <field property="progrmFileNm" depends="required, maxlength">
+ <arg0 key="comSymMnuMpm.menuManage.validate.progrmFileNm"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="menuDc" depends="maxlength">
+ <arg0 key="comSymMnuMpm.menuManage.validate.menuDc"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="relateImagePath" depends="maxlength">
+ <arg0 key="comSymMnuMpm.menuManage.validate.relateImagePath"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="relateImageNm" depends="maxlength">
+ <arg0 key="comSymMnuMpm.menuManage.validate.relateImageNm"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/mnu/mpm/EgovMenuManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManageDtl.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManageDtl.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManageDtl.xml (revision 7)
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+<form-validation>
+ <formset>
+ <form name="progrmManageDtlVO">
+ <field property="progrmFileNm" depends="required, maxlength">
+ <arg0 key="프로그램파일명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="rqesterNo" depends="required, integer">
+ <arg0 key="요청번호" resource="true"/>
+ </field>
+ <field property="rqesterPersonId" depends="required, maxlength">
+ <arg0 key="요청자ID" resource="true"/>
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+ <field property="changerqesterCn" depends="maxlength">
+ <arg0 key="변경요청내용" resource="true"/>
+ <arg1 key="1000" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>1000</var-value>
+ </var>
+ </field>
+ <field property="rqesterProcessCn" depends="maxlength">
+ <arg0 key="요청처리내용" resource="true"/>
+ <arg1 key="1000" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>1000</var-value>
+ </var>
+ </field>
+ <field property="opetrId" depends="maxlength">
+ <arg0 key="처리자ID" resource="true"/>
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+ <field property="processDe" depends="date">
+ <arg0 key="처리일자" resource="true"/>
+ <var>
+ <var-name>datePatternStrict</var-name>
+ <var-value>yyyy-MM-dd</var-value>
+ </var>
+ </field>
+ <field property="rqesterDe" depends="required, date">
+ <arg0 key="요청일자" resource="true"/>
+ <var>
+ <var-name>datePatternStrict</var-name>
+ <var-value>yyyy-MM-dd</var-value>
+ </var>
+ </field>
+ <field property="rqesterSj" depends="required, maxlength">
+ <arg0 key="요청제목" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManageDtl.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManage.xml (revision 7)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+<form-validation>
+ <formset>
+ <form name="progrmManageVO">
+ <field property="progrmFileNm" depends="required, maxlength">
+ <arg0 key="프로그램파일명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="progrmStrePath" depends="required, maxlength">
+ <arg0 key="프로그램저장경로" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="progrmKoreanNm" depends="required, maxlength">
+ <arg0 key="프로그램한글명" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+ <field property="URL" depends="required, maxlength">
+ <arg0 key="URL" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="progrmDc" depends="maxlength">
+ <arg0 key="프로그램설명" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/prm/EgovProgrmManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cca/EgovCmmnCodeManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cca/EgovCmmnCodeManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cca/EgovCmmnCodeManage.xml (revision 7)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="cmmnCodeVO">
+ <field property="codeId" depends="required, maxlength">
+ <arg0 key="comSymCcmCca.cmmnCodeVO.codeId" resource="true"/><!-- 코드ID -->
+ <arg1 key="6" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>6</var-value>
+ </var>
+ </field>
+ <field property="codeIdNm" depends="required, maxlength">
+ <arg0 key="comSymCcmCca.cmmnCodeVO.codeIdNm" resource="true"/><!-- 코드ID명 -->
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="codeIdDc" depends="required, maxlength">
+ <arg0 key="comSymCcmCca.cmmnCodeVO.codeIdDc" resource="true"/><!-- 코드ID설명 -->
+ <arg1 key="200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ <field property="clCode" depends="required, maxlength">
+ <arg0 key="comSymCcmCca.cmmnCodeVO.clCode" resource="true"/><!-- 분류코드 -->
+ <arg1 key="3" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>3</var-value>
+ </var>
+ </field>
+ <field property="useAt" depends="required">
+ <arg0 key="comSymCcmCca.cmmnCodeVO.useAt" resource="true"/><!-- 사용여부 -->
+ </field>
+ </form>
+
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cca/EgovCmmnCodeManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/ccm/ccc/EgovCmmnClCodeManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/ccm/ccc/EgovCmmnClCodeManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/ccm/ccc/EgovCmmnClCodeManage.xml (revision 7)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="cmmnClCodeVO">
+ <field property="clCode" depends="required, maxlength">
+ <arg0 key="comSymCcmCcc.cmmnClCodeVO.clCode" resource="true"/><!-- 분류코드 -->
+ <arg1 key="3" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>3</var-value>
+ </var>
+ </field>
+ <field property="clCodeNm" depends="required, maxlength">
+ <arg0 key="comSymCcmCcc.cmmnClCodeVO.clCodeNm" resource="true"/><!-- 분류코드명 -->
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="clCodeDc" depends="required, maxlength">
+ <arg0 key="comSymCcmCcc.cmmnClCodeVO.clCodeDc" resource="true"/><!-- 분류코드설명 -->
+ <arg1 key="200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ <field property="useAt" depends="required">
+ <arg0 key="comSymCcmCcc.cmmnClCodeVO.useAt" resource="true"/><!-- 사용여부 -->
+ </field>
+ </form>
+
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/ccm/ccc/EgovCmmnClCodeManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cde/EgovCmmnDetailCodeManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cde/EgovCmmnDetailCodeManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cde/EgovCmmnDetailCodeManage.xml (revision 7)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+
+ <form name="cmmnDetailCodeVO">
+ <field property="codeId" depends="required, maxlength">
+ <arg0 key="comSymCcmCde.cmmnDetailCodeVO.codeId" resource="true"/><!-- 코드ID -->
+ <arg1 key="6" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>6</var-value>
+ </var>
+ </field>
+ <field property="code" depends="required, maxlength">
+ <arg0 key="comSymCcmCde.cmmnDetailCodeVO.code" resource="true"/><!-- 상세코드 -->
+ <arg1 key="15" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>15</var-value>
+ </var>
+ </field>
+ <field property="codeNm" depends="required, maxlength">
+ <arg0 key="comSymCcmCde.cmmnDetailCodeVO.codeNm" resource="true"/><!-- 상세코드명 -->
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="codeDc" depends="required, maxlength">
+ <arg0 key="comSymCcmCde.cmmnDetailCodeVO.codeDc" resource="true"/><!-- 상세코드설명 -->
+ <arg1 key="200" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>200</var-value>
+ </var>
+ </field>
+ <field property="useAt" depends="required">
+ <arg0 key="comSymCcmCde.cmmnDetailCodeVO.useAt" resource="true"/><!-- 사용여부 -->
+ </field>
+ </form>
+
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/sym/ccm/cde/EgovCmmnDetailCodeManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/uat/uap/EgovLoginPolicy.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/uat/uap/EgovLoginPolicy.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/uat/uap/EgovLoginPolicy.xml (revision 7)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="loginPolicy">
+ <field property="ipInfo" depends="required, maxlength">
+ <arg0 key="comUatUap.loginPolicy.validate.ipInfo"/>
+ <arg1 key="23" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>23</var-value>
+ </var>
+ </field>
+ <field property="lmttAt" depends="required">
+ <arg0 key="comUatUap.loginPolicy.validate.lmttAt"/>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/uat/uap/EgovLoginPolicy.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/uat/uia/EgovIdPasswordSearch.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/uat/uia/EgovIdPasswordSearch.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/uat/uia/EgovIdPasswordSearch.xml (revision 7)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="passwordVO">
+ <field property="id" depends="required">
+ <arg0 key="아이디" resource="true"/>
+ </field>
+ <field property="name" depends="required">
+ <arg0 key="이름" resource="true"/>
+ </field>
+ <field property="email" depends="required, email">
+ <arg0 key="이메일" resource="true"/>
+ </field>
+ <field property="passwordHint" depends="required">
+ <arg0 key="비밀번호힌트" resource="true"/>
+ </field>
+ <field property="passwordCnsr" depends="required">
+ <arg0 key="비밀번호정답" resource="true"/>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/uat/uia/EgovIdPasswordSearch.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sim/EgovSysInfo.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sim/EgovSysInfo.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sim/EgovSysInfo.xml (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="sysForm3">
+ <field property="memory" depends="required, integer">
+ <arg0 key="메모리" resource="true"/>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sim/EgovSysInfo.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/fsm/EgovFileSysMntrng.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/fsm/EgovFileSysMntrng.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/fsm/EgovFileSysMntrng.xml (revision 7)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="fileSysMntrngVO">
+ <field property="fileSysNm" depends="required, maxlength">
+ <arg0 key="comUtlSysFsm.fileSysMntrng.fileSysNm.label" resource="true"/><!-- 파일시스템명 -->
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+
+ <field property="fileSysManageNm" depends="required, maxlength">
+ <arg0 key="comUtlSysFsm.fileSysMntrng.fileSysManageNm.label" resource="true"/><!-- 파일시스템관리명 -->
+ <arg1 key="255" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>255</var-value>
+ </var>
+ </field>
+
+ <field property="fileSysMg" depends="required">
+ <arg0 key="comUtlSysFsm.fileSysMntrng.fileSysMg.label" resource="true"/><!-- 파일시스템크기 -->
+ </field>
+
+ <field property="fileSysThrhld" depends="required">
+ <arg0 key="comUtlSysFsm.fileSysMntrng.fileSysThrhld.label" resource="true"/><!-- 파일시스템크기 -->
+ </field>
+
+ <field property="mngrNm" depends="required, maxlength">
+ <arg0 key="comUtlSysFsm.fileSysMntrng.mngrNm.label" resource="true"/><!-- 관리자명 -->
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+
+ <field property="mngrEmailAddr" depends="required, maxlength">
+ <arg0 key="comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label" resource="true"/><!-- 관리자이메일주소 -->
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/fsm/EgovFileSysMntrng.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/htm/EgovHttpMon.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/htm/EgovHttpMon.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/htm/EgovHttpMon.xml (revision 7)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="httpMon">
+ <field property="webKind" depends="required, maxlength">
+ <arg0 key="웹서비스종류" resource="true"/>
+ <arg1 key="30" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>30</var-value>
+ </var>
+ </field>
+ <field property="siteUrl" depends="required, maxlength">
+ <arg0 key="사용포트" resource="true"/>
+ <arg1 key="100" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>100</var-value>
+ </var>
+ </field>
+ <field property="mngrNm" depends="required, maxlength">
+ <arg0 key="관리자명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="mngrEmailAddr" depends="required, maxlength, email">
+ <arg0 key="관리자이메일주소" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/htm/EgovHttpMon.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/pxy/EgovProxySvc.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/pxy/EgovProxySvc.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/pxy/EgovProxySvc.xml (revision 7)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="proxySvc">
+ <field property="proxyNm" depends="required, maxlength">
+ <arg0 key="comUtlSysPxy.proxySvc.proxyNm.label" resource="true"/><!-- 프록시명 -->
+ <arg1 key="30" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>30</var-value>
+ </var>
+ </field>
+ <field property="proxyIp" depends="required, maxlength">
+ <arg0 key="comUtlSysPxy.proxySvc.proxyIp.label" resource="true"/><!-- 프록시IP -->
+ <arg1 key="23" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>23</var-value>
+ </var>
+ </field>
+ <field property="proxyPort" depends="required, maxlength, integer">
+ <arg0 key="comUtlSysPxy.proxySvc.proxyPort.label" resource="true"/><!-- 프록시Port -->
+ <arg1 key="10" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>10</var-value>
+ </var>
+ </field>
+ <field property="trgetSvcNm" depends="required, maxlength">
+ <arg0 key="comUtlSysPxy.proxySvc.trgetSvcNm.label" resource="true"/><!-- 대상서비스명 -->
+ <arg1 key="30" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>30</var-value>
+ </var>
+ </field>
+ <field property="svcIp" depends="required, maxlength">
+ <arg0 key="comUtlSysPxy.proxySvc.svcIp.label" resource="true"/><!-- 서비스IP -->
+ <arg1 key="23" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>23</var-value>
+ </var>
+ </field>
+ <field property="svcPort" depends="required, maxlength, integer">
+ <arg0 key="comUtlSysPxy.proxySvc.svcPort.label" resource="true"/><!-- 서비스Port -->
+ <arg1 key="10" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>10</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/pxy/EgovProxySvc.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/nsm/EgovNtwrkSvcMntrng.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/nsm/EgovNtwrkSvcMntrng.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/nsm/EgovNtwrkSvcMntrng.xml (revision 7)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="ntwrkSvcMntrngVO">
+ <field property="sysIp1" depends="required, maxlength">
+ <arg0 key="시스템IP1" resource="true"/>
+ <arg1 key="3" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>3</var-value>
+ </var>
+ </field>
+
+ <field property="sysIp2" depends="required, maxlength">
+ <arg0 key="시스템IP2" resource="true"/>
+ <arg1 key="3" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>3</var-value>
+ </var>
+ </field>
+
+ <field property="sysIp3" depends="required, maxlength">
+ <arg0 key="시스템IP3" resource="true"/>
+ <arg1 key="3" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>3</var-value>
+ </var>
+ </field>
+
+ <field property="sysIp4" depends="required, maxlength">
+ <arg0 key="시스템IP4" resource="true"/>
+ <arg1 key="3" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>3</var-value>
+ </var>
+ </field>
+
+ <field property="sysPort" depends="required, maxlength">
+ <arg0 key="시스템포트" resource="true"/>
+ <arg1 key="5" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>5</var-value>
+ </var>
+ </field>
+
+ <field property="sysNm" depends="required, maxlength">
+ <arg0 key="시스템명" resource="true"/>
+ <arg1 key="255" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>255</var-value>
+ </var>
+ </field>
+
+ <field property="mngrNm" depends="required, maxlength">
+ <arg0 key="관리자명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+
+ <field property="mngrEmailAddr" depends="required, maxlength">
+ <arg0 key="관리자이메일주소" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/nsm/EgovNtwrkSvcMntrng.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/ssy/EgovSynchrnServer.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/ssy/EgovSynchrnServer.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/ssy/EgovSynchrnServer.xml (revision 7)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="synchrnServer">
+ <field property="serverNm" depends="required, maxlength">
+ <arg0 key="서버명" resource="true"/>
+ <arg1 key="30" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>30</var-value>
+ </var>
+ </field>
+ <field property="serverIp" depends="required, maxlength">
+ <arg0 key="서버 IP" resource="true"/>
+ <arg1 key="23" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>23</var-value>
+ </var>
+ </field>
+ <field property="serverPort" depends="required, maxlength, integer">
+ <arg0 key="서버 Port" resource="true"/>
+ <arg1 key="10" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>10</var-value>
+ </var>
+ </field>
+ <field property="ftpId" depends="required, maxlength">
+ <arg0 key="FTP ID" resource="true"/>
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+ <field property="ftpPassword" depends="required, maxlength">
+ <arg0 key="FTP 비밀번호" resource="true"/>
+ <arg1 key="20" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>20</var-value>
+ </var>
+ </field>
+ <field property="synchrnLc" depends="required, maxlength">
+ <arg0 key="동기화 위치" resource="true"/>
+ <arg1 key="255" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>255</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/ssy/EgovSynchrnServer.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/prm/EgovProcessMon.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/prm/EgovProcessMon.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/prm/EgovProcessMon.xml (revision 7)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="processMonVO">
+ <field property="processNm" depends="required, maxlength">
+ <arg0 key="프로세스명" resource="true"/>
+ <arg1 key="30" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>30</var-value>
+ </var>
+ </field>
+ <field property="mngrNm" depends="required, maxlength">
+ <arg0 key="관리자명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ <field property="mngrEmailAddr" depends="required, maxlength, email">
+ <arg0 key="관리자이메일주소" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+ </form>
+
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/prm/EgovProcessMon.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/dbm/EgovDbMntrng.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/dbm/EgovDbMntrng.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/dbm/EgovDbMntrng.xml (revision 7)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="dbMntrng">
+ <field property="dataSourcNm" depends="required, maxlength">
+ <arg0 key="데이타소스명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+
+ <field property="serverNm" depends="required, maxlength">
+ <arg0 key="서버명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+
+ <field property="dbmsKind" depends="required">
+ <arg0 key="DBMS종류" resource="true"/>
+ </field>
+
+ <field property="ceckSql" depends="required, maxlength">
+ <arg0 key="체크SQL" resource="true"/>
+ <arg1 key="250" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>250</var-value>
+ </var>
+ </field>
+
+ <field property="mngrNm" depends="required, maxlength">
+ <arg0 key="관리자명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+
+ <field property="mngrEmailAddr" depends="required, maxlength, email">
+ <arg0 key="관리자이메일주소" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/dbm/EgovDbMntrng.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com/utl/sys/trm/EgovTrsmrcvMntrng.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com/utl/sys/trm/EgovTrsmrcvMntrng.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com/utl/sys/trm/EgovTrsmrcvMntrng.xml (revision 7)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<form-validation>
+
+ <formset>
+ <form name="trsmrcvMntrng">
+ <field property="cntcId" depends="required, maxlength">
+ <arg0 key="연계ID" resource="true"/>
+ <arg1 key="8" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>8</var-value>
+ </var>
+ </field>
+
+ <field property="testClassNm" depends="required, maxlength">
+ <arg0 key="테스트클래스명" resource="true"/>
+ <arg1 key="255" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>255</var-value>
+ </var>
+ </field>
+
+ <field property="mngrNm" depends="required, maxlength">
+ <arg0 key="관리자명" resource="true"/>
+ <arg1 key="60" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>60</var-value>
+ </var>
+ </field>
+
+ <field property="mngrEmailAddr" depends="required, maxlength, email">
+ <arg0 key="관리자이메일주소" resource="true"/>
+ <arg1 key="50" resource="true"/>
+ <var>
+ <var-name>maxlength</var-name>
+ <var-value>50</var-value>
+ </var>
+ </field>
+
+ </form>
+ </formset>
+
+</form-validation>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/validator/com/utl/sys/trm/EgovTrsmrcvMntrng.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/com-rules.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/com-rules.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/com-rules.xml (revision 7)
@@ -0,0 +1,663 @@
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
+<!--
+
+ This file contains the default Struts Validator pluggable validator
+ definitions. It should be placed somewhere under /WEB-INF and
+ referenced in the struts-config.xml under the plug-in element
+ for the ValidatorPlugIn.
+
+ <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
+ <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
+ /WEB-INF/validation.xml"/>
+ </plug-in>
+
+ These are the default error messages associated with
+ each validator defined in this file. They should be
+ added to your projects ApplicationResources.properties
+ file or you can associate new ones by modifying the
+ pluggable validators msg attributes in this file.
+
+ # Struts Validator Error Messages
+ errors.required={0} is required.
+ errors.minlength={0} can not be less than {1} characters.
+ errors.maxlength={0} can not be greater than {1} characters.
+ errors.invalid={0} is invalid.
+
+ errors.byte={0} must be a byte.
+ errors.short={0} must be a short.
+ errors.integer={0} must be an integer.
+ errors.long={0} must be a long.
+ errors.float={0} must be a float.
+ errors.double={0} must be a double.
+
+ errors.date={0} is not a date.
+ errors.range={0} is not in the range {1} through {2}.
+ errors.creditcard={0} is an invalid credit card number.
+ errors.email={0} is an invalid e-mail address.
+
+-->
+
+<form-validation>
+
+ <global>
+
+ <!-- 패스워드 validation
+ 1. password1 : [길이] 8~20자 이내
+
+ 2. [삭제]password2 : 한글,특수문자,띄어쓰기는 안됨
+ 3. [삭제]password3 : 연속된 문자나 순차적인 문자 4개이상 사용금지
+ 4. [삭제]password4 : 반복문자나 숫자 연속 4개이상 사용금지
+
+ 5. pwdCheckComb3 : [조합] 영문자,숫자,특수문자(~!@#$%^&*?)의 최소 3가지 조합
+ 6. pwdCheckComb4 : [조합] 영대문자,영소문자,숫자,특수문자(~!@#$%^&*?)의 최소 4가지 조합
+ 6. pwdCheckSeries : [연속] 연속된 3개 이상의 문자나 숫자 사용 금지
+ 6. pwdCheckRepeat : [반복] 반복된 3개 이상의 문자나 숫자 사용 금지
+ -->
+ <validator name="password1"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePassword1"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.password1">
+ <javascript><![CDATA[
+ function validatePassword1(form) {
+
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new password1();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || !checkPassword1(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function checkPassword1(pwd) {
+
+ p_pass = pwd.value;
+
+ if (pwd.value.length < 8 || pwd.value.length > 20 ){
+
+ pwd.value ="";
+ pwd.focus();
+ return false;
+ }
+ return pwd;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="password2"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePassword2"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.password2">
+ <javascript><![CDATA[
+ function validatePassword2(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new password2();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || !checkPassword2(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function checkPassword2(pwd) {
+ var str = pwd.value;
+ for (var i=0; i < str .length; i++) {
+ ch_char = str .charAt(i);
+ ch = ch_char.charCodeAt();
+ if( (ch >= 33 && ch <= 47) || (ch >= 58 && ch <= 64) || (ch >= 91 && ch <= 96) || (ch >= 123 && ch <= 126) ) {
+ return false;
+ }
+ }
+ return pwd;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="password3"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePassword3"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.password3">
+ <javascript><![CDATA[
+ function validatePassword3(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new password3();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || !checkPassword3(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function checkPassword3(pwd) {
+ p_pass = pwd.value;
+ var cnt=0,cnt2=1,cnt3=1;
+ var temp="";
+
+ for(i=0;i < p_pass.length;i++){
+ temp_pass1 = p_pass.charAt(i);
+ next_pass = (parseInt(temp_pass1.charCodeAt(0)))+1;
+ temp_p = p_pass.charAt(i+1);
+ temp_pass2 = (parseInt(temp_p.charCodeAt(0)));
+ if (temp_pass2 == next_pass)
+ cnt2 = cnt2 + 1;
+ else
+ cnt2 = 1;
+ if (temp_pass1 == temp_p)
+ cnt3 = cnt3 + 1;
+ else
+ cnt3 = 1;
+ if (cnt2 > 3) break;
+ if (cnt3 > 3) break;
+ }
+ if (cnt2 > 3){
+ pwd.value ="";
+ pwd.focus();
+ return false;
+ }
+ return pwd;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="password4"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePassword4"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.password4">
+ <javascript><![CDATA[
+ function validatePassword4(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new password4();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || !checkPassword4(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function checkPassword4(pwd) {
+ p_pass = pwd.value;
+ var cnt=0,cnt2=1,cnt3=1;
+ var temp="";
+
+ for(i=0;i < p_pass.length;i++){
+ temp_pass1 = p_pass.charAt(i);
+ next_pass = (parseInt(temp_pass1.charCodeAt(0)))+1;
+ temp_p = p_pass.charAt(i+1);
+ temp_pass2 = (parseInt(temp_p.charCodeAt(0)));
+ if (temp_pass2 == next_pass)
+ cnt2 = cnt2 + 1;
+ else
+ cnt2 = 1;
+ if (temp_pass1 == temp_p)
+ cnt3 = cnt3 + 1;
+ else
+ cnt3 = 1;
+ if (cnt2 > 3) break;
+ if (cnt3 > 3) break;
+ }
+ if (cnt3 > 3){
+ pwd.value ="";
+ pwd.focus();
+ return false;
+ }
+ return pwd;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="pwdCheckComb3"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePwdCheckComb3"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.pwdcheckcomb3">
+ <javascript><![CDATA[
+ function validatePwdCheckComb3(form) {
+
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new pwdCheckComb3();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || !isMoreThan2CharTypeComb(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function isMoreThan2CharTypeComb(pwdField) {
+
+ var pwd = pwdField.value;
+
+ var passRegex = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[~!@#$%^&*?])[A-Za-z\d~!@#$%^&*?]+$/;
+
+ return passRegex.test(pwd) ? pwdField : false;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="pwdCheckComb4"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePwdCheckComb4"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.pwdcheckcomb4">
+ <javascript><![CDATA[
+ function validatePwdCheckComb4(form) {
+
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new pwdCheckComb4();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || !isMoreThan3CharTypeComb(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function isMoreThan3CharTypeComb(pwdField) {
+
+ var pwd = pwdField.value;
+
+ var passRegex = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[~!@#$%^&*?])[A-Za-z\d~!@#$%^&*?]+$/;
+
+ return passRegex.test(pwd) ? pwdField : false;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="pwdCheckSeries"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePwdCheckSeries"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.pwdcheckseries">
+ <javascript><![CDATA[
+ function validatePwdCheckSeries(form) {
+
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new pwdCheckSeries();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || isSeriesCharacter(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ //연속된 숫자,문자
+ function isSeriesCharacter(pwdField) {
+
+ //패스워드 확인
+ var rawPassword = pwdField.value;
+
+ //최대 연속 횟수 설정
+ var MAX_SERIES_CNT = 2;
+
+ //감소 Cnt, 증가 Cnt 초기화
+ var seriesDecCnt=1 , seriesIncCnt=1;
+
+ for(var i=0; i < rawPassword.length ; i++){
+ //현재 CharCode , 다음 CharCode 초기화
+ var currentCharCode=0, nextCharCode=0;
+
+ currentCharCode = rawPassword.charCodeAt(i);
+ nextCharCode = rawPassword.charCodeAt(i+1);
+
+ //연속 판단
+ //감소된 CharCode, 증가된 CharCode 초기화
+ var decreasedCharCode=0, increasedCharCode=0;
+
+ decreasedCharCode = currentCharCode - 1;
+ increasedCharCode = currentCharCode + 1;
+
+ decreasedCharCode == nextCharCode ? seriesDecCnt++ : seriesDecCnt = 1;
+ increasedCharCode == nextCharCode ? seriesIncCnt++ : seriesIncCnt = 1;
+
+ if (seriesDecCnt > MAX_SERIES_CNT) break;
+ if (seriesIncCnt > MAX_SERIES_CNT) break;
+ }
+
+ if (seriesDecCnt > MAX_SERIES_CNT || seriesIncCnt > MAX_SERIES_CNT ){
+ pwdField.value ="";
+ pwdField.focus();
+ return pwdField;
+ }
+
+ return false;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="pwdCheckRepeat"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validatePwdCheckRepeat"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="" msg="errors.pwdcheckrepeat">
+ <javascript><![CDATA[
+ function validatePwdCheckRepeat(form) {
+
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oPassword = new pwdCheckRepeat();
+ for (x in oPassword) {
+ var field = form[oPassword[x][0]];
+ if (field.type == 'password') {
+ if (trim(field.value).length==0 || isRepeatCharacter(field)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oPassword[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ //반복된 숫자,문자
+ function isRepeatCharacter(pwdField) {
+
+ //패스워드 확인
+ var rawPassword = pwdField.value;
+
+ //최대 반복 횟수
+ var MAX_REPEAT_CNT = 2;
+
+ //반복 Cnt 초기화
+ var repeatCnt = 1;
+
+ for(var i=0; i < rawPassword.length ; i++){
+ //현재 CharCode , 다음 CharCode 초기화
+ var currentCharCode=0, nextCharCode=0;
+
+ currentCharCode = rawPassword.charCodeAt(i);
+ nextCharCode = rawPassword.charCodeAt(i+1);
+
+ //반복 판단
+ currentCharCode == nextCharCode ? repeatCnt++ : repeatCnt = 1;
+
+ if (repeatCnt > MAX_REPEAT_CNT) break;
+ }
+
+ if (repeatCnt > MAX_REPEAT_CNT){
+ pwdField.value ="";
+ pwdField.focus();
+ return pwdField;
+ }
+
+ return false;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ <validator name="minInteger"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validateMinInteger"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+ msg="errors.minInteger">
+ <javascript><![CDATA[
+ function validateMinInteger(form){
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oInteger = new minInteger();
+ for (x in oInteger) {
+ var field = form[oInteger[x][0]];
+
+ if (field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+
+ if (!isOK(value)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oInteger[x][1];
+
+ } else {
+ var iValue = parseInt(value);
+ if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oInteger[x][1];
+ bValid = false;
+ }
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function isOK(vv){
+ if (vv >0) return true;
+ else return false;
+ }
+ ]]>
+ </javascript>
+ </validator>
+ <validator name="english"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validateEnglish"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+ msg="errors.english">
+ <javascript><![CDATA[
+ function validateEnglish(form){
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oEnglish = new english();
+ for (x in oEnglish) {
+ var field = form[oEnglish[x][0]];
+ if (field.type == 'text' || field.type == 'textarea') {
+ if (trim(field.value).length==0 || !checkEnglish(field.value)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oEnglish[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function checkEnglish(EnglishStr){
+ for(var i=0;i<EnglishStr.length;i++){
+ var EnglishChar = EnglishStr.charCodeAt(i);
+ if( !( 0x61 <= EnglishChar && EnglishChar <= 0x7A ) && !( 0x41 <= EnglishChar && EnglishChar <= 0x5A ) ) {
+ return false;
+ }
+ }
+ return true;
+ }
+ ]]>
+ </javascript>
+ </validator>
+
+ </global>
+
+</form-validation>
Property changes on: base3.10/src/main/resources/egovframework/validator/com-rules.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/validator/validator-rules.xml
===================================================================
--- base3.10/src/main/resources/egovframework/validator/validator-rules.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/validator/validator-rules.xml (revision 7)
@@ -0,0 +1,1236 @@
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
+<!--
+
+ This file contains the default Struts Validator pluggable validator
+ definitions. It should be placed somewhere under /WEB-INF and
+ referenced in the struts-config.xml under the plug-in element
+ for the ValidatorPlugIn.
+
+ <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
+ <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
+ /WEB-INF/validation.xml"/>
+ </plug-in>
+
+ These are the default error messages associated with
+ each validator defined in this file. They should be
+ added to your projects ApplicationResources.properties
+ file or you can associate new ones by modifying the
+ pluggable validators msg attributes in this file.
+
+ # Struts Validator Error Messages
+ errors.required={0} is required.
+ errors.minlength={0} can not be less than {1} characters.
+ errors.maxlength={0} can not be greater than {1} characters.
+ errors.invalid={0} is invalid.
+
+ errors.byte={0} must be a byte.
+ errors.short={0} must be a short.
+ errors.integer={0} must be an integer.
+ errors.long={0} must be a long.
+ errors.float={0} must be a float.
+ errors.double={0} must be a double.
+
+ errors.date={0} is not a date.
+ errors.range={0} is not in the range {1} through {2}.
+ errors.creditcard={0} is an invalid credit card number.
+ errors.email={0} is an invalid e-mail address.
+
+-->
+
+<form-validation>
+
+ <global>
+
+ <validator name="required"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateRequired"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+ msg="errors.required">
+
+ <javascript><![CDATA[
+ function validateRequired(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oRequired = new required();
+ for (x in oRequired) {
+ var field = form[oRequired[x][0]];
+
+ if ((field.type == 'hidden' ||
+ field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'file' ||
+ field.type == 'radio' ||
+ field.type == 'checkbox' ||
+ field.type == 'select-one' ||
+ field.type == 'password')) {
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else if (field.type == 'radio' || field.type == 'checkbox') {
+ if (field.checked) {
+ value = field.value;
+ }
+ } else {
+ value = field.value;
+ }
+ if (trim(value).length == 0) {
+ if ((i == 0) && (field.type != 'hidden')) {
+ focusField = field;
+ }
+ fields[i++] = oRequired[x][1];
+ isValid = false;
+ }
+ } else if (field.type == "select-multiple") {
+ var numOptions = field.options.length;
+ lastSelected=-1;
+ for(loop=numOptions-1;loop>=0;loop--) {
+ if(field.options[loop].selected) {
+ lastSelected = loop;
+ value = field.options[loop].value;
+ break;
+ }
+ }
+ if(lastSelected < 0 || trim(value).length == 0) {
+ if(i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oRequired[x][1];
+ isValid=false;
+ }
+ } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
+ isChecked=-1;
+ for (loop=0;loop < field.length;loop++) {
+ if (field[loop].checked) {
+ isChecked=loop;
+ break; // only one needs to be checked
+ }
+ }
+ if (isChecked < 0) {
+ if (i == 0) {
+ focusField = field[0];
+ }
+ fields[i++] = oRequired[x][1];
+ isValid=false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ try{
+ fields.focus();
+ }catch(e){
+ console.log(e);
+ }
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+ // Trim whitespace from left and right sides of s.
+ function trim(s) {
+ return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
+ }
+
+ ]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="requiredif"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateRequiredIf"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors,
+ org.apache.commons.validator.Validator"
+
+ msg="errors.required">
+ </validator>
+
+ <validator name="validwhen"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateValidWhen"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors,
+ org.apache.commons.validator.Validator"
+ msg="errors.required"/>
+
+ <validator name="minlength"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateMinLength"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.minlength">
+
+ <javascript><![CDATA[
+ function validateMinLength(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oMinLength = new minlength();
+ for (x in oMinLength) {
+ var field = form[oMinLength[x][0]];
+
+ if (field.type == 'text' ||
+ field.type == 'textarea') {
+
+ var iMin = parseInt(oMinLength[x][2]("minlength"));
+ if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oMinLength[x][1];
+ isValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="maxlength"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateMaxLength"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.maxlength">
+
+ <javascript><![CDATA[
+ function validateMaxLength(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oMaxLength = new maxlength();
+ for (x in oMaxLength) {
+ var field = form[oMaxLength[x][0]];
+
+ if (field.type == 'text' ||
+ field.type == 'textarea') {
+
+ var iMax = parseInt(oMaxLength[x][2]("maxlength"));
+ if (field.value.length > iMax) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oMaxLength[x][1];
+ isValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="mask"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateMask"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.invalid">
+
+ <javascript><![CDATA[
+ function validateMask(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oMasked = new mask();
+ for (x in oMasked) {
+ var field = form[oMasked[x][0]];
+
+ if ((field.type == 'text' ||
+ field.type == 'textarea') &&
+ (field.value.length > 0)) {
+
+ if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oMasked[x][1];
+ isValid = false;
+ }
+ }
+ }
+
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }
+
+ function matchPattern(value, mask) {
+ return mask.exec(value);
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="byte"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateByte"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.byte"
+ jsFunctionName="ByteValidations">
+
+ <javascript><![CDATA[
+ function validateByte(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oByte = new ByteValidations();
+ for (x in oByte) {
+ var field = form[oByte[x][0]];
+
+ if (field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+ if (!isAllDigits(value)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oByte[x][1];
+
+ } else {
+
+ var iValue = parseInt(value);
+ if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oByte[x][1];
+ bValid = false;
+ }
+ }
+ }
+
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="short"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateShort"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.short"
+ jsFunctionName="ShortValidations">
+
+ <javascript><![CDATA[
+ function validateShort(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oShort = new ShortValidations();
+ for (x in oShort) {
+ var field = form[oShort[x][0]];
+
+ if (field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+ if (!isAllDigits(value)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oShort[x][1];
+
+ } else {
+
+ var iValue = parseInt(value);
+ if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oShort[x][1];
+ bValid = false;
+ }
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="integer"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateInteger"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.integer"
+ jsFunctionName="IntegerValidations">
+
+ <javascript><![CDATA[
+ function validateInteger(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oInteger = new IntegerValidations();
+ for (x in oInteger) {
+ var field = form[oInteger[x][0]];
+
+ if (field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+
+ if (!isAllDigits(value)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oInteger[x][1];
+
+ } else {
+ var iValue = parseInt(value);
+ if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oInteger[x][1];
+ bValid = false;
+ }
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function isAllDigits(argvalue) {
+ argvalue = argvalue.toString();
+ var validChars = "0123456789";
+ var startFrom = 0;
+ if (argvalue.substring(0, 2) == "0x") {
+ validChars = "0123456789abcdefABCDEF";
+ startFrom = 2;
+ } else if (argvalue.charAt(0) == "0") {
+ validChars = "01234567";
+ startFrom = 1;
+ } else if (argvalue.charAt(0) == "-") {
+ startFrom = 1;
+ }
+
+ for (var n = startFrom; n < argvalue.length; n++) {
+ if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
+ }
+ return true;
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="long"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateLong"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.long"/>
+
+
+ <validator name="float"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateFloat"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.float"
+ jsFunctionName="FloatValidations">
+
+ <javascript><![CDATA[
+ function validateFloat(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oFloat = new FloatValidations();
+ for (x in oFloat) {
+ var field = form[oFloat[x][0]];
+
+ if (field.type == 'text' ||
+ field.type == 'textarea' ||
+ field.type == 'select-one' ||
+ field.type == 'radio') {
+
+ var value = '';
+ // get field's value
+ if (field.type == "select-one") {
+ var si = field.selectedIndex;
+ if (si >= 0) {
+ value = field.options[si].value;
+ }
+ } else {
+ value = field.value;
+ }
+
+ if (value.length > 0) {
+ // remove '.' before checking digits
+ var tempArray = value.split('.');
+ var joinedString= tempArray.join('');
+
+ if (!isAllDigits(joinedString)) {
+ bValid = false;
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oFloat[x][1];
+
+ } else {
+ var iValue = parseFloat(value);
+ if (isNaN(iValue)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oFloat[x][1];
+ bValid = false;
+ }
+ }
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="double"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateDouble"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.double"/>
+
+
+ <validator name="date"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateDate"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.date"
+ jsFunctionName="DateValidations">
+
+ <javascript><![CDATA[
+ function validateDate(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oDate = new DateValidations();
+ for (x in oDate) {
+ var value = form[oDate[x][0]].value;
+ var datePattern = oDate[x][2]("datePatternStrict");
+ if ((form[oDate[x][0]].type == 'text' ||
+ form[oDate[x][0]].type == 'textarea') &&
+ (value.length > 0) &&
+ (datePattern.length > 0)) {
+ var MONTH = "MM";
+ var DAY = "dd";
+ var YEAR = "yyyy";
+ var orderMonth = datePattern.indexOf(MONTH);
+ var orderDay = datePattern.indexOf(DAY);
+ var orderYear = datePattern.indexOf(YEAR);
+ if ((orderDay < orderYear && orderDay > orderMonth)) {
+ var iDelim1 = orderMonth + MONTH.length;
+ var iDelim2 = orderDay + DAY.length;
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+ if (iDelim1 == orderDay && iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+ } else if (iDelim1 == orderDay) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+ } else if (iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+ } else {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+ }
+ var matched = dateRegexp.exec(value);
+ if(matched != null) {
+ if (!isValidDate(matched[2], matched[1], matched[3])) {
+ if (i == 0) {
+ focusField = form[oDate[x][0]];
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = form[oDate[x][0]];
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
+ var iDelim1 = orderDay + DAY.length;
+ var iDelim2 = orderMonth + MONTH.length;
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+ if (iDelim1 == orderMonth && iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
+ } else if (iDelim1 == orderMonth) {
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
+ } else if (iDelim2 == orderYear) {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
+ } else {
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
+ }
+ var matched = dateRegexp.exec(value);
+ if(matched != null) {
+ if (!isValidDate(matched[1], matched[2], matched[3])) {
+ if (i == 0) {
+ focusField = form[oDate[x][0]];
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = form[oDate[x][0]];
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
+ var iDelim1 = orderYear + YEAR.length;
+ var iDelim2 = orderMonth + MONTH.length;
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
+ if (iDelim1 == orderMonth && iDelim2 == orderDay) {
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
+ } else if (iDelim1 == orderMonth) {
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
+ } else if (iDelim2 == orderDay) {
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
+ } else {
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
+ }
+ var matched = dateRegexp.exec(value);
+ if(matched != null) {
+ if (!isValidDate(matched[3], matched[2], matched[1])) {
+ if (i == 0) {
+ focusField = form[oDate[x][0]];
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = form[oDate[x][0]];
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ } else {
+ if (i == 0) {
+ focusField = form[oDate[x][0]];
+ }
+ fields[i++] = oDate[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function isValidDate(day, month, year) {
+ if (month < 1 || month > 12) {
+ return false;
+ }
+ if (day < 1 || day > 31) {
+ return false;
+ }
+ if ((month == 4 || month == 6 || month == 9 || month == 11) &&
+ (day == 31)) {
+ return false;
+ }
+ if (month == 2) {
+ var leap = (year % 4 == 0 &&
+ (year % 100 != 0 || year % 400 == 0));
+ if (day>29 || (day == 29 && !leap)) {
+ return false;
+ }
+ }
+ return true;
+ }]]>
+ </javascript>
+
+ </validator>
+
+<!-- range is deprecated use intRange instead -->
+ <validator name="range"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateIntRange"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="integer"
+ msg="errors.range">
+
+ <javascript><![CDATA[
+ function validateRange(form) {
+ return validateIntRange(form);
+ }]]>
+ </javascript>
+
+ </validator>
+
+ <validator name="intRange"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateIntRange"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="integer"
+ msg="errors.range">
+
+ <javascript><![CDATA[
+ function validateIntRange(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oRange = new intRange();
+ for (x in oRange) {
+ var field = form[oRange[x][0]];
+
+ if ((field.type == 'text' ||
+ field.type == 'textarea') &&
+ (field.value.length > 0)) {
+
+ var iMin = parseInt(oRange[x][2]("min"));
+ var iMax = parseInt(oRange[x][2]("max"));
+ var iValue = parseInt(field.value);
+ if (!(iValue >= iMin && iValue <= iMax)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oRange[x][1];
+ isValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }]]>
+ </javascript>
+
+ </validator>
+
+ <validator name="floatRange"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateFloatRange"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends="float"
+ msg="errors.range">
+
+ <javascript><![CDATA[
+ function validateFloatRange(form) {
+ var isValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oRange = new floatRange();
+ for (x in oRange) {
+ var field = form[oRange[x][0]];
+
+ if ((field.type == 'text' ||
+ field.type == 'textarea') &&
+ (field.value.length > 0)) {
+
+ var fMin = parseFloat(oRange[x][2]("min"));
+ var fMax = parseFloat(oRange[x][2]("max"));
+ var fValue = parseFloat(field.value);
+ if (!(fValue >= fMin && fValue <= fMax)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oRange[x][1];
+ isValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return isValid;
+ }]]>
+ </javascript>
+
+ </validator>
+
+ <validator name="creditCard"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateCreditCard"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.creditcard">
+
+ <javascript><![CDATA[
+ function validateCreditCard(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oCreditCard = new creditCard();
+ for (x in oCreditCard) {
+ if ((form[oCreditCard[x][0]].type == 'text' ||
+ form[oCreditCard[x][0]].type == 'textarea') &&
+ (form[oCreditCard[x][0]].value.length > 0)) {
+ if (!luhnCheck(form[oCreditCard[x][0]].value)) {
+ if (i == 0) {
+ focusField = form[oCreditCard[x][0]];
+ }
+ fields[i++] = oCreditCard[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ /**
+ * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
+ */
+ function luhnCheck(cardNumber) {
+ if (isLuhnNum(cardNumber)) {
+ var no_digit = cardNumber.length;
+ var oddoeven = no_digit & 1;
+ var sum = 0;
+ for (var count = 0; count < no_digit; count++) {
+ var digit = parseInt(cardNumber.charAt(count));
+ if (!((count & 1) ^ oddoeven)) {
+ digit *= 2;
+ if (digit > 9) digit -= 9;
+ };
+ sum += digit;
+ };
+ if (sum == 0) return false;
+ if (sum % 10 == 0) return true;
+ };
+ return false;
+ }
+
+ function isLuhnNum(argvalue) {
+ argvalue = argvalue.toString();
+ if (argvalue.length == 0) {
+ return false;
+ }
+ for (var n = 0; n < argvalue.length; n++) {
+ if ((argvalue.substring(n, n+1) < "0") ||
+ (argvalue.substring(n,n+1) > "9")) {
+ return false;
+ }
+ }
+ return true;
+ }]]>
+ </javascript>
+
+ </validator>
+
+
+ <validator name="email"
+ classname="org.springmodules.validation.commons.FieldChecks"
+ method="validateEmail"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.email">
+
+ <javascript><![CDATA[
+ function validateEmail(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oEmail = new email();
+ for (x in oEmail) {
+ if ((form[oEmail[x][0]].type == 'text' ||
+ form[oEmail[x][0]].type == 'textarea') &&
+ (form[oEmail[x][0]].value.length > 0)) {
+ if (!checkEmail(form[oEmail[x][0]].value)) {
+ if (i == 0) {
+ focusField = form[oEmail[x][0]];
+ }
+ fields[i++] = oEmail[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ /**
+ * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
+ * http://javascript.internet.com
+ */
+ function checkEmail(emailStr) {
+ if (emailStr.length == 0) {
+ return true;
+ }
+ var emailPat=/^(.+)@(.+)$/;
+ var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
+ var validChars="\[^\\s" + specialChars + "\]";
+ var quotedUser="(\"[^\"]*\")";
+ var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
+ var atom=validChars + '+';
+ var word="(" + atom + "|" + quotedUser + ")";
+ var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
+ var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
+ var matchArray=emailStr.match(emailPat);
+ if (matchArray == null) {
+ return false;
+ }
+ var user=matchArray[1];
+ var domain=matchArray[2];
+ if (user.match(userPat) == null) {
+ return false;
+ }
+ var IPArray = domain.match(ipDomainPat);
+ if (IPArray != null) {
+ for (var i = 1; i <= 4; i++) {
+ if (IPArray[i] > 255) {
+ return false;
+ }
+ }
+ return true;
+ }
+ var domainArray=domain.match(domainPat);
+ if (domainArray == null) {
+ return false;
+ }
+ var atomPat=new RegExp(atom,"g");
+ var domArr=domain.match(atomPat);
+ var len=domArr.length;
+ if ((domArr[domArr.length-1].length < 2) ||
+ (domArr[domArr.length-1].length > 3)) {
+ return false;
+ }
+ if (len < 2) {
+ return false;
+ }
+ return true;
+ }]]>
+ </javascript>
+
+ </validator>
+
+ <!--
+ 주민등록번호 validation.
+ Commons Validator가 제공하는 validator가 아니라 추가된 validator이므로
+ 실행을 위해서는 반드시 egovframework.rte.ptl.mvcXXXXX.jar가 필요하다.
+ 2020-10-16 신용호 - 주민번호 남녀구분 관련 수정
+ -->
+ <validator name="ihidnum"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validateIhIdNum"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+
+ depends=""
+ msg="errors.ihidnum">
+ <javascript><![CDATA[
+ function validateIhIdNum(form) {
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oIhidnum = new ihidnum();
+ for (x in oIhidnum) {
+ var field = form[oIhidnum[x][0]];
+ if (field.type == 'text' ||
+ field.type == 'hidden' ||
+ field.type == 'textarea') {
+ if (trim(field.value).length==0 || !checkIhIdNum(field.value)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oIhidnum[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ /**
+ * Reference: JS Guide
+ * http://jsguide.net/ver2/articles/frame.php?artnum=002
+ */
+ function checkIhIdNum(ihidnum){
+
+ fmt = /^\d{13}$/;
+ if(!fmt.test(ihidnum)){
+ return false;
+ }
+
+ switch(ihidnum.charAt(6)*1) {
+ case 9,0:
+ birthYear = "18";
+ break;
+ case 1,2,5,6: // 외국인 5,6
+ birthYear = "19";
+ break;
+ case 3,4,7,8: // 외국인 7,8
+ birthYear = "20";
+ break;
+ default:
+ birthYear = "19";
+ }
+
+ birthYear += ihidnum.substr(0, 2);
+ birthMonth = ihidnum.substr(2, 2) - 1;
+ birthDate = ihidnum.substr(4, 2);
+ birth = new Date(birthYear, birthMonth, birthDate);
+
+ if( birth.getYear() % 100 != ihidnum.substr(0, 2) ||
+ birth.getMonth() != birthMonth ||
+ birth.getDate() != birthDate) {
+ return false;
+ }
+
+ var arrDivide = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];
+ var checkdigit = 0;
+ for(var i=0;i<ihidnum.length-1;i++){
+ checkdigit += parseInt(ihidnum.charAt(i)) * parseInt(arrDivide[i]);
+ }
+ checkdigit = (11 - (checkdigit%11))%10;
+ if(checkdigit != ihidnum.charAt(12)){
+ return false;
+ }else{
+ return true;
+ }
+ }
+ ]]>
+ </javascript>
+ </validator>
+ <validator name="korean"
+ classname="egovframework.rte.ptl.mvc.validation.RteFieldChecks"
+ method="validateKorean"
+ methodParams="java.lang.Object,
+ org.apache.commons.validator.ValidatorAction,
+ org.apache.commons.validator.Field,
+ org.springframework.validation.Errors"
+ msg="errors.korean">
+ <javascript><![CDATA[
+ function validateKorean(form){
+ var bValid = true;
+ var focusField = null;
+ var i = 0;
+ var fields = new Array();
+ oKorean = new korean();
+ for (x in oKorean) {
+ var field = form[oKorean[x][0]];
+ if (field.type == 'text' || field.type == 'textarea') {
+ if (trim(field.value).length==0 || !checkKorean(field.value)) {
+ if (i == 0) {
+ focusField = field;
+ }
+ fields[i++] = oKorean[x][1];
+ bValid = false;
+ }
+ }
+ }
+ if (fields.length > 0) {
+ focusField.focus();
+ alert(fields.join('\n'));
+ }
+ return bValid;
+ }
+
+ function checkKorean(koreanStr){
+ for(var i=0;i<koreanStr.length;i++){
+ var koreanChar = koreanStr.charCodeAt(i);
+ if( !( 0xAC00 <= koreanChar && koreanChar <= 0xD7A3 ) && !( 0x3131 <= koreanChar && koreanChar <= 0x318E ) ) {
+ return false;
+ }
+ }
+ return true;
+ }
+ ]]>
+ </javascript>
+
+ </validator>
+
+ </global>
+
+</form-validation>
Property changes on: base3.10/src/main/resources/egovframework/validator/validator-rules.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/globals.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/globals.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/globals.properties (revision 7)
@@ -0,0 +1,196 @@
+#-----------------------------------------------------------------------
+#
+# globals.properties : \uc2dc\uc2a4\ud15c
+#
+#-----------------------------------------------------------------------
+# 1. key = value \uad6c\uc870\uc785\ub2c8\ub2e4.
+# 2. key\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \ud3ec\ud568\ubd88\uac00, value\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \uac00\ub2a5
+# 3. key\uac12\uc73c\ub85c \ud55c\uae00\uc744 \uc0ac\uc6a9\ubd88\uac00, value\uac12\uc740 \ud55c\uae00\uc0ac\uc6a9\uc774 \uac00\ub2a5
+# 4. \uc904\uc744 \ubc14\uafc0 \ud544\uc694\uac00 \uc788\uc73c\uba74 '\'\ub97c \ub77c\uc778\uc758 \ub05d\uc5d0 \ucd94\uac00(\ub9cc\uc57d '\'\ubb38\uc790\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub294 '\\'\ub97c \uc0ac\uc6a9)
+# 5. Windows\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '\\' or '/' ('\' \uc0ac\uc6a9\ud558\uba74 \uc548\ub428)
+# 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/'
+# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9
+# 8. value\uac12 \ub4a4\uc5d0 \uc2a4\ud398\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \uc11c\ube14\ub9bf\uc5d0\uc11c \ucc38\uc870\ud560\ub54c\ub294 \uc5d0\ub7ec\ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c trim()\ud558\uac70\ub098 \ub9c8\uc9c0\ub9c9 \uacf5\ubc31\uc5c6\uc774 properties \uac12\uc744 \uc124\uc815\ud560\uac83
+#-----------------------------------------------------------------------
+
+# \uc6b4\uc601\uc11c\ubc84 \ud0c0\uc785(WINDOWS, UNIX)
+Globals.OsType = WINDOWS
+
+# DB\uc11c\ubc84 \ud0c0\uc785(mysql, oracle, altibase, tibero, cubrid, maria, postgres) - datasource \ubc0f sqlMap \ud30c\uc77c \uc9c0\uc815\uc5d0 \uc0ac\uc6a9\ub428
+Globals.DbType = postgres
+
+# \uad8c\ud55c \uc778\uc99d\ubc29\uc2dd(dummy, session, security) - \uc0ac\uc6a9\uc790\uc758 \ub85c\uadf8\uc778\uc2dc \uc778\uc99d \ubc29\uc2dd\uc744 \uacb0\uc815\ud568
+# dummy : \ub354\ubbf8 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\uc790 \uad8c\ud55c\uc744 \uc778\uc99d\ud568
+# session : \uc138\uc158 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\uc790 \uad8c\ud55c\uc744 \uc778\uc99d\ud568
+# security : spring security \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\uc790 \uad8c\ud55c\uc744 \uc778\uc99d\ud568
+Globals.Auth = security
+
+# MainPage Setting
+Globals.MainPage = /EgovContent.do
+
+# \uc704\uc800\ub4dc \uc0ac\uc6a9\uc2dc \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uad00\ub828 \uc124\uc815\uc744 \ubd88\ub7ec\uc634
+
+# KISA \uac80\uc99d (2019\ub144 11\uc6d4) - \uc911\uc694\uc815\ubcf4 \uc554\ud638\ud654
+# Globals.mysql.Password \ub294 com01 \uc744 \uc554\ud638\ud654\ud55c \uac83\uc73c\ub85c https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:crypto_simplify_v3_8 \ucc38\uc870\ud560 \uac83
+# Globals.mysql.Password = com01 \ucc98\ub7fc \ud3c9\ubb38\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 context-crypto.xml \uc5d0\uc11c initial="false" crypto="false" \ub85c \uc124\uc815\ud558\uace0,
+# context-datasource.xml \uc5d0\uc11c <property name="password" value="${Globals.mysql.Password}"/> \ub85c \ubc14\uafb8\uc5b4 \uc8fc\uc5b4\uc57c \ud568
+#mysql
+Globals.mysql.DriverClassName=net.sf.log4jdbc.DriverSpy
+Globals.mysql.Url=jdbc:log4jdbc:mysql://127.0.0.1:3306/com
+Globals.mysql.UserName = com
+Globals.mysql.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
+
+#oracle
+Globals.oracle.DriverClassName=oracle.jdbc.driver.OracleDriver
+Globals.oracle.Url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
+Globals.oracle.UserName = com
+Globals.oracle.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
+
+#altibase
+Globals.altibase.DriverClassName=Altibase.jdbc.driver.AltibaseDriver
+Globals.altibase.Url=jdbc:Altibase://127.0.0.1:20300/mydb?encoding=UTF-8
+Globals.altibase.UserName = com
+Globals.altibase.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
+
+#tibero
+Globals.tibero.DriverClassName=com.tmax.tibero.jdbc.TbDriver
+Globals.tibero.Url=jdbc:tibero:thin:@127.0.0.1:8629:tibero
+Globals.tibero.UserName = com
+Globals.tibero.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
+
+#cubrid
+Globals.cubrid.DriverClassName=cubrid.jdbc.driver.CUBRIDDriver
+Globals.cubrid.Url=jdbc:cubrid:127.0.0.1:30000:com:::?charset=utf-8
+Globals.cubrid.UserName = com
+Globals.cubrid.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
+
+#MariaDB
+Globals.maria.DriverClassName=org.mariadb.jdbc.Driver
+Globals.maria.Url=jdbc:mariadb://127.0.0.1:3336/com
+Globals.maria.UserName = com
+Globals.maria.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
+
+#postgreSQL
+Globals.postgres.DriverClassName=org.postgresql.Driver
+Globals.postgres.Url=jdbc:postgresql://127.0.0.1:15432/base
+Globals.postgres.UserName=allinone
+Globals.postgres.Password=TEFwH5ptn081t8kwtx7zFg%3D%3D
+
+# \ub85c\uadf8\uc778 \uc778\uc99d \uc81c\ud55c(login authentication limit)
+# (\uc0ac\uc6a9 \uc5ec\ubd80 \uc124\uc815\uac12 : true, false)
+Globals.login.Lock = true
+# -\uc778\uc99d \uc81c\uc2dc\ub3c4 \ud69f\uc218
+Globals.login.LockCount = 5
+
+#\ud1b5\ud569\uba54\uc778\uba54\ub274
+#Globals.MainPage = /sym/mnu/mpm/EgovMainMenuHome.do
+
+# G4C \uc5f0\uacb0\uc6a9 IP (localhost)
+#Globals.LocalIp = 127.0.0.2
+
+# \ud658\uacbd\ud30c\uc77c \uc704\uce58
+Globals.ShellFilePath = globals.properties
+Globals.ServerConfPath = conf/server.properties
+Globals.ClientConfPath = conf/client.properties
+Globals.FileFormatPath = conf/format.properties
+Globals.GPKIConfPath = conf/gpki.properties
+Globals.ConfPath = conf
+Globals.MailRequestPath = mail/request/
+Globals.MailRResponsePath = mail/response/
+Globals.SMEConfigPath = conf/SMEConfig.properties
+Globals.SmsDbConfPath = conf/smsdb.properties
+
+# \ud658\uacbd\ud30c\uc77c \uc704\uce58 (jeus)
+#Globals.ShellFilePath = globals.properties
+#Globals.ServerConfPath = conf/server.properties
+#Globals.ClientConfPath = conf/client.properties
+#Globals.FileFormatPath = conf/format.properties
+#Globals.GPKIConfPath = conf/gpki.properties
+#Globals.ConfPath = conf
+#Globals.fileStorePath =
+#Globals.MailRequestPath = mail/request/
+#Globals.MailRResponsePath = mail/response/
+#Globals.SMEConfigPath = conf/SMEConfig.properties
+#Globals.SynchrnServerPath = tmp/upload/
+
+# WINDOWS\uc6a9 \uc258\ud30c\uc77c \uc815\ubcf4
+SHELL.WINDOWS.getHostName = prg/sh_001.bat
+SHELL.WINDOWS.getDrctryByOwner = prg/getDrctryByOwner.bat
+SHELL.WINDOWS.getDrctryOwner = prg/getDrctryOwner.bat
+SHELL.WINDOWS.moveDrctry = prg/moveDrctry.bat
+SHELL.WINDOWS.compileSchema = prg/compileSchema.bat
+SHELL.WINDOWS.getDiskAttrb = prg/getDiskAttrb.bat
+SHELL.WINDOWS.getDiskCpcty = prg/getDiskCpcty.bat
+SHELL.WINDOWS.getDiskExst = prg/getDiskExst.bat
+
+# UNIX\uc6a9 \uc258\ud30c\uc77c \uc815\ubcf4 - \uac1c\ubc1cwas jeus\uc5d0\uc11c \uc0ac\uc6a9\ud560\ub54c \uae30\uc900
+SHELL.UNIX.getHostName = prg/sh_001.sh
+SHELL.UNIX.getDrctryByOwner = prg/getDrctryByOwner.sh
+SHELL.UNIX.getDrctryOwner = prg/getDrctryOwner.sh
+SHELL.UNIX.getDrctryAccess = prg/getDrctryAccess.sh
+SHELL.UNIX.getMountLc = prg/getMountLc.sh
+SHELL.UNIX.getDiskName = prg/getNetWorkInfo.sh
+SHELL.UNIX.moveDrctry = prg/moveDrctry.sh
+SHELL.UNIX.compileSchema = prg/compileSchema.sh
+SHELL.UNIX.getDiskAttrb = prg/getDiskAttrb.sh
+SHELL.UNIX.getDiskCpcty = prg/getDiskCpcty.sh
+SHELL.UNIX.getDiskExst = prg/getDiskExst.sh
+SHELL.UNIX.getProcInfo = prg/getProcInfo.sh
+
+# LINUX\uc6a9 \uc258\ud30c\uc77c \uc815\ubcf4
+
+# \uc5f0\uacc4
+# \uae30\uad00\ucf54\ub4dc\uc218\uc2e0\uc6a9(\uacbd\ub85c \uc124\uc815\uc740 \ubc18\ub4dc\uc2dc \uc808\ub300\uacbd\ub85c\ub97c \uc0ac\uc6a9\ud574\uc57c\ud568.)
+CNTC.INSTTCODE.DIR.rcv = D:/tmp/test/rcv/
+CNTC.INSTTCODE.DIR.rcvold = D:/tmp/test/rcvold/
+CNTC.INSTTCODE.DIR.bin = D:/tmp/test/bin/
+
+CNTC.INSTTCODE.CMD.edircv = gcc_edircv.bat
+CNTC.INSTTCODE.CMD.edircvmsg = gcc_edircvmsg.bat
+
+CNTC.INSTTCODE.INFO.userid = USERID
+CNTC.INSTTCODE.INFO.userpw = ******
+
+# \ud30c\uc77c \uc5c5\ub85c\ub4dc \uacbd\ub85c(\uacbd\ub85c \uc124\uc815\uc740 \ubc18\ub4dc\uc2dc \uc808\ub300\uacbd\ub85c\ub97c \uc0ac\uc6a9\ud574\uc57c\ud568, \uacbd\ub85c \ub4a4\uc5d0 /\ub97c \ubd99\uc5ec \uc8fc\uc5b4\uc57c\ud568.)
+Globals.fileStorePath = C:/egovframework/upload/
+# \uc5c5\ub85c\ub4dc URL \uacbd\ub85c \uc554\ud638\ud654 KEY
+#Globals.filePath.Encryption.key = 10\uc790\ub9ac\uc774\uc0c1,\uc54c\ud30c\ubcb3 \ubc0f \uc22b\uc790 \ubc0f \ud2b9\uc218\uae30\ud638 \ud63c\uc6a9\ud558\uc5ec \ud0a4\ub97c \uc9c0\uc815\ud55c\ub2e4.
+# \ud30c\uc77c \ud655\uc7a5\uc790 \ud654\uc774\ud2b8\ub9ac\uc2a4\ud2b8(\ud5c8\uc6a9\ubaa9\ub85d) : \ud30c\uc77c \ud655\uc7a5\uc790\ub97c (.)\uacfc \ud568\uaed8 \uc5f0\uc774\uc5b4\uc11c \uc0ac\uc6a9\ud558\uba70 (.)\ub85c \uc2dc\uc791\ud55c\ub2e4.
+Globals.fileUpload.Extensions.Images = .gif.jpg.jpeg.png
+Globals.fileUpload.Extensions = .gif.jpg.jpeg.png.xls.xlsx
+Globals.fileUpload.maxSize = 1048576
+Globals.fileDownload.Extensions = .gif.jpg.jpeg.png
+
+# \ud30c\uc77c \ub3d9\uae30\ud654 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ud30c\uc77c \uc5c5\ub85c\ub4dc \uacbd\ub85c(\uacbd\ub85c \uc124\uc815\uc740 \ubc18\ub4dc\uc2dc \uc808\ub300\uacbd\ub85c\ub97c \uc0ac\uc6a9\ud574\uc57c\ud568, \uacbd\ub85c \ub4a4\uc5d0 /\ub97c \ubd99\uc5ec \uc8fc\uc5b4\uc57c\ud568.)
+Globals.SynchrnServerPath = C:/egovframework/upload/Synch/
+
+# Social(Facebook, Oauth \ucef4\ud3ec\ub10c\ud2b8 \uc0ac\uc6a9\uc2dc \ud65c\uc6a9)
+facebook.appId =
+facebook.appSecret =
+twitter.consumerKey =
+twitter.consumerSecret =
+
+#LDAP\uc870\uc9c1\ub3c4\uad00\ub9ac \ucef4\ud3ec\ub10c\ud2b8 \uc0ac\uc6a9\uc2dc LDAP\uc11c\ubc84\uc124\uc815\uc815\ubcf4 \ud544\uc694
+ldap.url = ldap://localhost:10389
+ldap.rootDn = c=kr
+ldap.username = uid=admin,ou=system
+ldap.password = ******
+
+#\uc57d\ub3c4\uad00\ub9ac Kakao \uac1c\ubc1c\uc790 appkey \ubc1c\uae09 \ubc1b\uc544 \ub4f1\ub85d\ud574\uc11c \uae30\uc785 (\uce74\uce74\uc624\uac1c\ubc1c Dev \uc571\uad00\ub9ac \ub0b4\uc5d0\uc11c \ub3c4\uba54\uc778 \ub4f1\ub85d \ud544\uc694)
+roughMap.appkey =
+
+# \ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \uc124\uc815
+Globals.ExpirePwdDay = 180
+
+# \ubc30\uce58\uc258\ud30c\uc77c WhiteList \uc124\uc815(","\uae30\ud638\ub85c \ub2e4\uc911\uc9c0\uc815 \uac00\ub2a5) - \uad00\ub828\uba54\ub274 : 1120.\ubc30\uce58\uc791\uc5c5\uad00\ub9ac / 1130.\ubc30\uce58\uacb0\uacfc\uad00\ub9ac / 1140.\uc2a4\ucf00\uc904\ucc98\ub9ac
+SHELL.WINDOWS.batchShellFiles =
+SHELL.UNIX.batchShellFiles =
+
+#froala \uc5d0\ub514\ud130 \ud30c\uc77c \uc5c5\ub85c\ub4dc \uacbd\ub85c
+#\uac1c\ubc1c\uc6a9
+editor.fileRoute=C:/eGov3.10/uploads/editor/
+editor.fileTempRoute=C:/eGov3.10/uploads/temp/
+
+#EgovFileScrty key, iv
+ctm.egovfilescrty.key=ctmkey1234567890
+ctm.egovfilescrty.iv=ctmiv1234567890a
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/egovProps/globals.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/warnmessage.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/warnmessage.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/warnmessage.properties (revision 7)
@@ -0,0 +1,4 @@
+test.message = warn message
+
+
+
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/warnmessage.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/errormessage.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/errormessage.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/errormessage.properties (revision 7)
@@ -0,0 +1 @@
+test.message = error message
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/errormessage.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/SMEConfig.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/SMEConfig.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/SMEConfig.properties (revision 7)
@@ -0,0 +1,14 @@
+sms_url = sme://127.0.0.1:20000
+sms_id = ID
+sms_pwd = PW
+
+use_console_logger = false
+use_file_logger = false
+log_layout = [%d] [%-5p] %l - %m%n
+
+# debug / info
+log_level = debug
+
+# path
+log_path = C:\egovframework\log\SMELog.log
+ping_term = 60
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/SMEConfig.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/client.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/client.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/client.properties (revision 7)
@@ -0,0 +1,27 @@
+#-----------------------------------------------------------------------
+#
+# client.properties : \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 OS\uc815\ubcf4\ub97c \ub098\ud0c0\ub0b4\ub294 Config \ud30c\uc77c
+#
+#-----------------------------------------------------------------------
+# 1. key = value \uad6c\uc870\uc785\ub2c8\ub2e4.
+# 2. key\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \ud3ec\ud568\ubd88\uac00, value\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \uac00\ub2a5
+# 3. key\uac12\uc73c\ub85c \ud55c\uae00\uc744 \uc0ac\uc6a9\ubd88\uac00, value\uac12\uc740 \ud55c\uae00\uc0ac\uc6a9\uc774 \uac00\ub2a5
+# 4. \uc904\uc744 \ubc14\uafc0 \ud544\uc694\uac00 \uc788\uc73c\uba74 '\'\ub97c \ub77c\uc778\uc758 \ub05d\uc5d0 \ucd94\uac00(\ub9cc\uc57d '\'\ubb38\uc790\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub294 '\\'\ub97c \uc0ac\uc6a9)
+# 5. Windows\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '\\' or '/' ('\' \uc0ac\uc6a9\ud558\uba74 \uc548\ub428)
+# 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/'
+# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9
+# 8. value\uac12 \ub4a4\uc5d0 \uc2a4\ud398\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \uc11c\ube14\ub9bf\uc5d0\uc11c \ucc38\uc870\ud560\ub54c\ub294 \uc5d0\ub7ec\ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c trim()\ud558\uac70\ub098 \ub9c8\uc9c0\ub9c9 \uacf5\ubc31\uc5c6\uc774 properties \uac12\uc744 \uc124\uc815\ud560\uac83
+#-----------------------------------------------------------------------
+
+# \ud074\ub77c\uc774\uc5b8\ud2b8 OS \uc720\ud615 \ubaa9\ub85d
+WINDOWS95 = Windows 95
+WINDOWS98 = Windows 98
+WINDOWSNT = Windows NT
+WINDOWSNT5.0 = Windows 2000
+WINDOWSNT5.1 = Windows XP
+WINDOWSNT5.2 = Windows Server 2003
+WINDOWSNT6.0 = Windows Vista
+WIN32 = Windows XP
+MSN2.5 = MSN 2.5 on Windows 98
+MAC_POWERPC = Mac OS X
+SUNOS5.9SUN4U = SunOS 5.0
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/client.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/infomessage.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/infomessage.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/infomessage.properties (revision 7)
@@ -0,0 +1 @@
+test.message = info message
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/infomessage.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/confirmmessage.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/confirmmessage.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/confirmmessage.properties (revision 7)
@@ -0,0 +1 @@
+test.message = confirm message
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/confirmmessage.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/format.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/format.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/format.properties (revision 7)
@@ -0,0 +1,166 @@
+abs=audio/x-mpeg
+ai=application/postscript
+aif=audio/x-aiff
+aif=caudio/x-aiff
+aiff=audio/x-aiff
+aim=application/x-aim
+art=image/x-jg
+asf=video/x-ms-asf
+asx=video/x-ms-asf
+au=audio/basic
+avi=video/x-msvideo
+avx=video/x-rad-screenplay
+bcpio=application/x-bcpio
+bin=application/octet-stream
+bmp=image/bmp
+body=text/html
+cdf=application/x-cdf
+cer=application/x-x509-ca-cert
+class=application/java
+cpio=application/x-cpio
+csh=application/x-csh
+css=text/css
+dib=image/bmp
+doc=application/msword
+dtd=application/xml-dtd
+dv=video/x-dv
+dvi=application/x-dvi
+eps=application/postscript
+etx=text/x-setext
+exe=application/octet-stream
+gif=image/gif
+gtar=application/x-gtar
+gz=application/x-gzip
+hdf=application/x-hdf
+hqx=application/mac-binhex40
+htc=text/x-component
+htm=text/html
+html=text/html
+hqx=application/mac-binhex40
+ief=image/ief
+jad=text/vnd.sun.j2me.app-descriptor
+jar=application/java-archive
+java=text/plain
+jnlp=application/x-java-jnlp-file
+jpe=image/jpeg
+jpeg=image/jpeg
+jpg=image/jpeg
+js=text/javascript
+jsf=text/plain
+jspf=text/plain
+kar=audio/x-midi
+latex=application/x-latex
+m3u=audio/x-mpegurl
+mac=image/x-macpaint
+man=application/x-troff-man
+mathml=application/mathml+xml
+me=application/x-troff-me
+mid=audio/x-midi
+midi=audio/x-midi
+mif=application/x-mif
+mov=video/quicktime
+movie=video/x-sgi-movie
+mp1=audio/x-mpeg
+mp2=audio/x-mpeg
+mp3=audio/x-mpeg
+mp4=video/mp4
+mpa=audio/x-mpeg
+mpe=video/mpeg
+mpeg=video/mpeg
+mpega=audio/x-mpeg
+mpg=video/mpeg
+mpv2=video/mpeg2
+ms=application/x-wais-source
+nc=application/x-netcdf
+oda=application/oda
+odb=application/vnd.oasis.opendocument.database
+odc=application/vnd.oasis.opendocument.chart
+odf=application/vnd.oasis.opendocument.formula
+odg=application/vnd.oasis.opendocument.graphics
+odi=application/vnd.oasis.opendocument.image
+odm=application/vnd.oasis.opendocument.text-master
+odp=application/vnd.oasis.opendocument.presentation
+ods=application/vnd.oasis.opendocument.spreadsheet
+odt=application/vnd.oasis.opendocument.text
+ogg=application/ogg
+otg=application/vnd.oasis.opendocument.graphics-template
+oth=application/vnd.oasis.opendocument.text-web
+otp=application/vnd.oasis.opendocument.presentation-template
+ots=application/vnd.oasis.opendocument.spreadsheet-template
+ott=application/vnd.oasis.opendocument.text-template
+pbm=image/x-portable-bitmap
+pct=image/pict
+pdf=application/pdf
+pgm=image/x-portable-graymap
+pic=image/pict
+pict=image/pict
+pls=audio/x-scpls
+png=image/png
+pnm=image/x-portable-anymap
+pnt=image/x-macpaint
+ppm=image/x-portable-pixmap
+ppt=application/powerpoint
+ps=application/postscript
+psd=image/x-photoshop
+qt=video/quicktime
+qti=image/x-quicktime
+qtif=image/x-quicktime
+ras=image/x-cmu-raster
+rdf=application/rdf+xml
+rgb=image/x-rgb
+rm=application/vnd.rn-realmedia
+roff=application/x-troff
+rtf=application/rtf
+rtx=text/richtext
+sh=application/x-sh
+shar=application/x-shar
+shtml=text/x-server-parsed-html
+smf=audio/x-midi
+sit=application/x-stuffit
+snd=audio/basic
+src=application/x-wais-source
+sv4cpio=application/x-sv4cpio
+sv4crc=application/x-sv4crc
+swf=application/x-shockwave-flash
+t=application/x-troff
+tar=application/x-tar
+tcl=application/x-tcl
+tex=application/x-tex
+texi=application/x-texinfo
+texinfo=application/x-texinfo
+tif=image/tiff
+tiff=image/tiff
+tr=application/x-troff
+tsv=text/tab-separated-values
+txt=text/plain
+ulw=audio/basic
+ustar=application/x-ustar
+vxml=application/voicexml+xml
+xbm=image/x-xbitmap
+xht=application/xhtml+xml
+xhtml=application/xhtml+xml
+xml=application/xml
+xpm=image/x-xpixmap
+xsl=application/xml
+xslt=application/xslt+xml
+xul=application/vnd.mozilla.xul+xml
+xwd=image/x-xwindowdump
+wav=audio/x-wav
+svg=image/svg+xml
+svgz=image/svg+xml
+vsd=application/x-visio
+wbmp=image/vnd.wap.wbmp
+wml=text/vnd.wap.wml
+wmlc=application/vnd.wap.wmlc
+wmls=text/vnd.wap.wmlscript
+wmlscriptc=application/vnd.wap.wmlscriptc
+wmv=video/x-ms-wmv
+wrl=x-world/x-vrml
+wspolicy=application/wspolicy+xml
+Z=application/x-compress
+z=application/x-compress
+zip=application/zip
+xls=application/vnd.ms-excel
+doc=application/vnd.ms-word
+ppt=application/vnd.ms-powerpoint
+
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/format.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/gpki.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/gpki.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/gpki.properties (revision 7)
@@ -0,0 +1,20 @@
+#--------------------------
+# for GPKI LDAP access
+#--------------------------
+#gpki.ldap.ip=ldap.gcc.go.kr
+#gpki.ldap.ip=10.1.7.140
+gpki.ldap.ip=152.99.56.86
+gpki.ldap.port=389
+gpki.ldap.basedn=ou=Group of Server,o=Government of Korea,c=kr
+gpki.ldap.attribute=usercertificate;binary
+
+#--------------------------
+# \uc778\uc99d\uc11c \uc815\ubcf4
+# \uc2e4\uc81c \uc778\uc99d\uc11c \uad00\ub828 \ud30c\uc77c\ub4e4\uc740 \uac01 \uc18d\uc131\ub4e4\uc744 \uc870\ud569\ud574\uc11c \uc5bb\uc74c
+#--------------------------
+gpki.certificate.path = /home/gpki/certificate/class1
+gpki.certificate.server = server
+gpki.privatekey.password = ******
+#gpki.certificate.path = C:/Documents and Settings/Administrator/egovProps/gpkisecureweb/certs
+#gpki.certificate.server = 1310505011
+#gpki.privatekey.password = 8866kim4
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/gpki.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/smsdb.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/smsdb.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/smsdb.properties (revision 7)
@@ -0,0 +1,5 @@
+JDBC_ALIAS = default
+JDBC_DRIVER = org.gjt.mm.mysql.Driver
+JDBC_URL = jdbc:mysql://192.168.200.24:1621/com
+JDBC_USER = com
+JDBC_PASSWORD = *****
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/smsdb.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/conf/server.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/conf/server.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/conf/server.properties (revision 7)
@@ -0,0 +1,46 @@
+#-----------------------------------------------------------------------
+#
+# server.properties : \uc124\uce58\ub41c \uc11c\ubc84\uc758 \uc815\ubcf4\ub97c \uae30\ub85d\ud558\ub294 Config \ud30c\uc77c
+#
+#-----------------------------------------------------------------------
+# 1. key = value \uad6c\uc870\uc785\ub2c8\ub2e4.
+# 2. key\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \ud3ec\ud568\ubd88\uac00, value\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \uac00\ub2a5
+# 3. key\uac12\uc73c\ub85c \ud55c\uae00\uc744 \uc0ac\uc6a9\ubd88\uac00, value\uac12\uc740 \ud55c\uae00\uc0ac\uc6a9\uc774 \uac00\ub2a5
+# 4. \uc904\uc744 \ubc14\uafc0 \ud544\uc694\uac00 \uc788\uc73c\uba74 '\'\ub97c \ub77c\uc778\uc758 \ub05d\uc5d0 \ucd94\uac00(\ub9cc\uc57d '\'\ubb38\uc790\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub294 '\\'\ub97c \uc0ac\uc6a9)
+# 5. Windows\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '\\' or '/' ('\' \uc0ac\uc6a9\ud558\uba74 \uc548\ub428)
+# 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/'
+# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9
+# 8. value\uac12 \ub4a4\uc5d0 \uc2a4\ud398\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \uc11c\ube14\ub9bf\uc5d0\uc11c \ucc38\uc870\ud560\ub54c\ub294 \uc5d0\ub7ec\ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c trim()\ud558\uac70\ub098 \ub9c8\uc9c0\ub9c9 \uacf5\ubc31\uc5c6\uc774 properties \uac12\uc744 \uc124\uc815\ud560\uac83
+#-----------------------------------------------------------------------
+
+# \uc11c\ubc84\uc81c\ud488
+SERVER_LIST = WEBLOGIC$JEUS$JBOSS
+WEBLOGIC.VERSION = 9.2 MP3
+JEUS.VERSION = 6.0
+JBOSS.VERSION = 3.1
+WEBLOGIC.PORT = 7001
+JEUS.PORT = 9736
+JBOSS.PORT = 8080
+
+# \uc11c\ubc84\ubc84\uc804
+SHELL.WINDOWS.getPrductVersion = prg/getPrductVersion.bat
+SHELL.UNIX.getPrductVersion = prg/getPrductVersion.sh
+
+# \uc11c\ubc84\uc2e4\ud589\uc0c1\ud0dc
+SHELL.WINDOWS.getPrductStatus = prg/getPrductStatus.bat
+SHELL.UNIX.getPrductStatus = prg/getPrductStatus.sh
+
+# \uc2dc\uc2a4\ud15c OS\uc815\ubcf4
+SHELL.WINDOWS.getOSInfo = prg/getOSInfo.bat
+SHELL.UNIX.getOSInfo = prg/getOSInfo.sh
+
+# \uc2dc\uc2a4\ud15c \ub514\uc2a4\ud06c \uc6a9\ub7c9 \uc815\ubcf4
+SHELL.WINDOWS.getDiskInfo = prg/getDiskInfo.bat
+SHELL.UNIX.getDiskInfo = prg/getDiskInfo.sh
+
+# \uc2dc\uc2a4\ud15c \uba54\ubaa8\ub9ac \uc6a9\ub7c9 \uc815\ubcf4
+SHELL.WINDOWS.getMoryInfo = prg/getMoryInfo.bat
+SHELL.UNIX.getMoryInfo = prg/getMoryInfo.sh
+
+# MAC
+SHELL.UNIX.getNetWorkInfo = prg/getNetWorkInfo.sh
Property changes on: base3.10/src/main/resources/egovframework/egovProps/conf/server.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskInfo.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskInfo.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskInfo.bat (revision 7)
@@ -0,0 +1,16 @@
+@rem Shell Name : getDiskInfo.bat
+@rem Description : 시스템 Disk의 이름을 조회하는 Shell
+@rem Modification Information
+@rem
+@rem 수정일 수정자 수정내용
+@rem ------- -------- ---------------------------
+@rem 2009.02.13 박지욱 최초 생성
+@rem
+@rem author 공통 서비스 개발팀 박지욱
+@rem since 2009. 02. 13
+@rem version 1.0
+@rem see
+@rem
+@rem Copyright (C) 2009 by MOPAS All right reserved.
+
+echo Can Not Support
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getMountLc.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getMountLc.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getMountLc.sh (revision 7)
@@ -0,0 +1,19 @@
+# Shell Name : getMountLc.sh
+# Description : 파일(디렉토리)가 존재하는 파일시스템(마운트된 위치)을 조회하는 Shell
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+#echo $1 -FILE LOCATION
+#echo $1 -/
+
+df -k $1 | grep $2 | awk -F" " '{print $7}'
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskInfo.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskInfo.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskInfo.sh (revision 7)
@@ -0,0 +1,40 @@
+# Shell Name : getDiskInfo.sh
+# Description : 시스템에 존재하는 디스크 정보를 조회하는 Shell
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+#echo $1 -SEARCH NAME (NAME, FULL, USING, VALID)
+
+#NAME
+if [ $1 == "NAME" ]
+then
+ lspv | awk '{print $1}'
+fi
+
+#FULL
+if [ $1 == "FULL" ]
+then
+ lspv $2 | grep "TOTAL PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+fi
+
+#USING
+if [ $1 == "USED" ]
+then
+ lspv $2 | grep "USED PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+fi
+
+#VALID
+if [ $1 == "FREE" ]
+then
+ lspv $2 | grep "FREE PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+fi
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryAccess.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryAccess.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryAccess.sh (revision 7)
@@ -0,0 +1,15 @@
+# Shell Name : getDrctryAccess.sh
+# Description : 해당되는 디렉토리의 접근권한을 찾는다.
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 조재영 최초 생성
+#
+# @author 공통 서비스 개발팀 조재영
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+ls -alF $1 | grep $2 | awk -F" " '{print $1}'
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryByOwner.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryByOwner.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryByOwner.sh (revision 7)
@@ -0,0 +1,15 @@
+# Shell Name : getDrctryByOwner.sh
+# Description : 해당되는 사용자 계정이 소유주인 디렉토리를 찾는다.
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 조재영 최초 생성
+#
+# @author 공통 서비스 개발팀 조재영
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+find $1 -name $2 -user $3
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryOwner.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryOwner.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryOwner.sh (revision 7)
@@ -0,0 +1,15 @@
+# Shell Name : getDrctryByOwner.sh
+# Description : 해당되는 디렉토리 안 파일의 소유주를 찾는다.
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 조재영 최초 생성
+#
+# @author 공통 서비스 개발팀 조재영
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+ls -alF $1 | grep $2 | awk -F" " '{print $3}'
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskAttrb.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskAttrb.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskAttrb.sh (revision 7)
@@ -0,0 +1,128 @@
+# Shell Name : getDiskAttr.bat
+# Description : 디스크 속성정보 확인
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 조재영 최초 생성
+#
+# @author 공통 서비스 개발팀 조재영
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+#### DISK CHECK ####
+#for A in `lspv | awk '{print $1}' `
+for A in `lsdev -Cc disk | awk '{print $1}'`
+do
+ # NAME
+ echo $A
+ # ATTRIBUTE
+ echo `lscfg -l $A | awk -F $A '{print $2}'`
+ # TYPE
+ echo "disk"
+ # AUTHORITY
+
+ # SIZE
+ isEq="FALSE"
+ for B in `lspv | awk '{print $1}' `
+ do
+ if [ $A = $B ]
+ then
+ isEq="TRUE"
+ fi
+ done
+
+ if [ $isEq = "TRUE" ]
+ then
+ # TOTAL SIZE
+ lspv $A | grep "TOTAL PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ # USED SIZE
+ lspv $A | grep "USED PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ # FREE SIZE
+ lspv $A | grep "FREE PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ else
+ echo ""
+ echo ""
+ echo ""
+ fi
+
+done
+
+#### USB CHECK ####
+for A in `lsdev -Cc usb | awk '{print $1}'`
+do
+# NAME
+echo $A
+# ATTRIBUTE
+echo `lscfg -l $A | awk -F $A '{print $2}'`
+# TYPE
+echo "usb"
+# AUTHORITY
+
+# SIZE
+ isEq="FALSE"
+ for B in `lspv | awk '{print $1}' `
+ do
+ if [ $A = $B ]
+ then
+ isEq="TRUE"
+ fi
+ done
+
+ if [ $isEq = "TRUE" ]
+ then
+ # TOTAL SIZE
+ lspv $A | grep "TOTAL PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ # USED SIZE
+ lspv $A | grep "USED PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ # FREE SIZE
+ lspv $A | grep "FREE PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ else
+ echo ""
+ echo ""
+ echo ""
+ fi
+
+done
+
+#### CDROM CHECK ####
+for A in `lsdev -Cc cdrom | awk '{print $1}'`
+do
+# NAME
+echo $A
+# ATTRIBUTE
+echo `lscfg -l $A | awk -F $A '{print $2}'`
+# TYPE
+echo "cdrom"
+# AUTHORITY
+
+# SIZE
+ isEq="FALSE"
+ for B in `lspv | awk '{print $1}' `
+ do
+ if [ $A = $B ]
+ then
+ isEq="TRUE"
+ fi
+
+ isEq="TRUE"
+ fi
+ done
+
+ if [ $isEq = "TRUE" ]
+ then
+ # TOTAL SIZE
+ lspv $A | grep "TOTAL PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ # USED SIZE
+ lspv $A | grep "USED PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ # FREE SIZE
+ lspv $A | grep "FREE PPs" | awk -F"(" '{print $2}' | awk '{print $1}'
+ else
+ echo ""
+ echo ""
+ echo ""
+ fi
+
+done
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getPrductVersion.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getPrductVersion.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getPrductVersion.sh (revision 7)
@@ -0,0 +1,34 @@
+# Shell Name : getPrductVersion.sh
+# Description : 시스템에 설치된 서버(WAS,WEB,MAIL서버)의 버전을 조회하는 Shell
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.11 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 11
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+#echo $1 -SERVER NAME
+
+#WEBLOGIC
+if [ $1 == "WEBLOGIC" ]
+then
+ java weblogic.Admin -username weblogic -password weblogic VERSION
+fi
+
+#JEUS
+if [ $1 == "JEUS" ]
+then
+ jeusadmin -version
+fi
+
+#JBOSS
+if [ $1 == "JBOSS" ]
+then
+ /user/com/jboss/bin/twiddle.sh -s localhost:1099 -u admin -p admin get "jboss.system:type=Server" | grep "Version="
+fi
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/compileSchema.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/compileSchema.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/compileSchema.sh (revision 7)
@@ -0,0 +1,16 @@
+# Shell Name : compileSchema.sh
+# Description : XML 스키마를 자바클래스로 변환하는 Shell
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.13 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+scomp -out $1 $2
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/compileSchema.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/compileSchema.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/compileSchema.bat (revision 7)
@@ -0,0 +1,16 @@
+@rem Shell Name : compileSchema.bat
+@rem Description : XML 스키마를 자바클래스로 변환하는 Shell
+@rem Modification Information
+@rem
+@rem 수정일 수정자 수정내용
+@rem ------- -------- ---------------------------
+@rem 2009.02.13 박지욱 최초 생성
+@rem
+@rem author 공통 서비스 개발팀 박지욱
+@rem since 2009. 02. 13
+@rem version 1.0
+@rem see
+@rem
+@rem Copyright (C) 2009 by MOPAS All right reserved.
+
+scomp -out %1 %2
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getMoryInfo.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getMoryInfo.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getMoryInfo.bat (revision 7)
@@ -0,0 +1,16 @@
+@rem Shell Name : getMoryInfo.bat
+@rem Description : �ý��� �� ��ü, �����, ��ȿ �뷮�� ��ȸ�ϴ� Shell
+@rem Modification Information
+@rem
+@rem ������ ������ ��������
+@rem ------- -------- ---------------------------
+@rem 2009.02.24 ������ ���� ����
+@rem
+@rem author ���� ���� ������ ������
+@rem since 2009. 02. 24
+@rem version 1.0
+@rem see
+@rem
+@rem Copyright (C) 2009 by MOPAS All right reserved.
+
+systeminfo
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskExst.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskExst.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskExst.sh (revision 7)
@@ -0,0 +1,15 @@
+# Shell Name : getDiskExst.bat
+# Description : 디스크 존재여부 확인(윈도우에서는 지원 안함)
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 조재영 최초 생성
+#
+# @author 공통 서비스 개발팀 조재영
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+lsdev -Cc disk | wc -l
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getNetWorkInfo.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getNetWorkInfo.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getNetWorkInfo.sh (revision 7)
@@ -0,0 +1,63 @@
+# Shell Name : getNetWorkInfo.sh
+# Description : 네트워크 정보를 찾는다.
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 이용 최초 생성
+#
+# @author 공통 서비스 개발팀 이용
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+#getNetWorkInfo.sh
+#네트워크 정보를 찾는다.
+#netstat -v ent0 | grep "하드웨어 주소" -MAC
+#prtconf | grep "IP 주소" -IP
+#prtconf | grep "서브넷 마스크" -SM
+#prtconf | grep "게이트웨이" -GW
+#echo $1
+#echo $2
+#MAC
+if [ $1 == "MAC" ]
+then
+ netstat -v $2 | grep "하드웨어 주소" | awk '{print $3}'
+fi
+
+#IP
+if [ $1 == "IP" ]
+then
+ prtconf | grep "IP 주소" | awk '{print $3}'
+fi
+
+#SM
+if [ $1 == "SM" ]
+then
+ prtconf | grep "서브넷 마스크" | awk '{print $3}'
+fi
+
+#GW
+if [ $1 == "GW" ]
+then
+ prtconf | grep "게이트웨이" | awk '{print $2}'
+fi
+
+#도메인명
+if [ $1 == "DN" ]
+then
+ hostname
+fi
+
+#DNS
+if [ $1 == "DNS" ]
+then
+ host $2 | awk '{print $2}'
+fi
+
+if [ $1 == "SCAN" ]
+then
+ netstat -na | egrep 'tcp|udp'
+fi
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/moveDrctry.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/moveDrctry.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/moveDrctry.bat (revision 7)
@@ -0,0 +1 @@
+move %1 %2
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/moveDrctry.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/moveDrctry.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/moveDrctry.sh (revision 7)
@@ -0,0 +1,15 @@
+# Shell Name : moveDrctry.sh
+# Description : 파일을 이동한다.
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.11 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 11
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+mv $1 $2
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskAttrb.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskAttrb.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskAttrb.bat (revision 7)
@@ -0,0 +1 @@
+@echo "Not supported in WINDOWS"
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getPrductVersion.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getPrductVersion.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getPrductVersion.bat (revision 7)
@@ -0,0 +1,43 @@
+@rem Shell Name : getPrductVersion.bat
+@rem Description : 시스템에 설치된 서버(WAS,WEB,MAIL서버)의 버전을 조회하는 Shell
+@rem Modification Information
+@rem
+@rem 수정일 수정자 수정내용
+@rem ------- -------- ---------------------------
+@rem 2009.02.11 박지욱 최초 생성
+@rem
+@rem author 공통 서비스 개발팀 박지욱
+@rem since 2009. 02. 11
+@rem version 1.0
+@rem see
+@rem
+@rem Copyright (C) 2009 by MOPAS All right reserved.
+
+IF "%1"=="WEBLOGIC" goto step1
+IF "%1"=="JEUS" goto step2
+IF "%1"=="JBOSS" goto step3
+goto error
+
+:step1
+set CMMD1=java weblogic.Admin -username weblogic -password weblogic VERSION
+set CMMD2=
+goto done
+
+
+:step2
+set CMMD1=jeusadmin -version
+set CMMD2=
+goto done
+
+
+:step3
+set CMMD1=twiddle.bat -s localhost:1099 -u admin -p admin get "jboss.system:type=Server"
+set CMMD2=find "Version="
+goto done
+
+:error
+@echo Usage: getPrductVersion 서버이름
+@echo example) getPrductVersion WEBLOGIC
+
+:done
+%CMMD1%|%CMMD2%
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskExst.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskExst.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskExst.bat (revision 7)
@@ -0,0 +1 @@
+@echo "Not supported in WINDOWS"
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/sh_001.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/sh_001.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/sh_001.bat (revision 7)
@@ -0,0 +1 @@
+@hostname
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryByOwner.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryByOwner.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryByOwner.bat (revision 7)
@@ -0,0 +1 @@
+@echo "Not supported in WINDOWS"
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskCpcty.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskCpcty.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskCpcty.bat (revision 7)
@@ -0,0 +1 @@
+@echo "Not supported in WINDOWS"
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getOSInfo.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getOSInfo.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getOSInfo.bat (revision 7)
@@ -0,0 +1,16 @@
+@rem Shell Name : getOSInfo.bat
+@rem Description : 시스템 OS의 이름, 버전, 제조사를 조회하는 Shell
+@rem Modification Information
+@rem
+@rem 수정일 수정자 수정내용
+@rem ------- -------- ---------------------------
+@rem 2009.02.13 박지욱 최초 생성
+@rem
+@rem author 공통 서비스 개발팀 박지욱
+@rem since 2009. 02. 13
+@rem version 1.0
+@rem see
+@rem
+@rem Copyright (C) 2009 by MOPAS All right reserved.
+
+systeminfo
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getPrductStatus.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getPrductStatus.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getPrductStatus.bat (revision 7)
@@ -0,0 +1,16 @@
+@rem Shell Name : getPrductStatus.bat
+@rem Description : 시스템에 설치된 서버(WAS,WEB,MAIL서버)의 실행상태를 조회하는 Shell
+@rem Modification Information
+@rem
+@rem 수정일 수정자 수정내용
+@rem ------- -------- ---------------------------
+@rem 2009.02.11 박지욱 최초 생성
+@rem
+@rem author 공통 서비스 개발팀 박지욱
+@rem since 2009. 02. 11
+@rem version 1.0
+@rem see
+@rem
+@rem Copyright (C) 2009 by MOPAS All right reserved.
+
+netstat -na
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDiskCpcty.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDiskCpcty.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDiskCpcty.sh (revision 7)
@@ -0,0 +1,18 @@
+# Shell Name : getDiskCpcty.bat
+# Description : 디스크 용량 확인
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 조재영 최초 생성
+#
+# @author 공통 서비스 개발팀 조재영
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+for B in `df -k | grep / | awk '{print $2} {print $3} {print $4} {print $7}'`
+ do
+ echo $B
+done
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getOSInfo.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getOSInfo.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getOSInfo.sh (revision 7)
@@ -0,0 +1,40 @@
+# Shell Name : getOSInfo.sh
+# Description : 시스템 OS의 이름, 버전, 제조사를 조회하는 Shell
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.13 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+#echo $1 -SEARCH NAME (NAME, VERSION, PRDUCTOR)
+
+#NAME
+if [ $1 == "NAME" ]
+then
+ uname -s
+fi
+
+#VERSION
+if [ $1 == "VERSION" ]
+then
+ oslevel
+fi
+
+#PRDUCTOR
+if [ $1 == "PRDUCTOR" ]
+then
+ prtconf | grep "시스템 모델:" | awk '{print $3}'
+fi
+
+#PROCESSOR
+if [ $1 == "PROCESSOR" ]
+then
+ uname -a | awk '{print substr($5,3,6)}'
+fi
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getMoryInfo.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getMoryInfo.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getMoryInfo.sh (revision 7)
@@ -0,0 +1,34 @@
+# Shell Name : getMoryInfo.sh
+# Description : 시스템에 존재하는 메모리 정보를 조회하는 Shell
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.23 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 13
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+#echo $1 -SEARCH NAME (FULL, USING, FREE)
+
+#FULL
+if [ $1 == "FULL" ]
+then
+ vmstat | grep "mem=" | awk '{print $4}'
+fi
+
+#USING
+if [ $1 == "USED" ]
+then
+ vmstat | tail -1 | awk '{print $3*4096/1024/1024}'
+fi
+
+#VALID
+if [ $1 == "FREE" ]
+then
+ vmstat | tail -1 | awk '{print $4*4096/1024/1024}'
+fi
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryOwner.bat
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryOwner.bat (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getDrctryOwner.bat (revision 7)
@@ -0,0 +1 @@
+@echo "Not supported in WINDOWS"
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/prg/getPrductStatus.sh
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/prg/getPrductStatus.sh (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/prg/getPrductStatus.sh (revision 7)
@@ -0,0 +1,18 @@
+# Shell Name : getPrductStatus.sh
+# Description : 시스템에 설치된 서버(WAS,WEB,MAIL서버)의 실행상태를 조회하는 Shell
+# Modification Information
+#
+# 수정일 수정자 수정내용
+# ------- -------- ---------------------------
+# 2009.02.11 박지욱 최초 생성
+#
+# @author 공통 서비스 개발팀 박지욱
+# @since 2009. 02. 11
+# @version 1.0
+# @see
+#
+# Copyright (C) 2009 by MOPAS All right reserved.
+
+#echo $1 -PORT
+
+netstat -na | grep -w "LISTEN" | grep -c $1
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/ck.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/ck.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/egovProps/ck.properties (revision 7)
@@ -0,0 +1,16 @@
+# CKEditor Image File Upload
+
+#optional
+ck.image.type.allow=jpg,jpeg,gif,bmp,png
+#optional
+#ck.image.save.class=Implementation of egovframework.com.utl.wed.filter.FileSaveManager
+
+# if you use "separate image server" or other case. (apache, cdn, nas...)
+#ck.image.dir=/www/images.mydomain.com/upload
+#ck.image.url=http://images.mydomain.com/upload/
+
+# if you use "web application"'s deployed directory.
+#ck.image.dir=/upload_dir : define Globals.fileStorePath(globals.properties) sub directory => Do not start with "/".
+#ck.image.url=/contextRoot/upload/
+ck.image.dir=ck_image
+ck.image.url=/ckUploadImage
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/egovProps/ck.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_en.properties (revision 7)
@@ -0,0 +1,18 @@
+comCopSecRgm.title=Authority Group Management
+
+comCopSecRgm.searchCondition.userId=User ID
+comCopSecRgm.searchCondition.userNm=User Name
+comCopSecRgm.searchCondition.group=Group
+comCopSecRgm.btn.groupInquire= Group Inquiry Popup
+
+comCopSecRgm.list.userId=User ID
+comCopSecRgm.list.userNm=User Name
+comCopSecRgm.list.userType=User Type
+comCopSecRgm.list.author=Authority
+comCopSecRgm.list.regYn=Available Options About Register
+comCopSecRgm.list.authorManageCombo=Select Authority
+comCopSecRgm.list.validate.alert.notSelect=No items selected.
+comCopSecRgm.list.validate.alert.noResult=No query results found.
+comCopSecRgm.list.validate.confirm.regist=Would you like to register?
+comCopSecRgm.list.validate.confirm.delete=Are you sure you want to delete?
+comCopSecRgm.list.validate.alert.selectGroup=Please select a group.
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_ko.properties (revision 7)
@@ -0,0 +1,19 @@
+comCopSecRgm.title=\uad8c\ud55c\uadf8\ub8f9\uad00\ub9ac
+
+comCopSecRgm.searchCondition.userId = \uc0ac\uc6a9\uc790 ID
+comCopSecRgm.searchCondition.userNm = \uc0ac\uc6a9\uc790 \uba85
+comCopSecRgm.searchCondition.group = \uadf8\ub8f9
+comCopSecRgm.btn.groupInquire = \uadf8\ub8f9\uc870\ud68c \ud31d\uc5c5
+
+comCopSecRgm.list.userId=\uc0ac\uc6a9\uc790 ID
+comCopSecRgm.list.userNm=\uc0ac\uc6a9\uc790 \uba85
+comCopSecRgm.list.userType=\uc0ac\uc6a9\uc790 \uc720\ud615
+comCopSecRgm.list.author=\uad8c\ud55c
+comCopSecRgm.list.regYn=\ub4f1\ub85d\uc5ec\ubd80
+comCopSecRgm.list.authorManageCombo=\uad8c\ud55c\uc120\ud0dd
+comCopSecRgm.list.validate.alert.notSelect=\uc120\ud0dd\ub41c \ud56d\ubaa9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecRgm.list.validate.alert.noResult=\uc870\ud68c\ub41c \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecRgm.list.validate.confirm.regist=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+comCopSecRgm.list.validate.confirm.delete=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+comCopSecRgm.list.validate.alert.selectGroup=\uadf8\ub8f9\uc744 \uc120\ud0dd\ud558\uc138\uc694.
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/rgm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_en.properties (revision 7)
@@ -0,0 +1,19 @@
+comCopSecRmt.title=Role Management For Each Authority
+
+comCopSecRmt.searchCondition.searchKeywordText=Roll Name
+
+comCopSecRmt.validate.groupSelect=There is no selected group.
+comCopSecRmt.validate.groupSelectResult=There is no viewed result.
+
+comCopSecRam.list.rollId=Roll ID
+comCopSecRam.list.rollNm=Roll Name
+comCopSecRam.list.rollType=Roll Type
+comCopSecRam.list.rollSort=Roll Sort
+comCopSecRam.list.rollDc=Roll Description
+
+comCopSecRam.regist.rollId=Roll ID
+comCopSecRam.regist.rollNm=Roll Name
+comCopSecRam.regist.rollPtn=Roll Pattern
+comCopSecRam.regist.rollDc=Roll Description
+comCopSecRam.regist.rollType=Roll Type
+comCopSecRam.regist.rollSort=Roll Sort
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_ko.properties (revision 7)
@@ -0,0 +1,19 @@
+comCopSecRmt.title=\ub864\uad00\ub9ac
+
+comCopSecRmt.searchCondition.searchKeywordText=\ub864\uba85
+
+comCopSecRmt.validate.groupSelect=\uc120\ud0dd\ub41c \uadf8\ub8f9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecRmt.validate.groupSelectResult=\uc870\ud68c\ub41c \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+comCopSecRam.list.rollId=\ub864 ID
+comCopSecRam.list.rollNm=\ub864 \uba85
+comCopSecRam.list.rollType=\ub864 \ud0c0\uc785
+comCopSecRam.list.rollSort=\ub864 Sort
+comCopSecRam.list.rollDc=\ub864 \uc124\uba85
+
+comCopSecRam.regist.rollId=\ub864 ID
+comCopSecRam.regist.rollNm=\ub864 \uba85
+comCopSecRam.regist.rollPtn=\ub864 \ud328\ud134
+comCopSecRam.regist.rollDc=\ub864 \uc124\uba85
+comCopSecRam.regist.rollType=\ub864 \ud0c0\uc785
+comCopSecRam.regist.rollSort=\ub864 Sort
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/rmt/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_en.properties (revision 7)
@@ -0,0 +1,21 @@
+comCopSecGmt.title=Group Management
+
+comCopSecGmt.searchCondition.searchKeywordText=Group Name
+
+comCopSecGmt.list.groupId=Group ID
+comCopSecGmt.list.groupNm=Group Name
+comCopSecGmt.list.groupDc=Group Description
+
+comCopSecGmt.validate.groupSelect=There is no selected group.
+comCopSecGmt.validate.groupSelectResult=There is no viewed result.
+comCopSecGmt.validate.groupOneSelect=One or more groups are selected.
+comCopSecGmt.validate.confirm.delete=Are you sure you want to delete?
+
+comCopSecGmt.regist.groupId=Group ID
+comCopSecGmt.regist.groupNm=Group Name
+comCopSecGmt.regist.groupDc=Group Description
+
+comCopSecGmt.groupPopup.title=Group Inquiry Popup
+comCopSecGmt.groupPopup.searchKeywordText=Group Name
+comCopSecGmt.groupPopupList.groupId=Group ID
+comCopSecGmt.groupPopupList.groupNm=Group Name
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_ko.properties (revision 7)
@@ -0,0 +1,22 @@
+comCopSecGmt.title=\uadf8\ub8f9\uad00\ub9ac
+
+comCopSecGmt.searchCondition.searchKeywordText=\uadf8\ub8f9 \uba85
+
+comCopSecGmt.list.groupId=\uadf8\ub8f9 ID
+comCopSecGmt.list.groupNm=\uadf8\ub8f9 \uba85
+comCopSecGmt.list.groupDc=\uc124\uba85
+
+
+comCopSecGmt.validate.groupSelect=\uc120\ud0dd\ub41c \uadf8\ub8f9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecGmt.validate.groupSelectResult=\uc870\ud68c\ub41c \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecGmt.validate.groupOneSelect=\ud558\ub098 \uc774\uc0c1\uc758 \uadf8\ub8f9\uc774 \uc120\ud0dd\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+comCopSecGmt.validate.confirm.delete=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+
+comCopSecGmt.regist.groupId=\uadf8\ub8f9 ID
+comCopSecGmt.regist.groupNm=\uadf8\ub8f9 \uba85
+comCopSecGmt.regist.groupDc=\uc124\uba85
+
+comCopSecGmt.groupPopup.title=\uadf8\ub8f9 \uc870\ud68c \ud31d\uc5c5
+comCopSecGmt.groupPopup.searchKeywordText=\uadf8\ub8f9\uba85
+comCopSecGmt.groupPopupList.groupId=\uadf8\ub8f9 ID
+comCopSecGmt.groupPopupList.groupNm=\uadf8\ub8f9 \uba85
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/gmt/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/pki/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/pki/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/pki/message_en.properties (revision 7)
@@ -0,0 +1,8 @@
+comSecPki.title=Encryption/Decryption
+comSecPki.cryptoInfo.plainText=Source string
+comSecPki.cryptoInfo.cryptoType=Encryption method
+comSecPki.cryptoInfo.plainTextLen=Source string length
+comSecPki.cryptoInfo.cryptText=Encryption string(Base64)
+comSecPki.cryptoInfo.decryptText=Decryption string
+comSecPki.cryptoInfo.decryptTextLen=Decryption string length
+comSecPki.cryptoInfo.sampleText=Please enter a sample string for encryption/decryption.
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/pki/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/pki/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/pki/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/pki/message_ko.properties (revision 7)
@@ -0,0 +1,8 @@
+comSecPki.title=\uc554\ud638\ud654/\ubcf5\ud638\ud654
+comSecPki.cryptoInfo.plainText=\uc6d0\ubcf8 \ubb38\uc790\uc5f4
+comSecPki.cryptoInfo.cryptoType=\uc554\ud638\ud654 \ubc29\uc2dd
+comSecPki.cryptoInfo.plainTextLen=\uc6d0\ubcf8 \ubb38\uc790\uc5f4 \uae38\uc774
+comSecPki.cryptoInfo.cryptText=\uc554\ud638\ud654 \ubb38\uc790\uc5f4(Base64)
+comSecPki.cryptoInfo.decryptText=\ubcf5\ud638\ud654 \ubb38\uc790\uc5f4
+comSecPki.cryptoInfo.decryptTextLen=\ubcf5\ud638\ud654 \ubb38\uc790\uc5f4 \uae38\uc774
+comSecPki.cryptoInfo.sampleText=\uc554\ubcf5\ud638\ud654\ub97c \uc704\ud55c \uc0d8\ud50c \ubb38\uc790\uc5f4\uc744 \uc785\ub825\ud558\uc5ec \uc8fc\uc138\uc694.
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/pki/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/ram/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/ram/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/ram/message_en.properties (revision 7)
@@ -0,0 +1,29 @@
+comCopSecRam.title=Authority Management
+comCopSecRam.list.searchKeywordText=Authority Name
+comCopSecRam.list.authorRollId=Authority ID
+comCopSecRam.list.authorNm=Authority Name
+comCopSecRam.list.authorDc=Description
+comCopSecRam.list.authorRoll=Roll Infomation
+
+comCopSecRam.regist.authorCode=Authority Code
+comCopSecRam.regist.authorNm=Authority Name
+comCopSecRam.regist.authorDc=Description
+
+comCopSecRam.validate.authorSelect=There is no selected authority.
+comCopSecRam.validate.authorSelectResult=There is no viewed result.
+
+comCopSecRam.authorRoleList.title=Authority Roll management
+comCopSecRam.authorRoleList.searchKeywordText=Authority Code
+comCopSecRam.authorRoleList.allSelectBox=Select All Checkbox
+comCopSecRam.authorRoleList.rollNm=Roll Name
+comCopSecRam.authorRoleList.rollId=Roll ID
+comCopSecRam.authorRoleList.rollType=Roll Type
+comCopSecRam.authorRoleList.rollSort=Roll Sort
+comCopSecRam.authorRoleList.rollDc=Roll Description
+comCopSecRam.authorRoleList.regdate=Registration Date
+comCopSecRam.authorRoleList.regYn=Available Options About Register
+comCopSecRam.authorRoleList.regY=Registration
+comCopSecRam.authorRoleList.regN=Unregistered
+comCopSecRam.authorRoleList.validate.alert.noSelect=No roles selected.
+comCopSecRam.authorRoleList.validate.alert.noResult=No query results found.
+comCopSecRam.authorRoleList.validate.confirm.regist=Would you like to register?
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/ram/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sec/ram/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sec/ram/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sec/ram/message_ko.properties (revision 7)
@@ -0,0 +1,29 @@
+comCopSecRam.title=\uad8c\ud55c\uad00\ub9ac
+comCopSecRam.list.searchKeywordText=\uad8c\ud55c\uba85
+comCopSecRam.list.authorRollId=\uad8c\ud55c ID
+comCopSecRam.list.authorNm=\uad8c\ud55c\uba85
+comCopSecRam.list.authorDc=\uc124\uba85
+comCopSecRam.list.authorRoll=\ub864\uc815\ubcf4
+
+comCopSecRam.regist.authorCode=\uad8c\ud55c\ucf54\ub4dc
+comCopSecRam.regist.authorNm=\uad8c\ud55c\uba85
+comCopSecRam.regist.authorDc=\uc124\uba85
+
+comCopSecRam.validate.authorSelect=\uc120\ud0dd\ub41c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecRam.validate.authorSelectResult=\uc870\ud68c\ub41c \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+comCopSecRam.authorRoleList.title=\uad8c\ud55c\ub864\uad00\ub9ac
+comCopSecRam.authorRoleList.searchKeywordText=\uad8c\ud55c\ucf54\ub4dc
+comCopSecRam.authorRoleList.allSelectBox=\uc804\uccb4 \uc120\ud0dd \uccb4\ud06c\ubc15\uc2a4
+comCopSecRam.authorRoleList.rollNm=\ub864 \uba85
+comCopSecRam.authorRoleList.rollId=\ub864 ID
+comCopSecRam.authorRoleList.rollType=\ub864 \ud0c0\uc785
+comCopSecRam.authorRoleList.rollSort=\ub864 Sort
+comCopSecRam.authorRoleList.rollDc=\ub864 \uc124\uba85
+comCopSecRam.authorRoleList.regdate=\ub4f1\ub85d\uc77c
+comCopSecRam.authorRoleList.regYn=\ub4f1\ub85d\uc5ec\ubd80
+comCopSecRam.authorRoleList.regY=\ub4f1\ub85d
+comCopSecRam.authorRoleList.regN=\ubbf8\ub4f1\ub85d
+comCopSecRam.authorRoleList.validate.alert.noSelect=\uc120\ud0dd\ub41c \ub864\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecRam.authorRoleList.validate.alert.noResult=\uc870\ud68c\ub41c \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopSecRam.authorRoleList.validate.confirm.regist=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
Property changes on: base3.10/src/main/resources/egovframework/message/com/sec/ram/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_en.properties (revision 7)
@@ -0,0 +1,23 @@
+#common#
+comCmmErr.button=before page
+
+#accessDenied#
+comCmmErr.accessDenied.title=You do not have permission to access this page!
+comCmmErr.accessDenied.code=User authorization Error
+
+#dataAccessFailure#
+comCmmErr.dataAccessFailure.title=Error occurred while processing data!
+comCmmErr.dataAccessFailure.code=Database Processing Error
+
+
+#bizException#
+comCmmErr.bizException.title=During business logic processing!
+comCmmErr.bizException.code=Business Logic Processing Error
+
+#runtimeException#
+comCmmErr.runtimeException.title=Unknown error occurred!
+comCmmErr.runtimeException.code=System Error
+
+#sessionException#
+comCmmErr.sessionException.title=Session Expiration Error!
+comCmmErr.sessionException.code=Session Expiration Error
Property changes on: base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_ko.properties (revision 7)
@@ -0,0 +1,22 @@
+#common#
+comCmmErr.button=\uc774\uc804 \ud398\uc774\uc9c0
+
+#accessDenied#
+comCmmErr.accessDenied.title=\ud604\uc7ac \ud398\uc774\uc9c0\uc5d0 \ub300\ud55c \uc811\uadfc\uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4!
+comCmmErr.accessDenied.code=\uc0ac\uc6a9\uc790\uc811\uadfc\uad8c\ud55c \uc5d0\ub7ec
+
+#dataAccessFailure#
+comCmmErr.dataAccessFailure.title=\ub370\uc774\ud130 \ucc98\ub9ac \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4!
+comCmmErr.dataAccessFailure.code=\ub370\uc774\ud130\ucc98\ub9ac \uc5d0\ub7ec
+
+#bizException#
+comCmmErr.bizException.title=\ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \ucc98\ub9ac \uc911 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
+comCmmErr.bizException.code=\ube44\uc988\ub2c8\uc2a4\ub85c\uc9c1\ucc98\ub9ac \uc5d0\ub7ec
+
+#runtimeException#
+comCmmErr.runtimeException.title=\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
+comCmmErr.runtimeException.code=\uc2dc\uc2a4\ud15c \uc5d0\ub7ec
+
+#sessionException#
+comCmmErr.sessionException.title=\uc138\uc158\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4!
+comCmmErr.sessionException.code=\uc138\uc158\ub9cc\ub8cc \uc5d0\ub7ec
Property changes on: base3.10/src/main/resources/egovframework/message/com/cmm/err/message-common_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cmm/message-common_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cmm/message-common_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cmm/message-common_en.properties (revision 7)
@@ -0,0 +1,251 @@
+#top#
+comCmm.top.title=eGoverment Standard Framework Common Components VERSION 3.10
+comCmm.top.leftSessionTime=Session expiration time
+comCmm.top.incSessionTime=Time extension
+comCmm.top.expiredSessionTime=Time out
+comCmm.top.expireSessionTimeInfo=The Signin session time has expired.
+comCmm.top.cantIncSessionTime=Time cannot be extended.
+
+#left#
+comCmm.mai.title=Portal(example) Main Page
+comCmm.uat.title=User Authentication/Directory Service
+comCmm.sec.title=Security
+comCmm.sts.title=Statistics/Reporting
+comCmm.cop.title=Collaboration
+comCmm.uss.title=User Support
+comCmm.sym.title=System Management
+comCmm.ssi.title=System/Service Integration
+comCmm.dam.title=Digital Asset Management
+comCmm.com.title=Utility Technology
+comCmm.ext.title=External Add Components
+
+#component#
+#Portal(example) Main Page#
+comCmm.left.1=Portal(example) Main Page
+
+#User Authentication/Directory Service#
+comCmm.left.10=Log In
+comCmm.left.30=Log In Policy Management
+
+#Security#
+comCmm.left.60=Authority Management
+comCmm.left.70=Authority Group Management
+comCmm.left.80=Group Management
+comCmm.left.90=Role management for Each Authority
+comCmm.left.100=Department Authority Management
+
+#Statistics/Reporting#
+comCmm.left.120=Post Statistics
+comCmm.left.130=User Statistics
+comCmm.left.140=Connection Statistics
+comCmm.left.150=Screen Statistics
+comCmm.left.160=Report Statistics
+comCmm.left.161=Data Usage Statistics
+
+#Collaboration#
+comCmm.left.170=Blog Management
+comCmm.left.180=Board Master Management
+comCmm.left.190=Board Usage Management
+comCmm.left.200=Template Management
+comCmm.left.250=Scrap Management
+comCmm.left.270=Community Creation/Usage/Member Management
+comCmm.left.310=SMS Service
+comCmm.left.320=Department Schedule Management
+comCmm.left.330=Schedule Management
+comCmm.left.340=Diary Management
+comCmm.left.350=Master Schedule
+comCmm.left.360=Send Mail
+comCmm.left.361=Send Mail List
+comCmm.left.370=Business Card Management
+comCmm.left.371=My Business Card Management
+comCmm.left.380=Address Book Management
+comCmm.left.390=Executive Schedule Management
+comCmm.left.400=Division Task Folder Management
+comCmm.left.401=Division Task Information
+comCmm.left.410=Weekly/Monthly Reports Management
+comCmm.left.420=Memo/To-do List Management
+comCmm.left.430=Memo Report
+
+#User Support#
+comCmm.left.450=Corporate Member Management
+comCmm.left.460=User Management
+comCmm.left.461=Department Management
+comCmm.left.470=Member Management
+comCmm.left.480=My Page
+comCmm.left.490=Provision Management
+comCmm.left.500=Copyright Protection Policy
+comCmm.left.510=Private Information Protection Policy
+comCmm.left.520=Help
+comCmm.left.530=Word Dictionary
+comCmm.left.540=FAQ Management
+comCmm.left.550=Q&A Management
+comCmm.left.551=Q&A Answer
+comCmm.left.560=Administration Terminology Dictionary
+comCmm.left.561=Administration Terminology Dictionary Management
+comCmm.left.570=Online Manual
+comCmm.left.571=User Online Manual
+comCmm.left.580=Consulting Management
+comCmm.left.581=Consulting Answer Management
+comCmm.left.590=Questionnaire Management
+comCmm.left.600=Questionnaire Survey
+comCmm.left.610=Questionnaire Template Management
+comCmm.left.620=Questionnaire Respond Management
+comCmm.left.630=Questionnaire Question Management
+comCmm.left.640=Questionnaire Item Management
+comCmm.left.650=Meeting Management
+comCmm.left.660=Online POLL Management
+comCmm.left.661=Online POLL Participation
+comCmm.left.670=News Management
+comCmm.left.680=Site Management
+comCmm.left.700=Recommended Site Management
+comCmm.left.710=Occasion/Event/Campaign
+comCmm.left.711=Extra Human Resource
+comCmm.left.720=Pop-up Management
+comCmm.left.730=Information Alerts
+comCmm.left.740=Banner Management
+comCmm.left.741=MYPAGE Banner Management
+comCmm.left.750=Login Page Image Management
+comCmm.left.760=Recent Search Word Inquiry
+comCmm.left.770=Main Image Management
+comCmm.left.771=Main Image View Reflection Result
+comCmm.left.780=Link Intergration Management
+comCmm.left.790=User Absence Management
+comCmm.left.800=Internet Service Information and Management
+comCmm.left.810=Wiki Function
+comCmm.left.820=RSS Tag Management
+comCmm.left.822=RSS Tag Service
+comCmm.left.830=Twitter Linkage
+comCmm.left.831=Facebook Linkage
+comCmm.left.840=Note Management
+comCmm.left.850=Received Note Box Management
+comCmm.left.860=Sent Note Box Management
+comCmm.left.870=Meeting Room Management
+comCmm.left.871=Meeting Room Reservation Management
+comCmm.left.890=Employee Family Event Management
+comCmm.left.891=Employee Congratulatory Approval Management
+comCmm.left.900=Vacation Management
+comCmm.left.901=Vacation Approval Management
+comCmm.left.902=Personal Vocation Management
+comCmm.left.910=Duty Management
+comCmm.left.911=Duty Journal Management
+comCmm.left.920=Compensation
+comCmm.left.921=Compensation Approval Management
+comCmm.left.930=Anniversary Management
+comCmm.left.931=Anniversary List (Check)
+comCmm.left.940=Event Application Management
+comCmm.left.941=Event Reception Management
+comCmm.left.942=Event Reception Approval Management
+comCmm.left.943=Office Location Management
+comCmm.left.950=Commute Management
+
+#System Management#
+comCmm.left.960=Common Classification Code
+comCmm.left.970=Common Detail Code
+comCmm.left.980=Common Code
+comCmm.left.1000=Address Management
+comCmm.left.1010=Administration Code Management
+comCmm.left.1020=Institutions Code Management
+comCmm.left.1030=Log Management
+comCmm.left.1040=User Log Management
+comCmm.left.1050=Transmit/Receive Log Management
+comCmm.left.1060=System History Management
+comCmm.left.1070=Web Log Management
+comCmm.left.1080=Connection Log Management
+comCmm.left.1085=Privacy Log Management
+comCmm.left.1090=Menu Management
+comCmm.left.1091=Menu Management List
+comCmm.left.1100=Menu Creation Management
+comCmm.left.1101=Site Map
+comCmm.left.1110=Short Cut Menu Management
+comCmm.left.1111=Program Management
+comCmm.left.1112=Program Change Management
+comCmm.left.1113=Program Change Process
+comCmm.left.1114=Program Change History
+comCmm.left.1120=Batch Work Management
+comCmm.left.1130=Batch Result Management
+comCmm.left.1140=Schedule Process
+comCmm.left.1150=Backup Management
+comCmm.left.1151=Backup Result Management
+comCmm.left.1160=NetWork Management
+comCmm.left.1170=Server Information Management
+comCmm.left.1171=Server S/W List
+comCmm.left.1180=Trouble Request Management
+comCmm.left.1190=Trouble Process Result Management
+
+#System/Service Integration#
+comCmm.left.1210=System Contact Management
+comCmm.left.1220=Contact Status Management
+comCmm.left.1230=Contact Message Management
+comCmm.left.1240=Contact Institution Management
+
+#Digital Asset Management#
+comCmm.left.1250=Individual Knowledge Management
+comCmm.left.1260=Knowledge Map Management by Types
+comCmm.left.1261=Organizational Knowledge Map Management
+comCmm.left.1270=Knowledge Expert Management
+comCmm.left.1280=Knowledge Information Management
+comCmm.left.1290=Knowledge Evaluation Management
+comCmm.left.1291=Knowledge Information Offer
+
+#Utility Technology#
+comCmm.left.1300=General Calendar
+comCmm.left.2080=Transmit and Receive Monitoring
+comCmm.left.2090=DB Service Monitoring
+comCmm.left.2100=HTTP Service Monitoring
+comCmm.left.2110=Process Monitoring
+comCmm.left.2120=Network Service Monitoring
+comCmm.left.2130=File System Monitoring
+comCmm.left.2140=Proxy Service
+comCmm.left.2150=File Synchronization
+comCmm.left.2160=Login Session Information Check
+comCmm.left.2170=Server Resource Monitoring
+comCmm.left.2180=Address Info Linkage
+comCmm.left.2200=Encryption/Decryption
+
+#External Add Components#
+comCmm.left.3000=JFile Guide
+comCmm.left.3010=JFile File Upload
+comCmm.left.3020=JFile File Download
+comCmm.left.3100=LDAP Org. Management
+comCmm.left.3110=LDAP Org. Graph
+comCmm.left.3200=WebMessenger
+
+#EgovUnitContent(\ub85c\uadf8\uc778 \ud6c4 \ud398\uc774\uc9c0)#
+comCmm.unitContent.1=Common Compoent
+comCmm.unitContent.2=Welcome.
+comCmm.unitContent.3=Logout
+comCmm.unitContent.4=If you run into any errors, please contact the eGovframework center.
+comCmm.unitContent.5=Screen description
+comCmm.unitContent.6=The left menu is not affected by the menu-related components (menu management, site map, etc.)
+comCmm.unitContent.7=Controller class that finds installed components after installing components through IncludedInfo annotation and processes information to be displayed on the screen.
+comCmm.unitContent.8=
+comCmm.unitContent.9=
+comCmm.unitContent.10=Before the menu structure is developed,
+comCmm.unitContent.11=the list of common components included in the distribution files is provided.
+comCmm.unitContent.12=If you use this control to configure menus at runtime,
+comCmm.unitContent.13=we recommend that you delete and deploy them in production
+comCmm.unitContent.14= because they can cause performance problems or cause errors in your menu configuration.
+
+comCmm.unitContent.20=Password expiration notice
+
+#EgovExpirePwd(\ube44\ubc00\ubc88\ud638\ubcc0\uacbd \uacf5\uc9c0)#
+comCmm.expirePwdContent.1=Login
+comCmm.expirePwdContent.2=Login classification
+
+comCmm.expirePwdContent.10=Manager
+comCmm.expirePwdContent.11=Corporate Member
+comCmm.expirePwdContent.12=General Member
+
+comCmm.expirePwdContent.21=Please refer to the following file to change the password expiration date.
+comCmm.expirePwdContent.22=Password expiration
+comCmm.expirePwdContent.23=Password validity has expired.
+comCmm.expirePwdContent.24=Please change your password now for safe privacy!
+comCmm.expirePwdContent.25=Password expiration days
+comCmm.expirePwdContent.26=Password validity period
+comCmm.expirePwdContent.27=Number of days since password change
+comCmm.expirePwdContent.28=Password expiration days
+comCmm.expirePwdContent.29=Please change your password periodically.
+comCmm.expirePwdContent.30=days
+
+comCmm.expirePwdContent.50=Change immediately
+comCmm.expirePwdContent.51=Change next
Property changes on: base3.10/src/main/resources/egovframework/message/com/cmm/message-common_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cmm/message-common_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cmm/message-common_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cmm/message-common_ko.properties (revision 7)
@@ -0,0 +1,251 @@
+#top#
+comCmm.top.title=\uc804\uc790\uc815\ubd80 \ud45c\uc900\ud504\ub808\uc784\uc6cc\ud06c \uacf5\ud1b5\ucef4\ud3ec\ub10c\ud2b8 VERSION 3.10
+comCmm.top.leftSessionTime=\uc138\uc158\ub9cc\ub8cc \ub0a8\uc740\uc2dc\uac04
+comCmm.top.incSessionTime=\uc2dc\uac04\uc5f0\uc7a5
+comCmm.top.expiredSessionTime=\uc2dc\uac04\ub9cc\ub8cc
+comCmm.top.expireSessionTimeInfo=\ub85c\uadf8\uc778 \uc138\uc158\uc2dc\uac04\uc774 \ub9cc\ub8cc \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+comCmm.top.cantIncSessionTime=\uc2dc\uac04\uc744 \uc5f0\uc7a5\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+#left#
+comCmm.mai.title=\ud3ec\ud138(\uc608\uc81c) \uba54\uc778\ud654\uba74
+comCmm.uat.title=\uc0ac\uc6a9\uc790\ub514\ub809\ud1a0\ub9ac/\ud1b5\ud569\uc778\uc99d
+comCmm.sec.title=\ubcf4\uc548
+comCmm.sts.title=\ud1b5\uacc4/\ub9ac\ud3ec\ud305
+comCmm.cop.title=\ud611\uc5c5
+comCmm.uss.title=\uc0ac\uc6a9\uc790\uc9c0\uc6d0
+comCmm.sym.title=\uc2dc\uc2a4\ud15c\uad00\ub9ac
+comCmm.ssi.title=\uc2dc\uc2a4\ud15c/\uc11c\ube44\uc2a4\uc5f0\uacc4
+comCmm.dam.title=\ub514\uc9c0\ud138 \uc790\uc0b0 \uad00\ub9ac
+comCmm.com.title=\uc694\uc18c\uae30\uc220
+comCmm.ext.title=\uc678\ubd80 \ucd94\uac00 \ucef4\ud3ec\ub10c\ud2b8
+
+#component#
+#\ud3ec\ud0c8 \uba54\uc778\ud654\uba74#
+comCmm.left.1=\ud3ec\ud138(\uc608\uc81c) \uba54\uc778\ud654\uba74
+
+#\uc0ac\uc6a9\uc790\ub514\ub809\ud1a0\ub9ac/\ud1b5\ud569\uc778\uc99d#
+comCmm.left.10=\ub85c\uadf8\uc778
+comCmm.left.30=\ub85c\uadf8\uc778\uc815\ucc45\uad00\ub9ac
+
+#\ubcf4\uc548#
+comCmm.left.60=\uad8c\ud55c\uad00\ub9ac
+comCmm.left.70=\uad8c\ud55c\uadf8\ub8f9\uad00\ub9ac
+comCmm.left.80=\uadf8\ub8f9\uad00\ub9ac
+comCmm.left.90=\ub864\uad00\ub9ac
+comCmm.left.100=\ubd80\uc11c\uad8c\ud55c\uad00\ub9ac
+
+#\ud1b5\uacc4/\ub9ac\ud3ec\ud305#
+comCmm.left.120=\uac8c\uc2dc\ubb3c\ud1b5\uacc4
+comCmm.left.130=\uc0ac\uc6a9\uc790\ud1b5\uacc4
+comCmm.left.140=\uc811\uc18d\ud1b5\uacc4
+comCmm.left.150=\ud654\uba74\ud1b5\uacc4
+comCmm.left.160=\ubcf4\uace0\uc11c\ud1b5\uacc4
+comCmm.left.161=\uc790\ub8cc\uc774\uc6a9\ud604\ud669\ud1b5\uacc4
+
+\ud611\uc5c5
+comCmm.left.170=\ube14\ub85c\uadf8\uad00\ub9ac
+comCmm.left.180=\uac8c\uc2dc\ud310\uad00\ub9ac
+comCmm.left.190=\uac8c\uc2dc\ud310\uc0ac\uc6a9\uc815\ubcf4
+comCmm.left.200=\ud15c\ud50c\ub9bf\uad00\ub9ac
+comCmm.left.250=\uc2a4\ud06c\ub7a9 \ubaa9\ub85d
+comCmm.left.270=\ucee4\ubba4\ub2c8\ud2f0\uad00\ub9ac
+comCmm.left.310=\ubb38\uc790\uba54\uc2dc\uc9c0
+comCmm.left.320=\ubd80\uc11c\uc77c\uc815\uad00\ub9ac
+comCmm.left.330=\uc77c\uc815\uad00\ub9ac
+comCmm.left.340=\uc77c\uc9c0\uad00\ub9ac
+comCmm.left.350=\uc804\uccb4\uc77c\uc815\uad00\ub9ac
+comCmm.left.360=\uba54\uc77c\ubc1c\uc1a1
+comCmm.left.361=\ubc1c\uc1a1\uba54\uc77c\ub0b4\uc5ed
+comCmm.left.370=\uba85\ud568\uad00\ub9ac
+comCmm.left.371=\ub0b4\uba85\ud568\ubaa9\ub85d
+comCmm.left.380=\uc8fc\uc18c\ub85d\uad00\ub9ac
+comCmm.left.390=\uac04\ubd80\uc77c\uc815\uad00\ub9ac
+comCmm.left.400=\ubd80\uc11c\uc5c5\ubb34\ud568\uad00\ub9ac
+comCmm.left.401=\ubd80\uc11c\uc5c5\ubb34\uc815\ubcf4
+comCmm.left.410=\uc8fc\uac04/\uc6d4\uac04\ubcf4\uace0\uad00\ub9ac
+comCmm.left.420=\uba54\ubaa8\ud560\uc77c\uad00\ub9ac
+comCmm.left.430=\uba54\ubaa8\ubcf4\uace0
+
+#\uc0ac\uc6a9\uc790\uc9c0\uc6d0#
+comCmm.left.450=\uae30\uc5c5\ud68c\uc6d0\uad00\ub9ac
+comCmm.left.460=\uc5c5\ubb34\uc0ac\uc6a9\uc790\uad00\ub9ac
+comCmm.left.461=\ubd80\uc11c\uad00\ub9ac
+comCmm.left.470=\uc77c\ubc18\ud68c\uc6d0\uad00\ub9ac
+comCmm.left.480=\ub9c8\uc774\ud398\uc774\uc9c0\uad00\ub9ac
+comCmm.left.490=\uc57d\uad00\uad00\ub9ac
+comCmm.left.500=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45
+comCmm.left.510=\uac1c\uc778\uc815\ubcf4\ubcf4\ud638\uc815\ucc45\ud655\uc778
+comCmm.left.520=\ub3c4\uc6c0\ub9d0
+comCmm.left.530=\uc6a9\uc5b4\uc0ac\uc804
+comCmm.left.540=FAQ\uad00\ub9ac
+comCmm.left.550=Q&A\uad00\ub9ac
+comCmm.left.551=Q&A\ub2f5\ubcc0\uad00\ub9ac
+comCmm.left.560=\ud589\uc815\uc804\ubb38\uc6a9\uc5b4\uc0ac\uc804
+comCmm.left.561=\ud589\uc815\uc804\ubb38\uc6a9\uc5b4\uc0ac\uc804\uad00\ub9ac
+comCmm.left.570=\uc628\ub77c\uc778\ub9e4\ub274\uc5bc
+comCmm.left.571=\uc0ac\uc6a9\uc790\uc628\ub77c\uc778\ub9e4\ub274\uc5bc
+comCmm.left.580=\uc0c1\ub2f4\uad00\ub9ac
+comCmm.left.581=\uc0c1\ub2f4\ub2f5\ubcc0\uad00\ub9ac
+comCmm.left.590=\uc124\ubb38\uad00\ub9ac
+comCmm.left.600=\uc124\ubb38\uc870\uc0ac
+comCmm.left.610=\uc124\ubb38\ud15c\ud50c\ub9bf\uad00\ub9ac
+comCmm.left.620=\uc751\ub2f5\uc790\uad00\ub9ac
+comCmm.left.630=\uc9c8\ubb38\uad00\ub9ac
+comCmm.left.640=\ud56d\ubaa9\uad00\ub9ac
+comCmm.left.650=\ud68c\uc758\uad00\ub9ac
+comCmm.left.660=\uc628\ub77c\uc778poll\uad00\ub9ac
+comCmm.left.661=\uc628\ub77c\uc778poll\ucc38\uc5ec
+comCmm.left.670=\ub274\uc2a4\uad00\ub9ac
+comCmm.left.680=\uc0ac\uc774\ud2b8\uad00\ub9ac
+comCmm.left.700=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uad00\ub9ac
+comCmm.left.710=\ud589\uc0ac/\uc774\ubca4\ud2b8/\ucea0\ud398\uc778
+comCmm.left.711=\uc678\ubd80\uc778\uc0ac\uc815\ubcf4
+comCmm.left.720=\ud31d\uc5c5\ucc3d\uad00\ub9ac
+comCmm.left.730=\uc815\ubcf4\uc54c\ub9bc\uc774
+comCmm.left.740=\ubc30\ub108\uad00\ub9ac
+comCmm.left.741=MYPAGE\ubc30\ub108\uad00\ub9ac
+comCmm.left.750=\ub85c\uadf8\uc778\ud654\uba74\uc774\ubbf8\uc9c0\uad00\ub9ac
+comCmm.left.760=\ucd5c\uadfc\uac80\uc0c9\uc5b4 \uc870\ud68c
+comCmm.left.770=\uba54\uc778\uc774\ubbf8\uc9c0\uad00\ub9ac
+comCmm.left.771=\uba54\uc778\uc774\ubbf8\uc9c0 \ubc18\uc601\uacb0\uacfc\ubcf4\uae30
+comCmm.left.780=\ud1b5\ud569\ub9c1\ud06c\uad00\ub9ac
+comCmm.left.790=\uc0ac\uc6a9\uc790\ubd80\uc7ac\uad00\ub9ac
+comCmm.left.800=\uc778\ud130\ub137\uc11c\ube44\uc2a4\uc548\ub0b4\ubc0f\uad00\ub9ac
+comCmm.left.810=Wiki\uae30\ub2a5
+comCmm.left.820=RSS\ud0dc\uadf8\uad00\ub9ac
+comCmm.left.822=RSS\ud0dc\uadf8\uc11c\ube44\uc2a4
+comCmm.left.830=Twitter\uc5f0\ub3d9
+comCmm.left.831=Facebook \uc5f0\ub3d9
+comCmm.left.840=\ucabd\uc9c0\uad00\ub9ac
+comCmm.left.850=\ubc1b\uc740\ucabd\uc9c0\ud568\uad00\ub9ac
+comCmm.left.860=\ubcf4\ub0b8\ucabd\uc9c0\ud568\uad00\ub9ac
+comCmm.left.870=\ud68c\uc758\uc2e4\uad00\ub9ac
+comCmm.left.871=\ud68c\uc758\uc2e4\uc608\uc57d\uad00\ub9ac
+comCmm.left.890=\uc9c1\uc6d0\uacbd\uc870\uc0ac\uad00\ub9ac
+comCmm.left.891=\uc9c1\uc6d0\uacbd\uc870\uc0ac\uc2b9\uc778\uad00\ub9ac
+comCmm.left.900=\ud734\uac00\uad00\ub9ac
+comCmm.left.901=\ud734\uac00\uc2b9\uc778\uad00\ub9ac
+comCmm.left.902=\uac1c\uc778\uc5f0\ucc28\uad00\ub9ac
+comCmm.left.910=\ub2f9\uc9c1\uad00\ub9ac
+comCmm.left.911=\ub2f9\uc9c1\uccb4\ud06c\uad00\ub9ac
+comCmm.left.920=\ud3ec\uc0c1\uad00\ub9ac
+comCmm.left.921=\ud3ec\uc0c1\uc2b9\uc778\uad00\ub9ac
+comCmm.left.930=\uae30\ub150\uc77c\uad00\ub9ac
+comCmm.left.931=\uae30\ub150\uc77c\ubaa9\ub85d(\ud655\uc778\uc6a9)
+comCmm.left.940=\ud589\uc0ac\uc2e0\uccad\uad00\ub9ac
+comCmm.left.941=\ud589\uc0ac\uc811\uc218\uad00\ub9ac
+comCmm.left.942=\ud589\uc0ac\uc811\uc218\uc2b9\uc778\uad00\ub9ac
+comCmm.left.943=\uc57d\ub3c4 \uad00\ub9ac
+comCmm.left.950=\ucd9c\ud1f4\uadfc\uad00\ub9ac
+
+#\uc2dc\uc2a4\ud15c\uad00\ub9ac#
+comCmm.left.960=\uacf5\ud1b5\ubd84\ub958\ucf54\ub4dc
+comCmm.left.970=\uacf5\ud1b5\uc0c1\uc138\ucf54\ub4dc
+comCmm.left.980=\uacf5\ud1b5\ucf54\ub4dc
+comCmm.left.1000=\uc6b0\ud3b8\ubc88\ud638\uad00\ub9ac
+comCmm.left.1010=\ud589\uc815\ucf54\ub4dc\uad00\ub9ac
+comCmm.left.1020=\uae30\uad00\ucf54\ub4dc\uc218\uc2e0
+comCmm.left.1030=\ub85c\uadf8\uad00\ub9ac
+comCmm.left.1040=\uc0ac\uc6a9\ub85c\uadf8\uad00\ub9ac
+comCmm.left.1050=\uc1a1/\uc218\uc2e0\ub85c\uadf8\uad00\ub9ac
+comCmm.left.1060=\uc2dc\uc2a4\ud15c\uc774\ub825\uad00\ub9ac
+comCmm.left.1070=\uc6f9\ub85c\uadf8\uad00\ub9ac
+comCmm.left.1080=\uc811\uc18d\ub85c\uadf8\uad00\ub9ac
+comCmm.left.1085=\uac1c\uc778\uc815\ubcf4\uc870\ud68c\ub85c\uadf8\uad00\ub9ac
+comCmm.left.1090=\uba54\ub274\ub9ac\uc2a4\ud2b8\uad00\ub9ac
+comCmm.left.1091=\uba54\ub274\uad00\ub9ac\ub9ac\uc2a4\ud2b8
+comCmm.left.1100=\uba54\ub274\uc0dd\uc131\uad00\ub9ac
+comCmm.left.1101=\uc0ac\uc774\ud2b8\ub9f5
+comCmm.left.1110=\ubc14\ub85c\uac00\uae30\uba54\ub274\uad00\ub9ac
+comCmm.left.1111=\ud504\ub85c\uadf8\ub7a8\uad00\ub9ac
+comCmm.left.1112=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\uad00\ub9ac
+comCmm.left.1113=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\ucc98\ub9ac
+comCmm.left.1114=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc774\ub825
+comCmm.left.1120=\ubc30\uce58\uc791\uc5c5\uad00\ub9ac
+comCmm.left.1130=\ubc30\uce58\uacb0\uacfc\uad00\ub9ac
+comCmm.left.1140=\uc2a4\ucf00\uc904\ucc98\ub9ac
+comCmm.left.1150=\ubc31\uc5c5\uad00\ub9ac
+comCmm.left.1151=\ubc31\uc5c5\uacb0\uacfc\uad00\ub9ac
+comCmm.left.1160=\ub124\ud2b8\uc6cc\ud06c\uad00\ub9ac
+comCmm.left.1170=\uc11c\ubc84\uc815\ubcf4\uad00\ub9ac
+comCmm.left.1171=\uc11c\ubc84(S/W)\ubaa9\ub85d
+comCmm.left.1180=\uc7a5\uc560\uc2e0\uccad\uad00\ub9ac
+comCmm.left.1190=\uc7a5\uc560\ucc98\ub9ac\uacb0\uacfc\uad00\ub9ac
+
+#\uc2dc\uc2a4\ud15c/\uc11c\ube44\uc2a4\uc5f0\uacc4#
+comCmm.left.1210=\uc2dc\uc2a4\ud15c\uc5f0\uacc4\uad00\ub9ac
+comCmm.left.1220=\uc5f0\uacc4\ud604\ud669\uad00\ub9ac
+comCmm.left.1230=\uc5f0\uacc4\uba54\uc2dc\uc9c0\uad00\ub9ac
+comCmm.left.1240=\uc5f0\uacc4\uae30\uad00\uad00\ub9ac
+
+#\ub514\uc9c0\ud138 \uc790\uc0b0 \uad00\ub9ac#
+comCmm.left.1250=\uac1c\uc778\uc9c0\uc2dd\uad00\ub9ac
+comCmm.left.1260=\uc9c0\uc2dd\ub9f5\uad00\ub9ac(\uc720\ud615)
+comCmm.left.1261=\uc9c0\uc2dd\ub9f5\uad00\ub9ac(\uc870\uc9c1)
+comCmm.left.1270=\uc9c0\uc2dd\uc804\ubb38\uac00\uad00\ub9ac
+comCmm.left.1280=\uc9c0\uc2dd\uc815\ubcf4\uad00\ub9ac
+comCmm.left.1290=\uc9c0\uc2dd\ud3c9\uac00\uad00\ub9ac
+comCmm.left.1291=\uc9c0\uc2dd\uc815\ubcf4\uc81c\uacf5
+
+#\uc694\uc18c\uae30\uc220#
+comCmm.left.1300=\uacf5\ud734\uc77c\uad00\ub9ac(\ub2ec\ub825)
+comCmm.left.2080=\uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1
+comCmm.left.2090=DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
+comCmm.left.2100=HTTP\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
+comCmm.left.2110=\ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1
+comCmm.left.2120=\ub124\ud2b8\uc6cc\ud06c\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
+comCmm.left.2130=\ud30c\uc77c\uc2dc\uc2a4\ud15c\ubaa8\ub2c8\ud130\ub9c1
+comCmm.left.2140=\ud504\ub85d\uc2dc\uc11c\ube44\uc2a4
+comCmm.left.2150=\ud30c\uc77c\ub3d9\uae30\ud654(\ub300\uc0c1\uc11c\ubc84)
+comCmm.left.2160=\ub85c\uadf8\uc778\uc138\uc158\uc815\ubcf4\uccb4\ud06c
+comCmm.left.2170=\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1-\ub300\uc0c1\ubaa9\ub85d
+comCmm.left.2180=\uc8fc\uc18c\uc815\ubcf4\uc5f0\uacc4
+comCmm.left.2200=\uc554\ud638\ud654/\ubcf5\ud638\ud654
+
+#\uc678\ubd80 \ucd94\uac00 \ucef4\ud3ec\ub10c\ud2b8#
+comCmm.left.3000=JFile \uac00\uc774\ub4dc
+comCmm.left.3010=JFile \ud30c\uc77c \uc5c5\ub85c\ub4dc
+comCmm.left.3020=JFile \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc
+comCmm.left.3100=LDAP \uc870\uc9c1\ub3c4 \ud2b8\ub9ac
+comCmm.left.3110=LDAP \uc870\uc9c1\ub3c4 \uadf8\ub798\ud504
+comCmm.left.3200=\uc6f9\uc18c\ucf13 \uba54\uc2e0\uc800
+
+#EgovUnitContent(\ub85c\uadf8\uc778 \ud6c4 \ud398\uc774\uc9c0)#
+comCmm.unitContent.1=\uacf5\ud1b5\ucef4\ud3ec\ub10c\ud2b8
+comCmm.unitContent.2=\ub2d8 \ud658\uc601\ud569\ub2c8\ub2e4.
+comCmm.unitContent.3=\ub85c\uadf8\uc544\uc6c3
+comCmm.unitContent.4=\uc2e4\ud589 \uc2dc \uc624\ub958 \uc0ac\ud56d\uc774 \uc788\uc73c\uc2dc\uba74 \ud45c\uc900\ud504\ub808\uc784\uc6cc\ud06c\uc13c\ud130\ub85c \uc5f0\ub77d\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.
+comCmm.unitContent.5=\ud654\uba74 \uc124\uba85
+comCmm.unitContent.6=\uc67c\ucabd \uba54\ub274\ub294 \uba54\ub274\uc640 \uad00\ub828\ub41c \ucef4\ud3ec\ub10c\ud2b8(\uba54\ub274\uad00\ub9ac, \uc0ac\uc774\ud2b8\ub9f5 \ub4f1)\ub4e4\uc758 \uc601\ud5a5\uc744 \ubc1b\uc9c0 \uc54a\uc73c\uba70,
+comCmm.unitContent.7=\uac01 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc27d\uac8c \ucc3e\uc544\ubcfc \uc218 \uc788\ub294 \ubc14\ub85c \uac00\uae30 \ub9c1\ud06c\ud398\uc774\uc9c0\uc785\ub2c8\ub2e4.
+comCmm.unitContent.8=\ucef4\ud3ec\ub10c\ud2b8 \uc124\uce58 \ud6c4 \uc124\uce58\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 IncludedInfo annotation\uc744 \ud1b5\ud574 \ucc3e\uc544\ub0b8 \ud6c4
+comCmm.unitContent.9=\ud654\uba74\uc5d0 \ud45c\uc2dc\ud560 \uc815\ubcf4\ub97c \ucc98\ub9ac\ud558\ub294 Controller \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4.
+comCmm.unitContent.10=\uac1c\ubc1c \uc2dc \uba54\ub274 \uad6c\uc870\uac00 \uc7a1\ud788\uae30 \uc804\uc5d0 \ubc30\ud3ec \ud30c\uc77c\ub4e4\uc5d0 \ud3ec\ud568\ub41c \uacf5\ud1b5 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc758 \ubaa9\ub85d\uc131 \ud654\uba74\uc5d0 URL\uc744 \uc81c\uacf5\ud558\uc5ec
+comCmm.unitContent.11=\uac1c\ubc1c\uc790\uac00 \ud3b8\ub9ac\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+comCmm.unitContent.12=\uc6b4\uc601 \uc2dc\uc5d0 \ubcf8 \ucee8\ud2b8\ub864\uc744 \uc0ac\uc6a9\ud558\uc5ec \uba54\ub274\ub97c \uad6c\uc131\ud558\ub294 \uacbd\uc6b0,
+comCmm.unitContent.13=\uc131\ub2a5 \ubb38\uc81c\ub97c \uc77c\uc73c\ud0a4\uac70\ub098 \uc0ac\uc6a9\uc790\ubcc4 \uba54\ub274 \uad6c\uc131\uc5d0 \uc624\ub958\ub97c \ubc1c\uc0dd\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0
+comCmm.unitContent.14=\uc2e4 \uc6b4\uc601 \uc2dc\uc5d0\ub294 \uc0ad\uc81c\ud574\uc11c \ubc30\ud3ec\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud574 \ub4dc\ub9bd\ub2c8\ub2e4.
+
+comCmm.unitContent.20=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ub9cc\ub8cc \uc548\ub0b4
+
+#EgovExpirePwd(\ube44\ubc00\ubc88\ud638\ubcc0\uacbd \uacf5\uc9c0)#
+comCmm.expirePwdContent.1=\ub85c\uadf8\uc778
+comCmm.expirePwdContent.2=\ub85c\uadf8\uc778 \uad6c\ubd84
+
+comCmm.expirePwdContent.10=\uc5c5\ubb34\uc0ac\uc6a9\uc790
+comCmm.expirePwdContent.11=\uae30\uc5c5\ud68c\uc6d0
+comCmm.expirePwdContent.12=\uc77c\ubc18\ud68c\uc6d0
+
+comCmm.expirePwdContent.21=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04\uc758 \ubcc0\uacbd\uc740 \ub2e4\uc74c \ud30c\uc77c\uc744 \ucc38\uc870\ud558\uc5ec \uc8fc\uc138\uc694.
+comCmm.expirePwdContent.22=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ub9cc\ub8cc
+comCmm.expirePwdContent.23=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04\uc774 \ub9cc\ub8cc \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+comCmm.expirePwdContent.24=\uc548\uc804\ud55c \uac1c\uc778\uc815\ubcf4 \ubcf4\ud638\ub97c \uc704\ud574 \uc9c0\uae08 \ube44\ubc00\ubc88\ud638\ub97c \ubcc0\uacbd\ud574 \uc8fc\uc138\uc694!
+comCmm.expirePwdContent.25=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ucd08\uacfc\uc77c\uc218
+comCmm.expirePwdContent.26=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04
+comCmm.expirePwdContent.27=\ube44\ubc00\ubc88\ud638 \ubcc0\uacbd\ud6c4 \uacbd\uacfc\uc77c\uc218
+comCmm.expirePwdContent.28=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ucd08\uacfc\uc77c\uc218
+comCmm.expirePwdContent.29=\uc8fc\uae30\uc801\uc73c\ub85c \ube44\ubc00\ubc88\ud638\ub97c \ubcc0\uacbd\ud574 \uc8fc\uc138\uc694.
+comCmm.expirePwdContent.30=\uc77c
+
+comCmm.expirePwdContent.50=\uc9c0\uae08 \uc989\uc2dc \ubcc0\uacbd\ud558\uae30
+comCmm.expirePwdContent.51=\ub2e4\uc74c\uc5d0 \ubcc0\uacbd\ud558\uae30
Property changes on: base3.10/src/main/resources/egovframework/message/com/cmm/message-common_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cop/com/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cop/com/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cop/com/message_en.properties (revision 7)
@@ -0,0 +1,9 @@
+comCopCom.userListPop.title=User List
+comCopCom.userListPop.pageTop.title=User List
+comCopCom.userListPop.index=Index
+comCopCom.userListPop.userId=User ID
+comCopCom.userListPop.userNm=User Name
+comCopCom.userListPop.userAdres=Address
+comCopCom.userListPop.userEmail=Email
+comCopCom.userListPop.useAt=Usage status
+comCopCom.userListPop.select=Select
Property changes on: base3.10/src/main/resources/egovframework/message/com/cop/com/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cop/com/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cop/com/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cop/com/message_ko.properties (revision 7)
@@ -0,0 +1,9 @@
+comCopCom.userListPop.title=\uc0ac\uc6a9\uc790 \ubaa9\ub85d
+comCopCom.userListPop.pageTop.title=\uc0ac\uc6a9\uc790 \ubaa9\ub85d
+comCopCom.userListPop.index=\ubc88\ud638
+comCopCom.userListPop.userId=\uc0ac\uc6a9\uc790\uc544\uc774\ub514
+comCopCom.userListPop.userNm=\uc0ac\uc6a9\uc790\uba85
+comCopCom.userListPop.userAdres=\uc8fc\uc18c
+comCopCom.userListPop.userEmail=\uc774\uba54\uc77c
+comCopCom.userListPop.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+comCopCom.userListPop.select=\uc120\ud0dd
Property changes on: base3.10/src/main/resources/egovframework/message/com/cop/com/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cop/blog/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cop/blog/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cop/blog/message_en.properties (revision 7)
@@ -0,0 +1,60 @@
+# Blog Main List
+comCopBlog.articleBlogList.regCategory=Category Registration
+comCopBlog.articleBlogList.setListNumbers=Set Number of Posts
+comCopBlog.articleBlogList.listNumber5=5 lines
+comCopBlog.articleBlogList.listNumber10=10 lines
+comCopBlog.articleBlogList.listNumber15=15 lines
+comCopBlog.articleBlogList.listNumber20=20 lines
+comCopBlog.articleBlogList.listNumber30=30 lines
+comCopBlog.articleBlogList.validate.noResult=No posts! \\nPlease register your post.
+comCopBlog.articleBlogList.validate.limitSize=Comments can be up to 500bytes.
+comCopBlog.articleBlogList.validate.noContent=The text does not exist!
+comCopBlog.articleBlogList.validate.occurError=An error has occurred.
+comCopBlog.articleBlogList.validate.noBoard=There are no registered boards.\\nPlease create a board through category registration.
+
+#\uac8c\uc2dc\ud310\uc18d\uc131\uad00\ub9ac BBS Master#
+comCopBlog.blogMasterVO.title=Blog
+
+comCopBlog.blogMasterVO.list.blogNm=Blog Name
+comCopBlog.blogMasterVO.list.useAt=Usage Status
+
+comCopBlog.blogMasterVO.detail.blogNm=Blog Name
+comCopBlog.blogMasterVO.detail.blogIntrcn=About Blog
+comCopBlog.blogMasterVO.detail.useAt=Usage Status
+comCopBlog.blogMasterVO.detail.blogAdres=Blog Address
+
+comCopBlog.blogMasterVO.regist.blogNm=Blog Name
+comCopBlog.blogMasterVO.regist.blogIntrcn=About Blog
+comCopBlog.blogMasterVO.regist.useAt=Usage Status
+
+comCopBlog.blogMasterVO.updt.blogNm=Blog Name
+comCopBlog.blogMasterVO.updt.blogIntrcn=About Blog
+comCopBlog.blogMasterVO.updt.useAt=Usage Status
+
+
+
+comCopBlog.blogUserVO.title=Blog User
+
+comCopBlog.blogUserVO.emplyrId=User ID
+comCopBlog.blogUserVO.emplyrNm=User Name
+comCopBlog.blogUserVO.mberSttus=Member Status
+comCopBlog.blogUserVO.etc=Etc
+
+
+#Manage blog users#
+comCopBlog.blogUseMgrMain.title=Blog User Main
+
+comCopBlog.blogUseMgrMain.btnBoard=Personal Blog Management
+comCopBlog.blogUseMgrMain.btnUser=User Management
+
+comCopBlog.blogUseMgrMain.btnMemberWithdrawal=Member Withdrawal
+comCopBlog.blogUseMgrMain.btnMemberJoin=Member Join
+
+comCopBlog.blogUseMgrMain.titleContents=Content Area
+
+
+comCopBlog.blogUseMgrBaseTmpl.title=Blog Default Template
+comCopBlog.blogUseMgrBaseTmpl.more=More
+comCopBlog.blogUseMgrBaseTmpl.noList=There is no registered contents.
+
+comCopBlog.validate.blogUserCheck=A blog already exists with the same account.
Property changes on: base3.10/src/main/resources/egovframework/message/com/cop/blog/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cop/blog/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cop/blog/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cop/blog/message_ko.properties (revision 7)
@@ -0,0 +1,60 @@
+# \ube14\ub85c\uadf8 \uba54\uc778\ubaa9\ub85d
+comCopBlog.articleBlogList.regCategory=\uce74\ud14c\uace0\ub9ac\ub4f1\ub85d
+comCopBlog.articleBlogList.setListNumbers=\uac8c\uc2dc\ubb3c \uac2f\uc218 \uc124\uc815
+comCopBlog.articleBlogList.listNumber5=5\uc904 \ubcf4\uae30
+comCopBlog.articleBlogList.listNumber10=10\uc904 \ubcf4\uae30
+comCopBlog.articleBlogList.listNumber15=15\uc904 \ubcf4\uae30
+comCopBlog.articleBlogList.listNumber20=20\uc904 \ubcf4\uae30
+comCopBlog.articleBlogList.listNumber30=30\uc904 \ubcf4\uae30
+comCopBlog.articleBlogList.validate.noResult=\uac8c\uc2dc\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4!\\n\uac8c\uc2dc\uae00\uc744 \ub4f1\ub85d\ud574 \uc8fc\uc138\uc694.
+comCopBlog.articleBlogList.validate.limitSize=\ub313\uae00\uc740 500byte \uae4c\uc9c0 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
+comCopBlog.articleBlogList.validate.noContent=\ubcf8\ubb38 \ub0b4\uc6a9\uc774 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4!
+comCopBlog.articleBlogList.validate.occurError=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
+comCopBlog.articleBlogList.validate.noBoard=\ub4f1\ub85d\ub41c \uac8c\uc2dc\ud310\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.\\n\uce74\ud14c\uace0\ub9ac\ub4f1\ub85d\uc744 \ud1b5\ud574 \uac8c\uc2dc\ud310\uc744 \uc0dd\uc131\ud574\uc8fc\uc138\uc694.
+
+#\uac8c\uc2dc\ud310\uc18d\uc131\uad00\ub9ac BBS Master#
+comCopBlog.blogMasterVO.title=\ube14\ub85c\uadf8
+
+comCopBlog.blogMasterVO.list.blogNm=\ube14\ub85c\uadf8\uba85
+comCopBlog.blogMasterVO.list.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+
+comCopBlog.blogMasterVO.detail.blogNm=\ube14\ub85c\uadf8\uba85
+comCopBlog.blogMasterVO.detail.blogIntrcn=\ube14\ub85c\uadf8\uc18c\uac1c\ub0b4\uc6a9
+comCopBlog.blogMasterVO.detail.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+comCopBlog.blogMasterVO.detail.blogAdres=\ube14\ub85c\uadf8 \uc8fc\uc18c
+
+comCopBlog.blogMasterVO.regist.blogNm=\ube14\ub85c\uadf8\uba85
+comCopBlog.blogMasterVO.regist.blogIntrcn=\ube14\ub85c\uadf8\uc18c\uac1c\ub0b4\uc6a9
+comCopBlog.blogMasterVO.regist.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+
+comCopBlog.blogMasterVO.updt.blogNm=\ube14\ub85c\uadf8\uba85
+comCopBlog.blogMasterVO.updt.blogIntrcn=\ube14\ub85c\uadf8\uc18c\uac1c\ub0b4\uc6a9
+comCopBlog.blogMasterVO.updt.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+
+
+
+comCopBlog.blogUserVO.title=\ube14\ub85c\uadf8 \uc0ac\uc6a9\uc790
+
+comCopBlog.blogUserVO.emplyrId=\uc0ac\uc6a9\uc790ID
+comCopBlog.blogUserVO.emplyrNm=\uc0ac\uc6a9\uc790\uba85
+comCopBlog.blogUserVO.mberSttus=\ud68c\uc6d0\uc0c1\ud0dc
+comCopBlog.blogUserVO.etc=\ube44\uace0
+
+
+#\ube14\ub85c\uadf8 \uc0ac\uc6a9\uc790 \uad00\ub9ac#
+comCopBlog.blogUseMgrMain.title=\ube14\ub85c\uadf8 \uc0ac\uc6a9\uc790 \uba54\uc778
+
+comCopBlog.blogUseMgrMain.btnBoard=\uac1c\uc778\ube14\ub85c\uadf8\uad00\ub9ac
+comCopBlog.blogUseMgrMain.btnUser=\uc0ac\uc6a9\uc790\uad00\ub9ac
+
+comCopBlog.blogUseMgrMain.btnMemberWithdrawal=\ud0c8\ud1f4\uc2e0\uccad
+comCopBlog.blogUseMgrMain.btnMemberJoin=\uac00\uc785\uc2e0\uccad
+
+comCopBlog.blogUseMgrMain.titleContents=\ucee8\ud150\uce20\uc601\uc5ed
+
+
+comCopBlog.blogUseMgrBaseTmpl.title=\ube14\ub85c\uadf8\uae30\ubcf8\ud15c\ud50c\ub9bf
+comCopBlog.blogUseMgrBaseTmpl.more=\ub354\ubcf4\uae30
+comCopBlog.blogUseMgrBaseTmpl.noList=\ub4f1\ub85d \ub41c \ub0b4\uc6a9\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+comCopBlog.validate.blogUserCheck = \uc774\ubbf8 \ub3d9\uc77c\ud55c \uacc4\uc815\uc73c\ub85c \ube14\ub85c\uadf8\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.
Property changes on: base3.10/src/main/resources/egovframework/message/com/cop/blog/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_en.properties (revision 7)
@@ -0,0 +1,88 @@
+#\uac8c\uc2dc\ud310\uc18d\uc131\uad00\ub9ac BBS Master#
+comCopBbs.boardMasterVO.title=Board Master Management
+
+comCopBbs.boardMasterVO.list.bbsNm=Board Title
+comCopBbs.boardMasterVO.list.bbsIntrcn=Board Explantation
+comCopBbs.boardMasterVO.list.useAt=Available Options
+
+comCopBbs.boardMasterVO.detail.bbsNm=Board Title
+comCopBbs.boardMasterVO.detail.bbsIntrcn=Board Explanation
+comCopBbs.boardMasterVO.detail.useAt=Available Options
+comCopBbs.boardMasterVO.detail.replyPosblAt=Reply Available
+comCopBbs.boardMasterVO.detail.fileAtchPosblAt=Attach files Available
+comCopBbs.boardMasterVO.detail.atchPosblFileNumber=The Maximum Number of File Attachments
+comCopBbs.boardMasterVO.detail.bbsTyCode=Board Type
+comCopBbs.boardMasterVO.detail.bbsAdres=Board Domain
+comCopBbs.boardMasterVO.detail.option=Additional Options
+comCopBbs.boardMasterVO.detail.option1=No Option
+comCopBbs.boardMasterVO.detail.option2=Comments
+comCopBbs.boardMasterVO.detail.option3=Satisfactions
+comCopBbs.boardMasterVO.detail.option.unabledToModify=\u203b Additional options cannot be modified (first time can be set for unset existing bulletin board).
+
+comCopBbs.boardMasterVO.regist.bbsNm=Board Title
+comCopBbs.boardMasterVO.regist.bbsIntrcn=Board Explanation
+comCopBbs.boardMasterVO.regist.useAt=Available Options
+comCopBbs.boardMasterVO.regist.replyPosblAt=Reply Available
+comCopBbs.boardMasterVO.regist.fileAtchPosblAt=Attach files Available
+comCopBbs.boardMasterVO.regist.atchPosblFileNumber=The Maximum Number of File Attachments
+comCopBbs.boardMasterVO.regist.bbsTyCode=Board Type
+
+comCopBbs.boardMasterVO.updt.bbsNm=Board Title
+comCopBbs.boardMasterVO.updt.bbsIntrcn=Board Explanation
+comCopBbs.boardMasterVO.updt.useAt=Available Options
+comCopBbs.boardMasterVO.updt.replyPosblAt=Reply Available
+comCopBbs.boardMasterVO.updt.fileAtchPosblAt=Attach files Available
+comCopBbs.boardMasterVO.updt.atchPosblFileNumber=The Maximum Number of File Attachments
+comCopBbs.boardMasterVO.updt.bbsTyCode=Board Type
+
+comCopBbs.boardMasterVO.guestReply=Unable to reply in guestbook.
+comCopBbs.boardMasterVO.guestFile=Unable to upload file in guestbook.
+
+
+#BBS(Article)
+comCopBbs.articleVO.title=Article Board
+
+comCopBbs.articleVO.list.nttSj=Title
+comCopBbs.articleVO.list.nttCn=Contents
+comCopBbs.articleVO.list.inqireCo=Views
+
+comCopBbs.articleVO.detail.nttSj=Title
+comCopBbs.articleVO.detail.nttCn=Contents
+comCopBbs.articleVO.detail.inqireCo=Views
+comCopBbs.articleVO.detail.ntceDe=Notice Period
+comCopBbs.articleVO.detail.atchFile=Attach files
+
+comCopBbs.articleVO.regist.nttSj=Title
+comCopBbs.articleVO.regist.nttCn=Contents
+comCopBbs.articleVO.regist.sjBoldAt=Subject Bold
+comCopBbs.articleVO.regist.noticeAt=Notice Submit
+comCopBbs.articleVO.regist.secretAt=Privacy Mode
+comCopBbs.articleVO.regist.anonymousAt=Anonymous Mode
+comCopBbs.articleVO.regist.ntceDe=Notice Period
+comCopBbs.articleVO.regist.atchFile=Attach files
+
+comCopBbs.articleVO.updt.nttSj=Title
+comCopBbs.articleVO.updt.nttCn=Contents
+comCopBbs.articleVO.updt.sjBoldAt=Subject Bold
+comCopBbs.articleVO.updt.noticeAt=Notice Submit
+comCopBbs.articleVO.updt.secretAt=Privacy Mode
+comCopBbs.articleVO.updt.anonymousAt=Anonymous Mode
+comCopBbs.articleVO.updt.ntceDe=Notice Period
+comCopBbs.articleVO.updt.atchFile=Attach files
+comCopBbs.articleVO.updt.atchFileAdd=Add Attach files
+
+comCopBbs.articleVO.reply.nttSj=Title
+comCopBbs.articleVO.reply.nttCn=Contents
+comCopBbs.articleVO.reply.sjBoldAt=Subject Bold
+comCopBbs.articleVO.reply.noticeAt=Notice Submit
+comCopBbs.articleVO.reply.anonymousAt=Anonymous Mode
+comCopBbs.articleVO.reply.ntceDe=Notice Period
+comCopBbs.articleVO.reply.atchFile=Attach files
+
+comCopBbs.articleVO.guest.title=Guest Board
+
+comCopBbs.articleVO.secretBold=Unable to post a title in bold on privacy mode.
+comCopBbs.articleVO.secretAnonymous=Unable to be an anonymous user on privacy mode
+comCopBbs.articleVO.secretNotice=Unable to post up a notice on privacy mode.
+comCopBbs.articleVO.anonymousNotice=Unable to post up a notice by an anonyomus user.
+comCopBbs.articleVO.ntceDeError=Start date cannot be greater than End date
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_ko.properties (revision 7)
@@ -0,0 +1,88 @@
+#\uac8c\uc2dc\ud310\uc18d\uc131\uad00\ub9ac BBS Master#
+comCopBbs.boardMasterVO.title=\uac8c\uc2dc\ud310
+
+comCopBbs.boardMasterVO.list.bbsNm=\uac8c\uc2dc\ud310\uba85
+comCopBbs.boardMasterVO.list.bbsIntrcn=\uac8c\uc2dc\ud310\uc18c\uac1c\ub0b4\uc6a9
+comCopBbs.boardMasterVO.list.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+
+comCopBbs.boardMasterVO.detail.bbsNm=\uac8c\uc2dc\ud310\uba85
+comCopBbs.boardMasterVO.detail.bbsIntrcn=\uac8c\uc2dc\ud310\uc18c\uac1c\ub0b4\uc6a9
+comCopBbs.boardMasterVO.detail.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+comCopBbs.boardMasterVO.detail.replyPosblAt=\ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80
+comCopBbs.boardMasterVO.detail.fileAtchPosblAt=\ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80
+comCopBbs.boardMasterVO.detail.atchPosblFileNumber=\ucca8\ubd80\uac00\ub2a5\ud30c\uc77c\uc22b\uc790
+comCopBbs.boardMasterVO.detail.bbsTyCode=\uac8c\uc2dc\ud310 \uc720\ud615
+comCopBbs.boardMasterVO.detail.bbsAdres=\uac8c\uc2dc\ud310 \uc8fc\uc18c
+comCopBbs.boardMasterVO.detail.option=\ucd94\uac00\uc120\ud0dd\uc0ac\ud56d
+comCopBbs.boardMasterVO.detail.option1=\ubbf8\uc120\ud0dd
+comCopBbs.boardMasterVO.detail.option2=\ub313\uae00
+comCopBbs.boardMasterVO.detail.option3=\ub9cc\uc871\ub3c4\uc870\uc0ac
+comCopBbs.boardMasterVO.detail.option.unabledToModify=\u203b \ucd94\uac00 \uc120\ud0dd\uc0ac\ud56d\uc740 \uc218\uc815 \ubd88\uac00 (\ubbf8\uc124\uc815\ub41c \uae30\uc874 \uac8c\uc2dc\ud310\uc758 \uacbd\uc6b0 \ucc98\uc74c \uc124\uc815\uc740 \uac00\ub2a5\ud568)
+
+comCopBbs.boardMasterVO.regist.bbsNm=\uac8c\uc2dc\ud310\uba85
+comCopBbs.boardMasterVO.regist.bbsIntrcn=\uac8c\uc2dc\ud310\uc18c\uac1c\ub0b4\uc6a9
+comCopBbs.boardMasterVO.regist.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+comCopBbs.boardMasterVO.regist.replyPosblAt=\ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80
+comCopBbs.boardMasterVO.regist.fileAtchPosblAt=\ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80
+comCopBbs.boardMasterVO.regist.atchPosblFileNumber=\ucca8\ubd80\uac00\ub2a5\ud30c\uc77c\uc22b\uc790
+comCopBbs.boardMasterVO.regist.bbsTyCode=\uac8c\uc2dc\ud310 \uc720\ud615
+
+comCopBbs.boardMasterVO.updt.bbsNm=\uac8c\uc2dc\ud310\uba85
+comCopBbs.boardMasterVO.updt.bbsIntrcn=\uac8c\uc2dc\ud310\uc18c\uac1c\ub0b4\uc6a9
+comCopBbs.boardMasterVO.updt.useAt=\uc0ac\uc6a9\uc5ec\ubd80
+comCopBbs.boardMasterVO.updt.replyPosblAt=\ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80
+comCopBbs.boardMasterVO.updt.fileAtchPosblAt=\ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80
+comCopBbs.boardMasterVO.updt.atchPosblFileNumber=\ucca8\ubd80\uac00\ub2a5\ud30c\uc77c\uc22b\uc790
+comCopBbs.boardMasterVO.updt.bbsTyCode=\uac8c\uc2dc\ud310 \uc720\ud615
+
+comCopBbs.boardMasterVO.guestReply=\ubc29\uba85\ub85d\uc5d0 \ub2f5\uc7a5\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.
+comCopBbs.boardMasterVO.guestFile=\ubc29\uba85\ub85d\uc5d0 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+
+#\uac8c\uc2dc\ud310
+comCopBbs.articleVO.title=\uac8c\uc2dc\uae00
+
+comCopBbs.articleVO.list.nttSj=\uc81c\ubaa9
+comCopBbs.articleVO.list.nttCn=\ub0b4\uc6a9
+comCopBbs.articleVO.list.inqireCo=\uc870\ud68c\uc218
+
+comCopBbs.articleVO.detail.nttSj=\uc81c\ubaa9
+comCopBbs.articleVO.detail.nttCn=\ub0b4\uc6a9
+comCopBbs.articleVO.detail.inqireCo=\uc870\ud68c\uc218
+comCopBbs.articleVO.detail.ntceDe=\uac8c\uc2dc\uae30\uac04
+comCopBbs.articleVO.detail.atchFile=\ucca8\ubd80\ud30c\uc77c
+
+comCopBbs.articleVO.regist.nttSj=\uc81c\ubaa9
+comCopBbs.articleVO.regist.nttCn=\ub0b4\uc6a9
+comCopBbs.articleVO.regist.sjBoldAt=\uc81c\ubaa9 \uc9c4\ud558\uac8c
+comCopBbs.articleVO.regist.noticeAt=\uacf5\uc9c0\ub4f1\ub85d
+comCopBbs.articleVO.regist.secretAt=\ube44\ubc00\uae00
+comCopBbs.articleVO.regist.anonymousAt=\uc775\uba85\ub4f1\ub85d
+comCopBbs.articleVO.regist.ntceDe=\uac8c\uc2dc\uae30\uac04
+comCopBbs.articleVO.regist.atchFile=\ucca8\ubd80\ud30c\uc77c
+
+comCopBbs.articleVO.updt.nttSj=\uc81c\ubaa9
+comCopBbs.articleVO.updt.nttCn=\ub0b4\uc6a9
+comCopBbs.articleVO.updt.sjBoldAt=\uc81c\ubaa9 \uc9c4\ud558\uac8c
+comCopBbs.articleVO.updt.noticeAt=\uacf5\uc9c0\ub4f1\ub85d
+comCopBbs.articleVO.updt.secretAt=\ube44\ubc00\uae00
+comCopBbs.articleVO.updt.anonymousAt=\uc775\uba85\ub4f1\ub85d
+comCopBbs.articleVO.updt.ntceDe=\uac8c\uc2dc\uae30\uac04
+comCopBbs.articleVO.updt.atchFile=\ucca8\ubd80\ud30c\uc77c
+comCopBbs.articleVO.updt.atchFileAdd=\ucca8\ubd80\ud30c\uc77c \ucd94\uac00
+
+comCopBbs.articleVO.reply.nttSj=\uc81c\ubaa9
+comCopBbs.articleVO.reply.nttCn=\ub0b4\uc6a9
+comCopBbs.articleVO.reply.sjBoldAt=\uc81c\ubaa9 \uc9c4\ud558\uac8c
+comCopBbs.articleVO.reply.noticeAt=\uacf5\uc9c0\ub4f1\ub85d
+comCopBbs.articleVO.reply.anonymousAt=\uc775\uba85\ub4f1\ub85d
+comCopBbs.articleVO.reply.ntceDe=\uac8c\uc2dc\uae30\uac04
+comCopBbs.articleVO.reply.atchFile=\ucca8\ubd80\ud30c\uc77c
+
+comCopBbs.articleVO.guest.title=\ubc29\uba85\ub85d
+
+comCopBbs.articleVO.secretBold=\ube44\ubc00\uae00\uc740 \uc81c\ubaa9\uc744 \uc9c4\ud558\uac8c \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopBbs.articleVO.secretAnonymous=\ube44\ubc00\uae00\uc740 \uc775\uba85\uc73c\ub85c \ub4f1\ub85d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopBbs.articleVO.secretNotice=\ube44\ubc00\uae00\uc740 \uacf5\uc9c0\ub85c \ub4f1\ub85d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopBbs.articleVO.anonymousNotice=\uc775\uba85\uae00\uc740 \uacf5\uc9c0\ub85c \ub4f1\ub85d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comCopBbs.articleVO.ntceDeError=\uac8c\uc2dc\uae30\uac04 \uc885\ub8cc\uc77c\uc774 \uc2dc\uc791\uc77c\ubcf4\ub2e4 \ube60\ub985\ub2c8\ub2e4.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/cop/bbs/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/uss/umt/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/uss/umt/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/uss/umt/message_en.properties (revision 7)
@@ -0,0 +1,148 @@
+#Login Provision Management#
+comUssUmt.stplatCnfirmt.title=Provision Confirmation
+comUssUmt.stplatCnfirmt.useStplatCn=Provision Contents
+comUssUmt.stplatCnfirmt.infoProvdAgreCn=Informational Contents Agreement Contents
+
+comUssUmt.stplatCnfirmtMsg.useStplat=Agree to the Terms and Conditions of the content.
+comUssUmt.stplatCnfirmtMsg.infoProvdAgre=Agree with the use of information.
+
+comUssUmt.stplatCnfirmtValidate.disagreeStplatCnfirmt=You can not sign up if you don't agree to the Provision Contents.
+
+comUssUmt.common.lockAt=Login authorization limit status
+comUssUmt.common.lockAtBtn=Release limits for login authentication
+comUssUmt.common.lockAtConfirm=Are you sure you want to disable the login limit?
+
+#department Management#
+comUssUmt.deptManage.title=Department Management
+
+comUssUmt.deptManageList.deptId=Department ID
+comUssUmt.deptManageList.deptName=Department Name
+comUssUmt.deptManageList.deptDc=Description
+comUssUmt.deptManageSearchCondition.searchKeywordText=Department Name
+
+comUssUmt.deptManageRegist.deptId=Department ID
+comUssUmt.deptManageRegist.deptName=Department Name
+comUssUmt.deptManageRegist.deptDc=Description
+
+#Member Management#
+comUssUmt.userManage.title=Member Management
+
+comUssUmt.userManageSsearch.sbscrbSttusTitle=Selection to the Condition of Registration Status
+comUssUmt.userManageSsearch.sbscrbSttusAll=Status(All)
+comUssUmt.userManageSsearch.sbscrbSttusA=Sign Up
+comUssUmt.userManageSsearch.sbscrbSttusD=Delete
+comUssUmt.userManageSsearch.sbscrbSttusP=Approval
+comUssUmt.userManageSsearch.searchConditioTitle=Select Condition of Inquiry
+comUssUmt.userManageSsearch.searchConditionId=ID
+comUssUmt.userManageSsearch.searchConditionName=Name
+
+comUssUmt.userManageList.id=ID
+comUssUmt.userManageList.name=User Name
+comUssUmt.userManageList.email=User Email
+comUssUmt.userManageList.phone=Phone Number
+comUssUmt.userManageList.sbscrbSttus=Registration Status
+
+comUssUmt.userManageRegist.id=User ID
+comUssUmt.userManageRegist.name=Member User Name
+comUssUmt.userManageRegist.pass=Password
+comUssUmt.userManageRegist.passConfirm=Password Confirmation
+comUssUmt.userManageRegist.passHit=Password Hint
+comUssUmt.userManageRegist.passOk=Password Answer
+comUssUmt.userManageRegist.saxTypeCode=Gender Identification Code
+comUssUmt.userManageRegist.tel=Phone Number
+comUssUmt.userManageRegist.fax=Fax Number
+comUssUmt.userManageRegist.phone=Mobile Phone Number
+comUssUmt.userManageRegist.email=Email
+comUssUmt.userManageRegist.post=Postal Code
+comUssUmt.userManageRegist.addr=Address
+comUssUmt.userManageRegist.addrDetail=Detail Address
+comUssUmt.userManageRegist.groupId=Group ID
+comUssUmt.userManageRegist.status=User Status Code
+comUssUmt.userManageRegistBtn.idSearch=Search Duplicate ID
+
+comUssUmt.userManageRegistModal.title=Confirm Duplicate ID
+comUssUmt.userManageRegistModal.userIsId=Usable Id
+comUssUmt.userManageRegistModal.initStatus=Result : Check for Duplicate ID.
+
+comUssUmt.userManageRegistModal.result=Result
+comUssUmt.userManageRegistModal.useMsg=This ID can not be used.
+comUssUmt.userManageRegistModal.notUseMsg=This ID is available.
+comUssUmt.userManageRegistModal.noIdMsg=This ID can not be created.
+
+comUssUmt.userManageModifyBtn.passwordChange=Password Change
+
+comUssUmt.userManagePasswordUpdt.title=Password Change
+comUssUmt.userManagePasswordUpdt.id=User ID
+comUssUmt.userManagePasswordUpdt.oldPass=Current Password
+comUssUmt.userManagePasswordUpdt.pass=Password
+comUssUmt.userManagePasswordUpdt.passConfirm=Password Confirmation
+
+
+#User Management#
+comUssUmt.deptUserManage.title=User Management
+
+comUssUmt.deptUserManageRegist.id=User ID
+comUssUmt.deptUserManageRegist.name=User Name
+comUssUmt.deptUserManageRegist.pass=Password
+comUssUmt.deptUserManageRegist.passConfirm=Password Confirmation
+comUssUmt.deptUserManageRegist.passHit=Password Hint
+comUssUmt.deptUserManageRegist.passOk=Password Answer
+comUssUmt.deptUserManageRegist.saxTypeCode=Gender Identification Code
+comUssUmt.deptUserManageRegist.tel=Phone Number
+comUssUmt.deptUserManageRegist.fax=Fax Number
+comUssUmt.deptUserManageRegist.phone=Mobile Phone Number
+comUssUmt.deptUserManageRegist.email=Email
+comUssUmt.deptUserManageRegist.post=Postal Code
+comUssUmt.deptUserManageRegist.addr=Address
+comUssUmt.deptUserManageRegist.addrDetail=Detail Address
+comUssUmt.deptUserManageRegist.groupId=Group ID
+comUssUmt.deptUserManageRegist.status=User Status Code
+comUssUmt.deptUserManageRegistBtn.idSearch=Search Duplicate ID
+comUssUmt.deptUserManageRegist.subDn=User DN
+
+comUssUmt.deptUserManageRegist.insttCode=Organization Code
+comUssUmt.deptUserManageRegist.orgnztId=Organization ID
+comUssUmt.deptUserManageRegist.ofcps=Position
+comUssUmt.deptUserManageRegist.emplNum=Employee Number
+comUssUmt.deptUserManageRegist.brth=Birthday
+comUssUmt.deptUserManageRegist.areaNo=Home Phone Number
+comUssUmt.deptUserManageRegist.offmTelno=Office Phone Number
+comUssUmt.deptUserManageRegist.fxNum=Fax Number
+comUssUmt.deptUserManageRegist.emailAdres=Email
+comUssUmt.deptUserManageRegistBtn.Search=Search
+
+#Corporate Member Management#
+comUssUmt.entrprsUserManage.title=Corporate Member Management
+comUssUmt.entrprsUserManageList.id=Corporate Member ID
+comUssUmt.entrprsUserManageList.company=Corporate Name
+comUssUmt.entrprsUserManageList.name=User Name
+comUssUmt.entrprsUserManageList.regName=Registration Name
+comUssUmt.entrprsUserManageList.regMail=Registration Email
+comUssUmt.entrprsUserManageList.email=Email
+comUssUmt.entrprsUserManageList.phone=Phone Number
+comUssUmt.entrprsUserManageList.sbscrbSttus=Registration Status
+
+comUssUmt.entrprsUserManageRegist.id=Corporate Member ID
+comUssUmt.entrprsUserManageRegist.name=Corporate Name
+comUssUmt.entrprsUserManageRegist.pass=Password
+comUssUmt.entrprsUserManageRegist.passConfirm=Password Confirmation
+comUssUmt.entrprsUserManageRegist.passHit=Password Hint
+comUssUmt.entrprsUserManageRegist.passOk=Password Answer
+comUssUmt.entrprsUserManageRegist.tel=Corprate Phone Number
+comUssUmt.entrprsUserManageRegist.fax=Fax Number
+comUssUmt.entrprsUserManageRegist.post=Postal Code
+comUssUmt.entrprsUserManageRegist.addr=Address
+comUssUmt.entrprsUserManageRegist.addrDetail=Detail Address
+comUssUmt.entrprsUserManageRegist.groupId=Group ID
+comUssUmt.entrprsUserManageRegist.status=Corporate Member Status Code
+comUssUmt.entrprsUserManageRegist.subDn=Corporate Member DN
+
+comUssUmt.entrprsUserManageRegist.indutyCode=Business Field
+comUssUmt.entrprsUserManageRegist.entrprsSeCode=Corporate Category
+comUssUmt.entrprsUserManageRegist.cxfc=CEO Name
+comUssUmt.entrprsUserManageRegist.bizrno=Business Registration Number
+comUssUmt.entrprsUserManageRegist.jurirno=Corporate Registration Number
+
+comUssUmt.entrprsUserManageRegistBtn.idSearch=Search Duplicate ID
+comUssUmt.entrprsUserManageRegistBtn.Search=Search
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/uss/umt/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/uss/umt/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/uss/umt/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/uss/umt/message_ko.properties (revision 7)
@@ -0,0 +1,150 @@
+#\ub85c\uadf8\uc778 \uc57d\uad00\uad00\ub9ac#
+comUssUmt.stplatCnfirmt.title=\uc57d\uad00\ud655\uc778
+comUssUmt.stplatCnfirmt.useStplatCn=\uc57d\uad00\ub0b4\uc6a9
+comUssUmt.stplatCnfirmt.infoProvdAgreCn=\uc815\ubcf4\ub3d9\uc758\ub0b4\uc6a9
+
+comUssUmt.stplatCnfirmtMsg.useStplat=\uc57d\uad00\ub0b4\uc6a9\uc5d0 \ub3d9\uc758\ud569\ub2c8\ub2e4.
+comUssUmt.stplatCnfirmtMsg.infoProvdAgre=\uc815\ubcf4\uc774\uc6a9\ub0b4\uc6a9\uc5d0 \ub3d9\uc758\ud569\ub2c8\ub2e4.
+
+comUssUmt.stplatCnfirmtValidate.disagreeStplatCnfirmt=\uc57d\uad00\uc5d0 \ub3d9\uc758\ud558\uc9c0 \uc54a\uc73c\uba74 \ud68c\uc6d0\uc73c\ub85c \uac00\uc785\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+comUssUmt.common.lockAt=\ub85c\uadf8\uc778\uc778\uc99d\uc81c\ud55c\uc5ec\ubd80
+comUssUmt.common.lockAtBtn=\ub85c\uadf8\uc778\uc778\uc99d\uc81c\ud55c\ud574\uc81c
+comUssUmt.common.lockAtConfirm=\ub85c\uadf8\uc778\uc778\uc99d\uc81c\ud55c\uc744 \ud574\uc81c \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+
+#\ubd80\uc11c\uad00\ub9ac#
+comUssUmt.deptManage.title=\ubd80\uc11c\uad00\ub9ac
+
+comUssUmt.deptManageList.deptId=\ubd80\uc11c ID
+comUssUmt.deptManageList.deptName=\ubd80\uc11c \uba85
+comUssUmt.deptManageList.deptDc=\uc124\uba85
+comUssUmt.deptManageSearchCondition.searchKeywordText=\ubd80\uc11c\uba85
+
+comUssUmt.deptManageRegist.deptId=\ubd80\uc11c ID
+comUssUmt.deptManageRegist.deptName=\ubd80\uc11c \uba85
+comUssUmt.deptManageRegist.deptDc=\uc124\uba85
+
+#\uc0ac\uc6a9\uc790\uad00\ub9ac#
+comUssUmt.userManage.title=\uc77c\ubc18\ud68c\uc6d0\uad00\ub9ac
+
+comUssUmt.userManageSsearch.sbscrbSttusTitle=\uac00\uc785\uc0c1\ud0dc\uc870\uac74 \uc120\ud0dd
+comUssUmt.userManageSsearch.sbscrbSttusAll=\uc0c1\ud0dc(\uc804\uccb4)
+comUssUmt.userManageSsearch.sbscrbSttusA=\uac00\uc785\uc2e0\uccad
+comUssUmt.userManageSsearch.sbscrbSttusD=\uc0ad\uc81c
+comUssUmt.userManageSsearch.sbscrbSttusP=\uc2b9\uc778
+comUssUmt.userManageSsearch.searchConditioTitle=\uc870\ud68c\uc870\uac74 \uc120\ud0dd
+comUssUmt.userManageSsearch.searchConditionId=ID
+comUssUmt.userManageSsearch.searchConditionName=\uc774\ub984
+
+comUssUmt.userManageList.id=\uc544\uc774\ub514
+comUssUmt.userManageList.name=\uc0ac\uc6a9\uc790\uc774\ub984
+comUssUmt.userManageList.email=\uc0ac\uc6a9\uc790\uc774\uba54\uc77c
+comUssUmt.userManageList.phone=\uc804\ud654\ubc88\ud638
+comUssUmt.userManageList.sbscrbSttus=\uac00\uc785\uc0c1\ud0dc
+
+comUssUmt.userManageRegist.id=\uc77c\ubc18\ud68c\uc6d0\uc544\uc774\ub514
+comUssUmt.userManageRegist.name=\uc77c\ubc18\ud68c\uc6d0\uc774\ub984
+comUssUmt.userManageRegist.pass=\ube44\ubc00\ubc88\ud638
+comUssUmt.userManageRegist.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778
+comUssUmt.userManageRegist.passHit=\ube44\ubc00\ubc88\ud638\ud78c\ud2b8
+comUssUmt.userManageRegist.passOk=\ube44\ubc00\ubc88\ud638\uc815\ub2f5
+comUssUmt.userManageRegist.saxTypeCode=\uc131\ubcc4\uad6c\ubd84\ucf54\ub4dc
+comUssUmt.userManageRegist.tel=\uc804\ud654\ubc88\ud638
+comUssUmt.userManageRegist.fax=\ud329\uc2a4\ubc88\ud638
+comUssUmt.userManageRegist.phone=\ud578\ub4dc\ud3f0\ubc88\ud638
+comUssUmt.userManageRegist.email=\uc774\uba54\uc77c\uc8fc\uc18c
+comUssUmt.userManageRegist.post=\uc6b0\ud3b8\ubc88\ud638
+comUssUmt.userManageRegist.addr=\uc8fc\uc18c
+comUssUmt.userManageRegist.addrDetail=\uc0c1\uc138\uc8fc\uc18c
+comUssUmt.userManageRegist.groupId=\uadf8\ub8f9\uc544\uc774\ub514
+comUssUmt.userManageRegist.status=\uc77c\ubc18\ud68c\uc6d0\uc0c1\ud0dc\ucf54\ub4dc
+comUssUmt.userManageRegistBtn.idSearch=\uc911\ubcf5\uc544\uc774\ub514 \uac80\uc0c9
+
+comUssUmt.userManageRegistModal.title=\uc544\uc774\ub514 \uc911\ubcf5 \ud655\uc778
+comUssUmt.userManageRegistModal.userIsId=\uc0ac\uc6a9\ud560\uc544\uc774\ub514
+comUssUmt.userManageRegistModal.initStatus=\uacb0\uacfc : \uc911\ubcf5\ud655\uc778\uc744 \uc2e4\ud589\ud558\uc2ed\uc2dc\uc624.
+
+comUssUmt.userManageRegistModal.result=\uacb0\uacfc
+comUssUmt.userManageRegistModal.useMsg=\ub294 \uc0ac\uc6a9\ud560\uc218 \uc5c6\ub294 \uc544\uc774\ub514\uc785\ub2c8\ub2e4.
+comUssUmt.userManageRegistModal.notUseMsg=\ub294 \uc0ac\uc6a9\uac00\ub2a5\ud55c \uc544\uc774\ub514\uc785\ub2c8\ub2e4.
+comUssUmt.userManageRegistModal.noIdMsg=\uc0ac\uc6a9\uc774 \ubd88\uac00\ub2a5\ud55c \uc544\uc774\ub514 \uc785\ub2c8\ub2e4
+
+comUssUmt.userManageModifyBtn.passwordChange=\ube44\ubc00\ubc88\ud638\ubcc0\uacbd
+
+comUssUmt.userManagePasswordUpdt.title=\ube44\ubc00\ubc88\ud638\ubcc0\uacbd
+comUssUmt.userManagePasswordUpdt.id=\uc77c\ubc18\ud68c\uc6d0\uc544\uc774\ub514
+comUssUmt.userManagePasswordUpdt.oldPass=\uae30\uc874 \ube44\ubc00\ubc88\ud638
+comUssUmt.userManagePasswordUpdt.pass=\ube44\ubc00\ubc88\ud638
+comUssUmt.userManagePasswordUpdt.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778
+
+
+#\uc5c5\ubb34\ud68c\uc6d0\uad00\ub9ac#
+comUssUmt.deptUserManage.title=\uc5c5\ubb34\uc0ac\uc6a9\uc790\uad00\ub9ac
+
+comUssUmt.deptUserManageRegist.id=\uc77c\ubc18\ud68c\uc6d0\uc544\uc774\ub514
+comUssUmt.deptUserManageRegist.name=\uc77c\ubc18\ud68c\uc6d0\uc774\ub984
+comUssUmt.deptUserManageRegist.pass=\ube44\ubc00\ubc88\ud638
+comUssUmt.deptUserManageRegist.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778
+comUssUmt.deptUserManageRegist.passHit=\ube44\ubc00\ubc88\ud638\ud78c\ud2b8
+comUssUmt.deptUserManageRegist.passOk=\ube44\ubc00\ubc88\ud638\uc815\ub2f5
+comUssUmt.deptUserManageRegist.saxTypeCode=\uc131\ubcc4\uad6c\ubd84\ucf54\ub4dc
+comUssUmt.deptUserManageRegist.tel=\uc804\ud654\ubc88\ud638
+comUssUmt.deptUserManageRegist.fax=\ud329\uc2a4\ubc88\ud638
+comUssUmt.deptUserManageRegist.phone=\ud578\ub4dc\ud3f0\ubc88\ud638
+comUssUmt.deptUserManageRegist.email=\uc774\uba54\uc77c\uc8fc\uc18c
+comUssUmt.deptUserManageRegist.post=\uc6b0\ud3b8\ubc88\ud638
+comUssUmt.deptUserManageRegist.addr=\uc8fc\uc18c
+comUssUmt.deptUserManageRegist.addrDetail=\uc0c1\uc138\uc8fc\uc18c
+comUssUmt.deptUserManageRegist.groupId=\uadf8\ub8f9\uc544\uc774\ub514
+comUssUmt.deptUserManageRegist.status=\uc77c\ubc18\ud68c\uc6d0\uc0c1\ud0dc\ucf54\ub4dc
+comUssUmt.deptUserManageRegistBtn.idSearch=\uc911\ubcf5\uc544\uc774\ub514 \uac80\uc0c9
+comUssUmt.deptUserManageRegist.subDn=\uc0ac\uc6a9\uc790DN
+
+comUssUmt.deptUserManageRegist.insttCode=\uc18c\uc18d\uae30\uad00\ucf54\ub4dc
+comUssUmt.deptUserManageRegist.orgnztId=\uc870\uc9c1\uc544\uc774\ub514
+comUssUmt.deptUserManageRegist.ofcps=\uc9c1\uc704
+comUssUmt.deptUserManageRegist.emplNum=\uc0ac\ubc88
+comUssUmt.deptUserManageRegist.brth=\uc0dd\uc77c
+comUssUmt.deptUserManageRegist.areaNo=\uc9d1\uc804\ud654\ubc88\ud638
+comUssUmt.deptUserManageRegist.offmTelno=\uc0ac\ubb34\uc2e4\uc804\ud654\ubc88\ud638
+comUssUmt.deptUserManageRegist.fxNum=\ud329\uc2a4\ubc88\ud638
+comUssUmt.deptUserManageRegist.emailAdres=\uc774\uba54\uc77c\uc8fc\uc18c
+comUssUmt.deptUserManageRegistBtn.Search=\uac80\uc0c9
+
+#\uae30\uc5c5\ud68c\uc6d0\uad00\ub9ac#
+comUssUmt.entrprsUserManage.title=\uae30\uc5c5\ud68c\uc6d0\uad00\ub9ac
+comUssUmt.entrprsUserManageList.id=\uae30\uc5c5\ud68c\uc6d0\uc544\uc774\ub514
+comUssUmt.entrprsUserManageList.company=\ud68c\uc0ac\uba85
+comUssUmt.entrprsUserManageList.name=\uc0ac\uc6a9\uc790\uc774\ub984
+comUssUmt.entrprsUserManageList.regName=\uc2e0\uccad\uc790\uba85
+comUssUmt.entrprsUserManageList.regMail=\uc2e0\uccad\uc790\uc774\uba54\uc77c
+comUssUmt.entrprsUserManageList.email=\uc774\uba54\uc77c
+comUssUmt.entrprsUserManageList.phone=\uc804\ud654\ubc88\ud638
+comUssUmt.entrprsUserManageList.sbscrbSttus=\uac00\uc785\uc0c1\ud0dc
+
+comUssUmt.entrprsUserManageRegist.id=\uae30\uc5c5\ud68c\uc6d0\uc544\uc774\ub514
+comUssUmt.entrprsUserManageRegist.name=\ud68c\uc0ac\uba85
+comUssUmt.entrprsUserManageRegist.pass=\ube44\ubc00\ubc88\ud638
+comUssUmt.entrprsUserManageRegist.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778
+comUssUmt.entrprsUserManageRegist.passHit=\ube44\ubc00\ubc88\ud638\ud78c\ud2b8
+comUssUmt.entrprsUserManageRegist.passOk=\ube44\ubc00\ubc88\ud638\uc815\ub2f5
+comUssUmt.entrprsUserManageRegist.tel=\ud68c\uc0ac\uc804\ud654\ubc88\ud638
+comUssUmt.entrprsUserManageRegist.fax=\ud329\uc2a4\ubc88\ud638
+comUssUmt.entrprsUserManageRegist.post=\uc6b0\ud3b8\ubc88\ud638
+comUssUmt.entrprsUserManageRegist.addr=\uc8fc\uc18c
+comUssUmt.entrprsUserManageRegist.addrDetail=\uc0c1\uc138\uc8fc\uc18c
+comUssUmt.entrprsUserManageRegist.groupId=\uadf8\ub8f9\uc544\uc774\ub514
+comUssUmt.entrprsUserManageRegist.status=\uae30\uc5c5\ud68c\uc6d0\uc0c1\ud0dc\ucf54\ub4dc
+comUssUmt.entrprsUserManageRegist.subDn=\uc0ac\uc6a9\uc790DN
+
+comUssUmt.entrprsUserManageRegist.indutyCode=\uc5c5\uc885
+comUssUmt.entrprsUserManageRegist.entrprsSeCode=\uae30\uc5c5\uad6c\ubd84
+comUssUmt.entrprsUserManageRegist.cxfc=\ub300\ud45c\uc774\uc0ac\uc774\ub984
+comUssUmt.entrprsUserManageRegist.bizrno=\uc0ac\uc5c5\uc790\ub4f1\ub85d\ubc88\ud638
+comUssUmt.entrprsUserManageRegist.jurirno=\ubc95\uc778\ub4f1\ub85d\ubc88\ud638
+
+comUssUmt.entrprsUserManageRegistBtn.idSearch=\uc911\ubcf5\uc544\uc774\ub514 \uac80\uc0c9
+comUssUmt.entrprsUserManageRegistBtn.Search=\uac80\uc0c9
+
+
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/uss/umt/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_en.properties (revision 7)
@@ -0,0 +1,20 @@
+#User Log Management#
+comSymLogUlg.userLog.title = User Log
+
+comSymLogUlg.userLog.occrrncDe = Occurence Day
+comSymLogUlg.seachWrd.searchBgnDe = Search Begin Date
+comSymLogUlg.seachWrd.searchEndDe = Serach End Date
+comSymLogUlg.userLog.user = User
+comSymLogUlg.userLog.methodNm = Method Name
+comSymLogUlg.userLog.serviceNm = Service Name
+comSymLogUlg.userLog.create = Create
+comSymLogUlg.userLog.modify = Modify
+comSymLogUlg.userLog.view = View
+comSymLogUlg.userLog.delete = Delete
+comSymLogUlg.userLog.detail = Detail
+
+comSymLogUlg.validate.dateCheck = The start date of the search condition is later than the end date. Please check the search condition date!
+
+
+
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_ko.properties (revision 7)
@@ -0,0 +1,16 @@
+#\uc0ac\uc6a9\uc790\ub85c\uadf8\uad00\ub9ac#
+comSymLogUlg.userLog.title = \uc0ac\uc6a9\uc790 \ub85c\uadf8
+
+comSymLogUlg.userLog.occrrncDe = \ubc1c\uc0dd\uc77c\uc790
+comSymLogUlg.seachWrd.searchBgnDe = \uac80\uc0c9\uc2dc\uc791\uc77c
+comSymLogUlg.seachWrd.searchEndDe = \uac80\uc0c9\uc885\ub8cc\uc77c
+comSymLogUlg.userLog.user = \uc0ac\uc6a9\uc790
+comSymLogUlg.userLog.methodNm = \uba54\uc18c\ub4dc\uba85
+comSymLogUlg.userLog.serviceNm = \uc11c\ube44\uc2a4\uba85
+comSymLogUlg.userLog.create = \uc0dd\uc131
+comSymLogUlg.userLog.modify = \uc218\uc815
+comSymLogUlg.userLog.view = \uc870\ud68c
+comSymLogUlg.userLog.delete = \uc0ad\uc81c
+comSymLogUlg.userLog.detail = \uc0c1\uc138\ubcf4\uae30
+
+comSymLogUlg.validate.dateCheck = \uac80\uc0c9\uc870\uac74\uc758 \uc2dc\uc791\uc77c\uc790\uac00 \uc885\ub8cc\uc77c\uc790\ubcf4\ub2e4 \ub2a6\uc2b5\ub2c8\ub2e4. \uac80\uc0c9\uc870\uac74 \ub0a0\uc9dc\ub97c \ud655\uc778\ud558\uc138\uc694!
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/ulg/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_en.properties (revision 7)
@@ -0,0 +1,16 @@
+#Log Management#
+comSymLogLgm.sysLog.title = Log
+
+comSymLogLgm.sysLog.reqId = Request ID
+comSymLogLgm.seachWrd.searchBgnDe = Search Begin Date
+comSymLogLgm.seachWrd.searchEndDe = Search End Date
+comSymLogLgm.sysLog.occrrncDe = Occurence Day
+comSymLogLgm.sysLog.serviceNm = Service Name
+comSymLogLgm.sysLog.methodNm = Method Name
+comSymLogLgm.sysLog.processSeCode = Processing Classification
+comSymLogLgm.sysLog.processTime = Processing Time
+comSymLogLgm.sysLog.rqesterId = Requester
+comSymLogLgm.sysLog.rqesterIp = Requester IP
+comSymLogLgm.sysLog.detail = Detail
+
+comSymLogLgm.validate.dateCheck = The start date of the search condition is later than the end date. Please check the search condition date!
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_ko.properties (revision 7)
@@ -0,0 +1,16 @@
+#\ub85c\uadf8\uad00\ub9ac#
+comSymLogLgm.sysLog.title = \ub85c\uadf8
+
+comSymLogLgm.sysLog.reqId = \uc694\uccadID
+comSymLogLgm.seachWrd.searchBgnDe = \uac80\uc0c9\uc2dc\uc791\uc77c
+comSymLogLgm.seachWrd.searchEndDe = \uac80\uc0c9\uc885\ub8cc\uc77c
+comSymLogLgm.sysLog.occrrncDe = \ubc1c\uc0dd\uc77c\uc790
+comSymLogLgm.sysLog.serviceNm = \uc11c\ube44\uc2a4\uba85
+comSymLogLgm.sysLog.methodNm = \uba54\uc18c\ub4dc\uba85
+comSymLogLgm.sysLog.processSeCode = \ucc98\ub9ac\uad6c\ubd84
+comSymLogLgm.sysLog.processTime = \ucc98\ub9ac\uc2dc\uac04
+comSymLogLgm.sysLog.rqesterId = \uc694\uccad\uc790
+comSymLogLgm.sysLog.rqesterIp = \uc694\uccad\uc790IP
+comSymLogLgm.sysLog.detail = \uc0c1\uc138\ubcf4\uae30
+
+comSymLogLgm.validate.dateCheck = \uac80\uc0c9\uc870\uac74\uc758 \uc2dc\uc791\uc77c\uc790\uac00 \uc885\ub8cc\uc77c\uc790\ubcf4\ub2e4 \ub2a6\uc2b5\ub2c8\ub2e4. \uac80\uc0c9\uc870\uac74 \ub0a0\uc9dc\ub97c \ud655\uc778\ud558\uc138\uc694!
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/lgm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_en.properties (revision 7)
@@ -0,0 +1,13 @@
+#Web Log Management#
+comSymLogWlg.webLog.title = Web Log
+
+comSymLogWlg.webLog.requestId = Request ID
+comSymLogWlg.webLog.occrrncDe = Occurence Day
+comSymLogWlg.seachWrd.searchBgnDe = Search Begin Date
+comSymLogWlg.seachWrd.searchEndDe = Serach End Date
+comSymLogWlg.webLog.url = URL
+comSymLogWlg.webLog.requester = Requester
+comSymLogWlg.webLog.requesterIp = Requester IP
+comSymLogWlg.webLog.detail = Detail
+
+comSymLogWlg.validate.dateCheck = The start date of the search condition is later than the end date. Please check the search condition date!
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_ko.properties (revision 7)
@@ -0,0 +1,13 @@
+#\uc6f9\ub85c\uadf8\uad00\ub9ac#
+comSymLogWlg.webLog.title = \uc6f9\ub85c\uadf8
+
+comSymLogWlg.webLog.requestId = \uc694\uccadID
+comSymLogWlg.webLog.occrrncDe = \ubc1c\uc0dd\uc77c\uc790
+comSymLogWlg.seachWrd.searchBgnDe = \uac80\uc0c9\uc2dc\uc791\uc77c
+comSymLogWlg.seachWrd.searchEndDe = \uac80\uc0c9\uc885\ub8cc\uc77c
+comSymLogWlg.webLog.url = URL
+comSymLogWlg.webLog.requester = \uc694\uccad\uc790
+comSymLogWlg.webLog.requesterIp = \uc694\uccad\uc790IP
+comSymLogWlg.webLog.detail = \uc0c1\uc138\ubcf4\uae30
+
+comSymLogWlg.validate.dateCheck = \uac80\uc0c9\uc870\uac74\uc758 \uc2dc\uc791\uc77c\uc790\uac00 \uc885\ub8cc\uc77c\uc790\ubcf4\ub2e4 \ub2a6\uc2b5\ub2c8\ub2e4. \uac80\uc0c9\uc870\uac74 \ub0a0\uc9dc\ub97c \ud655\uc778\ud558\uc138\uc694!
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/wlg/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_en.properties (revision 7)
@@ -0,0 +1,13 @@
+#Access Log Management#
+comSymLogClg.loginLog.title = Access Log
+
+comSymLogClg.loginLog.logId = Log ID
+comSymLogClg.loginLog.occrrncDe = Occurence Day
+comSymLogClg.seachWrd.searchBgnDe = Search Begin Date
+comSymLogClg.seachWrd.searchEndDe = Search End Date
+comSymLogClg.loginLog.loginMthd = Log Type
+comSymLogClg.loginLog.loginNm = User Name
+comSymLogClg.loginLog.loginIp = Connection IP
+comSymLogClg.loginLog.detail = Detail
+
+comSymLogClg.validate.dateCheck = The start date of the search condition is later than the end date. Please check the search condition date!
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_ko.properties (revision 7)
@@ -0,0 +1,13 @@
+#\uc811\uc18d\ub85c\uadf8\uad00\ub9ac#
+comSymLogClg.loginLog.title = \uc811\uc18d\ub85c\uadf8
+
+comSymLogClg.loginLog.logId = \ub85c\uadf8ID
+comSymLogClg.loginLog.occrrncDe = \ubc1c\uc0dd\uc77c\uc790
+comSymLogClg.seachWrd.searchBgnDe = \uac80\uc0c9\uc2dc\uc791\uc77c
+comSymLogClg.seachWrd.searchEndDe = \uac80\uc0c9\uc885\ub8cc\uc77c
+comSymLogClg.loginLog.loginMthd = \uc811\uc18d\ubc29\uc2dd
+comSymLogClg.loginLog.loginNm = \uc0ac\uc6a9\uc790\uba85
+comSymLogClg.loginLog.loginIp = \uc811\uc18dIP
+comSymLogClg.loginLog.detail = \uc0c1\uc138\ubcf4\uae30
+
+comSymLogClg.validate.dateCheck = \uac80\uc0c9\uc870\uac74\uc758 \uc2dc\uc791\uc77c\uc790\uac00 \uc885\ub8cc\uc77c\uc790\ubcf4\ub2e4 \ub2a6\uc2b5\ub2c8\ub2e4. \uac80\uc0c9\uc870\uac74 \ub0a0\uc9dc\ub97c \ud655\uc778\ud558\uc138\uc694!
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/log/clg/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_en.properties (revision 7)
@@ -0,0 +1,33 @@
+comSymMnuBmm.bkmkMenuManageList.title=Short Cut Menu Management
+comSymMnuBmm.bkmkMenuManageList.pageTop.title=Short Cut Menu Management
+
+comSymMnuBmm.bkmkMenuManageList.menuName=Menu Name
+comSymMnuBmm.bkmkMenuManageList.enterSearchName=Enter Search Words
+comSymMnuBmm.bkmkMenuManageList.newWindow=New Window
+comSymMnuBmm.bkmkMenuManageList.preview=Preview
+comSymMnuBmm.bkmkMenuManageList.menuURL=Menu URL
+
+
+comSymMnuBmm.bkmkMenuManageRegist.title=Register Shortcut Menu
+comSymMnuBmm.bkmkMenuManageRegist.pageTop.title=Register Shortcut Menu
+comSymMnuBmm.bkmkMenuManageRegist.menuName=Menu Name
+comSymMnuBmm.bkmkMenuManageRegist.menuURL=Menu URL
+comSymMnuBmm.bkmkMenuManageRegist.selectMenu=Select Menu
+comSymMnuBmm.bkmkMenuManageRegist.enterMenuName=Enter Menu Name
+comSymMnuBmm.bkmkMenuManageRegist.enterMenuURL=Enter Menu URL
+comSymMnuBmm.bkmkMenuManageRegist.validate.confirm.regist=Would you like to register?
+
+
+comSymMnuBmm.BookMarkMenuPopup.title=Shortcut Menu Preview
+comSymMnuBmm.BookMarkMenuPopup.pageTop.title=Manage Shortcut Menu
+comSymMnuBmm.BookMarkMenuPopup.shortCut=Shortcuts
+
+
+comSymMnuBmm.BkmkMenuPopup.title=Menu List
+comSymMnuBmm.BkmkMenuPopup.pageTop.title=Menu List
+comSymMnuBmm.bkmkMenuManageRegist.menuName=MenuName
+comSymMnuBmm.bkmkMenuManageList.enterSearchName=Enter Search Words
+comSymMnuBmm.bkmkMenuManageList.No=No.
+comSymMnuBmm.bkmkMenuManageList.menuDC=Menu DC
+comSymMnuBmm.bkmkMenuManageList.select=Select
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_ko.properties (revision 7)
@@ -0,0 +1,33 @@
+comSymMnuBmm.bkmkMenuManageList.title=\ubc14\ub85c\uac00\uae30 \uba54\ub274\uad00\ub9ac
+comSymMnuBmm.bkmkMenuManageList.pageTop.title=\ubc14\ub85c\uac00\uae30 \uba54\ub274\uad00\ub9ac
+
+comSymMnuBmm.bkmkMenuManageList.menuName=\uba54\ub274\uba85
+comSymMnuBmm.bkmkMenuManageList.enterSearchName=\uac80\uc0c9\ub2e8\uc5b4\uc785\ub825
+comSymMnuBmm.bkmkMenuManageList.newWindow=\uc0c8\ucc3d
+comSymMnuBmm.bkmkMenuManageList.preview=\ubbf8\ub9ac\ubcf4\uae30
+comSymMnuBmm.bkmkMenuManageList.menuURL=\uba54\ub274URL
+
+
+comSymMnuBmm.bkmkMenuManageRegist.title=\ubc14\ub85c\uac00\uae30\uba54\ub274 \ub4f1\ub85d
+comSymMnuBmm.bkmkMenuManageRegist.pageTop.title=\ubc14\ub85c\uac00\uae30\uba54\ub274 \ub4f1\ub85d
+comSymMnuBmm.bkmkMenuManageRegist.menuName=\uba54\ub274\uba85
+comSymMnuBmm.bkmkMenuManageRegist.menuURL=\uba54\ub274URL
+comSymMnuBmm.bkmkMenuManageRegist.selectMenu=\uba54\ub274\uc120\ud0dd
+comSymMnuBmm.bkmkMenuManageRegist.enterMenuName=\uba54\ub274\uba85\uc785\ub825
+comSymMnuBmm.bkmkMenuManageRegist.enterMenuURL=\uba54\ub274URL\uc785\ub825
+comSymMnuBmm.bkmkMenuManageRegist.validate.confirm.regist=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+
+
+comSymMnuBmm.BookMarkMenuPopup.title=\ubc14\ub85c\uac00\uae30\uba54\ub274\ubbf8\ub9ac\ubcf4\uae30
+comSymMnuBmm.BookMarkMenuPopup.pageTop.title=\ubc14\ub85c\uac00\uae30 \uba54\ub274\uad00\ub9ac
+comSymMnuBmm.BookMarkMenuPopup.shortCut=\ubc14\ub85c\uac00\uae30
+
+
+comSymMnuBmm.BkmkMenuPopup.title=\uba54\ub274\ubaa9\ub85d
+comSymMnuBmm.BkmkMenuPopup.pageTop.title=\uba54\ub274\ubaa9\ub85d
+comSymMnuBmm.bkmkMenuManageRegist.menuName=\uba54\ub274\uba85
+comSymMnuBmm.bkmkMenuManageList.enterSearchName=\uac80\uc0c9\ub2e8\uc5b4\uc785\ub825
+comSymMnuBmm.bkmkMenuManageList.No=\ubc88\ud638
+comSymMnuBmm.bkmkMenuManageList.menuDC=\uba54\ub274DC
+comSymMnuBmm.bkmkMenuManageList.select=\uc120\ud0dd
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/bmm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_en.properties (revision 7)
@@ -0,0 +1,32 @@
+comSymMnuMpm.menuCreatManage.title=Menu Creation Management
+comSymMnuMpm.menuCreatManage.pageTop.title=Menu Creation Management
+
+comSymMnuMpm.menuCreatManage.targetID=Security settings target ID
+comSymMnuMpm.menuCreatManage.authCode=Authorization code
+comSymMnuMpm.menuCreatManage.authName=Authority name
+comSymMnuMpm.menuCreatManage.authDesc=Authorization Description
+comSymMnuMpm.menuCreatManage.creationStatus=Menu Creation Status
+comSymMnuMpm.menuCreatManage.createMenu=Create Menu
+
+
+comSymMnuMpm.MenuCreat.title=Create Menu
+comSymMnuMpm.MenuCreat.pageTop.title=Create Menu
+comSymMnuMpm.MenuCreat.authCode=Authorization Code
+comSymMnuMpm.MenuCreat.createMenu=Create Menu
+comSymMnuMpm.MenuCreat.createSiteMap=Create Sitemap
+
+comSymMnuMpm.MenuCreat.validate.menuNmVal.none1=Menu list data does not exist.
+comSymMnuMpm.MenuCreat.validate.menuNmVal.none2=The menu does not exist. Please register after menu.
+
+
+comSymMnuMpm.MenuCreatSiteMap.title=Create Menu Sitemap
+comSymMnuMpm.MenuCreatSiteMap.pageTop.title=Create Menu Sitemap
+comSymMnuMpm.MenuCreatSiteMap.send=Send
+comSymMnuMpm.MenuCreatSiteMap.authCode=Authorization Code
+comSymMnuMpm.MenuCreatSiteMap.createSitemap=Create Sitemap
+comSymMnuMpm.MenuCreatSiteMap.authName=Authority Name
+
+comSymMnuMpm.MenuCreatSiteMap.validate.menuNmVal.none1=\uba54\ub274 \ubaa9\ub85d \ub370\uc774\ud0c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+comSymMnuMpm.MenuCreatSiteMap.validate.menuNmVal.none2=\uc0ac\uc774\ud2b8\ub9f5 \uc0dd\uc131 \ub370\uc774\ud0c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \\n \uba54\ub274\ub97c \uc0dd\uc131\ud558\uc2e0 \ud6c4 \uc791\uc5c5\ud558\uc138\uc694.
+
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_ko.properties (revision 7)
@@ -0,0 +1,31 @@
+comSymMnuMpm.menuCreatManage.title=\uba54\ub274\uc0dd\uc131\uad00\ub9ac
+comSymMnuMpm.menuCreatManage.pageTop.title=\uba54\ub274\uc0dd\uc131\uad00\ub9ac
+
+comSymMnuMpm.menuCreatManage.targetID=\ubcf4\uc548\uc124\uc815\ub300\uc0c1ID
+comSymMnuMpm.menuCreatManage.authCode=\uad8c\ud55c\ucf54\ub4dc
+comSymMnuMpm.menuCreatManage.authName=\uad8c\ud55c\uba85
+comSymMnuMpm.menuCreatManage.authDesc=\uad8c\ud55c \uc124\uba85
+comSymMnuMpm.menuCreatManage.creationStatus=\uba54\ub274\uc0dd\uc131\uc5ec\ubd80
+comSymMnuMpm.menuCreatManage.createMenu=\uba54\ub274\uc0dd\uc131
+
+
+comSymMnuMpm.MenuCreat.title=\uba54\ub274\uc0dd\uc131
+comSymMnuMpm.MenuCreat.pageTop.title=\uba54\ub274\uc0dd\uc131
+comSymMnuMpm.MenuCreat.authCode=\uad8c\ud55c\ucf54\ub4dc
+comSymMnuMpm.MenuCreat.createMenu=\uba54\ub274\uc0dd\uc131
+comSymMnuMpm.MenuCreat.createSiteMap=\uc0ac\uc774\ud2b8\ub9f5\uc0dd\uc131
+
+comSymMnuMpm.MenuCreat.validate.menuNmVal.none1=\uba54\ub274 \ubaa9\ub85d \ub370\uc774\ud0c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+comSymMnuMpm.MenuCreat.validate.menuNmVal.none2=\uba54\ub274\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uba54\ub274 \ub4f1\ub85d \ud6c4 \uc0ac\uc6a9\ud558\uc138\uc694.
+
+
+comSymMnuMpm.MenuCreatSiteMap.title=\uba54\ub274\uc0ac\uc774\ud2b8\ub9f5\uc0dd\uc131
+comSymMnuMpm.MenuCreatSiteMap.pageTop.title=\uba54\ub274\uc0ac\uc774\ud2b8\ub9f5\uc0dd\uc131
+comSymMnuMpm.MenuCreatSiteMap.send=\uc804\uc1a1
+comSymMnuMpm.MenuCreatSiteMap.authCode=\uad8c\ud55c\ucf54\ub4dc
+comSymMnuMpm.MenuCreatSiteMap.createSitemap=\uc0ac\uc774\ud2b8\ub9f5\uc0dd\uc131
+comSymMnuMpm.MenuCreatSiteMap.authName=\uad8c\ud55c\uba85
+
+comSymMnuMpm.MenuCreatSiteMap.validate.menuNmVal.none1=\uba54\ub274 \ubaa9\ub85d \ub370\uc774\ud0c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+comSymMnuMpm.MenuCreatSiteMap.validate.menuNmVal.none2=\uc0ac\uc774\ud2b8\ub9f5 \uc0dd\uc131 \ub370\uc774\ud0c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \\n \uba54\ub274\ub97c \uc0dd\uc131\ud558\uc2e0 \ud6c4 \uc791\uc5c5\ud558\uc138\uc694.
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mcm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_en.properties (revision 7)
@@ -0,0 +1,109 @@
+# EgovMenuManage.xml
+comSymMnuMpm.menuManage.validate.menuNo=Menu No.
+comSymMnuMpm.menuManage.validate.menuOrdr=Menu Order
+comSymMnuMpm.menuManage.validate.menuNm=Menu Name
+comSymMnuMpm.menuManage.validate.upperMenuId=Upper Menu No.
+comSymMnuMpm.menuManage.validate.progrmFileNm=Program File Name
+comSymMnuMpm.menuManage.validate.menuDc=Menu Description
+comSymMnuMpm.menuManage.validate.relateImagePath=Related Image Path
+comSymMnuMpm.menuManage.validate.relateImageNm=Related Image Name
+
+
+comSymMnuMpm.menuList.title=Menu Information Registration
+comSymMnuMpm.menuList.pageTop.title=Menu List
+
+comSymMnuMpm.menuList.menuNo=Menu No.
+comSymMnuMpm.menuList.menuOrdr=Menu Order
+comSymMnuMpm.menuList.menuNm=Menu Name
+comSymMnuMpm.menuList.upperMenuId=Upper Menu No.
+comSymMnuMpm.menuList.progrmFileNm=File Name
+comSymMnuMpm.menuList.relateImageNm=Related Image Name
+comSymMnuMpm.menuList.relateImagePath=Related Image Path
+comSymMnuMpm.menuList.menuDc=Menu Description
+
+comSymMnuMpm.menuList.newWindow=New Window
+comSymMnuMpm.menuList.mvmnMenuList=Search Menu
+comSymMnuMpm.menuList.searchFileNm=Program File Name Search
+
+comSymMnuMpm.menuList.validate.checkVal=You can only modify or delete the detail view.
+comSymMnuMpm.menuList.validate.checkVal.update=You can only modify or delete the detail view. Please reset and register.
+
+comSymMnuMpm.menuList.validate.menuNo.notNull=Menu number are required.
+comSymMnuMpm.menuList.validate.menuNo.onlyNumber=You can only enter numbers for menu numbers.
+comSymMnuMpm.menuList.validate.menuOrdr.notNull=Menu order is required..
+comSymMnuMpm.menuList.validate.menuOrdr.onlyNumber=Only numbers can be entered in menu order.
+comSymMnuMpm.menuList.validate.upperMenuId.notNull=The upper menu number is required.
+comSymMnuMpm.menuList.validate.upperMenuId.onlyNumber=Upper menu numbers can only be entered in numbers.
+comSymMnuMpm.menuList.validate.progrmFileNm.notNull=Program file name is required.
+comSymMnuMpm.menuList.validate.menuNm.notNull=Menu name is required.
+
+comSymMnuMpm.menuList.validate.chkBrowse=Menu list data does not exist.
+comSymMnuMpm.menuList.validate.chkObject=The menu does not exist. Please register after menu.
+
+
+comSymMnuMpm.menuManage.title=Menu Management List
+comSymMnuMpm.menuManage.pageTop.title=Menu Management List
+comSymMnuMpm.menuManage.menuNo=Menu No.
+comSymMnuMpm.menuManage.menuNmHn=Menu Name
+comSymMnuMpm.menuManage.progrmFileNm=Program File Name
+comSymMnuMpm.menuManage.menuDc=Menu Description
+comSymMnuMpm.menuManage.upperMenuId=Upper Menu No.
+comSymMnuMpm.menuManage.menuNm=Menu Name
+
+
+comSymMnuMpm.menuDetailSelectUpdt.title=Menu Detailed View and Edit
+comSymMnuMpm.menuDetailSelectUpdt.pageTop.title=Menu Detailed View and Edit
+comSymMnuMpm.menuDetailSelectUpdt.menuNo=Menu No.
+comSymMnuMpm.menuDetailSelectUpdt.menuOrder=Menu Order
+comSymMnuMpm.menuDetailSelectUpdt.menuNm=Menu Name
+comSymMnuMpm.menuDetailSelectUpdt.upperMenuId=Upper Menu No.
+comSymMnuMpm.menuDetailSelectUpdt.progrmFileNm=Menu Name
+comSymMnuMpm.menuDetailSelectUpdt.relateImageNm=Related Image Name
+comSymMnuMpm.menuDetailSelectUpdt.relateImagePath=Related Image Path
+comSymMnuMpm.menuDetailSelectUpdt.menuDc=Menu Description
+comSymMnuMpm.menuDetailSelectUpdt.selectMenuSearch=Select Menu Search
+comSymMnuMpm.menuDetailSelectUpdt.programFileNameSearch=Program File Name Search
+comSymMnuMpm.menuDetailSelectUpdt.newWindow=New Window
+
+
+comSymMnuMpm.menuRegist.title=Menu Information Registration
+comSymMnuMpm.menuRegist.pageTop.title=Menu Information Registration
+comSymMnuMpm.menuRegist.menuNo=Menu No.
+comSymMnuMpm.menuRegist.menuOrder=Menu Order
+comSymMnuMpm.menuRegist.menuNm=Menu Name
+comSymMnuMpm.menuRegist.upperMenuId=Upper Menu No.
+comSymMnuMpm.menuRegist.progrmFileNm=Menu Name
+comSymMnuMpm.menuRegist.relateImageNm=Related Image Name
+comSymMnuMpm.menuRegist.relateImagePath=Related Image Path
+comSymMnuMpm.menuRegist.menuDc=Menu Description
+comSymMnuMpm.menuRegist.selectMenuSearch=Select Menu Search
+comSymMnuMpm.menuRegist.programFileNameSearch=Program File Name Search
+comSymMnuMpm.menuRegist.newWindow=New Window
+
+
+comSymMnuMpm.menuBndeRegist.title=Bulk Registration of Menu
+comSymMnuMpm.menuBndeRegist.pageTop.title=Bulk Registration of Menu
+comSymMnuMpm.menuBndeRegist.menuNo=Bulk List File
+comSymMnuMpm.menuBndeRegist.validate.confirm.insert=Would you like to register the menu in bulk? \\nYou can not delete menu information, program list, program change history.
+comSymMnuMpm.menuBndeRegist.validate.confirm.delete=Do you want to delete the menu in bulk? \\nThe menu information, program list, and program change history data are all deleted.
+comSymMnuMpm.menuBndeRegist.validate.alert.checkFile=Please specify a file to upload.
+comSymMnuMpm.menuBndeRegist.validate.checkFile=The file format is incorrect. \\nYou can upload only xls, xlsx!
+
+
+comSymMnuMpm.menuMvmn.title=Move menu
+comSymMnuMpm.menuMvmn.pageTop.title=Move menu
+comSymMnuMpm.menuMvmn.menuNo=Menu Name to Move
+comSymMnuMpm.menuMvmn.validate.alert.menu=The menu does not exist. Please register after using menu!
+
+
+comSymMnuMpm.head.head=Common service test site
+comSymMnuMpm.mainView.mainViewTitle=Ministry of the Interior and Safety Common service test site
+comSymMnuMpm.mainView.selectBBSListPortlet=List of generated boards
+comSymMnuMpm.mainView.selectCommuMasterListPortlet=List of generated Community boards
+comSymMnuMpm.mainView.selectBlogListPortlet=List of generated Blogs
+comSymMnuMpm.mainView.deptSchdulManageMainList=Department schedule management
+comSymMnuMpm.mainView.indvdlSchdulManageMainList=My schedule
+comSymMnuMpm.mainView.exchangeRateInformation=Exchange Rate Information
+comSymMnuMpm.mainView.getBannerImage=Banner
+comSymMnuMpm.main_bottom.mainBottomTitle=Bottom main
+comSymMnuMpm.main_bottom.address=03171 Sejong Daero 209 (Government Seoul Government Office), Jongno-gu, Seoul / 30128 Sejong Special Self-Governing Province Government 2 Government Office 13 (Government Sejong Government Office)
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_ko.properties (revision 7)
@@ -0,0 +1,109 @@
+# EgovMenuManage.xml
+comSymMnuMpm.menuManage.validate.menuNo=\uba54\ub274\ubc88\ud638
+comSymMnuMpm.menuManage.validate.menuOrdr=\uba54\ub274\uc21c\uc11c
+comSymMnuMpm.menuManage.validate.menuNm=\uba54\ub274\uba85
+comSymMnuMpm.menuManage.validate.upperMenuId=\uba54\ub274\uc0c1\uc704\ubc88\ud638
+comSymMnuMpm.menuManage.validate.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymMnuMpm.menuManage.validate.menuDc=\uba54\ub274\uc124\uba85
+comSymMnuMpm.menuManage.validate.relateImagePath=\uad00\ub828\uc774\ubbf8\uc9c0\uacbd\ub85c
+comSymMnuMpm.menuManage.validate.relateImageNm=\uad00\ub828\uc774\ubbf8\uc9c0\uba85
+
+
+comSymMnuMpm.menuList.title=\uba54\ub274\uc815\ubcf4\ub4f1\ub85d
+comSymMnuMpm.menuList.pageTop.title=\uba54\ub274 \ubaa9\ub85d
+
+comSymMnuMpm.menuList.menuNo=\uba54\ub274No
+comSymMnuMpm.menuList.menuOrdr=\uba54\ub274\uc21c\uc11c
+comSymMnuMpm.menuList.menuNm=\uba54\ub274\uba85
+comSymMnuMpm.menuList.upperMenuId=\uc0c1\uc704\uba54\ub274No
+comSymMnuMpm.menuList.progrmFileNm=\ud30c\uc77c\uba85
+comSymMnuMpm.menuList.relateImageNm=\uad00\ub828\uc774\ubbf8\uc9c0\uba85
+comSymMnuMpm.menuList.relateImagePath=\uad00\ub828\uc774\ubbf8\uc9c0\uacbd\ub85c
+comSymMnuMpm.menuList.menuDc=\uba54\ub274\uc124\uba85
+
+comSymMnuMpm.menuList.newWindow=\uc0c8\ucc3d\uc73c\ub85c
+comSymMnuMpm.menuList.mvmnMenuList=\uba54\ub274\uc120\ud0dd \uac80\uc0c9
+comSymMnuMpm.menuList.searchFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85 \uac80\uc0c9
+
+comSymMnuMpm.menuList.validate.checkVal=\uc0c1\uc138\uc870\ud68c\uc2dc\ub294 \uc218\uc815\ud639\uc740 \uc0ad\uc81c\ub9cc \uac00\ub2a5\ud569\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.checkVal.update=\uc0c1\uc138\uc870\ud68c\uc2dc\ub294 \uc218\uc815\ud639\uc740 \uc0ad\uc81c\ub9cc \uac00\ub2a5\ud569\ub2c8\ub2e4. \ucd08\uae30\ud654 \ud558\uc2e0 \ud6c4 \ub4f1\ub85d\ud558\uc138\uc694.
+
+comSymMnuMpm.menuList.validate.menuNo.notNull=\uba54\ub274\ubc88\ud638\ub294 \ud544\uc218 \ud56d\ubaa9\uc785\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.menuNo.onlyNumber=\uba54\ub274\ubc88\ud638\ub294 \uc22b\uc790\ub9cc \uc785\ub825 \uac00\ub2a5\ud569\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.menuOrdr.notNull=\uba54\ub274\uc21c\uc11c\ub294 \ud544\uc218 \ud56d\ubaa9\uc785\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.menuOrdr.onlyNumber=\uba54\ub274\uc21c\uc11c\ub294 \uc22b\uc790\ub9cc \uc785\ub825 \uac00\ub2a5\ud569\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.upperMenuId.notNull=\uc0c1\uc704\uba54\ub274\ubc88\ud638\ub294 \ud544\uc218 \ud56d\ubaa9\uc785\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.upperMenuId.onlyNumber=\uc0c1\uc704\uba54\ub274\ubc88\ud638\ub294 \uc22b\uc790\ub9cc \uc785\ub825 \uac00\ub2a5\ud569\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.progrmFileNm.notNull=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85\uc740 \ud544\uc218 \ud56d\ubaa9\uc785\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.menuNm.notNull=\uba54\ub274\uba85\uc740 \ud544\uc218 \ud56d\ubaa9\uc785\ub2c8\ub2e4.
+
+comSymMnuMpm.menuList.validate.chkBrowse=\uba54\ub274 \ubaa9\ub85d \ub370\uc774\ud0c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+comSymMnuMpm.menuList.validate.chkObject=\uba54\ub274\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uba54\ub274 \ub4f1\ub85d \ud6c4 \uc0ac\uc6a9\ud558\uc138\uc694.
+
+
+comSymMnuMpm.menuManage.title=\uba54\ub274\uad00\ub9ac\ub9ac\uc2a4\ud2b8
+comSymMnuMpm.menuManage.pageTop.title=\uba54\ub274\uad00\ub9ac\ub9ac\uc2a4\ud2b8
+comSymMnuMpm.menuManage.menuNo=\uba54\ub274No
+comSymMnuMpm.menuManage.menuNmHn=\uba54\ub274\ud55c\uae00\uba85
+comSymMnuMpm.menuManage.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymMnuMpm.menuManage.menuDc=\uba54\ub274\uc124\uba85
+comSymMnuMpm.menuManage.upperMenuId=\uc0c1\uc704\uba54\ub274No
+comSymMnuMpm.menuManage.menuNm=\uba54\ub274\uba85
+
+
+comSymMnuMpm.menuDetailSelectUpdt.title=\uba54\ub274\uc0c1\uc138\uc870\ud68c\ubc0f \uc218\uc815
+comSymMnuMpm.menuDetailSelectUpdt.pageTop.title=\uba54\ub274\uc0c1\uc138\uc870\ud68c\ubc0f \uc218\uc815
+comSymMnuMpm.menuDetailSelectUpdt.menuNo=\uba54\ub274No
+comSymMnuMpm.menuDetailSelectUpdt.menuOrder=\uba54\ub274\uc21c\uc11c
+comSymMnuMpm.menuDetailSelectUpdt.menuNm=\uba54\ub274\uba85
+comSymMnuMpm.menuDetailSelectUpdt.upperMenuId=\uc0c1\uc704\uba54\ub274No
+comSymMnuMpm.menuDetailSelectUpdt.progrmFileNm=\ud30c\uc77c\uba85
+comSymMnuMpm.menuDetailSelectUpdt.relateImageNm=\uad00\ub828\uc774\ubbf8\uc9c0\uba85
+comSymMnuMpm.menuDetailSelectUpdt.relateImagePath=\uad00\ub828\uc774\ubbf8\uc9c0\uacbd\ub85c
+comSymMnuMpm.menuDetailSelectUpdt.menuDc=\uba54\ub274\uc124\uba85
+comSymMnuMpm.menuDetailSelectUpdt.selectMenuSearch=\uba54\ub274\uc120\ud0dd \uac80\uc0c9
+comSymMnuMpm.menuDetailSelectUpdt.programFileNameSearch=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85 \uac80\uc0c9
+comSymMnuMpm.menuDetailSelectUpdt.newWindow=\uc0c8\ucc3d\uc73c\ub85c
+
+
+comSymMnuMpm.menuRegist.title=\uba54\ub274\uc815\ubcf4\ub4f1\ub85d
+comSymMnuMpm.menuRegist.pageTop.title=\uba54\ub274\uc815\ubcf4\ub4f1\ub85d
+comSymMnuMpm.menuRegist.menuNo=\uba54\ub274No
+comSymMnuMpm.menuRegist.menuOrder=\uba54\ub274\uc21c\uc11c
+comSymMnuMpm.menuRegist.menuNm=\uba54\ub274\uba85
+comSymMnuMpm.menuRegist.upperMenuId=\uc0c1\uc704\uba54\ub274No
+comSymMnuMpm.menuRegist.progrmFileNm=\ud30c\uc77c\uba85
+comSymMnuMpm.menuRegist.relateImageNm=\uad00\ub828\uc774\ubbf8\uc9c0\uba85
+comSymMnuMpm.menuRegist.relateImagePath=\uad00\ub828\uc774\ubbf8\uc9c0\uacbd\ub85c
+comSymMnuMpm.menuRegist.menuDc=\uba54\ub274\uc124\uba85
+comSymMnuMpm.menuRegist.selectMenuSearch=\uba54\ub274\uc120\ud0dd \uac80\uc0c9
+comSymMnuMpm.menuRegist.programFileNameSearch=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85 \uac80\uc0c9
+comSymMnuMpm.menuRegist.newWindow=\uc0c8\ucc3d\uc73c\ub85c
+
+
+comSymMnuMpm.menuBndeRegist.title=\uba54\ub274\uc77c\uad04\ub4f1\ub85d
+comSymMnuMpm.menuBndeRegist.pageTop.title=\uba54\ub274\uc77c\uad04\ub4f1\ub85d
+comSymMnuMpm.menuBndeRegist.menuNo=\uc77c\uad04\ud30c\uc77c
+comSymMnuMpm.menuBndeRegist.validate.confirm.insert=\uba54\ub274\uc77c\uad04\ub4f1\ub85d\uc744 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \\n \uba54\ub274\uc815\ubcf4\uc640 \ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d, \ud504\ub85c\uadf8\ub7a8 \ubcc0\uacbd\ub0b4\uc5ed \uc874\uc7ac\uc2dc \uc0ad\uc81c \ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comSymMnuMpm.menuBndeRegist.validate.confirm.delete=\uba54\ub274\uc77c\uad04\uc0ad\uc81c\ub97c \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \\n \uba54\ub274\uc815\ubcf4\uc640 \ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d, \ud504\ub85c\uadf8\ub7a8 \ubcc0\uacbd\ub0b4\uc5ed \ub370\uc774\ud0c0 \ubaa8\ub450 \uc0ad\uc81c\ucc98\ub9ac \ub429\ub2c8\ub2e4.
+comSymMnuMpm.menuBndeRegist.validate.alert.checkFile=\uc5c5\ub85c\ub4dc \ud560 \ud30c\uc77c\uc744 \uc9c0\uc815\ud574 \uc8fc\uc138\uc694.
+comSymMnuMpm.menuBndeRegist.validate.checkFile=\ud30c\uc77c \ud615\uc2dd\uc774 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\\n xls,xlsx\ub9cc \uc5c5\ub85c\ub4dc\uac00 \uac00\ub2a5\ud569\ub2c8\ub2e4!
+
+
+comSymMnuMpm.menuMvmn.title=\uba54\ub274\uc774\ub3d9
+comSymMnuMpm.menuMvmn.pageTop.title=\uba54\ub274\uc774\ub3d9
+comSymMnuMpm.menuMvmn.menuNo=\uc774\ub3d9\ud560\uba54\ub274\uba85
+comSymMnuMpm.menuMvmn.validate.alert.menu=\uba54\ub274\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uba54\ub274 \ub4f1\ub85d \ud6c4 \uc0ac\uc6a9\ud558\uc138\uc694!
+
+
+comSymMnuMpm.head.head=\uacf5\ud1b5\uc11c\ube44\uc2a4 \ud14c\uc2a4\ud2b8 \uc0ac\uc774\ud2b8
+comSymMnuMpm.mainView.mainViewTitle=\ud589\uc815\uc548\uc804\ubd80 \uacf5\ud1b5\uc11c\ube44\uc2a4 \ud14c\uc2a4\ud2b8 \uc0ac\uc774\ud2b8
+comSymMnuMpm.mainView.selectBBSListPortlet=\uc0dd\uc131\ub41c \uac8c\uc2dc\ud310 \ubaa9\ub85d
+comSymMnuMpm.mainView.selectCommuMasterListPortlet=\uc0dd\uc131\ub41c \ucee4\ubba4\ub2c8\ud2f0 \ubaa9\ub85d
+comSymMnuMpm.mainView.selectBlogListPortlet=\uc0dd\uc131\ub41c \ube14\ub85c\uadf8 \ubaa9\ub85d
+comSymMnuMpm.mainView.deptSchdulManageMainList=\ubd80\uc11c\uc77c\uc815\uad00\ub9ac
+comSymMnuMpm.mainView.indvdlSchdulManageMainList=\ub098\uc758\uc77c\uc815\uad00\ub9ac
+comSymMnuMpm.mainView.exchangeRateInformation=\ud658\uc728\uc815\ubcf4
+comSymMnuMpm.mainView.getBannerImage=\ubc30\ub108
+comSymMnuMpm.main_bottom.mainBottomTitle=\uc544\ub798\uba54\uc778
+comSymMnuMpm.main_bottom.address=03171 \uc11c\uc6b8\ud2b9\ubcc4\uc2dc \uc885\ub85c\uad6c \uc138\uc885\ub300\ub85c 209 (\uc815\ubd80\uc11c\uc6b8\uccad\uc0ac) / 30128 \uc138\uc885\ud2b9\ubcc4\uc790\uce58\uc2dc \uc815\ubd802\uccad\uc0ac\ub85c 13 (\uc815\ubd80\uc138\uc885\uccad\uc0ac)
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/mpm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_en.properties (revision 7)
@@ -0,0 +1,4 @@
+#Site Map#
+comSymMnuStm.siteMapng.siteMap=Site Map
+comSymMnuStm.siteMapng.emptySiteMap=1100. Sitemap creation is performed after menu creation management> [menu creation] click> check selection from list> [menu creation] click> [create sitemap] click> click [create sitemap] from popup.
+comSymMnuStm.siteMapng.validate.siteMap=Please create a sitemap.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_ko.properties (revision 7)
@@ -0,0 +1,4 @@
+#\uc0ac\uc774\ud2b8\ub9f5#
+comSymMnuStm.siteMapng.siteMap=\uc0ac\uc774\ud2b8\ub9f5
+comSymMnuStm.siteMapng.emptySiteMap=1100.\uba54\ub274\uc0dd\uc131\uad00\ub9ac > [\uba54\ub274\uc0dd\uc131]\ud074\ub9ad > \ubaa9\ub85d\uc5d0\uc11c \uccb4\ud06c\uc120\ud0dd > [\uba54\ub274\uc0dd\uc131]\ud074\ub9ad > [\uc0ac\uc774\ud2b8\ub9f5\uc0dd\uc131] \ud074\ub9ad > \ud31d\uc5c5\uc5d0\uc11c [\uc0ac\uc774\ud2b8\ub9f5\uc0dd\uc131]\ud074\ub9ad \uacfc\uc815\uc744 \uac70\uccd0\uc57c \uc0ac\uc774\ud2b8\ub9f5 \uc0dd\uc131\uc774 \ub429\ub2c8\ub2e4.
+comSymMnuStm.siteMapng.validate.siteMap=\uc0ac\uc774\ud2b8\ub9f5\uc744 \uc0dd\uc131\ud574 \uc8fc\uc138\uc694.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/mnu/stm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/prm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/prm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/prm/message_en.properties (revision 7)
@@ -0,0 +1,160 @@
+comSymPrm.programListManage.title=Program List
+comSymPrm.programListManage.pageTop.title=Program List
+
+comSymPrm.programListManage.programName=Program Name
+comSymPrm.programListManage.programFileName=Program File Name
+comSymPrm.programListManage.ProgramDescription=Program Description
+
+
+comSymPrm.programListRegist.title=Register Program List
+comSymPrm.programListRegist.pageTop.title=Register Program List
+comSymPrm.programListRegist.progrmFileNm=Program File Name
+comSymPrm.programListRegist.progrmStrePath=Storage path
+comSymPrm.programListRegist.progrmKoreanNm=Program Name
+comSymPrm.programListRegist.progrmDc=Program Description
+comSymPrm.programListRegist.url=URL
+
+
+comSymPrm.programListDetailSelectUpdt.title=View / Edit Program List
+comSymPrm.programListDetailSelectUpdt.pageTop.title=View / Edit Program List
+comSymPrm.programListDetailSelectUpdt.progrmFileNm=Program File Name
+comSymPrm.programListDetailSelectUpdt.progrmStrePath=Storage path
+comSymPrm.programListDetailSelectUpdt.progrmKoreanNm=Program Name
+comSymPrm.programListDetailSelectUpdt.progrmDc=Program Description
+comSymPrm.programListDetailSelectUpdt.url=URL
+
+
+comSymPrm.programChangeRequst.title=Program Change Request
+comSymPrm.programChangeRequst.pageTop.title=Program Change Request
+comSymPrm.programChangeRequst.progrmFileNm=Program File Name
+comSymPrm.programChangeRequst.rqesterNo=Request Number
+comSymPrm.programChangeRequst.rqesterSj=Request Title
+comSymPrm.programChangeRequst.rqesterPersonId=Requester
+comSymPrm.programChangeRequst.rqesterDe=Request Date
+comSymPrm.programChangeRequst.processSttus=Processing Status
+comSymPrm.programChangeRequst.processSttusA=Applying
+comSymPrm.programChangeRequst.processSttusP=Proceeding
+comSymPrm.programChangeRequst.processSttusR=Companion
+comSymPrm.programChangeRequst.processSttusC=Completed
+
+
+comSymPrm.programChangRequstDetailSelectUpdt.title=Program Change Request
+comSymPrm.programChangRequstDetailSelectUpdt.pageTop.title=View / Modify Program Change Request Details
+comSymPrm.programChangRequstDetailSelectUpdt.title.sub1=Change Request History
+comSymPrm.programChangRequstDetailSelectUpdt.title.sub2=Change Processing History
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterNo=Request Number
+comSymPrm.programChangRequstDetailSelectUpdt.progrmFileNm=Program File Name
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterPersonId=Requester ID
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterDe=Request Date
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterSj=Request Title
+comSymPrm.programChangRequstDetailSelectUpdt.changerqesterCn=Change Request Contents
+comSymPrm.programChangRequstDetailSelectUpdt.processDe=Change Processing Date
+comSymPrm.programChangRequstDetailSelectUpdt.opetrId=Change Handler
+comSymPrm.programChangRequstDetailSelectUpdt.processSttus=Change Processing Status
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusA=Applying
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusP=Proceeding
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusR=Companion
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusC=Completed
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterProcessCn=Change Processing Contents
+
+
+comSymPrm.programChangRequstStre.title=Program Change Request Registration
+comSymPrm.programChangRequstStre.pageTop.title=Program Change Request Registration
+comSymPrm.programChangRequstStre.rqesterNo=Request Number
+comSymPrm.programChangRequstStre.progrmFileNm=Program File Name
+comSymPrm.programChangRequstStre.searchProgrmFileNm=Program File Name Search
+comSymPrm.programChangRequstStre.rqesterPersonId=Requester
+comSymPrm.programChangRequstStre.rqesterDe=Request Date
+comSymPrm.programChangRequstStre.rqesterSj=Request Title
+comSymPrm.programChangRequstStre.changerqesterCn=Change Request Contents
+
+
+comSymPrm.fileNmSearch.title=Program File Name Search
+comSymPrm.fileNmSearch.pageTop.title=Program File Name Search
+comSymPrm.fileNmSearch.progrmFileNm=Program File Name
+comSymPrm.fileNmSearch.progrmNm=Program Name
+
+
+comSymPrm.programChangeRequstProcess.title=Processing Program Change Requests
+comSymPrm.programChangeRequstProcess.pageTop.title=Processing Program Change Requests
+comSymPrm.programChangeRequstProcess.searchCondition.opt1=All
+comSymPrm.programChangeRequstProcess.searchCondition.opt2=Processing Status
+comSymPrm.programChangeRequstProcess.searchCondition.opt3=Request Date
+comSymPrm.programChangeRequstProcess.searchCondition.opt4=Requester
+comSymPrm.programChangeRequstProcess.searchKeyword.value=Search Condition Value
+comSymPrm.programChangeRequstProcess.searchKeyword.all=All Views
+comSymPrm.programChangeRequstProcess.rqesterNo=Request Number
+comSymPrm.programChangeRequstProcess.progrmNm=Program File Name
+comSymPrm.programChangeRequstProcess.processSttus=Processing Status
+comSymPrm.programChangeRequstProcess.rqesterSj=Request Title
+comSymPrm.programChangeRequstProcess.rqesterPersonId=Requester
+comSymPrm.programChangeRequstProcess.rqesterDe=Request Date
+comSymPrm.programChangeRequstProcess.processSttusA=Applying
+comSymPrm.programChangeRequstProcess.processSttusP=Proceeding
+comSymPrm.programChangeRequstProcess.processSttusR=Companion
+comSymPrm.programChangeRequstProcess.processSttusC=Completed
+
+
+comSymPrm.programChangRequstProcessDetailSelectUpdt.title=View / Modify Program Change Request Processing Details
+comSymPrm.programChangRequstProcessDetailSelectUpdt.pageTop.title=View / Modify Program Change Request Processing Details
+comSymPrm.programChangRequstProcessDetailSelectUpdt.title.sub1=Change Processing History
+comSymPrm.programChangRequstProcessDetailSelectUpdt.title.sub2=Change Request History
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processDe=Change Processing Date
+comSymPrm.programChangRequstProcessDetailSelectUpdt.opetrId=Change Handler
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttus=Change Processing Status
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterProcessCn=Change Processing Contents
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusA=Applying
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusP=Proceeding
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusR=Companion
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusC=Completed
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterNo=Request number
+comSymPrm.programChangRequstProcessDetailSelectUpdt.progrmFileNm=Program File Name
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterPersonId=Requestor ID
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterDe=Request Date
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterSj=Request Title
+comSymPrm.programChangRequstProcessDetailSelectUpdt.changerqesterCn=Change Request Contents
+
+
+comSymPrm.programChgHst.title=Program Change History
+comSymPrm.programChgHst.pageTop.title=Program Change History
+comSymPrm.programChgHst.searchKeyword=Program Name
+comSymPrm.programChgHst.progrmFileNm=Program File Name
+comSymPrm.programChgHst.processSttus=Processing Status
+comSymPrm.programChgHst.rqesterProcessCn=Processing Contents
+comSymPrm.programChgHst.rqesterPersonId=Change Requestor
+comSymPrm.programChgHst.rqesterDe=Change Request Date
+comSymPrm.programChgHst.processDe=Change Completed Date
+comSymPrm.programChgHst.processSttusA=Applying
+comSymPrm.programChgHst.processSttusP=Proceeding
+comSymPrm.programChgHst.processSttusR=Companion
+comSymPrm.programChgHst.processSttusC=Completed
+
+
+comSymPrm.programChgHstDetail.title=Program Change History Details
+comSymPrm.programChgHstDetail.pageTop.title=View Program Change History Details
+comSymPrm.programChgHstDetail.title.sub1=Change Request History
+comSymPrm.programChgHstDetail.title.sub2=Change Processing History
+comSymPrm.programChgHstDetail.rqesterNo=Request Number
+comSymPrm.programChgHstDetail.progrmFileNm=Program File Name
+comSymPrm.programChgHstDetail.rqesterPersonId=Requestor ID
+comSymPrm.programChgHstDetail.rqesterDe=Request Date
+comSymPrm.programChgHstDetail.rqesterSj=Request Title
+comSymPrm.programChgHstDetail.changerqesterCn=Change Processing Contents
+comSymPrm.programChgHstDetail.processDe=Change Processing Date
+comSymPrm.programChgHstDetail.opetrId=Change Handler
+comSymPrm.programChgHstDetail.processSttus=Change Processing Status
+comSymPrm.programChgHstDetail.rqesterProcessCn=Change Processing Contents
+comSymPrm.programChgHstDetail.processSttusA=Applying
+comSymPrm.programChgHstDetail.processSttusP=Proceeding
+comSymPrm.programChgHstDetail.processSttusR=Companion
+comSymPrm.programChgHstDetail.processSttusC=Completed
+
+
+comSymPrm.progrmManageController.processSttusA=Applying
+comSymPrm.progrmManageController.processSttusP=Proceeding
+comSymPrm.progrmManageController.processSttusR=Companion
+comSymPrm.progrmManageController.processSttusC=Completed
+comSymPrm.progrmManageController.email.Sj=Processing Program Change Requests
+comSymPrm.progrmManageController.email.emailCn=Your program change request has been processed.
+comSymPrm.progrmManageController.updateProgrmChangRequstProcess.fail=Modification failed. Change Request Handling Modifications can only be processed by the person in charge of the change.
+comSymPrm.progrmManageController.checkRqesterPersonId=Failed to delete. Only the change requester can be deleted.
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/prm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/prm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/prm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/prm/message_ko.properties (revision 7)
@@ -0,0 +1,162 @@
+comSymPrm.programListManage.title=\ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d\ub9ac\uc2a4\ud2b8
+comSymPrm.programListManage.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d\uad00\ub9ac
+
+comSymPrm.programListManage.programName=\ud504\ub85c\uadf8\ub7a8\uba85
+comSymPrm.programListManage.programFileName=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programListManage.ProgramDescription=\ud504\ub85c\uadf8\ub7a8\uc124\uba85
+
+
+comSymPrm.programListRegist.title=\ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d\ub4f1\ub85d
+comSymPrm.programListRegist.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d \ub4f1\ub85d
+comSymPrm.programListRegist.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programListRegist.progrmStrePath=\uc800\uc7a5\uacbd\ub85c
+comSymPrm.programListRegist.progrmKoreanNm=\ud55c\uae00\uba85
+comSymPrm.programListRegist.progrmDc=\ud504\ub85c\uadf8\ub7a8\uc124\uba85
+comSymPrm.programListRegist.url=URL
+
+
+comSymPrm.programListDetailSelectUpdt.title=\ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d \uc0c1\uc138\uc870\ud68c /\uc218\uc815
+comSymPrm.programListDetailSelectUpdt.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubaa9\ub85d \uc0c1\uc138\uc870\ud68c /\uc218\uc815
+comSymPrm.programListDetailSelectUpdt.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programListDetailSelectUpdt.progrmStrePath=\uc800\uc7a5\uacbd\ub85c
+comSymPrm.programListDetailSelectUpdt.progrmKoreanNm=\ud55c\uae00\uba85
+comSymPrm.programListDetailSelectUpdt.progrmDc=\ud504\ub85c\uadf8\ub7a8\uc124\uba85
+comSymPrm.programListDetailSelectUpdt.url=URL
+
+
+comSymPrm.programChangeRequst.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad
+comSymPrm.programChangeRequst.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad
+comSymPrm.programChangeRequst.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programChangeRequst.rqesterNo=\uc694\uccad\ubc88\ud638
+comSymPrm.programChangeRequst.rqesterSj=\uc694\uccad\uc81c\ubaa9
+comSymPrm.programChangeRequst.rqesterPersonId=\uc694\uccad\uc790
+comSymPrm.programChangeRequst.rqesterDe=\uc694\uccad\uc77c\uc790
+comSymPrm.programChangeRequst.processSttus=\ucc98\ub9ac\uc5ec\ubd80
+comSymPrm.programChangeRequst.processSttusA=\uc2e0\uccad\uc911
+comSymPrm.programChangeRequst.processSttusP=\uc9c4\ud589\uc911
+comSymPrm.programChangeRequst.processSttusR=\ubc18\ub824
+comSymPrm.programChangeRequst.processSttusC=\ucc98\ub9ac\uc644\ub8cc
+
+
+comSymPrm.programChangRequstDetailSelectUpdt.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad
+comSymPrm.programChangRequstDetailSelectUpdt.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad \uc0c1\uc138\uc870\ud68c /\uc218\uc815
+comSymPrm.programChangRequstDetailSelectUpdt.title.sub1=\ubcc0\uacbd\uc694\uccad\ub0b4\uc5ed
+comSymPrm.programChangRequstDetailSelectUpdt.title.sub2=\ubcc0\uacbd\ucc98\ub9ac\ub0b4\uc5ed
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterNo=\uc694\uccad\ubc88\ud638
+comSymPrm.programChangRequstDetailSelectUpdt.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterPersonId=\uc694\uccad\uc790ID
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterDe=\uc694\uccad\uc77c\uc790
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterSj=\uc694\uccad\uc81c\ubaa9
+comSymPrm.programChangRequstDetailSelectUpdt.changerqesterCn=\ubcc0\uacbd\uc694\uccad\ub0b4\uc6a9
+comSymPrm.programChangRequstDetailSelectUpdt.processDe=\ubcc0\uacbd\ucc98\ub9ac\uc77c\uc790
+comSymPrm.programChangRequstDetailSelectUpdt.opetrId=\ubcc0\uacbd\ucc98\ub9ac\uc790
+comSymPrm.programChangRequstDetailSelectUpdt.processSttus=\ubcc0\uacbd\ucc98\ub9ac\uc0c1\ud0dc
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusA=\uc2e0\uccad\uc911
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusP=\uc9c4\ud589\uc911
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusR=\ubc18\ub824
+comSymPrm.programChangRequstDetailSelectUpdt.processSttusC=\ucc98\ub9ac\uc644\ub8cc
+comSymPrm.programChangRequstDetailSelectUpdt.rqesterProcessCn=\ubcc0\uacbd\ucc98\ub9ac\ub0b4\uc6a9
+
+
+comSymPrm.programChangRequstStre.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad \ub4f1\ub85d
+comSymPrm.programChangRequstStre.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad \ub4f1\ub85d
+comSymPrm.programChangRequstStre.rqesterNo=\uc694\uccad\ubc88\ud638
+comSymPrm.programChangRequstStre.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programChangRequstStre.searchProgrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85 \uac80\uc0c9
+comSymPrm.programChangRequstStre.rqesterPersonId=\uc694\uccad\uc790
+comSymPrm.programChangRequstStre.rqesterDe=\uc694\uccad\uc77c\uc790
+comSymPrm.programChangRequstStre.rqesterSj=\uc694\uccad\uc81c\ubaa9
+comSymPrm.programChangRequstStre.changerqesterCn=\ubcc0\uacbd\uc694\uccad\ub0b4\uc6a9
+
+
+comSymPrm.fileNmSearch.title=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85 \uac80\uc0c9
+comSymPrm.fileNmSearch.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85 \uac80\uc0c9
+comSymPrm.fileNmSearch.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.fileNmSearch.progrmNm=\ud504\ub85c\uadf8\ub7a8\uba85
+
+
+comSymPrm.programChangeRequstProcess.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\ucc98\ub9ac
+comSymPrm.programChangeRequstProcess.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\ucc98\ub9ac
+comSymPrm.programChangeRequstProcess.searchCondition.opt1=\uc804\uccb4
+comSymPrm.programChangeRequstProcess.searchCondition.opt2=\ucc98\ub9ac\uc0c1\ud0dc
+comSymPrm.programChangeRequstProcess.searchCondition.opt3=\uc694\uccad\uc77c\uc790
+comSymPrm.programChangeRequstProcess.searchCondition.opt4=\uc694\uccad\uc790
+comSymPrm.programChangeRequstProcess.searchKeyword.value=\uac80\uc0c9\uc870\uac74\uac12
+comSymPrm.programChangeRequstProcess.searchKeyword.all=\uc804\uccb4\uc870\ud68c
+comSymPrm.programChangeRequstProcess.rqesterNo=\uc694\uccad\ubc88\ud638
+comSymPrm.programChangeRequstProcess.progrmNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programChangeRequstProcess.processSttus=\ucc98\ub9ac\uc0c1\ud0dc
+comSymPrm.programChangeRequstProcess.rqesterSj=\uc694\uccad\uc81c\ubaa9
+comSymPrm.programChangeRequstProcess.rqesterPersonId=\uc694\uccad\uc790
+comSymPrm.programChangeRequstProcess.rqesterDe=\uc694\uccad\uc77c\uc790
+comSymPrm.programChangeRequstProcess.processSttusA=\uc2e0\uccad\uc911
+comSymPrm.programChangeRequstProcess.processSttusP=\uc9c4\ud589\uc911
+comSymPrm.programChangeRequstProcess.processSttusR=\ubc18\ub824
+comSymPrm.programChangeRequstProcess.processSttusC=\ucc98\ub9ac\uc644\ub8cc
+
+
+comSymPrm.programChangRequstProcessDetailSelectUpdt.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\ucc98\ub9ac\uc0c1\uc138\uc870\ud68c/\uc218\uc815
+comSymPrm.programChangRequstProcessDetailSelectUpdt.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\ucc98\ub9ac\uc0c1\uc138\uc870\ud68c/\uc218\uc815
+comSymPrm.programChangRequstProcessDetailSelectUpdt.title.sub1=\ubcc0\uacbd\ucc98\ub9ac\ub0b4\uc5ed
+comSymPrm.programChangRequstProcessDetailSelectUpdt.title.sub2=\ubcc0\uacbd\uc694\uccad\ub0b4\uc5ed
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processDe=\ubcc0\uacbd\ucc98\ub9ac\uc77c\uc790
+comSymPrm.programChangRequstProcessDetailSelectUpdt.opetrId=\ubcc0\uacbd\ucc98\ub9ac\uc790
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttus=\ubcc0\uacbd\ucc98\ub9ac\uc0c1\ud0dc
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterProcessCn=\ubcc0\uacbd\ucc98\ub9ac\ub0b4\uc6a9
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusA=\uc2e0\uccad\uc911
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusP=\uc9c4\ud589\uc911
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusR=\ubc18\ub824
+comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusC=\ucc98\ub9ac\uc644\ub8cc
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterNo=\uc694\uccad\ubc88\ud638
+comSymPrm.programChangRequstProcessDetailSelectUpdt.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterPersonId=\uc694\uccad\uc790ID
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterDe=\uc694\uccad\uc77c\uc790
+comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterSj=\uc694\uccad\uc81c\ubaa9
+comSymPrm.programChangRequstProcessDetailSelectUpdt.changerqesterCn=\ubcc0\uacbd\uc694\uccad\ub0b4\uc6a9
+
+
+comSymPrm.programChgHst.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc774\ub825
+comSymPrm.programChgHst.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc774\ub825
+comSymPrm.programChgHst.searchKeyword=\ud504\ub85c\uadf8\ub7a8\uba85
+comSymPrm.programChgHst.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programChgHst.processSttus=\ucc98\ub9ac\uc0c1\ud0dc
+comSymPrm.programChgHst.rqesterProcessCn=\ucc98\ub9ac\ub0b4\uc6a9
+comSymPrm.programChgHst.rqesterPersonId=\ubcc0\uacbd\uc694\uccad\uc790
+comSymPrm.programChgHst.rqesterDe=\ubcc0\uacbd\uc694\uccad\uc77c\uc790
+comSymPrm.programChgHst.processDe=\ubcc0\uacbd\uc644\ub8cc\uc77c\uc790
+comSymPrm.programChgHst.processSttusA=\uc2e0\uccad\uc911
+comSymPrm.programChgHst.processSttusP=\uc9c4\ud589\uc911
+comSymPrm.programChgHst.processSttusR=\ubc18\ub824
+comSymPrm.programChgHst.processSttusC=\ucc98\ub9ac\uc644\ub8cc
+
+
+comSymPrm.programChgHstDetail.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc774\ub825\uc0c1\uc138
+comSymPrm.programChgHstDetail.pageTop.title=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc774\ub825\uc0c1\uc138\uc870\ud68c
+comSymPrm.programChgHstDetail.title.sub1=\ubcc0\uacbd\uc694\uccad\ub0b4\uc5ed
+comSymPrm.programChgHstDetail.title.sub2=\ubcc0\uacbd\ucc98\ub9ac\ub0b4\uc5ed
+comSymPrm.programChgHstDetail.rqesterNo=\uc694\uccad\ubc88\ud638
+comSymPrm.programChgHstDetail.progrmFileNm=\ud504\ub85c\uadf8\ub7a8\ud30c\uc77c\uba85
+comSymPrm.programChgHstDetail.rqesterPersonId=\uc694\uccad\uc790ID
+comSymPrm.programChgHstDetail.rqesterDe=\uc694\uccad\uc77c\uc790
+comSymPrm.programChgHstDetail.rqesterSj=\uc694\uccad\uc81c\ubaa9
+comSymPrm.programChgHstDetail.changerqesterCn=\ubcc0\uacbd\uc694\uccad\ub0b4\uc6a9
+comSymPrm.programChgHstDetail.processDe=\ubcc0\uacbd\ucc98\ub9ac\uc77c\uc790
+comSymPrm.programChgHstDetail.opetrId=\ubcc0\uacbd\ucc98\ub9ac\uc790
+comSymPrm.programChgHstDetail.processSttus=\ubcc0\uacbd\ucc98\ub9ac\uc0c1\ud0dc
+comSymPrm.programChgHstDetail.rqesterProcessCn=\ubcc0\uacbd\ucc98\ub9ac\ub0b4\uc6a9
+comSymPrm.programChgHstDetail.processSttusA=\uc2e0\uccad\uc911
+comSymPrm.programChgHstDetail.processSttusP=\uc9c4\ud589\uc911
+comSymPrm.programChgHstDetail.processSttusR=\ubc18\ub824
+comSymPrm.programChgHstDetail.processSttusC=\ucc98\ub9ac\uc644\ub8cc
+
+
+comSymPrm.progrmManageController.processSttusA=\uc2e0\uccad\uc911
+comSymPrm.progrmManageController.processSttusP=\uc9c4\ud589\uc911
+comSymPrm.progrmManageController.processSttusR=\ubc18\ub824
+comSymPrm.progrmManageController.processSttusC=\ucc98\ub9ac\uc644\ub8cc
+comSymPrm.progrmManageController.email.Sj=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad \ucc98\ub9ac
+comSymPrm.progrmManageController.email.emailCn=\ud504\ub85c\uadf8\ub7a8 \ubcc0\uacbd\uc694\uccad \uc0ac\ud56d\uc774 \ucc98\ub9ac \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+comSymPrm.progrmManageController.updateProgrmChangRequstProcess.fail=\uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. \ubcc0\uacbd\uc694\uccad\ucc98\ub9ac \uc218\uc815\uc740 \ubcc0\uacbd\ucc98\ub9ac\ud574\ub2f9 \ub2f4\ub2f9\uc790\ub9cc \ucc98\ub9ac\uac00\ub2a5\ud569\ub2c8\ub2e4.
+comSymPrm.progrmManageController.checkRqesterPersonId=\uc0ad\uc81c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. \ubcc0\uacbd\uc694\uccad\uc790\ub9cc \uc0ad\uc81c\uac00\ub2a5\ud569\ub2c8\ub2e4.
+
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/prm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_en.properties (revision 7)
@@ -0,0 +1,11 @@
+#\uacf5\ud1b5\ucf54\ub4dc#
+comSymCcmCca.cmmnCodeVO.title = Common Code
+
+comSymCcmCca.cmmnCodeVO.clCode = Classification Code
+comSymCcmCca.cmmnCodeVO.clCodeNm = Classification Code Name
+comSymCcmCca.cmmnCodeVO.codeId = Code ID
+comSymCcmCca.cmmnCodeVO.codeIdNm = Code ID Name
+comSymCcmCca.cmmnCodeVO.codeIdDc = Code ID Description
+comSymCcmCca.cmmnCodeVO.useAt = Available Options
+
+comSymCcmCca.validate.codeCheck = The already registered common code exists.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_ko.properties (revision 7)
@@ -0,0 +1,11 @@
+#\uacf5\ud1b5\ucf54\ub4dc#
+comSymCcmCca.cmmnCodeVO.title = \uacf5\ud1b5\ucf54\ub4dc
+
+comSymCcmCca.cmmnCodeVO.clCode = \ubd84\ub958\ucf54\ub4dc
+comSymCcmCca.cmmnCodeVO.clCodeNm = \ubd84\ub958\ucf54\ub4dc\uba85
+comSymCcmCca.cmmnCodeVO.codeId = \ucf54\ub4dcID
+comSymCcmCca.cmmnCodeVO.codeIdNm = \ucf54\ub4dcID\uba85
+comSymCcmCca.cmmnCodeVO.codeIdDc = \ucf54\ub4dcID\uc124\uba85
+comSymCcmCca.cmmnCodeVO.useAt = \uc0ac\uc6a9\uc5ec\ubd80
+
+comSymCcmCca.validate.codeCheck = \uc774\ubbf8 \ub4f1\ub85d\ub41c \uacf5\ud1b5\ucf54\ub4dc\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cca/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_en.properties (revision 7)
@@ -0,0 +1,9 @@
+#\uacf5\ud1b5\ucf54\ub4dc \ubd84\ub958#
+comSymCcmCcc.cmmnClCodeVO.title = Common Classification Code
+
+comSymCcmCcc.cmmnClCodeVO.clCode = Classification Code
+comSymCcmCcc.cmmnClCodeVO.clCodeNm = Classification Code Name
+comSymCcmCcc.cmmnClCodeVO.clCodeDc = Classification Code Description
+comSymCcmCcc.cmmnClCodeVO.useAt = Available Options
+
+comSymCcmCcc.validate.codeCheck = The already registered Classification code exists.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_ko.properties (revision 7)
@@ -0,0 +1,9 @@
+#\uacf5\ud1b5\ucf54\ub4dc \ubd84\ub958#
+comSymCcmCcc.cmmnClCodeVO.title = \uacf5\ud1b5\ubd84\ub958\ucf54\ub4dc
+
+comSymCcmCcc.cmmnClCodeVO.clCode = \ubd84\ub958\ucf54\ub4dc
+comSymCcmCcc.cmmnClCodeVO.clCodeNm = \ubd84\ub958\ucf54\ub4dc\uba85
+comSymCcmCcc.cmmnClCodeVO.clCodeDc = \ubd84\ub958\ucf54\ub4dc \uc124\uba85
+comSymCcmCcc.cmmnClCodeVO.useAt = \uc0ac\uc6a9\uc5ec\ubd80
+
+comSymCcmCcc.validate.codeCheck = \uc774\ubbf8 \ub4f1\ub85d\ub41c \uacf5\ud1b5\ubd84\ub958\ucf54\ub4dc\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/ccm/ccc/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_en.properties (revision 7)
@@ -0,0 +1,11 @@
+#\uacf5\ud1b5\uc0c1\uc138\ucf54\ub4dc#
+comSymCcmCde.cmmnDetailCodeVO.title = Common Detail Code
+
+comSymCcmCde.cmmnDetailCodeVO.codeId = Code ID
+comSymCcmCde.cmmnDetailCodeVO.codeIdNm = Code ID Name
+comSymCcmCde.cmmnDetailCodeVO.code = Detail Code
+comSymCcmCde.cmmnDetailCodeVO.codeNm = Detail Code Name
+comSymCcmCde.cmmnDetailCodeVO.codeDc = Detail Code Description
+comSymCcmCde.cmmnDetailCodeVO.useAt = Available Options
+
+comSymCcmCde.validate.codeCheck = The already registered detail code exists.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_ko.properties (revision 7)
@@ -0,0 +1,11 @@
+#\uacf5\ud1b5\uc0c1\uc138\ucf54\ub4dc#
+comSymCcmCde.cmmnDetailCodeVO.title = \uacf5\ud1b5\uc0c1\uc138\ucf54\ub4dc
+
+comSymCcmCde.cmmnDetailCodeVO.codeId = \ucf54\ub4dcID
+comSymCcmCde.cmmnDetailCodeVO.codeIdNm = \ucf54\ub4dcID\uba85
+comSymCcmCde.cmmnDetailCodeVO.code = \uc0c1\uc138\ucf54\ub4dc
+comSymCcmCde.cmmnDetailCodeVO.codeNm = \uc0c1\uc138\ucf54\ub4dc\uba85
+comSymCcmCde.cmmnDetailCodeVO.codeDc = \uc0c1\uc138\ucf54\ub4dc\uc124\uba85
+comSymCcmCde.cmmnDetailCodeVO.useAt = \uc0ac\uc6a9\uc5ec\ubd80
+
+comSymCcmCde.validate.codeCheck = \uc774\ubbf8 \ub4f1\ub85d\ub41c \uc0c1\uc138\ucf54\ub4dc\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/sym/ccm/cde/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/uat/uap/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/uat/uap/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/uat/uap/message_en.properties (revision 7)
@@ -0,0 +1,45 @@
+# EgovLoginPolicy.xml
+comUatUap.loginPolicy.validate.ipInfo=IP Information
+comUatUap.loginPolicy.validate.lmttAt=IP Restricted
+
+
+comUatUap.LoginPolicyList.title=Login Policy Management
+comUatUap.LoginPolicyList.caption=Login Policy Management
+comUatUap.LoginPolicyList.userName=User Name
+comUatUap.LoginPolicyList.userNameSearch=User Name Search
+comUatUap.LoginPolicyList.userId=User ID
+comUatUap.LoginPolicyList.ipInfo=IP Infomation
+comUatUap.LoginPolicyList.restricted=Restricted
+comUatUap.LoginPolicyList.validate.checkCount=No login policies selected.
+comUatUap.LoginPolicyList.validate.checkField=No query results found.
+comUatUap.LoginPolicyList.validate.checkIds=Please register after viewing.
+comUatUap.LoginPolicyList.validate.checkReg=You already have a sign-in policy.
+comUatUap.LoginPolicyList.validate.checkedCounter.onlyOne=Please select only one to register.
+comUatUap.LoginPolicyList.validate.checkedCounter.none=No registration target selected.
+comUatUap.LoginPolicyList.validate.delete=Are you sure you want to delete?
+
+
+comUatUap.loginPolicyUpdt.title=Login policy Modification
+comUatUap.loginPolicyUpdt.pageTop.title=Login policy Modification
+comUatUap.loginPolicyUpdt.emplyrId=User ID
+comUatUap.loginPolicyUpdt.emplyrNm=User Name
+comUatUap.loginPolicyUpdt.ipInfo=IP Information
+comUatUap.loginPolicyUpdt.lmttAt=IP Restricted
+comUatUap.loginPolicyUpdt.regDate=Registration Date
+comUatUap.loginPolicyUpdt.validate.confirm.save=Do you want to save it?
+comUatUap.loginPolicyUpdt.validate.confirm.delete=Are you sure you want to delete?
+comUatUap.loginPolicyUpdt.validate.info.exceptionIP=The exception is the IP address.
+comUatUap.loginPolicyUpdt.validate.info.invalidForm=The input format is not appropriate.
+
+
+comUatUap.loginPolicyRegist.title=Login policy Registration
+comUatUap.loginPolicyRegist.pageTop.title=Login policy Registration
+comUatUap.loginPolicyRegist.emplyrId=User ID
+comUatUap.loginPolicyRegist.emplyrNm=User Name
+comUatUap.loginPolicyRegist.ipInfo=IP Information
+comUatUap.loginPolicyRegist.lmttAt=IP Restricted
+comUatUap.loginPolicyRegist.regDate=Registration Date
+comUatUap.loginPolicyRegist.validate.confirm.save=Do you want to save it?
+comUatUap.loginPolicyRegist.validate.confirm.delete=Are you sure you want to delete?
+comUatUap.loginPolicyRegist.validate.info.exceptionIP=The exception is the IP address.
+comUatUap.loginPolicyRegist.validate.info.invalidForm=The input format is not appropriate.
Property changes on: base3.10/src/main/resources/egovframework/message/com/uat/uap/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/uat/uap/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/uat/uap/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/uat/uap/message_ko.properties (revision 7)
@@ -0,0 +1,46 @@
+# EgovLoginPolicy.xml
+comUatUap.loginPolicy.validate.ipInfo=IP\uc815\ubcf4
+comUatUap.loginPolicy.validate.lmttAt=IP\uc81c\ud55c\uc5ec\ubd80
+
+
+comUatUap.LoginPolicyList.title=\ub85c\uadf8\uc778\uc815\ucc45 \ubaa9\ub85d\uc870\ud68c
+comUatUap.LoginPolicyList.caption=\ub85c\uadf8\uc778\uc815\ucc45 \uad00\ub9ac
+comUatUap.LoginPolicyList.userName=\uc0ac\uc6a9\uc790 \uba85
+comUatUap.LoginPolicyList.userNameSearch=\uc0ac\uc6a9\uc790\uba85\uac80\uc0c9
+comUatUap.LoginPolicyList.userId=\uc0ac\uc6a9\uc790 ID
+comUatUap.LoginPolicyList.ipInfo=IP \uc815\ubcf4
+comUatUap.LoginPolicyList.restricted=\uc81c\ud55c\uc5ec\ubd80
+comUatUap.LoginPolicyList.validate.checkCount=\uc120\ud0dd\ub41c \ub85c\uadf8\uc778\uc815\ucc45\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUatUap.LoginPolicyList.validate.checkField=\uc870\ud68c\ub41c \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUatUap.LoginPolicyList.validate.checkIds=\uc870\ud68c \ud6c4 \ub4f1\ub85d\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.
+comUatUap.LoginPolicyList.validate.checkReg=\uc774\ubbf8 \ub85c\uadf8\uc778\uc815\ucc45\uc774 \ub4f1\ub85d\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
+comUatUap.LoginPolicyList.validate.checkedCounter.onlyOne=\ub4f1\ub85d\ub300\uc0c1 \ud558\ub098\ub9cc \uc120\ud0dd\ud558\uc2ed\uc2dc\uc624.
+comUatUap.LoginPolicyList.validate.checkedCounter.none=\uc120\ud0dd\ub41c \ub4f1\ub85d\ub300\uc0c1\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUatUap.LoginPolicyList.validate.delete=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+
+
+comUatUap.loginPolicyUpdt.title=\ub85c\uadf8\uc778\uc815\ucc45 \uc218\uc815
+comUatUap.loginPolicyUpdt.pageTop.title=\ub85c\uadf8\uc778\uc815\ucc45 \uc218\uc815
+comUatUap.loginPolicyUpdt.emplyrId=\uc0ac\uc6a9\uc790ID
+comUatUap.loginPolicyUpdt.emplyrNm=\uc0ac\uc6a9\uc790\uba85
+comUatUap.loginPolicyUpdt.ipInfo=IP\uc815\ubcf4
+comUatUap.loginPolicyUpdt.lmttAt=IP\uc81c\ud55c\uc5ec\ubd80
+comUatUap.loginPolicyUpdt.regDate=\ub4f1\ub85d\uc77c\uc2dc
+comUatUap.loginPolicyUpdt.validate.confirm.save=\uc800\uc7a5 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+comUatUap.loginPolicyUpdt.validate.confirm.delete=\uc0ad\uc81c \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+comUatUap.loginPolicyUpdt.validate.info.exceptionIP=\uc608\uc678 \uc544\uc774\ud53c \uc785\ub2c8\ub2e4.
+comUatUap.loginPolicyUpdt.validate.info.invalidForm=\ud615\uc2dd\uc774 \uc77c\uce58 \ud558\uc9c0\uc54a\uc2b5\ub2c8\ub2e4.
+
+
+comUatUap.loginPolicyRegist.title=\ub85c\uadf8\uc778\uc815\ucc45 \ub4f1\ub85d
+comUatUap.loginPolicyRegist.pageTop.title=\ub85c\uadf8\uc778\uc815\ucc45 \ub4f1\ub85d
+comUatUap.loginPolicyRegist.emplyrId=\uc0ac\uc6a9\uc790ID
+comUatUap.loginPolicyRegist.emplyrNm=\uc0ac\uc6a9\uc790\uba85
+comUatUap.loginPolicyRegist.ipInfo=IP\uc815\ubcf4
+comUatUap.loginPolicyRegist.lmttAt=IP\uc81c\ud55c\uc5ec\ubd80
+comUatUap.loginPolicyRegist.regDate=\ub4f1\ub85d\uc77c\uc2dc
+comUatUap.loginPolicyRegist.validate.confirm.save=\uc800\uc7a5 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+comUatUap.loginPolicyRegist.validate.confirm.delete=\uc0ad\uc81c \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+comUatUap.loginPolicyRegist.validate.info.exceptionIP=\uc608\uc678 \uc544\uc774\ud53c \uc785\ub2c8\ub2e4.
+comUatUap.loginPolicyRegist.validate.info.invalidForm=\ud615\uc2dd\uc774 \uc77c\uce58 \ud558\uc9c0\uc54a\uc2b5\ub2c8\ub2e4.
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/uat/uap/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/uat/uia/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/uat/uia/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/uat/uia/message_en.properties (revision 7)
@@ -0,0 +1,51 @@
+comUatUia.title=Log In
+
+comUatUia.validate.idCheck=Please enter your ID.
+comUatUia.validate.passCheck=Please enter your password.
+comUatUia.validate.userManagmentCheck=User management component is not installed. Please ask admin.
+comUatUia.validate.membershipCheck=Business users don't need to join membership separately.
+
+
+comUatUia.loginForm.GNR=Member
+comUatUia.loginForm.ENT=Corporate
+comUatUia.loginForm.USR=Business user
+
+comUatUia.loginForm.id=ID
+comUatUia.loginForm.pw=Password
+comUatUia.loginForm.login=Log In
+comUatUia.loginForm.regist=Join
+comUatUia.loginForm.idPwSearch=Search For ID/password
+
+comUatUia.loginForm.idSave=Stay Signed In
+comUatUia.loginForm.submit=Send
+
+comUatUia.loginForm.login.gpki=Certificate Login(Korea only)
+comUatUia.loginForm.login.normal=General Login
+comUatUia.loginForm.gpki.info=Certificate Guide
+comUatUia.loginForm.gpki.descrption=Certificate login is only available to public authorities in Korea.
+
+
+comUatUia.idPw.title=Search For ID/Password
+
+comUatUia.idPw.id=ID
+comUatUia.idPw.name=Name
+comUatUia.idPw.email=Email
+comUatUia.idPw.passwordHint=Password Hint
+comUatUia.idPw.passwordCnsr=Password Answer
+comUatUia.idPw.result=Result
+
+
+comUatUia.idPw.gnr = Member
+comUatUia.idPw.ent = Corporate
+comUatUia.idPw.usr = Business user
+
+comUatUia.idPw.searchId = Search For ID
+comUatUia.idPw.searchPassword = Search For Password
+
+comUatUia.idPw.validate.id=Please enter your ID.
+comUatUia.idPw.validate.name=Please enter your name.
+comUatUia.idPw.validate.email=Please enter your email.
+comUatUia.idPw.validate.passwordHint=Please select password hint.
+comUatUia.idPw.validate.passwordCnsr=Please input password answer.
+
+comUatUia.idPasswordResult.searchIdPwd=Find your Id and password
Property changes on: base3.10/src/main/resources/egovframework/message/com/uat/uia/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/uat/uia/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/uat/uia/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/uat/uia/message_ko.properties (revision 7)
@@ -0,0 +1,51 @@
+comUatUia.title=\ub85c\uadf8\uc778
+
+comUatUia.validate.idCheck=\uc544\uc774\ub514\ub97c \uc785\ub825\ud558\uc138\uc694.
+comUatUia.validate.passCheck=\ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud558\uc138\uc694
+comUatUia.validate.userManagmentCheck=\uc0ac\uc6a9\uc790 \uad00\ub9ac \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc124\uce58\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uad00\ub9ac\uc790\uc5d0\uac8c \ubb38\uc758\ud558\uc138\uc694.
+comUatUia.validate.membershipCheck=\uc5c5\ubb34\uc0ac\uc6a9\uc790\ub294 \ubcc4\ub3c4\uc758 \ud68c\uc6d0\uac00\uc785\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+
+comUatUia.loginForm.GNR=\uc77c\ubc18
+comUatUia.loginForm.ENT=\uae30\uc5c5
+comUatUia.loginForm.USR=\uc5c5\ubb34
+
+comUatUia.loginForm.id=\uc544\uc774\ub514
+comUatUia.loginForm.pw=\ube44\ubc00\ubc88\ud638
+comUatUia.loginForm.login=\ub85c\uadf8\uc778
+comUatUia.loginForm.regist=\ud68c\uc6d0\uac00\uc785
+comUatUia.loginForm.idPwSearch=\uc544\uc774\ub514/\ube44\ubc00\ubc88\ud638 \ucc3e\uae30
+
+comUatUia.loginForm.idSave=\uc544\uc774\ub514 \uc800\uc7a5
+comUatUia.loginForm.submit=\uc804\uc1a1
+
+comUatUia.loginForm.login.gpki=\uc778\uc99d\uc11c\ub85c\uadf8\uc778
+comUatUia.loginForm.login.normal=\uc77c\ubc18\ub85c\uadf8\uc778
+comUatUia.loginForm.gpki.info=\uc778\uc99d\uc11c\uc548\ub0b4
+comUatUia.loginForm.gpki.descrption=
+
+
+comUatUia.idPw.title=\uc544\uc774\ub514/\ube44\ubc00\ubc88\ud638 \ucc3e\uae30
+
+comUatUia.idPw.id=\uc544\uc774\ub514
+comUatUia.idPw.name=\uc774\ub984
+comUatUia.idPw.email=\uc774\uba54\uc77c\uc8fc\uc18c
+comUatUia.idPw.passwordHint=\ube44\ubc00\ubc88\ud638 \ud78c\ud2b8
+comUatUia.idPw.passwordCnsr=\ube44\ubc00\ubc88\ud638 \uc815\ub2f5
+comUatUia.idPw.result=\uacb0\uacfc
+
+
+comUatUia.idPw.gnr = \uc77c\ubc18
+comUatUia.idPw.ent = \uae30\uc5c5
+comUatUia.idPw.usr = \uc5c5\ubb34
+
+comUatUia.idPw.searchId = \uc544\uc774\ub514 \ucc3e\uae30
+comUatUia.idPw.searchPassword = \ube44\ubc00\ubc88\ud638 \ucc3e\uae30
+
+comUatUia.idPw.validate.id=\uc544\uc774\ub514\ub97c \uc785\ub825\ud558\uc138\uc694.
+comUatUia.idPw.validate.name=\uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694.
+comUatUia.idPw.validate.email=\uc774\uba54\uc77c\uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc138\uc694.
+comUatUia.idPw.validate.passwordHint=\ube44\ubc00\ubc88\ud638 \ud78c\ud2b8\ub97c \uc120\ud0dd\ud558\uc138\uc694.
+comUatUia.idPw.validate.passwordCnsr=\ube44\ubc00\ubc88\ud638 \uc815\ub2f5\uc744 \uc785\ub825\ud558\uc138\uc694.
+
+
+comUatUia.idPasswordResult.searchIdPwd=\uc544\uc774\ub514 \ubc0f \ube44\ubc00\ubc88\ud638 \ucc3e\uae30
Property changes on: base3.10/src/main/resources/egovframework/message/com/uat/uia/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/message-common_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/message-common_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/message-common_en.properties (revision 7)
@@ -0,0 +1,190 @@
+fail.common.msg=error ocurred!
+fail.common.sql=sql error ocurred! error code: {0}, error msg: {1}
+info.nodata.msg=no data found.
+
+#UI Common resource#
+table.num=num.
+table.regdate=reg.date
+table.reger=registrant
+table.select=select
+title.html=egovframe common component
+title.detail=Detail Inquiry
+title.inquire=Inquire
+title.update=Modify
+title.create=Create
+title.delete=Delete
+title.save=Save
+title.list=List
+title.searchCondition=search condition
+title.search=keyword
+title.reply=reply
+title.scrap=scrap
+title.comment=comment
+title.attachedFileSelect=attached file
+title.attachedFileDelete=attached file delete
+title.link=link
+title.management=Management
+title.all=All
+
+input.select=Select
+input.cSelect=Select
+input.input=input
+input.button=button
+input.selectAll.title=Checkbox select all
+input.yes=Yes
+input.no=No
+
+select.searchCondition=select condition select
+
+button.select=select
+button.search=Search
+button.use=use
+button.notUsed=Not used
+button.inquire=inquire
+button.update=update
+button.create=create
+button.delete=delete
+button.deleteDatabase=Wiping
+button.close=close
+button.save=save
+button.list=list
+button.reset=reset
+button.passwordUpdate=password update
+button.subscribe=subscribe
+button.realname=realname confirm
+button.moveToGpin=move to gpin confirm
+button.moveToIhidnum=move to ihidnum confirm
+button.agree=agree
+button.disagree=disagree
+button.possible=possible
+button.impossible=impossible
+button.qnaregist=Q&A create
+button.cnsltregist=Counsel create
+button.preview=preview
+button.next=nexut
+button.add=add it now
+button.confirm=confirm
+button.back =back
+button.yes =yes
+button.no =no
+button.home =home
+button.user =user support
+button.cop =cooperation
+button.wrkstart = work start
+button.wrkend = work end
+button.reply = reply
+button.scrap = scrap
+button.comment = comment
+button.excel = excel
+button.init=init
+button.acknowledgment=acknowledgment
+button.cancelAcknowledgment=cancel acknowledgment
+button.bulkUpload=bulk upload
+button.log = log
+button.set = set
+button.move = move
+
+#UI Common Message#
+common.noScriptTitle.msg=I can't use all functions in browser JavaScript is not supported.
+common.searchCondition.msg=This layout is a lower information searches made up of information.
+
+common.summary.list={0} A list of the details of the output.
+common.summary.regist={0} Registered by typing the possible contents of registers by clicking the button.
+common.summary.update={0} Registered by typing the possible content of modification by clicking the button.
+common.summary.inqire={0} Full inquiry details about the details of the output.
+
+common.save.msg=confirm save?
+common.regist.msg=confirm regist?
+common.delete.msg=confirm delete?
+common.update.msg=confirm update?
+common.nodata.msg=There is no data. please choose another seach keyword
+common.required.msg=is required field
+common.acknowledgement.msg=confirm acknowledgement?
+common.acknowledgementcancel.msg=confirm acknowledgement cancel?
+common.nocomment.msg=There is no comment.
+common.noguest.msg=There is no guest notice.
+
+success.request.msg=you're request successfully done
+success.common.select=successfully selected
+success.common.insert=successfully inserted
+success.common.update=successfully updated
+success.common.delete=successfully deleted
+
+common.imposbl.fileupload = cannot upload files
+common.isConfmDe.msg=Please check the approval date box
+common.isExist.msg = already exist
+
+fail.common.insert = fail to insert.
+fail.common.update = fail to update
+fail.common.delete = fail to delete
+fail.common.delete.upperMenuExist = fail to delete[upperMenuId foreign key error]
+fail.common.select = fail to select
+fail.common.login = login information is not correct
+fail.common.loginIncorrect = login in more than {0} account will be locked!
+fail.common.login.password = password information is not correct(password digit should be 8 to 20)
+fail.common.idsearch = can not find id
+fail.common.pwsearch = can not find password
+fail.request.msg = Failed to handle the request
+fail.common.login.ip = Login is refused because it is not a registered IP.
+
+#UI User Message#
+fail.user.passwordUpdate1=current password is not correct
+fail.user.passwordUpdate2=password confirm is not correct
+info.user.rlnmCnfirm=realname confirm ready
+success.user.rlnmCnfirm=it is realname
+fail.user.rlnmCnfirm=it is not realname
+fail.user.connectFail=connection fail
+info.user.rlnmPinCnfirm=Using the i-PIN ID, please check your real name
+success.user.rlnmPinCnfirm=Consistent with the registration data of the i-PIN
+fail.user.rlnmPinCnfirm=i-PIN does not match the registered data
+
+#Vlidator Errors#
+errors.prefix=<div class="error">
+errors.suffix=</div><br/>
+
+errors.required={0} is required.
+errors.minlength={0} can not be less than {1} characters.
+errors.maxlength={0} can not be greater than {1} characters.
+errors.invalid={0} is invalid.
+
+errors.byte={0} must be a byte.
+errors.short={0} must be a short.
+errors.integer={0} must be an integer.
+errors.long={0} must be a long.
+errors.float={0} must be a float.
+errors.double={0} must be a double.
+
+errors.date={0} is not a date.
+errors.range={0} is not in the range {1} through {2}.
+errors.creditcard={0} is an invalid credit card number.
+errors.email={0} is an invalid e-mail address.
+
+errors.ihidnum=Is not a valid Social Security number
+errors.korean={0} should be entered with their Korean
+errors.ip=Invalid IP address.
+errors.english={0}is an invalid English character.
+errors.notKorean={0} should not be entered with their Korean
+
+errors.password1={0} must be entered within 8 to 20 characters.
+errors.password2={0} is Korean, special characters, spaces are not allowed.
+errors.password3={0} can not be used continuously for more than four sequential digits.
+errors.password4={0} can not be used continuously for more than 4 letters or numbers that are repeated.
+errors.pwdcheckcomb3={0} must be include as least 3 of English alphabet, digit number, special characters such as ~!@#$%^&*?
+errors.pwdcheckcomb4={0} must be include as least 4 of English alphabet uppercase letter, English alphabet lowercase letter, digit number, special characters such as ~!@#$%^&*?
+errors.pwdcheckseries={0} can not be used continuously for more than 3 sequential letters or digits.
+errors.pwdcheckrepeat={0} can not be used continuously for more than 3 letters or numbers that are repeated.
+
+error.security.runtime.error = error
+
+info.password.rule.password1 = - must be entered within 8 to 20 characters.
+info.password.rule.pwdcheckcomb3 = - must be include as least 3 of English alphabet, digit number, special characters such as ~!@#$%^&*?
+info.password.rule.pwdcheckcomb4 = - must be include as least 4 of English alphabet uppercase letter, English alphabet lowercase letter, digit number, special characters such as ~!@#$%^&*?
+info.password.rule.pwdcheckseries = - can not be used continuously for more than 3 sequential letters or digits ex) kkk, 321 are not allowed.
+
+#Xss Errors#
+errors.xss.checkerUser=There is no use and disposal authority for its capabilities.
+
+#File Upload / Download
+errors.file.extension=It is not a supported file type.
+errors.file.transfer=An error occurred during file transfer.
+success.file.transfer=The file transfer is complete.
Property changes on: base3.10/src/main/resources/egovframework/message/com/message-common_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_en.properties (revision 7)
@@ -0,0 +1,62 @@
+# File system monitoring #
+comUtlSysFsm.fileSysMntrng.title = File system monitoring
+comUtlSysFsm.fileSysMntrngLog.title = File system monitoring log
+
+comUtlSysFsm.fileSysMntrng.fileSysNm.label = File system name
+comUtlSysFsm.fileSysMntrng.fileSysManageNm.label = File system administration name
+comUtlSysFsm.fileSysMntrng.fileSysMg.label = File system size
+comUtlSysFsm.fileSysMntrng.fileSysThrhld.label = Filesystem Threshold
+comUtlSysFsm.fileSysMntrng.fileSysUsgQty.label = File system usage
+comUtlSysFsm.fileSysMntrng.mngrNm.label = Administrator name
+comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label = Administrator email address
+comUtlSysFsm.fileSysMntrng.mntrngSttus.label = Monitoring status
+comUtlSysFsm.fileSysMntrng.creatDt.label = Date last created
+
+comUtlSysFsm.fileSysMntrngList.seq.label = number
+comUtlSysFsm.fileSysMntrngList.fileSysNm.label = File system name
+comUtlSysFsm.fileSysMntrngList.fileSysManageNm.label = File system administration name
+comUtlSysFsm.fileSysMntrngList.fileSysMg.label = Size
+comUtlSysFsm.fileSysMntrngList.fileSysThrhld.label = Threshold
+comUtlSysFsm.fileSysMntrngList.fileSysUsgQty.label = Usage
+comUtlSysFsm.fileSysMntrngList.mntrngSttus.label = Status
+comUtlSysFsm.fileSysMntrngList.mngrNm.label = Admin-name
+comUtlSysFsm.fileSysMntrngList.guideOne=If your OS is Window 10, you need to run Eclipse as an administrator
+comUtlSysFsm.fileSysMntrngList.guideTwo=Globals.OsType needs to be changed in globals.properties to suit the environment you are using on UNIX or WINDOWS. <br> The differences in system capacity paths between WINDOW and UNIX are also visible at the top of globals.properties.
+
+comUtlSysFsm.fileSysMntrngLog.logInfo.label = Log information
+comUtlSysFsm.fileSysMntrngLog.logId.label = Log ID
+comUtlSysFsm.fileSysMntrngLog.fileSysNm.label = File system name
+comUtlSysFsm.fileSysMntrngLog.fileSysManageNm.label = File system administration name
+comUtlSysFsm.fileSysMntrngLog.fileSysMg.label = File system size
+comUtlSysFsm.fileSysMntrngLog.fileSysThrhld.label = File system threshold
+comUtlSysFsm.fileSysMntrngLog.fileSysUsgQty.label = File system usage
+comUtlSysFsm.fileSysMntrngLog.mntrngSttus.label = Monitoring status
+comUtlSysFsm.fileSysMntrngLog.creatDt.label = Creation date and time
+
+comUtlSysFsm.fileSysMntrngLogList.seq.label = number
+comUtlSysFsm.fileSysMntrngLogList.fileSysNm.label = File system name
+comUtlSysFsm.fileSysMntrngLogList.fileSysManageNm.label = File system administration name
+comUtlSysFsm.fileSysMntrngLogList.fileSysMg.label = Size
+comUtlSysFsm.fileSysMntrngLogList.fileSysThrhld.label = Threshold
+comUtlSysFsm.fileSysMntrngLogList.fileSysUsgQty.label = Usage
+comUtlSysFsm.fileSysMntrngLogList.mntrngSttus.label = Status
+comUtlSysFsm.fileSysMntrngLogList.creatDt.label = Date created
+comUtlSysFsm.fileSysMntrngLogList.mngrNm.label = Administrator name
+comUtlSysFsm.fileSysMntrngLogList.validate.bgnDe = Search start date
+comUtlSysFsm.fileSysMntrngLogList.validate.endDe = Search end date
+comUtlSysFsm.fileSysMntrngLogList.validate.bgnDeHourendDeHour = The search end date can not be earlier than the search start date.
+comUtlSysFsm.fileSysMntrngLogList.select = Please select
+comUtlSysFsm.fileSysMntrngLogList.list = list
+
+#EgovFileSysMntrngRegist
+comUtlSysFsm.fileSysMntrngRegist.notApplicableFileSysTrue = The file system name is invalid.
+comUtlSysFsm.fileSysMntrngRegist.fileSysMg = Click on the File System Check button to check the size of the file system.
+comUtlSysFsm.fileSysMntrngRegist.fileSysThrhldG = You must enter a file system threshold of 1G or more.
+comUtlSysFsm.fileSysMntrngRegist.fileSysThrhldLimit = The file system threshold can not be greater than the file system size.
+comUtlSysFsm.fileSysMntrngRegist.selectFileSysMg = Check the file system
+
+#EgovFileSysMntrngUpdt
+comUtlSysFsm.fileSysMntrngUpdt.fileSysMg = You must enter a file system size of 1G or more.
+comUtlSysFsm.fileSysMntrngUpdt.fileSysThrhldG = You must enter a file system threshold of 1G or more.
+comUtlSysFsm.fileSysMntrngUpdt.fileSysThrhldLimit = The file system threshold can not be greater than the file system size.
+comUtlSysFsm.fileSysMntrngUpdt.tableSummary = This table is used to modify file system monitoring target information. It consists of file system name, file system management name, file system size, file system threshold, administrator name, and administrator e-mail address information.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_ko.properties (revision 7)
@@ -0,0 +1,62 @@
+#\ud30c\uc77c\uc2dc\uc2a4\ud15c\ubaa8\ub2c8\ud130\ub9c1#
+comUtlSysFsm.fileSysMntrng.title = \ud30c\uc77c\uc2dc\uc2a4\ud15c\ubaa8\ub2c8\ud130\ub9c1
+comUtlSysFsm.fileSysMntrngLog.title = \ud30c\uc77c\uc2dc\uc2a4\ud15c\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8
+
+comUtlSysFsm.fileSysMntrng.fileSysNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uba85
+comUtlSysFsm.fileSysMntrng.fileSysManageNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uad00\ub9ac\uba85
+comUtlSysFsm.fileSysMntrng.fileSysMg.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c \ud06c\uae30
+comUtlSysFsm.fileSysMntrng.fileSysThrhld.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc784\uacc4\uce58
+comUtlSysFsm.fileSysMntrng.fileSysUsgQty.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc0ac\uc6a9\ub7c9
+comUtlSysFsm.fileSysMntrng.mngrNm.label=\uad00\ub9ac\uc790\uba85
+comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label=\uad00\ub9ac\uc790\uc774\uba54\uc77c\uc8fc\uc18c
+comUtlSysFsm.fileSysMntrng.mntrngSttus.label=\ubaa8\ub2c8\ud130\ub9c1\uc0c1\ud0dc
+comUtlSysFsm.fileSysMntrng.creatDt.label=\ub9c8\uc9c0\ub9c9 \uc0dd\uc131\uc77c\uc2dc
+
+comUtlSysFsm.fileSysMntrngList.seq.label=\ubc88\ud638
+comUtlSysFsm.fileSysMntrngList.fileSysNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uba85
+comUtlSysFsm.fileSysMntrngList.fileSysManageNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uad00\ub9ac\uba85
+comUtlSysFsm.fileSysMntrngList.fileSysMg.label=\ud06c\uae30
+comUtlSysFsm.fileSysMntrngList.fileSysThrhld.label=\uc784\uacc4\uce58
+comUtlSysFsm.fileSysMntrngList.fileSysUsgQty.label=\uc0ac\uc6a9\ub7c9
+comUtlSysFsm.fileSysMntrngList.mntrngSttus.label=\uc0c1\ud0dc
+comUtlSysFsm.fileSysMntrngList.mngrNm.label=\uad00\ub9ac\uc790\uba85
+comUtlSysFsm.fileSysMntrngList.guideOne=\uc6b4\uc601\uccb4\uc81c\uac00 \uc708\ub3c4\uc6b0 10\uc77c \uacbd\uc6b0, \uc774\ud074\ub9bd\uc2a4\ub97c \uad00\ub9ac\uc790 \uad8c\ud55c\uc73c\ub85c \uc2e4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngList.guideTwo=globals.properties\uc5d0\uc11c Globals.OsType\uc744 UNIX \ub610\ub294 WINDOWS\uc5d0 \uc0ac\uc6a9\uc911\uc778 \ud658\uacbd\uc5d0 \ub9de\uac8c \ubcc0\uacbd\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. <br> WINDOW\uc640 UNIX\uc758 \uc2dc\uc2a4\ud15c \uc6a9\ub7c9 \uacbd\ub85c\uc758 \ucc28\uc774\ub3c4 globals.properties \uc0c1\ub2e8\uc5d0\uc11c \ud655\uc778 \uac00\ub2a5\ud569\ub2c8\ub2e4.
+
+comUtlSysFsm.fileSysMntrngLog.logInfo.label=\ub85c\uadf8\uc815\ubcf4
+comUtlSysFsm.fileSysMntrngLog.logId.label=\ub85c\uadf8ID
+comUtlSysFsm.fileSysMntrngLog.fileSysNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uba85
+comUtlSysFsm.fileSysMntrngLog.fileSysManageNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uad00\ub9ac\uba85
+comUtlSysFsm.fileSysMntrngLog.fileSysMg.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c \ud06c\uae30
+comUtlSysFsm.fileSysMntrngLog.fileSysThrhld.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc784\uacc4\uce58
+comUtlSysFsm.fileSysMntrngLog.fileSysUsgQty.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc0ac\uc6a9\ub7c9
+comUtlSysFsm.fileSysMntrngLog.mntrngSttus.label=\ubaa8\ub2c8\ud130\ub9c1\uc0c1\ud0dc
+comUtlSysFsm.fileSysMntrngLog.creatDt.label=\uc0dd\uc131\uc77c\uc2dc
+
+comUtlSysFsm.fileSysMntrngLogList.seq.label=\ubc88\ud638
+comUtlSysFsm.fileSysMntrngLogList.fileSysNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uba85
+comUtlSysFsm.fileSysMntrngLogList.fileSysManageNm.label=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uad00\ub9ac\uba85
+comUtlSysFsm.fileSysMntrngLogList.fileSysMg.label=\ud06c\uae30
+comUtlSysFsm.fileSysMntrngLogList.fileSysThrhld.label=\uc784\uacc4\uce58
+comUtlSysFsm.fileSysMntrngLogList.fileSysUsgQty.label=\uc0ac\uc6a9\ub7c9
+comUtlSysFsm.fileSysMntrngLogList.mntrngSttus.label=\uc0c1\ud0dc
+comUtlSysFsm.fileSysMntrngLogList.creatDt.label=\uc0dd\uc131\uc77c\uc2dc
+comUtlSysFsm.fileSysMntrngLogList.mngrNm.label=\uad00\ub9ac\uc790\uba85
+comUtlSysFsm.fileSysMntrngLogList.validate.bgnDe=\uac80\uc0c9\uc2dc\uc791\uc77c\uc790
+comUtlSysFsm.fileSysMntrngLogList.validate.endDe=\uac80\uc0c9\uc885\ub8cc\uc77c\uc790
+comUtlSysFsm.fileSysMntrngLogList.validate.bgnDeHourendDeHour=\uac80\uc0c9\uc885\ub8cc\uc77c\uc2dc\uac00 \uac80\uc0c9\uc2dc\uc791\uc77c\uc2dc\ubcf4\ub2e4 \ube60\ub97c\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngLogList.select=\uc120\ud0dd\ud558\uc138\uc694
+comUtlSysFsm.fileSysMntrngLogList.list=\ubaa9\ub85d
+
+#EgovFileSysMntrngRegist
+comUtlSysFsm.fileSysMntrngRegist.notApplicableFileSysTrue=\ud30c\uc77c\uc2dc\uc2a4\ud15c\uba85\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngRegist.fileSysMg=\ud30c\uc77c\uc2dc\uc2a4\ud15c\ud655\uc778 \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec, \ud30c\uc77c\uc2dc\uc2a4\ud15c\uc758 \ud06c\uae30\ub97c \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngRegist.fileSysThrhldG=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc784\uacc4\uce58\ub97c 1G \uc774\uc0c1 \uc785\ub825\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngRegist.fileSysThrhldLimit=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc784\uacc4\uce58\ub294 \ud30c\uc77c\uc2dc\uc2a4\ud15c \ud06c\uae30\ubcf4\ub2e4 \ud074 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngRegist.selectFileSysMg=\ud30c\uc77c\uc2dc\uc2a4\ud15c\ud655\uc778
+
+#EgovFileSysMntrngUpdt
+comUtlSysFsm.fileSysMntrngUpdt.fileSysMg=\ud30c\uc77c\uc2dc\uc2a4\ud15c \ud06c\uae30\ub97c 1G \uc774\uc0c1 \uc785\ub825\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngUpdt.fileSysThrhldG=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc784\uacc4\uce58\ub97c 1G \uc774\uc0c1 \uc785\ub825\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngUpdt.fileSysThrhldLimit=\ud30c\uc77c\uc2dc\uc2a4\ud15c \uc784\uacc4\uce58\ub294 \ud30c\uc77c\uc2dc\uc2a4\ud15c \ud06c\uae30\ubcf4\ub2e4 \ud074 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUtlSysFsm.fileSysMntrngUpdt.tableSummary=\uc774 \ud45c\ub294 \ud30c\uc77c\uc2dc\uc2a4\ud15c\ubaa8\ub2c8\ud130\ub9c1 \ub300\uc0c1 \uc815\ubcf4\ub97c \uc218\uc815\ud558\uae30 \uc704\ud55c \ud45c\uc774\uba70, \ud30c\uc77c\uc2dc\uc2a4\ud15c\uba85, \ud30c\uc77c\uc2dc\uc2a4\ud15c\uad00\ub9ac\uba85, \ud30c\uc77c\uc2dc\uc2a4\ud15c \ud06c\uae30, \ud30c\uc77c\uc2dc\uc2a4\ud15c \uc784\uacc4\uce58, \uad00\ub9ac\uc790\uba85, \uad00\ub9ac\uc790\uc774\uba54\uc77c\uc8fc\uc18c \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4 .
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/fsm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_en.properties (revision 7)
@@ -0,0 +1,31 @@
+#HTTP Monitoring#
+comUtlSysHtm.comUtlHttpMonList.title = HTTP Monitoring List
+comUtlSysHtm.comUtlHttpMonDetail.title = HTTP Monitoring Details
+comUtlSysHtm.comUtlHttpMonDetail.summary = This table provides the target information for HTTP service monitoring and consists of Web service termination, system URL, status, administrator name, and administrator email information.
+comUtlSysHtm.comUtlHttpMonModify.title = Modify HTTP Monitoring
+comUtlSysHtm.comUtlHttpMonModify.summary = This table provides the target information for HTTP service monitoring and consists of Web service termination, system URL, status, administrator name, and administrator email information.
+comUtlSysHtm.comUtlHttpMonRegist.title = Regist HTTP Monitoring
+comUtlSysHtm.comUtlHttpMonLogList.title = HTTP Monitoring Log List
+comUtlSysHtm.comUtlHttpMonLogDetail.title = HTTP Monitoring Log Details
+comUtlSysHtm.comUtlHttpMonLogDetail.summary = This table provides the target information for HTTP service monitoring and consists of Web service termination, system URL, status, administrator name, and administrator email information.
+
+comUtlSysHtm.comUtlHttpMon.period = Period
+comUtlSysHtm.comUtlHttpMon.seq = No
+comUtlSysHtm.comUtlHttpMon.logID = LogID
+comUtlSysHtm.comUtlHttpMon.processID = Process ID
+comUtlSysHtm.comUtlHttpMon.webService = Web Service
+comUtlSysHtm.comUtlHttpMon.systemURL = System URL
+comUtlSysHtm.comUtlHttpMon.managerName = Manager
+comUtlSysHtm.comUtlHttpMon.managerEmail = Email
+comUtlSysHtm.comUtlHttpMon.createdDateTime = Created Datetime
+comUtlSysHtm.comUtlHttpMon.lastCreatedDateTime = Lastly Created Datetime
+comUtlSysHtm.comUtlHttpMon.status = Status
+comUtlSysHtm.comUtlHttpMon.monitoringDatetime = Monitoring Datetime
+comUtlSysHtm.comUtlHttpMon.logInfo = Log
+
+comUtlSysHtm.comUtlHttpMon.searchStartDate = Search start date
+comUtlSysHtm.comUtlHttpMon.searchStartHour = Search start hour
+comUtlSysHtm.comUtlHttpMon.searchStartMin = Search start minute
+comUtlSysHtm.comUtlHttpMon.searchEndDate = Search end date
+comUtlSysHtm.comUtlHttpMon.searchEndHour = Search end hour
+comUtlSysHtm.comUtlHttpMon.searchEndMin = Search end minute
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_ko.properties (revision 7)
@@ -0,0 +1,31 @@
+#HTTP\ubaa8\ub2c8\ud130\ub9c1#
+comUtlSysHtm.comUtlHttpMonList.title = HTTP\ubaa8\ub2c8\ud130\ub9c1 \ubaa9\ub85d
+comUtlSysHtm.comUtlHttpMonDetail.title = HTTP\ubaa8\ub2c8\ud130\ub9c1 \uc0c1\uc138\uc870\ud68c
+comUtlSysHtm.comUtlHttpMonDetail.summary = \uc774 \ud45c\ub294 HTTP\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ub300\uc0c1 \uc815\ubcf4\ub97c \uc81c\uacf5\ud558\uba70, \uc6f9\uc11c\ube44\uc2a4\uc885\ub8cc, \uc2dc\uc2a4\ud15cURL, \uc0c1\ud0dc, \uad00\ub9ac\uc790\uba85, \uad00\ub9ac\uc790\uc774\uba54\uc77c \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4 .
+comUtlSysHtm.comUtlHttpMonModify.title = HTTP\ubaa8\ub2c8\ud130\ub9c1 \uc218\uc815
+comUtlSysHtm.comUtlHttpMonModify.summary = \uc774 \ud45c\ub294 HTTP\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ub300\uc0c1 \uc815\ubcf4\ub97c \uc81c\uacf5\ud558\uba70, \uc6f9\uc11c\ube44\uc2a4\uc885\ub8cc, \uc2dc\uc2a4\ud15cURL, \uc0c1\ud0dc, \uad00\ub9ac\uc790\uba85, \uad00\ub9ac\uc790\uc774\uba54\uc77c \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4 .
+comUtlSysHtm.comUtlHttpMonRegist.title = HTTP\ubaa8\ub2c8\ud130\ub9c1 \ub4f1\ub85d
+comUtlSysHtm.comUtlHttpMonLogList.title = HTTP\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \ubaa9\ub85d
+comUtlSysHtm.comUtlHttpMonLogDetail.title = HTTP\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \uc0c1\uc138\uc870\ud68c
+comUtlSysHtm.comUtlHttpMonLogDetail.summary = \uc774 \ud45c\ub294 HTTP\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ub300\uc0c1 \uc815\ubcf4\ub97c \uc81c\uacf5\ud558\uba70, \ub85c\uadf8ID, \ud504\ub85c\uc138\uc2a4ID, \uc6f9\uc11c\ube44\uc2a4\uc885\ub958, \uc0c1\ud0dc, \ub85c\uadf8 \uc815\ubcf4, \ub9c8\uc9c0\ub9c9\uc0dd\uc131\uc77c\uc2dc\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4 .
+
+comUtlSysHtm.comUtlHttpMon.period = \uae30\uac04
+comUtlSysHtm.comUtlHttpMon.seq = \uc21c\ubc88
+comUtlSysHtm.comUtlHttpMon.logID = \ub85c\uadf8ID
+comUtlSysHtm.comUtlHttpMon.processID = \ud504\ub85c\uc138\uc2a4ID
+comUtlSysHtm.comUtlHttpMon.webService = \uc6f9\uc11c\ube44\uc2a4\uc885\ub958
+comUtlSysHtm.comUtlHttpMon.systemURL = \uc2dc\uc2a4\ud15cURL
+comUtlSysHtm.comUtlHttpMon.managerName = \uad00\ub9ac\uc790\uba85
+comUtlSysHtm.comUtlHttpMon.managerEmail = \uad00\ub9ac\uc790\uc774\uba54\uc77c
+comUtlSysHtm.comUtlHttpMon.createdDateTime = \uc0dd\uc131\uc77c\uc2dc
+comUtlSysHtm.comUtlHttpMon.lastCreatedDateTime = \ub9c8\uc9c0\ub9c9 \uc0dd\uc131\uc77c\uc2dc
+comUtlSysHtm.comUtlHttpMon.status = \uc0c1\ud0dc
+comUtlSysHtm.comUtlHttpMon.monitoringDatetime = \ubaa8\ub2c8\ud130\ub9c1\uc2dc\uac01
+comUtlSysHtm.comUtlHttpMon.logInfo = \ub85c\uadf8
+
+comUtlSysHtm.comUtlHttpMon.searchStartDate = \uac80\uc0c9\uc2dc\uc791\uc77c\uc790
+comUtlSysHtm.comUtlHttpMon.searchStartHour = \uac80\uc0c9\uc2dc\uc791\uc2dc\uac04
+comUtlSysHtm.comUtlHttpMon.searchStartMin = \uac80\uc0c9\uc2dc\uc791\ubd84
+comUtlSysHtm.comUtlHttpMon.searchEndDate = \uac80\uc0c9\uc885\ub8cc\uc77c\uc790
+comUtlSysHtm.comUtlHttpMon.searchEndHour = \uac80\uc0c9\uc885\ub8cc\uc2dc\uac04
+comUtlSysHtm.comUtlHttpMon.searchEndMin = \uac80\uc0c9\uc885\ub8cc\ubd84
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/htm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_en.properties (revision 7)
@@ -0,0 +1,47 @@
+# Proxy service #
+comUtlSysPxy.proxyLog.title = Proxy log
+comUtlSysPxy.proxySvc.title = Proxy Settings
+
+comUtlSysPxy.proxySvc.proxyId.label = Proxy ID
+comUtlSysPxy.proxySvc.proxyNm.label = proxy name
+comUtlSysPxy.proxySvc.proxyIp.label = Proxy IP
+comUtlSysPxy.proxySvc.proxyPort.label = Proxy Port
+comUtlSysPxy.proxySvc.trgetSvcNm.label = target service name
+comUtlSysPxy.proxySvc.svcDc.label = Service Description
+comUtlSysPxy.proxySvc.svcIp.label = Service IP
+comUtlSysPxy.proxySvc.svcPort.label = Service Port
+comUtlSysPxy.proxySvc.svcSttusNm.label = Service Status
+
+comUtlSysPxy.proxySvcList.proxyId.label = Proxy ID
+comUtlSysPxy.proxySvcList.proxyNm.label = proxy name
+comUtlSysPxy.proxySvcList.proxyPort.label = Proxy Port
+comUtlSysPxy.proxySvcList.trgetSvcNm.label = target service name
+comUtlSysPxy.proxySvcList.svcIp.label = Service IP/Port
+comUtlSysPxy.proxySvcList.svcSttusNm.label = Status
+comUtlSysPxy.proxySvcList.checknum = Date format is invalid
+comUtlSysPxy.proxySvcList.strTmpFromDateEndDate = The start date can not be greater than the end date
+comUtlSysPxy.proxySvcList.pmProxyLogVO.strStartDate = Proxy log start date
+comUtlSysPxy.proxySvcList.pmProxyLogVO.strEndDate = Proxy log end date
+
+comUtlSysPxy.proxyLog.period.label = duration
+comUtlSysPxy.proxyLog.proxyId.label = Proxy ID
+comUtlSysPxy.proxyLog.proxyNm.label = Target Service
+comUtlSysPxy.proxyLog.clntPort.label = Proxy Port
+comUtlSysPxy.proxyLog.clntIp.label = Client IP
+comUtlSysPxy.proxyLog.conectTime.label =connected time
+comUtlSysPxy.proxyLog.log = Log
+
+comUtlSysPxy.proxySvcDetail.title=Proxy Detail View
+comUtlSysPxy.proxySvcDetail.summary = Provides detailed information about proxy settings.
+
+comUtlSysPxy.proxySvcUpdtl.title=Change Proxy Settings
+comUtlSysPxy.proxySvcUpdt.summary = Modify the proxy configuration information.
+comUtlSysPxy.proxySvcUpdt.ipValueException = is the exception ip.
+comUtlSysPxy.proxySvcUpdt.ipFormalException = IP format mismatch.
+comUtlSysPxy.proxySvcUpdt.svcSttus.run = Normal
+comUtlSysPxy.proxySvcUpdt.svcSttus.stop = Stop
+
+comUtlSysPxy.proxySvcRegist.ipValueException = is the exception ip.
+comUtlSysPxy.proxySvcRegist.ipFormalException = IP format mismatch.
+comUtlSysPxy.proxySvcRegist.svcSttus.run = Normal
+comUtlSysPxy.proxySvcRegist.svcSttus.stop = Stop
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_ko.properties (revision 7)
@@ -0,0 +1,47 @@
+#\ud504\ub85d\uc2dc\uc11c\ube44\uc2a4#
+comUtlSysPxy.proxyLog.title=\ud504\ub85d\uc2dc\ub85c\uadf8
+comUtlSysPxy.proxySvc.title=\ud504\ub85d\uc2dc\uc124\uc815
+
+comUtlSysPxy.proxySvc.proxyId.label=\ud504\ub85d\uc2dcID
+comUtlSysPxy.proxySvc.proxyNm.label=\ud504\ub85d\uc2dc\uba85
+comUtlSysPxy.proxySvc.proxyIp.label=\ud504\ub85d\uc2dcIP
+comUtlSysPxy.proxySvc.proxyPort.label=\ud504\ub85d\uc2dcPort
+comUtlSysPxy.proxySvc.trgetSvcNm.label=\ub300\uc0c1\uc11c\ube44\uc2a4\uba85
+comUtlSysPxy.proxySvc.svcDc.label=\uc11c\ube44\uc2a4\uc124\uba85
+comUtlSysPxy.proxySvc.svcIp.label=\uc11c\ube44\uc2a4IP
+comUtlSysPxy.proxySvc.svcPort.label=\uc11c\ube44\uc2a4Port
+comUtlSysPxy.proxySvc.svcSttusNm.label=\uc11c\ube44\uc2a4\uc0c1\ud0dc
+
+comUtlSysPxy.proxySvcList.proxyId.label=\ud504\ub85d\uc2dcID
+comUtlSysPxy.proxySvcList.proxyNm.label=\ud504\ub85d\uc2dc\uba85
+comUtlSysPxy.proxySvcList.proxyPort.label=\ud504\ub85d\uc2dcPort
+comUtlSysPxy.proxySvcList.trgetSvcNm.label=\ub300\uc0c1\uc11c\ube44\uc2a4\uba85
+comUtlSysPxy.proxySvcList.svcIp.label=\uc11c\ube44\uc2a4IP/Port
+comUtlSysPxy.proxySvcList.svcSttusNm.label=\uc0c1\ud0dc
+comUtlSysPxy.proxySvcList.checknum=\ub0a0\uc9dc \ud615\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4
+comUtlSysPxy.proxySvcList.strTmpFromDateEndDate=\uc2dc\uc791\uc77c\uc790\ub294 \uc885\ub8cc\uc77c\uc790\ubcf4\ub2e4 \ud074 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4
+comUtlSysPxy.proxySvcList.pmProxyLogVO.strStartDate=\ud504\ub85d\uc2dc\ub85c\uadf8 \uc2dc\uc791\uc77c\uc790
+comUtlSysPxy.proxySvcList.pmProxyLogVO.strEndDate=\ud504\ub85d\uc2dc\ub85c\uadf8 \uc885\ub8cc\uc77c\uc790
+
+comUtlSysPxy.proxyLog.period.label=\uae30\uac04
+comUtlSysPxy.proxyLog.proxyId.label=\ud504\ub85d\uc2dcID
+comUtlSysPxy.proxyLog.proxyNm.label=\ub300\uc0c1\uc11c\ube44\uc2a4
+comUtlSysPxy.proxyLog.clntPort.label=\ud504\ub85d\uc2dcPort
+comUtlSysPxy.proxyLog.clntIp.label=\ud074\ub77c\uc774\uc5b8\ud2b8IP
+comUtlSysPxy.proxyLog.conectTime.label=\uc811\uc18d\uc77c\uc2dc
+comUtlSysPxy.proxyLog.log=\ub85c\uadf8
+
+comUtlSysPxy.proxySvcDetail.title=\ud504\ub85d\uc2dc\uc124\uc815 \uc0c1\uc138\uc870\ud68c
+comUtlSysPxy.proxySvcDetail.summary=\ud504\ub85d\uc2dc\uc124\uc815\uc5d0 \ub300\ud55c \uc0c1\uc138\uc815\ubcf4\ub97c \uc81c\uacf5\ud55c\ub2e4.
+
+comUtlSysPxy.proxySvcUpdtl.title=\ud504\ub85d\uc2dc\uc124\uc815 \uc218\uc815
+comUtlSysPxy.proxySvcUpdt.summary=\ud504\ub85d\uc2dc\uc124\uc815 \uc815\ubcf4\ub97c \uc218\uc815\ud55c\ub2e4.
+comUtlSysPxy.proxySvcUpdt.ipValueException=\ub294 \uc608\uc678 \uc544\uc774\ud53c \uc785\ub2c8\ub2e4.
+comUtlSysPxy.proxySvcUpdt.ipFormalException=IP \ud615\uc2dd\uc774 \uc77c\uce58 \ud558\uc9c0\uc54a\uc2b5\ub2c8\ub2e4.
+comUtlSysPxy.proxySvcUpdt.svcSttus.run=\uc815\uc0c1
+comUtlSysPxy.proxySvcUpdt.svcSttus.stop=\uc911\uc9c0
+
+comUtlSysPxy.proxySvcRegist.ipValueException=\ub294 \uc608\uc678 \uc544\uc774\ud53c \uc785\ub2c8\ub2e4.
+comUtlSysPxy.proxySvcRegist.ipFormalException=IP \ud615\uc2dd\uc774 \uc77c\uce58 \ud558\uc9c0\uc54a\uc2b5\ub2c8\ub2e4.
+comUtlSysPxy.proxySvcRegist.svcSttus.run=\uc815\uc0c1
+comUtlSysPxy.proxySvcRegist.svcSttus.stop=\uc911\uc9c0
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/pxy/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_en.properties (revision 7)
@@ -0,0 +1,7 @@
+#Login Sesion Check#
+utlSysRsc.loginSessionCheck.loginSessionCheck=Login Session Check
+utlSysRsc.loginSessionCheck.validate.confirmSetLoginSession=Are you sure?
+utlSysRsc.loginSessionCheck.url=URL
+utlSysRsc.loginSessionCheck.sessionURL=Session URL
+utlSysRsc.loginSessionCheck.set=SET
+utlSysRsc.loginSessionCheck.sessionView=Move
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_ko.properties (revision 7)
@@ -0,0 +1,7 @@
+#\ub85c\uadf8\uc778\uc138\uc158\uc815\ubcf4\uccb4\ud06c#
+utlSysRsc.loginSessionCheck.loginSessionCheck=\ub85c\uadf8\uc778 \uc138\uc158\uc815\ubcf4 \uccb4\ud06c
+utlSysRsc.loginSessionCheck.validate.confirmSetLoginSession=\uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+utlSysRsc.loginSessionCheck.url=URL
+utlSysRsc.loginSessionCheck.sessionURL=\uc138\uc158 URL
+utlSysRsc.loginSessionCheck.set=\uc124\uc815
+utlSysRsc.loginSessionCheck.sessionView=\uc774\ub3d9
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/rsc/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_en.properties (revision 7)
@@ -0,0 +1,37 @@
+#Network Service Monitoring#
+comUtlSysNsm.ntwrkSvcMntrng.title = Network Service Monitoring
+comUtlSysNsm.ntwrkSvcMntrngLog.title = Network Service Monitoring Log
+
+comUtlSysNsm.ntwrkSvcMntrng.sysIp.label=System IP
+comUtlSysNsm.ntwrkSvcMntrng.sysPort.label=System Port
+comUtlSysNsm.ntwrkSvcMntrng.sysNm.label=System Name
+comUtlSysNsm.ntwrkSvcMntrng.mngrNm.label=Manager Name
+comUtlSysNsm.ntwrkSvcMntrng.mngrEmailAddr.label=Admin Email
+comUtlSysNsm.ntwrkSvcMntrng.mntrngSttus.label=Monitoring Status
+comUtlSysNsm.ntwrkSvcMntrng.creatDt.label=Creation Date
+comUtlSysNsm.ntwrkSvcMntrng.validate.alert.duplicate=There are duplicate network services IP and Port.
+
+comUtlSysNsm.ntwrkSvcMntrngList.num.label=Num.
+comUtlSysNsm.ntwrkSvcMntrngList.sysIp.label=System IP
+comUtlSysNsm.ntwrkSvcMntrngList.sysPort.label=System Port
+comUtlSysNsm.ntwrkSvcMntrngList.sysNm.label=System Name
+comUtlSysNsm.ntwrkSvcMntrngList.mntrngSttus.label=Monitoring Status
+comUtlSysNsm.ntwrkSvcMntrngList.mngrNm.label=Manager Name
+
+comUtlSysNsm.ntwrkSvcMntrngLog.logId.label=Log ID
+comUtlSysNsm.ntwrkSvcMntrngLog.logInfo.label=Log Information
+comUtlSysNsm.ntwrkSvcMntrngLog.num.label=Num.
+comUtlSysNsm.ntwrkSvcMntrngLog.sysIp.label=System IP
+comUtlSysNsm.ntwrkSvcMntrngLog.sysPort.label=System Port
+comUtlSysNsm.ntwrkSvcMntrngLog.sysNm.label=System Name
+comUtlSysNsm.ntwrkSvcMntrngLog.mntrngSttus.label=Monitoring Status
+comUtlSysNsm.ntwrkSvcMntrngLog.mngrNm.label=Manager Name
+comUtlSysNsm.ntwrkSvcMntrngLog.creatDt.label=Created Date
+comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.bgnDe=Search Start Date
+comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.endDe=Search End Date
+comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.diffBgnDeEndDe=The search end date can not be earlier than the search start date.
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchBgnDe=Enter Start Date
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchBgnHour=Select Start Time
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchEndDe=Enter End Date
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchEndHour=Select End Time
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchWrd=Enter Search Terms
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_ko.properties (revision 7)
@@ -0,0 +1,40 @@
+#\ub124\ud2b8\uc6cc\ud06c\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1#
+comUtlSysNsm.ntwrkSvcMntrng.title = \ub124\ud2b8\uc6cc\ud06c\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
+comUtlSysNsm.ntwrkSvcMntrngLog.title = \ub124\ud2b8\uc6cc\ud06c\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8
+
+comUtlSysNsm.ntwrkSvcMntrng.sysIp.label=\uc2dc\uc2a4\ud15cIP
+comUtlSysNsm.ntwrkSvcMntrng.sysPort.label=\uc2dc\uc2a4\ud15c\ud3ec\ud2b8
+comUtlSysNsm.ntwrkSvcMntrng.sysNm.label=\uc2dc\uc2a4\ud15c\uba85
+comUtlSysNsm.ntwrkSvcMntrng.mngrNm.label=\uad00\ub9ac\uc790\uba85
+comUtlSysNsm.ntwrkSvcMntrng.mngrEmailAddr.label=\uad00\ub9ac\uc790\uc774\uba54\uc77c\uc8fc\uc18c
+comUtlSysNsm.ntwrkSvcMntrng.mntrngSttus.label=\ubaa8\ub2c8\ud130\ub9c1\uc0c1\ud0dc
+comUtlSysNsm.ntwrkSvcMntrng.creatDt.label=\ub9c8\uc9c0\ub9c9 \uc0dd\uc131\uc77c\uc2dc
+comUtlSysNsm.ntwrkSvcMntrng.validate.alert.duplicate=\uc911\ubcf5\ub41c \ub124\ud2b8\uc6cc\ud06c\uc11c\ube44\uc2a4\uc758 IP\uc640 Port\uac00 \uc788\uc2b5\ub2c8\ub2e4.
+
+comUtlSysNsm.ntwrkSvcMntrngList.num.label=\ubc88\ud638
+comUtlSysNsm.ntwrkSvcMntrngList.sysIp.label=\uc2dc\uc2a4\ud15cIP
+comUtlSysNsm.ntwrkSvcMntrngList.sysPort.label=\uc2dc\uc2a4\ud15c\ud3ec\ud2b8
+comUtlSysNsm.ntwrkSvcMntrngList.sysNm.label=\uc2dc\uc2a4\ud15c\uba85
+comUtlSysNsm.ntwrkSvcMntrngList.mntrngSttus.label=\ubaa8\ub2c8\ud130\ub9c1\uc0c1\ud0dc
+comUtlSysNsm.ntwrkSvcMntrngList.mngrNm.label=\uad00\ub9ac\uc790\uba85
+
+comUtlSysNsm.ntwrkSvcMntrngLog.logId.label=\ub85c\uadf8ID
+comUtlSysNsm.ntwrkSvcMntrngLog.logInfo.label=\ub85c\uadf8\uc815\ubcf4
+comUtlSysNsm.ntwrkSvcMntrngLog.num.label=\ubc88\ud638
+comUtlSysNsm.ntwrkSvcMntrngLog.sysIp.label=\uc2dc\uc2a4\ud15cIP
+comUtlSysNsm.ntwrkSvcMntrngLog.sysPort.label=\uc2dc\uc2a4\ud15c\ud3ec\ud2b8
+comUtlSysNsm.ntwrkSvcMntrngLog.sysNm.label=\uc2dc\uc2a4\ud15c\uba85
+comUtlSysNsm.ntwrkSvcMntrngLog.mntrngSttus.label=\ubaa8\ub2c8\ud130\ub9c1\uc0c1\ud0dc
+comUtlSysNsm.ntwrkSvcMntrngLog.mngrNm.label=\uad00\ub9ac\uc790\uba85
+comUtlSysNsm.ntwrkSvcMntrngLog.creatDt.label=\uc0dd\uc131\uc77c\uc2dc
+comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.bgnDe=\uac80\uc0c9\uc2dc\uc791\uc77c\uc790
+comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.endDe=\uac80\uc0c9\uc885\ub8cc\uc77c\uc790
+comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.diffBgnDeEndDe=\uac80\uc0c9\uc885\ub8cc\uc77c\uc2dc\uac00 \uac80\uc0c9\uc2dc\uc791\uc77c\uc2dc\ubcf4\ub2e4 \ube60\ub97c\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchBgnDe=\uc870\ud68c\uc2dc\uc791\uc77c\uc790 \uc785\ub825
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchBgnHour=\uc870\ud68c\uc2dc\uc791 \uc2dc\uac04 \uc120\ud0dd
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchEndDe=\uc870\ud68c\uc885\ub8cc\uc77c\uc790 \uc785\ub825
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchEndHour=\uc870\ud68c\uc885\ub8cc \uc2dc\uac04 \uc120\ud0dd
+comUtlSysNsm.ntwrkSvcMntrngLog.title.searchWrd=\uac80\uc0c9\uc5b4 \uc785\ub825
+
+
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/nsm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_en.properties (revision 7)
@@ -0,0 +1,32 @@
+#Synchrized Server#
+comUtlSysSsy.download.msg=Do you want to download it?
+comUtlSysSsy.sync.msg=Are you sure you want to sync?
+
+comUtlSysSsy.synchrn.title=Sync files
+comUtlSysSsy.synchrnServer.title=Synchronization target server
+comUtlSysSsy.synchrnServerFile.title=Sync target file
+
+comUtlSysSsy.synchrnServer.serverId.label=Server ID
+comUtlSysSsy.synchrnServer.serverNm.label=Server Name
+comUtlSysSsy.synchrnServer.serverIp.label=Server IP
+comUtlSysSsy.synchrnServer.serverPort.label=Server Port
+comUtlSysSsy.synchrnServer.ftpId.label=FTP ID
+comUtlSysSsy.synchrnServer.ftpPassword.label=FTP Password
+comUtlSysSsy.synchrnServer.synchrnLc.label=Sync Location
+comUtlSysSsy.synchrnServer.reflctAt.label=Sync Status
+comUtlSysSsy.synchrnServer.lastUpdusrId.label=registrant
+
+comUtlSysSsy.synchrnServer.fileSelect.label=Select File
+comUtlSysSsy.synchrnServer.seq.label=num.
+comUtlSysSsy.synchrnServer.fileNm.label=File Name
+comUtlSysSsy.synchrnServer.fileList.label=List of files
+comUtlSysSsy.synchrnServer.fileDownload.label=DownLoad
+comUtlSysSsy.synchrnServer.fileDelete.label=delete
+comUtlSysSsy.synchrnServer.nofile.label=Server connection is not possible
+
+comUtlSysSsy.synchrnServer.validate.noList=No synced target list.
+comUtlSysSsy.synchrnServer.validate.noSelectedFile=No files selected.
+comUtlSysSsy.synchrnServer.validate.noQueryResult=No query results found.
+comUtlSysSsy.synchrnServer.synch=synchronization
+comUtlSysSsy.synchrnServer.validate.exceptIP=is an exceptional IP.
+comUtlSysSsy.synchrnServer.validate.misMatchIP=IP format mismatch.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_ko.properties (revision 7)
@@ -0,0 +1,32 @@
+#\ud30c\uc77c\ub3d9\uae30\ud654(\ub300\uc0c1\uc11c\ubc84)#
+comUtlSysSsy.download.msg=\ub2e4\uc6b4\ub85c\ub4dc\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+comUtlSysSsy.sync.msg=\ub3d9\uae30\ud654\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+
+comUtlSysSsy.synchrn.title=\ub3d9\uae30\ud654\ud30c\uc77c
+comUtlSysSsy.synchrnServer.title=\ub3d9\uae30\ud654\ub300\uc0c1 \uc11c\ubc84
+comUtlSysSsy.synchrnServerFile.title=\ub3d9\uae30\ud654\ub300\uc0c1 \ud30c\uc77c
+
+comUtlSysSsy.synchrnServer.serverId.label=\uc11c\ubc84ID
+comUtlSysSsy.synchrnServer.serverNm.label=\uc11c\ubc84\uba85
+comUtlSysSsy.synchrnServer.serverIp.label=\uc11c\ubc84 IP
+comUtlSysSsy.synchrnServer.serverPort.label=\uc11c\ubc84 Port
+comUtlSysSsy.synchrnServer.ftpId.label=FTP ID
+comUtlSysSsy.synchrnServer.ftpPassword.label=FTP \ube44\ubc00\ubc88\ud638
+comUtlSysSsy.synchrnServer.synchrnLc.label=\ub3d9\uae30\ud654 \uc704\uce58
+comUtlSysSsy.synchrnServer.reflctAt.label=\ub3d9\uae30\ud654 \uc5ec\ubd80
+comUtlSysSsy.synchrnServer.lastUpdusrId.label=\ub4f1\ub85d\uc790
+
+comUtlSysSsy.synchrnServer.fileSelect.label=\ud30c\uc77c \uc120\ud0dd
+comUtlSysSsy.synchrnServer.seq.label=\uc21c\ubc88
+comUtlSysSsy.synchrnServer.fileNm.label=\ud30c\uc77c\uba85
+comUtlSysSsy.synchrnServer.fileList.label=\ud30c\uc77c \ubaa9\ub85d
+comUtlSysSsy.synchrnServer.fileDownload.label=\ub2e4\uc6b4\ub85c\ub4dc
+comUtlSysSsy.synchrnServer.fileDelete.label=\uc0ad\uc81c
+comUtlSysSsy.synchrnServer.nofile.label=\uc11c\ubc84\uc811\uc18d\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4
+
+comUtlSysSsy.synchrnServer.validate.noList=\ub3d9\uae30\ud654 \ub300\uc0c1\ubaa9\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUtlSysSsy.synchrnServer.validate.noSelectedFile=\uc120\ud0dd\ub41c \ud30c\uc77c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUtlSysSsy.synchrnServer.validate.noQueryResult=\uc870\ud68c\ub41c \uacb0\uacfc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+comUtlSysSsy.synchrnServer.synch=\ub3d9\uae30\ud654
+comUtlSysSsy.synchrnServer.validate.exceptIP=\ub294 \uc608\uc678 \uc544\uc774\ud53c \uc785\ub2c8\ub2e4.
+comUtlSysSsy.synchrnServer.validate.misMatchIP=IP \ud615\uc2dd\uc774 \uc77c\uce58 \ud558\uc9c0\uc54a\uc2b5\ub2c8\ub2e4.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/ssy/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_en.properties (revision 7)
@@ -0,0 +1,24 @@
+#Process Monitoring#
+comUtlSysPrm.comUtlProcessMonList.title = Process Monitoring List
+comUtlSysPrm.comUtlProcessMonDetail.title = Process Monitoring Details
+comUtlSysPrm.comUtlProcessMonDetail.summary = This table provides information about the process monitoring targets and consists of process name, status, administrator name, and administrator email.
+comUtlSysPrm.comUtlProcessMonModify.title = Modifying Process Monitoring
+comUtlSysPrm.comUtlProcessMonRegist.title = Register Process Monitoring
+comUtlSysPrm.comUtlProcessMonLogList.title = Process Monitoring Log List
+comUtlSysPrm.comUtlProcessMonLogDetail.title = Process Monitoring Log Details
+comUtlSysPrm.comUtlProcessMonLogDetail.summary = This table provides the process monitoring log target information and consists of the logID, process ID, process name, status, log, and the last generation date.
+
+comUtlSysPrm.comUtlProcessMon.seq = No
+comUtlSysPrm.comUtlProcessMon.logID = LogID
+comUtlSysPrm.comUtlProcessMon.processID = Process ID
+comUtlSysPrm.comUtlProcessMon.processName = Process Name
+comUtlSysPrm.comUtlProcessMon.status = Status
+comUtlSysPrm.comUtlProcessMon.logInfo = Log
+comUtlSysPrm.comUtlProcessMon.managerName = Manager
+comUtlSysPrm.comUtlProcessMon.managerEmail = Email
+comUtlSysPrm.comUtlProcessMon.createdDateTime = Created Datetime
+comUtlSysPrm.comUtlProcessMon.lastCreatedDateTime = Lastly Created Datetime
+comUtlSysPrm.comUtlProcessMon.searchBgnDe = Enter Start Date
+comUtlSysPrm.comUtlProcessMon.searchBgnHour = Select Start Hour
+comUtlSysPrm.comUtlProcessMon.searchEndDe = Enter End Date
+comUtlSysPrm.comUtlProcessMon.searchEndHour = Select End hour
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_ko.properties (revision 7)
@@ -0,0 +1,24 @@
+#\ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1#
+comUtlSysPrm.comUtlProcessMonList.title = \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ubaa9\ub85d
+comUtlSysPrm.comUtlProcessMonDetail.title = \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \uc0c1\uc138\uc870\ud68c
+comUtlSysPrm.comUtlProcessMonDetail.summary = \uc774 \ud45c\ub294 \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ub300\uc0c1 \uc815\ubcf4\ub97c \uc81c\uacf5\ud558\uba70, \ud504\ub85c\uc138\uc2a4\uba85, \uc0c1\ud0dc, \uad00\ub9ac\uc790\uba85, \uad00\ub9ac\uc790\uc774\uba54\uc77c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
+comUtlSysPrm.comUtlProcessMonModify.title = \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \uc218\uc815
+comUtlSysPrm.comUtlProcessMonRegist.title = \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ub4f1\ub85d
+comUtlSysPrm.comUtlProcessMonLogList.title = \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \ubaa9\ub85d
+comUtlSysPrm.comUtlProcessMonLogDetail.title = \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \uc0c1\uc138\uc870\ud68c
+comUtlSysPrm.comUtlProcessMonLogDetail.summary = \uc774 \ud45c\ub294 \ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ub85c\uadf8 \ub300\uc0c1 \uc815\ubcf4\ub97c \uc81c\uacf5\ud558\uba70, \ub85c\uadf8ID, \ud504\ub85c\uc138\uc2a4ID, \ud504\ub85c\uc138\uc2a4\uba85, \uc0c1\ud0dc, \ub85c\uadf8, \ub9c8\uc9c0\ub9c9 \uc0dd\uc131\uc77c\uc2dc\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
+
+comUtlSysPrm.comUtlProcessMon.seq = \uc21c\ubc88
+comUtlSysPrm.comUtlProcessMon.logID = \ub85c\uadf8ID
+comUtlSysPrm.comUtlProcessMon.processID = \ud504\ub85c\uc138\uc2a4ID
+comUtlSysPrm.comUtlProcessMon.processName = \ud504\ub85c\uc138\uc2a4\uba85
+comUtlSysPrm.comUtlProcessMon.status = \uc0c1\ud0dc
+comUtlSysPrm.comUtlProcessMon.logInfo = \ub85c\uadf8
+comUtlSysPrm.comUtlProcessMon.managerName = \uad00\ub9ac\uc790\uba85
+comUtlSysPrm.comUtlProcessMon.managerEmail = \uad00\ub9ac\uc790\uc774\uba54\uc77c
+comUtlSysPrm.comUtlProcessMon.createdDateTime = \uc0dd\uc131\uc77c\uc2dc
+comUtlSysPrm.comUtlProcessMon.lastCreatedDateTime = \ub9c8\uc9c0\ub9c9 \uc0dd\uc131\uc77c\uc2dc
+comUtlSysPrm.comUtlProcessMon.searchBgnDe = \uc870\ud68c\uc2dc\uc791\uc77c\uc790 \uc785\ub825
+comUtlSysPrm.comUtlProcessMon.searchBgnHour = \uc870\ud68c\uc2dc\uc791 \uc2dc \uc120\ud0dd
+comUtlSysPrm.comUtlProcessMon.searchEndDe = \uc870\ud68c\uc885\ub8cc\uc77c\uc790 \uc785\ub825
+comUtlSysPrm.comUtlProcessMon.searchEndHour = \uc870\ud68c\uc885\ub8cc \uc2dc \uc120\ud0dd
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/prm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_en.properties (revision 7)
@@ -0,0 +1,41 @@
+#Server Resource Monitoring #
+
+ultSysScm.mntrngServer.Title=Server Resource Monitoring
+
+ultSysScm.mntrngServerList.Title=Server Resource Monitoring
+ultSysScm.mntrngServerList.ServerName=Server H/W Name
+
+ultSysScm.mntrngServerList.ServerId=Server H/W ID
+ultSysScm.mntrngServerList.ServerIp=Server H/W IP
+ultSysScm.mntrngServerList.ServerEmail=E-Mail
+
+ultSysScm.mntrngServerList.btnLog=Log
+
+
+#Server Resource Monitoring Log List#
+ultSysScm.mntrngResrceServerList.Title=Server Resource Monitoring Log
+ultSysScm.mntrngResrceServerList.scServerName=Server H/W Nm
+ultSysScm.mntrngResrceServerList.scBetween=between
+ultSysScm.mntrngResrceServerList.scFromDate=search start date
+ultSysScm.mntrngResrceServerList.scToDate=search start date
+
+ultSysScm.mntrngResrceServerList.listServerName=Server H/W Name
+ultSysScm.mntrngResrceServerList.listServerIp=Server H/W IP
+ultSysScm.mntrngResrceServerList.listCpuUse=CPU use
+ultSysScm.mntrngResrceServerList.lisMemoryUse=Memory use
+ultSysScm.mntrngResrceServerList.listServerStatus=Service status
+ultSysScm.mntrngResrceServerList.listCreateDatetime=Create date
+
+ultSysScm.mntrngResrceServerList.validate.datatFail=Date format is invalid!
+ultSysScm.mntrngResrceServerList.validate.datatCheck=Start date can not be greater than end date!
+
+#Server Resource Monitoring Log Detail#
+ultSysScm.mntrngServerDetail.Title=Server Resource Monitoring Log
+ultSysScm.mntrngServerDetail.logId=log ID
+ultSysScm.mntrngServerDetail.serverName=server H/W name
+ultSysScm.mntrngServerDetail.serverIp=server H/W IP
+ultSysScm.mntrngServerDetail.cpuUse=Cpu Use
+ultSysScm.mntrngServerDetail.memoryUse=Memory use
+ultSysScm.mntrngServerDetail.serviceStatus=Service status
+ultSysScm.mntrngServerDetail.logInfo=Log info
+ultSysScm.mntrngServerDetail.crateDate=Create date
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_ko.properties (revision 7)
@@ -0,0 +1,41 @@
+#\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1-\ub300\uc0c1\ubaa9\ub85d#
+
+ultSysScm.mntrngServer.Title=\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1
+
+ultSysScm.mntrngServerList.Title=\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1 \ubaa9\ub85d\uc870\ud68c
+ultSysScm.mntrngServerList.ServerName=\uc11c\ubc84H/W \uba85
+
+ultSysScm.mntrngServerList.ServerId=\uc11c\ubc84H/W ID
+ultSysScm.mntrngServerList.ServerIp=\uc11c\ubc84H/W IP
+ultSysScm.mntrngServerList.ServerEmail=\ub2f4\ub2f9\uc790 E-Mail
+
+ultSysScm.mntrngServerList.btnLog=\ub85c\uadf8
+
+
+#\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1 \ub85c\uadf8 \ubaa9\ub85d
+ultSysScm.mntrngResrceServerList.Title=\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1 \ub85c\uadf8
+ultSysScm.mntrngResrceServerList.scServerName=\uc11c\ubc84H/W \uba85
+ultSysScm.mntrngResrceServerList.scBetween=\uae30\uac04
+ultSysScm.mntrngResrceServerList.scFromDate=\uac80\uc0c9 \uc2dc\uc791\uc77c\uc790
+ultSysScm.mntrngResrceServerList.scToDate=\uac80\uc0c9 \uc885\ub8cc\uc77c\uc790
+
+ultSysScm.mntrngResrceServerList.listServerName=\uc11c\ubc84H/W \uba85
+ultSysScm.mntrngResrceServerList.listServerIp=\uc11c\ubc84H/W IP
+ultSysScm.mntrngResrceServerList.listCpuUse=CPU\uc0ac\uc6a9\ub960
+ultSysScm.mntrngResrceServerList.lisMemoryUse=\uba54\ubaa8\ub9ac\uc0ac\uc6a9\ub960
+ultSysScm.mntrngResrceServerList.listServerStatus=\uc11c\ube44\uc2a4\uc0c1\ud0dc
+ultSysScm.mntrngResrceServerList.listCreateDatetime=\uc0dd\uc131\uc77c\uc2dc
+
+ultSysScm.mntrngResrceServerList.validate.datatFail=\ub0a0\uc9dc \ud615\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4!
+ultSysScm.mntrngResrceServerList.validate.datatCheck=\uc2dc\uc791\uc77c\uc790\ub294 \uc885\ub8cc\uc77c\uc790\ubcf4\ub2e4 \ud074 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4!
+
+#\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1 \uc0c1\uc138\uc870\ud68c
+ultSysScm.mntrngServerDetail.Title=\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1 \ub85c\uadf8
+ultSysScm.mntrngServerDetail.logId=\ub85c\uadf8ID
+ultSysScm.mntrngServerDetail.serverName=\uc11c\ubc84H/W \uba85
+ultSysScm.mntrngServerDetail.serverIp=\uc11c\ubc84H/W IP
+ultSysScm.mntrngServerDetail.cpuUse=CPU\uc0ac\uc6a9\ub960
+ultSysScm.mntrngServerDetail.memoryUse=\uba54\ubaa8\ub9ac\uc0ac\uc6a9\ub960
+ultSysScm.mntrngServerDetail.serviceStatus=\uc11c\ube44\uc2a4\uc0c1\ud0dc
+ultSysScm.mntrngServerDetail.logInfo=\ub85c\uadf8\uc815\ubcf4
+ultSysScm.mntrngServerDetail.crateDate=\uc0dd\uc131\uc77c\uc2dc
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/srm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_en.properties (revision 7)
@@ -0,0 +1,31 @@
+#DB Monitoring#
+comUtlSysDbm.dbMntrngList.title = DB Service Monitoring List
+comUtlSysDbm.dbMntrngDetail.title = DB Service Monitoring Details
+comUtlSysDbm.dbMntrngDetail.summary = Provides details about registered DB service monitoring.
+comUtlSysDbm.dbMntrngModify.title = Modify DB Service Monitoring
+comUtlSysDbm.dbMntrngModify.summary = DB service monitoring modification function is provided.
+comUtlSysDbm.dbMntrngRegist.title = Register DB Service Monitoring
+comUtlSysDbm.dbMntrngLogList.title = DB Service Monitoring Log List
+comUtlSysDbm.dbMntrngLogDetail.title = DB Service Monitoring Log Details
+comUtlSysDbm.dbMntrngLogDetail.summary = Provides details about the registered DB ServiceMonitor.
+
+comUtlSysDbm.dbMntrng.period = Period
+comUtlSysDbm.dbMntrng.seq = No
+comUtlSysDbm.dbMntrng.logID = LogID
+comUtlSysDbm.dbMntrng.dataSourceName = Data Source
+comUtlSysDbm.dbMntrng.serverName = Server Name
+comUtlSysDbm.dbMntrng.dbms = DBMS
+comUtlSysDbm.dbMntrng.managerName = Manager Name
+comUtlSysDbm.dbMntrng.managerEmail = Email
+comUtlSysDbm.dbMntrng.createdDateTime = Created Datetime
+comUtlSysDbm.dbMntrng.status = Status
+comUtlSysDbm.dbMntrng.checkSQL = Check SQL
+comUtlSysDbm.dbMntrng.monitoringDatetime = Monitoring Datetime
+comUtlSysDbm.dbMntrng.logInfo = Log Info.
+
+comUtlSysDbm.dbMntrng.searchStartDate = Search start date
+comUtlSysDbm.dbMntrng.searchStartHour = Search start hour
+comUtlSysDbm.dbMntrng.searchStartMin = Search start minute
+comUtlSysDbm.dbMntrng.searchEndDate = Search end date
+comUtlSysDbm.dbMntrng.searchEndHour = Search end hour
+comUtlSysDbm.dbMntrng.searchEndMin = Search end minute
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_ko.properties (revision 7)
@@ -0,0 +1,31 @@
+#DB\ubaa8\ub2c8\ud130\ub9c1#
+comUtlSysDbm.dbMntrngList.title = DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ubaa9\ub85d
+comUtlSysDbm.dbMntrngDetail.title = DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \uc0c1\uc138\uc870\ud68c
+comUtlSysDbm.dbMntrngDetail.summary = \ub4f1\ub85d\ub41c DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1\uc5d0 \ub300\ud55c \uc0c1\uc138\uc815\ubcf4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
+comUtlSysDbm.dbMntrngModify.title = DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \uc218\uc815
+comUtlSysDbm.dbMntrngModify.summary = DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \uc218\uc815\uae30\ub2a5\uc744 \uc81c\uacf5\ud55c\ub2e4.
+comUtlSysDbm.dbMntrngRegist.title = DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1 \ub4f1\ub85d
+comUtlSysDbm.dbMntrngLogList.title = DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \ubaa9\ub85d
+comUtlSysDbm.dbMntrngLogDetail.title = DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \uc0c1\uc138\uc870\ud68c
+comUtlSysDbm.dbMntrngLogDetail.summary = \ub4f1\ub85d\ub41c DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8\uc5d0 \ub300\ud55c \uc0c1\uc138\uc815\ubcf4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
+
+comUtlSysDbm.dbMntrng.period = \uae30\uac04
+comUtlSysDbm.dbMntrng.seq = \uc21c\ubc88
+comUtlSysDbm.dbMntrng.logID = \ub85c\uadf8ID
+comUtlSysDbm.dbMntrng.dataSourceName = \ub370\uc774\ud0c0\uc18c\uc2a4\uba85
+comUtlSysDbm.dbMntrng.serverName = \uc11c\ubc84\uba85
+comUtlSysDbm.dbMntrng.dbms = DBMS\uc885\ub958
+comUtlSysDbm.dbMntrng.managerName = \uad00\ub9ac\uc790\uba85
+comUtlSysDbm.dbMntrng.managerEmail = \uad00\ub9ac\uc790\uc774\uba54\uc77c
+comUtlSysDbm.dbMntrng.createdDateTime = \uc0dd\uc131\uc77c\uc2dc
+comUtlSysDbm.dbMntrng.status = \uc0c1\ud0dc
+comUtlSysDbm.dbMntrng.checkSQL = \uccb4\ud06cSQL
+comUtlSysDbm.dbMntrng.monitoringDatetime = \ubaa8\ub2c8\ud130\ub9c1\uc2dc\uac01
+comUtlSysDbm.dbMntrng.logInfo = \ub85c\uadf8\uc815\ubcf4
+
+comUtlSysDbm.dbMntrng.searchStartDate = \uac80\uc0c9\uc2dc\uc791\uc77c\uc790
+comUtlSysDbm.dbMntrng.searchStartHour = \uac80\uc0c9\uc2dc\uc791\uc2dc\uac04
+comUtlSysDbm.dbMntrng.searchStartMin = \uac80\uc0c9\uc2dc\uc791\ubd84
+comUtlSysDbm.dbMntrng.searchEndDate = \uac80\uc0c9\uc885\ub8cc\uc77c\uc790
+comUtlSysDbm.dbMntrng.searchEndHour = \uac80\uc0c9\uc885\ub8cc\uc2dc\uac04
+comUtlSysDbm.dbMntrng.searchEndMin = \uac80\uc0c9\uc885\ub8cc\ubd84
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/dbm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_en.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_en.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_en.properties (revision 7)
@@ -0,0 +1,33 @@
+#Transmission and reception monitoring#
+comUtlSysTrm.trsmrcvMntrngList.title = Transmission and Reception Monitoring List
+comUtlSysTrm.trsmrcvMntrngDetail.title = Transmission and Reception Monitoring Details
+comUtlSysTrm.trsmrcvMntrngDetail.summary = Provides details about registered transmission and reception monitoring.
+comUtlSysTrm.trsmrcvMntrngUpdt.title = Modifying Transmission and Reception Monitoring
+comUtlSysTrm.trsmrcvMntrngUpdt.summary = It provides a function to modify transmission and reception monitoring.
+comUtlSysTrm.trsmrcvMntrngRegist.title = Register Transmission and Reception Monitoring
+comUtlSysTrm.trsmrcvMntrngLogList.title = Transmission and Reception Monitoring Log List
+comUtlSysTrm.trsmrcvMntrngLogDetail.title = Transmission and Reception Monitoring Log Details
+comUtlSysTrm.trsmrcvMntrngLogDetail.summary = Provides detailed information about the sending and receiving monitor logs.
+
+comUtlSysTrm.trsmrcvMntrng.logID = LogID
+comUtlSysTrm.trsmrcvMntrng.interOperationID = Link ID
+comUtlSysTrm.trsmrcvMntrng.interOperationName = Link Name
+comUtlSysTrm.trsmrcvMntrng.interOperationPopup = Link information check pop-up provided
+comUtlSysTrm.trsmrcvMntrng.testClassName = Test Class Name
+comUtlSysTrm.trsmrcvMntrng.managerName = Manager
+comUtlSysTrm.trsmrcvMntrng.managerEmail = Manager Email
+comUtlSysTrm.trsmrcvMntrng.monitoringDateTime = Monitoring Datetime
+comUtlSysTrm.trsmrcvMntrng.provider = Provider
+comUtlSysTrm.trsmrcvMntrng.provideSystem = Provider System
+comUtlSysTrm.trsmrcvMntrng.service = Services
+comUtlSysTrm.trsmrcvMntrng.requester = Requester
+comUtlSysTrm.trsmrcvMntrng.requestSystem = Reguesting System
+comUtlSysTrm.trsmrcvMntrng.status = Status
+comUtlSysTrm.trsmrcvMntrng.logInfo = Log Information
+
+comUtlSysTrm.trsmrcvMntrng.searchStartDate = Search start date
+comUtlSysTrm.trsmrcvMntrng.searchStartHour = Search start hour
+comUtlSysTrm.trsmrcvMntrng.searchStartMin = Search start minute
+comUtlSysTrm.trsmrcvMntrng.searchEndDate = Search end date
+comUtlSysTrm.trsmrcvMntrng.searchEndHour = Search end hour
+comUtlSysTrm.trsmrcvMntrng.searchEndMin = Search end minute
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_en.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_ko.properties (revision 7)
@@ -0,0 +1,33 @@
+#\uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1#
+comUtlSysTrm.trsmrcvMntrngList.title = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1 \ubaa9\ub85d
+comUtlSysTrm.trsmrcvMntrngDetail.title = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1 \uc0c1\uc138\uc870\ud68c
+comUtlSysTrm.trsmrcvMntrngDetail.summary = \ub4f1\ub85d\ub41c \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1\uc5d0 \ub300\ud55c \uc0c1\uc138\uc815\ubcf4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
+comUtlSysTrm.trsmrcvMntrngUpdt.title = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1 \uc218\uc815
+comUtlSysTrm.trsmrcvMntrngUpdt.summary = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1 \uc218\uc815\uae30\ub2a5\uc744 \uc81c\uacf5\ud55c\ub2e4.
+comUtlSysTrm.trsmrcvMntrngRegist.title = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1 \ub4f1\ub85d
+comUtlSysTrm.trsmrcvMntrngLogList.title = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \ubaa9\ub85d
+comUtlSysTrm.trsmrcvMntrngLogDetail.title = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8 \uc0c1\uc138\uc870\ud68c
+comUtlSysTrm.trsmrcvMntrngLogDetail.summary = \uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1\ub85c\uadf8\uc5d0 \ub300\ud55c \uc0c1\uc138\uc815\ubcf4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.
+
+comUtlSysTrm.trsmrcvMntrng.logID = \ub85c\uadf8ID
+comUtlSysTrm.trsmrcvMntrng.interOperationID = \uc5f0\uacc4ID
+comUtlSysTrm.trsmrcvMntrng.interOperationName = \uc5f0\uacc4\uba85
+comUtlSysTrm.trsmrcvMntrng.interOperationPopup = \uc5f0\uacc4\uc815\ubcf4\uc870\ud68c\ud31d\uc5c5 \uc81c\uacf5
+comUtlSysTrm.trsmrcvMntrng.testClassName = \ud14c\uc2a4\ud2b8\ud074\ub798\uc2a4\uba85
+comUtlSysTrm.trsmrcvMntrng.managerName = \uad00\ub9ac\uc790\uba85
+comUtlSysTrm.trsmrcvMntrng.managerEmail = \uad00\ub9ac\uc790\uc774\uba54\uc77c
+comUtlSysTrm.trsmrcvMntrng.monitoringDateTime = \ubaa8\ub2c8\ud130\ub9c1\uc2dc\uac01
+comUtlSysTrm.trsmrcvMntrng.provider = \uc81c\uacf5\uae30\uad00
+comUtlSysTrm.trsmrcvMntrng.provideSystem = \uc81c\uacf5\uc2dc\uc2a4\ud15c
+comUtlSysTrm.trsmrcvMntrng.service = \uc81c\uacf5\uc11c\ube44\uc2a4
+comUtlSysTrm.trsmrcvMntrng.requester = \uc694\uccad\uae30\uad00
+comUtlSysTrm.trsmrcvMntrng.requestSystem = \uc694\uccad\uc2dc\uc2a4\ud15c
+comUtlSysTrm.trsmrcvMntrng.status = \uc0c1\ud0dc
+comUtlSysTrm.trsmrcvMntrng.logInfo = \ub85c\uadf8\uc815\ubcf4
+
+comUtlSysTrm.trsmrcvMntrng.searchStartDate = \uac80\uc0c9\uc2dc\uc791\uc77c\uc790
+comUtlSysTrm.trsmrcvMntrng.searchStartHour = \uac80\uc0c9\uc2dc\uc791\uc2dc\uac04
+comUtlSysTrm.trsmrcvMntrng.searchStartMin = \uac80\uc0c9\uc2dc\uc791\ubd84
+comUtlSysTrm.trsmrcvMntrng.searchEndDate = \uac80\uc0c9\uc885\ub8cc\uc77c\uc790
+comUtlSysTrm.trsmrcvMntrng.searchEndHour = \uac80\uc0c9\uc885\ub8cc\uc2dc\uac04
+comUtlSysTrm.trsmrcvMntrng.searchEndMin = \uac80\uc0c9\uc885\ub8cc\ubd84
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/utl/sys/trm/message_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/message/com/message-common_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/message-common_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/message-common_ko.properties (revision 7)
@@ -0,0 +1,191 @@
+fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
+fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1}
+info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+#UI Common resource#
+table.num=\ubc88\ud638
+table.regdate=\ub4f1\ub85d\uc77c
+table.reger=\ub4f1\ub85d\uc790
+table.select=\uc120\ud0dd
+title.html=egovframe common component
+title.detail=\uc0c1\uc138\uc870\ud68c
+title.inquire=\uc870\ud68c
+title.update=\uc218\uc815
+title.create=\ub4f1\ub85d
+title.delete=\uc0ad\uc81c
+title.save=\uc800\uc7a5
+title.list=\ubaa9\ub85d
+title.searchCondition=\uac80\uc0c9\uc870\uac74
+title.search=\uac80\uc0c9\uc5b4
+title.reply=\ub2f5\uae00
+title.scrap=\uc2a4\ud06c\ub7a9
+title.comment=\ub313\uae00
+title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd
+title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c
+title.link=\ub9c1\ud06c
+title.management=\uad00\ub9ac
+title.all=\uc804\uccb4
+
+input.select=\uc120\ud0dd\ud558\uc138\uc694
+input.cSelect=\uc120\ud0dd
+input.input=\uc785\ub825
+input.button=\ubc84\ud2bc
+input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4
+input.yes=\uc608
+input.no=\uc544\ub2c8\uc624
+
+select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd
+
+button.select=\uc120\ud0dd
+button.search=\uac80\uc0c9
+button.use=\uc0ac\uc6a9
+button.notUsed=\uc0ac\uc6a9\uc911\uc9c0
+button.inquire=\uc870\ud68c
+button.update=\uc218\uc815
+button.create=\ub4f1\ub85d
+button.delete=\uc0ad\uc81c
+button.deleteDatabase=\uc644\uc804\uc0ad\uc81c
+button.close=\ub2eb\uae30
+button.save=\uc800\uc7a5
+button.list=\ubaa9\ub85d
+button.reset=\ucde8\uc18c
+button.passwordUpdate=\uc554\ud638\ubcc0\uacbd
+button.subscribe=\uac00\uc785\uc2e0\uccad
+button.realname=\uc2e4\uba85\ud655\uc778
+button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
+button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
+button.agree=\ub3d9\uc758
+button.disagree=\ube44\ub3d9\uc758
+button.possible=\uac00\ub2a5
+button.impossible=\ubd88\uac00\ub2a5
+button.qnaregist=Q&A\ub4f1\ub85d
+button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d
+button.preview=\ubbf8\ub9ac\ubcf4\uae30
+button.next=\ub2e4\uc74c
+button.add=\ubc14\ub85c\ucd94\uac00
+button.confirm=\ud655\uc778
+button.back = \ub4a4\ub85c
+button.yes = \uc608
+button.no = \uc544\ub2c8\uc624
+button.home = \ud648
+button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0
+button.cop = \ud611\uc5c5
+button.wrkstart = \ucd9c\uadfc
+button.wrkend = \ud1f4\uadfc
+button.reply = \ub2f5\uae00
+button.scrap = \uc2a4\ud06c\ub7a9
+button.comment = \ub313\uae00
+button.excel = \uc5d1\uc140
+button.init=\ucd08\uae30\ud654
+button.acknowledgment=\uc2b9\uc778
+button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c
+button.bulkUpload=\uc77c\uad04\ub4f1\ub85d
+button.log = \ub85c\uadf8
+button.set = \uc124\uc815
+button.move = \uc774\ub3d9
+
+#UI Common Message#
+common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
+
+common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
+common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4.
+common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4.
+common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
+
+common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694
+common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4.
+common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
+common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+
+common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4.
+common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4.
+
+fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
+fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
+fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
+fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
+fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
+fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4!
+fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558)
+fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
+fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+
+#UI User Message#
+fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
+success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
+fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328)
+info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
+success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
+fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+
+#Vlidator Errors#
+errors.prefix=<div class="error">
+errors.suffix=</div><br/>
+
+errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4.
+errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
+errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4.
+errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
+errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+errors.integer={0}\uc740(\ub294) integer \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+errors.float={0}\uc740(\ub294) float \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+
+errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
+errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
+errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4.
+errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4.
+
+errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4.
+errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4.
+errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4.
+errors.english={0}\uc740(\ub294) \uc601\ubb38\ub9cc \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc788\uc2b5\ub2c8\ub2e4.
+errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
+errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
+errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+errors.pwdcheckcomb3={0}\uc740(\ub294) \uc601\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569\uc73c\ub85c \uc774\ub8e8\uc5b4 \uc838\uc57c \ud569\ub2c8\ub2e4.
+errors.pwdcheckcomb4={0}\uc740(\ub294) \uc601\ubb38\ub300\ubb38\uc790,\uc601\ubb38\uc18c\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569\uc73c\ub85c \uc774\ub8e8\uc5b4 \uc838\uc57c \ud569\ub2c8\ub2e4.
+errors.pwdcheckseries={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 3\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+errors.pwdcheckrepeat={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 3\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+error.security.runtime.error = error
+
+info.password.rule.password1 = - 8\uc774\uc0c1 20\uc790\ub9ac \uc774\ud558
+info.password.rule.pwdcheckcomb3 = - \uc601\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569
+info.password.rule.pwdcheckcomb4 = - \uc601\ubb38\ub300\ubb38\uc790,\uc601\ubb38\uc18c\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569
+info.password.rule.pwdcheckseries = - 3\uc790\ub9ac \uc774\uc0c1 \ubc18\ubcf5 \ub610\ub294 \uc5f0\uc18d\ub41c \ubb38\uc790 \uc0ac\uc6a9 \uae08\uc9c0. \uc608)kkk , 321 \ub4f1 \uc0ac\uc6a9\uae08\uc9c0
+
+#Xss Errors#
+errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
+
+#File Upload / Download
+errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
+errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
+success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+
Property changes on: base3.10/src/main/resources/egovframework/message/com/message-common_ko.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-excel.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-excel.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-excel.xml (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <bean id="excelZipService" class="egovframework.rte.fdl.excel.impl.EgovExcelServiceImpl">
+ <property name="mapClass" value="egovframework.com.sym.ccm.zip.service.impl.EgovCcmExcelZipMapping" />
+ <property name="sqlSessionTemplate" ref="egov.sqlSessionTemplate" />
+ </bean>
+
+ <bean id="excelRdnmadZipService" class="egovframework.rte.fdl.excel.impl.EgovExcelServiceImpl">
+ <property name="mapClass" value="egovframework.com.sym.ccm.zip.service.impl.EgovCcmExcelRdnmadZipMapping" />
+ <property name="sqlSessionTemplate" ref="egov.sqlSessionTemplate" />
+ </bean>
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-excel.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-LoginLog.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-LoginLog.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-LoginLog.xml (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- Login Log... START-->
+ <bean name="egovLoginLogIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="loginLogStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="LOGINLOG_ID"/>
+ </bean>
+ <bean name="loginLogStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="LOGIN_" />
+ <property name="cipers" value="14" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- Login Log... END-->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-LoginLog.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-File.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-File.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-File.xml (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <bean name="egovFileIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="fileStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="FILE_ID"/>
+ </bean>
+ <bean name="fileStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="FILE_" />
+ <property name="cipers" value="15" />
+ <property name="fillChar" value="0" />
+ </bean>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-File.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-editor.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-editor.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-editor.xml (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 에디터 파일 -->
+ <bean name="editorFileIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="editorFileIdStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="EDITOR_FILE_ID"/>
+ </bean>
+ <bean name="editorFileIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="EFI_" />
+ <property name="cipers" value="16" />
+ <property name="fillChar" value="0" />
+ </bean>
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-editor.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AnswerNo.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AnswerNo.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AnswerNo.xml (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 답글 ANSWER_NO 생성 -->
+ <bean name="egovAnswerNoGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="answerNoStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="ANSWER_NO"/>
+ </bean>
+ <bean name="answerNoStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="cipers" value="20" />
+ </bean>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AnswerNo.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Clb.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Clb.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Clb.xml (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <bean name="egovClbIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="clbStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="CLB_ID"/>
+ </bean>
+ <bean name="clbStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="CLB_" />
+ <property name="cipers" value="16" />
+ <property name="fillChar" value="0" />
+ </bean>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Clb.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-WebLog.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-WebLog.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-WebLog.xml (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- Web Log... START-->
+ <bean name="egovWebLogIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="webLogStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="WEBLOG_ID"/>
+ </bean>
+ <bean name="webLogStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="WEBLOG_" />
+ <property name="cipers" value="13" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- Web Log... END-->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-WebLog.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-UsrCnfrm.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-UsrCnfrm.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-UsrCnfrm.xml (revision 7)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <bean name="egovUsrCnfrmIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="usrCnfrmStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="USRCNFRM_ID"/>
+ </bean>
+ <bean name="usrCnfrmStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="USRCNFRM_" />
+ <property name="cipers" value="11" />
+ <property name="fillChar" value="0" />
+ </bean>
+
+ <!-- 부서 ID -->
+ <bean name="egovDeptManageIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="orgnztIdStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="ORGNZT_ID"/>
+ </bean>
+ <bean name="orgnztIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="ORGNZT_" />
+ <property name="cipers" value="13" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- 부서 ID -->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-UsrCnfrm.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Group.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Group.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Group.xml (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 그룹 -->
+ <bean name="egovGroupIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="groupIdStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="GROUP_ID"/>
+ </bean>
+ <bean name="groupIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="GROUP_" />
+ <property name="cipers" value="14" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- 그룹 -->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Group.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Role.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Role.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Role.xml (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 롤 ID -->
+ <bean name="egovRoleIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="roleIdStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="ROLE_ID"/>
+ </bean>
+ <bean name="roleIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="" />
+ <property name="cipers" value="6" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- 롤 ID -->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-Role.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-SysLog.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-SysLog.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-SysLog.xml (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- System Log... START-->
+ <bean name="egovSysLogIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="sysLogStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="SYSLOG_ID"/>
+ </bean>
+ <bean name="sysLogStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="SYSLOG_" />
+ <property name="cipers" value="13" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- System Log... END-->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-SysLog.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-StsfdgNo.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-StsfdgNo.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-StsfdgNo.xml (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 답글 STSFDG_NO 생성 -->
+ <bean name="egovStsfdgNoGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="stsfdgNoStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="STSFDG_NO"/>
+ </bean>
+ <bean name="stsfdgNoStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="cipers" value="20" />
+ </bean>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-StsfdgNo.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-bbs.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-bbs.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-bbs.xml (revision 7)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <bean name="egovBBSMstrIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="bbsMstrStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="BBS_ID"/>
+ </bean>
+ <bean name="bbsMstrStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="BBSMSTR_" />
+ <property name="cipers" value="12" />
+ <property name="fillChar" value="0" />
+ </bean>
+
+ <!-- 게시판용 NTT_ID 생성 -->
+ <bean name="egovNttIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="nttIdStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="NTT_ID"/>
+ </bean>
+ <bean name="nttIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="cipers" value="20" />
+ </bean>
+
+ <!-- 게시판용 BLOG_ID 생성 -->
+ <bean name="egovBlogIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="blogIdStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="BLOG_ID"/>
+ </bean>
+ <bean name="blogIdStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="BLOG_" />
+ <property name="cipers" value="15" />
+ <property name="fillChar" value="0" />
+ </bean>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-bbs.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-crypto.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-crypto.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-crypto.xml (revision 7)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:egov-crypto="http://maven.egovframe.go.kr/schema/egov-crypto"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://maven.egovframe.go.kr/schema/egov-crypto http://maven.egovframe.go.kr/schema/egov-crypto/egov-crypto-3.10.0.xsd">
+ <!--
+ initial : globals.properties 연계 Url, UserName, Password 값 로드 여부(설정값 : true, false)
+ crypto : 계정 암호화 여부(설정값 : true, false)
+ algorithm : 계정 암호화 알고리즘
+ algorithmKey : 계정 암호화키 키
+ cryptoBlockSize : 계정 암호화키 블록사이즈
+ cryptoPropertyLocation : 설정파일 암복호화 경로 (선택) 기본값은 'classpath:/egovframework/egovProps/globals.properties'
+ -->
+ <egov-crypto:config id="egovCryptoConfig"
+ initial="true"
+ crypto="true"
+ algorithm="SHA-256"
+ algorithmKey="egovframe"
+ algorithmKeyHash="gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ="
+ cryptoBlockSize="1024"
+ cryptoPropertyLocation="classpath:/egovframework/egovProps/globals.properties"
+ />
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-crypto.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-mapper.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-mapper.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-mapper.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 실행환경에서 빈이름 참조(EgovAbstractDAO) -->
+ <bean id="egov.lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
+
+ <!-- Mybatis setup for Mybatis Database Layer -->
+ <bean id="egov.sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
+ <property name="dataSource" ref="egov.dataSource"/>
+ <property name="configLocation" value="classpath:/egovframework/mapper/config/mapper-config.xml" />
+
+ <property name="mapperLocations">
+ <list>
+ <value>classpath:/egovframework/mapper/com/**/*_${Globals.DbType}.xml</value>
+ </list>
+ </property>
+ </bean>
+
+ <!-- Mybatis Session Template -->
+ <bean id="egov.sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
+ <constructor-arg ref="egov.sqlSession"/>
+ </bean>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-mapper.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-datasource.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-datasource.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-datasource.xml (revision 7)
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans
+ xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
+
+ <bean id="egov.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+ <property name="locations">
+ <list>
+ <value>classpath:/egovframework/egovProps/globals.properties</value>
+ <!-- value>file:/product/jeus/egovProps/globals.properties</value-->
+ </list>
+ </property>
+ </bean>
+
+ <!-- DataSource -->
+ <alias name="dataSource" alias="egov.dataSource" />
+
+ <!-- MySQL -->
+ <beans profile="mysql">
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
+ <property name="driverClassName" value="${Globals.mysql.DriverClassName}"/>
+ <property name="url" value="${Globals.mysql.Url}" />
+ <property name="username" value="${Globals.mysql.UserName}"/>
+ <!-- 암호화(Crypto) 관련 서비스 https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:crypto_simplify_v3_8 참조 -->
+ <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
+ </bean>
+ </beans>
+
+ <!-- oracle -->
+ <beans profile="oracle">
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
+ <property name="driverClassName" value="${Globals.oracle.DriverClassName}"/>
+ <property name="url" value="${Globals.oracle.Url}" />
+ <property name="username" value="${Globals.oracle.UserName}"/>
+ <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
+ </bean>
+ </beans>
+
+ <!-- altibase -->
+ <beans profile="altibase">
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
+ <property name="driverClassName" value="${Globals.altibase.DriverClassName}"/>
+ <property name="url" value="${Globals.altibase.Url}" />
+ <property name="username" value="${Globals.altibase.UserName}"/>
+ <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
+
+ <property name="validationQuery" value="select 1"/>
+ <property name="testWhileIdle" value="true"/>
+ </bean>
+ </beans>
+
+ <!-- tibero -->
+ <beans profile="tibero">
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
+ <property name="driverClassName" value="${Globals.tibero.DriverClassName}"/>
+ <property name="url" value="${Globals.tibero.Url}" />
+ <property name="username" value="${Globals.tibero.UserName}"/>
+ <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
+ </bean>
+ </beans>
+
+ <!-- cubrid -->
+ <beans profile="cubrid">
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
+ <property name="driverClassName" value="${Globals.cubrid.DriverClassName}"/>
+ <property name="url" value="${Globals.cubrid.Url}" />
+ <property name="username" value="${Globals.cubrid.UserName}"/>
+ <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
+
+ <property name="validationQuery" value="select 1"/>
+ <property name="testOnBorrow" value="false"/>
+ </bean>
+ </beans>
+ <!--
+ CUBRID 가이드 참조
+ https://www.cubrid.com/tutorial/3794188
+ * DBCP를 통해 최초 connection 시 해당 connection이 유효한지 체크하는 isValid를 호출
+ -->
+
+ <!-- MariaDB -->
+ <beans profile="maria">
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
+ <property name="driverClassName" value="${Globals.maria.DriverClassName}"/>
+ <property name="url" value="${Globals.maria.Url}" />
+ <property name="username" value="${Globals.maria.UserName}"/>
+ <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
+ </bean>
+ </beans>
+
+ <!-- PostresSQL -->
+ <beans profile="postgres">
+ <!-- 기본 설정
+ <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
+ <property name="driverClassName" value="${Globals.postgres.DriverClassName}"/>
+ <property name="url" value="${Globals.postgres.Url}" />
+ <property name="username" value="${Globals.postgres.UserName}"/>
+ <property name="password" value="#{egovEnvCryptoService.getPassword()}"/>
+ </bean> -->
+ <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
+ <property name="poolName" value="springHikariCP" />
+ <property name="connectionTestQuery" value="SELECT 1" />
+ <property name="dataSourceClassName" value="org.postgresql.ds.PGSimpleDataSource" />
+ <property name="dataSourceProperties">
+ <props>
+ <prop key="url">${Globals.postgres.Url}</prop>
+ <prop key="user">${Globals.postgres.UserName}</prop>
+ <prop key="password">#{egovEnvCryptoService.getPassword()}</prop>
+ </props>
+ </property>
+ </bean>
+ <!-- <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
+ <constructor-arg ref="hikariConfig" />
+ </bean> -->
+ <bean id="dataSource-psql-spied" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
+ <constructor-arg ref="hikariConfig" />
+ </bean>
+ <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
+ <constructor-arg ref="dataSource-psql-spied" />
+ <property name="logFormatter">
+ <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
+ <property name="loggingType" value="MULTI_LINE" />
+ <property name="sqlPrefix" value="" />
+ </bean>
+ </property>
+ </bean>
+
+ </beans>
+
+ <!-- DB Pool이 생성이 되더라고 특정 시간 호출되지 않으면 DBMS 설정에 따라 연결을 끊어질 때
+ 이 경우 DBCP를 사용하셨다면.. 다음과 같은 설정을 추가하시면 연결을 유지시켜 줍니다. -->
+ <!--
+ <property name="validationQuery" value="select 1 from dual" />
+ <property name="testWhileIdle" value="true" />
+ <property name="timeBetweenEvictionRunsMillis" value="60000" /> --> <!-- 1분 -->
+
+ <!-- DBCP가 아닌 WAS의 DataSource를 사용하시는 경우도 WAS별로 동일한 설정을 하실 수 있습니다.
+ (WAS별 구체적인 설정은 WAS document 확인) -->
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-datasource.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-whitelist.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-whitelist.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-whitelist.xml (revision 7)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+ <!-- /EgovPageLink.do 화이트 리스트 처리 (대상목록) -->
+ <util:list id="egovPageLinkWhitelist" value-type="java.lang.String">
+ <value>/egovframework/com/sym/mnu/stm/EgovSiteMap</value>
+ <value>/cmm/sym/mpm/EgovSiteMap</value>
+ <value>/egovframework/com/main_bottom</value>
+
+ <!-- <value>/egovframework/com/sec/rnc/EgovCallGpin</value>
+ <value>cmm/sec/rnc/EgovCallGpin</value>
+ <value>utl/sys/wsi/EgovWebStandardInspectionUriDirect</value>
+ <value>utl/sys/wsi/EgovWebStandardInspectionUri</value>
+ <value>utl/sys/wsi/EgovWebStandardInspectionUriDirectLink</value> -->
+ </util:list>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-whitelist.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-lgm.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-lgm.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-lgm.xml (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 시스템 로그 요약 -->
+ <bean id="sysLogging" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+ <property name="targetObject" ref="egovSysLogScheduling" />
+ <property name="targetMethod" value="sysLogSummary" />
+ <property name="concurrent" value="false" />
+ </bean>
+
+ <!-- 시스템 로그 요약 트리거-->
+ <bean id="sysLogTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+ <property name="jobDetail" ref="sysLogging" />
+ <!-- 시작하고 1분후에 실행한다. (milisecond) -->
+ <property name="startDelay" value="60000" />
+ <!-- 매 1시간마다 실행한다. (milisecond) -->
+ <property name="repeatInterval" value="3600000" />
+ </bean>
+
+ <!-- 시스템 로그 요약 스케줄러 -->
+ <bean id="sysLogScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
+ <property name="triggers">
+ <list>
+ <ref bean="sysLogTrigger" />
+ </list>
+ </property>
+ </bean>
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-lgm.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-wlg.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-wlg.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-wlg.xml (revision 7)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 웹 로그 요약 -->
+ <bean id="webLogging" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+ <property name="targetObject" ref="egovWebLogScheduling" />
+ <property name="targetMethod" value="webLogSummary" />
+ <property name="concurrent" value="false" />
+ </bean>
+
+ <!-- 웹 로그 요약 트리거-->
+ <bean id="webLogTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+ <property name="jobDetail" ref="webLogging" />
+ <property name="startDelay" value="60000" />
+ <property name="repeatInterval" value="3600000" />
+ </bean>
+
+ <!-- 웹 로그 요약 스케줄러 -->
+ <bean id="webLogScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
+ <property name="triggers">
+ <list>
+ <ref bean="webLogTrigger" />
+ </list>
+ </property>
+ </bean>
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-wlg.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-ulg.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-ulg.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-ulg.xml (revision 7)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 사용자 로그 생성 -->
+ <bean id="userLogging" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+ <property name="targetObject" ref="egovUserLogScheduling" />
+ <property name="targetMethod" value="userLogInsert" />
+ <property name="concurrent" value="false" />
+ </bean>
+
+ <!-- 사용자 로그 생성 트리거-->
+ <bean id="userLogTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+ <property name="jobDetail" ref="userLogging" />
+ <!-- 시작하고 1분후에 실행한다. (milisecond) -->
+ <property name="startDelay" value="60000" />
+ <!-- 매 1시간마다 실행한다. (milisecond) -->
+ <property name="repeatInterval" value="3600000" />
+ </bean>
+
+
+ <!-- 사용자 로그 생성 스케줄러 -->
+ <bean id="userLogScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
+ <property name="triggers">
+ <list>
+ <ref bean="userLogTrigger" />
+ </list>
+ </property>
+ </bean>
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/scheduling/context-scheduling-sym-log-ulg.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-syslogaop.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-syslogaop.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-syslogaop.xml (revision 7)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
+
+ <!-- System Log Aspect -->
+ <bean id="syslog" class="egovframework.com.sym.log.lgm.service.EgovSysLogAspect" />
+
+ <aop:config>
+ <aop:aspect id="sysLogAspect" ref="syslog">
+ <!-- insert로 시작되는 service Method -->
+ <aop:around pointcut="execution(public * egovframework.com..impl.*Impl.insert*(..))" method="logInsert" />
+ <!-- update로 시작되는 service Method -->
+ <aop:around pointcut="execution(public * egovframework.com..impl.*Impl.update*(..))" method="logUpdate" />
+ <!-- delete로 시작되는 service Method -->
+ <aop:around pointcut="execution(public * egovframework.com..impl.*Impl.delete*(..))" method="logDelete" />
+ <!-- select로 시작되는 service Method -->
+ <aop:around pointcut="execution(public * egovframework.com..impl.*Impl.select*(..))" method="logSelect" />
+ </aop:aspect>
+ </aop:config>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-syslogaop.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-security.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-security.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-security.xml (revision 7)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:egov-security="http://maven.egovframe.go.kr/schema/egov-security"
+ xmlns:security="http://www.springframework.org/schema/security"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
+ http://maven.egovframe.go.kr/schema/egov-security http://maven.egovframe.go.kr/schema/egov-security/egov-security-3.10.0.xsd">
+
+<!--
+수정일 수정자 수정내용
+========== ============ =================================================
+2011.09.07 서준식 일반, 업무사용자의 경우 조직아이디가 없어 로그인이 안되던 문제 수정(SQL 수정)
+2011.09.25 서준식 usersByUsernameQuery 쿼리의 조직 아이디 비교 부분 오류 수정 > alias 추가
+2014.06.13 Vincent Han 표준프레임워크 3.0 적용 (간소화 설정 사용)
+2017.07.10 장동한 실행행환경 v3.7 적용[보안기능 추가(sniff, xFrameOptions, xssProtection csrf)]
+2018.10.26 신용호 실행행환경 v3.8 적용
+2020.08.28 정진호 표준프레임워크 v3.10 개선
+
+-->
+
+ <security:http pattern="/css/**" security="none"/>
+ <security:http pattern="/html/**" security="none"/>
+ <security:http pattern="/images/**" security="none"/>
+ <security:http pattern="/js/**" security="none"/>
+ <security:http pattern="/resource/**" security="none"/>
+ <security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
+
+ <egov-security:config id="securityConfig"
+ loginUrl="/uat/uia/egovLoginUsr.do"
+ logoutSuccessUrl="/EgovContent.do"
+ loginFailureUrl="/uat/uia/egovLoginUsr.do?login_error=1"
+ accessDeniedUrl="/sec/ram/accessDenied.do"
+
+ dataSource="egov.dataSource"
+ jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP,
+ USER_ADRES, USER_EMAIL, USER_SE, ORGNZT_ID, ESNTL_ID,
+ (select a.ORGNZT_NM from COMTNORGNZTINFO a where a.ORGNZT_ID = m.ORGNZT_ID) ORGNZT_NM
+ FROM COMVNUSERMASTER m WHERE CONCAT(USER_SE, USER_ID) = ?"
+ jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY
+ FROM COMTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
+ WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
+ jdbcMapClass="egovframework.com.sec.security.common.EgovSessionMapping"
+
+ requestMatcherType="regex"
+ hash="plaintext"
+ hashBase64="false"
+
+ concurrentMaxSessons="1"
+ concurrentExpiredUrl="/EgovContent.do"
+ errorIfMaximumExceeded="false"
+
+ defaultTargetUrl="/EgovContent.do"
+ alwaysUseDefaultTargetUrl="true"
+
+ sniff="true"
+ xframeOptions="SAMEORIGIN"
+ xssProtection="true"
+ cacheControl="false"
+ csrf="false"
+ csrfAccessDeniedUrl="/egovCSRFAccessDenied.do"
+ />
+
+ <egov-security:secured-object-config id="securedObjectConfig"
+ sqlHierarchicalRoles="
+ SELECT a.CHLDRN_ROLE as child, a.PARNTS_ROLE parent
+ FROM COMTNROLES_HIERARCHY a LEFT JOIN COMTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)"
+ sqlRolesAndUrl="
+ SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority
+ FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
+ WHERE a.ROLE_CODE = b.ROLE_CODE
+ AND a.ROLE_TY = 'url' ORDER BY a.ROLE_SORT"
+ sqlRolesAndMethod="
+ SELECT a.ROLE_PTTRN as "method", b.AUTHOR_CODE authority
+ FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
+ WHERE a.ROLE_CODE = b.ROLE_CODE
+ AND a.ROLE_TY = 'method' ORDER BY a.ROLE_SORT"
+ sqlRolesAndPointcut="
+ SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority
+ FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
+ WHERE a.ROLE_CODE = b.ROLE_CODE
+ AND a.ROLE_TY = 'pointcut' ORDER BY a.ROLE_SORT"
+ sqlRegexMatchedRequestMapping="
+ SELECT a.ROLE_PTTRN uri, b.AUTHOR_CODE authority
+ FROM COMTNROLEINFO a, COMTNAUTHORROLERELATE b
+ WHERE a.ROLE_CODE = b.ROLE_CODE
+ AND a.ROLE_TY = 'regex'
+ ORDER BY a.ROLE_SORT"
+ />
+
+ <egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
+
+ <!-- URL에 세미콜론(semicolon)허용 여부(기본값/false) -->
+ <!--
+ <bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
+ <property name="allowSemicolon" value="true"/>
+ </bean>
+ <security:http-firewall ref="egovStrictHttpFirewall"/>
+ -->
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-security.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-config.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-config.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-config.xml (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- 로그인인증설정 -->
+ <bean id="egovLoginConfig" class="egovframework.com.cmm.config.EgovLoginConfig">
+ <!-- 로그인 인증 제한 여부 -->
+ <property name="lock" value="${Globals.login.Lock}"/>
+ <!-- 로그인 인증 제한 횟수 -->
+ <property name="lockCount" value="${Globals.login.LockCount}"/>
+ </bean>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-config.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-validator.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-validator.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-validator.xml (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <!-- Integration Apache Commons Validator by Spring Modules -->
+ <bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
+ <property name="validatorFactory" ref="validatorFactory"/>
+ </bean>
+
+ <bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
+ <property name="validationConfigLocations">
+ <list>
+ <!-- 공통기술 -->
+ <value>classpath:/egovframework/validator/com-rules.xml</value>
+ <value>classpath:/egovframework/validator/validator-rules.xml</value>
+ <value>classpath:/egovframework/validator/**/*.xml</value>
+ </list>
+ </property>
+ </bean>
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-validator.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-aspect.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-aspect.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-aspect.xml (revision 7)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
+
+ <aop:config>
+ <aop:pointcut id="egov.serviceMethod" expression="execution(* egovframework.com..impl.*Impl.*(..))" />
+
+ <aop:aspect ref="egov.exceptionTransfer">
+ <aop:after-throwing throwing="exception" pointcut-ref="egov.serviceMethod" method="transfer" />
+ </aop:aspect>
+ </aop:config>
+
+ <bean id="egov.exceptionTransfer" class="egovframework.rte.fdl.cmmn.aspect.ExceptionTransfer">
+ <property name="exceptionHandlerService">
+ <list>
+ <ref bean="defaultExceptionHandleManager" />
+ <ref bean="otherExceptionHandleManager" />
+ </list>
+ </property>
+ </bean>
+
+ <bean id="defaultExceptionHandleManager" class="egovframework.rte.fdl.cmmn.exception.manager.DefaultExceptionHandleManager">
+ <property name="reqExpMatcher">
+ <ref bean="egov.antPathMater"/>
+ </property>
+ <property name="patterns">
+ <list>
+ <value>**service.impl.*</value>
+ </list>
+ </property>
+ <property name="handlers">
+ <list>
+ <ref bean="egovHandler" />
+ </list>
+ </property>
+ </bean>
+
+ <bean id="otherExceptionHandleManager" class="egovframework.rte.fdl.cmmn.exception.manager.DefaultExceptionHandleManager">
+ <property name="reqExpMatcher">
+ <ref bean="egov.antPathMater"/>
+ </property>
+ <property name="patterns">
+ <list>
+ <value>**service.impl.*</value>
+ </list>
+ </property>
+ <property name="handlers">
+ <list>
+ <ref bean="otherHandler" />
+ </list>
+ </property>
+ </bean>
+
+ <bean id="egovHandler" class="egovframework.com.cmm.EgovComExcepHndlr" />
+ <bean id="otherHandler" class="egovframework.com.cmm.EgovComOthersExcepHndlr" />
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-aspect.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-common.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-common.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-common.xml (revision 7)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ 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">
+
+ <context:component-scan base-package="egovframework,froala">
+ <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
+ <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
+ <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
+ </context:component-scan>
+
+ <context:annotation-config/>
+
+ <!-- 국제화 Message 설정 -->
+ <bean id="messageSource" class="egovframework.com.cmm.util.EgovWildcardReloadableResourceBundleMessageSource">
+ <property name="egovBasenames">
+ <list>
+ <value>classpath*:egovframework/message/com/**/*</value>
+ <value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
+ <value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
+ <value>classpath:/egovframework/egovProps/globals</value>
+ </list>
+ </property>
+
+ <property name="cacheSeconds">
+ <value>60</value>
+ </property>
+ </bean>
+
+ <bean id="egovMessageSource" class="egovframework.com.cmm.EgovMessageSource">
+ <property name="reloadableResourceBundleMessageSource">
+ <ref bean="messageSource" />
+ </property>
+ </bean>
+
+ <!-- 실행환경에서 빈 이름 참조(AbstractServiceImpl) -->
+ <bean id="leaveaTrace" class="egovframework.rte.fdl.cmmn.trace.LeaveaTrace">
+ <property name="traceHandlerServices">
+ <list>
+ <ref bean="egov.traceHandlerService" />
+ </list>
+ </property>
+ </bean>
+
+ <bean id="egov.traceHandlerService" class="egovframework.rte.fdl.cmmn.trace.manager.DefaultTraceHandleManager">
+ <property name="reqExpMatcher">
+ <ref bean="egov.antPathMater" />
+ </property>
+ <property name="patterns">
+ <list>
+ <value>*</value>
+ </list>
+ </property>
+ <property name="handlers">
+ <list>
+ <ref bean="egov.defaultTraceHandler" />
+ </list>
+ </property>
+ </bean>
+
+ <bean id="egov.antPathMater" class="org.springframework.util.AntPathMatcher" />
+
+ <bean id="egov.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="-1" />
+ <property name="maxInMemorySize" value="100000000" />
+ </bean>
+
+ <!-- custom multi file resolver -->
+<!-- <bean id="local.MultiCommonsMultipartResolver" class="egovframework.com.cmm.web.EgovMultipartResolver"> -->
+<!-- <property name="maxUploadSize" value="50000000" /> -->
+<!-- <property name="maxInMemorySize" value="100000000" /> -->
+<!-- </bean> -->
+
+ <!-- choose one from above and alias it to the name Spring expects -->
+<!-- <alias name="local.MultiCommonsMultipartResolver" alias="multipartResolver" /> -->
+ <alias name="spring.RegularCommonsMultipartResolver" alias="multipartResolver" />
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-common.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-properties.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-properties.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-properties.xml (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+ <bean name="propertiesService" class="egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl" destroy-method="destroy">
+ <property name="properties">
+ <map>
+ <entry key="pageUnit" value="10"/>
+ <entry key="pageSize" value="10"/>
+ </map>
+ </property>
+ </bean>
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-properties.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/test-context-crypto.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/test-context-crypto.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/test-context-crypto.xml (revision 7)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:egov-crypto="http://maven.egovframe.go.kr/schema/egov-crypto"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://maven.egovframe.go.kr/schema/egov-crypto http://maven.egovframe.go.kr/schema/egov-crypto/egov-crypto-3.10.0.xsd">
+
+ <bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
+ <property name="useCodeAsDefaultMessage">
+ <value>true</value>
+ </property>
+ <property name="basenames">
+ <list>
+ <value>classpath:/egovframework/egovProps/globals</value>
+ </list>
+ </property>
+ </bean>
+
+ <!--
+ initial : globals.properties 연계 Url, UserName, Password 값 로드 여부(설정값 : true, false)
+ crypto : 계정 암호화 여부(설정값 : true, false)
+ algorithm : 계정 암호화 알고리즘
+ algorithmKey : 계정 암호화키 키
+ cryptoBlockSize : 계정 암호화키 블록사이즈
+ cryptoPropertyLocation : 설정파일 암복호화 경로 (선택) 기본값은 'classpath:/egovframework/egovProps/globals.properties'
+ -->
+ <egov-crypto:config id="egovCryptoConfig"
+ initial="true"
+ crypto="true"
+ algorithm="SHA-256"
+ algorithmKey="egovframe"
+ algorithmKeyHash="gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ="
+ cryptoBlockSize="1024"
+ cryptoPropertyLocation="classpath:/egovframework/egovProps/globals.properties"
+ />
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/test-context-crypto.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-egovuserdetailshelper.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-egovuserdetailshelper.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-egovuserdetailshelper.xml (revision 7)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
+
+<!--
+ 수정일 수성자 수정내용
+ =========== ======== =================================================
+ 2011.10.11 이기하 context-common.xml 파일에서 별도분리
+ 2016.06.21 장동한 spring profile 방식으로 변경 / 세션(Session), 시큐리티(Security) 인증
+ 2017.09.04 장동한 spring profile 이용한 더미(Dummy), 세션(Session), 시큐리티(Security)
+
+ ************************************************************************************************
+ 1.Spring Profile을 이용한 더미(Dummy) 사용자 인증
+
+ 2.Spring Profile을 이용한 세션(Session) 사용자 인증
+
+ 3.Spring Profile을 이용한 시큐리티(Security) 사용자 인증
+ ************************************************************************************************
+-->
+
+<!-- 1.더미(Dummy) 인증 -->
+<beans profile="dummy">
+ <bean id="egovUserDetailsHelper" class="egovframework.com.cmm.util.EgovUserDetailsHelper"
+ p:egovUserDetailsService="#{new egovframework.com.cmm.service.impl.EgoDummyUserDetailsServiceImpl()}"/>
+</beans>
+
+<!-- 2.세션(Session) 인증 -->
+<beans profile="session">
+ <bean id="egovUserDetailsHelper" class="egovframework.com.cmm.util.EgovUserDetailsHelper"
+ p:egovUserDetailsService="#{new egovframework.com.cmm.service.impl.EgovUserDetailsSessionServiceImpl()}"/>
+</beans>
+
+<!-- 3.시큐리티(Security) 인증 -->
+<beans profile="security">
+ <bean id="egovUserDetailsHelper" class="egovframework.com.cmm.util.EgovUserDetailsHelper">
+ <property name="egovUserDetailsService" ref="egovUserDetailsSecurityService" />
+ </bean>
+ <!-- 스프링 시큐리티를 이용한 인증을 사용할 빈 -->
+ <bean id="egovUserDetailsSecurityService" class="egovframework.com.sec.ram.service.impl.EgovUserDetailsSecurityServiceImpl"/>
+</beans>
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-egovuserdetailshelper.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/context-transaction.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/context-transaction.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/context-transaction.xml (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xmlns:tx="http://www.springframework.org/schema/tx"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
+ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
+
+ <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+ <property name="dataSource" ref="egov.dataSource"/>
+ </bean>
+
+ <tx:advice id="txAdvice" transaction-manager="txManager">
+ <tx:attributes>
+ <tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
+ </tx:attributes>
+ </tx:advice>
+
+ <aop:config>
+ <aop:pointcut id="requiredTx" expression="execution(* egovframework.com..*Impl.*(..)) or
+ execution(* egovframework.rte.fdl.excel.impl.*Impl.*(..))"/>
+ <aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
+ </aop:config>
+
+</beans>
Property changes on: base3.10/src/main/resources/egovframework/spring/com/context-transaction.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/social.sql
===================================================================
--- base3.10/src/main/resources/social.sql (nonexistent)
+++ base3.10/src/main/resources/social.sql (revision 7)
@@ -0,0 +1,14 @@
+create table UserConnection (
+ userId varchar(255) not null,
+ providerId varchar(255) not null,
+ providerUserId varchar(255),
+ rank int not null,
+ displayName varchar(255),
+ profileUrl varchar(512),
+ imageUrl varchar(512),
+ accessToken varchar(255) not null,
+ secret varchar(255),
+ refreshToken varchar(255),
+ expireTime bigint,
+ primary key (userId, providerId, providerUserId));
+create unique index UserConnectionRank on UserConnection(userId, providerId, rank);
\ No newline at end of file
Index: base3.10/src/main/resources/lucy-xss-servlet-filter-rule.xml
===================================================================
--- base3.10/src/main/resources/lucy-xss-servlet-filter-rule.xml (nonexistent)
+++ base3.10/src/main/resources/lucy-xss-servlet-filter-rule.xml (revision 7)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<config xmlns="http://www.navercorp.com/lucy-xss-servlet">
+ <defenders>
+ <!-- XssPreventer 등록 -->
+ <defender>
+ <name>xssPreventerDefender</name>
+ <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssPreventerDefender</class>
+ </defender>
+
+ <!-- XssSaxFilter 등록 -->
+ <defender>
+ <name>xssSaxFilterDefender</name>
+ <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssSaxFilterDefender</class>
+ <init-param>
+ <param-value>lucy-xss-sax.xml</param-value> <!-- lucy-xss-filter의 sax용 설정파일 -->
+ <param-value>false</param-value> <!-- 필터링된 코멘트를 남길지 여부, 성능 효율상 false 추천 -->
+ </init-param>
+ </defender>
+
+ <!-- XssFilter 등록 -->
+ <defender>
+ <name>xssFilterDefender</name>
+ <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssFilterDefender</class>
+ <init-param>
+ <param-value>lucy-xss.xml</param-value> <!-- lucy-xss-filter의 dom용 설정파일 -->
+ <param-value>false</param-value> <!-- 필터링된 코멘트를 남길지 여부, 성능 효율상 false 추천 -->
+ </init-param>
+ </defender>
+ </defenders>
+
+ <!-- default defender 선언, 필터링 시 지정한 defender가 없으면 여기 정의된 default defender를 사용해 필터링 한다. -->
+ <default>
+ <defender>xssPreventerDefender</defender>
+ </default>
+
+ <!-- global 필터링 룰 선언 -->
+ <global>
+ <!-- 모든 url에서 들어오는 globalParameter 파라메터는 필터링 되지 않으며
+ 또한 globalPrefixParameter1로 시작하는 파라메터도 필터링 되지 않는다.
+ globalPrefixParameter2는 필터링 되며 globalPrefixParameter3은 필터링 되지 않지만
+ 더 정확한 표현이 가능하므로 globalPrefixParameter2, globalPrefixParameter3과 같은 불분명한 표현은 사용하지 않는 것이 좋다. -->
+ <params>
+ <param name="nttCn" useDefender="false" /> <!-- 게시글 내용 -->
+ <param name="bbsForm" useDefender="false" /> <!-- 게시판 양식 -->
+ <param name="menuNm" useDefender="false" /> <!-- 메뉴명 -->
+ <!-- <param name="useStplatCn" useDefender="false" />
+ <param name="infoProvdAgreCn" useDefender="false" />
+ <param name="stuProDesc" useDefender="false" />
+ <param name="entProDesc" useDefender="false" />
+ <param name="usePerDataCn" useDefender="false" /> -->
+
+ <!-- <param name="globalParameter" useDefender="false" />
+ <param name="globalPrefixParameter1" usePrefix="true" useDefender="false" />
+ <param name="globalPrefixParameter2" usePrefix="true" />
+ <param name="globalPrefixParameter3" usePrefix="false" useDefender="false" /> -->
+ </params>
+ </global>
+
+ <!-- url 별 필터링 룰 선언 -->
+ <url-rule-set>
+
+ <!-- url disable이 true이면 지정한 url 내의 모든 파라메터는 필터링 되지 않는다. -->
+ <url-rule>
+ <url disable="true">/disableUrl1.do</url>
+ </url-rule>
+
+ <!-- url disable이 false인 설정은 기본이기 때문에 불필요하다. 아래와 같은 불필요한 설정은 하지 않는다.-->
+<!-- <url-rule> -->
+<!-- <url disable="false">/disableUrl2.do</url> -->
+<!-- </url-rule> -->
+
+ <!-- url disable이 true이면 지정한 url 내의 모든 파라메터가 필터링 되지 않기 때문에 <params> 로 선언한 설정은 적용되지 않는다.
+ 아래와 같은 불필요한 설정은 하지 않는다. -->
+ <url-rule>
+ <url disable="true">/disableUrl3.do</url>
+ <params>
+ <param name="query" useDefender="false" />
+ <param name="prefix1" usePrefix="true" />
+ <param name="prefix2" usePrefix="false" useDefender="false" />
+ <param name="prefix3" usePrefix="true" useDefender="true" />
+ <param name="prefix4" usePrefix="true" useDefender="false" />
+ <param name="prefix5" usePrefix="false" useDefender="true" />
+ </params>
+ </url-rule>
+
+ <!-- url disable이 false인 설정은 기본이기 때문에 불필요하다. <params> 선언한 설정은 적용이 된다.-->
+ <url-rule>
+ <url disable="false">/disableUrl4.do</url>
+ <params>
+ <!-- disableUrl4.do 의 query 파라메터와 prefix4로 시작하는 파라메터들은 필터링 되지 않는다.
+ usePrefix가 false, useDefender가 true인 설정은 기본이기 때문에 불필요하다. -->
+ <param name="query" useDefender="false" />
+ <param name="prefix1" usePrefix="true" />
+ <param name="prefix2" usePrefix="false" useDefender="false" />
+ <param name="prefix3" usePrefix="true" useDefender="true" />
+ <param name="prefix4" usePrefix="true" useDefender="false" />
+ <param name="prefix5" usePrefix="false" useDefender="true" />
+ <param name="prefix6" usePrefix="true">
+ <defender>xssSaxFilterDefender</defender>
+ </param>
+ </params>
+ </url-rule>
+
+ <!-- url1 내의 url1Parameter는 필터링 되지 않으며 또한 url1PrefixParameter로 시작하는 파라메터도 필터링 되지 않는다. globalParameter는
+ 상위 글로벌 global 설정에 동일한 이름으로 되어있지만 url-rule 설정을 더 우선하여 따른다. -->
+ <url-rule>
+ <url>/url1.do</url>
+ <params>
+ <param name="url1Parameter" useDefender="false" />
+ <param name="url1PrefixParameter" usePrefix="true" useDefender="false" />
+ <param name="globalParameter"/>
+ </params>
+ </url-rule>
+
+ <!-- url2 내의 url2Parameter1만 필터링 되지 않으며 url2Parameter2는 xssSaxFilterDefender를 사용해 필터링 한다. -->
+ <url-rule>
+ <url>/url2.do</url>
+ <params>
+ <param name="url2Parameter1" useDefender="false">
+ <defender>xssPreventerDefender</defender>
+ </param>
+ <param name="url2Parameter2">
+ <defender>xssSaxFilterDefender</defender>
+ </param>
+ <param name="url2Parameter3">
+ <defender>xssPreventerDefender</defender>
+ </param>
+ </params>
+ </url-rule>
+ </url-rule-set>
+</config>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/lucy-xss-servlet-filter-rule.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/code500.jsp
===================================================================
--- base3.10/src/main/webapp/code500.jsp (nonexistent)
+++ base3.10/src/main/webapp/code500.jsp (revision 7)
@@ -0,0 +1,37 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>▒▒▒ eGovFrame Potal 온라인 지원 포탈 ▒▒▒</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: 0px solid #666; padding: 20px;">
+ <!-- 404 -->
+ <p style="color:red; margin-bottom: 8px; ">500 Error</p>
+
+ <div class="boxType1" style="width: 500px;">
+ <div class="box">
+ <div class="error">
+ <p class="title">HTTP 500 Error</p>
+ <p class="cont mb20">HTTP 500 Internal Server error.<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();">이전 페이지</a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/code500.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/ext/msg/table.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/ext/msg/table.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/ext/msg/table.css (revision 7)
@@ -0,0 +1,165 @@
+
+body, html { height: 100%; }
+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, font, 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 {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-size: 100%;
+ vertical-align: baseline;
+ background: transparent;
+}
+body { line-height: 1; }
+
+ol, ul { list-style: none; }
+blockquote, q { quotes: none; }
+blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; }
+:focus { outline: 0; }
+del { text-decoration: line-through; }
+table {border-spacing: 0; } /* IMPORTANT, I REMOVED border-collapse: collapse; FROM THIS LINE IN ORDER TO MAKE THE OUTER BORDER RADIUS WORK */
+
+/*------------------------------------------------------------------ */
+
+/*This is not important*/
+body{
+ font-family:Arial, Helvetica, sans-serif;
+ color: #222222;
+ margin:0 auto;
+ width:520px;
+}
+a:link {
+ color: #666;
+ font-weight: bold;
+ text-decoration:none;
+}
+a:visited {
+ color: #666;
+ font-weight:bold;
+ text-decoration:none;
+}
+a:active,
+a:hover {
+ color: #bd5a35;
+ text-decoration:underline;
+}
+
+
+/*
+Table Style - This is what you want
+------------------------------------------------------------------ */
+table a:link {
+ color: #666;
+ font-weight: bold;
+ text-decoration:none;
+}
+table a:visited {
+ color: #999999;
+ font-weight:bold;
+ text-decoration:none;
+}
+table a:active,
+table a:hover {
+ color: #bd5a35;
+ text-decoration:underline;
+}
+table {
+ font-family:Arial, Helvetica, sans-serif;
+ color:#666;
+ font-size:12px;
+ text-shadow: 1px 1px 0px #fff;
+ background:#eaebec;
+ margin:20px;
+ border:#ccc 1px solid;
+
+ -moz-border-radius:3px;
+ -webkit-border-radius:3px;
+ border-radius:3px;
+
+ -moz-box-shadow: 0 1px 2px #d1d1d1;
+ -webkit-box-shadow: 0 1px 2px #d1d1d1;
+ box-shadow: 0 1px 2px #d1d1d1;
+}
+table th {
+ padding:21px 25px 22px 25px;
+ border-top:1px solid #fafafa;
+ border-bottom:1px solid #e0e0e0;
+
+ background: #ededed;
+ background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#ebebeb));
+ background: -moz-linear-gradient(top, #ededed, #ebebeb);
+}
+table th:first-child{
+ text-align: left;
+ padding-left:20px;
+}
+table tr:first-child th:first-child{
+ -moz-border-radius-topleft:3px;
+ -webkit-border-top-left-radius:3px;
+ border-top-left-radius:3px;
+}
+table tr:first-child th:last-child{
+ -moz-border-radius-topright:3px;
+ -webkit-border-top-right-radius:3px;
+ border-top-right-radius:3px;
+}
+table tr{
+ text-align: center;
+ padding-left:20px;
+}
+table tr td:first-child{
+ text-align: left;
+ padding-left:20px;
+ border-left: 0;
+}
+table tr td {
+ padding:18px;
+ border-top: 1px solid #ffffff;
+ border-bottom:1px solid #e0e0e0;
+ border-left: 1px solid #e0e0e0;
+
+ background: #fafafa;
+ background: -webkit-gradient(linear, left top, left bottom, from(#fbfbfb), to(#fafafa));
+ background: -moz-linear-gradient(top, #fbfbfb, #fafafa);
+}
+table tr.even td{
+ background: #f6f6f6;
+ background: -webkit-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f6f6f6));
+ background: -moz-linear-gradient(top, #f8f8f8, #f6f6f6);
+}
+table tr:last-child td{
+ border-bottom:0;
+}
+table tr:last-child td:first-child{
+ -moz-border-radius-bottomleft:3px;
+ -webkit-border-bottom-left-radius:3px;
+ border-bottom-left-radius:3px;
+}
+table tr:last-child td:last-child{
+ -moz-border-radius-bottomright:3px;
+ -webkit-border-bottom-right-radius:3px;
+ border-bottom-right-radius:3px;
+}
+table tr:hover td{
+ background: #f2f2f2;
+ background: -webkit-gradient(linear, left top, left bottom, from(#f2f2f2), to(#f0f0f0));
+ background: -moz-linear-gradient(top, #f2f2f2, #f0f0f0);
+}
+
+#content {
+ font-family: Arial, Helvetica;
+ background: #fafafa;
+ color: #222222;
+ text-shadow: 0px 1px 0px #fff;
+ font-size: 30px;
+ /* font-weight: bold; */
+ letter-spacing: -2px;
+ margin-top: 5%;
+}
Property changes on: base3.10/src/main/webapp/css/egovframework/com/ext/msg/table.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/ext/msg/button.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/ext/msg/button.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/ext/msg/button.css (revision 7)
@@ -0,0 +1,3 @@
+button {cursor:hand; border:0px solid #FFFFFF; padding:0px 0px 0px 0px; background-color:#FFFFFF; white-space:nowrap;}
+.btn_blue_l {float:left; background:url(../../images/egovframework/example/btn_bg_l.gif) 0 0 no-repeat; height:20px; padding:0px 0px 0px 10px; margin:0px 0px 0px 0px;}
+.btn_blue_r {float:left; background:url(../../images/egovframework/example/btn_bg_r.gif) 0 0 no-repeat; background-position:right; height:20px; font-family:"돋움"; font-size:11px; color:#000000; margin:0px 0px 0px 0px; padding-top:0px; _padding-top:0px; padding-left:10px; padding-right:10px; padding-bottom:0px; text-align:center;}
Property changes on: base3.10/src/main/webapp/css/egovframework/com/ext/msg/button.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/ext/msg/bubbleChat.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/ext/msg/bubbleChat.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/ext/msg/bubbleChat.css (revision 7)
@@ -0,0 +1,81 @@
+ input {
+ padding: 5px;
+ font-size: 10px;
+ text-shadow: 0px 1px 0px #fff;
+ outline: none;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ border: 1px solid #ccc;
+ -webkit-transition: .3s ease-in-out;
+ -moz-transition: .3s ease-in-out;
+ -o-transition: .3s ease-in-out;
+}
+
+ input:focus {
+ border: 1px solid #fafafa;
+ -webkit-box-shadow: 0px 0px 6px #007eff;
+ -moz-box-shadow: 0px 0px 5px #007eff;
+ box-shadow: 0px 0px 5px #007eff;
+ }
+
+ .chat {
+ font-family: Arial;
+ font-size: 11px;
+ padding: 10px;
+ border: 1px solid #aaa;
+ width: 300px;
+ height: 400px;
+ overflow: scroll;
+ }
+
+ .bubble {
+ background-color: #F2F2F2;
+ border-radius: 5px;
+ border: 1px solid #bbb;
+ box-shadow: 0 1px 6px #B2B2B2;
+ display: block;
+ padding: 10px 18px;
+ margin: 1em 18px;
+ position: relative;
+ vertical-align: top; }
+
+ .tail {
+ position: absolute;
+ height: 18px;
+ width: 18px;
+ overflow: hidden; }
+ .tail:before {
+ border: 1px solid #bbb;
+ background-color: #F2F2F2;
+ box-shadow: 0 1px 6px #B2B2B2;
+ content: "\00a0";
+ display: block;
+ position: absolute;
+ top: 0px;
+ height: 12px;
+ width: 12px; }
+
+.bubble.left {
+ text-align: left; }
+ .bubble.left .tail {
+ top: 12px;
+ left: -18px; }
+ .bubble.left .tail:before {
+ left: 12px;
+ -webkit-transform: skewX(-45deg);
+ -moz-transform: skewX(-45deg);
+ -o-transform: skewX(-45deg); }
+
+.bubble.right {
+ text-align: right; }
+ .bubble.right .tail {
+ top: 12px;
+ right: -18px; }
+ .bubble.right .tail:before {
+ right: 12px;
+ -webkit-transform: skewX(45deg);
+ -moz-transform: skewX(45deg);
+ -o-transform: skewX(45deg); }
+
+
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/ext/msg/bubbleChat.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cmm/jquery-ui_1.12.1.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cmm/jquery-ui_1.12.1.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cmm/jquery-ui_1.12.1.css (revision 7)
@@ -0,0 +1,1326 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+/* 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;
+}
+/* 토요일은 파란색, 일요일은 빨간색 */
+.ui-datepicker-week-end:first-child,
+.ui-datepicker-calendar tbody td:first-child a {
+ color: #f00;
+}
+.ui-datepicker-week-end:last-child,
+.ui-datepicker-calendar tbody td:last-child a {
+ color: #00f;
+}
+
+/* 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;
+}
+/* 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-datepicker-calendar tbody td:first-child a.ui-state-active ,
+.ui-datepicker-calendar tbody td:last-child a.ui-state-active {
+ 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-checked {
+ border: 1px solid #dad55e;
+ background: #fffa90;
+}
+.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/egovframework/com/cmm/utl/ui-icons_444444_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_444444_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon,
+.ui-button:hover .ui-icon,
+.ui-button:focus .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_555555_256x240.png");
+}
+.ui-state-active .ui-icon,
+.ui-button:active .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_ffffff_256x240.png");
+}
+.ui-state-highlight .ui-icon,
+.ui-button .ui-state-highlight.ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_777620_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_cc0000_256x240.png");
+}
+.ui-button .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_777777_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: .3;
+ filter: Alpha(Opacity=30); /* support: IE8 */
+}
+.ui-widget-shadow {
+ -webkit-box-shadow: 0px 0px 5px #666666;
+ box-shadow: 0px 0px 5px #666666;
+}
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cmm/jquery-ui_1.12.1.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cmm/modal.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cmm/modal.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cmm/modal.css (revision 7)
@@ -0,0 +1,98 @@
+/* The Modal (background) */
+.modal {
+ display: none; /* Hidden by default */
+ position: fixed; /* Stay in place */
+ z-index: 1; /* Sit on top */
+ padding-top: 100px; /* Location of the box */
+ left: 0;
+ top: 0;
+ width: 100%; /* Full width */
+ height: 100%; /* Full height */
+ overflow: auto; /* Enable scroll if needed */
+ background-color: rgb(0,0,0); /* Fallback color */
+ background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
+}
+
+/* Modal Content */
+.modal-content {
+ position: relative;
+ background-color: #fefefe;
+ margin: auto;
+ padding: 0;
+ border: 1px solid #888;
+ box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
+ -webkit-animation-name: animatetop;
+ -webkit-animation-duration: 0.4s;
+ animation-name: animatetop;
+ animation-duration: 0.4s
+}
+
+/* Add Animation */
+@-webkit-keyframes animatetop {
+ from {top:-300px; opacity:0}
+ to {top:0; opacity:1}
+}
+
+@keyframes animatetop {
+ from {top:-300px; opacity:0}
+ to {top:0; opacity:1}
+}
+
+/* The Close Button */
+.close {
+ margin: 6px 0px 0px 0px;
+ color: white;
+ float: right;
+ font-size: 16px;
+ font-weight: bold;
+}
+
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.modal-header {
+ padding: 8px 8px 8px 8px;
+ background-color: #0c4ca4;
+ color: white;
+ font-size:14px;
+}
+.modal-title {
+ color: white;
+ font-size:14px;
+
+}
+
+.modal-header h2,
+.modal-footer h2 {
+ float: none;
+ color: white;
+ text-indent: 20px;
+ font-size: 16px;
+ line-height:2.0em
+}
+
+.modal-body {padding: 10px 10px 10px 10px;}
+
+.modal-body p {
+ margin: 10px 0px;
+}
+
+.modal-footer {
+ padding: 5px 5px 5px 5px;
+ background-color: white;
+ text-align: center;
+ color: white;
+}
+.modal-btn {
+ float:right;font-size:11px;
+ margin: 0px 0px 0px 5px;
+}
+.modal-alignL {
+ float:left;font-size:11px;
+ margin: 0px 0px 0px 5px;
+}
+
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cmm/modal.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui.css (revision 7)
@@ -0,0 +1,1317 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+/* 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;
+ background: #cccccc;
+
+ /* Support: IE <= 11 */
+ overflow: visible;
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+ background: #cccccc;
+}
+
+/* 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;
+}
+/* 토요일은 파란색, 일요일은 빨간색 */
+.ui-datepicker-week-end:first-child,
+.ui-datepicker-calendar tbody td:first-child a {
+ color: #f00;
+}
+.ui-datepicker-week-end:last-child,
+.ui-datepicker-calendar tbody td:last-child a {
+ color: #00f;
+}
+
+/* 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;
+}
+/* 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: #ffffff;
+ 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 {
+/* border: 1px solid #ffffff; */
+ background: #ffffff;
+ font-weight: normal;
+ color: #454545;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #454545;
+ background: #cccccc;
+ 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 {
+/* border: 1px solid #cccccc; */
+ border-radius: 5px;
+ 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 {
+/* border: 1px solid #003eff; */
+ border-radius: 5px;
+ background: #007fff;
+ font-weight: normal;
+ color: #ffffff;
+}
+.ui-icon-background,
+.ui-state-active .ui-icon-background {
+ border: #003eff;
+ background-color: #ffffff;
+}
+/* 주말 선택시 날짜 색 */
+.ui-datepicker-calendar tbody td:first-child a.ui-state-active ,
+.ui-datepicker-calendar tbody td:last-child a.ui-state-active {
+ 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 #a7d3ff; */
+ border-radius: 5px;
+ background: #c5e1fb;
+ color: #000000;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #ffffff;
+}
+.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/egovframework/com/cmm/utl/ui-icons_444444_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_444444_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon,
+.ui-button:hover .ui-icon,
+.ui-button:focus .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_555555_256x240.png");
+}
+.ui-state-active .ui-icon,
+.ui-button:active .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_ffffff_256x240.png");
+}
+.ui-state-highlight .ui-icon,
+.ui-button .ui-state-highlight.ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_777620_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_cc0000_256x240.png");
+}
+.ui-button .ui-icon {
+ background-image: url("../../../../images/egovframework/com/cmm/utl/ui-icons_777777_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: .3;
+ filter: Alpha(Opacity=30); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: 0px 0 0 0px;
+ padding: 5px;
+ background: #666666;
+ opacity: .3;
+ filter: Alpha(Opacity=30); /* support: IE8 */
+ border-radius: 8px;
+}
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui_org.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui_org.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui_org.css (revision 7)
@@ -0,0 +1,668 @@
+/*! jQuery UI - v1.11.4 - 2016-06-14
+* http://jqueryui.com
+* Includes: core.css, datepicker.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=5px&bgColorHeader=%23ffffff&bgTextureHeader=flat&borderColorHeader=%23dddddd&fcHeader=%23333333&iconColorHeader=%23444444&bgColorContent=%23ffffff&bgTextureContent=flat&borderColorContent=%23dddddd&fcContent=%23333333&iconColorContent=%23444444&bgColorDefault=%23ffffff&bgTextureDefault=flat&borderColorDefault=%23ffffff&fcDefault=%23454545&iconColorDefault=%23777777&bgColorHover=%23ededed&bgTextureHover=flat&borderColorHover=%23cccccc&fcHover=%232b2b2b&iconColorHover=%23555555&bgColorActive=%23007fff&bgTextureActive=flat&borderColorActive=%23003eff&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23a7d3ff&bgTextureHighlight=flat&borderColorHighlight=%23a7d3ff&fcHighlight=%23ffffff&iconColorHighlight=%23777620&bgColorError=%23fddfdf&bgTextureError=flat&borderColorError=%23f1a899&fcError=%235f3f3f&iconColorError=%23cc0000&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px&bgImgOpacityHeader=&bgImgOpacityContent=&bgImgOpacityDefault=&bgImgOpacityHover=&bgImgOpacityActive=&bgImgOpacityHighlight=&bgImgOpacityError=
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+/* 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-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+.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;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+.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: 2px;
+}
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 2px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 2px;
+}
+.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: .5em;
+ 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;
+}
+/* 토요일은 파란색, 일요일은 빨간색 */
+.ui-datepicker-week-end:first-child,
+.ui-datepicker-calendar tbody td:first-child a {
+ color: #f00;
+}
+.ui-datepicker-week-end:last-child,
+.ui-datepicker-calendar tbody td:last-child a {
+ color: #00f;
+}
+
+/* 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;
+}
+
+/* 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-content {
+ border: 1px solid #dddddd;
+ background: #ffffff;
+ color: #333333;
+}
+.ui-widget-content a {
+ color: #333333;
+}
+.ui-widget-header {
+ border: 1px solid #dddddd;
+ background: #ffffff;
+ 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 {
+/* border: 1px solid #ffffff; */
+ background: #ffffff;
+ font-weight: normal;
+ color: #454545;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ 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 {
+/* border: 1px solid #cccccc; */
+ border-radius: 5px;
+ 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 {
+ color: #2b2b2b;
+ text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+/* border: 1px solid #003eff; */
+ border-radius: 5px;
+ background: #007fff;
+ font-weight: normal;
+ color: #ffffff;
+}
+/* 주말 선택시 날짜 색 */
+.ui-datepicker-calendar tbody td:first-child a.ui-state-active ,
+.ui-datepicker-calendar tbody td:last-child a.ui-state-active {
+ 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 #a7d3ff; */
+ border-radius: 5px;
+ background: #c5e1fb;
+ color: #000000;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #ffffff;
+}
+.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: .5;
+ 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/egovframework/com/cmm/utl/ui-icons_444444_256x240.png");
+}
+.ui-widget-header .ui-icon {
+ background-image: url("../../../images/egovframework/com/cmm/utl/ui-icons_444444_256x240.png");
+}
+.ui-state-default .ui-icon {
+ background-image: url("../../../images/egovframework/com/cmm/utl/ui-icons_777777_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("../../../images/egovframework/com/cmm/utl/ui-icons_555555_256x240.png");
+}
+.ui-state-active .ui-icon {
+ background-image: url("../../../images/egovframework/com/cmm/utl/ui-icons_ffffff_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+ background-image: url("../../../images/egovframework/com/cmm/utl/ui-icons_777620_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("../../../images/egovframework/com/cmm/utl/ui-icons_cc0000_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-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: -64px -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: -64px -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: 0 -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: 5px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 5px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 5px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 5px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #aaaaaa;
+ opacity: .3;
+ filter: Alpha(Opacity=30); /* support: IE8 */
+}
+.ui-widget-shadow {
+ margin: 0px 0 0 0px;
+ padding: 5px;
+ background: #666666;
+ opacity: .3;
+ filter: Alpha(Opacity=30); /* support: IE8 */
+ border-radius: 8px;
+}
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cmm/jqueryui_org.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cmm/left.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cmm/left.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cmm/left.css (revision 7)
@@ -0,0 +1,76 @@
+@CHARSET "UTF-8";
+/*
+ Css Name : com.css
+ Description : 공통 CSS
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2016.06.09 장동한 최초 생성
+
+ author : 공통컴포넌트 개발팀 장동한
+ since : 2016.06.09
+*/
+
+td {font-family: "돋움"; font-size: 9pt; color:#595959; font-weight:normal;}
+th {font-family: "돋움"; font-size: 9pt; color:#000000; font-weight:normal;}
+
+h1 {font-size:12px;}
+caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+
+img { border : 0; }
+table { margin : 0; padding : 0; }
+
+/* Black 텍스트 Hyperlink Style */
+A:link { font-size:9pt; font-family:돋움;color:#000000; text-decoration:none; }
+A:visited { font-size:9pt; font-family:돋움;color:#000000; text-decoration:none; }
+A:active { font-size:9pt; font-family:돋움;color:red; text-decoration:none; }
+A:hover { font-size:9pt; font-family:돋움;color:red;text-decoration:none;}
+
+
+/* Gray 텍스트 Hyperlink Style */
+A.gr:link { font-size:9pt; font-family:돋움;color:#58595B; text-decoration:none; }
+A.gr:visited { font-size:9pt; font-family:돋움;color:#58595B; text-decoration:none; }
+A.gr:active { font-size:9pt; font-family:돋움;color:red; text-decoration:none; }
+A.gr:hover { font-size:9pt; font-family:돋움;color:red ;text-decoration:none;}
+
+
+/* Black 텍스트 Hyperlink Style_언더라인 */
+A.underline:link { font-size:9pt; font-family:돋움;color:#000000; text-decoration:underline; }
+A.underline:visited { font-size:9pt; font-family:돋움;color:#000000; text-decoration:underline; }
+A.underline:active { font-size:9pt; font-family:돋움;color:red; text-decoration:underline; }
+A.underline:hover { font-size:9pt; font-family:돋움;color:red;text-decoration:underline;}
+
+/* 링크 점선 제거 */
+a {selector-dummy: expression(this.hideFocus=true);}
+
+/* 스크롤 & margin */
+body {
+ scrollbar-face-color: #F6F6F6;
+ scrollbar-highlight-color: #bbbbbb;
+ scrollbar-3dlight-color: #FFFFFF;
+ scrollbar-shadow-color: #bbbbbb;
+ scrollbar-darkshadow-color: #FFFFFF;
+ scrollbar-track-color: #FFFFFF;
+ scrollbar-arrow-color: #bbbbbb;
+ margin-left:"23px"; margin-right:"0px"; margin-top:"17px"; margin-bottom:"0px";
+ font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif';
+ font-size: 12px;
+}
+
+/* 흰색배경 inputbox */
+ textarea, input, select {
+ padding-left:2px color:#555555; border:1px solid #9BBED2;
+ font-family: "돋움"; font-size: 9pt; color:#595959;
+ }
+
+/*------------------------------- textarea ------------------------------------------------*/
+
+textarea { color : #000000; border-color : #9cbed3; border-style : solid; }
+
+ /* 콤보박스에 테두리선 빼기 */
+input.cb {background-color:transparent;border:0x;}
+
+ select { color:#000000; padding-left:2; border-color:#9CBED3; border-style:solid; }
+ select1 { color:#000000; padding-left:2; border-color:#9CBED3; border-style:solid; }
+.select12 { color:#000000; padding-left:2; border-color:#9CBED3; border-style:solid; }
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cmm/left.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cmm/main.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cmm/main.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cmm/main.css (revision 7)
@@ -0,0 +1,49 @@
+/*
+ Css Name : main.css
+ Description : 메인 CSS
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2011.09.26 구지연 최초 생성
+ 2016.10.14 장동한 v3.6작업
+
+
+ author : 공통컴포넌트 개발팀 구지연
+ since : 2011.09.26
+*/
+@CHARSET "UTF-8";
+
+* { margin: 0; padding: 0; border: 0; }
+
+/* reset */
+frameset, frame, p, div { margin:0; padding:0; border:0; }
+
+div,table,form,fieldset,p,th,td,input,textarea,select,button {
+ font-family: '돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif'; font-size: 12px; color: #666; }
+
+.top_title_strong { color: #000000; font-size: 18px; }
+
+#header { position: relative; width: 100%; height: 70px; border-top: 4px solid #0c4ca4; border-bottom: 1px solid #d7d7d7; }
+ .header_box { padding: 20px 0 0 40px; }
+ .header_box h1 { float: left; margin-top: 10px; margin-right: 20px; }
+ .header_box p { margin-top: 2px; color: #333; font-size: 13px; font-weight: bold; }
+#container { position: absolute; width: 100%; top: 110px; left: 0; right: 0; bottom: 65px; }
+ #lnb { position: absolute; top: 0; left: 20px; bottom: 0; width: 90%; margin-right: 30px; background: #fff; overflow-y: scroll; }
+ ul.lnb_title { padding-right: 25px; }
+ ul.lnb_title > li { padding-top: 12px;; padding-bottom: 5px; margin-bottom: 0px; }
+ ul.lnb_title > li:last-child { padding-bottom: 0; border-bottom: 0; }
+ .left_title_strong { color: #4c4c4c; font-size: 15px; font-weight: bold;}
+
+ ul.lnb_title > li > ul { padding-top: 4px; }
+ ul.lnb_title > li > ul > li { margin-top: 9px; }
+ ul.lnb_title > li > ul > li a:hover { font-weight: bold; }
+ #contents { position: absolute; left: 300px; top: 25px; right: 0; bottom: 0; overflow-y: auto; }
+#footer { position: absolute; bottom: 0; width: 100%; height: 45px; background: #d3d3d3; }
+#footer p { color: #555; font-size: 11px; font-weight: bold; text-align: center; margin-top: 17px; }
+#footer div {margin-top:12px; text-align: center;width:100%; }
+ .footer_title_strong { color: #666; font-size: 17px; font-weight: bold; }
+
+a.link { color: #666; text-decoration: none; font-weight: normal;}
+a.link:hover { color: #000000; text-decoration: none; font-weight: bold;}
+a, button, input[type="button"] { cursor: pointer; }
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cmm/main.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/popup_com.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/popup_com.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/popup_com.css (revision 7)
@@ -0,0 +1,28 @@
+/*
+ Css Name : com.css
+ Description : 공통 CSS
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2017.069.15 장동한 최초 생성
+ 2018
+
+ author : 공통컴포넌트 개발팀 서민영
+ since : 2016.06.08
+*/
+@charset "utf-8";
+
+h1 {font-size:12px;}
+caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+body{
+ margin-top:0px;
+ margin-left:10px;
+ margin-right:10px;
+ padding-top:0px;
+ padding-left:0px;
+ margin-bottom: 0;
+ font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif';
+ font-size: 12px;
+}
+.popup h1 {margin-bottom:7px; padding:0 0 1px 25px; background:url(../../../images/egovframework/com/cmm/icon/tit_icon.png) no-repeat left 0px; }
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/popup_com.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cop/bbs/style.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cop/bbs/style.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cop/bbs/style.css (revision 7)
@@ -0,0 +1,147 @@
+@charset "utf-8";
+
+@font-face {
+ font-family: "NanumGothic";
+ src: url("../../../../../fonts/NanumGothic.eot");
+ src:local(※), url("../../../../../fonts/NanumGothic.woff") format("woff");
+}
+@font-face {
+ font-family:"NanumGothicExtraBold";
+ src:url("../../../../../fonts/NanumGothicExtraBold.eot");
+ src:local(※), url("../../../../../fonts/NanumGothicExtraBold.woff") format("woff");
+}
+
+/* Base Style *****************************/
+* { margin: 0; padding: 0; border: 0; }
+body { overflow-y:scroll; }
+body, div, table, em, form, fieldset, p, th, td, input, textarea, select, button { font:12px "Malgun Gothic", "dotum"; color:#666; }
+h1, h2, h3, h4, h5, h6, th { color:#333; }
+fieldset, img { border: 0; }
+img, label { vertical-align: middle; }
+ul, ol { list-style : none; }
+caption, .hide, .blind { display:none; }
+caption, legend { position:absolute; top:-9000em; left:-9000em; text-indent:-99999em; width:0; height:0; visibility:hidden; }
+table { border-collapse: collapse; border-spacing: 0; width: 100%; }
+select { min-width:130px; border:1px solid #c9c9c9; padding:5px 3px 6px; }
+a { color: #000; text-decoration: none; }
+a:hover { text-decoration:none; }
+a, button, input[type="button"], input[type="submit"] { cursor: pointer; }
+textarea,
+input[type="text"],
+input[type="email"],
+input[type="password"] { border:1px solid #c9c9c9; padding:4px; }
+input[type="button"] { border:none; padding:6px 12px 7px; background:#3d70b6; color:#fff; font-family:"NanumGothicExtraBold"; }
+input[type="checkbox"] { vertical-align:middle; margin:0 5px 0 0; }
+
+.clear { clear:both; }
+.txt-rt { text-align:right; }
+.txt-cnt { text-align:center; }
+.mt20 { margin-top:20px; }
+.ml5 { margin-left:5px; }
+.txt_bl { color:#000; }
+
+/* Background */
+.bg_gray { background:#9c9c9c !important; }
+
+.note { position: relative; width:730px; }
+h1 { font-size:14px; margin:18px 0 10px; }
+
+/* Button Style */
+.btnStyle01 { display: inline-block; border:1px solid #d2d2d2; padding:5px 10px 4px; color:#666; font-size:11px; background:#fafafa; cursor:pointer; }
+.btnStyle01:hover { text-decoration:none; }
+.btnStyle02 { border:none; padding:6px 12px 7px; background:#3d70b6; color:#fff; font-family:"NanumGothicExtraBold"; }
+
+/* PopUp */
+.mask { position:absolute; left:0; top:0; z-index:9999; background-color:#000; display:none; }
+.layerPop { display: none; background-color: #ffffff; width:400px; height: 200px; z-index:99999; }
+
+
+/* Community *********************************/
+.blog_wrap { width: 970px; margin:18px auto 40px; }
+.blog_header { position: relative; }
+.blog_header .visual { width: 100%; height: 130px; background: url('../../../../../images/egovframework/com/cop/bbs/community_title.png') no-repeat; text-indent: -10000em; }
+.blog_header .visual_default { width: 970px; height:147px; background:url('../../../../../images/egovframework/com/cop/bbs/bg_blog_tit.jpg') no-repeat; }
+.blog_header .visual_default h1 { padding:32px 0 6px 20px; color:#3f73c2; font-size:20px; font-weight:bold; }
+.blog_header .visual_default p { padding-left:20px; color:#002e54; font-size:13px; }
+.h_menu {position:relative; width: 970px; height:45px; border-top:3px solid #000; border-radius:0 0 5px 5px; background:#003765 url('../../../../../images/egovframework/com/cop/bbs/bg_gnb_r.jpg') no-repeat right top; }
+.h_menu:after {content:""; display:block; height:0; clear:both; visibility:hidden; }
+.h_menu ul.gnb { float: left; }
+.h_menu ul.gnb.r {float:right; }
+.h_menu ul.gnb li { float: left; }
+.h_menu ul.gnb li a {display:block; height:45px; padding:0 20px; color:#fff; font-size:14px; font-weight:bold; line-height:45px; background:url(../../../../../images/egovframework/com/cop/bbs/bg_bar01.jpg) no-repeat right center; }
+.h_menu ul.gnb li:first-child a { border-radius:0 0 0 5px; }
+.h_menu ul.gnb li:last-child a { background:none; }
+.h_menu ul.gnb li a.all { font-family:"NanumGothicExtraBold"; }
+.h_menu ul.gnb li a.on {background:#015ca7; }
+.h_menu .write { display:inline-block; position:absolute; right:0; top:67px; width:75px; height:30px; padding-left:33px; color:#fff; font-size:14px; font-weight:bold; text-align:left; line-height:30px; background:url('../../../../../images/egovframework/com/cop/bbs/btn_write.jpg') no-repeat; }
+
+.post { margin:26px 0 40px; }
+.post_title { margin-bottom:12px; padding-bottom:17px; background:url(../../../../../images/egovframework/com/cop/bbs/bg_bot01.jpg) repeat-x left bottom; }
+.post_title h5 { float:left; font-size:13px; }
+.post_title > p {color:#393939; font-size:18px; font-weight:bold; }
+
+.post_title span.txt_bl { margin-left:4px; font-size:11px; vertical-align:middle; }
+.post_title .menu { float:right; width:59px; background:url('../../../../../images/egovframework/com/cop/bbs/icon_up.png') right center no-repeat; margin-right:17px; cursor:pointer; }
+
+.post_opt { float:right; margin-top:10px; }
+
+.paging { display:inline-block; width:100%; text-align:center; }
+.paging ul { display:inline-block; }
+.paging ul li { float:left; text-align:center; padding:0 7px; }
+.paging ul li.current { color:#ce5760; font-family:"NanumGothicExtraBold"; }
+.paging ul li a { color:#999; }
+
+.blog_cnt { padding:30px 25px; border:1px solid #eee; }
+.blog_title { border-bottom:1px solid #e3e3e3; padding-bottom:10px; }
+.blog_title h5 { float:left; font-size:14px; }
+.blog_title span { border-left:1px solid #dcdada; margin-left:12px; padding-left:12px; vertical-align:middle; }
+.blog_title span a { color:#666; }
+.blog_title p { float:right; font-size:11px; color:#999; }
+.blog_cnt .cnt { width:100%; text-align:center; padding-top:30px; font-size:14px; color:#333; }
+.blog_cnt .cnt img { width:98%; height:auto; margin-bottom:15px; }
+.blog_cnt .open_btm { border-top:1px solid #e3e3e3; padding-top:14px; }
+.open_btm strong, .close_btm strong { width:60px; padding-left:15px; }
+.open_btm strong a, .close_btm strong a { font-family:"NanumGothicExtraBold"; text-decoration:none; }
+.blog_cnt .open_btm strong { background:url('../../../../../images/egovframework/com/cop/bbs/icon_up.png') left center no-repeat; }
+.blog_cnt .close_btm strong { background:url('../../../../../images/egovframework/com/cop/bbs/icon_down.png') left center no-repeat; }
+.blog_cnt .open_btm strong a { color:#ce5760; }
+.blog_cnt .close_btm strong a { color:#666; }
+.comm_List { background:#f8f8f8; padding:20px; margin-top:10px; }
+.comm_List dl { border-bottom:1px solid #e2e2e2; padding-bottom:12px; margin-bottom:12px; }
+.comm_List dl:last-child { border-bottom:none; padding-bottom:0; margin-bottom:0; }
+.comm_List dl dt { padding-bottom:8px; }
+.comm_List dl dt strong { font-family:"NanumGothicExtraBold"; color:#333; margin-right:10px; }
+.comm_List dl dt span { font-size:11px; color:#b5b5b5; }
+.comm_List dl dt span.reply { float:right; }
+.comm_List dl dd { line-height:145%; }
+.comm_List dl dd textarea { float:left; width:795px; height:41px; margin-right:5px; }
+.comm_List dl dd button { padding:18px 22px; background:#f5f5f5; border:1px solid #c9c9c9; vertical-align:middle; font-size:11px; font-family:"NanumGothicExtraBold"; }
+.comm_List dl dd a.re_btn { padding:18px 22px; background:#f5f5f5; border:1px solid #c9c9c9; vertical-align:middle; font-size:11px; font-family:"NanumGothicExtraBold"; color: #666;}
+
+/* Table Style *********************************/
+.tbl_note { width:100%; table-layout:fixed; word-wrap:break-word; border-top:2px solid #0c4ca4; border-bottom:1px solid #aaabb0; }
+.tbl_note thead th { border-bottom:1px solid #c0c1c6; }
+.tbl_note th { vertical-align:middle; background:#f4f4f4; }
+.tbl_note tbody th { background:#f4f4f4 url('../../../../../images/egovframework/com/cop/bbs/tbl_check.png') 25px center no-repeat ; padding-left:40px; }
+.tbl_note tbody th.ic_none { background:#f4f4f4; padding-left:40px; }
+.tbl_note tbody th, .tbl_note td { text-align:left; border-top:1px solid #e2e3e5; }
+.tbl_note th, .tbl_note td { height:18px; padding:7px; }
+.tbl_note th:first-child, .tbl_note td:first-child { border-left:none; }
+
+.tbl_list { width:100%; }
+.tbl_list td { padding:8px 10px; border-bottom:1px solid #ececec; text-align:center; font-size:12px; }
+.tbl_list td:first-child { text-align:left; background:url('../../../../../images/egovframework/com/cop/bbs/dot_gray.png') left center no-repeat; }
+.tbl_list td a.on { font-family:"NanumGothicExtraBold"; text-decoration:underline; }
+.tbl_list td span { color:#ce5760; font-family:"NanumGothicExtraBold"; margin-left:5px; }
+
+
+/* file Style *****************************/
+.file_input_textbox { float: left; margin-right: 4px; }
+.file_input_div { position: relative; width: 66px; height: 24px; overflow: hidden; }
+.file_input_button { position: absolute; width: 66px; font-size: 11px; }
+.file_input_hidden { position: absolute; font-size: 45px; right: 0; top: 0; opacity: 0; cursor: pointer;
+ filter:alpha(opacity=0);
+ -ms-filter:"alpha(opacity=0)";
+ -khtml-opacity:0;
+ -moz-opacity:0;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cop/bbs/style.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cop/smt/sdm/dept_schdule_manage.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cop/smt/sdm/dept_schdule_manage.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cop/smt/sdm/dept_schdule_manage.css (revision 7)
@@ -0,0 +1,94 @@
+@charset "utf-8";
+
+/*캘린더*/
+.calendar { position: relative; width: 730px; }
+.calendar h2 { color: #333; font-size: 16px; margin: 15px 0 10px; padding-left:25px; background:url(../../../../../../images/egovframework/com/cmm/icon/tit_icon.png) no-repeat left top; }
+ .sort_area { position: relative; height: 40px; border: 0px solid #dedede; margin:0 0 10px 0;}
+ .select_group { position: absolute; top: 5px; left: 0; }
+ .select_group select { height: 27px; border: 1px solid #dedede; padding: 3px 4px; }
+ /*.date_view { position: relative; top: 9px; margin: 0 0 0 -85px; border: 1px solid #dedede;} */
+ .date_view { position: absolute; top: 9px; left: 37%; margin: 0 0 0 -85px; }
+ .date_view ul { display: inline-block; }
+ .date_view ul li { float: left; }
+ .date_view ul li.date { color: #000; font-size: 18px; font-weight: bold; margin-right: 5px; margin-left: 5px;}
+ .date_view ul li a { display: block; height: 19px; line-height: 19px; background-color: #fff; border: 1px solid #e6e6e6; }
+ .date_view ul li a:hover { background-color: #e6e6e6; }
+ .date_view ul li a.today { padding: 0 7px; color: #000; font-size: 11px; margin-right: 5px; }
+ .date_view ul li a.prev { width: 18px; background: url('../../../../../../images/egovframework/com/cop/smt/sdm/btn_prev.png') 5px no-repeat; text-indent: -10000em; margin-right: 0px; }
+ .date_view ul li a.next { width: 18px; background: url('../../../../../../images/egovframework/com/cop/smt/sdm/btn_next.png') 6px 5px no-repeat; text-indent: -10000em; }
+ /*
+ .view_type { position: absolute; top: 5px; right: 0; }
+ .view_type ul { display: inline-block; }
+ .view_type ul li { float: left; margin-left: -1px; }
+ .view_type ul li a { display: block; height: 25px; line-height: 25px; color: #000; font-weight: bold; padding: 0 10px; background-color: #f4f4f4; border: 1px solid #e6e6e6; }
+ .view_type ul li a:hover { background-color: #e6e6e6; }
+ .view_type ul li a.on { background-color: #0c4ca4; color: #fff; border: 1px solid #0c4ca4; }
+ */
+
+.sort_area_top { position: relative; height: 45px; text-align:center; border: 0px solid #dedede; }
+ .view_type_top { position: absolute; top: 5px; left: 28%; text-align:center; border: 0px solid #dedede; }
+ .view_type_top ul { display: inline-block; }
+ .view_type_top ul li { float: left; margin-left: -1px; }
+ .view_type_top ul li a { display:block; text-align:center; width:100px; height:28px; line-height: 28px; color: #000; font-weight: bold; padding: 0 10px; background-color: #f4f4f4; border: 1px solid #e6e6e6; }
+ .view_type_top ul li a:hover { background-color: #e6e6e6; }
+ .view_type_top ul li a.on { background-color: #0c4ca4; color: #fff; border: 1px solid #0c4ca4; }
+
+
+ .month { width: 100%; table-layout: fixed; border-top: 2px solid #0c4ca4; }
+ .month caption { display: none; }
+ .month thead th { text-align: left; color: #333; padding: 11px 0 12px 8px; background-color: #f4f4f4; }
+ .month tbody td { padding: 2px 6px 2px 4px; border-left: 1px solid #e6e6e6; overflow: hidden; text-overflow: clip; white-space: nowrap; }
+ .month tbody tr { height: 19px; border-bottom: 1px solid #fff; }
+ .month tbody tr.num td { color: #000; padding: 6px 7px; }
+ .month tbody tr.num td.opa { opacity: 0.4 }
+ .month thead th:nth-child(1),
+ .month tbody td:nth-child(1),
+ .month tbody td.holiday { color: #d90101 !important; }
+ .month tbody td:nth-child(1) { border-left: 0; }
+ .month tbody tr.line td { border-bottom: 1px solid #e6e6e6; }
+ .month tbody tr.last td { border-bottom: 0; }
+ .month tbody td.period { color: #fff; padding: 2px 6px 2px 4px; }
+ .month tbody td.purple_bg { background-color: #8394cf; }
+ .month tbody td.purple_txt { color: #5f74bb; }
+ .month tbody td.sky_bg { background-color: #69c2d2; }
+ .month tbody td.sky_txt { color: #2f95af; }
+ .month tbody td.pink_bg { background-color: #f1718c; }
+ .month tbody td.pink_txt { color: #ea4367; }
+ .month tbody td.org_bg { background-color: #f58555; }
+ .month tbody td.org_txt { color: #f3672a; }
+ .month tbody td.green_bg { background-color: #93cc4b; }
+ .month tbody td.green_txt { color: #71a82b; }
+ .month tbody span.arrow { float: right; width: 4px; height: 5px; margin-top: 4px; background: url('../../../../../../images/egovframework/com/cop/smt/sdm/bullet_arrow.png') no-repeat; text-indent: -10000em; }s
+
+ .week_calendar { position: relative; }
+ .title { position: relative; top: 0; width: 100%; border-top: 2px solid #0c4ca4; margin-bottom: 11px; }
+ .title caption { display: none; }
+ .title thead th { height: 50px; text-align: center; color: #333; font-weight: normal; padding-left: 8px; background-color: #f4f4f4; }
+ .title tbody tr { border-bottom: 1px solid #fff; }
+ .title tbody td { vertical-align:middle;padding: 0px 0px 0px 2px; border-left: 1px solid #e6e6e6; text-align: center; font-size: 12px; }
+ /*
+ .title thead th:nth-child(2),
+ .title tbody td.holiday { color: #d90101 !important; }
+ */
+ .title tbody tr.line td { border-bottom: 1px solid #e6e6e6; }
+ /*
+ .title tbody td:nth-child(1) { vertical-align: top; text-align: right; color: #333; padding-right: 7px; border-left: 0; }
+ .title tbody td:nth-child(1),
+ */
+ .title tbody td:nth-child(1) { border-left: 0;}
+ .title tbody td:nth-child(2) { line-height: 180%;}
+
+ .week_area { position: absolute; top: 89px; right: 0; left: 0; overflow: hidden; overflow-y: auto; }
+ .week_schedule { width: 100%; table-layout: fixed; border-top: 1px solid #e6e6e6; }
+ .week_schedule caption { display: none; }
+ .week_schedule tbody td { border-left: 1px solid #e6e6e6; color: #fff; font-size: 11px; }
+ .week_schedule tbody td:nth-child(1) { border-left: 0; }
+ .week_schedule tbody tr.grid td { padding-right: 0; }
+ .grid_time_wrap { position: relative; margin: 0; }
+ .grid_time_wrap .grid_time { position: absolute; width: 100%; }
+ .grid_time_wrap .hour_cell { height: 40px; border-bottom: 1px solid #e6e6e6; }
+ .grid_time_wrap .half { height: 20px; margin: -1px 0 19px; border-top: 1px solid #e6e6e6; font-size: 1px; }
+
+ .time_area { position: relative; width: 70px; }
+ .time_area ul { display: inline-block; width: 100%; }
+ .time_area ul li { display: block; text-align: right; white-space: nowrap; padding: 0 7px 26px 0; color: #333; }
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cop/smt/sdm/dept_schdule_manage.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/cop/cmy/community.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/cop/cmy/community.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/cop/cmy/community.css (revision 7)
@@ -0,0 +1,58 @@
+@charset "utf-8";
+
+/* community *********************************/
+#cmnt_wrap { width: 970px; margin-left: 10px; }
+#cmnt_header { position: relative; }
+#cmnt_header .visual { width: 970px; height: 130px; background: url('../../../../../images/egovframework/com/cop/com/cmy/community_title.png') no-repeat; text-indent: -10000em; }
+#cmnt_header .visual_default { width:970px; height:147px; background: url('../../../../../images/egovframework/com/cop/com/cmy/community_title_bg2.jpg') no-repeat; }
+#cmnt_header .visual_default h1 { color:#3f73c2; font-family:Malgun Gothic, sans-serif; font-size:24px; font-weight:bold; padding: 47px 0 15px 20px; }
+#cmnt_header .visual_default p { color:#002e54; font-size:14px; font-weight:bold; padding-left:20px; }
+#cmnt_header .h_menu { width: 970px; height:45px; border-top:3px solid #000; border-radius:0 0 5px 5px; background:#3f73c2 url('../../../../../images/egovframework/com/cop/com/cmy/bg_gnb_r.jpg') no-repeat right top; }
+#cmnt_header .h_menu ul.gnb { float: left; display: inline-block; }
+#cmnt_header .h_menu ul.gnb li { float: left; }
+#cmnt_header .h_menu ul.gnb li a {display:block; height:45px; padding:0 20px; color:#fff; font-size:14px; font-weight:bold; line-height:45px; background:url(../../../../../images/egovframework/com/cop/com/cmy/bg_bar01.jpg) no-repeat right center; }
+#cmnt_header .h_menu ul.gnb li a.on {background:#1e3b87; }
+#cmnt_header .h_menu ul.gnb li:last-child a { background:none; }
+#cmnt_header .h_menu ul.gnb li:last-child a.on {background:#1e3b87; }
+#cmnt_header .h_menu ul.gnb li.home a {padding:0 20px 0 36px; }
+#cmnt_header .h_menu ul.gnb li.home a.on {border-radius:0 0 0 5px; background:#1e3b87 url(../../../../../images/egovframework/com/cop/com/cmy/bl01.png) no-repeat 20px 17px; }
+
+#cmnt_container { position: relative; margin-top: 40px; }
+ #left_menu { position: absolute; width: 190px; top: 0; left: 0; margin-top: 2px; margin-right: 30px; }
+ #left_menu h2 { height:41px; padding:29px 0 0 19px; color:#fff; font-size:16px; font-weight:bold; background:url(../../../../../images/egovframework/com/cop/com/cmy/bg_lnb_tit.jpg) no-repeat; }
+ #left_menu ul {border:1px solid #91969c; border-radius:0 0 5px 5px; }
+ #left_menu ul li { border-bottom:1px solid #c8cacd; }
+ #left_menu ul li:last-child { border-bottom:0; }
+ #left_menu ul li a { display: block; padding: 11px; color: #444; font-weight: 600; }
+ #left_menu ul li a:hover,
+ #left_menu ul li a.on { color:#3f63c2; background:url(../../../../../images/egovframework/com/cop/com/cmy/bl02.jpg) no-repeat right center; }
+ #left_menu .left_btn { margin-bottom:5px; padding:11px 10px 11px 14px; border:1px solid #677a8f; border-radius:5px; background:#8799ad url(../../../../../images/egovframework/com/cop/com/cmy/bl03.jpg) no-repeat right center; }
+ #left_menu .left_btn a { display:block; color:#fff; font-weight: bold; background: url('../../../../../images/egovframework/com/cop/com/cmy/btn_next.png') right 3px no-repeat; }
+ #cmnt_content { position: absolute; width: 775px; top: 0; left: 200px; }
+ #cmnt_content ul.main_board { margin-top: 8px; }
+ #cmnt_content ul.main_board > li { float: left; width: 365px; margin-bottom: 40px; }
+ #cmnt_content ul.main_board li:nth-child(2),
+ #cmnt_content ul.main_board li:nth-child(4) { float: right; }
+ #cmnt_content ul.main_board li strong { font-size: 14px; color: #333; }
+ #cmnt_content ul.main_board li .more { float: right; display: block; padding-right: 18px; background: url('../../../../../images/egovframework/com/cop/com/cmy/btn_more.png') right 1px no-repeat; }
+ #cmnt_content ul.main_board ul.list { padding-top: 16px; border-top: 2px solid #364961; margin-top: 10px; }
+ #cmnt_content ul.main_board ul.list li { float: left; width: 355px; font-size: 13px; background: url('../../../../../images/egovframework/com/cop/com/cmy/txt_gray_dot.png') left 7px no-repeat; padding-left: 10px; margin-bottom: 18px; }
+ #cmnt_content ul.main_board ul.list li:last-child { margin-bottom: 0; }
+ #cmnt_content ul.main_board ul.list li a:hover { text-decoration: underline; }
+ #cmnt_content ul.main_board ul.list li span.date { float: right; color: #888; font-size: 12px; }
+ #cmnt_content ul.main_board ul.null li { text-align: center; font-size: 14px; font-weight: bold; background: none; }
+
+ #if_cmnt_content { position: absolute; width: 768px; top: 0; left: 0px; }
+ #if_cmnt_content ul.main_board { margin-top: 8px; }
+ #if_cmnt_content ul.main_board > li { float: left; width: 365px; margin-bottom: 40px; }
+ #if_cmnt_content ul.main_board li:nth-child(2),
+ #if_cmnt_content ul.main_board li:nth-child(4) { float: right; }
+ #if_cmnt_content ul.main_board li strong { font-size: 14px; color: #333; }
+ #if_cmnt_content ul.main_board li .more { float: right; display: block; padding-right: 18px; background: url('../../../../../images/egovframework/com/cop/com/cmy/btn_more.png') right 1px no-repeat; }
+ /* #if_cmnt_content ul.main_board ul.list { padding-top: 16px; border-top: 2px solid #364961; margin-top: 10px; }*/
+ #if_cmnt_content ul.main_board ul.list { padding-top: 16px; border-top: 2px solid #364961; margin-top: 10px;}
+ #if_cmnt_content ul.main_board ul.list li { text-align: left; float: left; width: 355px; font-size: 13px; background: url('../../../../../images/egovframework/com/cop/com/cmy/txt_gray_dot.png') left 7px no-repeat; padding-left: 10px; margin-bottom: 18px; }
+ #if_cmnt_content ul.main_board ul.list li:last-child { margin-bottom: 0; }
+ #if_cmnt_content ul.main_board ul.list li a:hover { text-decoration: underline; }
+ #if_cmnt_content ul.main_board ul.list li span.date { float: right; color: #888; font-size: 12px; }
+ #if_cmnt_content ul.main_board ul.null li { text-align: center; font-size: 14px; font-weight: bold; background: none; }
Property changes on: base3.10/src/main/webapp/css/egovframework/com/cop/cmy/community.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/uss/olp/opp/online_poll.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/uss/olp/opp/online_poll.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/uss/olp/opp/online_poll.css (revision 7)
@@ -0,0 +1,19 @@
+@charset "utf-8";
+
+/* OnlinePoll Layout *********************************/
+.poll { position: relative; width: 730px; }
+.poll h1 { float: left; color: #333; font-size: 16px; font-weight: 600; margin: 18px 0 10px; }
+dl.poll_chart { padding: 30px; }
+dl.poll_chart dt { color: #444; margin-bottom: 7px; }
+dl.poll_chart dd { display: inline-block; margin-bottom: 13px; }
+dl.poll_chart dd:last-child { margin-bottom: 0; }
+dl.poll_chart ul li { position: relative; float: left; display: inline; }
+dl.poll_chart ul li:first-child { margin-right: 25px; }
+dl.poll_chart ul li span.g_bar { display: inline-block; width: 580px; height: 8px; background: #e5e5e5; /* background: url('../images/poll_bar_gray.gif') repeat-x; */ }
+
+dl.poll_chart ul li span.g_bar2 { display: inline-block; width: 500px; height: 8px; background: #e5e5e5; text-align: left; /* background: url('../images/poll_bar_gray.gif') repeat-x; */ }
+dl.poll_chart ul li span.g_org { position: absolute; display: inline-block; height: 8px; background: #e2623d; /* background: url('../images/poll_bar_org.gif') repeat-x; */ }
+
+ul.poll_partcptn { display: inline-block; padding: 30px; }
+ul.poll_partcptn li { float: left; margin-right: 12px; }
+ul.poll_partcptn li input[type="radio"] { margin-right: 4px; }
Property changes on: base3.10/src/main/webapp/css/egovframework/com/uss/olp/opp/online_poll.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/uss/ion/ntm/note_manage.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/uss/ion/ntm/note_manage.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/uss/ion/ntm/note_manage.css (revision 7)
@@ -0,0 +1,41 @@
+@charset "utf-8";
+
+/* Base Style *****************************/
+* { margin: 0; padding: 0; border: 0; }
+body { overflow-y:scroll; }
+body, div, table, form, th, td, input, textarea, select, button { font:12px 'dotum'; color:#666; }
+h1, th { color:#333; }
+img { border: 0; }
+img, label { vertical-align: middle; }
+ul, { list-style : none; }
+caption { display:none; }
+table { border-collapse: collapse; border-spacing: 0; width: 100%; }
+select { width:299px; height:80px; border:1px solid #c9c9c9; padding:5px 3px 6px; margin-right:3px; }
+a { color: #000; text-decoration: none; }
+a, button, input[type="button"], input[type="submit"] { cursor: pointer; }
+textarea,
+input[type="text"],
+input[type="option"]
+{ border:1px solid #c9c9c9; padding:4px; }
+input[type="button"], input[type="submit"] { border:none; padding:6px 12px 7px; background:#3d70b6; color:#fff; }
+input[type="checkbox"] { vertical-align:middle; margin:0 5px 0 0; }
+.hide { text-indent:-99999em; }
+.clear { clear:both; }
+.txt-cnt { text-align:center; }
+.mt20 { margin-top:20px; }
+.ml5 { margin-left:5px; }
+.note { position: relative; width:730px; }
+h1 { font-size:14px; margin:18px 0 10px; }
+
+/* Table Style */
+.tbl_note { width:100%; table-layout:fixed; word-wrap:break-word; border-top:2px solid #0c4ca4; border-bottom:1px solid #aaabb0; }
+.tbl_note thead th { border-bottom:1px solid #c0c1c6; }
+.tbl_note th { vertical-align:middle; background:#f4f4f4; }
+.tbl_note tbody th { background:#f4f4f4 url('../images/check.png') 25px center no-repeat ; padding-left:40px; }
+.tbl_note tbody th.ic_none { background:#f4f4f4; padding-left:53px; }
+.tbl_note tbody th, .tbl_note td { text-align:left; border-top:1px solid #e2e3e5; }
+.tbl_note th, .tbl_note td { padding:7px; }
+.tbl_note th:first-child, .tbl_note td:first-child { border-left:none; }
+
+/* Button Style */
+.btnStyle01 { display: inline-block; border:1px solid #d2d2d2; padding:5px 10px 4px; color:#666; font-size:11px; background:#fafafa; cursor:pointer; }
Property changes on: base3.10/src/main/webapp/css/egovframework/com/uss/ion/ntm/note_manage.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/com.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/com.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/com.css (revision 7)
@@ -0,0 +1,527 @@
+/*
+ Css Name :com.css
+ Description :공통 CSS
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2016.06.08 서민영 최초 생성
+ 2018.06.01 유현우 공통컴포넌트 3.8 개선
+
+ author :공통컴포넌트 개발팀 서민영
+ since :2016.06.08
+*/
+@charset "utf-8";
+
+/* Base Style *****************************/
+* { margin:0; padding:0; border:0; }
+/* body { overflow-y:auto; } */
+body{
+ /*margin-top:20px;*/
+ margin-left:10px;
+ padding-top:0px;
+ padding-left:0px;
+ margin-bottom:0;
+ font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif';
+ font-size:12px;
+}
+
+div,table,em,h1,h2,h3,h4,h5,h6,form,fieldset,p,th,td,input,textarea,select,button {
+ font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif'; font-size:12px; color:#666; }
+
+fieldset, img { border:0; }
+textarea { width:100%; resize:none; }
+img, label { vertical-align:middle; }
+ul, ol { list-style :none; }
+caption span, .hide, legend { position:absolute; left:-1000%; top:0; }
+table { border-collapse:collapse; border-spacing:0; width:100%; }
+a { color:#666; text-decoration:none; }
+a:hover { color:#000; text-decoration:none; }
+a, button, input[type="button"] { cursor:pointer; }
+textarea,
+input[type="file"],
+input[type="password"],
+input[type="text"] {border:1px solid #d2d2d2; color:#727272; }
+textarea[readonly="readonly"],
+button[readonly="readonly"],
+select[readonly="readonly"],
+input[readonly="readonly"],
+textarea[disabled="disabled"],
+button[disabled="disabled"],
+select[disabled="disabled"],
+input[disabled="disabled"] { color:#999; background:#f7f7f7; }
+input[type="password"],
+input[type="file"],
+input[type="text"] { /*height:15px; vertical-align:middle; */ }
+input[type="file"] { width:100%; }
+input[type="radio"] { vertical-align:text-bottom; }
+
+.vam { vertical-align:middle !important; }
+.ml10 { margin-left:10px !important; }
+.mr10 { margin-right:10px !important; }
+.mb10 { margin-bottom:10px !important; }
+.mb20 { margin-bottom:20px !important; }
+.mt20 { margin-top:20px !important; }
+
+
+/* box Style *****************************/
+.boxType1 { position:relative; border:4px solid #ececec; background:#f7f7f7; }
+.boxType1 .box { background:#fff; margin:4px; }
+.boxType1 .box .error { padding:25px 0 25px 190px; min-height:50px; background:url('../images/bul_i.jpg') 30px 50% no-repeat; }
+.boxType1 .box .error p.title { color:#DB6415; font-size:16px; line-height:21px; font-weight:bold; margin-bottom:10px; }
+.boxType1 .box .error p.cont { line-height:18px; }
+
+.boxType2 { position:relative; border:4px solid #f1f1f1; background:#f7f7f7; }
+
+
+/* button Style *****************************/
+.btn_style1 { display:inline-block; padding:6px 12px; border-radius:1px; }
+.btn_style1 a { color:#fff; font-size:13px; font-weight:bold; }
+.btn_style1 a:hover { opacity:0.6; }
+.btn_style2 { display:inline-block; padding:4px 10px; border:1px solid #d2d2d2; color:#333; font-size:11px; background:#f4f4f4; border-radius:1px; }
+.btn_style3 { display:inline-block; padding:5px 8px; background:#3d70b6; border-radius:1px; color:#fff; font-size:11px;}
+.btn_style3c { padding:5px 8px; background:#3d70b6; border-radius:1px; color:#fff; font-size:11px; cursor:pointer;}
+.btn_style4 { padding:5px 11px; }
+
+.btn_right { float:right; }
+.blue { background:#3d70b6; }
+.gray { background:#9e9e9e; }
+
+
+/* input Style *****************************/
+.input2 { height:21px !important; padding-left:5px; margin-right:3px; }
+
+
+
+/* select Style *****************************/
+.select2 { padding:2px 3px 3px 4px; border:1px solid #d2d2d2; }
+
+
+/* textarea Style *****************************/
+.textarea2 { padding:4px 0 0 6px; }
+.textarea3 { padding:4px 0 0 6px; background:#f7f7f7; }
+
+/* file Style *****************************/
+.file_add { margin-top:6px; width:100%; border:0px solid #666;}
+.file_add a { display:inline-block; width:13px; height:18px; background:url('../../../images/egovframework/com/cmm/btn/btn_del.png') 1px 2px no-repeat; text-indent:-10000em; }
+.file_input_textbox { float:left; color:#666; border:1px solid #cfcfcf !important; padding-left:5px; margin-right:4px; }
+.file_input_div { position:relative; width:66px; height:23px; overflow:hidden; }
+.file_input_button { position:absolute; width:66px; height:23px; background:#3d70b6; border-radius:1px; font-size:11px; color:#fff; border:none; }
+.file_input_hidden { position:absolute; font-size:45px; right:0; top:0; opacity:0; cursor:pointer;
+ filter:alpha(opacity=0);
+ -ms-filter:"alpha(opacity=0)";
+ -khtml-opacity:0;
+ -moz-opacity:0;
+}
+
+.cursor {cursor:pointer;}
+/*.error {color :#ff0000;} */
+
+/* Popup Layout *********************************/
+.popup { position:relative; }
+.popup h1 { float:left; color:#333; font-size:16px; font-weight:600; margin:18px 0 10px; }
+.pop_search_box { float:right; display:inline; margin:15px 6px 0 0; }
+.pop_search_box ul li { float:left; margin-left:5px; }
+.pop_search_box select { padding:2px 3px 3px 4px; border:1px solid #d2d2d2; }
+.pop_search_box input.s_input { width:140px; padding-left:5px; margin-right:3px; }
+.pop_search_box input.s_btn { height:24px; padding:0 10px; margin:0 0 0 0;border:none; color:#fff; background:#3d70b6; border-radius:2px; cursor:pointer; }
+.pop_search_box input.s_btn:hover { opacity:0.6; }
+
+.pop_board_list { width:100%; border-top:2px solid #0c4ca4; }
+.pop_board_list caption { display:none; }
+.pop_board_list thead th,
+.pop_board_list tbody th { color:#222 ; font-weight:bold; background:#f4f4f4; padding:12px 0; border-bottom:1px solid #e6e6e6; }
+.pop_board_list tbody th { text-align:left; padding-left:14px; }
+.pop_board_list tbody th.vtop { vertical-align:top; }
+.pop_board_list tbody th .ic_chk { background:url('../images/tbl_check.png') left 3px no-repeat; padding-left:14px; }
+.pop_board_list tbody th span.pilsu { color:#d0270b; font-weight:500; margin-left:3px; }
+.pop_board_list tbody td { text-align:center; padding:11px 5px; border-bottom:1px solid #e6e6e6; }
+.pop_board_list tbody td.left { text-align:left; padding-left:8px; }
+.pop_board_list tbody td.cnt { text-align:left; padding:12px 10px 20px; line-height:160%; }
+.pop_board_list tbody td.nopd { text-align:left; padding:0; border-left:1px solid #fff; }
+.pop_board_list tbody td input.bbs_Nm { width:99%; }
+.pop_board_list tbody td input.tmp { width:160px; }
+.pop_board_list tbody td textarea { width:99%; height:100px; }
+.pop_board_list tbody td textarea.txt { width:97%; height:300px; margin:6px 8px; }
+.pop_board_list tbody td textarea.re_txt { float:left; width:80%; }
+.pop_board_list tbody td a.re_btn { float:right; padding:43px 31px; margin:1px 2px 0 0; font-size:12px; font-weight:600; }
+.pop_board_list tbody td select { padding:2px 0 3px 2px; border:1px solid #dedede; }
+.pop_board_list tbody td img { margin-left:7px; }
+
+.popwTable { width:100%; border-top:2px solid #0c4ca4; }
+.popwTable caption { display:none; }
+.popwTable thead th,
+.popwTable tbody th { color:#222 ; font-size:13px; font-weight:400; background:#f4f4f4; padding:12px 0; border-bottom:1px solid #d9d9d9; }
+.popwTable tbody tr.odd { }
+.popwTable tbody.ov tr:hover { background:#f9f9f9; }
+.popwTable tbody th { text-align:left; padding-left:14px; }
+.popwTable tbody th.vtop { vertical-align:top; }
+.popwTable tbody th span.pilsu { color:#d0270b; font-weight:500; margin-left:3px; }
+.popwTable tbody td { text-align:center; padding:11px 5px; border-bottom:1px solid #d9d9d9; }
+.popwTable tbody td.left { text-align:left; padding:6px 8px; }
+.popwTable tbody td.left div .error {color :#ff0000;}
+.popwTable tbody td.cnt { text-align:left; padding:12px 10px 20px; line-height:160%; }
+.popwTable tbody td.nopd { text-align:left;}
+.popwTable tbody td.nopd div .error {color :#ff0000; margin:0px 0px 0px 10px;}
+.popwTable tbody td.bold { text-align:left; font-size:14px; font-weight :bold;}
+.popwTable tbody td a:hover { text-decoration:underline; }
+.popwTable tbody td input { width:99%; }
+.popwTable tbody td input.tmp { width:160px; }
+.popwTable tbody td textarea { width:99%; height:50px; }
+.popwTable tbody td textarea.txt { width:96%; height:50px; margin:8px; padding:5px; }
+.popwTable tbody td textarea.re_txt { float:left; width:80%; }
+.popwTable tbody td a.re_btn { float:right; padding:43px 30px; margin:1px 0 0 0; font-size:12px; font-weight:600; }
+.popwTable tbody td a.re_btn:hover { text-decoration:none; }
+.popwTable tbody td select { padding:2px 0 3px 2px; border:1px solid #dedede; }
+.popwTable tbody td img { margin-left:7px; }
+
+.board {position:relative; width:730px; padding-top:20px; }
+.board h1,
+.board h2 {/*float:left;*/ color:#333; font-size:16px; font-weight:600; }
+.board h1 {margin-bottom:7px; padding:0 0 1px 25px; background:url(../../../images/egovframework/com/cmm/icon/tit_icon.png) no-repeat left 0px; }
+.board h2 { margin:15px 0 10px 0; }
+.board h3 { color:#333; font-size:14px; font-weight:600; margin:50px 0 10px 0; }
+.board h3 b { color:#2277d7; }
+.search_box {/* float:right;*/ position:relative; margin-bottom:7px; padding:13px 10px; border:1px solid #b1bbcb; border-top:3px solid #8191ac; background:#eef3fb; }
+.search_box ul {font-size:0; text-align:right; }
+.search_box ul li {/* float:left;*/display:inline-block; margin-left:5px; font-size:11px; vertical-align:top; }
+.search_box ul li img { margin-left:7px; }
+.search_box ul li > div {color:#194e73; font-weight:bold; vertical-align:top; }
+.search_box ul li > label {display:inline-block; height:24px; color:#194e73; font-size:12px; font-weight:bold; line-height:24px; }
+.search_box ul li > input[type=text] {height:22px; }
+.search_box select {height:24px; /*padding:3px 3px 3px 4px;*/ border:1px solid #dedede; }
+.search_box input.s_input {width:140px; height:22px; margin-right:3px; padding-left:5px; }
+.search_box input.s_input2 {width:140px; height:22px; margin-right:3px; padding-left:5px; }
+.search_box input.s_btn { height:24px; padding:0 8px; border:none; color:#fff; background:#4688d2; border-radius:2px; cursor:pointer; }
+.search_box input.s_btn:hover { background:#7dabdf; }
+
+.search_box span.s_btn { display:inline-block; vertical-align:top; height:13px; font-size:12px; padding:6px 12px 5px 12px; background:#4688d2; border-radius:2px; cursor:pointer; }
+.search_box span.s_btn:hover { background:#7dabdf;}
+.search_box span.s_btn a { color:#fff; }
+
+.search_box span.btn_b { display:inline-block; vertical-align:top; height:13px; font-size:12px; padding:3px 0 8px 0; background:#4688d2; border-radius:2px; cursor:pointer; }
+.search_box span.btn_b:hover { background:#7dabdf;}
+.search_box span.btn_b a { vertical-align:text-top; color:#fff; display:block; line-height:19px; padding:0 8px;}
+
+.search_box .con {display:inline-block; width:40%; margin-bottom:2px; }
+.search_box .con.full {display:inline-block; width:80%; margin-bottom:2px; }
+.search_box .con label {display:inline-block; width:70px; height:24px; color:#194e73; font-size:12px; font-weight:bold; line-height:24px; }
+.search_box .con input[type=text] {height:22px; }
+.search_box .bt_a {position:absolute; right:10px; top:13px; }
+
+.noScriptTitle {
+font-size :17px;
+color :blue;
+text-align :center;
+font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif';
+font-weight :bold;
+padding-bottom :12px;
+}
+
+/* table style */
+.board_list {width:100%; table-layout:fixed; border-top:2px solid #4688d2; }
+.board_list caption { display:none; }
+.board_list thead th,
+.board_list tbody th { color:#222 ; font-size:13px; font-weight:400; background:#f4f4f4; padding:12px 0; border-bottom:1px solid #d9d9d9; }
+.board_list tbody tr.odd { }
+.board_list tbody.ov tr:hover { background:#f9f9f9; }
+.board_list tbody th { text-align:left; padding-left:14px; }
+.board_list tbody th.vtop { vertical-align:top; }
+.board_list tbody th span.pilsu { color:#d0270b; font-weight:500; margin-left:3px; }
+.board_list tbody td { text-align:center; padding:11px 5px; border-bottom:1px solid #d9d9d9;
+ word-break:break-all; white-space:-moz-pre-wrap; overflow:hidden; text-overflow:ellipsis;}
+.board_list tbody td.left { text-align:left; padding:6px 8px; }
+.board_list tbody td.leftElli { text-align:left; padding:6px 8px;
+overflow:hidden;
+text-overflow:ellipsis;
+-o-text-overflow:ellipsis;
+white-space:nowrap;
+width:100%;
+}
+.board_list tbody td.cnt { text-align:left; padding:12px 10px 20px; line-height:160%; }
+.board_list tbody td.nopd { text-align:left;}
+.board_list tbody td.bold { text-align:left; font-size:14px; font-weight :bold;}
+.board_list tbody td.bold input { text-align:left; font-size:14px; font-weight :bold;}
+.board_list tbody td a:hover { text-decoration:underline; }
+.board_list tbody td input.bbs_Nm { width:99%; }
+.board_list tbody td input.link {color:#666; }
+.board_list tbody td input.tmp { width:160px; }
+.board_list tbody td textarea { width:99%; height:50px; }
+.board_list tbody td textarea.txt { width:96%; height:300px; margin:8px; padding:5px; }
+.board_list tbody td textarea.re_txt { width:470px; float:left; margin-right:8px; height:96px; }
+.board_list tbody td a.re_btn { float:right; padding:43px 30px; margin:1px 0 0 0; font-size:12px; font-weight:600; }
+.board_list tbody td a.re_btn:hover { text-decoration:none; }
+.board_list tbody td select { padding:2px 0 3px 2px; border:1px solid #dedede; }
+.board_list tbody td img { margin-left:7px; }
+
+.top_line { border-top:1px solid #d9d9d9; }
+.board_th_link {
+ font-weight:600;
+}
+
+
+/* table style */
+.wTableFrm {position:relative; width:730px; padding-top:20px; }
+.wTableFrm h1, .wTableFrm h2 {/* float:left;*/ color:#333; font-size:16px; font-weight:600; }
+.wTableFrm h1 { margin-top:15px; }
+.wTableFrm h2 {margin-bottom:10px; padding-left:25px; background:url(../../../images/egovframework/com/cmm/icon/tit_icon.png) no-repeat left top; }
+.wTableFrm h3 { color:#333; font-size:14px; font-weight:600; margin:50px 0 10px 0; }
+.wTableFrm h3 b { color:#2277d7; }
+
+.wTable { width:100%; border-top:2px solid #4688d2; }
+.wTable caption { display:none; }
+.wTable > thead > tr > th,
+.wTable > thead > tr > th { color:#222 ; font-size:13px; font-weight:400; background:#f4f4f4; padding:12px 0; border-bottom:1px solid #d9d9d9; }
+.wTable > tbody tr.odd { }
+.wTable > tbody.ov tr:hover { background:#f9f9f9; }
+.wTable > thead > tr > th { text-align:left; padding-left:14px; }
+.wTable > thead > tr > th.vtop { vertical-align:top; }
+.wTable > thead > tr > th span.pilsu { color:#d0270b; font-weight:500; margin-left:3px; }
+.wTable > tbody > tr > th { padding-left:14px; border-bottom:1px solid #d9d9d9; text-align:left; background:#f4f4f4; }
+.wTable > tbody > tr > th.vtop { vertical-align:top; }
+.wTable > tbody > tr > th span.pilsu { color:#d0270b; font-weight:500; margin-left:3px; }
+.wTable > tbody > tr > td { text-align:center; padding:11px 5px; border-bottom:1px solid #d9d9d9; }
+.wTable > tbody > tr > td.left { text-align:left; padding:6px 8px; }
+.wTable > tbody > tr > td.left div .error {color :#ff0000;}
+.wTable > tbody > tr > td.cnt { text-align:left; padding:12px 10px 20px; line-height:160%; }
+.wTable > tbody > tr > td.nopd { text-align:left;}
+.wTable > tbody > tr > td.nopd div .error {color :#ff0000; margin:0px 0px 0px 10px;}
+.wTable > tbody > tr > td.bold { text-align:left; font-size:14px; font-weight :bold;}
+.wTable > tbody > tr > td a:hover { text-decoration:underline; }
+.wTable > tbody > tr > td input[type=text] {width:99%; height:22px; }
+.wTable > tbody > tr > td input.tmp { width:160px; }
+.wTable > tbody > tr > td textarea { width:99%; height:50px; }
+.wTable > tbody > tr > td textarea.txt { width:96%; height:50px; margin:8px; padding:5px; }
+.wTable > tbody > tr > td textarea.re_txt { float:left; width:80%; }
+.wTable > tbody > tr > td a.re_btn { float:right; padding:43px 30px; margin:1px 0 0 0; font-size:12px; font-weight:600; }
+.wTable > tbody > tr > td a.re_btn:hover { text-decoration:none; }
+.wTable > tbody > tr > td select {height:24px; border:1px solid #dedede; }
+.wTable > tbody > tr > td img {/* margin-left:7px;*/ }
+.wTable input[readonly="readonly"] {height:22px; border:1px solid #d2d2d2; }
+.wTable > tbody > tr > td input[type=checkbox] {vertical-align:-3px; }
+
+
+/* toolbar */
+.toolbar { height:52px; background-color:#e5e5e5; padding-bottom:4px; border-bottom:1px solid #dedede; }
+ .group { float:left; padding:4px 0 0 8px; }
+ .group ul { float:left; padding:0; margin:0 3px 0 0; }
+ .group ul li { float:left; margin-right:3px; }
+ .group ul.format li { margin:2px 0 0 0; }
+ .group ul.sep { border-left:1px solid #ccc; padding:0 3px; border-right:1px solid #ccc; }
+
+ .group input[type="button"] { width:22px; height:20px; line-height:20px; text-indent:-10000em; border:none; cursor:pointer; }
+ .group input[type="button"]:hover, .group input.on { background-color:#fff; border:1px solid #dedede; }
+ .ed_bold { background:url('../../../images/egovframework/com/cmm/toolbar/ed_format_bold.gif') left top no-repeat; }
+ .ed_italic { background:url('../../../images/egovframework/com/cmm/toolbar/ed_format_italic.gif') 2px top no-repeat; }
+ .ed_underline { background:url('../../../images/egovframework/com/cmm/toolbar/ed_format_underline.gif') 1px top no-repeat; }
+ .ed_strike { background:url('../../../images/egovframework/com/cmm/toolbar/ed_format_strike.gif') 1px top no-repeat; }
+ .ed_sub { background:url('../../../images/egovframework/com/cmm/toolbar/ed_format_sub.gif') 1px 1px no-repeat; }
+ .ed_sup { background:url('../../../images/egovframework/com/cmm/toolbar/ed_format_sup.gif') 1px 1px no-repeat; }
+ .ed_copy { background:url('../../../images/egovframework/com/cmm/toolbar/ed_copy.gif') left top no-repeat; }
+ .ed_cut { background:url('../../../images/egovframework/com/cmm/toolbar/ed_cut.gif') 1px top no-repeat; }
+ .ed_paste { background:url('../../../images/egovframework/com/cmm/toolbar/ed_paste.gif') 1px top no-repeat; }
+ .ed_undo { background:url('../../../images/egovframework/com/cmm/toolbar/ed_undo.gif') 1px top no-repeat; }
+ .ed_redo { background:url('../../../images/egovframework/com/cmm/toolbar/ed_redo.gif') 1px 1px no-repeat; }
+ .ed_rmformat { background:url('../../../images/egovframework/com/cmm/toolbar/ed_rmformat.gif') 1px top no-repeat; }
+ .ed_killword { background:url('../../../images/egovframework/com/cmm/toolbar/ed_killword.gif') 1px top no-repeat; }
+ .ed_al_left { background:url('../../../images/egovframework/com/cmm/toolbar/ed_align_left.gif') 1px top no-repeat; }
+ .ed_al_center { background:url('../../../images/egovframework/com/cmm/toolbar/ed_align_center.gif') 1px top no-repeat; }
+ .ed_al_right { background:url('../../../images/egovframework/com/cmm/toolbar/ed_align_right.gif') 1px top no-repeat; }
+ .ed_al_justify { background:url('../../../images/egovframework/com/cmm/toolbar/ed_align_justify.gif') 1px top no-repeat; }
+ .ed_right { background:url('../../../images/egovframework/com/cmm/toolbar/ed_left_to_right.gif') 1px top no-repeat; }
+ .ed_left { background:url('../../../images/egovframework/com/cmm/toolbar/ed_right_to_left.gif') 1px top no-repeat; }
+ .ed_num { background:url('../../../images/egovframework/com/cmm/toolbar/ed_list_num.gif') 1px top no-repeat; }
+ .ed_bullet { background:url('../../../images/egovframework/com/cmm/toolbar/ed_list_bullet.gif') 1px top no-repeat; }
+ .ed_indent_less { background:url('../../../images/egovframework/com/cmm/toolbar/ed_indent_less.gif') 1px top no-repeat; }
+ .ed_indent_more { background:url('../../../images/egovframework/com/cmm/toolbar/ed_indent_more.gif') 1px top no-repeat; }
+ .ed_fg { background:url('../../../images/egovframework/com/cmm/toolbar/ed_color_fg.gif') 1px top no-repeat; }
+ .ed_bg { background:url('../../../images/egovframework/com/cmm/toolbar/ed_color_bg.gif') 1px top no-repeat; }
+ .ed_hr { background:url('../../../images/egovframework/com/cmm/toolbar/ed_hr.gif') 1px top no-repeat; }
+ .ed_link { background:url('../../../images/egovframework/com/cmm/toolbar/ed_link.gif') 1px top no-repeat; }
+ .ed_image { background:url('../../../images/egovframework/com/cmm/toolbar/ed_image.gif') 1px top no-repeat; }
+ .ed_table { background:url('../../../images/egovframework/com/cmm/toolbar/insert_table.gif') 1px top no-repeat; }
+ .ed_html { background:url('../../../images/egovframework/com/cmm/toolbar/ed_html.gif') 1px top no-repeat; }
+ .ed_fullscreen { background:url('../../../images/egovframework/com/cmm/toolbar/fullscreen_maximize.gif') 1px top no-repeat; }
+ .ed_help { background:url('../../../images/egovframework/com/cmm/toolbar/ed_help.gif') 1px top no-repeat; }
+ .ed_about { background:url('../../../images/egovframework/com/cmm/toolbar/ed_about.gif') 1px top no-repeat; }
+.toolbar select { font-size:11px; }
+
+.reply { width:730px; clear:both; border-top:2px solid #4688d2; position:relative; }
+.reply ul { width:730px; margin:0; padding:0; }
+.reply ul li { width:690px; border-bottom:1px solid #d9d9d9; padding:20px 20px 14px; overflow:hidden;}
+.reply .top { height:17px; padding-bottom:12px; }
+.reply .top strong { color:#333; font-weight:600; }
+.reply .top span.bar { color:#d3d3d3; font-size:10px; padding:0 9px; }
+.reply .top span.date { color:#999; }
+.reply .txt { line-height:19px; }
+.reply .bottom { float:right; margin:10px 0 6px; }
+
+/* pagination */
+.pagination {text-align:center; margin-top:15px; }
+.pagination ul { display:inline-block; }
+.pagination ul li {display:inline-block; margin:0 2px; }
+.pagination ul li a { display:block; color:#999; width:26px; height:26px; line-height:26px; border:1px solid #e0e0e0; }
+.pagination ul li.first a { background:url('../../../images/egovframework/com/cmm/paging/pagination_first.gif') 8px 9px no-repeat; text-indent:-10000em; }
+.pagination ul li.prev a { background:url('../../../images/egovframework/com/cmm/paging/pagination_prev.gif') 11px 9px no-repeat; text-indent:-10000em; }
+.pagination ul li.next a { background:url('../../../images/egovframework/com/cmm/paging/pagination_next.gif') 12px 9px no-repeat; text-indent:-10000em; }
+.pagination ul li.last a { background:url('../../../images/egovframework/com/cmm/paging/pagination_last.gif') 10px 9px no-repeat; text-indent:-10000em; }
+.pagination ul li.first a:hover { background:url('../../../images/egovframework/com/cmm/paging/pagination_first_on.gif') no-repeat; }
+.pagination ul li.prev a:hover { background:url('../../../images/egovframework/com/cmm/paging/pagination_prev_on.gif') no-repeat; }
+.pagination ul li.next a:hover { background:url('../../../images/egovframework/com/cmm/paging/pagination_next_on.gif/') no-repeat; }
+.pagination ul li.current a,
+.pagination ul li a:hover { border:none; color:#fff; font-size:15px; font-weight:600; width:28px; height:28px; line-height:28px; background:#4688d2; }
+
+/* pagination by reply */
+.paging { float:left; display:inline; width:730px; font-size:1em; text-align:center; margin:15px 0 20px; position:relative; }
+.paging ul { display:inline-block; margin:0; padding:0; }
+.paging ul li { float:left; margin:0 3px; }
+.paging ul li a { display:block; width:15px; color:#888; text-decoration:none; }
+.paging ul li.first a { background:url('../../../images/egovframework/com/cmm/paging/pagination_first.gif') center 5px no-repeat; text-indent:-10000em; }
+.paging ul li.prev a { background:url('../../../images/egovframework/com/cmm/paging/pagination_prev.gif') center 5px no-repeat; text-indent:-10000em; }
+.paging ul li.next a { background:url('../../../images/egovframework/com/cmm/paging/pagination_next.gif') center 5px no-repeat; text-indent:-10000em; }
+.paging ul li.last a { background:url('../../../images/egovframework/com/cmm/paging/pagination_last.gif') center 5px no-repeat; text-indent:-10000em; }
+.paging strong { display:block; padding:0 5px; color:#2277d7; }
+
+/* button submit */
+.btn_submit { padding:4px 11px 5px; background:#4688d2; font-weight:600; color:#fff; border-radius:1px; margin-left:4px; cursor:pointer; border:none;}
+.btn_submit:hover { background:#7dabdf; }
+
+/* button style */
+button { padding:5px 12px 7px 12px; background:#4688d2; font-weight:600; color:#fff; border-radius:1px; margin-left:4px; cursor:pointer; }
+button:hover { background:#7dabdf; }
+
+.btn_s2 { margin:0; padding:0px 12px 2px 12px; line-height:19px; word-spacing:-2px; border-radius:1px; font-weight:normal; background:#4688d2; color:#fff; font-size:11px; cursor:pointer; text-align:right;}
+.btn_s2:hover { background:#7dabdf; }
+
+.btn_s { padding:3px 10px 6px 11px; background-color:#4688d2; color:#fff; font-size:11px; border-radius:1px; margin-top:4px;}
+.btn_s:hover { color:#c7dbf1; }
+
+span.btn_s {display:inline-block !important; width:43px !important; height:21px !important; margin-top:0 !important; padding:0 !important; border-radius:1px !important; background:#4688d2 !important; vertical-align:top !important; cursor:pointer; }
+span.btn_s:hover { background:#7dabdf;}
+span.btn_s a {display:block !important; height:21px !important; color:#fff !important; text-align:center !important; line-height:21px !important; vertical-align:top !important; }
+
+span.btn_s2 {display:inline-block !important; height:21px !important; margin-top:0 !important; padding:0 10px !important; border-radius:1px !important; background:#4688d2 !important; vertical-align:top !important; cursor:pointer; }
+span.btn_s2:hover { background:#7dabdf;}
+span.btn_s2 a {display:block !important; height:21px !important; color:#fff !important; line-height:21px !important; vertical-align:top !important; }
+
+/* 2018.01.25 EgovQustnrItemManageListPopup.jsp 관련 추가 */
+span.btn_r { vertical-align:middle; padding:5px 1px 5px 1px; height:13px; margin:0px 0px 1px 0px; display:inline-block; background:#3d70b6; border-radius:0px; cursor:pointer; }
+span.btn_r:hover { background:#7dabdf;}
+span.btn_r a { vertical-align:text-top; color:#fff; display:block; line-height:16px; padding:0px 10px 0px 10px;}
+
+.btn { float:right; margin-top:18px; margin-bottom:15px; font-size:11px; }
+.btn input.s_submit {height:21px; padding:0 10px; border:0 !important; color:#fff; font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif'; font-size:11px; font-weight:200; background:#4688d2; vertical-align:top; cursor:pointer; }
+.btn input.s_submit:hover { background:#7dabdf; }
+
+.blog_title { border-bottom:1px solid #e3e3e3; padding-bottom:10px; }
+.blog_title h5 { float:left; font-size:14px; }
+.blog_title span { border-left:1px solid #dcdada; margin-left:12px; padding-left:12px; vertical-align:middle; }
+.blog_title span a { color:#666; }
+.blog_title p { float:right; font-size:11px; color:#999; }
+
+.link, .link a, .link button, .link input {
+overflow:hidden;
+text-overflow:ellipsis;
+-o-text-overflow:ellipsis;
+white-space:nowrap;
+width:100%;
+text-align :left;
+font-size:12px;
+border-style :none;
+background-color :transparent;
+cursor :pointer;
+}
+.link.ac input {text-align:center; }
+
+
+.egov_file_box label {
+ display:inline-block;
+ padding:.45em .75em;
+ color:#fff;
+ font-size:11px;
+ line-height:normal;
+ vertical-align:middle;
+ background-color:#4688d2;
+ cursor:pointer;
+ border:1px solid #ebebeb;
+ border-bottom-color:#e2e2e2;
+ border-radius:.15em;
+}
+
+.egov_file_box input[type="file"] { /* 파일 필드 숨기기 */
+ position:absolute;
+ width:1px;
+ height:1px;
+ padding:0;
+ margin:-1px;
+ overflow:hidden;
+ clip:rect(0,0,0,0);
+ border:0;
+}
+
+/* 2018 add */
+.blind {position:absolute; left:-9999px; top:-9999px; font-size:0; }
+.vat {vertical-align:top !important; }
+.mr-8 {margin-right:-8px !important; }
+.mb0 {margin-bottom:0px !important; }
+.mb5 {margin-bottom:8px !important; }
+.mb8 {margin-bottom:8px !important; }
+.pt5 {padding-top:5px !important; }
+.btn01 {display:inline-block; padding:5px !important; vertical-align:top !important; cursor:pointer; }
+.btn02 {display:inline-block; height:20px; padding:0 8px; color:#363636; line-height:20px; background:#ddd; }
+
+.calendar {table-layout:fixed; }
+.calendar .day > td {height:70px; padding:10px; border-right:1px solid #fff; border-bottom:1px solid #fff; background:#e5e5e5; vertical-align:top; }
+.calendar .day > td a {display:inline-block; margin-bottom:5px; color:#393939; font-size:10px; font-weight:bold; }
+.calendar .cap > td {height:25px; color:#fff; font-size:12px; font-weight:bold; text-align:center; background:#959fae; vertical-align:middle; }
+.calendar .cap > td.sat {background:#4989ce; }
+.calendar .cap > td.sun {background:#ee615f; }
+
+.cmt01 {font-size:12px; }
+
+.search_box2 {padding:15px 14px; border:1px solid #b1bbcb; border-top:3px solid #8191ac; background:#eef3fb; }
+.search_box2 label {display:inline-block; height:24px; color:#194e73; font-size:12px; font-weight:bold; line-height:24px; vertical-align:top; }
+.search_box2 input[type=text] {height:22px; vertical-align:top; }
+.search_box2 select {height:24px; border:1px solid #dedede; vertical-align:top; }
+.search_box2 > span.t1 {display:inline-block; height:24px; color:#194e73; font-size:16px; font-weight:bold; line-height:24px; vertical-align:top; }
+.search_box2 .btns {height:24px; padding:0 10px; border:none; color:#fff; background:#4688d2; border-radius:2px; cursor:pointer; vertical-align:top; }
+.search_box2 .btns:hover {background:#7dabdf; }
+.search_box2 .btns2 {display:inline-block; height:24px; padding:0 7px; border-radius:2px; color:#fff; font-size:12px; line-height:24px; background:#666; vertical-align:top; }
+
+.tit01 {padding-left:25px; color:#333; font-size:16px; font-weight:bold; background:url(../../../images/egovframework/com/cmm/icon/tit_icon.png) no-repeat; }
+.tit02 {padding-left:17px !important; color:#393939 !important; font-size:12px !important; font-weight:bold !important; background:url(../../../images/egovframework/com/cmm/icon/icon_tit2.png) no-repeat !important; }
+
+.tab01 {height:38px; border:1px solid #b1bbcb; border-radius:3px; background:url(../../../images/egovframework/com/cmm/bg_tab01.gif) repeat-x; }
+.tab01 ul:after {content:""; display:block; height:0; clear:both; visibility:hidden; }
+.tab01 ul li {float:left; padding:0 20px; background:url(../../../images/egovframework/com/cmm/bg_bar01.gif) no-repeat right bottom; }
+.tab01 ul li:last-child {background:none; }
+.tab01 ul li a {display:block; position:relative; top:-1px; height:14px; padding-top:14px; color:#393939; font-weight:bold; }
+.tab01 ul li a.on {background:url(../../../images/egovframework/com/cmm/bg_tab01_on.gif) no-repeat center top; }
+
+/* 리스트 테이블 */
+.table-line{table-layout:fixed; border-collapse:collapse; width:100%; }
+.table-line th{border-top:2px solid #d9d9d9; border-right:1px solid #a3a3a3; border-bottom:1px solid #a3a3a3; background:#e4eaf8; height:20px; padding:0; }
+.table-line td{padding:0; border-right:#d9d9d9 1px solid; border-bottom:#d9d9d9 1px solid; background:#f7f7f7; }
+.table-line td:first-child {border-left:1px solid #d9d9d9; }
+.table-line td.al {text-align:center; }
+
+.txta01 {border:1px solid #d2d2d2; }
+
+.e001 td {height:40px; }
+.e002 td {padding:2px 0; }
+
+.btn_01 {display:inline-block !important; height:24px !important; padding:0 11px !important; border-radius:2px !important; color:#fff !important; font-size:12px !important; line-height:24px !important; background:#4688d2 !important; vertical-align:top !important; }
+.btn_01:hover {background:#7dabdf !important;}
+.btn_02 {display:inline-block !important; height:18px !important; padding:0 10px !important; border:1px solid #9c9c9c; border-radius:2px !important; color:#000 !important; font-size:11px !important; line-height:18px !important; background:url(../../../images/egovframework/com/cmm/btn/bg_btn_02.jpg) repeat-x !important; vertical-align:top !important; }
+
+.schedule thead td {height:25px; color:#fff; text-align:center; background:#959fae; }
+.schedule thead td.sat {background:#4989ce; }
+.schedule thead td.sun {background:#ee615f; }
+.schedule > tbody > tr > td {border-right:1px solid #fff; border-bottom:1px solid #fff; background:#EFEFEF; }
+.schedule .btn_02 {vertical-align:1px !important; }
+
+.twit_list li {margin-bottom:10px; }
+.twit_list li a:hover {text-decoration:underline; }
+.twit_list li img {display:block; margin-top:10px; }
+
+
Property changes on: base3.10/src/main/webapp/css/egovframework/com/com.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/button.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/button.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/button.css (revision 7)
@@ -0,0 +1,99 @@
+/*
+ Css Name : button.css
+ Description : 버튼 CSS
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2008.10.15 장동한 최초 생성
+ 2011.08.24 이기하 이미지 경로 수정
+
+ author : 공통컴포넌트 개발팀 장동한
+ since : 2008.10.15
+*/
+
+.button, .button a, .button button, .button input {
+position : relative;
+margin : 0;
+display : inline-block;
+border : 0;
+white-space : nowrap;
+vertical-align : middle;
+overflow : visible;
+}
+.button {
+height : 20px;
+padding : 0;
+margin-right : 2px;
+background-position : left top;
+}
+.button a, .button button, .button input {
+left : 2px;
+cursor : pointer;
+}
+.button a, .button button, .button input {
+height : 20px;
+padding : 0 8px 0 8px;
+line-height : 20px;
+background-position : right top;
+}
+.button, .button a, .button button, .button input {
+background-image : url(../../../images/egovframework/com/cmm/btn/bu2.jpg);
+color : black;
+}
+.button *:hover, .button *:active, .button *:focus {
+color : red;
+}
+.button a {
+padding : 0 10px 0 10px;
+}
+.link, .link a, .link button, .link input {
+border-style : none;
+background-color : transparent;
+cursor : pointer;
+}
+.link, .link a, .link button, .link input {
+color : black;
+}
+.link *:hover, .link *:active, .link *:focus {
+color : red;
+}
+.btnNew {
+border : 0 solid #000;
+color : #000000;
+background-image : url(../../../images/egovframework/com/cmm/btn/bu2_bg.gif);
+cursor : pointer;
+}
+form {
+margin : 0;
+}
+
+.invisible {
+width:0px;
+height:0px;
+visibility: hidden;
+}
+
+.btn_01 {
+ display:inline-block !important;
+ height:19px !important;
+ padding:0 15px !important;
+ border:none !important;
+ color:#fff !important;
+ font-size:12px !important;
+ line-height:19px !important;
+ background:#4688d2 !important;
+ cursor : pointer !important;
+}
+
+.btn_03 {
+ display:inline-block !important;
+ height:30px !important;
+ padding:0 15px !important;
+ border:none !important;
+ color:#fff !important;
+ font-size:12px !important;
+ line-height:19px !important;
+ background:#4688d2 !important;
+ cursor : pointer !important;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/button.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/com.css_old.jsp
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/com.css_old.jsp (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/com.css_old.jsp (revision 7)
@@ -0,0 +1,196 @@
+<%@ page contentType="text/css; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+/*
+ Css Name : com.css
+ Description : 공통 CSS
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2016.06.08 서민영 최초 생성
+
+ author : 공통컴포넌트 개발팀 서민영
+ since : 2016.06.08
+*/
+@charset "utf-8";
+
+body{
+ margin-top:0px;
+ margin-left:5px;
+ margin-bottom: 0;
+ margin-right:: 0;
+ font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif';
+ font-size: 12px;
+}
+
+div,h1,h2,h3,h4,h5,form,fieldset,p,button,table,th,td { margin: 0; padding: 0;}
+div,table,em,strong,h1,h2,h3,h4,h5,h6,form,fieldset,p,th,td,input,textarea,select,button { color: #666; }
+
+fieldset, img { border: 0; }
+textarea { width: 100%; }
+select, input, img, button, label { vertical-align: middle; }
+ul, ol { list-style : none; }
+caption span, .hide, legend { position: absolute; left: -1000%; top: 0; }
+table { border-collapse: collapse; border-spacing: 0; width: 100%; }
+a { color: #666; text-decoration: none; vertical-align: middle; }
+a:hover { color: #000; text-decoration: none; }
+button { border: none; }
+textarea,
+input[type="file"],
+input[type="password"],
+input[type="text"] { color: #727272; height: 20px; border: 1px solid #dedede; padding-left: 5px; }
+textarea[readonly="readonly"],
+button[readonly="readonly"],
+select[readonly="readonly"],
+input[readonly="readonly"],
+textarea[disabled="disabled"],
+button[disabled="disabled"],
+select[disabled="disabled"],
+input[disabled="disabled"] { color: #999; background: #f7f7f7; }
+input[type="password"],
+input[type="file"],
+input[type="text"] { /*height:15px;*/ vertical-align: middle; }
+input[type="file"] { width: 100%; }
+input[type="radio"] { vertical-align: text-bottom; }
+
+.board { position: relative; width: 730px; }
+.board h1, .board h2 { float: left; color: #333; font-size: 16px; font-weight: 600; }
+.board h1 { margin-top: 15px; }
+.board h2 { margin: 15px 0 10px 0; }
+.board h3 { color: #333; font-size: 14px; font-weight: 600; margin: 50px 0 10px 0; }
+.board h3 b { color: #2277d7; }
+.search_box { float: right; margin-bottom: 7px; }
+.search_box ul li { float: left; margin-left: 5px; }
+.search_box select { padding: 3px 3px 3px 4px; border: 1px solid #dedede; }
+.search_box input.s_input { width: 140px; padding-left: 5px; margin-right: 3px; }
+.search_box input.s_btn { height: 24px; padding: 0 10px; border: none; color: #fff; background: #4688d2; border-radius: 2px; cursor: pointer; }
+.search_box input.s_btn:hover { background: #7dabdf; }
+
+
+/* table style */
+.board_list { width: 100%; border-top: 2px solid #4688d2; }
+.board_list caption { display: none; }
+.board_list thead th,
+.board_list tbody th { color: #222 ; font-size: 13px; font-weight: 600; background: #f4f4f4; padding: 12px 0; border-bottom: 1px solid #d9d9d9; }
+.board_list tbody tr.odd { }
+.board_list tbody.ov tr:hover { background: #f9f9f9; }
+.board_list tbody th { text-align: left; padding-left: 14px; }
+.board_list tbody th.vtop { vertical-align: top; }
+.board_list tbody th span.pilsu { color: #d0270b; font-weight: 500; margin-left: 3px; }
+.board_list tbody td { text-align: center; padding: 11px 5px; border-bottom: 1px solid #d9d9d9; }
+.board_list tbody td.left { text-align: left; padding: 6px 8px; }
+.board_list tbody td.cnt { text-align: left; padding: 12px 10px 20px; line-height: 160%; }
+.board_list tbody td.nopd { text-align: left; padding: 0; }
+.board_list tbody td a:hover { text-decoration: underline; }
+.board_list tbody td input.bbs_Nm { width: 99%; }
+.board_list tbody td input.tmp { width: 160px; }
+.board_list tbody td textarea { width: 99%; height: 100px; }
+.board_list tbody td textarea.txt { width: 96%; height: 300px; margin: 8px; padding: 5px; }
+.board_list tbody td textarea.re_txt { float: left; width: 80%; }
+.board_list tbody td a.re_btn { float: right; padding: 43px 30px; margin: 1px 0 0 0; font-size: 12px; font-weight: 600; }
+.board_list tbody td a.re_btn:hover { text-decoration: none; }
+.board_list tbody td select { padding: 2px 0 3px 2px; border: 1px solid #dedede; }
+.board_list tbody td img { margin-left: 7px; }
+.top_line { border-top: 1px solid #d9d9d9; }
+
+
+
+/* toolbar */
+.toolbar { height: 52px; background-color: #e5e5e5; padding-bottom: 4px; border-bottom: 1px solid #dedede; }
+ .group { float: left; padding: 4px 0 0 8px; }
+ .group ul { float: left; padding: 0; margin: 0 3px 0 0; }
+ .group ul li { float: left; margin-right: 3px; }
+ .group ul.format li { margin: 2px 0 0 0; }
+ .group ul.sep { border-left: 1px solid #ccc; padding: 0 3px; border-right: 1px solid #ccc; }
+
+ .group input[type="button"] { width: 22px; height: 20px; line-height: 20px; text-indent: -10000em; border: none; cursor: pointer; }
+ .group input[type="button"]:hover, .group input.on { background-color: #fff; border: 1px solid #dedede; }
+ .ed_bold { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_format_bold.gif') left top no-repeat; }
+ .ed_italic { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_format_italic.gif') 2px top no-repeat; }
+ .ed_underline { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_format_underline.gif') 1px top no-repeat; }
+ .ed_strike { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_format_strike.gif') 1px top no-repeat; }
+ .ed_sub { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_format_sub.gif') 1px 1px no-repeat; }
+ .ed_sup { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_format_sup.gif') 1px 1px no-repeat; }
+ .ed_copy { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_copy.gif') left top no-repeat; }
+ .ed_cut { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_cut.gif') 1px top no-repeat; }
+ .ed_paste { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_paste.gif') 1px top no-repeat; }
+ .ed_undo { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_undo.gif') 1px top no-repeat; }
+ .ed_redo { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_redo.gif') 1px 1px no-repeat; }
+ .ed_rmformat { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_rmformat.gif') 1px top no-repeat; }
+ .ed_killword { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_killword.gif') 1px top no-repeat; }
+ .ed_al_left { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_align_left.gif') 1px top no-repeat; }
+ .ed_al_center { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_align_center.gif') 1px top no-repeat; }
+ .ed_al_right { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_align_right.gif') 1px top no-repeat; }
+ .ed_al_justify { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_align_justify.gif') 1px top no-repeat; }
+ .ed_right { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_left_to_right.gif') 1px top no-repeat; }
+ .ed_left { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_right_to_left.gif') 1px top no-repeat; }
+ .ed_num { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_list_num.gif') 1px top no-repeat; }
+ .ed_bullet { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_list_bullet.gif') 1px top no-repeat; }
+ .ed_indent_less { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_indent_less.gif') 1px top no-repeat; }
+ .ed_indent_more { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_indent_more.gif') 1px top no-repeat; }
+ .ed_fg { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_color_fg.gif') 1px top no-repeat; }
+ .ed_bg { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_color_bg.gif') 1px top no-repeat; }
+ .ed_hr { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_hr.gif') 1px top no-repeat; }
+ .ed_link { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_link.gif') 1px top no-repeat; }
+ .ed_image { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_image.gif') 1px top no-repeat; }
+ .ed_table { background: url('../images/egovframework/com/cmm/paging/toolbar/insert_table.gif') 1px top no-repeat; }
+ .ed_html { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_html.gif') 1px top no-repeat; }
+ .ed_fullscreen { background: url('../images/egovframework/com/cmm/paging/toolbar/fullscreen_maximize.gif') 1px top no-repeat; }
+ .ed_help { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_help.gif') 1px top no-repeat; }
+ .ed_about { background: url('../images/egovframework/com/cmm/paging/toolbar/ed_about.gif') 1px top no-repeat; }
+.toolbar select { font-size: 11px; }
+
+.reply { float: left; clear: both; border-top: 2px solid #4688d2; }
+.reply ul { float: left; margin: 0; padding: 0; }
+.reply ul li { float: left; border-bottom: 1px solid #d9d9d9; padding: 20px 20px 14px; }
+.reply .top { height: 17px; padding-bottom: 12px; }
+.reply .top strong { color: #333; font-weight: 600; }
+.reply .top span.bar { color: #d3d3d3; font-size: 10px; padding: 0 9px; }
+.reply .top span.date { color: #999; }
+.reply .txt { line-height: 19px; }
+.reply .bottom { float: right; margin: 10px 0 6px; }
+
+
+/* 파일첨부버튼 */
+.file_input_textbox { float: left; width: 170px; color:#666; border:1px solid #cfcfcf !important; margin-right: 4px; }
+.file_input_div { position: relative; width: 66px; height: 24px; overflow: hidden; }
+.file_input_button { position: absolute; width: 66px; height: 24px; background: #4688d2; border-radius: 1px; font-size: 11px; color: #fff; border: none; }
+.file_input_hidden { position: absolute; font-size: 45px; right: 0; top: 0; opacity: 0; cursor: pointer;
+ filter:alpha(opacity=0);
+ -ms-filter:"alpha(opacity=0)";
+ -khtml-opacity:0;
+ -moz-opacity:0;
+}
+
+/* pagination */
+.pagination { float: left; display: inline; width: 100%; text-align: center; margin-top: 15px; }
+.pagination ul { display: inline-block; }
+.pagination ul li { float: left; margin: 0 2px; }
+.pagination ul li a { display: block; color: #999; width: 26px; height: 26px; line-height: 26px; border: 1px solid #e0e0e0; }
+.pagination ul li.first a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_first.gif"/>') 8px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.prev a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_prev.gif"/>') 11px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.next a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_next.gif"/>') 12px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.last a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_last.gif"/>') 10px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.first a:hover { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_first_on.gif"/>') no-repeat; }
+.pagination ul li.prev a:hover { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_prev_on.gif"/>') no-repeat; }
+.pagination ul li.next a:hover { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_next_on.gif"/>/') no-repeat; }
+.pagination ul li.current a,
+.pagination ul li a:hover { border: none; color: #fff; font-size: 15px; font-weight: 600; width: 28px; height: 28px; line-height: 28px; background: #4688d2; }
+
+.paging { float: left; display: inline; width: 100%; font-size: 1em; text-align: center; margin: 15px 0 20px; }
+.paging ul { display: inline-block; margin: 0; padding: 0; }
+.paging ul li { float: left; margin: 0 3px; }
+.paging ul li a { display: block; width: 15px; color: #888; text-decoration: none; }
+.paging ul li.first a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_first.gif"/>') center 5px no-repeat; text-indent: -10000em; }
+.paging ul li.prev a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_prev.gif"/>') center 5px no-repeat; text-indent: -10000em; }
+.paging ul li.next a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_next.gif"/>') center 5px no-repeat; text-indent: -10000em; }
+.paging ul li.last a { background: url('<c:url value="/images/egovframework/com/cmm/paging/pagination_last.gif"/>') center 5px no-repeat; text-indent: -10000em; }
+.paging strong { display: block; padding: 0 5px; color: #2277d7; }
+
+
+/* button style */
+button { padding: 5px 12px 7px 12px; background: #4688d2; font-weight: 600; color: #fff; border-radius: 2px; margin-left: 4px; cursor: pointer; }
+button:hover { background: #7dabdf; }
+.btn_s { padding: 4px 11px 5px; background-color: #4688d2; color: #fff; font-size: 11px; border-radius: 1px; }
+.btn_s:hover { color: #c7dbf1; }
+.btn { float: right; margin-top: 18px; }
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/com.css_old.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/com12.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/com12.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/com12.css (revision 7)
@@ -0,0 +1,282 @@
+/*
+ Css Name : com.css
+ Description : 공통 CSS
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2016.06.08 서민영 최초 생성
+
+ author : 공통컴포넌트 개발팀 서민영
+ since : 2016.06.08
+*/
+@charset "utf-8";
+
+/* Base Style *****************************/
+* /* { margin: 0; padding: 0; } */
+/* body { overflow-y: auto; } */
+body{
+ margin-top:20px;
+ margin-left:10px;
+ padding-top:0px;
+ padding-left:0px;
+ margin-bottom: 0;
+ font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif';
+ font-size: 12px;
+}
+
+div,table,em,h1,h2,h3,h4,h5,h6,fieldset,p,form,td,th,input,textarea,select,button {
+ font-family: '돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif'; font-size: 12px; color: #666; }
+
+fieldset, img { border: 0; }
+textarea { width: 100%; }
+img, label { vertical-align: middle; }
+ul, ol { list-style : none; }
+caption span, .hide, legend { position: absolute; left: -1000%; top: 0; }
+table { border-collapse: collapse; border-spacing: 0;}
+a { color: #666; text-decoration: none; }
+a:hover { color: #000; text-decoration: none; }
+a, button, input[type="button"] { cursor: pointer; }
+textarea,
+input[type="file"],
+input[type="password"],
+input[type="text"] { color: #727272; height: 21px; border: 1px solid #d2d2d2; }
+textarea[readonly="readonly"],
+button[readonly="readonly"],
+select[readonly="readonly"],
+input[readonly="readonly"],
+textarea[disabled="disabled"],
+button[disabled="disabled"],
+select[disabled="disabled"],
+input[disabled="disabled"] { color: #999; background: #f7f7f7; }
+input[type="password"],
+input[type="file"],
+input[type="text"] { /*height:15px; vertical-align: middle; */ }
+input[type="file"] { width: 100%; }
+input[type="radio"] { vertical-align: text-bottom; }
+
+.vam { vertical-align: middle !important; }
+.ml10 { margin-left: 10px !important; }
+.mr10 { margin-right: 10px !important; }
+.mb10 { margin-bottom: 10px !important; }
+.mb20 { margin-bottom: 20px !important; }
+.mt20 { margin-top: 20px !important; }
+
+
+/* box Style *****************************/
+.boxType1 { position: relative; border: 4px solid #ececec; background: #f7f7f7; }
+.boxType1 .box { background: #fff; margin: 4px; }
+.boxType1 .box .error { padding: 25px 0 25px 190px; min-height: 50px; background: url('../images/bul_i.jpg') 30px 50% no-repeat; }
+.boxType1 .box .error p.title { color: #DB6415; font-size: 16px; line-height: 21px; font-weight: bold; margin-bottom: 10px; }
+.boxType1 .box .error p.cont { line-height: 18px; }
+
+.boxType2 { position: relative; border: 4px solid #f1f1f1; background: #f7f7f7; }
+
+
+/* button Style *****************************/
+.btn_style1 { display: inline-block; padding: 6px 12px; border-radius: 1px; }
+.btn_style1 a { color: #fff; font-size: 13px; font-weight: bold; }
+.btn_style1 a:hover { opacity: 0.6; }
+.btn_style2 { display: inline-block; padding: 4px 10px; border: 1px solid #d2d2d2; color: #333; font-size: 11px; background: #f4f4f4; border-radius: 1px; }
+.btn_style3 { display: inline-block; padding: 5px 8px; background: #3d70b6; border-radius: 1px; color: #fff; font-size: 11px;}
+.btn_style3c { padding: 5px 8px; background: #3d70b6; border-radius: 1px; color: #fff; font-size: 11px; cursor:pointer;}
+.btn_style4 { padding: 5px 11px; }
+
+.btn_right { float: right; }
+.blue { background: #3d70b6; }
+.gray { background: #9e9e9e; }
+
+
+/* input Style *****************************/
+.input2 { height: 21px !important; padding-left: 5px; margin-right: 3px; }
+
+
+/* select Style *****************************/
+.select2 { padding: 2px 3px 3px 4px; border: 1px solid #d2d2d2; }
+
+
+/* textarea Style *****************************/
+.textarea2 { padding: 4px 0 0 6px; }
+.textarea3 { padding: 4px 0 0 6px; background: #f7f7f7; }
+
+/* file Style *****************************/
+.file_add { margin-top: 6px; width: 100%; border: 0px solid #666;}
+.file_add a { display: inline-block; width: 13px; height: 18px; background: url('../../../images/egovframework/com/cmm/btn/btn_del.png') 1px 2px no-repeat; text-indent: -10000em; }
+.file_input_textbox { float: left; color:#666; border: 1px solid #cfcfcf !important; padding-left: 5px; margin-right: 4px; }
+.file_input_div { position: relative; width: 66px; height: 23px; overflow: hidden; }
+.file_input_button { position: absolute; width: 66px; height: 23px; background: #3d70b6; border-radius: 1px; font-size: 11px; color: #fff; border: none; }
+.file_input_hidden { position: absolute; font-size: 45px; right: 0; top: 0; opacity: 0; cursor: pointer;
+ filter:alpha(opacity=0);
+ -ms-filter:"alpha(opacity=0)";
+ -khtml-opacity:0;
+ -moz-opacity:0;
+}
+
+.cursor {cursor:pointer;}
+/*.error {color : #ff0000;} */
+
+.board { position: relative; width: 730px; }
+.board h1, .board h2 { float: left; color: #333; font-size: 16px; font-weight: 600;}
+.board h1 { margin: 0px 0 0 0; border: 0px solid #d2d2d2;}
+.board h2 { margin: 15px 0 10px 0; }
+.board h3 { color: #333; font-size: 14px; font-weight: 600; margin: 50px 0 10px 0; }
+.board h3 b { color: #2277d7; }
+.search_box { float: right; margin-bottom: 7px; }
+.search_box ul li { float: left; margin-left: 5px; font-size:11px}
+.search_box ul li img { margin-left: 7px; }
+.search_box select { padding: 3px 3px 3px 4px; border: 1px solid #dedede; }
+.search_box input.s_input { width: 140px; padding-left: 5px; margin-right: 3px; }
+.search_box input.s_btn { height: 24px; padding: 0 10px; border: none; color: #fff; background: #4688d2; border-radius: 2px; cursor: pointer; }
+.search_box input.s_btn:hover { background: #7dabdf; }
+
+.search_box span.s_btn { display: inline-block; vertical-align:top; height: 13px; font-size: 12px; padding: 6px 12px 5px 12px; background: #4688d2; border-radius: 2px; cursor: pointer; }
+.search_box span.s_btn:hover { background: #7dabdf;}
+.search_box span.s_btn a { color: #fff; }
+
+.search_box span.btn_b { display: inline-block; vertical-align:top; height: 13px; font-size: 12px; padding: 3px 1px 8px 1px; background: #4688d2; border-radius: 2px; cursor: pointer; }
+.search_box span.btn_b:hover { background: #7dabdf;}
+.search_box span.btn_b a { vertical-align: text-top; color: #fff; display:block; line-height: 19px; padding: 0px 10px 0px 10px;}
+
+.noScriptTitle {
+font-size : 17px;
+color : blue;
+text-align : center;
+font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif';
+font-weight : bold;
+padding-bottom : 12px;
+}
+
+/* table style */
+.board_list {width:45%; table-layout:fixed; border-top: 2px solid #4688d2; }
+.board_list caption { display: none; }
+.board_list thead th,
+.board_list tbody th { color: #222 ; font-size: 13px; font-weight: 400; background: #f4f4f4; padding: 12px 0; border-bottom: 1px solid #d9d9d9; }
+.board_list tbody tr.odd { }
+.board_list tbody.ov tr:hover { background: #f9f9f9; }
+.board_list tbody th { text-align: left; padding-left: 14px; }
+.board_list tbody th.vtop { vertical-align: top; }
+.board_list tbody th span.pilsu { color: #d0270b; font-weight: 500; margin-left: 3px; }
+.board_list tbody td { text-align: center; padding: 11px 5px; border-bottom: 1px solid #d9d9d9;
+ word-break:break-all; white-space: -moz-pre-wrap; overflow:hidden; text-overflow:ellipsis;}
+.board_list tbody td.left { text-align: left; padding: 6px 8px; }
+.board_list tbody td.leftElli { text-align: left; padding: 6px 8px;
+overflow: hidden;
+text-overflow: ellipsis;
+-o-text-overflow: ellipsis;
+white-space: nowrap;
+width: 100%;
+}
+.board_list tbody td.cnt { text-align: left; padding: 12px 10px 20px; line-height: 160%; }
+.board_list tbody td.nopd { text-align: left;}
+.board_list tbody td.bold { text-align: left; font-size: 14px; font-weight : bold;}
+.board_list tbody td a:hover { text-decoration: underline; }
+.board_list tbody td input.bbs_Nm { width: 99%; }
+.board_list tbody td input.tmp { width: 160px; }
+.board_list tbody td textarea { width: 99%; height: 50px; }
+.board_list tbody td textarea.txt { width: 96%; height: 300px; margin: 8px; padding: 5px; }
+.board_list tbody td textarea.re_txt { width: 470px; float: left; margin-right: 8px; height: 96px; }
+.board_list tbody td a.re_btn { float: right; padding: 43px 30px; margin: 1px 0 0 0; font-size: 12px; font-weight: 600; }
+.board_list tbody td a.re_btn:hover { text-decoration: none; }
+.board_list tbody td select { padding: 2px 0 3px 2px; border: 1px solid #dedede; }
+.board_list tbody td img { margin-left: 7px; }
+
+.top_line { border-top: 1px solid #d9d9d9; }
+.board_th_link {
+ font-weight: 600;
+}
+
+/* pagination */
+.pagination { float: left; display: inline; width: 100%; text-align: center; margin-top: 15px; }
+.pagination ul { display: inline-block; }
+.pagination ul li { float: left; margin: 0 2px; }
+.pagination ul li a { display: block; color: #999; width: 26px; height: 26px; line-height: 26px; border: 1px solid #e0e0e0; }
+.pagination ul li.first a { background: url('../../../images/egovframework/com/cmm/paging/pagination_first.gif') 8px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.prev a { background: url('../../../images/egovframework/com/cmm/paging/pagination_prev.gif') 11px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.next a { background: url('../../../images/egovframework/com/cmm/paging/pagination_next.gif') 12px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.last a { background: url('../../../images/egovframework/com/cmm/paging/pagination_last.gif') 10px 9px no-repeat; text-indent: -10000em; }
+.pagination ul li.first a:hover { background: url('../../../images/egovframework/com/cmm/paging/pagination_first_on.gif') no-repeat; }
+.pagination ul li.prev a:hover { background: url('../../../images/egovframework/com/cmm/paging/pagination_prev_on.gif') no-repeat; }
+.pagination ul li.next a:hover { background: url('../../../images/egovframework/com/cmm/paging/pagination_next_on.gif/') no-repeat; }
+.pagination ul li.current a,
+.pagination ul li a:hover { border: none; color: #fff; font-size: 15px; font-weight: 600; width: 28px; height: 28px; line-height: 28px; background: #4688d2; }
+
+/* pagination by reply */
+.paging { float:left; display: inline; width: 730px; font-size: 1em; text-align: center; margin: 15px 0 20px; position: relative; }
+.paging ul { display: inline-block; margin: 0; padding: 0; }
+.paging ul li { float:left; margin: 0 3px; }
+.paging ul li a { display: block; width: 15px; color: #888; text-decoration: none; }
+.paging ul li.first a { background: url('../../../images/egovframework/com/cmm/paging/pagination_first.gif') center 5px no-repeat; text-indent: -10000em; }
+.paging ul li.prev a { background: url('../../../images/egovframework/com/cmm/paging/pagination_prev.gif') center 5px no-repeat; text-indent: -10000em; }
+.paging ul li.next a { background: url('../../../images/egovframework/com/cmm/paging/pagination_next.gif') center 5px no-repeat; text-indent: -10000em; }
+.paging ul li.last a { background: url('../../../images/egovframework/com/cmm/paging/pagination_last.gif') center 5px no-repeat; text-indent: -10000em; }
+.paging strong { display: block; padding: 0 5px; color: #2277d7; }
+
+/* button submit */
+.btn_submit { padding:4px 11px 5px; background: #4688d2; font-weight: 600; color: #fff; border-radius: 1px; margin-left: 4px; cursor: pointer; border: none;}
+.btn_submit:hover { background: #7dabdf; }
+
+/* button style */
+button { padding: 5px 12px 7px 12px; background: #4688d2; font-weight: 600; color: #fff; border-radius: 1px; margin-left: 4px; cursor: pointer; }
+button:hover { background: #7dabdf; }
+
+.btn_s2 { margin: 0px 0px 0px 0px; padding: 0px 12px 2px 12px; line-height: 19px; word-spacing: -2px; border-radius: 1px; font-weight: normal; background: #4688d2; color: #fff; font-size: 11px; cursor: pointer; text-align: right;}
+.btn_s2:hover { background: #7dabdf; }
+
+.btn_s { padding: 3px 10px 6px 11px; background-color: #4688d2; color: #fff; font-size: 11px; border-radius: 1px; margin-top: 4px;}
+.btn_s:hover { color: #c7dbf1; }
+
+span.btn_s { vertical-align:middle; padding: 2px 1px 6px 1px; height: 13px; margin: 0px 0px 0px 0px; display: inline-block; background: #4688d2; border-radius: 1px; cursor: pointer; }
+span.btn_s:hover { background: #7dabdf;}
+span.btn_s a { vertical-align: text-top; color: #fff; display:block; line-height: 17px; padding: 0px 10px 0px 10px;}
+/*span.btn_s a { color: #fff; }*/
+
+
+.btn { float: right; margin-top: 18px; margin-bottom: 15px; font-size: 11px; }
+.btn input.s_submit { height: 21px; vertical-align:middle; padding:4px 10px 7px 11px; margin-top: 1px; background: #4688d2; font-size: 11px; font-family:'돋움', '굴림', 'Arial', 'AppleGothic', 'sans-serif'; font-weight: 200; border: none; color: #fff; border-radius: 1px; cursor: pointer; }
+.btn input.s_submit:hover { background: #7dabdf; }
+
+.blog_title { border-bottom:1px solid #e3e3e3; padding-bottom:10px; }
+.blog_title h5 { float:left; font-size:14px; }
+.blog_title span { border-left:1px solid #dcdada; margin-left:12px; padding-left:12px; vertical-align:middle; }
+.blog_title span a { color:#666; }
+.blog_title p { float:right; font-size:11px; color:#999; }
+
+.link, .link a, .link button, .link input {
+overflow: hidden;
+text-overflow: ellipsis;
+-o-text-overflow: ellipsis;
+white-space: nowrap;
+width: 100%;
+text-align : left;
+font-size: 12px;
+border-style : none;
+background-color : transparent;
+cursor : pointer;
+}
+
+
+
+.egov_file_box label {
+ display: inline-block;
+ padding: .45em .75em;
+ color: #fff;
+ font-size: 11px;
+ line-height: normal;
+ vertical-align: middle;
+ background-color: #4688d2;
+ cursor: pointer;
+ border: 1px solid #ebebeb;
+ border-bottom-color: #e2e2e2;
+ border-radius: .15em;
+}
+
+.egov_file_box input[type="file"] { /* 파일 필드 숨기기 */
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip:rect(0,0,0,0);
+ border: 0;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/com12.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/main_portal.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/main_portal.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/main_portal.css (revision 7)
@@ -0,0 +1,80 @@
+@charset "utf-8";
+/* CSS Document */
+
+/* 공통선언 ▼*/
+body {
+ margin:0px 0px 0px 50px;
+ padding:0px;
+ background-color:#fff;
+ font-family:돋움, 굴림, Arial, AppleGothic, sans-serif;
+ font-size:12px;
+ color:#000000;
+ line-height:1.4em;
+}
+th, td, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, form, fieldset, p, blockquote, iframe { margin:0; padding:0; }
+ol, ul, li { list-style:none; padding:0; margin:0; }
+hr { display: none; }
+img { border:none; vertical-align:top; }
+fieldset { border:none;}
+legend { display:none; margin:0; padding:0;}
+form {padding: 0px 0px;}
+
+
+
+
+/* 공통선언 ▲*/
+
+/* 상단 ▼*/
+#new_wrap {width:981px; min-height:500px;}
+#gnb {width:980px; height:65px;}
+#gnb #top_logo {width:236px; height:65px; float:left;}
+#gnb #use_descri { height:22px; float:right; margin:22px 0 0 0; font-size:12px; color:#4f4f4f; font-weight:bold; letter-spacing:-1px; background:url(../../../images/egovframework/com/yellow_bull.gif) no-repeat; padding:4px 0 0 22px; }
+#gnb #use_descri li {display:inline;}
+#gnb #use_descri li img { margin:-3px 0 0px 5px;}
+/* 상단 ▲*/
+
+
+/* 상단메뉴 ▼*/
+#new_topnavi {background:url(../../../images/egovframework/com/cmm/main/navi_bg.gif) no-repeat; width:961px; height:33px; padding:14px 0 0 20px;}
+#new_topnavi li {display:inline; padding:12px 0 0 2px;}
+#new_topnavi li.gap {color:#a8d7f2; font-size:11px; padding:0 6px}
+#new_topnavi li a{font-size:12px; color:#fff; font-weight:bold; text-decoration:none;}
+#new_topnavi li a:hover{font-weight:bold; color:#c9e2f7; text-decoration:none;}
+/* 상단메뉴 ▲*/
+
+/* 좌측메뉴 ▼*/
+#new_container #left_menu {width:210px;float:left; min-height:500px; min-height:500px; height:500px; padding:28px 0 0 0;}
+#new_container #left_menu .link{ text-decoration:none; font-weight:bold; color:#427daf }
+#new_container #contents {width:760px;float:left; padding:28px 0 0 0;}
+/* 좌측메뉴 ▲*/
+/* 하단 ▼*/
+#new_footer { background:url(../../../images/egovframework/com/bottom_bg.gif) repeat-x; width:941px; height:60px; clear:both; padding:12px 0 0 40px}
+#new_footer li.gap {padding:0 0 0 50px;}
+#new_footer li { display:inline; }
+/* 하단 ▲*/
+/* 하단_login ▼*/
+/* #new_footer_login { background:url(../../../1.gif) repeat-x; width:700px; height:60px; clear:both; padding:12px 0 0 40px} */
+#new_footer_login li.gap {padding:0 0 0 50px;}
+#new_footer_login li { display:inline; }
+/* 하단_login ▲*/
+
+.m_tit01 {height:22px; padding-left:25px; line-height:20px; background:url(../../../images/egovframework/com/cmm/icon/tit_icon.png) no-repeat left 0; }
+
+.mp_top {width:940px; }
+.mp_top:after {content:""; display:block; height:0; clear:both; visibility:hidden; }
+.mp_top > div {float:left; }
+.mp_top > div.l {width:465px; margin-right:10px; }
+.mp_top > div.r {width:465px; }
+.mp_top > div > div {overflow:auto; padding:10px; border:1px solid #ddd; box-sizing:border-box; }
+.mp_top > div > div input[type=submit] {border:none; background:transparent; cursor:pointer; }
+.mp_top > div > div input[type=submit]:hover {text-decoration:underline; }
+
+.mp_bn {width:980px; padding:10px; border:1px solid #ddd; box-sizing:border-box; }
+.mp_bn ul li {margin-bottom:5px; }
+.mp_bn ul.horizon {overflow-x:hidden; overflow-y:auto; width:970px; }
+.mp_bn ul.horizon li {float:left; margin-right:5px; }
+
+
+
+.mt10 {margin-top:10px !important; }
+.mt15 {margin-top:15px !important; }
Property changes on: base3.10/src/main/webapp/css/egovframework/com/main_portal.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/sym/ccm/zip/zip.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/sym/ccm/zip/zip.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/sym/ccm/zip/zip.css (revision 7)
@@ -0,0 +1,781 @@
+/* by 검증 디자이너 */
+img {
+ border: 0;
+}
+
+table {
+ margin: 0;
+ padding: 0;
+}
+
+.t_strong {
+ font-weight: bold;
+}
+
+.TopMenuBg {
+ background-image:
+ url('../../../../../../images/egovframework/com/cmm/uss/umt/menu_bg.jpg');
+ background-repeat: no-repeat;
+}
+
+.LeftMenuTitle {
+ font-size: 14px;
+ color: #fff;
+ text-align: center;
+ font-family: "돋움";
+ font-weight: bold;
+ padding-top: 20px;
+ padding-bottom: 3px;
+}
+
+.LeftMenuWelcome {
+ font-size: 12px;
+ color: #e6e6e6;
+ text-align: center;
+ font-family: "돋움";
+ padding-top: 6px;
+}
+
+.LeftMenuBg {
+ font-size: 12px;
+ color: #7f9db9;
+ text-align: left;
+ font-family: "돋움";
+ font-weight: bold;
+ padding-top: 3px;
+ padding-left: 50px;
+ background-image:
+ url('../../../../../../images/egovframework/com/cmm/uss/umt/left_menu_bg.gif')
+}
+
+.LeftMenuBtn {
+ text-align: center;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.LeftMenuBgList {
+ font-size: 12px;
+ color: #fff;
+ text-align: left;
+ font-family: "돋움";
+ padding-top: 3px;
+ padding-left: 60px;
+ background-image:
+ url('../../../../../../images/egovframework/com/cmm/uss/umt/left_bg.gif');
+}
+
+.QuickLink {
+ font-size: 11px;
+ color: #7794be;
+ text-align: right;
+ font-family: "돋움";
+ padding-top: 3px;
+}
+
+.PageTitle {
+ color: #000000;
+ text-align: left;
+ font-family: "돋움";
+ font-weight: bold;
+ padding-left: 45px;
+ background-image:
+ url('../../../../../../images/egovframework/com/cmm/uss/umt/page_title.gif')
+}
+
+.PageNumber {
+ text-align: center;
+ font-family: "돋움";
+}
+
+.checkbox {
+ background-color: #fff;
+}
+
+.BottomStyle {
+ font-size: 11px;
+ color: #999999;
+ font-family: dotum;
+}
+
+.LoginIdText {
+ margin-top: 80px;
+ margin-left: 400px;
+ font-size: 12px;
+ font-family: dotum;
+ width: 190px;
+}
+
+.LoginPassText {
+ margin-left: 400px;
+ font-size: 12px;
+ font-family: dotum;
+ width: 180px;
+}
+
+.LoginJoinBtn {
+ margin-top: 5px;
+ margin-left: 400px;
+ font-size: 12px;
+ font-family: dotum;
+ width: 180px;
+}
+
+/* -----------------TopMenuBg------------ */
+.TopMenuBg {
+ font-size: 12px;
+ color: #888888;
+ font-family: "돋움"
+}
+
+.TopMenuBg a:link {
+ font-size: 12px;
+ color: #888888;
+ font-family: "돋움"
+}
+
+.TopMenuBg a:visited {
+ font-size: 12px;
+ color: #888888;
+ font-family: "돋움"
+}
+
+.TopMenuBg a:hover {
+ font-size: 12px;
+ color: #4791a5;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+.TopMenuBg a:active {
+ font-size: 12px;
+ color: #86cd00;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+/* -----------------LeftMenuBgList------------ */
+.LeftMenuBgList {
+ font-size: 12px;
+ color: #fff;
+ font-family: "돋움"
+}
+
+.LeftMenuBgList a:link {
+ font-size: 12px;
+ color: #fff;
+ font-family: "돋움"
+}
+
+.LeftMenuBgList a:visited {
+ font-size: 12px;
+ color: #fff;
+ font-family: "돋움"
+}
+
+.LeftMenuBgList a:hover {
+ font-size: 12px;
+ color: #fff;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+.LeftMenuBgList a:active {
+ font-size: 12px;
+ color: #fff;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+/* -----------------LeftMenuBg------------ */
+.LeftMenuBg {
+ font-size: 12px;
+ color: #8594a8;
+ font-family: "돋움"
+}
+
+.LeftMenuBg a:link {
+ font-size: 12px;
+ color: #8594a8;
+ font-family: "돋움"
+}
+
+.LeftMenuBg a:visited {
+ font-size: 12px;
+ color: #8594a8;
+ font-family: "돋움"
+}
+
+.LeftMenuBg a:hover {
+ font-size: 12px;
+ color: #445b7b;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+.LeftMenuBg a:active {
+ font-size: 12px;
+ color: #445b7b;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+/* -----------------QuickLink------------ */
+.QuickLink {
+ font-size: 11px;
+ color: #7794be;
+ font-family: "돋움"
+}
+
+.QuickLink a:link {
+ font-size: 11px;
+ color: #7794be;
+ font-family: "돋움"
+}
+
+.QuickLink a:visited {
+ font-size: 11px;
+ color: #5877a4;
+ font-family: "돋움"
+}
+
+.QuickLink a:hover {
+ font-size: 11px;
+ color: #5877a4;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+.QuickLink a:active {
+ font-size: 11px;
+ color: #5877a4;
+ font-family: "돋움";
+ font-weight: bold
+}
+
+/* board_list */
+.table_listA {
+ margin-top: 20px;
+ margin-left: 8px;
+ padding: 0 3px 0 3px;
+ height: 30px;
+ font: 11px Dotum;
+ color: #626262;
+}
+
+.table_listA th {
+ margin-top: 10px;
+ height: 40px;
+ font: 11px Dotum;
+ font-weight: bold;
+ color: #4f657d;
+ background: url('../../../../../../images/egovframework/com/cmm/uss/umt/bg_list_th.gif')
+}
+
+.table_listA tbody {
+ height: 35px;
+ font: 11px Dotum;
+ color: #828282;
+}
+
+/* -----------------board_list------------ */
+.table_listA a:link {
+ font-size: 11px;
+ color: #828282;
+ font-family: "돋움";
+ text-decoration: none
+}
+
+.table_listA a:visited {
+ font-size: 11px;
+ color: #828282;
+ font-family: "돋움";
+ text-decoration: none
+}
+
+.table_listA a:hover {
+ font-size: 11px;
+ color: #a7a7a7;
+ font-family: "돋움";
+ text-decoration: none
+}
+
+.table_listA a:active {
+ font-size: 11px;
+ color: #828282;
+ font-family: "돋움";
+ text-decoration: none
+}
+
+/* by 이삼섭 */ /* Black 텍스트 Hyperlink Style */
+A:link {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #000000;
+ text-decoration: none;
+}
+
+A:visited {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #000000;
+ text-decoration: none;
+}
+
+A:active {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #ff0000;
+ text-decoration: none;
+}
+
+A:hover {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #ff0000;
+ text-decoration: none;
+}
+
+/* Gray 텍스트 Hyperlink Style */
+A.gr:link {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #58595B;
+ text-decoration: none;
+}
+
+A.gr:visited {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #58595B;
+ text-decoration: none;
+}
+
+A.gr:active {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #ff0000;
+ text-decoration: none;
+}
+
+A.gr:hover {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #ff0000;
+ text-decoration: none;
+}
+
+/* Black 텍스트 Hyperlink Style_언더라인 */
+A.underline:link {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #000000;
+ text-decoration: underline;
+}
+
+A.underline:visited {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #000000;
+ text-decoration: underline;
+}
+
+A.underline:active {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #ff0000;
+ text-decoration: underline;
+}
+
+A.underline:hover {
+ font-size: 9pt;
+ font-family: "돋움";
+ color: #ff0000;
+ text-decoration: underline;
+}
+
+/* 스크롤 & margin */
+body {
+ margin-left: 0px;
+ margin-right: 0px;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+td {
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #595959;
+ font-weight: normal;
+}
+
+th {
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #000000;
+ font-weight: normal;
+}
+
+/* 흰색배경 inputbox */
+textarea,input,select {
+ padding-left: 2px;
+ color: #555555;
+ border: 1px solid #9BBED2;
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #595959;
+}
+
+/*list_text*/
+.lt_text {
+ font-size: 9pt;
+ color: #000000;
+ font-family: "돋움, Arial";
+ height: 24px;
+ text-align: left;
+ vertical-align: middle;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.lt_text2 {
+ font-size: 9pt;
+ color: #444444;
+ font-family: "돋움, Arial";
+ height: 30px;
+ text-align: left;
+ vertical-align: middle;
+ padding-left: 10px;
+ padding-right: 10px;
+ font-weight: bold;
+}
+
+.lt_text3 {
+ font-size: 9pt;
+ color: #000000;
+ font-family: "돋움, Arial";
+ height: 24px;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.lt_text4 {
+ font-size: 9pt;
+ color: #000000;
+ font-family: "돋움, Arial";
+ text-align: center;
+ vertical-align: middle;
+}
+
+.lt_text5 {
+ font-size: 9pt;
+ color: #000000;
+ font-family: "돋움, Arial";
+ height: 24px;
+ text-align: left;
+ vertical-align: top;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+.button {
+ border-style: none;
+ background-color: transparent;
+ font-size: 12px;
+}
+
+/*------------------------------- textarea ------------------------------------------------*/
+textarea {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ border-style: solid;
+}
+
+/* 콤보박스에 테두리선 빼기 */
+input.cb {
+ background-color: transparent;
+ border: 0px;
+}
+
+/* 금액_흰색바탕_우측정열 inputbox */
+.input-r {
+ border: 1px solid #9BBED2;
+ text-align: right;
+}
+
+select {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ border-style: solid;
+}
+
+select1 {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ border-style: solid;
+}
+
+.select12 {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ border-style: solid;
+}
+
+select1[appearance="full"] {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ border-style: solid;
+}
+
+select[appearance="full"] {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ border-style: solid;
+}
+
+.check2 {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ background-color: transparent !important;
+ border-style: none !important;
+}
+
+.radio2 {
+ color: #000000;
+ padding-left: 2px;
+ border-color: #9CBED3;
+ background-color: #EAEAEA !important;
+ border-style: none !important;
+}
+
+/*페이징관련 버튼*/
+.group_pagenav {
+ vertical-align: middle;
+ background-color: transparent !important;
+ border-style: none;
+}
+
+.page_prevend {
+ width: 13px;
+ height: 13px;
+ top: 3px;
+ background-color: transparent;
+ background-image:
+ url(../../../../../../images/egovframework/com/cmm/uss/umt/icon/icon_prevend.gif);
+ border-style: none;
+}
+
+.page_prev {
+ width: 13px;
+ height: 13px;
+ top: 3px;
+ background-color: transparent;
+ background-image:
+ url(../../../../../../images/egovframework/com/cmm/uss/umt/icon/icon_prev.gif);
+ border-style: none;
+}
+
+.page_nextend {
+ width: 13px;
+ height: 13px;
+ top: 3px;
+ background-color: transparent;
+ background-image:
+ url(../../../../../../images/egovframework/com/cmm/uss/umt/icon/icon_nextend.gif);
+ border-style: none;
+}
+
+.page_next {
+ width: 13px;
+ height: 13px;
+ top: 3px;
+ background-color: transparent;
+ background-image:
+ url(../../../../../../images/egovframework/com/cmm/uss/umt/icon/icon_next.gif);
+ border-style: none;
+}
+
+.page_no {
+ width: 30px;
+ height: 13px !important;
+ top: 3px;
+ text-align: center;
+ background-color: transparent;
+ border-style: none;
+}
+
+.page_sep {
+ width: 13px;
+ height: 13px !important;
+ top: 3px;
+ text-align: center;
+ background-color: transparent;
+ border-style: none;
+}
+
+.group_pagenav>caption {
+ vertical-align: top !important;
+ background-color: transparent !important;
+ border-style: none !important;
+ padding-left: 2px !important;
+ padding-top: 1px !important;
+ text-align: left !important;
+}
+
+/****************************************** 텍스트 ************************************************************/
+ /* 로케이션_텍스트 */
+.location {
+ font-family: "돋움";
+ font-size: 8pt;
+ color: #6d6d6d;
+ padding-top: 1px;
+ padding-left: 3px;
+ vertical-align: middle
+}
+
+/* 타이틀_볼드 */
+.title {
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #000000;
+ font-weight: bold;
+ vertical-align: middle
+}
+
+/* 타이틀_볼드_좌측정렬 */
+.title_left {
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #000000;
+ font-weight: bold;
+ vertical-align: middle;
+ text-align: left
+}
+
+/* 팝업_타이틀_볼드 */
+.title_wh {
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #ffffff;
+ font-weight: bold;
+ vertical-align: middle
+}
+
+/* 버튼메뉴_타이틀_화이트_볼드 */
+.title_wh_b {
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #ffffff;
+ font-weight: bold;
+ vertical-align: middle
+}
+
+/* 필수 입력 항목 캡션 */
+.required_text {
+ font-family: "돋움";
+ font-size: 9pt;
+ color: #2E4B90;
+ font-weight: bold;
+ padding-right: 3px;
+ text-align: right;
+ vertical-align: middle
+}
+
+.text1 {
+ color: #FF8903;
+}
+
+.text2 {
+ color: #A2A2A2;
+}
+
+/****************************************** 테이블 & 텍스트 ************************************************************/
+ /* 리스트 테이블 */
+.table-line {
+ BORDER-TOP: #1A90D8 2px solid;
+ BORDER-bottom: #BABABA 1px solid;
+ border-collapse: collapse;
+}
+
+.table-line th {
+ BORDER-bottom: #A3A3A3 1px solid;
+ padding-left: 2px;
+ padding-right: 2px;
+ background-color: #E4EAF8;
+ height: 20px;
+}
+
+.table-line td {
+ BORDER-bottom: #E0E0E0 1px solid;
+ padding-left: 2px;
+ padding-right: 2px;
+ background-color: #F7F7F7;
+ height: 20px;
+}
+
+/* 등록 테이블 */
+.table-register {
+ BORDER-TOP: #D2D4D1 1px solid;
+ BORDER-bottom: #D2D4D1 1px solid;
+ BORDER-left: #D2D4D1 1px solid;
+ BORDER-right: #D2D4D1 1px solid;
+ border-collapse: collapse;
+}
+
+.table-register th {
+ padding-left: 2px;
+ padding-right: 5px;
+ background-color: #E4EAF8;
+ Text-align: right;
+}
+
+.table-register td {
+ padding-left: 2px;
+ padding-right: 5px;
+ background-color: #F7F7F7;
+}
+
+/* 조회 테이블
+.table-search{BORDER-TOP: #D2D4D1 1px solid;BORDER-bottom: #D2D4D1 1px solid;BORDER-left: #D2D4D1 1px solid;BORDER-right: #D2D4D1 1px solid; border-collapse: collapse;}
+ .table-search th{ padding-left:2;padding-right:2;background-color: #E4EAF8; Text-align: center ;}
+ .table-search td{ padding-left:2;padding-right:2;background-color: #F7F7F7;} */
+ /* 투명 테이블 */
+.table-trans {
+ BORDER-LEFT: 0px solid;
+ BORDER-RIGHT: 0px solid;
+ BORDER-BOTTOM: 0px solid;
+ BORDER-TOP: 0px solid;
+ border-collapse: collapse;
+}
+
+.table-trans td {
+ border: 0px solid;
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ padding-right: 0;
+ border: 0px solid;
+ border-collapse: collapse;
+}
+
+.btnBackground {
+ background-image:
+ url(../../../../../../images/egovframework/com/sym/ccm/zip/btn/bu2_bg.gif);
+}
+
+.btnNew {
+ border: 0 solid #000;
+ color: #000000;
+ background-image:
+ url(../../../../../../images/egovframework/com/sym/ccm/zip/btn/bu2_bg.gif);
+ cursor: pointer;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/sym/ccm/zip/zip.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/sym/cal/cal.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/sym/cal/cal.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/sym/cal/cal.css (revision 7)
@@ -0,0 +1,114 @@
+/* by 검증 디자이너 */
+
+img {border:0;}
+table {margin:0; padding:0;}
+
+.t_strong {font-weight:bold;}
+
+.TopMenuBg {
+ background-image:url('/images/egovframework/com/cmm/uss/umt/menu_bg.jpg');
+ background-repeat:no-repeat;
+ }
+
+/* by 이삼섭 */
+/* Black 텍스트 Hyperlink Style */
+A:link { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:none; }
+A:visited { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:none; }
+A:active { font-size:9pt; font-family:"돋움";color:red; text-decoration:none; }
+A:hover { font-size:9pt; font-family:"돋움";color:red;text-decoration:none;}
+
+
+/* Gray 텍스트 Hyperlink Style */
+A.gr:link { font-size:9pt; font-family:"돋움";color:#58595B; text-decoration:none; }
+A.gr:visited { font-size:9pt; font-family:"돋움";color:#58595B; text-decoration:none; }
+A.gr:active { font-size:9pt; font-family:"돋움";color:red; text-decoration:none; }
+A.gr:hover { font-size:9pt; font-family:"돋움";color:red ;text-decoration:none;}
+
+
+/* Black 텍스트 Hyperlink Style_언더라인 */
+A.underline:link { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:underline; }
+A.underline:visited { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:underline; }
+A.underline:active { font-size:9pt; font-family:"돋움";color:red; text-decoration:underline; }
+A.underline:hover { font-size:9pt; font-family:"돋움";color:red;text-decoration:underline;}
+
+
+/* 스크롤 & margin */
+body {
+margin-left:0px; margin-right:0px; margin-top:0px; margin-bottom:0px;}
+
+td {font-family: "돋움"; font-size: 9pt; color:#595959; font-weight:normal;}
+th {font-family: "돋움"; font-size: 9pt; color:#000000; font-weight:normal;}
+
+
+/* 흰색배경 inputbox */
+ textarea, input, select
+ {padding-left:2px; color:#555555; border:1px solid #9BBED2;
+ font-family: "돋움"; font-size: 9pt; color:#595959;}
+
+
+
+/*list_text*/
+.lt_text { font-size:9pt; color:#000000; font-family:"돋움, Arial"; height:24px; text-align:left; vertical-align:middle; padding-left:10px; padding-right:10px;}
+.lt_text2 { font-size:9pt; color:#444444; font-family:"돋움, Arial"; height:30px; text-align:left; vertical-align:middle; padding-left:10px; padding-right:10px; font-weight: bold;}
+.lt_text3 { font-size:9pt; color:#000000; font-family:"돋움, Arial"; height:24px; text-align:center; vertical-align:middle;}
+.lt_text4 { font-size:9pt; color:#000000; font-family:"돋움, Arial"; text-align:center; vertical-align:middle;}
+.lt_text5 { font-size:9pt; color:#000000; font-family:"돋움, Arial"; height:24px; text-align:left; vertical-align:top; padding-left:10px; padding-right:10px; padding-top:10px; padding-bottom:10px;}
+
+
+ .button {
+ border-style:none;
+ background-color:transparent;
+ font-size:12px;
+ }
+
+
+
+
+
+/****************************************** 텍스트 ************************************************************/
+
+/* 로케이션_텍스트 */
+.location{ font-family:"돋움"; font-size:8pt; color:#6d6d6d ;padding-top:1px; padding-left:3px;
+ vertical-align: middle}
+
+/* 타이틀_볼드 */
+.title{ font-family:"돋움"; font-size:9pt; color:#000000 ;
+ font-weight: bold ; vertical-align: middle}
+
+/* 타이틀_볼드_좌측정렬 */
+.title_left{ font-family:"돋움"; font-size:9pt; color:#000000 ;
+ font-weight: bold ; vertical-align: middle; text-align:left }
+
+/* 팝업_타이틀_볼드 */
+.title_wh{ font-family:"돋움"; font-size:9pt; color:#ffffff ;
+ font-weight: bold ; vertical-align: middle}
+
+/* 버튼메뉴_타이틀_화이트_볼드 */
+.title_wh_b{ font-family:"돋움"; font-size:9pt; color:#ffffff ;
+ font-weight: bold ; vertical-align: middle}
+
+
+.text1{color:#FF8903; }
+.text2{color:#A2A2A2; }
+/****************************************** 테이블 & 텍스트 ************************************************************/
+/* 리스트 테이블 */
+.table-line{BORDER-TOP: #1A90D8 2px solid; BORDER-bottom: #BABABA 1px solid;border-collapse: collapse;}
+ .table-line th{BORDER-bottom: #A3A3A3 1px solid; padding-left:2px;padding-right:2px;background-color: #E4EAF8; height:20px;}
+ .table-line td{BORDER-bottom: #E0E0E0 1px solid; padding-left:2px;padding-right:2px;background-color: #F7F7F7; height:20px;}
+
+
+/* 등록 테이블 */
+.table-register{BORDER-TOP: #D2D4D1 1px solid;BORDER-bottom: #D2D4D1 1px solid;BORDER-left: #D2D4D1 1px solid;BORDER-right: #D2D4D1 1px solid; border-collapse: collapse;}
+ .table-register th{ padding-left:2px;padding-right:5px;background-color: #E4EAF8; Text-align: right ;}
+ .table-register td{ padding-left:2px;padding-right:5px;background-color: #F7F7F7;}
+
+
+/* 조회 테이블
+.table-search{BORDER-TOP: #D2D4D1 1px solid;BORDER-bottom: #D2D4D1 1px solid;BORDER-left: #D2D4D1 1px solid;BORDER-right: #D2D4D1 1px solid; border-collapse: collapse;}
+ .table-search th{ padding-left:2;padding-right:2;background-color: #E4EAF8; Text-align: center ;}
+ .table-search td{ padding-left:2;padding-right:2;background-color: #F7F7F7;} */
+
+/* 투명 테이블 */
+.table-trans {BORDER-LEFT: 0px solid;BORDER-RIGHT:0px solid; BORDER-BOTTOM:0px solid; BORDER-TOP:0px solid; border-collapse:collapse;}
+ .table-trans td{border:0px solid;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;border:0px solid;border-collapse: collapse;}
+
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/sym/cal/cal.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/uat/uia/style.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/uat/uia/style.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/uat/uia/style.css (revision 7)
@@ -0,0 +1,135 @@
+@charset "utf-8";
+
+
+/* Base Style *****************************/
+* { margin: 0; padding: 0; border: 0; }
+/* body { overflow-y: auto; } */
+body,div,table,em,h1,h2,h3,h4,h5,h6,form,fieldset,p,th,td,input,textarea,select,button {
+ font-family: 'NanumGothic', 'dotum', Verdana, Tahoma, AppleGothic, Sans-serif; font-size: 12px; color: #666; }
+
+fieldset, img { border: 0; }
+textarea { width: 100%; }
+img, label { vertical-align: middle; }
+ul, ol { list-style : none; }
+caption span, .hide, legend { position: absolute; left: -1000%; top: 0; }
+table { border-collapse: collapse; border-spacing: 0; width: 100%; }
+a { color: #666; text-decoration: none; }
+a:hover { color: #000; text-decoration: none; }
+a, button, input[type="button"] { cursor: pointer; }
+textarea,
+input[type="file"],
+input[type="password"],
+input[type="text"] { color: #727272; height: 21px; border: 1px solid #d2d2d2; }
+textarea[readonly="readonly"],
+button[readonly="readonly"],
+select[readonly="readonly"],
+input[readonly="readonly"],
+textarea[disabled="disabled"],
+button[disabled="disabled"],
+select[disabled="disabled"],
+input[disabled="disabled"] { color: #999; background: #f7f7f7; }
+input[type="password"],
+input[type="file"],
+input[type="text"] { /*height:15px; vertical-align: middle; */ }
+input[type="file"] { width: 100%; }
+input[type="radio"] { vertical-align: text-bottom; }
+
+
+#wrap { width: 100%; margin: 0 auto; }
+#header { position: relative; width: 100%; height: 70px; border-top: 4px solid #0c4ca4; border-bottom: 1px solid #d7d7d7; }
+ .header_box { padding: 25px 0 0 40px; }
+ .header_box h1 { float: left; margin-right: 20px; }
+ .header_box p { margin-top: 2px; color: #333; font-size: 13px; font-weight: bold; }
+#container { position: absolute; width: 100%; top: 110px; left: 0; right: 0; bottom: 65px; }
+ #lnb { position: absolute; top: 0; left: 40px; bottom: 0; width: 230px; margin-right: 30px; background: #fff; overflow-y: scroll; }
+ ul.lnb_title { padding-right: 25px; }
+ ul.lnb_title > li { padding-bottom: 20px; border-bottom: 1px solid #d7d7d7; margin-bottom: 20px; }
+ ul.lnb_title > li:last-child { padding-bottom: 0; border-bottom: 0; }
+ ul.lnb_title > li strong { color: #222; font-size: 14px; }
+ ul.lnb_title > li > ul { padding-top: 4px; }
+ ul.lnb_title > li > ul > li { margin-top: 9px; }
+ ul.lnb_title > li > ul > li a:hover { font-weight: bold; }
+ #contents { position: absolute; left: 300px; top: 25px; right: 0; bottom: 0; overflow-y: auto; }
+#footer { position: absolute; bottom: 0; width: 100%; height: 45px; background: #d3d3d3; }
+#footer p { color: #555; font-size: 11px; font-weight: bold; text-align: center; margin-top: 17px; }
+
+
+.vam { vertical-align: middle !important; }
+.ml10 { margin-left: 10px !important; }
+.mr10 { margin-right: 10px !important; }
+.mb10 { margin-bottom: 10px !important; }
+.mb20 { margin-bottom: 20px !important; }
+.mt20 { margin-top: 20px !important; }
+
+
+/* box Style *****************************/
+.boxType1 { position: relative; border: 4px solid #ececec; background: #f7f7f7; }
+.boxType1 .box { background: #fff; margin: 4px; }
+.boxType1 .box .error { padding: 25px 0 25px 190px; min-height: 50px; background: url('../images/bul_i.jpg') 30px 50% no-repeat; }
+.boxType1 .box .error p.title { color: #DB6415; font-size: 16px; line-height: 21px; font-weight: bold; margin-bottom: 10px; }
+.boxType1 .box .error p.cont { line-height: 18px; }
+
+.boxType2 { position: relative; border: 4px solid #f1f1f1; background: #f7f7f7; }
+
+
+/* button Style *****************************/
+.btn_style1 { display: inline-block; padding: 6px 12px; border-radius: 1px; }
+.btn_style1 a { color: #fff; font-size: 13px; font-weight: bold; }
+.btn_style1 a:hover { opacity: 0.6; }
+.btn_style2 { display: inline-block; padding: 4px 10px; border: 1px solid #d2d2d2; color: #333; font-size: 11px; background: #f4f4f4; border-radius: 1px; }
+.btn_style3 { display: inline-block; padding: 5px 8px; background: #3d70b6; border-radius: 1px; color: #fff; font-size: 11px; }
+.btn_style4 { padding: 5px 11px; }
+
+.btn_right { float: right; }
+.blue { background: #3d70b6; }
+.gray { background: #9e9e9e; }
+
+
+/* input Style *****************************/
+.input2 { height: 21px !important; padding-left: 5px; margin-right: 3px; }
+
+
+/* select Style *****************************/
+.select2 { padding: 2px 3px 3px 4px; border: 1px solid #d2d2d2; }
+
+
+/* textarea Style *****************************/
+.textarea2 { padding: 4px 0 0 6px; }
+.textarea3 { padding: 4px 0 0 6px; background: #f7f7f7; }
+
+
+/* table style */
+.board_list { width: 100%; border-top: 2px solid #0c4ca4; }
+.board_list caption { display: none; }
+.board_list thead th,
+.board_list tbody th { color: #222 ; font-weight: bold; background: #f4f4f4; padding: 12px 0; border-bottom: 1px solid #e6e6e6; }
+.board_list tbody th { text-align: left; padding-left: 14px; }
+.board_list tbody th.vtop { vertical-align: top; }
+.board_list tbody th .ic_chk { background: url('../images/tbl_check.png') left 3px no-repeat; padding-left: 14px; }
+.board_list tbody th span.pilsu { color: #d0270b; font-weight: 500; margin-left: 3px; }
+.board_list tbody td { text-align: center; padding: 11px 5px; border-bottom: 1px solid #e6e6e6; }
+.board_list tbody td.left { text-align: left; padding-left: 8px; }
+.board_list tbody td.cnt { text-align: left; padding: 12px 10px 20px; line-height: 160%; }
+.board_list tbody td.nopd { text-align: left; padding: 0; border-left: 1px solid #fff; }
+.board_list tbody td input.bbs_Nm { width: 99%; }
+.board_list tbody td input.tmp { width: 160px; }
+.board_list tbody td textarea { width: 99%; height: 100px; }
+.board_list tbody td textarea.txt { width: 97%; height: 300px; margin: 6px 8px; }
+.board_list tbody td textarea.re_txt { float: left; width: 80%; }
+.board_list tbody td a.re_btn { float: right; padding: 43px 31px; margin: 1px 2px 0 0; font-size: 12px; font-weight: 600; }
+.board_list tbody td select { padding: 2px 0 3px 2px; border: 1px solid #dedede; }
+.board_list tbody td img { margin-left: 7px; }
+
+
+/* file Style *****************************/
+.file_add { margin-top: 6px; }
+.file_add a { display: inline-block; width: 13px; height: 18px; background: url('../images/btn_del.png') 1px 2px no-repeat; text-indent: -10000em; }
+.file_input_textbox { float: left; color:#666; border: 1px solid #cfcfcf !important; padding-left: 5px; margin-right: 4px; }
+.file_input_div { position: relative; width: 66px; height: 23px; overflow: hidden; }
+.file_input_button { position: absolute; width: 66px; height: 23px; background: #3d70b6; border-radius: 1px; font-size: 11px; color: #fff; border: none; }
+.file_input_hidden { position: absolute; font-size: 45px; right: 0; top: 0; opacity: 0; cursor: pointer;
+ filter:alpha(opacity=0);
+ -ms-filter:"alpha(opacity=0)";
+ -khtml-opacity:0;
+ -moz-opacity:0;
+}
Property changes on: base3.10/src/main/webapp/css/egovframework/com/uat/uia/style.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/uat/uia/idpw.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/uat/uia/idpw.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/uat/uia/idpw.css (revision 7)
@@ -0,0 +1,33 @@
+@charset "utf-8";
+
+@import "style.css";
+
+
+/* login Layout *********************************/
+.login_form { width: 281px; margin: 90px auto 0; margin-left: 31%; }
+.login_form h1 { width: 174px; height: 25px; background: url('../images/login_tit.png') no-repeat; margin-left: 47px; text-indent: -10000em; }
+.idpw_form { position: relative; top: 90px; display: flex; justify-content: center; }
+.id_search { float: left; padding-right: 30px; }
+.pw_search { float: left; padding-left: 30px; border-left: 1px solid #e2e1e2; }
+.id_search h2,
+.pw_search h2 { text-align: center; font-size: 19px; color: #222; }
+ .login_type { width: 100%; margin-top: 25px; }
+ .login_type ul { display: inline-block; }
+ .login_type ul li { float: left; margin-left: -1px; }
+ .login_type ul li:first-child { margin-left: 0; }
+ .login_type ul a { display: block; height: 33px; line-height: 33px; font-size: 14px; font-weight: bold; padding: 0 33px; background: #f4f4f4; border: 1px solid #e6e6e6; }
+ .login_type ul a:hover { background-color: #e6e6e6; }
+ .login_type ul a.on { background: #0c4ca4; color: #fff; border: 1px solid #0c4ca4; }
+ .login_input { margin-top: 10px; }
+ .login_input ul li { margin-bottom: 10px; }
+ .login_input ul li label { display: none; }
+ .login_input ul li input[type="password"],
+ .login_input ul li input[type="text"] { width: 97%; height: 39px; border: 1px solid #dfdfdf; background: #f9f9f9; font-size: 14px; padding-left: 10px; }
+ .login_input ul li select { width: 286px; height: 39px; border: 1px solid #dfdfdf; font-size: 13px; padding-left: 6px; }
+ .login_input ul li.chk { font-size: 13px; }
+ .login_input ul li input[type="checkbox"] { margin-right: 5px; vertical-align: -3px; }
+ .login_input ul li input.btn_login { width: 100%; height: 45px; margin-top: 6px; border: none; background: #0c4ca4; color: #fff; font-size: 18px; font-weight: bold; cursor: pointer; }
+ .login_input ul.btn_idpw { float: right; margin-top: 5px; }
+ .login_input ul.btn_idpw li { float: left; }
+ .login_input ul.btn_idpw li:first-child { padding-right: 9px; border-right: 1px solid #d6d6d6; margin-right: 9px; }
+
Property changes on: base3.10/src/main/webapp/css/egovframework/com/uat/uia/idpw.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/egovframework/com/uat/uia/login.css
===================================================================
--- base3.10/src/main/webapp/css/egovframework/com/uat/uia/login.css (nonexistent)
+++ base3.10/src/main/webapp/css/egovframework/com/uat/uia/login.css (revision 7)
@@ -0,0 +1,36 @@
+@charset "utf-8";
+
+/* Base Style *****************************/
+* { margin: 0; padding: 0; border: 0; }
+/* body { overflow-y: auto; } */
+
+/* login Layout *********************************/
+.login_form { width:500px; margin: 90px auto 0; margin-left: 31%; border: 0px solid #d2d2d2; }
+.login_form h1 { width: 174px; height: 25px; background: url('../../images/egovframework/com/cmm/main/top_logo.png') no-repeat; margin-left: 47px; text-indent: -10000em; }
+
+.idpw_form { position: absolute; top: 90px; left: 14%; }
+.id_search { float: left; width: 281px; padding-right: 65px; }
+.pw_search { float: left; padding-left: 65px; border-left: 1px solid #e2e1e2; }
+.id_search h2,
+.pw_search h2 { text-align: center; font-size: 19px; color: #222; }
+
+ .login_type { width: 100%; margin-top: 25px; }
+ .login_type ul { font-size:0; }
+ .login_type ul li { display: inline-block; width:33.33%; text-align: center;}
+ .login_type ul li:last-child { width:33.34%; }
+ .login_type ul a { display: block; height: 33px; line-height: 33px; font-size: 12px; font-weight: bold; padding: 0 33px; background: #f4f4f4; border: 1px solid #e6e6e6; }
+ .login_type ul a:hover { background-color: #e6e6e6; }
+ .login_type ul a.on { background: #0c4ca4; color: #fff; border: 1px solid #0c4ca4; }
+
+ .login_input { margin-top: 10px; }
+ .login_input ul li { margin-bottom: 10px; }
+ .login_input ul li label { display: none; }
+ .login_input ul li input[type="password"],
+ .login_input ul li input[type="text"] {box-sizing:border-box; width:100%; height: 39px; border: 1px solid #dfdfdf; background: #f9f9f9; font-size: 14px; padding-left: 10px; }
+ .login_input ul li select { width: 281px; height: 39px; border: 1px solid #dfdfdf; font-size: 13px; padding-left: 6px; }
+ .login_input ul li.chk { font-size: 13px; }
+ .login_input ul li input[type="checkbox"] { margin-right: 5px; vertical-align: -3px; }
+ .login_input ul li input.btn_login {box-sizing:border-box; width:100%; height: 45px; margin-top: 6px; border: none; background: #0c4ca4; color: #fff; font-size: 18px; font-weight: bold; cursor: pointer; }
+ .login_input ul.btn_idpw { margin-top: 5px; }
+ .login_input ul.btn_idpw li { float: left; padding-right: 9px; border-right: 1px solid #d6d6d6; margin-right: 9px; }
+ .login_input ul.btn_idpw li:last-child { padding-right:0; border-right:0; }
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/egovframework/com/uat/uia/login.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/admin/popup.css
===================================================================
--- base3.10/src/main/webapp/css/admin/popup.css (nonexistent)
+++ base3.10/src/main/webapp/css/admin/popup.css (revision 7)
@@ -0,0 +1,16 @@
+@charset "UTF-8";
+/* CSS Document */
+
+html, body { min-width:0; min-height:0; width:100%; height:100%;}
+
+.popup_contents { height:100%; width:100%; }
+.popup_contents form { height:100%; width:100%; }
+
+.popup_header { width:100%; height:60px; color:#fff; background:#1d3a67; line-height:60px; font-weight:600; box-sizing:border-box; padding-left:20px;}
+.popup_header h3 { text-align:left; color:#fff; font-size:1.4em; font-weight:600; }
+
+.popup_body { padding:20px 20px; box-sizing:border-box; width:100%; height:calc(100% - 110px); overflow-y:auto }
+.popup_body p.text { margin-bottom:15px; }
+
+.popup_footer { margin-top:0; height:50px; padding:0; background:#fff; border-top:1px solid #ededed; }
+.popup_footer::after { clear:both; content:''; display:block; }
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/admin/popup.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/admin/admin.css
===================================================================
--- base3.10/src/main/webapp/css/admin/admin.css (nonexistent)
+++ base3.10/src/main/webapp/css/admin/admin.css (revision 7)
@@ -0,0 +1,930 @@
+@charset "UTF-8";
+/* CSS Document */
+
+/*******************************************************************admin******************************************************************/
+body { min-width:1600px; min-height:840px; width:100%; overflow:hidden; background: rgb(241,241,241);
+background: -moz-linear-gradient(0deg, rgba(241,241,241,1) 0%, rgba(241,241,241,0.5) 5%, rgba(241,241,241,0) 100%);
+background: -webkit-linear-gradient(0deg, rgba(241,241,241,1) 0%, rgba(241,241,241,0.5) 5%, rgba(241,241,241,0) 100%);
+background: linear-gradient(0deg, rgba(241,241,241,1) 0%, rgba(241,241,241,0.5) 5%, rgba(241,241,241,0) 100%);
+filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#f1f1f1",endColorstr="#f1f1f1",GradientType=1);}
+body.pers { min-width:0; }
+
+.content_wrap { width:100%; height:100%; position:relative; }
+.content_wrap::after { width:100%; height:140px; z-index:-1; content:''; display:block; position:absolute; top:0; left:0; background:#112b53; }
+
+.content_wrap.wide { }
+.content_wrap.wide .content { width:calc(100% - 60px); }
+.content_wrap.wide .left_menu { }
+.content_wrap.wide .logo { background: url(../../images/custom/logo.svg) 50% 50% no-repeat; height:85px; background-size:180px; background-position:30px 50%; }
+.content_wrap.wide .left_menu .submenu_wrap, .content_wrap.wide .footer { opacity:0; visibility:hidden; }
+
+.content { width:calc(100% - 330px); z-index:1; transition:all 0.3s; border:1px solid #e0ecfd; margin-right:30px; float:right; position:absolute; bottom:30px; right:0; height:calc(100% - 115px); box-sizing:border-box; background:#fff;border-radius:10px; box-shadow:0 0px 13px 0 rgba(141,143,222,0.2); }
+.content .control { cursor:pointer; transition:all 0.3s; position:absolute; box-shadow:-2px 0px 5px 0 rgba(141,143,222,0.15); z-index:9; bottom:55px; left:-15px; border-radius:10px 0 0 10px; border:1px solid #e0ecfd; text-indent:-50000px; display:inline-block; width:15px; height:60px; background:url(../../images/custom/arrow_left.svg) 50% 50% no-repeat #fff; background-size:5px; }
+.content .control:hover { background-image:url(../../images/custom/arrow_right_fff.svg); background-color:#d5ddf1; }
+.content .control.active { background-image:url(../../images/custom/arrow_right_fff.svg); background-color:#7283ab; border-color:#e0ecfd; }
+/*.content form { height:100%; }*/
+
+.bg_box { background-repeat:no-repeat; background-size:cover; background-position:50% 50%; }
+.bg_box img { display:none; }
+
+.flex_start { justify-content:flex-start; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; }
+
+/*top bar*/
+.logo { width:300px; height:140px; position:absolute; top:0; left:0; z-index:9; background: url(../../images/admin/logo_v.svg) 50% 50% no-repeat; background-size:150px; text-indent:-5000px; transition:all 0.3s;}
+.logo a { width:100%; height:100%; display:block; text-indent:-5000px;}
+
+.topBar { width:calc(100% - 300px); float:right; height:85px; padding:43px 30px 0 0; z-index:99999; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; }
+.topBar .fl a { font-size:1em; color:#fff; }
+.topBar .member { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-end; align-items:flex-start; position:fixed; top:20px; right:30px; margin-top:0; font-size:0.8em; }
+.topBar .member li { line-height:1em; padding-left:20px; margin-left:20px; color:#ccc; border-left:1px solid #717171; }
+.topBar .member li:first-child { border-left:none; padding-left:0; margin-left:0; }
+.topBar .member li a { color:#ccc; font-size:12px; position:relative; display:inline-block; }
+.topBar .member li a::before { transition:all 0.3s; content:''; display:inline-block; width:0; height:1px; background:#fff; position:absolute; bottom:-5px; left:50%; transform:translateX(-50%); }
+.topBar .member li:hover a::before { width:100%; }
+.topBar .member li b { color:#fff; }
+.topBar .member li a:hover { text-decoration:none; color:#fff; }
+.topBar .member p a { color:#ccc; line-height:35px; }
+.topBar .member span { color:#fff;font-weight:600; }
+
+.topBar .gnb { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; font-size:1.2em; }
+.topBar .gnb > li { position:relative; margin-right:30px; padding:0; cursor:pointer; z-index:2; transition:all 0.3s; }
+.topBar .gnb > li > a { opacity:0.8; color:#fff; font-size:0.9em; font-weight:600; position:relative; padding-bottom:15px; }
+.topBar .gnb > li > a::before { transition:all 0.3s; content:''; display:inline-block; width:0; height:1px; background:#fff; position:absolute; bottom:15px; left:50%; transform:translateX(-50%); }
+.topBar .gnb > li.active > a { opacity:1; }
+.topBar .gnb > li.active > a::before { width:100%; }
+.topBar .gnb > li:last-child { margin-right:0; }
+
+.topBar .gnb .subMenu { box-shadow: 0 0px 10px 0 rgba(0,0,0,0.3); background:#fff; transition:all 0.3s; margin-top:14px; opacity:0; top:50px; left:50%; transform:translateX(-50%); min-width:180px; border-radius:5px; visibility:hidden; position:absolute; border:1px solid #081a35; }
+.topBar .gnb .subMenu::after { opacity:1; transition:all 0.3s; content:''; z-index:1; display:inline-block; position:absolute; top:-8px; left:50%; transform:translateX(-50%); width:0; height:0; border-left:8px solid transparent; border-right:8px solid transparent; border-bottom:8px solid #fff; }
+.topBar .gnb .subMenu li { float:none; padding:0; position:relative; }
+.topBar .gnb .subMenu li.have > a { position:relative; }
+.topBar .gnb .subMenu li.have > a::after { content:''; display:inline-block; position:absolute; right:15px; top:17px; width:8px; height:8px; background:url(../../images/custom/arrow_right.svg) 50% 50% no-repeat; background-size:5px 8px; }
+.topBar .gnb .subMenu li:first-child, .topBar .gnb .subMenu li:first-child a { border-radius:5px 5px 0 0; }
+.topBar .gnb .subMenu li:last-child, .topBar .gnb .subMenu li:last-child a { border-radius:0 0 5px 5px; }
+.topBar .gnb .subMenu.only li a { border-radius:5px !important; }
+.topBar .gnb .subMenu li a { width:100%; display:block; padding:10px 15px; color:#081a35; font-size:13px;}
+.topBar .gnb .subMenu li:hover > a { background:#f0f1fb; }
+.topBar .gnb .subMenu li.active > a { background:#f0f1fb; text-decoration:underline; }
+.topBar .gnb > li:hover .subMenu { top:25px; opacity:1; visibility:visible; }
+.topBar .gnb > li:hover p { opacity:1; }
+.topBar .gnb > li:hover p::before { width:100%; }
+.topBar .gnb .subMenu:hover::after { opacity:1; bottom:-5px; }
+
+.topBar .gnb .subMenu li .depth3 { position:absolute; right:-180px; width:180px; top:0; background:#fff; border:1px solid #081a35; border-radius:5px; overflow:hidden; opacity:0; visibility:hidden; }
+.topBar .gnb .subMenu li .depth3 li.active a { background:#f0f1fb; }
+.topBar .gnb .subMenu li:hover .depth3 { opacity:1; visibility:visible; }
+
+/*content title*/
+.board_header { border-bottom:1px solid #e2ecfb; height:55px; padding:10px 10px 0 15px; }
+.board_header::after { content:''; clear:both; display:block; }
+.board_header h3 { float:left; color:#333; box-sizing:border-box; text-align:left; margin-top:7px; font-size:1.2em; font-weight:600; display:inline-block; }
+.board_header .select { height:35px !important; }
+
+.board_header .date_pick { background:#fff; border-radius:2px; box-shadow:none; transition:all 0.5s; }
+.board_header .date_pick:hover { border-color:#333; box-shadow:0 0 5px 0 rgba(0,0,0,.1); }
+.board_header .date_pick label { height:33px; width:33px; }
+.board_header .date_pick .inputText { border-radius:30px 0 0 30px; height:33px;background:#fff; }
+.board_header .date_pick .inputText:hover { border:none; }
+.board_header .btn_excel { margin-left:5px; }
+
+/*search bar*/
+.search_box { float:right; }
+.search_box::after { clear:both; content:''; display:block; }
+.search_box .inputText, .search_box .select, .search_box .btn_board { float:left; margin-left:2px; }
+.search_box .btn_board { font-size:1em; text-align:center; padding:0 15px; height:35px; letter-spacing:-1px; border:1px solid #ccc; background:#fff; }
+.search_box .btn_board:hover { border:1px solid #999; background:#f1f1f1; }
+
+/*layout*/
+.board_body { width:100%; height:calc(100vh - 227px); padding:20px; box-sizing:border-box; overflow-y:auto; }
+.board_body::after { clear:both; content:''; display:block; }
+.board_body h4 { font-size:15px; line-height:23px; margin-bottom:10px; display:inline-block; font-weight:600; box-sizing:border-box; }
+.board_body h5 { font-size:15px; line-height:23px; margin-bottom:10px; display:inline-block; font-weight:600; box-sizing:border-box; }
+
+.board_body.footer_none { height:calc(100vh - 172px); }
+
+h4.titleL { font-size:1.3em; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; align-items:center; }
+h4.titleL::before { width:10px; height:10px; content:''; background:#224173; border:3px solid #d5dfff; border-radius:3px; margin-right:8px; display:inline-block; }
+
+.body_left, .body_right { height:100%; overflow-Y:auto; padding:15px; }
+.body_left { width:300px; float:left; padding-right:0; padding-bottom:0; overflow-X:visible; position:relative; z-index:99999; }
+.body_right { width:calc(100% - 300px); float:right; border-left:1px solid #e2ecfb; }
+
+.body_left .ztree { padding:0; }
+.body_left .ztree .level0 { padding-left:0; }
+
+.board_body.full { height:calc(100% - 55px); }
+.board_body.full .body_left { width:500px; padding:0; }
+.board_body.full .body_right { width:calc(100% - 500px); padding:0; }
+
+.onlyleft, .board_body.full .onlyleft { border-right:1px solid #e2ecfb; padding:20px; }
+
+.in_top { width:100%; border-bottom:1px solid #e2ecfb; padding:10px; }
+.in_content { padding:10px; height:calc(100% - 53px);; overflow-y:auto; }
+
+.board_body.no_foot { height:calc(100% - 55px); }
+.board_infomation { padding-bottom:10px; }
+.board_footer { height:55px; width:100%; border-top:1px solid #e2ecfb; text-align:center; }
+.footer { width:100%; position:absolute; bottom:25px; left:0; color:#7f85a2; text-align:left; padding-left:30px; font-size:11px; opacity:0.5; font-weight:400; transition:all 0.3s; }
+.bottom_wrap { padding:10px 10px; }
+.bottom_wrap::after { clear:both; content:''; display:block; }
+
+/*left menu*/
+.left_menu { width:300px; height:100%; padding-top:140px; position:relative; background-size:cover; float:left; box-sizing:border-box;}
+
+.submenu_wrap { padding:0; height:calc(100% - 70px); transition:all 0.3s; position:relative; text-align:left;}
+/* .submenu_wrap::after { content:''; display:inline-block; width:calc(100% - 40px); z-index:-1; height:1px; background:#112b53; position:absolute; top:40px; left:20px; }
+ */
+.submenu_wrap ::-webkit-scrollbar-thumb {background:#ededed;}
+
+.submenu_wrap h2 { background:#112b53; text-align:center; padding:10px 0 25px; width:100%; display:inline-block; border-radius:0 0 30px; font-size:1.6em; box-shadow:0 5px 5px 0 rgba(141,143,222,0.3); font-weight:600; color:#fff;}
+.submenu_wrap > ul { height:calc(100% - 140px); position:relative; padding:20px 0 20px 20px; overflow-y:auto; text-align:left; }
+.submenu_wrap > ul > li { border-bottom:1px solid #e0ecfd; }
+.submenu_wrap > ul > li:last-child { border-bottom:none; }
+
+.submenu_wrap > ul > li > a,
+.submenu_wrap > ul > li > p { cursor:pointer; transition:transform 0.3s; font-weight:600; font-size:1.05em; opacity:0.6; transition:all 0.3s; padding:15px 10px 15px 0; display:block; width:100%; position:relative; }
+.submenu_wrap > ul > li > a::after,
+.submenu_wrap > ul > li > p::after { content:''; display:inline-block; transition:all 0.3s; width:10px; height:10px; background:url(../../images/custom/arrow_down.svg) 50% 50% no-repeat; background-size:10px 5px; position:absolute; top:50%; right:20px; }
+.submenu_wrap > ul > li > a::after { transform:translateY(-50%) rotate(-90deg); }
+.submenu_wrap > ul > li > p::after { transform:translateY(-50%) rotate(0deg); background-size:9px 7px; }
+
+.submenu_wrap > ul > li > a:hover, .submenu_wrap > ul > li > p:hover { opacity:1; text-decoration:none; }
+
+.submenu_wrap > ul > li.active > a, .submenu_wrap > ul > li.active > p { opacity:1; }
+
+.submenu_wrap > ul > li.on > p::after { transform:translateY(-50%) rotate(180deg); }
+
+.submenu_wrap ul li .depth3 { display:none; padding:10px 0 20px 15px; }
+.submenu_wrap ul li .depth3 li { position:relative; padding:5px 0; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex;}
+.submenu_wrap ul li .depth3 li::before { content:'-'; margin-right:10px; }
+.submenu_wrap ul li .depth3 li a { font-size:1em; font-weight:400; color:#666; padding:0; width:auto; position:relative; display:inline-block; overflow:hidden; }
+.submenu_wrap ul li .depth3 li a::after { content:''; display:inline-block; width:0%; height:1px; opacity:0; transition:all 0.3s; background:#333; position:absolute; bottom:3px; left:50%; transform: translateX(-50%); }
+.submenu_wrap ul li .depth3 li.active a { color:#112b53; }
+.submenu_wrap ul li .depth3 li:hover a { text-decoration:none; }
+.submenu_wrap ul li .depth3 li.active a::after, .submenu_wrap ul li .depth3 li a:hover::after { opacity:1; width:100%; }
+
+/*popup*/
+.popup_content { width:100%; height:100%; }
+.popup_header { width:100%; height:55px; border-bottom:1px solid #ccc; }
+
+/*오류페이지
+.errorWrap { width:100%; height:100%; background:#f1f1f1; text-align:center; position:relative; }
+.errorBox { display:inline-block; padding:50px; border-radius:10px; position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); background:#fff; }
+*/
+
+/*에러페이지*/
+.errorWrap { width:100%; height:100%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; position:relative; background:#f5faff; justify-content:center; align-items:center;}
+.errorWrap p.bg_text { display:none; font-size:40em; line-height:0.8em; width:100%; letter-spacing:-2px; opacity:0.6; z-index:0; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); color:#f3f0ff; font-weight:900;animation-delay:0.5s; animation: show 0.5s forwards; }
+.errorBox { transition:all 0.3s; z-index:999; text-align:center; animation:error 0.5s forwards; }
+.errorBox p { opacity:0; font-size:1.2em; color:#8697bd; }
+.errorContent { width:500px; background:#fff; transition:all 0.5s; border-radius:20px; border:1px solid #d9e9ff; box-shadow:1px 4px 15px 0px rgb(141 143 222 / 20%); position:relative; z-index:1; text-align:center; padding:40px 30px; box-sizing:border-box; }
+.errorContent:hover { box-shadow:1px 4px 15px 0px rgb(141,143,222,20%); border:1px solid #c5dcfb; }
+.errorContent p { opacity:1; }
+.errorContent p.name { opacity:0.8; }
+.errorContent .title { font-size:20px; font-weight:600; margin-bottom:15px; color:#999; }
+.errorContent .text { width:100%; font-size:14px; word-wrap:break-word; color:#666; line-height: 1.7em;}
+.errorContent #text { width:100%; display:block; }
+.errorWrap a { margin-top:30px; width:200px; padding:15px 0; position:relative; transition:all 0.3s; text-align:center; border-radius:50px; font-size:15px; font-weight:600; display:inline-block; color:#fff; background:#112b53; background:linear-gradient(135deg, rgba(0,19,51,1) 0%, rgba(11,55,128,1) 100%); }
+.errorWrap a::after { content:''; display:inline-block; position:absolute; transition:all 0.3s; opacity:0; top:50%; transform:translateY(-50%); left:45px; width:10px; height:10px; background:url(../../images/admin/arrow_left_white.svg) 50% 50% no-repeat; background-size:contain; }
+.errorWrap a:hover { text-decoration:none; }
+.errorWrap a:hover::after { left:30px; opacity:1; }
+
+.blockUI.blockOverlay { -webkit-backdrop-filter: blur(.5em); backdrop-filter: blur(.5em); transition:all 0.5s; opacity:1 !important; background-color:rgba(0,0,0,0.5) !important; }
+.blockUI.blockMsg.blockPage { top:50% !important; transform:translateY(-50%); }
+.blockUI.blockMsg.blockPage::after { content:''; display:inline-block; width:70px; height:70px; background:url(../../images/admin/Ellipsis-1s-84px.svg) 50% 50% no-repeat; background-size:100%; }
+.blockUI.blockMsg.blockPage img { display:none; }
+
+/*project list*/
+.project_wrap { width:100%; height:100%; padding:60px 40px 40px; background:url(../../images/admin/bg_project.jpg) 50% 50% no-repeat fixed; overflow-y:auto; background-size:cover; }
+.add_list { float:right; width:37px; height:37px; background:url(../../images/admin/icon_plus.svg) 50% 50% no-repeat #fff; background-size:10px; text-indent:-5000px; margin:0 15px 15px 0; border-radius:3px; }
+.add_list:hover { border:none; transform:scale(1.1); }
+
+.project_top_wrap .upload-name { height:38px; margin-right:3px; }
+.project_top_wrap .filebox { border:1px solid #ccc; margin-right:7px; transition:all 0.3s; border-radius:3px; overflow:hidden; }
+.project_top_wrap .filebox label { background:rgba(255,255,255,.3); transition:all 0.3s; border:none; color: #fff; margin:0; border-radius:0; }
+.project_top_wrap .filebox label:hover { background:#fff; color:#333; }
+.project_top_wrap .filebox .upload-name { background:rgba(255,255,255,.3); height:38px; color:#fff; margin:0; border:none; border-radius:0; border-right:1px solid #ccc; }
+.project_top_wrap .filebox:hover { border:1px solid #fff; box-shadow: 0 0px 3px rgb(173,197,218,0.8); }
+
+.project_list { width:100%; margin-top:40px; }
+.project_list::after { content:''; clear:both; display:block; }
+.project_list h1 { color:#fff; float:left; font-weight:900; font-size:5em; text-transform:capitalize; margin-left:15px; }
+.project_list ul { margin-top:30px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; flex-wrap:wrap;}
+.project_list li { position:relative; background:#fff; width:calc(25% - 30px); margin:15px; transition:all 0.3s; border-radius:20px; height:150px; }
+.project_list li:hover { background:#fff; border:1px solid #d2e1f7; box-shadow:0 0px 20px 0 rgba(0,0,0,.8); transform:scale(1.1); }
+.project_list li:hover a { text-decoration:none; }
+.project_list li a { width:100%; height:100%; color:#112b53; padding:0; text-align:center; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:center; align-items:center; }
+.project_list li a .text_wrap { }
+.project_list li a .text_wrap span { display:block; margin-bottom:13px; font-size:1.8em; font-weight:600; }
+.project_list li a .text_wrap em { display:block; font-size:1.2em; color:#666; font-weight:500;}
+.project_list li a .text_wrap em:last-child { margin-top:5px; display:block; color:#999; font-weight:400;}
+
+.phbtn_wrap { position:absolute; top:13px; right:10px; }
+.btn_modify { text-indent:-5000px; position:relative; width:32px; height:32px;z-index:1; background:url(../../images/admin/icon_cog.svg) 50% 50% no-repeat; background-size:16px; }
+.btn_modify::after { position:absolute; top:0; left:0; width:100%; height:100%;z-index:2;background:#fff;opacity:0.5;display:inline-block;content:'';transition:all .3s; }
+
+.btn_pin { text-indent:-5000px; position:relative; width:32px; height:32px; z-index:1; background:url(../../images/admin/icon_pin.svg) 50% 50% no-repeat; background-size:16px; }
+.btn_pin::after { position:absolute; top:0; left:0; width:100%; height:100%;z-index:2;background:#fff;opacity:0.5;display:inline-block;content:'';transition:all .3s; }
+
+.project_list .btn_modify, .project_header .btn_modify, .project_header .btn_pin { border:none; }
+.project_list .btn_modify:hover, .project_header .btn_modify:hover, .project_header .btn_pin:hover { opacity:1; border:none; box-shadow:none;}
+.btn_modify:hover::after, .btn_pin:hover::after { opacity:0; }
+
+.project_list .btn_modify { position:absolute; top:10px; right:10px; }
+
+.btn_back { position:fixed; opacity:0.5; top:20px; left:50px; padding-left:15px; border:none; color:#fff !important; z-index:9; background:url(../../images/admin/arrow_left_white.svg) 0% 50% no-repeat; background-size:6px; }
+.btn_back:hover { opacity:1; border:none; box-shadow:none; }
+
+.project_detail { width:100%; height:100%; background:#fff; border-radius:15px; overflow:hidden; position:relative; }
+.project_left { border-right:1px solid #ced8e6; position:absolute; top:0; left:0; transition:all .3s; }
+.project_left.wide { left:-140px; }
+.project_right { border-left:1px solid #ced8e6; }
+.project_member { border-left:1px solid #ced8e6; }
+.pr_aside { width:140px; height:100%; background:#f7faff; float:left; }
+
+.project_center { height:100%; width:calc(100% - 140px); padding-left:140px; float:left; transition:all .3s;}
+.project_center.wide { padding-left:0; }
+.project_header { border-bottom:1px solid #e2ecfb; width:100%; padding:12px 15px 0; height:60px; position:relative; }
+.btn_wide { width:20px; text-indent:-5000px; height:59px; float:left; position:absolute; top:0; left:0; border:none; border-right:1px solid #e2ecfb; background:url(../../images/admin/arrow_left.svg) 50% 50% no-repeat; background-size:5px;}
+.btn_wide:hover { background:url(../../images/admin/arrow_left.svg) 50% 50% no-repeat; background-size:5px; border:none; border-right:1px solid #e2ecfb;}
+.btn_wide.active { background:url(../../images/admin/arrow_right.svg) 50% 50% no-repeat; background-size:5px;}
+.project_header strong { font-size:1.5em; float:left; line-height:2em; }
+.project_center .project_header strong { padding-left:20px; }
+.project_header .btn_add { text-indent:-5000px; width:35px; background:url(../../images/admin/icon_plus.svg) 50% 50% no-repeat #fff; background-size:10px; }
+
+.control_wrap { border:1px solid #d5dfff; padding:15px; border-radius:5px; background:#f7faff; margin-bottom:10px; transition:all .3s;}
+.control_wrap:hover { border:1px solid #adbcd6; box-shadow:0 0 10px 0 rgba(116,113,169,0.2); }
+
+.control_wrap:last-child { margin-bottom:0; }
+.control_header { font-size:1.3em; display:block; cursor:pointer; position:relative; }
+.control_header strong { line-height:32px; font-size:1em; display:inline-block; float:left; margin-right:10px; color:#1b3f65; }
+.control_wrap::after, .control_header::after { content:''; display:block; clear:both; }
+.control_header .btn_arrow { width:35px; height:35px; }
+
+.control_box { display:none; padding:25px 15px 15px; }
+
+.control_title { padding:13px; font-size:1.2em; display:block; cursor:pointer; position:relative; }
+.control_title::after { content:''; display:block; clear:both; }
+.control_title strong { line-height:32px; font-size:1em; color:#17487d; display:inline-block; float:left; }
+.btn_arrow { transition:background 0s; margin-left:2px; display:inline-block; width:32px; height:32px; transform:rotate(0deg); background:url(../../images/admin/arrow_down.svg) 50% 50% no-repeat #fff; background-size:10px; }
+.btn_arrow:hover { border:1px solid #87a0cc; box-shadow:0 0 10px 0 rgba(116,113,169,0.2); }
+.btn_arrow.open { background:url(../../images/admin/arrow_top.svg) 50% 50% no-repeat #fff; background-size:10px; border:1px solid #87a0cc; box-shadow:0 0 10px 0 rgba(116,113,169,0.2); }
+
+.control_title button { float:left; }
+
+.project_content { width:100%; padding:15px; height:calc(100% - 60px); overflow-y:auto; }
+.project_control { width:100%; }
+.project_control li { border:1px solid #d5dfff; background:#fff; border-radius:3px; overflow:hidden; transition:all 0.3s; margin-bottom:10px; }
+.project_control li:hover { border:1px solid #adbcd6; box-shadow:0 0 10px 0 rgba(116,113,169,0.2); }
+.project_control li.active { border:1px solid #adbcd6; box-shadow:0 0 10px 0 rgba(116,113,169,0.2); }
+.project_control li .inner { padding:5px 20px 20px; background:#fff; display:none; }
+.project_control li ul { background:#fff; }
+.project_control li ul li { margin-bottom:15px; transition:all 0.3s; }
+.project_control li ul li .control_title { }
+.project_control li:last-child, .project_control li ul li:last-child { margin-bottom:0px; }
+.project_control li ul li .inner { padding:20px; background:#f7faff; border-top:1px solid #d5dfff; }
+.project_control .on { border:1px solid #6e91b9; background:#d3eaff; }
+
+.table_wrap { border:1px solid #aab8e6; margin-bottom:10px; background:#fff; border-radius:3px; overflow:hidden; }
+.table_wrap .control_title { padding-left:0; }
+
+.table_header { padding:7px 7px 7px 13px; border-bottom:1px solid #d5dfff; }
+.table_header strong { line-height:32px; font-size:1.2em; }
+.table_content { padding:15px; }
+.table_footer { text-align:right; padding:7px; border-top:1px solid #d5dfff; }
+
+.inner .table_wrap:last-child { margin-bottom:0; }
+
+.control_list { }
+.control_list li .btn_m { padding:0; font-size:12px; letter-spacing:0; }
+.control_list li { margin-bottom:5px; }
+.control_list li.on .btn_m { border:1px solid #6e91b9; background:#d3eaff; }
+
+.select_date { display:inline-block; border:1px solid #ccc !important; border-radius:2px !important; padding-left:10px; height:33px !important; position:relative; background:url(../../images/admin/icon_calendar.svg) calc(100% - 8px) 50% no-repeat #fff !important; background-size:20px !important; transition:all .5s ease-in-out; }
+.select_date:hover { border:1px solid #666; }
+em.between { line-height:35px; margin:0 4px; display:inline-block; float:left; }
+.datepicker_wrap input[type="text"].select_date { border:none !important; height:33px !important; }
+
+/*제품등록*/
+/*제품등록*/
+.sell_info_wrap { width:100%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; margin-bottom:70px; }
+
+.img_up { width:100%; }
+.main_img_wrap { position:relative; }
+.main_img_wrap .main_img { width:100%; height:260px; border-radius:10px; }
+.main_img_wrap .btn_delete { position:absolute; top:10px; right:10px; z-index:2; border:none; }
+
+.thumb_wrap { width:100%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; flex-wrap: wrap; margin:0 -5px; }
+.thumb_wrap > li { width:100px; height:100px; padding-bottom:0 !important; margin:5px; position:relative; transition:all 0.3s; border-radius:20px; border:1px dashed #ccc; overflow:hidden;}
+.thumb_wrap > li:hover { box-shadow:0 0 10px 0 rgba(0,0,0,0.5); border:1px solid #333; }
+
+.thumb_wrap > li .thumb_img { width:100%; height:100%; border-radius:5px; background-position:50% 50%; }
+.thumb_wrap > li .btn_delete { position: absolute; top:7px; right:7px; z-index:3; border-radius:10px; width:25px; height:25px; border:1px solid #ccc; }
+.thumb_wrap > li .btn_delete:hover { border:1px solid #ccc; box-shadow:none; }
+
+.thumb_wrap > li.main .btn_main { background:#007dc3; bottom:0; }
+.thumb_wrap > li .btn_main { width:100%; border-radius:5px; background:#666; color:#fff; border:none; font-size:0.8em; font-weight:400; padding:3px 0; display:inline-block; text-align:center; position:absolute; bottom:-100%; left:0; }
+.thumb_wrap > li:hover .btn_main { bottom:0; }
+
+.btn_imgup { width:100%; height:100%; padding:0; overflow:hidden; position:relative; border:none; }
+.btn_imgup::after { content:''; position:absolute; display:inline-block; width:50px; height:50px; top:50%; left:50%; transform:translate(-50%, -50%); background:#333; border-radius:50px; transition:all 0.3s; pointer-events: none; }
+.btn_imgup img { position:absolute; display:inline-block; width:30px; height:30px; top:50%; left:50%; transform:translate(-50%, -50%); z-index:2; }
+.btn_imgup:hover::after { width:200%; height:200%; }
+
+.btn_imgup input[type="file"] { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip:rect(0,0,0,0); border: 0; }
+.btn_imgup label { width:100%; height:100%; display:block; position:absolute; top:0; left:0; }
+
+.sell_info { width:calc(100% - 450px); }
+
+.compatible { width:100%; }
+
+.compatible_type { margin-bottom:20px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: space-between; }
+.compatible_type ul { border:1px solid #ddd; display:inline-block; border-radius:5px; overflow:hidden; }
+.compatible_type ul li { border-right:1px solid #ddd; display:inline-block; float:left; position:relative; }
+.compatible_type ul li:hover { background:#f1f1f1; }
+.compatible_type ul li:last-child { border-right:none; }
+.compatible_type ul li label { width:150px; height:40px; background:#fff; display:inline-block; text-align:center; line-height:38px; }
+.compatible_type ul li label::after, .compatible_type ul li label::before { display:none; }
+.compatible_type ul li input[type='radio'] { position:absolute; top:0; left:0; width:100%; height:40px; z-index:-1; }
+.compatible_type ul li input[type='radio']:checked + label { background:#144e9b; color:#fff; }
+
+.compatible .search_detail { width:calc(100% - 30px); margin-bottom:0; padding:10px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; box-shadow:0 0 5px 0 rgba(0,0,0,0.1); border-radius:8px; align-items:center; position:absolute; top:15px; left:15px; background:#fff; border:1px solid #cecece; overflow:hidden; }
+.compatible .search_detail ul { box-shadow:none; border:none; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; padding:0; }
+.compatible .search_detail ul li { width:250px; border-radius:0; padding:0; margin:0 3px 0 0; border:none; box-shadow:none; }
+.compatible .search_detail ul li:hover { }
+.compatible .search_detail .selectText { width:100%; height:40px; padding:0 10px; margin-right:0; border:1px solid #ccc !important; border-radius:5px; }
+.compatible .search_detail .btn_s { height:40px; border:1px solid #ccc !important; }
+.compatible .search_detail .selectText:hover { border:1px solid #666 !important; }
+.compatible .search_detail ul li:hover { border:none; }
+
+.carmodel_list_wrap { width:100%; height:600px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; border:1px solid #ddd; background:#f9f9f9; border-radius:5px; overflow:hidden; }
+.carmodel_list { padding:77px 0px 0; height:100%; width:66.66%; position:relative;}
+.carmodel_list ul { display:block; height:100%; overflow-y:auto; padding:10px; }
+.carmodel_list ul::after { content:''; display:block; clear:both; }
+.carmodel_list ul li { width:calc(50% - 10px); float:left; cursor:pointer; position:relative; border:1px solid #e0e0e0; /*box-shadow:0 0 10px 0 rgba(0,0,0,0.1);*/ padding:15px; margin:5px; border-radius:10px; transition:all 0.3s; background:#fff; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between;align-items:center;flex-direction:row;}
+.carmodel_list ul li:hover { border:1px solid #666; box-shadow:0 0 10px 0 rgba(0,0,0,0.1); }
+.carmodel_list ul li .text { width:calc(100% - 100px); display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
+.carmodel_list ul li p.brand { margin-right:5px; font-size:0.8em; border:1px solid #144e9b; color:#144e9b; border-radius:30px; line-height:1em; padding:5px 7px 3px; }
+.carmodel_list ul li p.subtit { display:inline-block; color:#333; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
+.carmodel_list ul li p { color:#666; }
+.carmodel_list ul li.active { border:1px solid #666; box-shadow:0 0 30px 0 rgba(0,0,0,0.1); }
+.carmodel_list ul li .btn_plus { display:inline-block; width:25px; height:25px; position:absolute; right:15px; top:15px; }
+
+/*연식입력*/
+.addYear { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; transition:all 0.3s; overflow:hidden; border-radius:5px; border:1px solid #c7c7c7; box-shadow:2px 3px 5px 0 rgba(146,146,146,0.4);}
+.addYear p { margin-right:10px; margin-bottom:0 !important; }
+.addYear .btn_ss { height:24px; padding:0 5px; font-size:0.8em; border:none; box-shadow:none; background:#eaeaea; border-radius:0; }
+.addYear .onlyNumber { width:45px; height:24px; border-radius:0; padding:0 5px; margin-right:0; border:none; box-shadow:none; }
+.addYear .onlyNumber:hover { border:none; }
+.addYear:hover { border-color:#666; }
+
+.carmodel_list.selected { border-top:none; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+
+.carmodel_box { border-left:1px solid #ddd; border-top:none; padding:10px; height:100%; width:33.33%; overflow-y: auto; }
+.carmodel_box ul { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; flex-wrap:wrap; }
+.carmodel_box ul li { width:100%; height:auto; position:relative; border:1px solid #e0e0e0; box-shadow:0 0 20px 0 rgba(0,0,0,0.1); padding:15px 15px 10px; margin:5px; border-radius:10px; transition:all 0.3s; background:#fff; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start;align-items:center;align-items: flex-start;flex-direction: column;}
+.carmodel_box ul li p.brand { margin-bottom:7px; font-size:0.8em; border:1px solid #144e9b; color:#144e9b; border-radius:30px; line-height:1em; padding:4px 7px 3px; }
+.carmodel_box ul li p.subtit { display:block; margin-bottom:3px; color:#333; font-weight:600; width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
+.carmodel_box ul li p { color:#666; }
+.carmodel_box ul li .btn_delete { display:inline-block; width:25px; height:25px; position:absolute; border:none; top:8px; right:8px; }
+.carmodel_box ul li .btn_delete:hover { box-shadow:none; }
+
+.carmodel_list li.nothing, .carmodel_box li.nothing { cursor:auto; width:100%; padding:0 !important; margin:0 !important; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; justify-content:center; line-height:30px; color:#999;font-weight:400; background:none; text-align:center; border:none; box-shadow:none; }
+.carmodel_list li.nothing { height:480px; }
+.carmodel_box li.nothing { height:558px; }
+.carmodel_list li.nothing:hover, .carmodel_box li.nothing:hover { box-shadow:none; border:none; }
+.carmodel_list li.nothing p, .carmodel_box li.nothing p { color:#999; }
+.carmodel_list li.nothing p.nothing::before, .carmodel_box li.nothing p.nothing::before { margin-bottom:10px; width:50%; height:50px; }
+.carmodel_list li.nothing.active { border:none; background:none; box-shadow:none; font-weight:400; }
+.carmodel_list li.nothing.active::before { display:none; }
+
+/*연식입력*/
+.addYear { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; }
+.addYear p { margin-right:10px; margin-bottom:0 !important; }
+.addYear .btn_ss { height:24px; padding:0 5px; font-size:0.8em; }
+.addYear .onlyNumber { width:45px; height:24px !important; border-radius:2px; padding:0 5px; margin-right:2px; }
+
+.toggle_list .carmodel_box { background:#f9f9f9; border:none; padding:20px; border-top:1px solid #ededed; }
+
+/*마켓 사용자페이지 호환차종 디자인*/
+.market_info .carmodel_list { background:none; border:none; border-bottom:1px solid #ededed; border-top:2px solid #333; padding:20px 15px; }
+.market_info .carmodel_list ul li { flex-direction:row; border-radius:5px; padding:15px; width:auto;flex-wrap: wrap; }
+.market_info .carmodel_list ul li.nothing { width:100%; }
+.market_info .carmodel_list ul li p { line-height:1em; font-size:1em; font-weight:600; padding:0; width:auto;color:#333; }
+.market_info .carmodel_list ul li p.subtit { width:auto; line-height:1em; margin-bottom:0; }
+.market_info .carmodel_list ul li p.brand { margin-bottom:0; border:none; margin-right:5px; }
+.market_info .carmodel_list ul li p.year { width:100%; color:#999; margin-top:10px; font-size:0.9em; font-weight:400; }
+
+.market_category { border-bottom:1px solid #ccc; margin:30px 0 50px; }
+.market_category ul { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:center; }
+.market_category li a { font-size:1.1em; padding:20px 50px; display:block; position:relative; font-weight:600; }
+.market_category li:hover a { font-weight:600; color:#333; }
+.market_category li.active { font-weight:900; }
+.market_category li.active a::after { content:''; display:inline-block; width:100%; height:3px; border-radius:3px 3px 0 0; background:#0081c8; position:absolute; bottom:0; left:50%; transform: translateX(-50%); }
+
+.sorting { margin-top:10px; }
+.sorting ul { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; }
+.sorting ul li { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items: center; line-height:1em; }
+.sorting ul li { cursor: pointer; }
+.sorting ul li:hover { font-weight:600; }
+.sorting ul li::after { content:''; display:inline-block; width:1px; height:17px; margin:0 10px; background:#ccc; }
+.sorting ul li:last-child::after { display:none; }
+.sorting ul li.active, .sorting ul li.active:hover { font-weight:900; }
+
+.sorting_wrap .right { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-end; }
+.sorting_wrap .detail_search { position:relative; margin-left:5px; }
+.detail_search .floating { opacity:0; pointer-events: none; position:absolute; top:70px; right:0; z-index:1; transition:all 0.3s; width:400px; padding:20px; background:#fff; border:1px solid #cacaca; border-radius:15px; box-shadow:0 0 10px 0 rgba(0,0,0,0.2); }
+.detail_search .floating_close { position:absolute; top:10px; right:10px; z-index:9; }
+.detail_search .floating .btn_m { margin-top:10px; }
+.detail_search .floating label { margin-right:10px; }
+.detail_search .input_box { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; }
+.detail_search .input_box em { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items: center; margin:0 5px; }
+.btn_detailsearch { height:40px; padding-left:50px; background:url(../../images/custom/icon_search_detail.svg) 20px 50% no-repeat; background-size:15px; }
+
+.detail_search.active .floating { opacity:1; top:50px; pointer-events: auto; }
+.detail_search.active .btn_detailsearch { border-color:#666; box-shadow:0 0 10px 0 rgba(0,0,0,0.3); }
+
+
+/*제품 마켓 상품 리스트*/
+.market_list { }
+.market_list .product { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; flex-wrap:wrap; margin:0 -10px; }
+.market_list .product li { width:calc(20% - 20px); margin:10px 10px 35px; position:relative; z-index:0; }
+.market_list .product li .item_img { width:100%; height:200px; background-color:#f7f7f7; background-size:auto; border-radius:15px; border:1px solid transparent; transition:box-shadow 0.5s, border 0.5s;}
+.market_list .product li .item_img:hover { box-shadow:0 0 30px 0 rgba(0,0,0,0.3); border:1px solid #ddd; }
+.market_list .product li .item_text { margin-top:25px; }
+.market_list .product li .item_text a { font-size:1em; margin-bottom:10px; display:block; }
+.market_list .product li .item_text .price { font-size:1.8em; font-weight:900; letter-spacing: -1px; }
+.market_list .product li .item_text .price em { font-size:0.6em; font-weight:400; margin-left:2px; }
+.market_list .product li .item_text .state { margin-bottom:10px; text-transform: uppercase; font-weight:900; font-size:0.9em;}
+.market_list .product li .item_text .state .new { color:#0561d2; }
+.market_list .product li .item_text .state .best { color:#ff6600; }
+.market_list .product li .edit_wrap { margin-top:20px; }
+.market_list .product li .edit_wrap button { margin-right:3px; }
+
+.market_list { }
+.market_list .tech { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; flex-wrap:wrap; margin:0 -10px; }
+.market_list .tech li { width:calc(20% - 20px); margin:10px; position:relative; z-index:0;}
+.market_list .tech li a:hover { box-shadow:0 0 30px 0 rgba(0,0,0,0.3); }
+.market_list .tech li a { width:100%; height:100%; display:block; padding:30px; position:relative; border:1px solid transparent; background:#edf4f9; transition: box-shadow 0.5s; border-radius:15px; overflow:hidden; }
+.market_list .tech li .item_img:hover { box-shadow:0 0 30px 0 rgba(0,0,0,0.3); border:1px solid #ddd; }
+
+.market_list .tech li .item_text { position:absolute; bottom:30px; left:30px; }
+.market_list .tech li .category { line-height:1em; display:inline-block; padding:7px 13px; background:#093b80; color:#fff; border-radius:20px; }
+.market_list .tech li strong { display:block; margin-top:15px; font-size:1.2em; color:#03336f; line-height: 1.6em; }
+.market_list .tech li .edit_wrap { margin:15px 0; }
+.market_list .tech li .edit_wrap button { margin-right:3px; }
+
+.mypage .market_list .tech li { margin:10px 10px 30px; }
+
+.contain { position:absolute; top:20px; right:20px; }
+.contain button { margin-left:5px; width:30px; height:30px; text-indent:-5000px; border:none; position:relative; z-index:3;}
+.contain button:hover { transform:scale(1.3); }
+.btn_cart { background:url(../../images/custom/icon_cart.svg) 50% 50% no-repeat; background-size:15px; }
+.btn_love { background:url(../../images/custom/icon_love.svg) 50% 50% no-repeat; background-size:15px; }
+
+.btn_cart { background:url(../../images/custom/icon_cart.svg) 50% 50% no-repeat; background-size:15px; }
+.btn_love.active { background:url(../../images/custom/icon_love_active.svg) 50% 50% no-repeat; background-size:15px; }
+
+/*마켓 상세*/
+.market_view_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; }
+.item_info_wrap { width:calc(100% - 500px); }
+
+.wrap .sub_tit { margin-bottom:30px }
+.wrap .sub_tit a { text-decoration:underline; font-weight:600; }
+
+.pic_main { width:100%; position:relative; padding-bottom:100px; }
+
+.thumb_list { position:absolute; top:0; left:0; width:100px; }
+.thumb_list li { width:60px; height:60px; flex-direction: column; margin-bottom:10px; border:1px solid #ccc; border-radius:5px; overflow:hidden; cursor:pointer; background-color:#fff; opacity:0.8;}
+.thumb_list li .bg_box { width:100%; height:100%; background-size:90%; }
+.thumb_list li.active { opacity:1; border:1px solid #666; }
+
+.img_frame { width:calc(100% - 100px); margin-left:100px; height:400px; }
+.img_frame .bg_box { width:100%; height:100%; background-size:contain; }
+
+.pic_sub { margin-bottom:70px; position:relative; }
+.pic_mask { width:100%; height:500px; overflow: hidden; border-bottom:1px solid #ccc; }
+.pic_mask.show { height:auto; }
+
+.pic_sub button { position:absolute; bottom:-25px; left:50%; transform: translateX(-50%); background-color:#fff; }
+
+.market_category.fix { position:fixed; top:0; z-index:2; margin-top:0; background:#fff; width:900px;}
+
+.condition span { display:inline-block; padding:6px 0; color:#fff; line-height:1em; font-size:11px; border-radius:3px; width:55px; }
+.condition .condit1 { background:#e8f6fd; border:1px solid #9bc3da; color:#007dc3; } /*blue*/
+.condition .condit2 { background:#f7f7f7; border:1px solid #d0d0d0; color:#828282; } /*lighgray*/
+.condition .condit3 { background:#fdeaea; border:1px solid #ffb3b3; color:#b74444; } /*pink*/
+.condition .condit4 { background:#f7f7f7; border:1px solid #d0d0d0; color:#828282; } /*gray*/
+.condition em { display:inline-block; color:#666; margin-left:10px; font-size:.8em; text-decoration:underline; position:relative; z-index:5;}
+.condition em:hover { color:#000; }
+
+.title_option_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
+.title_option_wrap h4 { margin-bottom:0; }
+.title_option { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-end; align-items:center; }
+.title_option.up { margin-top:-5px; }
+.title_option label { display:inline-block; font-weight:600; }
+.title_option select { }
+.copy_regist { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; width:50%; align-items:center;}
+.copy_regist .select_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; align-items:center; width:calc(100% - 150px); }
+.copy_regist .must_text { margin:0; }
+
+.ctg_wrap { width:calc(50% - 10px); border:1px solid #d5dfff; height:100%; border-radius:5px; overflow:hidden; }
+.ctg_wrap:first-child { margin-right:20px; }
+
+.ctg_title { padding:15px; border-bottom:1px solid #d5dfff; background:#f6f8ff; }
+
+.ctg_content { padding:15px; height:calc(100% - 109px); overflow-y:auto; }
+.ctg_content li { background:#fff; border-radius:3px; border:1px solid #ddd; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; align-items:center; padding:5px; opacity:0.8; transition:all 0.3s; margin-bottom:5px; }
+.ctg_content li:last-child { margin-bottom:0; }
+.ctg_content li p { width:calc(100% - 190px); font-weight:600; padding-left:5px; }
+.ctg_content li.active { opacity:1;background:#fff;border-color:#999; box-shadow:0 0 10px 0 rgba(0,0,0,0.2); }
+.ctg_content li p input[type='text'] { margin-left:-5px; }
+
+.switch_wrap { line-height:1em; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: space-between; align-items:center; position:relative;}
+.switch_wrap > em { margin-right:10px; }
+
+input[type='checkbox'].switch { content:''; width:40px; height:25px; position:relative; }
+input[type='checkbox'].switch::after { content:''; width:40px; height:25px; border:2px solid #ccc; background:#fff; border-radius:50px; position:relative;transform:translateY(-2px); display:inline-block; }
+input[type='checkbox'].switch::before { content:''; width:16px; height:16px; z-index:1; border-radius:20px; border:none; background:#ccc; display:inline-block; transition:all 0.3s; opacity:1; position:absolute; top:50%; left:6px; right:auto; transform:translateY(-50%); }
+input[type='checkbox'].switch:checked::after { border-color:#0eb139eb; }
+input[type='checkbox'].switch:checked::before { left:auto; right:2px; background:#0eb139eb; }
+
+/* input[type='checkbox'].switch {left:0; top:0; width:40px; height:25px; opacity:1; margin:0; z-index:0; position:absolute; cursor:pointer;}
+input[type='checkbox'].switch + label { width:40px; height:25px; border:2px solid #ccc; background:#fff; border-radius:50px; z-index:1; position:relative;display:inline-block;}
+input[type='checkbox'].switch + label::after { content:''; width:16px; height:16px; border-radius:20px; border:none; background:#ccc; display:inline-block; transition:all 0.3s; opacity:1; position:absolute; top:50%; left:3px; right:auto; transform:translateY(-50%); }
+input[type='checkbox'].switch:hover + label::after { border:none; }
+input[type='checkbox'].switch:checked + label::after {border:none;}
+input[type='checkbox'].switch:disabled + label::after { border:none;}
+input[type='checkbox'].switch:checked + label { border-color:#0eb139eb; }
+input[type='checkbox'].switch:checked + label::after { left:auto; right:3px; transition:all 0.3s; background:#0eb139eb; }
+input[type='checkbox'].switch + label::before { display:none; } */
+
+.ctg_add { padding:10px; border-top:1px solid #d5dfff; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: space-between; background:#f6f8ff;}
+.ctg_add .inputText { width:calc(100% - 62px); }
+.ctg_add .btn_m { width:60px; }
+
+.tit_wrap { width:100%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; justify-content:space-between; margin-bottom:10px;}
+.tit_wrap .title { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; justify-content:flex-start; }
+.tit_wrap h4 { margin-bottom:0; }
+.tit_wrap .must_text { margin-bottom:0; }
+.copy_insert { width:500px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; justify-content:flex-start; margin-left:20px; height:35px; border-radius:3px; border:1px solid #ccc; }
+.copy_insert strong { width:100px; height:100%; line-height:33px; text-align:center; border-right:1px solid #ccc; }
+.copy_insert .selectText { margin-left:0; width:calc(100% - 100px); border:none; height:100%; }
+
+/*설문응답현황*/
+.question_list_wrap { margin-top:30px; }
+.question_list_wrap > ul > li { border:1px solid #d5dfff; margin-bottom:10px; border-radius:10px; overflow:hidden; }
+.question_list_wrap > ul > li:last-child { margin-bottom:0; }
+
+.question_list .q_header { border-bottom:1px solid #d5dfff; padding:15px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; aling-items:center; background:#f6f8ff; }
+.question_list .q_type { border:1px solid #d5dfff; padding:5px 10px; line-height:1em; border-radius:30px; background:#fff; margin-right:10px; display:inline-block; }
+.question_list .g_title { color:#224173; font-size:1em; }
+.question_list .q_list { padding:0 20px; }
+.question_list .q_list li { display:block; border-bottom:1px dashed #d5dfff; padding:15px 0 15px 15px; position:relative; }
+.question_list .q_list li:last-child { border-bottom:none; }
+.question_list .q_list .tit { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; align-items:center; }
+.question_list .q_list .tit button { margin-left:10px; height:24px; padding:0 5px; font-size:11px; }
+.question_list .q_list .mem { font-weight:600; letter-spacing:-1px; position:absolute; right:10px; top:14px; }
+.question_list .q_list .mem em.per { margin:0 2px; letter-spacing:0; }
+
+.subQ { padding-left:200px; }
+.subQ .calc175 { width:calc(100% - 79px); }
+
+/*bar*/
+.question_list .q_list li .bar { max-width:calc(100% - 110px); height:35px; background:#e6f0ff; content:''; z-index:-1; position:absolute; top:9px; left:0px; border-radius:5px; }
+
+.ansewr_list li { border:1px solid #e7ebf9; background:#f6f8ff; margin-bottom:25px; border-radius:5px; padding:20px; position:relative; }
+.ansewr_list li:last-child { margin-bottom:0; }
+.ansewr_list .say::after { position:absolute; bottom:-12px; right:20px; content:''; display:inline-block; width:12px; height:12px; background:url(../../images/custom/icon_textbox.svg) 50% 50% no-repeat; background-size:contain; }
+
+.ansewr_list li.nothing { border:1px solid #ededed; background:#f9f9f9; text-align:center; color:#999; }
+
+.title_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
+.title_wrap h4 { margin-bottom:0; }
+
+@-webkit-keyframes appear {
+from { opacity: 0; -webkit-transform: translate(-50%,-30%); transform: translate(-50%,-30%); }
+to { opacity: 1; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%); }
+}
+@keyframes appear {
+from { opacity: 0; -webkit-transform: translate(-50%,-30%); transform: translate(-50%,-30%); }
+to { opacity: 1; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%); }
+}
+@-webkit-keyframes error {
+from { opacity: 0; -webkit-transform: translateY(30%); transform:translateY(30%); }
+to { opacity: 1; -webkit-transform:translateY(0%); transform:translateY(0%); }
+}
+@keyframes error {
+from { opacity: 0; -webkit-transform: translateY(30%); transform:translateY(30%); }
+to { opacity: 1; -webkit-transform:translateY(0%); transform:translateY(0%); }
+}
+@-webkit-keyframes show {
+from { opacity: 0; }
+to { opacity: 1; }
+}
+@keyframes show {
+from { opacity: 0; }
+to { opacity: 1; }
+}
+
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default, .ui-button, html .ui-button.ui-state-disabled:hover, html .ui-button.ui-state-disabled:active { color:#999 !important; background:#fff !important; border:none !important; }
+.ui-datepicker table { padding:.4em !important;margin:0 !important; width:100%; }
+.ui-widget.ui-widget-content { padding:0; border:1px solid #999 !important; box-shadow:0 0 15px 0 rgba(0,0,0,0.3); border-radius:5px;}
+.ui-datepicker .ui-datepicker-header { height:32px; padding:0.5em 0; border-radius:5px 5px 0 0; background:#f1f1f1; border:none; border-bottom:1px solid #ddd; }
+.ui-datepicker td span, .ui-datepicker td a { text-align:center !important; width:25px; height:25px; }
+.ui-datepicker th { font-weight:400 !important; font-size:0.9em; }
+.ui-datepicker .ui-datepicker-title select { border:1px solid #ccc; height:25px; margin:1px !important; border-radius:2px; background:url(../../images/custom/arrow_down.svg) calc(100% - 6px) 50% no-repeat #fff; background-size:8px !important;}
+.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:none !important; background:#144e9b !important; border-radius:30px; color:#fff !important; }
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { color:#144e9b !important; font-weight:600 !important; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { width:30px !important; height:30px !important; border:none; }
+.ui-datepicker .ui-datepicker-prev:hover, .ui-datepicker .ui-datepicker-next:hover { border:none; top:2px; background:none !important; }
+.ui-datepicker .ui-datepicker-prev:hover { left:2px; }
+.ui-datepicker .ui-datepicker-next:hover { right:2px; }
+
+/* 일자리포털 */
+/*튜닝컨설팅 일정*/
+.calendar_control { position:absolute; left:50%; transform:translateX(-50%); }
+.calendar_control ul { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; justify-content:center; }
+.calendar_control ul li { float:left; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center;}
+.calendar_control ul li p { border:1px solid #ccc; padding:2px 10px; margin-top:3px; margin-right:5px; border-radius:30px; font-size:0.9em; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+.calendar_control ul li p::before { width:5px; height:5px; border-radius:50px; content:''; display:inline-block; background:#666; margin-right:5px; }
+.calendar_control ul li p.appY { border-color:#9dd2e4; color:#144E9B; background:#e8f9ff; }
+.calendar_control ul li p.appY::before { background:#144E9B; }
+.calendar_control ul li p.appN { background:#f9f9f9; }
+.calendar_control ul li .btn_img { background-size:25% !important; }
+.calendar_control ul li .selectText { height:32px; padding:0 10px; margin:0 5px; }
+
+.board_header .calendar_control { position:static; transform:none; }
+
+.calendar_info { margin-bottom:15px; }
+.calendar_info ul { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; flex-wrap:wrap; justify-content:space-between; }
+.calendar_info ul li p { border:1px solid #ccc; padding:2px 10px; margin-right:5px; border-radius:30px; font-size:0.9em; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+.calendar_info ul li p::before { width:5px; height:5px; border-radius:50px; content:''; display:inline-block; background:#666; margin-right:5px; }
+.calendar_info ul li p.appY { border-color:#9dd2e4; color:#144E9B; background:#e8f9ff; }
+.calendar_info ul li p.appY::before { background:#144E9B; }
+.calendar_info ul li p.appN { background:#f9f9f9; }
+.calendar_info ul li .btn_s { height:28px; border-radius:5px; }
+
+.month_info { }
+.month_info .month_article { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; margin:0 5px; }
+.month_info .month_article button { border:none; box-shadow:none; opacity:0.7; }
+.month_info .month_article button:hover { opacity:1; }
+.month_info strong { margin:0 15px; }
+
+.calendar_control ul li p.bg01 { border-color:#fbc8c8; color:#ea6b6b; background:#fff1f1; } /*신청가능*/
+.calendar_control ul li p.bg01::before { background:#ea6b6b; }
+.calendar_control ul li p.bg02 { border-color:#ead31b; color:#bd970d; background:#fffad5; } /*항목*/
+.calendar_control ul li p.bg02::before { background:#bd970d; }
+.calendar_control ul li p.bg03 { border-color:#afe2af; color:#5ba55a; background:#f0f9f0; } /*항목*/
+.calendar_control ul li p.bg03::before { background:#5ba55a; }
+.calendar_control ul li p.bg04 { border-color:#9dd2e4; color:#144E9B; background:#e8f9ff; } /*항목*/
+.calendar_control ul li p.bg04::before { background:#144E9B; }
+.calendar_control ul li p.bg05 { border-color:#c7c7c7; color:#666; background:#f9f9f9; } /*신청마감*/
+.calendar_control ul li p.bg05::before { background:#666; }
+
+.calendar.month { width:100%; border-top:1px solid #ededed; border-left:1px solid #ededed; }
+.calendar.month .cal_header .day_wrap { background:#f4f4f4; }
+.calendar.month .cal_header .day_wrap li { min-height:0; text-align:center; padding:15px 0; }
+.calendar.month .day_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.calendar.month .day_wrap li { width:14.28%; border-right:1px solid #ededed; border-bottom:1px solid #ededed; padding:35px 20px 20px; min-height:150px; overflow:hidden; position:relative; }
+.calendar.month .day_wrap li em { position:absolute; top:10px; right:10px; font-size:0.8em; color:#999; cursor:pointer;}
+.calendar.month .day_wrap li.today em { background:#143b84; color:#fff; width:20px; height:20px; text-align:center; line-height:20px; border-radius:24px; }
+.calendar.month .day_wrap li:first-child em, .calendar.month .cal_header .day_wrap li:first-child { color:#C4171A; }
+.calendar.month .day_wrap li:last-child em, .calendar.month .cal_header .day_wrap li:last-child { color:#144E9B; }
+.empty { background:#f9f9f9; }
+.schedule_wrap { max-height:none; }
+.calendar.month .day_wrap li.long .schedule_wrap { max-height:94px; overflow:hidden; }
+.calendar.month .day_wrap li.long .schedule_wrap::after { width:100%; height:80px; content:''; display:block; position:absolute; left:0; bottom:0; z-index:1; background: rgb(255,255,255);
+background: -moz-linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);
+background: -webkit-linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);
+background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,.8) 30%, rgba(255,255,255,0) 100%);}
+
+.calendar.month .day_wrap li button.clickmore { padding:3px 10px; font-size:0.9em; border-radius:50px; text-align:center; color:#007dc3; border:1px solid #007dc3; width:calc(100% - 40px); position:absolute; bottom:20px; left:20px; }
+.calendar.month .day_wrap li button.clickmore::before { display:none; }
+
+.calendar.month .day_wrap li button { border:1px solid #ccc; width:100%; padding:1px 10px 1px 20px; font-size:0.8em; border-radius:30px; margin-bottom:3px; position:relative; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:left; z-index:1; }
+.calendar.month .day_wrap li button::before { width:5px; height:5px; border-radius:50px; content:''; display:inline-block; background:#666; position:absolute; top:50%; transform: translateY(-50%); left:10px; }
+.calendar.month .day_wrap li button.appY::before { background:#144E9B; }
+.calendar.month .day_wrap li button:last-child { margin-bottom:0; }
+.calendar.month .day_wrap li .appY { border-color:#9dd2e4; color:#144E9B; background:#e8f9ff; }
+.calendar.month .day_wrap li .appN { background:#f9f9f9; }
+
+.calendar.month .day_wrap li .bg01 { border-color:#fbc8c8; color:#ea6b6b; background:#fff1f1; } /*신청가능*/
+.calendar.month .day_wrap li .bg01::before { background:#ea6b6b; }
+.calendar.month .day_wrap li .bg02 { border-color:#ead31b; color:#bd970d; background:#fffad5; } /*항목*/
+.calendar.month .day_wrap li .bg02::before { background:#bd970d; }
+.calendar.month .day_wrap li .bg03 { border-color:#afe2af; color:#5ba55a; background:#f0f9f0; } /*항목*/
+.calendar.month .day_wrap li .bg03::before { background:#5ba55a; }
+.calendar.month .day_wrap li .bg04 { border-color:#9dd2e4; color:#144E9B; background:#e8f9ff; } /*항목*/
+.calendar.month .day_wrap li .bg04::before { background:#144E9B; }
+.calendar.month .day_wrap li .bg05 { border-color:#c7c7c7; color:#666; background:#f9f9f9; } /*신청마감*/
+.calendar.month .day_wrap li .bg05::before { background:#666; }
+
+/*.calendar.month .day_wrap li button.day2 { width:calc(200% + 41px); }
+.calendar.month .day_wrap li button.day3 { width:calc(300% + 82px); }
+.calendar.month .day_wrap li button.day4 { width:calc(400% + 123px); }
+.calendar.month .day_wrap li button.day5 { width:calc(500% + 164px); }
+.calendar.month .day_wrap li button.day6 { width:calc(600% + 205px); }
+.calendar.month .day_wrap li button.day7 { width:calc(800% + 87px); }
+.calendar.month .day_wrap li.push1 { padding-top:63px; }
+.calendar.month .day_wrap li.push2 { padding-top:91px; }
+.calendar.month .day_wrap li.push3 { padding-top:119px; }
+.calendar.month .day_wrap li.push4 { padding-top:147px; }
+.calendar.month .day_wrap li.push5 { padding-top:175px; }
+.calendar.month .day_wrap li.push6 { padding-top:203px; }
+.calendar.month .day_wrap li.push7 { padding-top:231px; }
+.calendar.month .day_wrap li.push8 { padding-top:259px; }
+.calendar.month .day_wrap li.push9 { padding-top:287px; }*/
+
+.calendar.week { width:100%; border:1px solid #ededed; padding:5px; }
+.calendar.week .day_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.calendar.week .day_wrap li { width:14.28%; padding:10px; text-align:center; position:relative; }
+.calendar.week .day_wrap li button { padding:10px; width:100%; background:#bee2f7; border:1px solid #9fcde8; border-radius:5px; cursor: pointer;}
+.calendar.week .day_wrap li button:hover { background:#a7d7f3; border-color:#9fcde8; }
+.calendar.week .day_wrap li button:disabled {background:#f1f1f1; border:1px solid #dedede; }
+.calendar.week .day_wrap li.active button { background:#0b5fa7; border-color:#054b88; color:#fff; }
+
+
+/* The Modal (background) */
+.modal { opacity:0; visibility:hidden; position:fixed; z-index:9999; left:0; top:0; width:100%; height:100%; background:rgba(0,0,0,0.8); transition:all 0.3s; -webkit-backdrop-filter: blur(5px); backdrop-filter: blur(5px);}
+.modal.open { opacity:1; visibility:visible; }
+
+/* Modal Content/Box */
+.modal_wrap { width:100%; height:100%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:center; align-items:center; }
+.modal_box { opacity:0; background:#fff; width:50%; transform:translateY(-20%); transition:all 0.3s; border-radius:10px; }
+.modal.open .modal_box { opacity:1; transform:translateY(0%); }
+
+.modal_title { width:100%; height:60px; line-height:60px; font-weight:600; box-sizing:border-box; padding-left:20px;border-bottom:1px solid #ededed; }
+.modal_title h3 { text-align:left; color:#333; font-size:1.4em; font-weight:600; }
+
+/* The Close Button */
+.modal_box .btn_close_wrap { position:absolute; top:10px; right:15px; width:40px; height:40px; display:inline-block; transition:all 0.3s; }
+.modal_box .btn_close::before, .modal_box .btn_close::after { width:20px; }
+
+.modal_content { padding:20px 20px; box-sizing:border-box; width:100%; height:calc(100% - 112px); overflow-y:auto; overflow-x:hidden;}
+.modal_content p.text { margin-bottom:15px; }
+
+.bottom_btn_wrap { margin-top:0; padding:15px 20px; border-top:1px solid #ededed; }
+.bottom_btn_wrap::after { clear:both; content:''; display:block; }
+
+.modal_bottom { padding:10px; border-top:1px solid #ededed; }
+.modal_bottom::after { clear:both; content:''; display:block; }
+
+.modal_bottom .page { margin-top:0; }
+
+/*제목없음*/
+.modal_box.type2 .btn_close_wrap { position:absolute; top:10px; right:10px; z-index:9999; }
+.modal_box.type2 .modal_content { padding:25px 15px 15px; height:100%; }
+
+/*버튼없음*/
+.modal_content.type2 { padding:20px 20px; height:calc(100% - 60px); }
+
+/*리스트상단 검색*/
+.modal_box.type3 .btn_close_wrap { position:absolute; top:10px; right:10px; z-index:9999; }
+.modal_box.type3 .modal_content { padding:0; }
+.modal_box.type3 .sorting_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: space-between; width:100%; align-items:center; border-bottom:1px solid #ededed; padding:10px 20px; }
+.modal_box.type3 .sorting_wrap .board_infomation { padding-bottom:0; }
+.modal_box.type3 .list_wrap { padding:20px; height:calc(100% - 56px); overflow-y:auto; }
+
+.modal_content .tab_wrap { width:100%; height:100%; }
+.modal_content .tab_container { width:100%; height:calc(100% - 45px); overflow-y:auto; }
+.modal_content img { width:100%; }
+
+.add_member { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; flex-direction: row; flex-wrap: wrap; justify-content: flex-start; margin:6px -3px 0; }
+.add_member li { padding:5px; border:1px solid #ccc; margin:3px; }
+.add_member li button { margin-left:7px; }
+
+/*템플릿 호환 차종*/
+.modal_content .search_detail:first-child { padding-right:0; }
+.modal_content .compatible { padding:15px;border:15px solid #f1f1f1; }
+.modal_content .toggle_box .carmodel_list_wrap { height:auto; border:none; border-radius:0; }
+.modal_content .carmodel_list, .modal_content .carmodel_box { padding:10px; max-height:100%; }
+.modal_content .carmodel_box { width:100%; height:100%; max-height:300px; }
+.modal_content .carmodel_list ul li { width:calc(50% - 10px); padding:6px 10px; font-size:0.9em; }
+.modal_content .carmodel_box ul li { width:calc(50% - 10px); padding:10px 10px; font-size:0.9em; }
+.modal_content .carmodel_list ul li.active { padding-left:35px; }
+.modal_content .search_detail ul li .selectText { height:40px; }
+
+.modal_wrap .board_write.intitle > ul > li { padding:10px 0; }
+.modal_wrap .board_write.intitle .board_label { width:100px; font-size:1em; }
+.modal_wrap .board_write.intitle .input_wrap { width:calc(100% - 100px); }
+
+.modal_wrap .board_write > ul > li { padding:10px 0; }
+.modal_wrap .board_write .board_label { width:100%; font-size:.9em; margin-bottom:8px; }
+
+/*파일업로드*/
+.file_box {width:calc(100% - 40px); margin:0 20px; height:150px; border-radius:10px; text-align:center; border:1px dashed #b1bece; background:#edf6fb; padding:20px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; cursor:pointer;justify-content:center; align-items: center; transition:all 0.3s; }
+.file_box em.letter { background:url(../../images/custom/icon_fileup_on.svg) 50% 0% no-repeat; color:#005c8f; font-weight:400; background-size:20px; padding-top:25px; opacity:1; pointer-events:none; transition:all 0.3s;}
+.file_box:hover { border:1px dashed #0a52ad; text-decoration:none; }
+.file_box:hover em { }
+
+.file_box_wrap { height:100%; padding-top:20px; }
+.file_box_wrap .file_list { margin-top:0; height:calc(100% - 150px); overflow-y: auto; padding:20px;}
+.file_box_wrap .file_list li { width:100%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; padding:15px 0; margin:0; position:relative; padding-left:30px; }
+.file_box_wrap .file_list li:last-child { border-bottom:none; }
+.file_box_wrap .file_list li .file_wrap { width:100%; border:none; border-bottom:1px solid #ededed; border-radius:0; }
+.file_box_wrap .file_list li .filename { max-width:calc(100% - 65px); display:block; }
+.file_box_wrap .file_list li .filename em { width:calc(100% - 30px); overflow:hidden; text-overflow: ellipsis; white-space:nowrap; display:inline-block; float:left; }
+.file_box_wrap .file_list li .filename img { height:17px; width:17px; margin-left:10px; margin-top:2px;}
+.file_box_wrap .file_list .btn_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; }
+.file_box_wrap .file_list .btn_wrap button { box-shadow:none; }
+.file_box_wrap .file_list .btn_wrap .btn_delete { margin-left:10px; }
+.file_list .progress_bar { width:calc(100% - 30px);; height:1px; border-radius:3px; position:absolute; bottom:0; right:0; margin-top:5px; background:#ddd; }
+.file_list .progress_bar .bar { position:absolute; height:1px; background:#007dc3; }
+
+.file_box_wrap .file_list li.file_excel { background:url(../../images/custom/file_excel.svg) 0 20px no-repeat; background-size:13px; }
+.file_box_wrap .file_list li.file_img { background:url(../../images/custom/file_img.svg) 0 20px no-repeat; background-size:13px; }
+.file_box_wrap .file_list li.file_pdf { background:url(../../images/custom/file_pdf.svg) 0 20px no-repeat; background-size:13px; }
+.file_box_wrap .file_list li.file_ppt { background:url(../../images/custom/file_ppt.svg) 0 20px no-repeat; background-size:13px; }
+.file_box_wrap .file_list li.file_reg { background:url(../../images/custom/file_reg.svg) 0 20px no-repeat; background-size:13px; }
+.file_box_wrap .file_list li.file_word { background:url(../../images/custom/file_word.svg) 0 20px no-repeat; background-size:13px; }
+.file_box_wrap .file_list li.file_zip { background:url(../../images/custom/file_zip.svg) 0 20px no-repeat; background-size:13px; }
+.file_box_wrap .file_list li.file_hwp { background:url(../../images/custom/file_hwp.svg) 0 20px no-repeat; background-size:13px; }
+
+.modal_content.overshow { overflow:visible; }
+.modal_content .dataTables_wrapper { height:100%; }
+
+.modal_content .chatbot_table {width:10%; overflow-y:auto;table-layout:fixed; margin-bottom:10px; border-collapse:collapse; border:0 none; border-top:1px solid #ededed; }
+.modal_content .chatbot_table thead, .modal_content .chatbot_table tbody { width:100%; }
+.modal_content .chatbot_table th{ border-top:2px solid #224173; line-height:17px; padding:15px 0; font-weight:normal; font-size:13px; text-align:center; color:#224173; background-color:#f6f8ff; border-bottom:1px solid #ced8e8;}
+.modal_content .chatbot_table td{ line-height:17px; padding:15px 5px; font-weight:normal; font-size:13px; vertical-align:middle; text-align:center; color:#666; border-bottom:1px solid #ced8e8; }
+.modal_content .chatbot_table td:hover { color:#333; }
+
+/*구인정보등록 업제조회 table넓이값
+.modal_content .chatbot_table td:nth-child(1), .modal_content .chatbot_table th:nth-child(1) { width:60px; }
+.modal_content .chatbot_table td:nth-child(2), .modal_content .chatbot_table th:nth-child(2) { width:170px; }
+.modal_content .chatbot_table td:nth-child(3), .modal_content .chatbot_table th:nth-child(3) { width:100px; }
+.modal_content .chatbot_table td:nth-child(4), .modal_content .chatbot_table th:nth-child(4) { width:150px; }
+.modal_content .chatbot_table td:nth-child(5), .modal_content .chatbot_table th:nth-child(5) { width:150px; }
+.modal_content .chatbot_table td:nth-child(6), .modal_content .chatbot_table th:nth-child(6) { width:auto; }*/
+.modal_content .dataTables_scrollHead { height:49px; }
+.modal_content .dataTables_wrapper.no-footer .dataTables_scrollBody, .modal_content table.dataTable.no-footer { border-bottom:none; }
+
+.modal_content .dataTables_wrapper .dataTables_paginate { position:absolute; left:50%; bottom:-25px; transform:translateX(-50%); width:auto; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:center; align-items:center; }
+.modal_content .dataTables_wrapper .dataTables_paginate .paginate_button { line-height:1.2em; background:none; color:#666 !important; min-width:0; border:none; border-radius:0; padding:0; margin:0 8px;}
+.modal_content .dataTables_wrapper .dataTables_paginate .paginate_button:hover { background:none; border:none; color:#333 !important; }
+.modal_content .dataTables_wrapper .dataTables_paginate .paginate_button.current { border:none; background:none; border-bottom:1px solid #333; }
+.modal_content .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { background:none; border:none; border-bottom:1px solid #333; color:#333 !important; }
+
+.modal_content .paginate_button.previous { width:11px; height:11px; background:url(../../images/admin/arrow_left.svg) 50% 50% no-repeat !important; background-size:contain; text-indent:-5000px; }
+.modal_content .paginate_button.next { width:11px; height:11px; background:url(../../images/custom/arrow_right.svg) 50% 50% no-repeat !important; background-size:contain !important; text-indent:-5000px; }
+.modal_content .paginate_button.previous:hover, .paginate_button.next:hover { border:none; }
+
+.modal_content .dataTables_wrapper .dataTables_length { margin-bottom:10px; }
+.modal_content .dataTables_wrapper .dataTables_length select { height:30px; transition:all 0s; border-radius:3px; }
+.modal_content .dataTables_wrapper .dataTables_filter input { height:30px; border-radius:3px; border:1px solid #333; }
+.modal_content .dataTables_wrapper .dataTables_filter { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; margin:0 8px 10px 0; }
+.modal_content input[type='radio'] + label::before { margin-right:0; }
+
+.modal_content .dataTables_filter label { font-size:13px; color:#333; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items: center; }
+.modal_content .dataTables_filter label input { float:right; }
+
+.fr-box.fr-basic .fr-element { max-height:450px; }
+
+.sms_wrap { display:block; margin-bottom:5px; }
+.sms_wrap button { width:35px; height:35px; }
+.sms_wrap .smsnm { width:150px; }
+.sms_wrap .smsno { width:calc(100% - 191px); }
+.sms_wrap:last-child { margin-bottom:0; }
+
+@media all and (max-width: 1250px) {
+/* .logo { width:100%; height:85px; background-size:80px; }
+.left_menu { width:170px; height:85px; padding-top:0; }
+.submenu_wrap { display:none; }
+.content { width:calc(100% - 30px); margin-right:15px; }
+.footer { display:none; }
+.topBar { width:calc(100% - 170px); }
+
+.topBar .member li a { text-indent:-5000px; width:13px; height:13px; }
+.icon_home a { background:url(../../images/custom/icon_home_fff.svg) 50% 50% no-repeat; background-size:contain; }
+.icon_logou at { background:url(../../images/custom/icon_logout_fff.svg) 50% 50% no-repeat; background-size:contain; }
+.icon_login a { background:url(../../images/custom/icon_login_fff.svg) 50% 50% no-repeat; background-size:contain; }
+.icon_join a { background:url(../../images/custom/icon_join_fff.svg) 50% 50% no-repeat; background-size:contain; }
+ */
+}
+
+@media all and (max-width: 541px) {
+
+ .errorBox { padding:0 20px; width:100%; }
+ .errorContent { width:100%; border-radius:10px; padding:40px 0; }
+ .errorContent .title { font-size:1.2em; margin-bottom:15px; }
+ .errorContent .text { font-size:0.9em; }
+ .errorWrap a { margin-top:25px; font-size:1.1em; padding:10px 0; }
+}
+
+/*ie에서 작동*/
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){
+
+ input[type='checkbox'].switch {right:0; top:0; width:40px; height:25px; opacity:0; margin:0; z-index:0; position:absolute; cursor:pointer;}
+ input[type='checkbox'].switch + label { width:40px; height:25px; border:2px solid #ccc; background:#fff; border-radius:50px; z-index:1; position:relative;display:inline-block;}
+ input[type='checkbox'].switch + label::after { content:''; width:16px; height:16px; border-radius:20px; border:none; background:#ccc; display:inline-block; transition:all 0.3s; opacity:1; position:absolute; top:50%; left:3px; right:auto; transform:translateY(-50%); }
+ input[type='checkbox'].switch:hover + label::after { border:none; }
+ input[type='checkbox'].switch:checked + label::after {border:none;}
+ input[type='checkbox'].switch:disabled + label::after { border:none;}
+ input[type='checkbox'].switch:checked + label { border:2px solid #0eb139; }
+ input[type='checkbox'].switch:checked + label::after { left:auto; right:3px; transition:all 0.3s; background:#0eb139; }
+ input[type='checkbox'].switch + label::before { display:none; }
+
+}
+
Property changes on: base3.10/src/main/webapp/css/admin/admin.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/admin/style.css
===================================================================
--- base3.10/src/main/webapp/css/admin/style.css (nonexistent)
+++ base3.10/src/main/webapp/css/admin/style.css (revision 7)
@@ -0,0 +1,1076 @@
+@charset "UTF-8";
+/* CSS Document */
+
+/* css reset */
+html, body { margin:0; width:100%; height:100%; padding: 0; font-family: 'notoSans', sans-serif; font-weight:400; font-size:13px; color:#333; line-height:1.7em; overflow-x:auto; -webkit-overflow-scrolling: touch; scroll-behavior: smooth; box-sizing:border-box; }
+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; vertical-align:baseline;}
+a:link, a:hover, a:visited { text-decoration:none;}
+h1, h2, h3, h4, h5, h6 { font-weight:normal;}
+ol, ul { list-style:none;}
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display:block;}
+blockquote, q { quotes:none;}
+blockquote:before, blockquote:after, q:before, q:after { content:none; }
+em { font-style:normal; }
+.fr-element em { font-style:revert; }
+table { font-family:inherit; border-spacing:0; word-break:break-all; }
+a, a:hover { color:#3c3c3c; }
+a:hover { color:#3c3c3c; text-decoration:underline; }
+hr { border:none; border-top:1px dashed #ccc; height:0px; }
+* { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; word-break: break-all; font-family: 'notoSans', sans-serif; }
+*:focus { outline:2px dashed #007dc3; }
+/*table title, form title 숨기기*/
+legend, caption, .hidden, .blind { position:absolute; left:-9999em; width:1px;height:1px;margin:0;padding:0;background:none;font-size:0;line-height:0;text-indent:-9999em }
+
+.relative { position:relative; }
+.input_rel { position:relative !important; }
+.vertical_m { position:relative; top:50%; transform:translateY(-50%);}
+.autoY { overflow-y:auto; }
+.autoX { overflow-x:auto; }
+
+.flex { display:-webkit-box; display:-webkit-flex; display:-moz-box; display:-ms-flexbox; display:flex; }
+.between {justify-content: space-between; }
+.itemC { align-items:center; }
+.square { height:0; padding-bottom:100% !important; }
+
+.blank, .blank_w { display:inline-block; transition:all 0.3s; height:auto;}
+.blank::after, .blank_w::after { content: ''; margin-left:10px; display:inline-block; width:13px; height:13px; transform:translateY(2px); transition:all 0.3s; }
+.blank::after { background:url(../../images/custom/icon_blank.svg) 50% 50% no-repeat; background-size:contain;}
+.blank_w::after { background:url(../../images/custom/icon_blank_w.svg) 50% 50% no-repeat; background-size:contain; }
+
+/*border 속성****************************************************************************************************************************************/
+.bd0 { border:none !important; }
+.bt0 { border-top:none !important; }
+.bb0 { border-bottom:none !important; }
+.bl0 { border-left:none !important; }
+.br0 { border-right:none !important; }
+
+/*데코 속성****************************************************************************************************************************************/
+/*텍스트 데코*/
+.underline { text-decoration:underline; }
+.bold { font-weight:600; }
+.ellipsis {overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
+.must .board_label::after, .must .tit::after, em.must::after, .must::after { content:'*'; display:inline-block; margin-left:5px; color:#e21818; }
+.ls_narrow { letter-spacing:-1px; }
+.must_text { color:#d70000; margin-bottom:10px; font-size:0.9em; float:right; }
+.must_text::after { display:block; content:''; clear:both; }
+
+/*font*/
+@font-face{font-family:notoSans;src:url(../../fonts/NotoSansKR-Thin.woff);font-style:normal;font-weight:100;}
+@font-face{font-family:notoSans;src:url(../../fonts/NotoSansKR-Light.woff);font-style:normal;font-weight:300;}
+@font-face{font-family:notoSans;src:url(../../fonts/NotoSansKR-Regular.woff);font-style:normal;font-weight:400;}
+@font-face{font-family:notoSans;src:url(../../fonts/NotoSansKR-Medium.woff);font-style:normal;font-weight:500;}
+@font-face{font-family:notoSans;src:url(../../fonts/NotoSansKR-Bold.woff);font-style:normal;font-weight:700;}
+@font-face{font-family:notoSans;src:url(../../fonts/NotoSansKR-Black.woff);font-style:normal;font-weight:900;}
+
+/*sign*/
+@font-face{font-family:sign;
+ src:url(../../fonts/sign.ttf),
+ url(../../fonts/sign.eot),
+ url(../../fonts/sign.woff);}
+
+/*색상속성****************************************************************************************************************************************/
+/*font color*/
+.color_orange { color:#e47916 !important; }
+.color_lightgreen {color:#71bd3e !important; }
+.color_black { color:#3c3c3c !important; }
+.color_deepblue { color:#317fa4 !important; }
+.color_purple { color:#d26bca !important; }
+.color_gray { color:#666 !important; }
+.color_blue { color:#227dbd !important; }
+.color_red { color:#da4343 !important; }
+
+/*button****************************************************************************************************************************************/
+/* button */
+button { cursor:pointer; border-radius:2px; transition:all .2s; background-color:#fff; color:#3c3c3c; border:1px solid #ccc; font-family:inherit; }
+button:hover { border:1px solid #666; box-shadow:0 0px 3px rgba(173,197,218,0.8);}
+button img { display:none; }
+.btn_ss { font-size:13px; text-align:center; padding:0 10px; height:27px; }
+.btn_s { font-size:13px; text-align:center; padding:0 15px; height:32px; letter-spacing:-1px;}
+.btn_m { font-size:13px; letter-spacing:-0.1em; text-align:center; padding:0 15px; height:35px; }
+.btn_b { font-size:15px; letter-spacing:-0.2em; text-align:center; width:225px; height:40px; font-weight:600; }
+.disabled { cursor:not-allowed; background:#ededed}
+.input_wrap { }
+.input_wrap .inputText { width:calc(100% - 100px); }
+.input_wrap button { width:100px; }
+
+.inputText.color_orange value{ color:#e47916 !important; }
+
+.btn_sq_s { width:20px; height:20px; border:1px solid #bbb; transition:all .2s ease-in-out;}
+.btn_sq_m { width:32px; height:32px; border:1px solid #bbb; transition:all .2s ease-in-out;}
+.btn_sq_l { width:40px; height:40px; border:1px solid #bbb; transition:all .2s ease-in-out;}
+
+.btn_img { background-size:40% !important;background-repeat:no-repeat!important; background-position:50% 50%!important;transition:all .2s ease-in-out; }
+.btn_img img { display:none; }
+.btn_circleSS { width:20px; height:20px; border-radius:20px; transition:all .2s ease-in-out;}
+.btn_circleS { width:30px; height:30px; border-radius:30px; transition:all .2s ease-in-out; }
+.btn_circleM { width:40px; height:40px; border-radius:40px; transition:all .2s ease-in-out; }
+.btn_circleL { width:50px; height:50px; border-radius:50px; transition:all .2s ease-in-out; }
+
+/*닫기버튼*/
+.btn_close { width:100%; height:100%; cursor:pointer; z-index:99; border:none; display:inline-block; transition:all 0.3s; background:url(../../images/custom/x.svg) 50% 50% no-repeat; background-size:15px !important; }
+.btn_close:hover { transform:rotate(90deg); border:none; box-shadow:none; }
+.close.btn_close_wrap .btn_close { float:right; }
+
+.btn_toggle { width:30px; height:30px; display:block; position:relative; }
+.btn_toggle::before, .btn_toggle::after { content:''; position:absolute; top:50%; left:50%; width:50%; height:2px; background:#333; display:inline-block; transition:all 0.3s;}
+.btn_toggle::before { transform: translate(-50%,-50%) rotate(90deg); }
+.btn_toggle::after { transform: translate(-50%,-50%) rotate(0deg); }
+.btn_toggle.active::before { transform:translate(-50%,-50%) rotate(0deg); }
+.btn_toggle.active::after { transform:translate(-50%,-50%) rotate(0deg); }
+
+.btn_arrow_down::after { content:''; width:10px; height:10px; transition:all 0.3s; display:inline-block; margin-left:15px; background:url(../../images/custom/arrow_down.svg) 50% 50% no-repeat; background-size:contain; }
+.btn_arrow_down.active { border:1px solid #666; box-shadow:0 0 10px 0 rgba(0,0,0,.3); }
+.btn_arrow_down.active::after { transform:rotate(180deg); }
+
+.btn_up { background:url(../../images/custom/arrow_top.svg) 50% 50% no-repeat #fff; background-size:40%; text-indent:-5000px; }
+.btn_down { background:url(../../images/custom/arrow_down.svg) 50% 50% no-repeat #fff; background-size:40%; text-indent:-5000px; }
+.btn_up:hover, .btn_down:hover { border-color:#666; }
+
+.btn_delete, a.btn_delete { background:url(../../images/custom/icon_trash.svg) 50% 50% no-repeat #fff; background-size:12px; text-indent:-5000px; display:inline-block; transition:background 0s;}
+.btn_delete:hover { background:url(../../images/custom/icon_trash_on.svg) 50% 50% no-repeat #fff; background-size:12px; }
+.btn_plus { background:url(../../images/custom/icon_plus.svg) 50% 50% no-repeat #fff; background-size:50%; text-indent:-5000px;display:inline-block; }
+.btn_plus:hover { border-color:#666; }
+.btn_update { background:url(../../images/custom/icon_update.svg) 50% 50% no-repeat #fff; background-size:16px; text-indent:-5000px; display:inline-block; transition:background 0s;}
+.btn_update:hover { border-color:#666; background:url(../../images/custom/icon_update_on.svg) 50% 50% no-repeat #fff; background-size:16px; }
+
+/*파일다운*/
+.btn_filedown, a.btn_filedown { width:24px; height:24px; display:inline-block; border:1px solid #bbb; border-radius:3px; text-indent:-5000px; background:url(../../images/custom/icon_filedown.svg) 50% 50% no-repeat; background-size:14px 13px !important; transition:all .2s, background 0s; }
+.btn_filedown:hover { box-shadow:0 0 5px 0 rgba(0,0,0,0.3); border-color:#666; background:url(../../images/custom/icon_filedown_on.svg) 50% 50% no-repeat; background-size:14px 13px !important;}
+.btn_wrap .btn_delete { margin-left:5px; }
+.btn_excel { background:url(../../images/custom/icon_excel.svg) 10px 50% no-repeat; background-size:15px; padding-left:30px; }
+
+.clickmore { padding:3px 10px; font-size:0.9em; border-radius:50px; color:#007dc3; border:1px solid #007dc3; }
+
+/* bgcolor */
+.bgcolor01 {background-color:#fff; color:#3c3c3c !important; border:1px solid #ccc; } /* 흰바탕 */
+.bgcolor01:hover {background-color:#f1f1f1; border:1px solid #666; }
+.bgcolor02 {background-color:#3ca223; color:#fff !important; border:1px solid #3ca223; } /* green */
+.bgcolor02:hover {background-color:#248a0b; border:1px solid #177700; }
+.bgcolor03 {background-color:#dce4f3; color:#6385b9 !important; border:1px solid #bcc9f7;} /* light blue */
+.bgcolor03:hover {background-color:#cbd3ef; color:#112b53 !important; border:1px solid #8292cc; }
+.bgcolor04 {background-color:#fff; color:#6e9ebc !important; border:1px solid #6e9ebc;} /* light blue line */
+.bgcolor04:hover {background-color:#6e9ebc; color:#fff !important; border:1px solid #6e9ebc; }
+.bgcolor05 {background-color:#fff; color:#de6e6e !important; border:1px solid #de6e6e;} /* light red line */
+.bgcolor05:hover {background-color:#de6e6e; color:#fff !important; border:1px solid #de6e6e; } /* light red line */
+.bgcolor06 {background-color: #5b94b7; color: #fff !important; border: 1px solid #1b618e;} /*Deepblue line 등록버튼*/
+.bgcolor06:hover {background-color:#4082aa; border:1px solid #135179; }
+
+ /* 결제대기 */
+.bg_lightgray {background-color:#dee7ec !important;}
+.bg_white {background-color:#fff !important;}
+.bg_title { background:#f0f3f5 !important; }
+
+/* bgcolor */
+.bg_gray {background-color:#f4f5f7 !important;} /* 결제대기 */
+.bg_lightgray {background-color:#dee7ec !important;}
+.bg_white {background-color:#fff !important; border:1px solid #ccc;}
+.bg_white:hover { border:1px solid #666; }
+.bg_navy { background:#143b84; color:#fff; border-color:#0d3071; }
+.bg_navy:hover { background-color:#032b54 !important; }
+.bg_blue { background:#0a62ad; color:#fff; border-color:#035396; }
+.bg_blue:hover { background-color:#05489c !important; }
+
+.bg_basic { border:1px solid #ccc; background:none; }
+.bg_basic:hover { border-color:#666; }
+
+.line_blue { border:1px solid #1265cc; color:#1265cc; }
+.line_blue:hover { background:#1265cc; color:#fff; }
+
+.line_white { background:transparent; border:1px solid #fff; color:#fff; }
+.line_white:hover { background:#fff; color:#333; }
+
+.bg_line { background:transparent; border:1px solid #333; }
+.bg_line:hover { background-color:#fff; }
+
+/*정렬속성****************************************************************************************************************************************/
+.alignL {text-align:left !important;}
+.alignC {text-align:center !important;}
+.alignR {text-align:right !important;}
+
+.verticalT { vertical-align:top !important;}
+.verticalM { vertical-align:middle !important;}
+.verticalB { vertical-align:bottom !important;}
+
+.fl {float:left !important;}
+.fr {float:right !important;}
+.fn {float:none !important;}
+.clear {clear:both !important;}
+.clear::after { clear:both; display:block; content:''; }
+.inline { display:inline-block !important; }
+.block { display:block !important; }
+.none { display:none; }
+.width_center{ margin:0 auto;}
+
+/*input 디자인****************************************************************************************************************************************/
+.inputText, .selectText, .textArea, .inputFile { font-family:inherit; font-size:13px; border:1px solid #ccc; z-index:1; font-weight:400; box-sizing:border-box; padding:0 5px 0 10px; height:35px; border-radius:2px!important; box-shadow:none; display:inline-block; -webkit-appearance: none; transition:0.2s ease-in-out;} /* 익스 9부터 적용가능, 아이폰 둥근 모서리 설정빼기 */
+.inputText:hover, .selectText:hover, .textArea:hover, .inputFile:hover { border:1px solid #666;box-shadow:0 0px 3px rgba(173,197,218,0.8); }
+/* .inputFile { padding:2px !important; } */
+.textArea { padding:10px; resize: none; }
+label { cursor:pointer; }
+.inputText[readonly], .selectText[readonly], .textArea[readonly],
+.inputText[disabled], .selectText[disabled], .textArea[disabled] { background:#f1f1f1; border-color:#e4e4e4; }
+.selectText[disabled], .selectText[readonly] { background:url(../../images/custom/arrow_down.svg) calc(100% - 10px) 50% no-repeat #f1f1f1; background-size:10px !important; }
+.inputText::placeholder { color:#ccc; }
+.inputText[readonly]:hover, .selectText[readonly]:hover, .textArea[readonly]:hover,
+.inputText[disabled]:hover, .selectText[disabled]:hover, .textArea[disabled]:hover { border:1px solid #ccc;box-shadow:none; }
+
+.inputText, input[type="text"] { border:1px solid #ccc; border-radius:2px; height:35px !important; background:#fff; transition-duration:0.2s; padding:0 10px; box-sizing:border-box; }
+.inputText:hover, input[type="text"]:hover { border:1px solid #666; box-shadow:0 0px 3px rgba(173,197,218,0.8); }
+.selectText, table .selectText { border-radius:2px; transition-duration:0.3s; min-width:130px; border:1px solid #ccc; height:35px; background:url(../../images/custom/arrow_down.svg) calc(100% - 10px) 50% no-repeat #fff; background-size:10px !important; padding:0 30px 0 10px; box-sizing:border-box; }
+textarea, .textArea { min-height:50px; border-radius:2px; transition-duration:0.3s; border:1px solid #ccc; background: #fff; padding: 10px; box-sizing:border-box; }
+.inputText:hover, .admin_contents .textArea:hover { border:1px solid #666; box-shadow:0 0px 3px rgba(173,197,218,0.8); }
+.select { height:32px; min-width:130px; border:1px solid #ccc; }
+.select:hover { border:1px solid #666;box-shadow:0 0px 3px rgba(173,197,218,0.8); }
+
+/*select 디자인****************************************************************************************************************************************/
+select { padding-left:5px; background:url(../../images/custom/arrow_down.svg) calc(100% - 10px) 50% no-repeat #fff; background-size:13px; cursor:pointer;transition:all .5s ease-in-out;
+ -webkit-appearance: none; /* 화살표 없애기 for chrome */
+ -moz-appearance: none; /* 화살표 없애기 for firefox */
+ appearance: none; /* 화살표 없애기 공통 */ }
+select::-ms-expand {
+ display: none; /* 화살표 없애기 for firefox */
+}
+.selectText, .select { height:35px; border:1px solid #ccc; transition:all .3s ease-in-out; border-radius:2px; background:url(../../images/custom/arrow_down.svg) calc(100% - 10px) 50% no-repeat #fff; background-size:10px; }
+.selectText:hover, .select:hover { border-color:#666; }
+
+/*file 디자인****************************************************************************************************************************************/
+.file_up { width:100%; display:-webkit-box; display:-webkit-flex; display:-moz-box; display:-ms-flexbox; display:flex; flex-direction:row; align-items:flex-start; }
+.file_up input[type="file"] { position: absolute; width:1px; height:1px; padding: 0; margin: -1px; overflow: hidden; clip:rect(0,0,0,0); border: 0; }
+.file_up label, .file_up .inputFile {border:1px solid #ccc; margin-right:3px; text-align:left; padding:7px 25px 6px 20px; min-width:105px; background:url(../../images/admin/icon_fileup.svg) calc(100% - 10px) 50% no-repeat #fff; background-size:11px 11px; border-radius:2px; box-shadow:none; display:inline-block; transition:0.3s ease-in-out; }
+.file_up label:hover, .file_up .inputFile:hover { box-shadow:0 0 5px 0 rgba(0,0,0,0.3); border-color:#666; }
+.upload-name { visibility:hidden; width:calc(100% - 100px); padding:0 10px; height:35px; }
+.file_up label.withname { height:35px; padding:7px 20px 6px 10px; min-width:85px; }
+
+/*첨부파일 가로 정렬*/
+.file_list.sortR { flex-direction:row; flex-wrap:wrap; justify-content:flex-start; }
+.file_list.sortR li { margin:2.5px !important; }
+
+.file_list_wrap { display:-webkit-box; display:-webkit-flex; display:-moz-box; display:-ms-flexbox; display:flex; align-items:flex-start; flex-direction:column; }
+.file_list_wrap.show { }
+.file_list_wrap .space5 { display:none; }
+
+.upload-name { }
+.upload-name.show { display:inline-block; }
+
+.file_list { margin:5px -2px 0; display:inline-block; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:flex-start; flex-wrap:wrap; align-content:flex-start; }
+.file_list li:first-child { }
+.file_list li:last-child { }
+.file_list li { margin:2px; }
+.addFileSize.file_list .file_wrap p { display:inline-block; min-width:0; }
+.addFileSize.file_list strong { margin-right:10px; max-width:300px; font-weight:400; }
+
+/*일반파일*/
+.file_list .file_wrap { display:-webkit-box; display:-webkit-flex; display:-moz-box; display:-ms-flexbox; display:flex; width:auto; align-items:center; padding:3px 7px 3px 15px; border:1px solid #ccc; border-radius:2px; background:#fff; transition:border .2s ease-in-out, box-shadow .2s ease-in-out;}
+.file_list .file_wrap:hover { box-shadow:0 0 10px 0 rgba(0,0,0,0.1); border-color:#666; }
+.file_list .file_wrap p { display:inline-block; min-width:100px; max-width:300px; font-size:0.9em; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; padding-right:20px; position:relative; }
+.file_list .file_wrap p::after { width:1px; height:15px; content:''; display:inline-block; background:#ccc; position:absolute; top:5px; right:6px; }
+.file_list .file_wrap p .fileSize { font-size:0.9em; margin-left:10px; display:inline-block;}
+.file_list .file_wrap .btn_sq_s { width:24px; height:27px; display:inline-block; }
+.file_list .file_wrap .btn_ss { padding:0 4px; }
+.file_list .file_wrap .btn_ss:hover { color:#007dc3; }
+.file_list .file_wrap .btn_ss, .file_list .btn_sq_s { height:25px; border-radius:2px; border-color:transparent; display:inline-block;}
+.file_list .file_wrap .btn_sq_s:hover, .file_list .file_wrap .btn_s:hover, .file_list .file_wrap .btn_ss:hover { border-color:transparent; box-shadow:none; }
+
+.file_img .file_wrap { background:url(../../images/custom/file_img.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+.file_ppt .file_wrap { background:url(../../images/custom/file_ppt.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+.file_pdf .file_wrap { background:url(../../images/custom/file_pdf.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+.file_word .file_wrap { background:url(../../images/custom/file_word.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+.file_reg .file_wrap { background:url(../../images/custom/file_reg.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+.file_excel .file_wrap { background:url(../../images/custom/file_excel.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+.file_zip .file_wrap { background:url(../../images/custom/file_zip.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+.file_hwp .file_wrap { background:url(../../images/custom/file_hwp.svg) 10px 50% no-repeat #fff; background-size:13px; padding-left:35px; }
+
+/*업로드파일이 이미지일 경우*/
+.file_img { display:-webkit-box; display:-webkit-flex; display:-moz-box; display:-ms-flexbox; display:flex; justify-content:flex-start; }
+.file_img li { width:80px;height:80px; background-size:contain !important; position:relative; overflow:hidden; margin:10px 10px 0 0; border-radius:10px; border:1px solid #eaeaea; transition:border .2s ease-in-out, box-shadow .2s ease-in-out; }
+.file_img li:last-child { margin-right:0; }
+.file_img li:hover { box-shadow:0 0 10px 0 rgba(0,0,0,0.1);}
+.file_img li .btn { width:100%; position:absolute; text-align:center; z-index:1; bottom:-100%; right:0; padding:5px 0; background:#fff; line-height:1em;transition:bottom .1s ease-in-out; }
+.file_img li:hover .btn { bottom:0; }
+.file_img li .btn .btn_sq_s { width:24px; height:24px; border-color:transparent; margin:0 2px; }
+.file_img li .btn .btn_sq_s:hover { box-shadow:none; }
+.file_img li::after { position:absolute; top:0; left:0; pointer-events:none; content:''; background:#333; display:block; width:100%; height:100%; opacity:0; z-index:0; transition:opacity .1s ease-in-out;}
+.file_img li:hover::after { opacity:0.5; }
+.file_img li img { width:100%; height:auto; position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); pointer-events:none; }
+
+
+/*scrollbar 디자인****************************************************************************************************************************************/
+::-webkit-scrollbar {width: 8px; height: 8px; }
+::-webkit-scrollbar-track {background: transparent; }
+::-webkit-scrollbar-thumb {height: 50px; width: 50px; background:#ddd; -webkit-border-radius: 8px; border-radius: 8px; }
+
+/*체크박스, 라디오박스 설정*/
+
+input[type='checkbox'] { width:18px; height:18px; opacity:1; margin:0 7px 0 0; z-index:0; position:relative; cursor:pointer; transform:translateY(1px);}
+input[type='checkbox']::before { content:''; pointer-events:none; background:url(../../images/admin/check_on.svg) 50% 50% no-repeat #fff; background-size:contain; border:1px solid #333; width:100%; height:100%; display:inline-block; border-radius:3px; opacity:0; top:0; left:0; position:absolute; }
+input[type='checkbox']:checked::before { opacity:1; z-index:1; }
+input[type='checkbox']:checked + label { font-weight:600; }
+
+input[type='radio'] { width:18px; height:18px; opacity:1; margin:0 7px 0 0; z-index:1; position:relative; cursor:pointer; }
+input[type='radio']::before { content:''; pointer-events:none; background:url(../../images/custom/radio_on.svg) 50% 50% no-repeat #fff; background-size:10px; width:100%; height:100%; border:1px solid #333; display:inline-block; border-radius:30px; opacity:0; top:0; left:0; position:absolute; }
+input[type='radio']:checked::before { opacity:1; z-index:1; }
+input[type='radio']:checked + label { font-weight:600; }
+
+/*input[type='checkbox']{ left:1px; top:3px; width:16px; height:16px; opacity:1; margin:0; z-index:0; position:absolute; }
+input[type='checkbox'] + label {cursor:pointer; font-size:1em; font-weight:400; color:#666;position:relative; z-index:1;}
+input[type='checkbox'] + label::before { content:''; display:inline-block;width:16px;height:16px;vertical-align:middle;margin-right:10px; border:1px solid #999; cursor:pointer; background:#fff;margin-top:-2px; transition:all .2s ease-in-out; }
+input[type='checkbox']:hover + label::before { border:1px solid #666; font-weight:500; }
+input[type='checkbox']:checked + label::before { border:1px solid #333;}
+input[type='checkbox']:disabled + label::before { border:1px solid #d8d8d8; background:#f1f1f1; }
+input[type='checkbox'] + label::after { content:'';display:inline-block; position:absolute; transition:all .2s ease-in-out; opacity:0; }
+input[type='checkbox']:checked + label::after { opacity:1; }
+input[type='checkbox'] + label::before { border-radius:2px; }
+input[type='checkbox'] + label::after { width:18px; height:18px;left:3px; top:1px; background:url(../../images/custom/check_on.svg) 50% 50% no-repeat; background-size:contain; }
+input[type='checkbox']:checked + label, input[type='checkbox']:disabled + label { color:#000; }
+input[type='checkbox']:checked + label { font-weight:500; }
+
+input[type='radio']{ left:1px; top:4px; width:16px; height:16px; opacity:1; margin:0; z-index:0; position:absolute; }
+input[type='radio'] + label {cursor:pointer; font-size:1em; font-weight:400; color:#999;position:relative; z-index:1; }
+input[type='radio'] + label::before { content:''; display:inline-block;width:16px;height:16px;vertical-align:middle;margin-right:10px; border:1px solid #999; cursor:pointer; background:url(../../images/custom/radio_on.svg) 50% 50% no-repeat #fff; background-size:0; margin-top:-2px; transition:all .2s ease-in-out; }
+input[type='radio']:hover + label::before { border:1px solid #666; font-weight:500; }
+input[type='radio']:checked + label::before { border:1px solid #333;}
+input[type='radio']:disabled + label::before { border:1px solid #d8d8d8; background:#f1f1f1; }
+input[type='radio']:checked + label::before { background:url(../../images/custom/radio_on.svg) 50% 50% no-repeat #fff; background-size:10px; }
+input[type='radio'] + label::before { border-radius:10px; }
+input[type='radio']:hover + label, input[type='radio']:checked + label, input[type='radio']:disabled + label { color:#333; }
+input[type='radio']:checked + label { font-weight:500; }*/
+
+.input_shadow {box-shadow: inset 1px 1px 5px #babecc, inset -3px -3px 5px #f0f3f5 !important;}
+
+/*가로,세로,마진,패딩 설정****************************************************************************************************************************************/
+/* 가로사이즈% (테이블 col class로 사용 필요할 경우 class 추가) */
+.widthauto { width:auto !important;}
+.width5p { width:5% !important; }
+.width10p { width:10% !important; }
+.width12_5p { width:12.5% !important; }
+.width16_3p { width:16.3% !important; }
+.width16_6p { width:16.666666% !important; }
+.width15p { width:15% !important; }
+.width19p { width:19% !important;}
+.width20p { width:20% !important; }
+.width25p { width:25% !important; }
+.width27p { width:27% !important; }
+.width30p { width:30% !important; }
+.width33p { width:33.333% !important; }
+.width35p { width:35% !important; }
+.width40p { width:40% !important; }
+.width45p { width:45% !important; }
+.width50p { width:50% !important; }
+.width55p { width:55% !important; }
+.width60p { width:60% !important; }
+.width65p { width:65% !important; }
+.width70p { width:70% !important; }
+.width75p { width:75% !important; }
+.width80p { width:80% !important; }
+.width85p { width:85% !important; }
+.width90p { width:90% !important; }
+.width95p { width:95% !important; }
+.width96p { width:96% !important; }
+.width99p { width:99% !important; }
+.width100p { width:100% !important; }
+
+.height50p { height:50% !important; }
+.height55p { height:55% !important; }
+.height60p { height:60% !important; }
+.height65p { height:65% !important; }
+.height70p { height:70% !important; }
+.height75p { height:75% !important; }
+.height80p { height:80% !important; }
+.height85p { height:85% !important; }
+.height90p { height:90% !important; }
+.height95p { height:95% !important; }
+.height100p { height:100% !important; }
+
+.h_calc270 { height:calc(100% - 270px) !important; }
+.hcalc10 { height:calc(100% - 10px) !important; }
+.hcalc20 { height:calc(100% - 20px) !important; }
+.hcalc30 { height:calc(100% - 30px) !important; }
+.hcalc40 { height:calc(100% - 40px) !important; }
+.hcalc50 { height:calc(100% - 50px) !important; }
+.hcalc56 { height:calc(100% - 56px) !important; }
+.hcalc60 { height:calc(100% - 60px) !important; }
+.hcalc100 { height:calc(100% - 100px) !important; }
+.hcalc200 { height:calc(100% - 200px) !important; }
+
+.calc6 { width:calc(100% - 6px) !important; }
+.calc10 { width:calc(100% - 10px); }
+.calc20 { width:calc(100% - 20px); }
+.calc30 { width:calc(100% - 30px); }
+.calc35 { width:calc(100% - 35px); }
+.calc37 { width:calc(100% - 37px); }
+.calc40 { width:calc(100% - 40px); }
+.calc50 { width:calc(100% - 50px); }
+.calc55 { width:calc(100% - 55px); }
+.calc56 { width:calc(100% - 56px); }
+.calc57 { width:calc(100% - 57px); }
+.calc58 { width:calc(100% - 58px); }
+.calc59 { width:calc(100% - 59px); }
+.calc60 { width:calc(100% - 60px); }
+.calc61 { width:calc(100% - 61px); }
+.calc62 { width:calc(100% - 62px); }
+.calc63 { width:calc(100% - 63px); }
+.calc64 { width:calc(100% - 64px); }
+.calc65 { width:calc(100% - 65px); }
+.calc66 { width:calc(100% - 66px); }
+.calc67 { width:calc(100% - 67px); }
+.calc68 { width:calc(100% - 68px); }
+.calc68 { width:calc(100% - 69px); }
+.calc68 { width:calc(100% - 68px); }
+.calc70 { width:calc(100% - 70px); }
+.calc79 { width:calc(100% - 79px); }
+.calc80 { width:calc(100% - 80px); }
+.calc84 { width:calc(100% - 84px); }
+.calc85 { width:calc(100% - 85px); }
+.calc88 { width:calc(100% - 88px); }
+.calc90 { width:calc(100% - 90px); }
+.calc100 { width:calc(100% - 100px); }
+.calc105 { width:calc(100% - 105px); }
+.calc108 { width:calc(100% - 108px); }
+.calc110 { width:calc(100% - 110px); }
+.calc118 { width:calc(100% - 118px); }
+.calc119 { width:calc(100% - 119px); }
+.calc120 { width:calc(100% - 120px); }
+.calc122 { width:calc(100% - 122px); }
+.calc130 { width:calc(100% - 130px); }
+.calc135 { width:calc(100% - 135px); }
+.calc140 { width:calc(100% - 140px); }
+.calc142 { width:calc(100% - 142px); }
+.calc143 { width:calc(100% - 143px); }
+.calc144 { width:calc(100% - 144px); }
+.calc146 {width: calc(100% - 146px);}
+.calc150 { width:calc(100% - 150px) !important; }
+.calc160 { width:calc(100% - 160px); }
+.calc165 { width:calc(100% - 165px); }
+.calc175 { width:calc(100% - 175px); }
+.calc178 { width:calc(100% - 178px); }
+.calc192 { width:calc(100% - 192px); }
+.calc195 { width:calc(100% - 195px); }
+.calc200 { width:calc(100% - 200px); }
+.calc203 { width:calc(100% - 203px); }
+.calc204 { width:calc(100% - 204px); }
+.calc210 { width:calc(100% - 210px); }
+.calc216 { width:calc(100% - 216px); }
+.calc250 { width:calc(100% - 250px); }
+.calc260 { width:calc(100% - 260px); }
+.calc264 { width:calc(100% - 264px); }
+.calc310 { width:calc(100% - 310px); }
+.calc100-100 { width:calc(100% - 100px); }
+.calc25-5 { width:calc(25% - 8px); }
+.calc25-90 { width:calc(25% - 90px); }
+.calc25-100 { width:calc(25% - 100px); }
+.calc25-150 { width:calc(25% - 150px); }
+.calc50-130 { width:calc(50% - 130px); }
+.calc30-10 { width:calc(30% - 10px) !important; }
+.calc20-10 { width:calc(20% - 10px) !important; }
+.calc10-10 { width:calc(10% - 10px) !important; }
+.calc430 { width:calc(100% - 430px) !important; }
+.calc435 { width:calc(100% - 435px) !important; }
+.calc50-5 { width:calc(50% - 5px) !important; }
+.calc50-3 { width:calc(50% - 3px) !important; }
+.calc40-3 { width:calc(40% - 3px) !important; }
+.calc50-10 { width:calc(50% - 10px) !important; }
+.calc70-10 { width:calc(70% - 10px) !important; }
+
+
+/* 가로사이즈px (테이블 col class로 사용 필요할 경우 class 추가) */
+.width5 { width:5px !important;}
+.width10 { width:10px !important;}
+.width15 { width:15px !important;}
+.width20 { width:20px !important;}
+.width25 { width:25px !important;}
+.width30 { width:30px !important;}
+.width35 { width:35px !important;}
+.width40 { width:40px !important;}
+.width45 { width:45px !important;}
+.width46 { width:46px !important;}
+.width50 { width:50px !important;}
+.width55 { width:55px !important;}
+.width60 { width:60px !important;}
+.width65 { width:65px !important;}
+.width70 { width:70px !important;}
+.width75 { width:75px !important;}
+.width80 { width:80px !important;}
+.width85 { width:85px !important;}
+.width89 { width:89px !important;}
+.width90 { width:90px !important;}
+.width95 { width:95px !important;}
+.width100 { width:100px !important;}
+.width110 { width:110px !important;}
+.width120 { width:120px !important;}
+.width130 { width:130px !important;}
+.width140 { width:140px !important;}
+.width150 { width:150px !important;}
+.width160 { width:160px !important;}
+.width170 { width:170px !important;}
+.width180 { width:180px !important;}
+.width190 { width:190px !important;}
+.width200 { width:200px !important;}
+.width210 { width:210px !important;}
+.width220 { width:220px !important;}
+.width230 { width:230px !important;}
+.width240 { width:240px !important;}
+.width250 { width:250px !important;}
+.width260 { width:260px !important;}
+.width270 { width:270px !important;}
+.width280 { width:280px !important;}
+.width290 { width:290px !important;}
+.width300 { width:300px !important;}
+.width310 { width:310px !important;}
+.width320 { width:320px !important;}
+.width323 { width:323px !important;}
+.width330 { width:330px !important;}
+.width340 { width:340px !important;}
+.width350 { width:350px !important;}
+.width360 { width:360px !important;}
+.width370 { width:370px !important;}
+.width380 { width:380px !important;}
+.width390 { width:390px !important;}
+.width400 { width:400px !important;}
+.width420 { width:420px !important;}
+.width422 { width:422px !important;}
+.width450 { width:450px !important;}
+.width480 { width:480px !important;}
+.width500 { width:500px !important;}
+.width505 { width:505px !important;}
+.width550 { width:550px !important;}
+.width600 { width:600px !important;}
+.width650 { width:650px !important;}
+.width700 { width:700px !important;}
+.width750 { width:750px !important;}
+.width800 { width:800px !important;}
+.width850 { width:850px !important;}
+.width900 { width:900px !important;}
+.width950 { width:950px !important;}
+.width1000 { width:1000px !important;}
+.width1100 { width:1100px !important;}
+.width1200 { width:1200px !important;}
+.width1300 { width:1300px !important;}
+.width1400 { width:1400px !important;}
+.width1500 { width:1500px !important;}
+.width1600 { width:1600px !important;}
+.width1700 { width:1700px !important;}
+
+/* 세로사이즈px (테이블 row class로 사용 필요할 경우 class 추가) */
+.heightauto { height:auto !important; }
+.height100p { height:100% !important;}
+.height5 { height:5px !important;}
+.height10 { height:10px !important;}
+.height15 { height:15px !important;}
+.height20 { height:20px !important;}
+.height23 { height:23px !important;}
+.height25 { height:25px !important;}
+.height30 { height:30px !important;}
+.height32 { height:32px !important;}
+.height35 { height:35px !important;}
+.height37 { height:37px !important;}
+.height38 { height:38px !important;}
+.height40 { height:40px !important;}
+.height45 { height:45px !important;}
+.height50 { height:50px !important;}
+.height53 { height:53px !important; }
+.height55 { height:55px !important;}
+.height60 { height:60px !important;}
+.height65 { height:65px !important;}
+.height70 { height:70px !important;}
+.height75 { height:75px !important;}
+.height76 { height:76px !important;}
+.height77 { height:77px !important;}
+.height78 { height:78px !important;}
+.height79 { height:79px !important;}
+.height80 { height:80px !important;}
+.height81 { height:81px !important;}
+.height82 { height:82px !important;}
+.height83 { height:83px !important;}
+.height84 { height:84px !important;}
+.height85 { height:85px !important;}
+.height86 { height:86px !important;}
+.height87 { height:87px !important;}
+.height88 { height:88px !important;}
+.height89 { height:89px !important;}
+.height90 { height:90px !important;}
+.height95 { height:95px !important;}
+.height100 { height:100px !important;}
+.height110 { height:110px !important;}
+.height112 { height:112px !important;}
+.height120 { height:120px !important;}
+.height121{ height:121px !important;}
+.height122{ height:122px !important;}
+.height123{ height:123px !important;}
+.height124{ height:124px !important;}
+.height125{ height:125px !important;}
+.height126{ height:126px !important;}
+.height127{ height:127px !important;}
+.height128{ height:128px !important;}
+.height129{ height:129px !important;}
+.height130 { height:130px !important;}
+.height140 { height:140px !important;}
+.height150 { height:150px !important;}
+.height160 { height:160px !important;}
+.height170 { height:170px !important;}
+.height180 { height:180px !important;}
+.height190 { height:190px !important;}
+.height200 { height:200px !important;}
+.height210 { height:210px !important;}
+.height217 { height:217px !important;}
+.height220 { height:220px !important;}
+.height230 { height:230px !important;}
+.height240 { height:240px !important;}
+.height250 { height:250px !important;}
+.height253 { height:253px !important;}
+.height255 { height:255px !important;}
+.height260 { height:260px !important;}
+.height270 { height:270px !important;}
+.height280 { height:280px !important;}
+.height290 { height:290px !important;}
+.height300 { height:300px !important;}
+.height310 { height:310px !important;}
+.height320 { height:320px !important;}
+.height330 { height:330px !important;}
+.height340 { height:340px !important;}
+.height350 { height:350px !important;}
+.height360 { height:360px !important;}
+.height370 { height:370px !important;}
+.height380 { height:380px !important;}
+.height390 { height:390px !important;}
+.height400 { height:400px !important;}
+.height410 { height:410px !important;}
+.height420 { height:420px !important;}
+.height430 { height:430px !important;}
+.height440 { height:440px !important;}
+.height450 { height:450px !important;}
+.height460 { height:460px !important;}
+.height470 { height:470px !important;}
+.height480 { height:480px !important;}
+.height490 { height:490px !important;}
+.height500 { height:500px !important;}
+.height510 { height:510px !important;}
+.height515 {height:515px !important;}
+.height520 { height:520px !important;}
+.height530 { height:530px !important;}
+.height540 { height:540px !important;}
+.height550 { height:550px !important;}
+.height560 { height:560px !important;}
+.height570 { height:570px !important;}
+.height580 { height:580px !important;}
+.height590 { height:590px !important;}
+.height600 { height:600px !important;}
+.height610 { height:610px !important;}
+.height620 { height:620px !important;}
+.height630 { height:630px !important;}
+.height640 { height:640px !important;}
+.height650 { height:650px !important;}
+.height660 { height:660px !important;}
+.height670 { height:670px !important;}
+.height680 { height:680px !important;}
+.height690 { height:690px !important;}
+.height700 { height:700px !important;}
+.height710 { height:710px !important;}
+.height720 { height:720px !important;}
+.height730 { height:730px !important;}
+.height740 { height:740px !important;}
+.height750 { height:750px !important;}
+.height760 { height:760px !important;}
+.height770 { height:770px !important;}
+.height780 { height:780px !important;}
+.height790 { height:790px !important;}
+.height800 { height:800px !important;}
+.height810 { height:810px !important;}
+.height820 { height:820px !important;}
+.height830 { height:830px !important;}
+.height840 { height:840px !important;}
+.height850 { height:850px !important;}
+.height860 { height:860px !important;}
+.height870 { height:870px !important;}
+.height880 { height:880px !important;}
+.height890 { height:890px !important;}
+.height900 { height:900px !important;}
+.height910 { height:910px !important;}
+.height920 { height:920px !important;}
+.height930 { height:930px !important;}
+.height940 { height:940px !important;}
+.height950 { height:950px !important;}
+.height960 { height:960px !important;}
+.height970 { height:970px !important;}
+.height980 { height:980px !important;}
+.height990 { height:990px !important;}
+.height1000 { height:1000px !important;}
+
+/*공간주기*/
+.space5 { clear:both; width:100%; height:5px !important;}
+.space10 { clear:both; width:100%; height:10px !important;}
+.space15 { clear:both; width:100%; height:15px !important;}
+.space20 { clear:both; width:100%; height:20px !important;}
+.space25 { clear:both; width:100%; height:25px !important;}
+.space30 { clear:both; width:100%; height:30px !important;}
+.space35 { clear:both; width:100%; height:35px !important;}
+.space40 { clear:both; width:100%; height:40px !important;}
+.space45 { clear:both; width:100%; height:45px !important;}
+.space50 { clear:both; width:100%; height:50px !important;}
+.space55 { clear:both; width:100%; height:55px !important;}
+.space60 { clear:both; width:100%; height:60px !important;}
+.space65 { clear:both; width:100%; height:65px !important;}
+.space70 { clear:both; width:100%; height:70px !important;}
+.space75 { clear:both; width:100%; height:75px !important;}
+.space80 { clear:both; width:100%; height:80px !important;}
+.space85 { clear:both; width:100%; height:85px !important;}
+.space90 { clear:both; width:100%; height:95px !important;}
+.space100 { clear:both; width:100%; height:100px !important;}
+.space110 { clear:both; width:100%; height:110px !important;}
+.space120 { clear:both; width:100%; height:120px !important;}
+.space130 { clear:both; width:100%; height:130px !important;}
+.space140 { clear:both; width:100%; height:140px !important;}
+.space150 { clear:both; width:100%; height:150px !important;}
+.space200 { clear:both; width:100%; height:200px !important;}
+.space250 { clear:both; width:100%; height:250px !important;}
+.space300 { clear:both; width:100%; height:300px !important;}
+.space350 { clear:both; width:100%; height:350px !important;}
+.space400 { clear:both; width:100%; height:400px !important;}
+.space450 { clear:both; width:100%; height:450px !important;}
+.space500 { clear:both; width:100%; height:500px !important;}
+
+/*마진top 설정*/
+.mt0 { margin-top:0px !important;}
+.mt1 { margin-top:1px !important;}
+.mt2 { margin-top:2px !important;}
+.mt3 { margin-top:3px !important;}
+.mt4 { margin-top:4px !important;}
+.mt5 { margin-top:5px !important;}
+.mt6 { margin-top:6px !important;}
+.mt7 { margin-top:7px !important;}
+.mt8 { margin-top:8px !important;}
+.mt9 { margin-top:9px !important;}
+.mt10 { margin-top:10px !important;}
+.mt15 { margin-top:15px !important;}
+.mt20 { margin-top:20px !important;}
+.mt25 { margin-top:25px !important;}
+.mt30 { margin-top:30px !important;}
+.mt35 { margin-top:35px !important;}
+.mt40 { margin-top:40px !important;}
+.mt45 { margin-top:45px !important;}
+.mt50 { margin-top:50px !important;}
+.mt55 { margin-top:55px !important;}
+.mt60 { margin-top:60px !important;}
+.mt65 { margin-top:65px !important;}
+.mt70 { margin-top:70px !important;}
+.mt75 { margin-top:75px !important;}
+.mt80 { margin-top:80px !important;}
+.mt85 { margin-top:85px !important;}
+.mt90 { margin-top:90px !important;}
+.mt95 { margin-top:95px !important;}
+.mt100 { margin-top:100px !important;}
+.mt150 { margin-top:150px !important;}
+.mt200 { margin-top:200px !important;}
+.mt250 { margin-top:250px !important;}
+.mt300 { margin-top:300px !important;}
+
+/*마진right 설정*/
+.mr0 { margin-right:0px !important;}
+.mr1 { margin-right:1px !important;}
+.mr2 { margin-right:2px !important;}
+.mr3 { margin-right:3px !important;}
+.mr4 { margin-right:4px !important;}
+.mr5 { margin-right:5px !important;}
+.mr6 { margin-right:6px !important;}
+.mr7 { margin-right:7px !important;}
+.mr8 { margin-right:8px !important;}
+.mr9 { margin-right:9px !important;}
+.mr10 { margin-right:10px !important;}
+.mr12 { margin-right:12px !important;}
+.mr15 { margin-right:15px !important;}
+.mr20 { margin-right:20px !important;}
+.mr25 { margin-right:25px !important;}
+.mr30 { margin-right:30px !important;}
+.mr35 { margin-right:35px !important;}
+.mr40 { margin-right:40px !important;}
+.mr45 { margin-right:45px !important;}
+.mr46 { margin-right:46px !important;}
+.mr50 { margin-right:50px !important;}
+.mr55 { margin-right:55px !important;}
+.mr60 { margin-right:60px !important;}
+.mr65 { margin-right:65px !important;}
+.mr70 { margin-right:70px !important;}
+.mr75 { margin-right:75px !important;}
+.mr80 { margin-right:80px !important;}
+.mr85 { margin-right:85px !important;}
+.mr90 { margin-right:90px !important;}
+.mr95 { margin-right:95px !important;}
+.mr100 { margin-right:100px !important;}
+.mr150 { margin-right:150px !important;}
+.mr200 { margin-right:200px !important;}
+.mr250 { margin-right:250px !important;}
+.mr300 { margin-right:300px !important;}
+
+
+/*마진bottm 설정*/
+.mb0 { margin-bottom:0px !important;}
+.mb1 { margin-bottom:1px !important;}
+.mb2 { margin-bottom:2px !important;}
+.mb3 { margin-bottom:3px !important;}
+.mb4 { margin-bottom:4px !important;}
+.mb5 { margin-bottom:5px !important;}
+.mb6 { margin-bottom:6px !important;}
+.mb7 { margin-bottom:7px !important;}
+.mb8 { margin-bottom:8px !important;}
+.mb9 { margin-bottom:9px !important;}
+.mb10 { margin-bottom:10px !important;}
+.mb15 { margin-bottom:15px !important;}
+.mb20 { margin-bottom:20px !important;}
+.mb25 { margin-bottom:25px !important;}
+.mb30 { margin-bottom:30px !important;}
+.mb35 { margin-bottom:35px !important;}
+.mb40 { margin-bottom:40px !important;}
+.mb45 { margin-bottom:45px !important;}
+.mb50 { margin-bottom:50px !important;}
+.mb55 { margin-bottom:55px !important;}
+.mb60 { margin-bottom:60px !important;}
+.mb65 { margin-bottom:65px !important;}
+.mb70 { margin-bottom:70px !important;}
+.mb75 { margin-bottom:75px !important;}
+.mb80 { margin-bottom:80px !important;}
+.mb85 { margin-bottom:85px !important;}
+.mb90 { margin-bottom:90px !important;}
+.mb95 { margin-bottom:95px !important;}
+.mb100 { margin-bottom:100px !important;}
+.mb150 { margin-bottom:150px !important;}
+.mb200 { margin-bottom:200px !important;}
+.mb250 { margin-bottom:250px !important;}
+.mb300 { margin-bottom:300px !important;}
+
+/*마진left 설정*/
+.ml0 { margin-left:0px !important;}
+.ml1 { margin-left:1px !important;}
+.ml2 { margin-left:2px !important;}
+.ml3 { margin-left:3px !important;}
+.ml4 { margin-left:4px !important;}
+.ml5 { margin-left:5px !important;}
+.ml6 { margin-left:6px !important;}
+.ml7 { margin-left:7px !important;}
+.ml8 { margin-left:8px !important;}
+.ml9 { margin-left:9px !important;}
+.ml10 { margin-left:10px !important;}
+.ml15 { margin-left:15px !important;}
+.ml20 { margin-left:20px !important;}
+.ml25 { margin-left:25px !important;}
+.ml30 { margin-left:30px !important;}
+.ml35 { margin-left:35px !important;}
+.ml40 { margin-left:40px !important;}
+.ml45 { margin-left:45px !important;}
+.ml50 { margin-left:50px !important;}
+.ml55 { margin-left:55px !important;}
+.ml60 { margin-left:60px !important;}
+.ml65 { margin-left:65px !important;}
+.ml70 { margin-left:70px !important;}
+.ml75 { margin-left:75px !important;}
+.ml80 { margin-left:80px !important;}
+.ml85 { margin-left:85px !important;}
+.ml90 { margin-left:90px !important;}
+.ml95 { margin-left:95px !important;}
+.ml100 { margin-left:100px !important;}
+.ml116{ margin-left:116px !important;}
+.ml150 { margin-left:150px !important;}
+.ml200 { margin-left:200px !important;}
+.ml250 { margin-left:250px !important;}
+.ml300 { margin-left:300px !important;}
+
+/*padding*/
+.pd0 { padding:0px !important; box-sizing:border-box; }
+.pd1 { padding:1px !important; box-sizing:border-box; }
+.pd2 { padding:2px !important; box-sizing:border-box; }
+.pd3 { padding:3px !important; box-sizing:border-box; }
+.pd4 { padding:4px !important; box-sizing:border-box; }
+.pd5 { padding:5px !important; box-sizing:border-box; }
+.pd6 { padding:6px !important; box-sizing:border-box; }
+.pd7 { padding:7px !important; box-sizing:border-box; }
+.pd8 { padding:8px !important; box-sizing:border-box; }
+.pd9 { padding:9px !important; box-sizing:border-box; }
+.pd10 { padding:10px !important; box-sizing:border-box; }
+.pd15 { padding:15px !important; box-sizing:border-box; }
+.pd20 { padding:20px !important; box-sizing:border-box; }
+.pd25 { padding:25px !important; box-sizing:border-box; }
+.pd30 { padding:30px !important; box-sizing:border-box; }
+
+/*padding top 설정*/
+.pt0 { padding-top:0px !important;}
+.pt1 { padding-top:1px !important;}
+.pt2 { padding-top:2px !important;}
+.pt3 { padding-top:3px !important;}
+.pt4 { padding-top:4px !important;}
+.pt5 { padding-top:5px !important;}
+.pt6 { padding-top:6px !important;}
+.pt7 { padding-top:7px !important;}
+.pt8 { padding-top:8px !important;}
+.pt9 { padding-top:9px !important;}
+.pt10 { padding-top:10px !important;}
+.pt15 { padding-top:15px !important;}
+.pt20 { padding-top:20px !important;}
+.pt25 { padding-top:25px !important;}
+.pt30 { padding-top:30px !important;}
+.pt35 { padding-top:35px !important;}
+.pt40 { padding-top:40px !important;}
+.pt45 { padding-top:45px !important;}
+.pt50 { padding-top:50px !important;}
+.pt55 { padding-top:55px !important;}
+.pt60 { padding-top:60px !important;}
+.pt65 { padding-top:65px !important;}
+.pt70 { padding-top:70px !important;}
+.pt75 { padding-top:75px !important;}
+.pt80 { padding-top:80px !important;}
+.pt85 { padding-top:85px !important;}
+.pt90 { padding-top:90px !important;}
+.pt95 { padding-top:95px !important;}
+.pt100 { padding-top:100px !important;}
+.pt150 { padding-top:150px !important;}
+.pt200 { padding-top:200px !important;}
+.pt250 { padding-top:250px !important;}
+.pt300 { padding-top:300px !important;}
+
+/*padding right 설정*/
+.pr0 { padding-right:0px !important;}
+.pr1 { padding-right:1px !important;}
+.pr2 { padding-right:2px !important;}
+.pr3 { padding-right:3px !important;}
+.pr4 { padding-right:4px !important;}
+.pr5 { padding-right:5px !important;}
+.pr6 { padding-right:6px !important;}
+.pr7 { padding-right:7px !important;}
+.pr8 { padding-right:8px !important;}
+.pr9 { padding-right:9px !important;}
+.pr10 { padding-right:10px !important;}
+.pr15 { padding-right:15px !important;}
+.pr20 { padding-right:20px !important;}
+.pr25 { padding-right:25px !important;}
+.pr30 { padding-right:30px !important;}
+.pr35 { padding-right:35px !important;}
+.pr40 { padding-right:40px !important;}
+.pr45 { padding-right:45px !important;}
+.pr50 { padding-right:50px !important;}
+.pr55 { padding-right:55px !important;}
+.pr60 { padding-right:60px !important;}
+.pr65 { padding-right:65px !important;}
+.pr70 { padding-right:70px !important;}
+.pr75 { padding-right:75px !important;}
+.pr80 { padding-right:80px !important;}
+.pr85 { padding-right:85px !important;}
+.pr90 { padding-right:90px !important;}
+.pr95 { padding-right:95px !important;}
+.pr100 { padding-right:100px !important;}
+.pr150 { padding-right:150px !important;}
+.pr200 { padding-right:200px !important;}
+.pr250 { padding-right:250px !important;}
+.pr300 { padding-right:300px !important;}
+
+
+/*padding bottm 설정*/
+.pb0 { padding-bottom:0px !important;}
+.pb1 { padding-bottom:1px !important;}
+.pb2 { padding-bottom:2px !important;}
+.pb3 { padding-bottom:3px !important;}
+.pb4 { padding-bottom:4px !important;}
+.pb5 { padding-bottom:5px !important;}
+.pb6 { padding-bottom:6px !important;}
+.pb7 { padding-bottom:7px !important;}
+.pb8 { padding-bottom:8px !important;}
+.pb9 { padding-bottom:9px !important;}
+.pb10 { padding-bottom:10px !important;}
+.pb13 { padding-bottom:13px !important;}
+.pb15 { padding-bottom:15px !important;}
+.pb20 { padding-bottom:20px !important;}
+.pb25 { padding-bottom:25px !important;}
+.pb30 { padding-bottom:30px !important;}
+.pb35 { padding-bottom:35px !important;}
+.pb40 { padding-bottom:40px !important;}
+.pb45 { padding-bottom:45px !important;}
+.pb50 { padding-bottom:50px !important;}
+.pb55 { padding-bottom:55px !important;}
+.pb60 { padding-bottom:60px !important;}
+.pb65 { padding-bottom:65px !important;}
+.pb70 { padding-bottom:70px !important;}
+.pb75 { padding-bottom:75px !important;}
+.pb80 { padding-bottom:80px !important;}
+.pb85 { padding-bottom:85px !important;}
+.pb90 { padding-bottom:90px !important;}
+.pb95 { padding-bottom:95px !important;}
+.pb100 { padding-bottom:100px !important;}
+.pb150 { padding-bottom:150px !important;}
+.pb200 { padding-bottom:200px !important;}
+.pb250 { padding-bottom:250px !important;}
+.pb300 { padding-bottom:300px !important;}
+
+/*padding left 설정*/
+.pl0 { padding-left:0px !important;}
+.pl1 { padding-left:1px !important;}
+.pl2 { padding-left:2px !important;}
+.pl3 { padding-left:3px !important;}
+.pl4 { padding-left:4px !important;}
+.pl5 { padding-left:5px !important;}
+.pl6 { padding-left:6px !important;}
+.pl7 { padding-left:7px !important;}
+.pl8 { padding-left:8px !important;}
+.pl9 { padding-left:9px !important;}
+.pl10 { padding-left:10px !important;}
+.pl15 { padding-left:15px !important;}
+.pl20 { padding-left:20px !important;}
+.pl25 { padding-left:25px !important;}
+.pl30 { padding-left:30px !important;}
+.pl35 { padding-left:35px !important;}
+.pl40 { padding-left:40px !important;}
+.pl45 { padding-left:45px !important;}
+.pl50 { padding-left:50px !important;}
+.pl55 { padding-left:55px !important;}
+.pl60 { padding-left:60px !important;}
+.pl65 { padding-left:65px !important;}
+.pl70 { padding-left:70px !important;}
+.pl75 { padding-left:75px !important;}
+.pl80 { padding-left:80px !important;}
+.pl85 { padding-left:85px !important;}
+.pl90 { padding-left:90px !important;}
+.pl95 { padding-left:95px !important;}
+.pl100 { padding-left:100px !important;}
+.pl150 { padding-left:150px !important;}
+.pl200 { padding-left:200px !important;}
+.pl250 { padding-left:250px !important;}
+.pl300 { padding-left:300px !important;}
+
+/*line-heihgt 설정*/
+.lh10p { line-height:10% !important; }
+.lh20p { line-height:20% !important; }
+.lh30p { line-height:30% !important; }
+.lh38 { line-height:38px !important; }
+.lh40p { line-height:40% !important; }
+.lh50p { line-height:50% !important; }
+.lh60p { line-height:60% !important; }
+.lh70p { line-height:70% !important; }
+.lh80p { line-height:80% !important; }
+.lh90p { line-height:90% !important; }
+.lh100p { line-height:100% !important; }
+
+.lh0 { line-height:0 !important; }
+.lh1 { line-height:1em !important; }
+.lh1_1 { line-height:1.1em !important; }
+.lh1_2 { line-height:1.2em !important; }
+.lh1_3 { line-height:1.3em !important; }
+.lh1_4 { line-height:1.4em !important; }
+.lh1_5 { line-height:1.5em !important; }
+.lh1_6 { line-height:1.6em !important; }
+.lh1_7 { line-height:1.7em !important; }
+.lh1_8 { line-height:1.8em !important; }
+.lh1_9 { line-height:1.9em !important; }
+.lh2 { line-height:2em !important; }
+
+.lh20 { line-height:20px !important; }
+.lh24 { line-height:24px !important; }
+.lh25 { line-height:25px !important; }
+.lh26 { line-height:26px !important; }
+.lh29 { line-height:29px !important; }
+.lh30 { line-height:30px !important; }
+.lh32 { line-height:32px !important; }
+.lh35 { line-height:35px !important; }
+.lh40 { line-height:40px !important; }
+.lh45 { line-height:45px !important; }
+.lh50 { line-height:50px !important; }
+.lh55 { line-height:55px !important; }
+.lh56 { line-height:56px !important; }
+.lh58 { line-height:58px !important; }
+.lh60 { line-height:60px !important; }
+.lh65 { line-height:65px !important; }
+.lh70 { line-height:70px !important; }
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/css/admin/style.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/css/admin/board.css
===================================================================
--- base3.10/src/main/webapp/css/admin/board.css (nonexistent)
+++ base3.10/src/main/webapp/css/admin/board.css (revision 7)
@@ -0,0 +1,578 @@
+@charset "UTF-8";
+/* CSS Document */
+
+table a { color:#333; }
+table a:hover { text-decoration:underline; }
+button { cursor:pointer; }
+
+/*메일첨부*/
+#tagList { margin-top:5px; }
+#tagList li { float:none; margin:5px 5px 0 0; display:inline-block; background:#f1f1f1; border-radius:5px; padding:10px; box-sizing:border-box; }
+#tagList li .inputText { background:none !important; }
+#tagInput { width:100% !important; }
+#inputEmailAddr li, #emailAddr li { }
+
+/*게시판 list*/
+.table_list { width:100%; border-top:2px solid #224173; font-size:14px; border-collapse:initial; table-layout:fixed; }
+.table_list th { background:#f6f8ff; color:#224173; border-bottom:1px solid #c0cdf7; text-align:center; padding:15px 0; font-weight:600; box-sizing:border-box; vertical-align:middle; }
+.table_list td { background:#fff; border-bottom:1px solid #d5dfff; text-align:center; padding:15px 10px; line-height:1.3em; box-sizing:border-box; vertical-align:middle; }
+.table_list td:first-child, .table_list th:first-child { border-left:none; }
+.table_list td:last-child, .table_list th:last-child { border-right:none; padding-left:10px; padding-right:10px; }
+.table_list tr.important td { background:#f9f9f9 !important; font-weight:600; }
+/*.table_list tr:hover td { background:#f9f9f9;}*/
+.table_list tr.notice td { background:#f6f8ff; border-bottom:1px solid #c0cdf7; }
+.table_list tr td.secret { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+.table_list tr td.secret a { width:auto; max-width:calc(100% - 30px); }
+.icon_secret { text-indent:-50000px; width:20px; height:20px; margin-left:7px; display:inline-block; background:url(../../images/custom/icon_lock.svg) 50% 50% no-repeat; background-size:11px; }
+.table_list tr.emphasis td { background:#ceeef6; font-size:13px; font-weight:600; }
+.table_list td a { font-weight:600; width:100%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; display:inline-block;}
+.table_list td p { width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: inline-block; }
+.table_list td .dot { font-weight:600; width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: inline-block;}
+.table_list td a.calc10 { width: calc(100% - 10px); float:left; }
+.score { padding:0px 7px; font-weight:400; border-radius:5px; background:#0081c8; margin-left:5px; color:#fff; font-size:0.8em; display:inline-block; transform:translateY(-2px); }
+.exp.filenote { font-size:0.9em; margin-top:5px; display:inline-block; }
+
+/*게시판write style1*/
+.table_write { width:100%; font-size:14px; border-top:2px solid #224173; border-collapse:initial; table-layout:fixed;}
+.table_write th { background:#f6f8ff; color:#224173; border-bottom:1px solid #d5dfff; text-align:center; padding:13px 0; font-weight:600; box-sizing:border-box; vertical-align:middle; }
+.table_write td { background:#fff; border-bottom:1px solid #d5dfff; padding:8px 10px; box-sizing:border-box; vertical-align:middle; }
+.table_write tr.important td { background:#f9f9f9 !important; }
+.table_write tr:hover td { /* background:#f9f9f9; */ }
+.table_write tr:first-child { }
+
+/*게시판view*/
+.table_view { width:100%; border-top:2px solid #224173; font-size:14px; table-layout:fixed; }
+.table_view th { background:#f6f8ff; color:#224173; border-bottom:1px solid #ced8e8; font-weight:600; text-align:center; padding:13px 10px; box-sizing:border-box; vertical-align:middle; }
+.table_view td { background:#fff; border-bottom:1px solid #ced8e8; text-align:left; padding:13px 10px; box-sizing:border-box; vertical-align:middle; }
+.table_view .board_file th, .table_view .board_file td { font-size:13px; border-top:1px solid #e4e4e4; padding:10px;}
+.table_view td.border_bottom { border-bottom:1px solid #e4e4e4; }
+.table_view td.board_contents td { border:1px solid #ccc !important; }
+
+/*basic write*/
+.board_write { width:100%; border-top:1px solid #666; border-bottom: 1px solid #ededed; table-layout:fixed; }
+.board_write > ul > li { width:100%; border-bottom: 1px solid #ededed; padding:25px 0; position:relative; transition:all 0.3s;align-items: center;}
+.board_write.intitle > ul > li:last-child, .board_write > ul > li:last-child { border-bottom:none; }
+.board_write > ul > li::after { content:''; display:block; clear:both; }
+.board_write .item_text .board_title { display:block; font-weight:500; font-size:1.3em; margin-bottom:15px; color:#000; letter-spacing: -.5px; }
+.board_write .item_text { width:100%; }
+.board_write .board_label { margin-bottom:15px; display:block; font-size:1.1em; }
+.board_write.auto { table-layout:auto; }
+
+/*label left board write*/
+.board_write.intitle { width:100%; border-top:2px solid #333; border-bottom: 1px solid #ededed; padding:0 0; }
+.board_write.intitle > ul > li { width:100%; padding:15px 0; min-height:65px; position:relative; transition:all 0.3s; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; }
+.board_write.intitle > ul > li::after { content:''; display:block; clear:both; }
+.board_write.intitle .board_label { width:200px; margin-bottom:0; display:block; font-size:1.1em; }
+.board_write.intitle .input_wrap { width:calc(100% - 200px); }
+
+.board_label_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:center; align-items: center; }
+.board_label_wrap ul { margin-left:10px;display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; border:1px solid #ccc; justify-content: flex-start; border-radius:5px; overflow:hidden; }
+.board_label_wrap ul li { border-right:1px solid #ccc; padding:2px 8px; font-size:0.9em; cursor: pointer;}
+.board_label_wrap ul li.active { background:#143b84; color:#fff; }
+.board_label_wrap ul li:last-child { border-right:none; }
+.board_label_wrap .board_label { width:auto; }
+.input_show { display:block; }
+.select_show { display:none; }
+
+.input_wrap .option { display:inline-block; }
+
+/*댓글 리스트*/
+.reply_list { width:100%; border-top:2px solid #224173; font-size:14px; border-collapse:initial; table-layout:fixed; }
+.reply_list th { background:#f6f8ff; color:#224173; border-bottom:1px solid #d5dfff; text-align:center; padding:15px 0; font-weight:600; box-sizing:border-box; vertical-align:middle; }
+.reply_list td { background:#fff; border-bottom:1px solid #d5dfff; text-align:left; padding:15px 10px; box-sizing:border-box; vertical-align:middle; position:relative; }
+.reply_list td:first-child, .reply_list th:first-child { border-left:none; }
+.reply_list td:last-child, .reply_list th:last-child { border-right:none; padding-left:10px; padding-right:10px; }
+.reply_list .btn_wrap { position:absolute; top:15px; right:15px; }
+.reply_list .btn_wrap button { border:none; box-shadow:none; }
+.reply_list .text { margin-top:10px; }
+.reply_list .by { font-size:.9em; margin-top:0; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; align-items:center;flex-wrap: wrap;}
+.reply_list .by strong { display:inline-block; margin-right:10px; font-weight:500; }
+.reply_list .by em { color:#999; font-size:.9em; margin-right:10px; border:none; }
+
+.reply_list .reply_write { line-height:0; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; }
+.reply_list .reply_write .textArea { width:calc(100% - 100px); height:100px; }
+.reply_list .reply_write .textArea:hover { border:1px solid #ccc; box-shadow:none; }
+.reply_list .reply_write button { width:100px; height:100px; }
+
+/*narrow board write*/
+.board_write.narrow { width:100%; border-top:none; border-bottom:1px solid #ededed; padding:0 0; }
+.board_write.narrow > ul > li { width:100%; padding:15px 0; position:relative; transition:all 0.3s; }
+.board_write.narrow > ul > li::after { content:''; display:block; clear:both; }
+.board_write.narrow .board_label { width:100%; margin-bottom:5px; display:block; font-size:1em; }
+.board_write.narrow .input_wrap { width:100%; }
+
+.table_write.th_s th, .table_write.th_s td { font-size:0.9em; }
+
+/*포털용 input 스타일*/
+.table_write td .inputText, .selectText, .table_write td .inputFile { font-size:13px; font-weight:400; box-sizing:border-box; padding:0 10px; display:inline-block; background-color:#fff; } /* 익스 9부터 적용가능, 아이폰 둥근 모서리 설정빼기 */
+.table_write td textarea { font-size:13px; font-weight:400; box-sizing:border-box; padding:10px; display:inline-block; background-color:#fff; }
+.table_write .btn_s { height:35px; }
+.inline { width:100%; position:relative; }
+.inline button { float:left; }
+.inline input { float:left; }
+.inline::after { content:''; display:block; clear:both; }
+
+.state1, .state2, .state3 { display:inline-block; padding:5px 7px; line-height:1em; border:1px solid #ccc; font-size:.9em; border-radius:3px; }
+.state1 { border-color:#236fca; color:#236fca; background:#e8eefd; } /*승인*/
+.state2 { border-color:#666; color:#666; background:#f3f3f3; } /*진행중*/
+.state3 { border-color:#e6624a; color:#e6624a; background:#fff0f0; } /*반려*/
+
+/*제목*/
+.table_write tr:first-child td input#notice { margin-top:10px; margin-left:10px; }
+.table_write tr td .file_up label { padding:6px 25px 6px 10px; height:35px; }
+
+/*.reply_wrap { padding-top:25px; margin-top:30px; border-top:1px solid #ddd; }
+.reply_write_wrap { border-radius:5px; transition:all 0.3s; border:1px solid #ccc; box-sizing:border-box; }
+.reply_write_wrap:hover { border-color:#999; }
+.reply_write_wrap ul > li { padding:5px; border-bottom:1px solid #ededed; }
+.reply_write_wrap ul > li .textArea { width:100%; height:130px; border:none; border-radius:5px 5px 0 0; }
+.reply_write_wrap ul > li button { width:100px; height:42px; background:#0c5bba; color:#fff; }
+.reply_write_wrap ul > li:last-child { padding:10px; border-bottom:0; margin-bottom:0; }
+.reply_write_wrap ul > li.alignR { padding:10px; }*/
+
+.board_view .reply_wrap { background:#f9f9f9; padding:20px; border-bottom:1px solid #ededed; }
+.reply_wrap { padding:20px 0; transition:all 0.3s; }
+.estimate_reply { padding:20px 0; }
+.reply_wrap .reply_list_title { padding:0 0px 15px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; position:relative; align-items:center; }
+.reply_wrap .reply_list_title strong { }
+
+.reply_wrap.active { background:#f1f1f1; border-top:1px solid #ddd;}
+
+.reply_wrap .pagination { width:100%; margin:30px 0 0; text-align:center; }
+
+.reply_list_wrap { padding:0px; }
+.reply_list_wrap ul { }
+.reply_list_wrap > ul > li { background:#fff; transition:all 0.3s; border:1px solid #ddd; margin-bottom:10px; border-radius:5px; position:relative; padding:15px; box-sizing:border-box; }
+.reply_list_wrap ul li:last-child { margin-bottom:0; }
+.reply_list_wrap ul li:hover { border-color:#666; }
+.reply_list_wrap ul li .by { margin-bottom:15px; font-size:1.1em; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; align-items:center; flex-wrap: wrap; }
+.reply_list_wrap ul li .by strong { font-size:13px; font-weight:600; display:inline-block; color:#333; }
+.reply_list_wrap ul li .by strong::after { width:3px; height:3px; background:#999; content:''; margin:0 10px 4px; display:inline-block; border-radius:10px; }
+.reply_list_wrap ul li .by em { font-size:13px; margin-right:10px; border:none; color:#999; }
+.reply_list_wrap ul li .text { margin-top:10px; }
+.reply_list_wrap ul li .by button { font-size:0.8em;border:none; }
+.reply_list_wrap ul li .by button:hover { box-shadow:none; }
+.reply_list_wrap ul li .by .btn_wrap { position:absolute; top:15px; right:15px; }
+.reply_list_wrap ul li .text { height:auto; max-height:none; }
+.reply_list_wrap ul li .clickmore { display:none; }
+.reply_list_wrap ul li.nothing { padding:20px !important; text-align:center; color:#999; background:#fff; border-color:#e2e2e2;}
+.reply_list_wrap ul li.nothing:hover { border-color:#ddd; }
+.reply_list_wrap .page { width:100%; margin-top:25px; }
+
+/* .reply_list_wrap ul li.long .text { max-height:48px; overflow:hidden; position:relative;}
+.reply_list_wrap ul li.long .text::after { width:100%; height:50px; content:''; display:block; position:absolute; left:0; bottom:0; z-index:0;
+background: rgb(255,255,255);
+background: -moz-linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);
+background: -webkit-linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);
+background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,.8) 30%, rgba(255,255,255,0) 100%);}
+.reply_list_wrap ul li .text::after { display:none; }
+.reply_list_wrap ul li.long .clickmore { display:inline-block; position:absolute; bottom:20px; left:20px; z-index:1; }
+ */
+.reply_write_wrap { background:#fff; width:100%; border-radius:5px; transition:all 0.3s; border:1px solid #e2e2e2; box-sizing:border-box; margin-bottom:10px; }
+.reply_write_wrap:hover { border-color:#999; }
+.reply_write_wrap > ul > li:last-child { padding:6px; }
+.reply_write_wrap li::after { content:''; display:block; clear:both; }
+.reply_write_wrap li .textArea { width:100%; height:80px; border:none; border-radius:5px; background:transparent; }
+.reply_write_wrap li .textArea:hover { box-shadow:none; }
+.reply_write_wrap li .textArea[disabled]:hover { border:none; }
+.reply_write_wrap li .wby { margin:10px; display:inline-block; font-size:0.9em; }
+.reply_write_wrap li button { width:70px; height:35px; }
+.reply_write_wrap li:last-child { padding:6px; border-bottom:0; margin-bottom:0; border-top:1px solid #e4e4e4; }
+.reply_write_wrap li.alignR { padding:10px; }
+.reply_write_wrap .writer .text_show { float:left; margin-right:5px; }
+.reply_write_wrap li ul li { border-bottom:none; }
+.reply_write_wrap li ul li:last-child { }
+.textarea_wrap { line-height: 0; }
+.reply_write_wrap .text_show .textArea + label { transition:opacity 0s; }
+.reply_write_wrap .text_show.focus .textArea + label { top:20px; transform:translateY(-50%); opacity:0; }
+
+.text_show { position:relative; }
+.text_show label { position:absolute; top:16px; left:8px; transition:all 0.3s; line-height:1em; pointer-events:none; color:#999; font-size:0.9em; padding:0 5px; }
+.text_show .inputText + label { top:50%; transform:translateY(-50%); }
+.text_show.focus label { background:#fff; color:#000; top:-5px; font-size:0.7em; }
+.text_show.focus .inputText + label { transform:translateY(0); }
+
+a.btn_s { cursor:pointer; padding:5px 10px; border-radius:2px; letter-spacing:0; transition: all .2s; border:1px solid #ccc; background:#fff; display:inline-block; }
+a.btn_s:hover { text-decoration:none; border:1px solid #666; box-shadow:0 0px 3px rgba(173,197,218,0.8); }
+
+.reply_write_wrap .grade { display:block; }
+.grade::after { content:''; display:block; clear:both; }
+.grade_wrap .grade { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; padding:5px 10px 5px; }
+.grade_wrap .grade li { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; text-align:center;margin-right:30px; padding-bottom:0 !important; margin-bottom:0 !important; cursor:pointer; }
+.grade_wrap .grade li:last-child { margin-right:0 !important; }
+/*.grade_wrap .grade li.opaque { opacity:0.5; margin-bottom:0; }
+.grade_wrap .grade li.opaque.active { opacity:1; }*/
+.grade_wrap .grade li input[type='radio']{left:0; top:0; width:0px; height:0px; opacity:0; margin:0; }
+.grade_wrap .grade li input[type='radio'] + label { opacity:0.5; cursor:pointer; font-size:1em; font-weight:400; color:#333; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-content: space-between; flex-direction:row; justify-content:center; align-items: center; min-width:60px;}
+.grade_wrap .grade li input[type='radio'] + label::after { content:''; display:none; width:40px; height:40px; left:5px; top:8px; border-radius:40px; }
+.grade_wrap .grade li input[type='radio'] + label::before { border:none; content:''; display:inline-block; width:20px; height:20px; margin-top:0; border-radius:40px; margin-right:10px;}
+.grade_wrap .grade li:nth-child(1) input[type='radio'] + label::before { background:url(../../images/custom/smile1.svg) 50% 50% no-repeat; background-size:contain; }
+.grade_wrap .grade li:nth-child(2) input[type='radio'] + label::before { background:url(../../images/custom/smile2.svg) 50% 50% no-repeat; background-size:contain; }
+.grade_wrap .grade li:nth-child(3) input[type='radio'] + label::before { background:url(../../images/custom/smile3.svg) 50% 50% no-repeat; background-size:contain; }
+.grade_wrap .grade li:nth-child(4) input[type='radio'] + label::before { background:url(../../images/custom/smile4.svg) 50% 50% no-repeat; background-size:contain; }
+.grade_wrap .grade li:nth-child(5) input[type='radio'] + label::before { background:url(../../images/custom/smile5.svg) 50% 50% no-repeat; background-size:contain; }
+.grade_wrap .grade li input[type='radio']:checked + label { opacity:1; }
+.grade_wrap .textarea_wrap .textarea { border:none; }
+
+/*pagenation*/
+
+.page { display:inline-block; margin-top:13px; text-align:center; }
+.page ul { display:inline-block; text-align:center; }
+.page ul li { margin:0 3px; display:inline-block; }
+.page ul li a { color:#666; border-radius: 50px; padding:3px 10px; display: inline-block;}
+.page ul li a:hover { color:#333; }
+.page ul li.active a { background:#f0f1fb; color:#666; }
+
+/*datepicker */
+.datepicker_wrap { float:left; border:1px solid #ccc; border-radius:2px; transition:all 0.5s; }
+.datepicker_wrap .inputText { height:33px !important; }
+.datepicker { float:left; border:0 !important; border-radius:0 !important; }
+.datepicker:hover { box-shadow:none !important; }
+.datepick { float:left; margin:0 10px; line-height:35px; font-size:1.5em; }
+.icon_calendar { float:left; width:35px; height:35px; border-left:none; border-radius:0; display:inline-block; background:url(../../images/admin/icon_calendar.svg) 50% 50% no-repeat; background-size:15px; }
+.datepicker_wrap:hover { border:1px solid #666;box-shadow:0 0px 3px rgba(173,197,218,0.8); }
+
+.tab_wrap .tabwexcel { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; border-bottom:1px solid #333; margin-bottom:20px; }
+.tab_wrap .tabwexcel .tabs { border-bottom:none; margin-bottom:0; width:auto; }
+
+/*기존 탭*/
+.tabs { width:100%; border-bottom:1px solid #666; margin-bottom:20px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.tabs li { display:inline-block; font-weight:600; border-right:0; border-bottom:0; box-sizing:border-box; }
+.tabs li a { padding:0 30px; line-height:43px; box-sizing:border-box; display:block; border-radius:5px 5px 0 0; background:#f4f4f4; color:#767676; border:1px solid #ededed; border-bottom:none; }
+.tabs li.active { height:44px; }
+.tabs li.active a { border-color:#666; background:#fff; color:#333; height:45px; }
+.tabs li:last-child { }
+
+/*탭 이동*/
+.tab_link { width:100%; border-bottom:1px solid #666; margin-bottom:20px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.tab_link li { display:inline-block; font-weight:600; border-right:0; border-bottom:0; box-sizing:border-box; }
+.tab_link li a { padding:0 30px; line-height:43px; box-sizing:border-box; display:block; border-radius:5px 5px 0 0; background:#f4f4f4; color:#767676; border:1px solid #ededed; border-bottom:none; }
+.tab_link li.active { height:44px; }
+.tab_link li.active a { border-color:#666; background:#fff; color:#333; height:45px; }
+.tab_link li:last-child { }
+
+.tab_m { width:100%; border-bottom:1px solid #666; margin-bottom:50px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.tab_m li { display:inline-block; font-weight:600; border-right:0; border-bottom:0; box-sizing:border-box; }
+.tab_m li a { padding:0 30px; line-height:43px; font-size:1.2em; box-sizing:border-box; display:block; border-radius:5px 5px 0 0; background:#f4f4f4; color:#767676; border:1px solid #ededed; border-bottom:none; }
+.tab_m li.active { height:55px; }
+.tab_m li.active a { border-color:#666; background:#fff; color:#333; height:56px; }
+.tab_m li:last-child { }
+
+.tabL { width:100%; border-bottom:1px solid #666; margin-bottom:50px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.tabL li { display:inline-block; font-weight:600; border-right:0; border-bottom:0; box-sizing:border-box; }
+.tabL li a { padding:0 30px; height:45px; line-height:45px; font-size:1em; box-sizing:border-box; display:block; border-radius:5px 5px 0 0; background:#f4f4f4; color:#767676; border:1px solid #ededed; border-bottom:none; }
+.tabL li.active { height:45px; }
+.tabL li.active a { border-color:#666; background:#fff; color:#333; height:46px; }
+.tabL li:last-child { }
+
+.array { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; align-items: center; }
+.array li { margin-right:20px; }
+.array li:last-child { margin-right:0; }
+.array.between { justify-content:space-between; }
+.array.between li { margin-right:10px; }
+.array.between li:last-child { margin-right:0; }
+
+.board_view .hashtag_wrap { margin-top:0; }
+.board_view .hashtag_wrap .hashtag a:hover, .board_view .hashtag_wrap .hashtag:hover::before { color:#0081c8; }
+
+.table_view .hashtag_wrap { margin-top:0; }
+.hashtag_wrap { margin-top:10px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; flex-wrap: wrap;}
+.hashtag { margin:0 5px 5px 0; border:1px solid #d7ebf7; background:#e5f1fb; cursor: default; color:#333; border-radius:30px; padding:5px 12px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+.hashtag::before { content:'#'; font-style:italic; display:inline-block; margin-right:3px; font-size:1.2em; }
+.hashtag .btn_delete { margin-left:10px; cursor: pointer; width:24px; height:24px; background-color:transparent !important; border:none;}
+.hashtag .btn_delete:hover { box-shadow:none; }
+
+.board_view .hashtag_wrap { margin-top:0; }
+.board_view .hashtag_wrap .hashtag:hover { border-color:#0081c8; background:#e5f1fb; color:#0081c8;}
+.board_view .hashtag_wrap .hashtag:hover a, .board_view .hashtag_wrap .hashtag:hover::before { color:#0081c8; }
+.board_view .hashtag_wrap .hashtag { padding:5px 20px; }
+
+
+/*새로운글,첨부파일 알림*/
+.title_info { margin-left:10px; }
+.title_info span { display:inline-block; float:left; text-transform: uppercase; border:1px solid #bbb; font-size:0.5em; line-height:1em; margin:0 2px; border-radius:30px; }
+.title_info .new { color:#fff; border-color:#007dc3; background:#007dc3; padding:2px 6px; height:20px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+.title_info .file { width:23px; height:23px; background:url(../../images/custom/icon_file.svg) 50% 50% no-repeat; background-size:13px; display:inline-block; color:#007dc3; font-size:0.6em; }
+.title_info .reply { height:23px; background:url(../../images/custom/icon_say.svg) 5px 50% no-repeat; background-size:13px; padding:5px 7px 5px 21px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center;}
+.title_info .secret { width:23px; height:23px; background:url(../../images/custom/icon_lock.svg) 50% 50% no-repeat; background-size:12px; display:inline-block; color:#007dc3; font-size:0.6em; }
+.title_info .besttc { background:url(../../images/custom/icon_besttc.svg) 7px 50% no-repeat; background-size:10px; display:inline-block; color:#ea8405; border-color:#eaae05; padding:5px 7px 5px 23px; }
+.title_info .besttc:hover { background-color:#fff; }
+
+.half_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.half { width:50%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items: flex-start; flex-direction: column; }
+.search_item ul { width:100%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.search_item ul li { margin-right:10px; width:33%; }
+.search_item ul li .selectText { width:100%; }
+.search_item ul li.liselected { width:auto; border:1px solid #ccc; padding:3px 20px; border-radius:50px; margin-right:5px; }
+.search_item ul li.liselected:last-child { margin-right:0; }
+
+.title_info .besttc { background:url(../../images/custom/icon_besttc.svg) 5px 50% no-repeat #ffd739; padding:5px 10px 5px 20px; border-radius:20px; border:none; background-size:10px; display:inline-block; color:#333; font-size:11px; text-indent:0; }
+.title_info .new { color:#fff; border-color:#007dc3; background:#007dc3; padding:5px 8px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+
+/*견적등록*/
+.input_wrap .estimate_wrap { margin-top:25px; }
+.estimate_wrap { margin-top:30px; }
+.estimate_wrap .btn_arrow_down { background-color:#fff; /*transform:translateY(25px);*/ }
+.estimate_paper { margin-top:20px; padding:30px; border:1px solid #e8e8e8; border-radius:5px; box-shadow:0 0 20px 0 rgba(0,0,0,0.1); }
+.estimate_wrap .estimate_paper { display:none; }
+
+.estimate_edit { height:600px; overflow:hidden; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex;justify-content:space-between; }
+.estimate_edit .nothing { padding: 20px 20px 20px !important; }
+
+.total_srch_wrap { width:calc(50% - 5px); border:1px solid #ccc; border-radius:10px; overflow:hidden; }
+.total_srch_wrap .tabcontainer { height:calc(100% - 45px); border-right:none; border-top:none; }
+.total_srch_wrap .tab_content { height:100%; }
+.total_srch_wrap .tabs { margin-top:5px; margin-bottom:0; border-bottom:1px solid #c3c3c3; }
+.total_srch_wrap .tabs li a { border-radius:0; border:none; background:#fff; }
+.total_srch_wrap .tabs li.active a { border-top:none; border-bottom:2px solid #007dc3; }
+
+.total_srch_top { width:100%; height:55px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; padding:10px 0; border-bottom:1px solid #ececec; }
+.total_srch_top ul { width:100%; padding:0 10px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; }
+.total_srch_top ul li { width:calc(50% - 40px); padding:0; }
+.total_srch_top ul li:first-child { width:70px; }
+.total_srch_top button, .total_srch_top select { width:100%; height:35px; padding:0 10px; }
+
+.total_srch { overflow-y:auto; height:calc(100% - 60px); padding:15px; width:100%; background:#f9f9f9; }
+.total_srch > ul > li { width:100%; background:#fff; padding:20px 15px 15px; border:1px solid #e6e6e6; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; overflow:hidden; justify-content:flex-start; align-items:flex-start; margin-bottom:10px; border-radius:10px; position:relative; transition:all 0.3s; }
+.total_srch > ul > li:hover { border-color:#666; box-shadow:0 0 10px 0 rgba(0,0,0,0.1); }
+.total_srch > ul > li:last-child { margin-bottom:0; }
+.total_srch > ul > li.nothing { padding:20px 0 !important; text-align:center; justify-content:center; }
+.total_srch > ul > li.nothing:hover { border-color:#ddd; box-shadow:none; background:#fff; }
+.total_srch .item_img { width:120px; height:70px; background-repeat:no-repeat; background-position:50% 50%; border-radius:5px; margin-right:20px; background-size:contain;}
+.total_srch .item_img.noimg { }
+.total_srch .item_img img { display:none; }
+.total_srch .item_text { width:calc(100% - 190px); display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex;flex-direction:column;}
+.total_srch .item_text .board_title { margin-bottom:10px; }
+.total_srch .item_text .board_title p { font-size:.8em; font-weight:600; width:100%; text-align:left; max-height:50px; }
+.total_srch .board_info { margin-bottom:3px; }
+.total_srch .board_info li { font-size:13px; font-weight:400; color:#333; letter-spacing:0;}
+.total_srch .est_cost { position:relative; transform:none; letter-spacing:0; font-size:13px; color:#888; font-weight:400; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+.total_srch .est_cost br { display:none; }
+.total_srch .est_cost em { display:none; }
+.total_srch .btn_plus { font-size:11px; transition:all 0.3s; position:absolute; background-size:12px; width:40px; height:100%; top:0; right:0;border:none; border-left:1px solid #ededed; border-radius:0 5px 5px 0; background-color:#fff; }
+.total_srch > ul > li:hover .btn_plus { }
+.total_srch .btn_plus:hover { box-shadow:none; background-color:#f1f1f1; border-left:1px solid #ccc; }
+
+.total_srch .item_text .board_title { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex;flex-direction:column; }
+.total_srch .item_text .board_title .title_info { margin-left:0; }
+.total_srch .title_info span { border:none; margin-right:3px; margin-bottom:10px;}
+.total_srch .title_info .new { background:#108ace; color:#fff; }
+.total_srch .title_info .besttc { }
+
+.est_selected_wrap { width:calc(50% - 5px); position:relative; border:1px solid #ccc; border-radius:10px; overflow:hidden; }
+.est_selected { overflow-y:auto; height:calc(100% - 60px); padding:20px; background:#f9f9f9; }
+.est_selected.write { height:calc(100% - 117px); }
+.est_selected li { border:1px solid #ddd; background:#fff; border-radius:10px; overflow:hidden; margin-bottom:10px; }
+.est_selected li.nothing { padding:20px 0 !important; text-align:center; border:none; background:none; color:#999; }
+.est_selected li.nothing:hover { border-color:#ddd; box-shadow:none; }
+.est_selected li:last-child { margin-bottom:0; }
+.est_selected li.active { border:1px solid #cacaca; box-shadow:0 0 10px 0 rgba(0,0,0,0.1); }
+
+.est_selected li .est_sel_title { width:100%; padding:15px; font-size:1em; font-weight:900; position:relative; display: block; cursor:pointer; background:#fff; color:#333; transition:all 0.3s; }
+.est_selected li .est_sel_title strong::after { width:10px; height:10px; content:''; margin:0 10px; display:inline-block; background:url(../../images/custom/arrow_right_fff.svg) 50% 50% no-repeat; background-size:contain; }
+.est_selected li .est_sel_title strong:last-child::after {display:none; }
+.est_selected li .est_sel_title:hover { color:#333; }
+
+.est_selected li .est_sel_title::after, .est_selected li .est_sel_title::before { content:''; position:absolute; top:50%; right:15px; display:inline-block; width:10px; height:2px; background:#333; transition:all 0.3s;}
+.est_selected li .est_sel_title::after { transform:translateY(-50%) rotate(90deg); }
+.est_selected li .est_sel_title::before { transform:translateY(-50%) rotate(0deg); }
+
+.est_selected li.active .est_sel_title { opacity:1; background:#193b6f; color:#fff; }
+.est_selected li.active .est_sel_title::after, .est_selected li.active .est_sel_title::before { background:#fff; }
+.est_selected li.active .est_sel_title::after { transform:translateY(-50%) rotate(0deg); background:url(../../images/custom/arrow_right_fff.svg) 50% 50% no-repeat; background-size:contain; }
+.est_selected li.active .est_sel_title::before { transform:translateY(-50%) rotate(0deg); }
+
+.est_sel_content_wrap { display:none; }
+.est_sel_content { border-top:1px solid #e6e6e6;}
+.est_sel_box { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; padding:15px; border-bottom:1px solid #e6e6e6; }
+.est_sel_box:last-child { margin-bottom:0; border-bottom:none; }
+.est_sel_box .title { width:calc(100% - 195px); display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; font-weight:600; }
+.est_sel_box .title p { width:100%; display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
+.num_hit { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; background:#fff; justify-content:space-between; flex-direction:row; border:1px solid #ccc; width:90px; border-radius:5px; overflow:hidden; }
+.num_hit .inputNum { width:35px; height:25px !important; float:left; border:none; text-align:center; }
+.num_hit button { width:25px; height:25px; border-radius:0 !important; border:none; padding:0; }
+.num_hit button:hover { box-shadow:none; background-color:#f1f1f1; }
+.btn_qnt_up { background:url(../../images/custom/icon_plus.svg) 50% 50% no-repeat #fff; background-size:40%; text-indent:-5000px; }
+.btn_qnt_down { background:url(../../images/custom/icon_minus.svg) 50% 50% no-repeat #fff; background-size:40%; text-indent:-5000px; }
+
+.est_sel_content .cost { width:110px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; justify-content:flex-end;}
+.est_sel_content .button { width:35px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; justify-content: flex-end;}
+.est_sel_content .button .btn_sq_s { width:25px; height:25px; border:none; }
+.est_sel_content .button .btn_sq_s:hover { box-shadow:none; }
+
+.add_up { padding:10px; border-top:1px solid #ececec; }
+.add_up ul li { margin-right:5px !important; }
+.add_up ul li:first-child { width:calc(100% - 280px); }
+.add_up ul li:last-child { min-width:65px; margin-right:0 !important; }
+.add_up ul li .inputText, .add_up ul li .btn_m { height:35px; }
+.est_sel_total { font-size:1.3em; width:100%; height:60px; padding:0 20px; background:#efefef; border-top:1px solid #e0e0e0; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; color:#333; align-items:center; }
+
+/*견적서보기*/
+.estimate_view { width:100%; background:#fff; padding:20px; border:1px solid #ddd; }
+.estimate_view > ul > li { margin-bottom:20px; padding-bottom:20px; border-bottom:1px dashed #d4d4d4; }
+.estimate_view > ul > li:last-child { margin-bottom:0; padding-bottom:0; border-bottom:none; }
+.estimate_view > ul > li:first-child { border-top:none; }
+.estimate_view .total { width:calc(100% + 20px); background:#f1f1f1; border:1px solid #e6e6e6; padding:20px; margin:0px -10px -10px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; border-radius:5px; justify-content: space-between; font-size:1.3em; font-weight:900; }
+.estimate_view .title { margin-bottom:10px; font-size:1.1em; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; align-items:center; }
+.estimate_view .title em.next { background:url(../../images/custom/arrow_right.svg) 50% 50% no-repeat; background-size:contain; text-indent:-50000px; display:inline-block; width:8px; height:8px; margin:0 7px; opacity:0.8; }
+.estimate_view .item ul { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: space-between; }
+.estimate_view .item ul li { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-end; padding:5px 0; width:200px; }
+.estimate_view .item ul li em { color:#999; margin-right:20px; font-size:0.9em; }
+.estimate_view .item ul li:first-child { width:calc(100% - 400px); justify-content: space-between; }
+.estimate_view .item ul li:last-child p { max-width:100px; text-align:right; }
+
+/*검색조건*/
+.search_detail_box { padding:30px 30px 40px; border-radius:20px; margin-bottom:50px; transform:translateY(-20px); z-index:0; position:relative; text-align:center; /*border:1px solid #d1e2fb;background:#ebf0f7;*/ box-shadow: 0px 0px 25px 0 rgba(0,0,0,0.1);}
+.search_detail_box .btn_l { position:absolute; bottom:-25px; }
+.search_detail_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:space-between; margin-bottom:30px; }
+.search_detail .board_label { margin-bottom:15px; display:block; font-size:1.2em; text-align:left;}
+
+.btn_search_detail { padding:14px 70px 14px 30px; display:inline-block; position:relative; cursor:pointer; z-index:1; margin-bottom:50px;}
+.btn_search_detail.active { box-shadow: 0 0 10px 0 rgba(0,0,0,0.1); }
+.btn_search_detail::after { content:''; position:absolute; top:50%; right:20px; transform: translateY(-50%); width:10px; height:10px; display:inline-block; background:url(../../images/custom/arrow_down.svg) 50% 50% no-repeat; background-size:contain; }
+
+.search_detail ul { border:1px solid #143b84; box-shadow: 0 0 10px 0 rgba(0,0,0,0.1); display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.search_detail ul li { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; border-right:1px solid #143b84;}
+.search_detail ul li:last-child { border-right:none; }
+.liselect { width:200px; }
+.liinput { width:300px; }
+.search_detail ul li .selectText { width:100%; height:50px; font-weight:600; border-radius:0; border:none;}
+.search_detail ul li .inputText { width:100%; height:50px; font-weight:600; border-radius:0; border:none; }
+.search_detail ul li button { border-color:#143b84; font-weight:600; height:50px; background:#143b84;border-radius:0;width:100%;color:#fff; }
+.est_cost { position:absolute; top:50%; right:0px; font-weight:900; font-size:1.4em; letter-spacing: -1px; transform:translateY(-50%); }
+.est_cost em { font-size:0.65em; font-weight:400; margin-right:7px; color:#999; letter-spacing: 0;}
+
+.half_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.half { width:50%; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items: flex-start; flex-direction: column; }
+.search_item ul { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.search_item ul li { margin-right:10px; }
+.search_item ul li .selectText { width:100%; }
+
+/*toggle_list*/
+.toggle_list { width:100%; border-top:2px solid #333; padding:0 0; }
+.toggle_list > ul > li { width:100%; border-bottom: 1px solid #ededed; transition:all 0.3s; }
+.toggle_tit { padding:25px 0; display:block; position:relative; cursor: pointer;}
+.toggle_tit strong { font-size:1.2em; }
+.toggle_tit::after { content:''; position:absolute; top:50%; right:20px; transform: translateY(-50%); transition:all 0.3s; width:15px; height:15px; display:inline-block;background:url(../../images/custom/arrow_down.svg) 50% 50% no-repeat; background-size:contain; }
+.toggle_tit.active::after { transform: translateY(-50%) rotate(180deg); }
+.toggle_box { padding:0 0px 25px;display:none; }
+
+.toggle_box.top_line { padding:20px; border:15px solid #efefef; }
+
+.toggle_btn_tit { padding:20px 10px; align-items: center; position:relative; }
+.toggle_btn_tit .btn_toggle { float:right; }
+.toggle_btn_tit .tit { width:calc(100% - 60px); font-weight:600; }
+
+.toggle_btn_tit.flex { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; }
+.toggle_btn_tit.flex .date { position:absolute; right:80px; }
+
+/*체크박스 리스트*/
+.checks { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; flex-wrap: wrap; }
+.checks li { width:16.66%; padding:5px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; position:relative; }
+
+.check_auto { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; flex-wrap:wrap; }
+.check_auto li { margin-right:40px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; position:relative; }
+.check_auto li:last-child { margin-right:0; }
+
+.check2 { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; flex-wrap: wrap; }
+.check2 li { width:50%; padding:5px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; position:relative;}
+
+.check3 { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; flex-wrap: wrap; }
+.check3 li { width:33.333%; padding:5px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; position:relative;}
+
+.check_auto.nomargin li:nth-child(1) { margin-right:0 !important; }
+.check_wrap.down3 input[type='checkbox'] { transform:translateY(3px); }
+
+.check_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+
+.polletc { width:100px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; margin-top:7px; padding-left:10px;}
+
+.date_picker { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; align-items: center; }
+.date_picker em { margin:0 10px; }
+.date_pick { border:1px solid #ccc; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; align-items:center; transition:all 0.3s; }
+.date_pick label { width:35px; height:33px; display:inline-block; background:url(../../images/custom/icon_calendar.svg) 50% 50% no-repeat; background-size:15px 15px; }
+.date_pick:hover { box-shadow:0 0 10px 0 rgba(0,0,0,0.2); border-color:#999; }
+.date_pick .inputText { border:none; height:33px !important; }
+.date_pick .inputText:hover { box-shadow:none; border:none; }
+
+.gap { display:inline-block; margin:0 5px; }
+
+.reply_list_title { padding: 0 0px 15px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; position: relative; align-items: flex-start;}
+.reply_list_title strong { margin-right:10px; }
+
+.satisfaction { }
+.satisfaction strong.title { font-size:1.2em; display:block; margin-bottom:20px; }
+.satisfaction .reply_write_wrap { padding:0; }
+.satisfaction .reply_write_wrap li { padding:0; border-bottom:none; }
+.satisfaction .reply_write_wrap > ul > li:first-child { padding-bottom:10px; }
+.satisfaction .reply_write_wrap > ul > li:last-child { padding:10px; }
+.satisfaction .reply_write_wrap li .textarea_wrap { line-height:0; border-bottom:1px solid #ededed; border-top:1px solid #ededed; }
+
+.reply_wrap .reply_list_title .star { margin:0 10px; display:inline-block; color:#ececec; line-height:1em; }
+.reply_wrap .reply_list_title .star em { text-indent:-50000px; display:inline-block; width:20px; height:20px; margin:0 2px; }
+.reply_wrap .reply_list_title .score { font-size:1.5em; font-weight:900; letter-spacing:-1px; line-height:1em; }
+
+.star_bar { width:120px; height:20px; display:block; position:relative; background:url(../../images/custom/satisfaction.svg) 0% 0% no-repeat; background-size:120px; }
+.star_fill { height:100%; position:absolute; top:0; left:0; overflow:hidden; background:url(../../images/custom/satisfaction_fill.svg) 0% 0% no-repeat; background-size:120px; }
+
+.starticle { background:url(../../images/custom/icon_star2.svg) 50% 50% no-repeat; background-size:contain; }
+.starticle.fill { background:url(../../images/custom/icon_star1.svg) 50% 50% no-repeat; background-size:contain; }
+
+.satisfaction .reply_list_wrap ul > li .by { margin-bottom:0; }
+.satisfaction .reply_list_wrap ul > li .by .star { margin-right:10px;display:inline-block; color:#999; line-height:1em; }
+.satisfaction .reply_list_wrap ul > li .by .star em {text-indent:-50000px; display:inline-block; width:15px; height:15px; margin:0 2px; }
+.satisfaction .reply_list_wrap ul > li .by .score { font-weight:900; font-wize:1.3em; color:#333; margin-left:5px;}
+
+.realmTag_wrap { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; flex-direction:row; flex-wrap:wrap; margin-top:10px; }
+.realmTag { margin:0 5px 5px 0; border:1px solid #ddd; color:#333; border-radius:30px; padding:5px 7px 5px 10px; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; align-items:center; }
+.realmTag .btn_delete { margin-left:10px; border-radius:30px; border:none; }
+.realmTag .btn_delete:hover { border:none; box-shadow:none; }
+
+/*일자리포털 우대사항*/
+.info_article { display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; flex-wrap:wrap; }
+.info_article li { width:auto; margin:4px; padding:7px 10px; background:#e5f1fb; border:1px solid #d7ebf7; line-height:1em; border-radius:50px; }
+
+/*설문조사*/
+.poll_list { margin-bottom:5px; }
+.poll_list:last-child { margin-bottom:0; }
+.poll_list::after { clear:both; display:block; content:''; }
+
+/*복리후생 등록*/
+.word_wrap { margin:10px -2.5px 0; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; width:100%; flex-direction:row; flex-wrap:wrap; }
+.word { border:1px solid #ddd; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content: flex-start; align-items:center; padding:5px 10px 5px 13px; border-radius:50px; margin:2.5px; }
+.word button { margin-left:5px; border:none; box-shadow:none; }
+.word button:hover { box-shadow:none; }
+
+.board_view.col_view { width:100%; border-top:2px solid #333; background:#fff; padding:0; }
+.board_view.col_view > ul > li { width:100%; padding:15px 0; border-bottom: 1px solid #ededed; position:relative; transition:all 0.3s; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; flex-direction:column; }
+.board_view.col_view > ul > li::after { content:''; display:block; clear:both; }
+.board_view.col_view > ul > li:last-child { }
+.board_view.col_view .board_label { width:100%; margin-bottom:10px; display:block; font-size:1em; }
+.board_view.col_view .input_wrap { width:100%; }
+
+.board_view.row_view { width:100%; border-top:2px solid #333; background:#fff; padding:0 15px; }
+.board_view.row_view > ul > li { width:100%; padding:20px 0; border-bottom: 1px solid #ededed; align-items:center; position:relative; transition:all 0.3s; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display:flex; justify-content:flex-start; }
+.board_view.row_view > ul > li::after { content:''; display:block; clear:both; }
+.board_view.row_view > ul > li:last-child { }
+.board_view.row_view .board_label { width:200px; margin-bottom:0; display:block; font-size:1em; }
+.board_view.row_view .input_wrap { width:calc(100% - 200px); }
+.board_view.row_view .realmTag_wrap { width:calc(100% - 200px); }
+
+.overY { max-height:max-content; overflow-y:hidden; position:relative; }
+.overY.long { max-height:70px; }
+.overY.long button { display:inline-block; }
+.overY::after { width:100%; height:35px; content:''; display:none; position:absolute; left:0; bottom:0; z-index:0;
+background: rgb(255,255,255);
+background: -moz-linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);
+background: -webkit-linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);
+background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,.8) 30%, rgba(255,255,255,0) 100%);}
+.overY.long::after { display:block }
+.overY .btn_more { position:absolute; bottom:0; left:50%; transform:translateX(-50%); display:none; z-index:3; height:24px; padding:0 8px; border-radius:50px; }
+
+
+/*ie에서 작동*/
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){
+.table_view { table-layout:auto !important; }
+.icon_secret { background-size:13px 13px; }
+
+}
Property changes on: base3.10/src/main/webapp/css/admin/board.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/code404.jsp
===================================================================
--- base3.10/src/main/webapp/code404.jsp (nonexistent)
+++ base3.10/src/main/webapp/code404.jsp (revision 7)
@@ -0,0 +1,41 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>▒▒▒ eGovFrame Potal 온라인 지원 포탈 ▒▒▒</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+
+<body>
+
+<div style="width: 1000px; margin: 50px auto 50px;">
+
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: 0px solid #666; padding: 20px;">
+ <!-- 404 -->
+ <p style="color:red; margin-bottom: 8px; ">404 Error</p>
+
+ <div class="boxType1" style="width: 500px;">
+ <div class="box">
+ <div class="error">
+ <p class="title">HTTP 404 Error</p>
+ <p class="cont mb20">웹 페이지를 찾을 수 없습니다.<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();">이전 페이지</a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/code404.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/fonts/NotoSansKR-Regular.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/NotoSansKR-Regular.woff
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/_notes/dwsync.xml
===================================================================
--- base3.10/src/main/webapp/fonts/_notes/dwsync.xml (nonexistent)
+++ base3.10/src/main/webapp/fonts/_notes/dwsync.xml (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<dwsync>
+<file name="NanumSquareB.eot" server="kimchsenior.dothome.co.kr" local="131405752200000000" remote="131405752200000000" Dst="0" />
+<file name="NanumSquareB.woff" server="kimchsenior.dothome.co.kr" local="131405752200000000" remote="131405752200000000" Dst="0" />
+<file name="NanumSquareB.ttf" server="kimchsenior.dothome.co.kr" local="131405752200000000" remote="131405752200000000" Dst="0" />
+<file name="NanumSquareR.eot" server="kimchsenior.dothome.co.kr" local="131405752200000000" remote="131405752200000000" Dst="0" />
+<file name="NanumSquareR.woff" server="kimchsenior.dothome.co.kr" local="131405752200000000" remote="131405752200000000" Dst="0" />
+<file name="NanumSquareR.ttf" server="kimchsenior.dothome.co.kr" local="131405752200000000" remote="131405752200000000" Dst="0" />
+</dwsync>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/fonts/_notes/dwsync.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/fonts/sign.ttf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/sign.ttf
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/NotoSansKR-Thin.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/NotoSansKR-Thin.woff
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/NotoSansKR-Light.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/NotoSansKR-Light.woff
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/sign.eot
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/sign.eot
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/sign.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/sign.woff
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/NotoSansKR-Bold.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/NotoSansKR-Bold.woff
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/NotoSansKR-Medium.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/NotoSansKR-Medium.woff
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/fonts/NotoSansKR-Black.woff
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/fonts/NotoSansKR-Black.woff
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-loginaop.xml
===================================================================
--- base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-loginaop.xml (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-loginaop.xml (revision 7)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
+
+ <!-- login Log Aspect -->
+ <bean id="loginlog" class="egovframework.com.sym.log.clg.service.EgovLoginLogAspect" />
+
+ <aop:config>
+ <aop:aspect id="loginLogAspect" ref="loginlog">
+ <!-- 로그인 Method -->
+ <aop:before pointcut="execution(public * egovframework.com.uat.uia.web.EgovLoginController.actionMain(..)) " method="logLogin" />
+ <!-- 로그아웃 Method -->
+ <aop:before pointcut="execution(public * egovframework.com.uat.uia.web.EgovLoginController.actionLogout(..))" method="logLogout" />
+ </aop:aspect>
+ </aop:config>
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-loginaop.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-access.xml
===================================================================
--- base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-access.xml (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-access.xml (revision 7)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:egov-access="http://maven.egovframe.go.kr/schema/egov-access"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://maven.egovframe.go.kr/schema/egov-access http://maven.egovframe.go.kr/schema/egov-access/egov-access-3.10.0.xsd">
+
+ <!--
+ globalAuthen : globals.properties 설정(전자정부 프레임워크 기본 설정 중 dummy, security 사용 시 session 으로 재설정됨)
+ dataSource : DBMS 설정 dataSource
+ loginUrl : 로그인 페이지 URL
+ accessDeniedUrl : 권한이 없는 경우 호출되는 페이지 URL
+ sqlAuthorityUser :
+ sqlRoleAndUrl : URL 방식 role 지정 query
+ requestMatcherType : 패턴 매칭 방식(regex, ant, ciRegex: case-insensitive regex)
+ excludeList : 접근제한 예외처리 URL(구분자: ,)
+
+ * WIKI 설명 참조
+ https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:access
+
+ * excludeList 사용시 주의사항
+ - 로그인 페이지 등 ANONYMOUS 접근이 가능한 페이지만 등록한다.
+ - excludeList에 등록하게 되면 접근권한 체크를 SKIP하게 되니 반드시 주의한다.
+ -->
+ <egov-access:config id="egovAccessConfig"
+ globalAuthen="session"
+ mappingPath="/**/*.do"
+ dataSource="egov.dataSource"
+ loginUrl="/uat/uia/egovLoginUsr.do"
+ accessDeniedUrl="/uat/uia/egovLoginUsr.do?auth_error=1"
+ sqlAuthorityUser="SELECT CONCAT(B.USER_SE, B.USER_ID) USERID, A.AUTHOR_CODE AUTHORITY
+ FROM COMTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
+ WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID"
+ sqlRoleAndUrl="SELECT A.ROLE_PTTRN URL, B.AUTHOR_CODE AUTHORITY
+ FROM COMTNROLEINFO A, COMTNAUTHORROLERELATE B
+ WHERE A.ROLE_CODE = B.ROLE_CODE
+ AND A.ROLE_TY = 'URL'
+ ORDER BY A.ROLE_SORT"
+ requestMatcherType="regex"
+ excludeList="/uat/uia/**, /index.do, /EgovLeft.do, /EgovContent.do, /EgovTop.do, /EgovBottom.do, /validator.do"
+ />
+ <!--
+ * 예외 목록 URL
+ 회원관리 : /uat/uia/**
+ 실명확인 : /sec/rnc/**
+ 우편번호 : /sym/ccm/zip/**
+ 로그인이미지관리 : /uss/ion/lsi/**
+ 약관확인 : /uss/umt/**
+ 포털예제배너 : /uss/ion/bnr/getBannerImage.do
+
+ 처음화면 : /index.do
+ 로그인화면이미지 : /cmm/fms/getImage.do
+ 좌측메뉴 : /EgovLeft.do
+ 초기화면 : /EgovContent.do
+ 상단메뉴 : /EgovTop.do
+ 하단메뉴 : /EgovBottom.do
+ 모달팝업 : /EgovModal.do
+
+ 만족도조사 : /cop/stf/selectSatisfactionList.do
+ 만족도조사 선택 : /cop/stf/selectSingleSatisfaction.do
+ 댓글 : /cop/cmt/selectArticleCommentList.do
+ 댓글 선택 : /cop/cmt/updateArticleCommentView.do
+
+ excludeList="/uat/uia/**, /index.do, /EgovLeft.do, /EgovContent.do, /EgovTop.do, /EgovBottom.do"
+ excludeList="/uat/uia/**, /uss/umt/**, /sec/rnc/**, /sym/ccm/zip/**, /uss/ion/lsi/**, /cmm/fms/getImage.do, /uss/ion/bnr/getBannerImage.do, /index.do, /EgovLeft.do, /EgovContent.do, /EgovTop.do, /EgovBottom.do, /EgovModal.do, /cop/cmt/selectArticleCommentList.do, /cop/stf/selectSatisfactionList.do, /cop/stf/selectSingleSatisfaction.do, /cop/cmt/updateArticleCommentView.do"
+ -->
+
+</beans>
Property changes on: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-access.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-interceptor.xml
===================================================================
--- base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-interceptor.xml (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-interceptor.xml (revision 7)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:mvc="http://www.springframework.org/schema/mvc"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
+ http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
+ <!-- 세션(Session) 방식 인증시에만 AuthenticInterceptor 동작 -->
+ <beans profile="session">
+ <mvc:interceptors>
+ <!-- IP 정보 기록 인터셉터를 등록한다. -->
+ <bean class="egovframework.com.cmm.interceptor.IpObtainInterceptor" />
+ </mvc:interceptors>
+ </beans>
+
+ <!-- 세션(Session) 방식 인증시에만 AuthenticInterceptor 동작 -->
+ <!-- 동작모드(프로파일명) : dummy, session, security ex)<beans profile="session"/> -->
+ <beans profile="dummy">
+ <mvc:interceptors>
+ <!--
+ * 로그인 체크가 필요한 URL과 로그인 여부를 체크해줄 인터셉터 등록에 대한 간단한 기능 예시이다.
+ * 실무에 사용시 시큐리티 간소화 서비스 또는 세션모드 접근제어를 사용한다.
+ -->
+ <mvc:interceptor>
+ <mvc:mapping path="/**/*.do" />
+ <mvc:exclude-mapping path="/uat/uia/**" />
+ <mvc:exclude-mapping path="/index.do" />
+ <mvc:exclude-mapping path="/cmm/fms/getImage.do" /> <!-- 로그인화면이미지 -->
+ <mvc:exclude-mapping path="/uss/ion/bnr/getBannerImage.do" /> <!-- 포털예제배너 -->
+ <mvc:exclude-mapping path="/EgovLeft.do" />
+ <mvc:exclude-mapping path="/EgovContent.do" />
+ <mvc:exclude-mapping path="/EgovTop.do" />
+ <mvc:exclude-mapping path="/EgovBottom.do" />
+ <mvc:exclude-mapping path="/EgovModal.do" />
+ <bean class="egovframework.com.cmm.interceptor.AuthenticInterceptor">
+ <!-- 관리자 권한 Ant style Pattern List -->
+ <property name="adminAuthPatternList">
+ <list>
+ <!-- 보안 > 권한관리 -->
+ <value>/sec/ram/*.do</value>
+ </list>
+ </property>
+ </bean>
+ </mvc:interceptor>
+ </mvc:interceptors>
+ </beans>
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-interceptor.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml
===================================================================
--- base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml (revision 7)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:mvc="http://www.springframework.org/schema/mvc"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
+ http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
+
+ <context:component-scan base-package="egovframework,froala">
+ <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
+ <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
+ <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
+ </context:component-scan>
+
+ <!-- For Pagination Tag -->
+ <bean id="imageRenderer" class="egovframework.com.cmm.ImagePaginationRenderer"/>
+
+ <bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
+ <property name="rendererType">
+ <map>
+ <entry key="image" value-ref="imageRenderer"/>
+ </map>
+ </property>
+ </bean>
+
+ <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
+ <property name="webBindingInitializer">
+ <bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
+ </property>
+ </bean>
+
+ <!-- setting Locale Locale Interceptor 설정하기 -->
+ <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
+ p:paramName="lang" />
+
+ <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
+
+ <bean id="egovWebLogInterceptor" class="egovframework.com.sym.log.wlg.web.EgovWebLogInterceptor" />
+
+ <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
+ <property name="interceptors">
+ <list>
+ <ref bean="localeChangeInterceptor"/>
+ <ref bean="egovWebLogInterceptor"/>
+ </list>
+ </property>
+ </bean>
+
+ <!-- IP 정보 기록 및 로그인 체크가 필요한 URL과 로그인 여부를 체크해줄 인터셉터를 등록한다. -->
+ <!-- 분리 -->
+
+ <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
+ <property name="defaultErrorView" value="egovframework/com/cmm/error/egovError"/>
+ <property name="exceptionMappings">
+ <props>
+ <prop key="org.springframework.dao.DataAccessException">egovframework/com/cmm/error/dataAccessFailure</prop>
+ <prop key="org.springframework.transaction.TransactionException">egovframework/com/cmm/error/dataAccessFailure</prop>
+ <prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">egovframework/com/cmm/error/egovBizException</prop>
+ <prop key="org.springframework.web.HttpSessionRequiredException">egovframework/com/uat/uia/EgovLoginUsr</prop>
+ <prop key="egovframework.com.cmm.exception.EgovXssException">egovframework/com/cmm/error/EgovXssException</prop>
+ </props>
+ </property>
+ </bean>
+
+ <!-- for JFile -->
+ <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"/>
+
+ <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
+ <property name="order" value="1"/>
+ </bean>
+ <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
+ <property name="definitions">
+ <list>
+ <value>/WEB-INF/tiles/tiles-config.xml</value>
+ </list>
+ </property>
+ </bean>
+
+ <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="2"
+ p:viewClass="org.springframework.web.servlet.view.JstlView"
+ p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
+
+ <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
+ <property name="contentType" value="text/html;charset=UTF-8"/>
+ </bean>
+</beans>
Property changes on: base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/lib/smeapi_2_7.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/WEB-INF/lib/smeapi_2_7.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/WEB-INF/lib/JDBC-10.2-latest-cubrid.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/WEB-INF/lib/JDBC-10.2-latest-cubrid.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/WEB-INF/lib/gpkisecureweb-1.0.4.9.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/WEB-INF/lib/gpkisecureweb-1.0.4.9.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/WEB-INF/lib/libgpkiapi_jni-1.4.0.0.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/WEB-INF/lib/libgpkiapi_jni-1.4.0.0.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/WEB-INF/tiles/tiles-config.xml
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/tiles-config.xml (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/tiles-config.xml (revision 7)
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE tiles-definitions PUBLIC
+ "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
+ "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
+
+<tiles-definitions>
+ <!-- 사용자 메인 템플릿 -->
+ <definition name=".defaultLayout" template="/WEB-INF/tiles/layouts/defaultLayout.jsp">
+ <put-attribute name="header" value="/WEB-INF/tiles/template/defaultHeader.jsp"/>
+ <put-attribute name="menu" value="/WEB-INF/tiles/template/defaultMenu.jsp"/>
+ <put-attribute name="body" value=""/>
+ <put-attribute name="footer" value="/WEB-INF/tiles/template/defaultFooter.jsp"/>
+ </definition>
+
+ <!-- 사용자 서브 템플릿 -->
+ <definition name=".defaultSubLayout" template="/WEB-INF/tiles/layouts/defaultSubLayout.jsp">
+ <put-attribute name="header" value="/WEB-INF/tiles/template/defaultHeader.jsp"/>
+ <put-attribute name="menu" value="/WEB-INF/tiles/template/defaultMenu.jsp"/>
+ <put-attribute name="subMenu" value="/WEB-INF/tiles/template/defaultSubMenu.jsp"/>
+ <put-attribute name="body" value=""/>
+ <put-attribute name="footer" value="/WEB-INF/tiles/template/defaultFooter.jsp"/>
+ </definition>
+
+ <!-- 관리자 템플릿 -->
+ <definition name=".adminLayout" template="/WEB-INF/tiles/layouts/adminLayout.jsp">
+ <put-attribute name="header" value="/WEB-INF/tiles/template/adminHeader.jsp"/>
+ <put-attribute name="menu" value="/WEB-INF/tiles/template/adminMenu.jsp"/>
+ <put-attribute name="body" value=""/>
+ </definition>
+
+ <!-- 로그인 페이지 -->
+<!-- <definition name="egovframework/com/uat/uia/EgovLoginUsr" extends=".defaultLayout"> -->
+<!-- <put-attribute name="body" value="/WEB-INF/jsp/egovframework/com/uat/uia/EgovLoginUsr.jsp"/> -->
+<!-- </definition> -->
+
+ <!-- 사용자 메인 레이아웃 -->
+ <definition name=".defaultLayout/*/*/*" extends=".defaultLayout">
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{1}/{2}/{3}.jsp"/>
+ </definition>
+
+ <!-- 사용자 메인 레이아웃 -->
+ <definition name=".defaultLayout/*/*/*/*/*" extends=".defaultLayout">
+ <put-attribute name="title" value="{1}"/>
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{2}/{3}/{4}/{5}.jsp"/>
+ </definition>
+
+ <!-- 사용자 서브 레이아웃 -->
+ <definition name=".defaultSubLayout/*/*/*/*" extends=".defaultSubLayout">
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{1}/{2}/{3}/{4}.jsp"/>
+ </definition>
+ <definition name=".defaultSubLayout/*/*/*/*/*" extends=".defaultSubLayout">
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{1}/{2}/{3}/{4}/{5}.jsp"/>
+ </definition>
+ <definition name=".defaultSubLayout/*/*/*/*/*/*" extends=".defaultSubLayout">
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{1}/{2}/{3}/{4}/{5}/{6}.jsp"/>
+ </definition>
+
+ <!-- 관리자 레이아웃 -->
+ <definition name=".adminLayout/*/*/*/*" extends=".adminLayout">
+ <put-attribute name="title" value="{1}"/>
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{2}/{3}/{4}.jsp"/>
+ </definition>
+
+ <!-- 관리자 레이아웃 -->
+ <definition name=".adminLayout/*/*/*/*/*" extends=".adminLayout">
+ <put-attribute name="title" value="{1}"/>
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{2}/{3}/{4}/{5}.jsp"/>
+ </definition>
+
+ <!-- 관리자 레이아웃 -->
+ <definition name=".adminLayout/*/*/*/*/*/*" extends=".adminLayout">
+ <put-attribute name="title" value="{1}"/>
+ <put-attribute name="body" value="/WEB-INF/jsp/egovframework/{2}/{3}/{4}/{5}/{6}.jsp"/>
+ </definition>
+</tiles-definitions>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/tiles-config.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/layouts/adminLayout.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/layouts/adminLayout.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/layouts/adminLayout.jsp (revision 7)
@@ -0,0 +1,32 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<c:set value="${sessionScope.systemVO}" var="systemVO" />
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko" id="fouc">
+ <head>
+ <style> #fouc {opacity: 0;} </style>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>관리자 / ${systemVO.sysNm }</title>
+ <tiles:insertAttribute name="header" />
+ </head>
+ <body>
+ <div class="content_wrap">
+ <tiles:insertAttribute name="menu" />
+ <div class="content">
+ <div class="control">사이즈컨트롤</div>
+ <tiles:insertAttribute name="body" />
+ </div>
+ <div class="clear"></div>
+ </div>
+ <script>
+ $("#fouc").css("opacity", "1");
+
+ $(".control").click(function(){
+ $(this).toggleClass("active");
+ $(".content_wrap").toggleClass("wide");
+ });
+ </script>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/layouts/adminLayout.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultSubLayout.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultSubLayout.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultSubLayout.jsp (revision 7)
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<c:set value="${sessionScope.FUNCTION_AUTHO}" var="functionAutho" />
+<c:set value="${sessionScope.systemVO}" var="systemVO" />
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko" id="fouc">
+<head>
+<script>
+ var FUNCTION_AUTHO = "${functionAutho }";
+</script>
+ <title><c:out value="${thisMenuInfo.progrUrlNm }" escapeXml="false"/> - ${systemVO.sysNm }</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta property="og:type" content="website">
+ <meta property="og:title" content="TS튜닝알리고">
+ <meta property="og:url" content="cyberts.kr/vtsp/">
+ <meta property="og:description" content="자동차 튜닝 관련 제품, 기술마켓, 비지니스지원, 일자리 정보제공">
+ <meta property="og:image" content="/images/custom/logo.jpg"/>
+ <meta name="viewport" content="width=device-width, user-scalable=no" />
+ <link rel="shortcut icon" href="<c:url value='/images/custom/favicon.ico' />" type="image/x-icon">
+ <link rel="icon" href="<c:url value='/images/custom/favicon.ico' />" type="image/x-icon">
+ <tiles:insertAttribute name="header" />
+</head>
+<body>
+ <tiles:insertAttribute name="menu" />
+ <section class="section">
+ <tiles:insertAttribute name="subMenu" />
+ <tiles:insertAttribute name="body" />
+ </section>
+ <tiles:insertAttribute name="footer" />
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultSubLayout.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultLayout.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultLayout.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultLayout.jsp (revision 7)
@@ -0,0 +1,94 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<c:set value="${sessionScope.FUNCTION_AUTHO}" var="functionAutho" />
+<c:set value="${sessionScope.systemVO}" var="systemVO" />
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko" id="fouc">
+<head>
+<script>
+ var FUNCTION_AUTHO = "${functionAutho }";
+</script>
+ <title>${systemVO.sysNm }</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta property="og:type" content="website">
+ <meta property="og:title" content="TS튜닝알리고">
+ <meta property="og:url" content="cyberts.kr/vtsp/">
+ <meta property="og:description" content="자동차 튜닝 관련 제품, 기술마켓, 비지니스지원, 일자리 정보제공">
+ <meta property="og:image" content="<c:url value='/images/custom/logo.jpg'/>"/>
+ <meta name="viewport" content="width=device-width, user-scalable=no" />
+ <link rel="shortcut icon" href="<c:url value='/images/custom/favicon.ico' />" type="image/x-icon">
+ <link rel="icon" href="<c:url value='/images/custom/favicon.ico' />" type="image/x-icon">
+ <tiles:insertAttribute name="header" />
+</head>
+<body class="index_body">
+ <!-- main popup -->
+ <c:if test="${not empty popupList }">
+ <div class="main_modal_wrap" style="display: none;">
+ <div class="main_modal">
+ <div class="modal_control">
+ <ul>
+ <li><div class="modal_count">팝업건수:총 <em>${popupList.size()}</em>건</div></li>
+ <li>
+ <div class="checks">
+ <input type="checkbox" id="closeCheck">
+ <label for="closeCheck">오늘 하루 팝업 열지 않기</label>
+ </div>
+ </li>
+ <li><button class="btn_s" id="closeBtn" title="팝업닫기버튼">닫기</button></li>
+ </ul>
+ </div>
+ <div class="modal_content">
+ <div class="modal_slide">
+ <c:forEach var="popup" items="${popupList}" varStatus="index">
+ <div class="m_slide">
+ <a href="<c:url value="${popup.popupLink }"/>" class="linkImage" title="${popup.popupDc }" >
+ <img src="<c:url value='${popup.fileLink }'/>" alt="${popup.popupDc }">
+ </a>
+ </div>
+ </c:forEach>
+ </div>
+ </div>
+ </div>
+ </div>
+ </c:if>
+
+ <script>
+ $(document).ready(function(){
+ var mslidelrngth = $(".modal_slide").find(".m_slide").length;
+ if (mslidelrngth > 1){
+ $(".modal_content").find(".slick-dots li:last-child a").on('focusout', function(){
+ $("#closeCheck").focus();
+ });
+ }else{
+ $(".modal_content").find(".m_slide a").on('focusout', function(){
+ $("#closeCheck").focus();
+ });
+ }
+ });
+ </script>
+
+
+ <!-- main popup -->
+ <tiles:insertAttribute name="menu" />
+ <tiles:insertAttribute name="body" />
+ <div class="modal" id="policy" role="dialog" aria-modal="true">
+ <div class="modal_wrap">
+ <!-- Modal content -->
+ <div class="modal_box width500">
+ <div class="modal_title">
+ <h3>공공데이터 이용정책</h3>
+ <div class="close btn_close_wrap">
+ <button type="button" class="btn_close" title="팝업닫기버튼"><span class="blind">팝업 닫기버튼</span></button>
+ </div>
+ </div>
+ <div class="modal_content type2">
+ <p>공공데이터법에 근거하여 사이버검사소 홈페이지에서 제공하는 공공데이터는 누구나 이용 가능하고, 영리 목적의 이용을 포함한 자유로운 활용이 보장됩니다. (공공데이터법 제1조, 제3조)</p>
+ <p>※단, 정보공개법 제9조의 비공개대상정보와 저작권법 및 그 밖의 다른 법령에서 보호하고 있는 제3자의 권리가 포함된 것으로 해당 법령에 따른 정당한 이용허락을 받지 아니한 정보는 정보 대상에서 제외됩니다.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/layouts/defaultLayout.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/layouts/mypageLayout.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/layouts/mypageLayout.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/layouts/mypageLayout.jsp (revision 7)
@@ -0,0 +1,44 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<c:set value="${sessionScope.FUNCTION_AUTHO}" var="functionAutho" />
+<c:set value="${sessionScope.systemVO}" var="systemVO" />
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko" id="fouc">
+<head>
+<script>
+ var FUNCTION_AUTHO = "${functionAutho }";
+</script>
+ <title><c:out value="${thisMenuInfo.progrUrlNm }" escapeXml="false"/> - 마이페이지 - ${systemVO.sysNm }</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta property="og:type" content="website">
+ <meta property="og:title" content="TS튜닝알리고">
+ <meta property="og:url" content="cyberts.kr/vtsp/">
+ <meta property="og:description" content="자동차 튜닝 관련 제품, 기술마켓, 비지니스지원, 일자리 정보제공">
+ <meta property="og:image" content="/images/custom/logo.jpg"/>
+ <meta name="viewport" content="width=device-width, user-scalable=no" />
+ <link rel="shortcut icon" href="<c:url value='/images/custom/favicon.ico' />" type="image/x-icon">
+ <link rel="icon" href="<c:url value='/images/custom/favicon.ico' />" type="image/x-icon">
+ <tiles:insertAttribute name="header" />
+</head>
+<body class="mbody">
+ <tiles:insertAttribute name="menu" />
+ <section class="section mpage">
+
+ <tiles:insertAttribute name="subMenu" />
+ <div class="content mypage_wrap <c:if test="${fn:contains(loginVO.authorCode,'ROLE_EXFI')}">extend</c:if>">
+ <div class="inner">
+ <div class="mypage">
+ <tiles:insertAttribute name="leftMenu" />
+ <div class="my_content_wrap" id="skip_content">
+ <h2><c:out value="${thisMenuInfo.progrUrlNm }" escapeXml="false"/></h2>
+ <tiles:insertAttribute name="body" />
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ <tiles:insertAttribute name="footer" />
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/layouts/mypageLayout.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/adminFooter.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/adminFooter.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/adminFooter.jsp (revision 7)
@@ -0,0 +1,6 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+
+<footer class="footer">${systemVO.copyright}</footer>
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/adminFooter.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/adminHeader.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/adminHeader.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/adminHeader.jsp (revision 7)
@@ -0,0 +1,98 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<script type="text/javascript">
+ // sessionStorage.setItem("contextpath", "${pageContext.request.contextPath}");
+ const CONTEXT_PATH = "${pageContext.request.contextPath}";
+</script>
+
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate" scope="application"/>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes" />
+<!--main-->
+<script src="<c:url value='/js/egovframework/com/cmm/jquery-1.12.4.min.js' />"></script>
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/font-awesome/css/font-awesome.css'/>">
+<script type="text/javascript" src="<c:url value='/resource/jquery-ui-1.12.1/jquery-ui.min.js' />"></script>
+<!-- inputMask -->
+<script type="text/javascript" src="<c:url value='/js/com/jquery.inputmask.min.js'><c:param name="dt" value="${nowDate}"/></c:url>" ></script>
+
+<script type="text/javascript" src="<c:url value='/js/com/common.js' />"></script>
+<script type="text/javascript" src="<c:url value='/js/admin/designJS.js' />"></script>
+
+<!-- 파일 업로드(common.js 필요) -->
+<script type="text/javascript" src="<c:url value='/js/com/dragFileUploader.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/com/printPreview.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/com/excel.js' />"></script>
+<script type="text/javascript" src="<c:url value='/js/com/jquery.blockUI.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/com/html2pdf.bundle.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/com/fileUpload.js'/>"></script>
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/style.css'/>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/board.css'/>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/admin.css'/>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/popup.css'/>" />
+<link rel="stylesheet" href="<c:url value='/resource/jquery-ui-1.12.1/jquery-ui.min.css'/>">
+
+
+<%-- <link rel="shortcut icon" href="<c:url value='/imageview.do?fileId=${systemVO.coFavicon }' />" type="image/x-icon"> --%>
+<%-- <link rel="icon" href="<c:url value='/imageview.do?fileId=${systemVO.coFavicon }' />" type="image/x-icon"> --%>
+<link rel="shortcut icon" href="<c:url value='/images/admin/favicon.ico' />" type="image/x-icon">
+<link rel="icon" href="<c:url value='/images/admin/favicon.ico' />" type="image/x-icon">
+
+<!-- 에디터 관련 추가 CSS, Javascript 추가 -->
+<!-- Include external CSS. -->
+<%-- <link href="<c:url value='/resource/editor/codemirror/lib/codemirror.css'/>" rel="stylesheet" type="text/css" /> --%>
+<!-- Include Editor style. -->
+<%-- <link href="<c:url value='/resource/editor/css/froala_editor.pkgd.min.css' />" rel="stylesheet" type="text/css" /> --%>
+<%-- <link href="<c:url value='/resource/editor/css/froala_style.min.css' />" rel="stylesheet" type="text/css" /> --%>
+<!-- Include external JS libs. -->
+<%-- <script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/codemirror.js'/>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/xml.js'/>"></script> --%>
+<!-- Include Editor JS files. -->
+<%-- <script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor.pkgd.js' />"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/resource/editor/js/languages/ko.js' />"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/js/com/imageViewFileUpload.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor_script_custom.js'/>"></script> --%>
+<!-- 에디터 관련 추가 CSS, Javascript 종료 -->
+<script type="text/javascript">
+$(document).ready(function() {
+ if("${message}" != null && "${message}" != "") {
+ alert("${message}");
+ }
+});
+</script>
+<script>
+setTimeout(function() {
+// var ntime = performance.timing;
+
+// var total = ntime.loadEventEnd - ntime.navigationStart; //전체 소요시간
+// var redirect = ntime.redirectEnd - ntime.redirectStart; // 동일 origin에서의 redirect 시간
+// var cache = ntime.domainLookupStart - ntime.fetchStart; // cache 시간
+// var dnslookup = ntime.domainLookupEnd - ntime.domainLookupStart; //DNS Lookup 시간
+// var connect = ntime.connectEnd - ntime.connectStart; // 웹서버 연결 시간
+// var request = ntime.responseStart - ntime.requestStart; // 요청 소요 시간
+// var response = ntime.responseEnd - ntime.responseStart; // 응답 데이터를 모두 받은 시간
+// var dom = ntime.domComplete - ntime.domLoading; // DOM객체 생성 시간 *******************
+// var load = ntime.loadEventEnd - ntime.loadEventStart; // 브라우저의 Load 이벤트 실행시간
+// var pageEnd = ntime.loadEventEnd - ntime.responseEnd; // 서버에서 페이지를 받고 페이지를 로드하는데 걸린 시간
+// var networkDelay = ntime.responseEnd - ntime.fetchStart; // 네트워크 지연 시간
+
+// console.log('#############################################################################');
+// console.log("전체 소요시간 : " + total + " ms");
+// console.log("동일 origin에서의 redirect 시간 : " + redirect + " ms");
+// console.log("cache 시간 : " + cache + " ms");
+// console.log("DNS Lookup 시간 : " + dnslookup + " ms");
+// console.log("웹서버 연결 시간 : " + connect + " ms");
+// console.log("요청 소요 시간 : " + request + " ms");
+// console.log("첫 응답으로 부터 응답 데이터를 모두 받은 시간 : " + response + " ms");
+// console.log("DOM객체 로드 완료 시간 : " + dom + " ms");
+// console.log("브라우저의 Load 이벤트 실행시간 : " + load + " ms");
+// console.log("서버에서 페이지를 받고 페이지를 로드하는데 걸린 시간 : " + pageEnd + " ms");
+// console.log('#############################################################################');
+
+}, 10000); //10초 뒤 수행
+</script>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/adminHeader.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultFooter.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/defaultFooter.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/defaultFooter.jsp (revision 7)
@@ -0,0 +1,120 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<c:set value="${sessionScope.loginVO}" var="loginVO" />
+<c:set value="${sessionScope.ntcnCnt}" var="ntcnCnt" />
+<!-- footer start -->
+<footer>
+ <button class="skip_top" title="top으로가기버튼" onclick="window.scrollTo(0,0);">top</button>
+ <div class="os">
+ <div class="os_title">
+ <strong>online service</strong> <em>고객지원</em>
+ </div>
+ <div class="os_list">
+ <ul>
+ <li class="os2"><a href="<c:url value='/cop/bbs/000000000007/selectArticleList.do'/>" title="공지사항">공지사항</a></li>
+ <li class="os1"><a href="<c:url value='/mrk/cart/list.do'/>" title="장바구니">장바구니</a></li>
+ <li class="os3"><a href="<c:url value='/cst/faq/list.do'/>" title="자주묻는질문">자주묻는질문</a></li>
+ <li class="os6"><a href="#!" title="온라인도움말">온라인도움말</a></li>
+ </ul>
+ </div>
+ </div>
+ <div class="footer_bar">
+ <div class="relative">
+ <ul class="tac_list">
+ <li><a href="https://kotsa.or.kr/portal/contents.do?menuCode=07010000" target="_blank" class="blank_w" title="이용약관 [새창열림]">이용약관</a></li>
+ <li><a href="https://kotsa.or.kr/portal/contents.do?menuCode=07020000" target="_blank" class="blank_w" title="개인보호정책 [새창열림]">개인보호정책</a></li>
+ <li><a href="https://kotsa.or.kr/portal/contents.do?menuCode=07040000" target="_blank" class="blank_w" title="이메일무단수집거부 [새창열림]">이메일무단수집거부</a></li>
+ <li><a href="https://kotsa.or.kr/portal/empList.do?menuCode=06020404" target="_blank" class="blank_w" title="조직 및 직원안내 [새창열림]">조직 및 직원안내</a></li>
+ <li><a href="https://kotsa.or.kr/portal/contents.do?menuCode=06040000" target="_blank" class="blank_w" title="찾아오시는길 [새창열림]">찾아오시는길</a></li>
+<!-- <li><a href="#!" title="공공데이터 이용정책 [팝업열림]" class="openpopup" aria-controls="policy">공공데이터 이용정책</a></li> -->
+ </ul>
+ <ul class="familysite">
+ <li>
+ <a class="btn_family" href="#!" title="관련사이트 열기">관련 사이트</a>
+ <ul>
+ <li class="blank"><a href="http://www.ntrh.or.kr" target="_blank" title="국립교통재활병원 [새창열림]">국립교통재활병원</a></li>
+ <li class="blank"><a href="https://www.kotsa.or.kr/mpis" target="_blank" title="기계식주차장 관리인 교육 [새창열림]">기계식주차장 관리인 교육</a></li>
+ <li class="blank"><a href="https://www.kotsa.or.kr/safeinfo" target="_blank" title="전세버스 정보확인 [새창열림]">전세버스 정보확인</a></li>
+ <li class="blank"><a href="https://www.clean.go.kr" target="_blank" title="청렴신문고 [새창열림]">청렴신문고</a></li>
+ <li class="blank"><a href="https://www.molit.go.kr" target="_blank" title="국토교통부 [새창열림]">국토교통부</a></li>
+ <li class="blank"><a href="https://www.safe182.go.kr" target="_blank" title="안전 DREAM [새창열림]">안전 DREAM</a></li>
+ <li class="blank"><a href="https://job.alio.go.kr" target="_blank" title="JOB-ALIO [새창열림]">JOB-ALIO</a></li>
+ <li class="blank"><a href="https://stat.molit.go.kr" target="_blank" title="국토교통 통계누리 [새창열림]">국토교통 통계누리</a></li>
+ <li class="blank"><a href="https://www.mois.go.kr" target="_blank" title="국가상징알아보기 [새창열림]">국가상징알아보기</a></li>
+ <li class="blank"><a href="http://www.car365.go.kr" target="_blank" title="자동차 365 [새창열림]">자동차 365</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="footer">
+ <ul>
+ <li>
+ <div class="logo">
+ <a href="<c:url value="/" />" title="TS튜닝알리고 로고 [최상단으로 이동]">TS튜닝알리고</a>
+ </div>
+ <dl class="footer_info">
+ <dt>주소</dt>
+ <dd>39660 경상북도 김천시 혁신로6길 17<br>(율곡동, 한국교통안전공단)</dd>
+ </dl>
+ </li>
+ <li>
+ <div class="cs_wrap">
+ <p>고객센터</p>
+ <strong>1577-0990</strong> <em>평일 09:00 ~ 18:00<br /> 통화료는
+ 사용자 부담
+ </em>
+ </div>
+ </li>
+ </ul>
+ <p class="text_bottom">Copyright(C) TS. all rights reserved.</p>
+ <!-- 웹접근성 -->
+ <div class="webacc">
+ <a href="http://webwatch.or.kr" target="_blank" title="[새창열림] WA 품질인증마크, 웹와치(WebWatch) 2021.12.6 ~ 2022.12.5"><img src="<c:url value='/images/custom/webacc.svg'/>" alt="과학기술정보통신부 WA(WEB접근성) 품질인증 마크, 웹와치(WebWatch) 2021.12.6 ~ 2022.12.5"></a>
+ </div>
+ <!-- 웹접근성 -->
+ </div>
+
+</footer>
+<div class="modal" id="policy" role="dialog" aria-modal="true">
+ <div class="modal_wrap">
+ <!-- Modal content -->
+ <div class="modal_box width500" >
+ <div class="modal_title">
+ <strong>공공데이터 이용정책</strong>
+ <div class="close btn_close_wrap">
+ <button type="button" class="btn_close" title="팝업닫기버튼"><span class="blind">팝업 닫기버튼</span></button>
+ </div>
+ </div>
+ <div class="modal_content type2">
+ <p>공공데이터법에 근거하여 사이버검사소 홈페이지에서 제공하는 공공데이터는 누구나 이용 가능하고, 영리 목적의 이용을 포함한 자유로운 활용이 보장됩니다. (공공데이터법 제1조, 제3조)</p>
+ <p>※단, 정보공개법 제9조의 비공개대상정보와 저작권법 및 그 밖의 다른 법령에서 보호하고 있는 제3자의 권리가 포함된 것으로 해당 법령에 따른 정당한 이용허락을 받지 아니한 정보는 정보 대상에서 제외됩니다.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+<script>
+ // 사용자 권한가져오기
+ function fncGetAuthorCode() {
+ return "${loginVO.authorCode }"
+ }
+
+ $(function() {
+ // 브라우저 체크
+// if (browserInfo() == 'ie') {
+// $(".banner").show();
+// $("body").addClass("banner_show");
+// $("body").addClass("ie");
+
+// //banner
+// $(".banner_close").click(function() {
+// $(".banner").hide();
+// $("body").removeClass("banner_show");
+// })
+// }
+ })
+
+</script>
+<!-- footer end -->
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultFooter.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/adminMenu.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/adminMenu.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/adminMenu.jsp (revision 7)
@@ -0,0 +1,161 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<c:set value="${sessionScope.menuVO}" var="menuList"/>
+<c:set value="${sessionScope.menuNaviVO}" var="menuNaviList"/>
+<c:set value="${sessionScope.menuDepthVO}" var="menuDepthList" />
+<c:set value="${sessionScope.loginVO}" var="loginVO"/>
+<c:forEach var="item" items="${menuList }">
+ <c:if test="${item.menuGb eq 'A' and item.upperMenuNo eq 'ROOT'}">
+ <c:set value="${item.menuNo }" var="adminUpperMenuNo"/>
+ </c:if>
+</c:forEach>
+<c:forEach var="menuNavi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${status.count eq 2 }">
+ <c:set var="selMenuNo" value="${menuNavi.menuNo }"/>
+ <c:set var="mainMenuNo" value="${menuNavi.upperMenuNo }"/>
+ </c:if>
+</c:forEach>
+
+<div class="topBar overX">
+ <ul class="gnb">
+ <c:forEach var="menu" items="${menuList }">
+ <c:if test="${menu.upperMenuNo eq adminUpperMenuNo }">
+ <c:set var="active1" value=" "/>
+ <c:forEach var="selMenu" items="${menuNaviList }">
+ <c:if test="${selMenu.menuNo eq menu.menuNo }">
+ <c:set var="active1" value=" active"/>
+ </c:if>
+ </c:forEach>
+ <li class="menuChk ${active1 }" data-id="${menu.menuNo }">
+ <a href="#!"><c:out value="${menu.menuNm }"/></a>
+ <ul class="subMenu">
+ <c:forEach var="subMenu" items="${menuList }">
+ <c:if test="${menu.menuNo eq subMenu.upperMenuNo }">
+ <c:set var="active2" value=" "/>
+ <c:forEach var="selMenu" items="${menuNaviList }">
+ <c:if test="${selMenu.menuNo eq subMenu.menuNo }">
+ <c:set var="active2" value=" active"/>
+ </c:if>
+ </c:forEach>
+ <li class="${active2 }">
+ <a href="<c:url value="${subMenu.progrUrl }"/>"><c:out value="${subMenu.menuNm }"/></a>
+ <c:if test="${subMenu.childCnt > 0 }">
+ <ul class="depth3">
+ <c:forEach var="triMenu" items="${menuList }">
+ <c:if test="${triMenu.upperMenuNo eq subMenu.menuNo }">
+ <c:set var="active3" value=""/>
+ <c:forEach var="menuNavi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${triMenu.menuNo eq menuNavi.menuNo }" >
+ <c:set var="active3" value="active"/>
+ </c:if>
+ </c:forEach>
+
+ <li class="${active3 }">
+ <a href="<c:url value='${triMenu.progrUrl }'/>">${triMenu.menuNm }</a>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </c:if>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ <ul class="member">
+ <c:choose>
+ <c:when test="${loginVO != null}">
+ <li><span><b>${loginVO.name }</b></span> 님 환영합니다.</li>
+ <li class="icon_home"><a href="<c:url value="/index.do"/>">home</a></li>
+ <li class="icon_logout"><a href="https://nsso.kotsa.or.kr:9800/nsso-authweb/logoff.do?ssosite=portal.kotsa.or.kr&returnURL=https://in-vtsp.kotsa.or.kr:9090/EpLogoff.do">logout</a></li>
+ </c:when>
+ <c:otherwise>
+ <li class="icon_home"><a href="<c:url value="/admin/index.do"/>">home</a></li>
+ <li class="icon_login"><a href="<c:url value="/EpLogin.do"/>">login</a></li>
+ </c:otherwise>
+ </c:choose>
+ </ul>
+</div>
+<div class="left_menu">
+ <h1 class="logo"><a href="<c:url value="/admin/index.do"/>">logo</a></h1>
+
+ <!-- sub menu list start -->
+ <div class="submenu_wrap">
+ <c:forEach var="menuNavi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${status.index eq 0 }">
+ <c:set var="subTitle" value="${menuNavi.menuNm }"/>
+ </c:if>
+ </c:forEach>
+ <h2>${subTitle }</h2>
+ <ul class="sub_menu">
+ <c:forEach var="menu" items="${menuList }">
+ <c:if test="${mainMenuNo eq menu.menuNo }">
+
+ <c:forEach var="subMenu" items="${menuList }">
+ <c:set var="active2" value=""/>
+ <c:set var="style2" value=""/>
+ <c:forEach var="menuNavi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${subMenu.menuNo eq menuNavi.menuNo }" >
+ <c:set var="subMenuNo" value="${menuNavi.menuNo }"/>
+ </c:if>
+ </c:forEach>
+
+ <c:if test="${menu.menuNo eq subMenu.upperMenuNo }">
+ <c:if test="${subMenuNo eq subMenu.menuNo }">
+ <c:set var="active2" value="active on"/>
+ </c:if>
+ <li class="${active2 }">
+ <c:if test="${subMenu.childCnt > 0 }">
+ <p><a href="<c:url value="${subMenu.progrUrl}"/>">${subMenu.menuNm }</a></p>
+ <c:if test="${subMenuNo eq subMenu.menuNo }">
+ <c:set var="style2" value="display: block;" />
+ </c:if>
+ <ul class="depth3" style="${style2}">
+ <c:forEach var="triMenu" items="${menuList }">
+ <c:if test="${triMenu.upperMenuNo eq subMenu.menuNo }">
+ <c:set var="active3" value=""/>
+ <c:forEach var="menuNavi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${triMenu.menuNo eq menuNavi.menuNo }" >
+ <c:set var="triMenuNo" value="${menuNavi.menuNo }"/>
+ </c:if>
+ </c:forEach>
+ <c:if test="${triMenuNo eq triMenu.menuNo }">
+ <c:set var="active3" value="active"/>
+ </c:if>
+ <li class="${active3 }">
+ <a href="<c:url value='${triMenu.progrUrl }'/>">${triMenu.menuNm }</a>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </c:if>
+ <c:if test="${subMenu.childCnt eq 0 }">
+ <a href="<c:url value="${subMenu.progrUrl }"/>">${subMenu.menuNm }</a>
+ </c:if>
+ </li>
+ </c:if>
+ </c:forEach>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </div>
+ <p class="footer">${systemVO.copyright}</p>
+</div>
+
+<script>
+$(".left_menu ul p.main_menui ").click(function(){
+ $(".sub_menu").slideUp();
+ $(this).next("ul").stop().slideToggle();
+});
+
+$(".depth3").parent("li").addClass("have")
+
+//gnb 설정
+$(".sub_menu li .actived").parent("li").parent(".sub_menu").parent("li").addClass("active");
+</script>
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/adminMenu.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeader.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeader.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeader.jsp (revision 7)
@@ -0,0 +1,98 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<script type="text/javascript">
+ //sessionStorage.setItem("contextpath", "${pageContext.request.contextPath}");
+ const CONTEXT_PATH = "${pageContext.request.contextPath}";
+</script>
+
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate" scope="application"/>
+
+<!--jquery-->
+<script type="text/javascript" src="<c:url value='/js/com/jquery-1.12.4.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/jquery-ui-1.12.1/jquery-ui.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<!-- inputMask -->
+<script type="text/javascript" src="<c:url value='/js/com/jquery.inputmask.min.js'><c:param name="dt" value="${nowDate}"/></c:url>" ></script>
+
+<!-- 웹소켓 JS -->
+<%-- <script type="text/javascript" src="<c:url value='/js/com/sockjs.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/js/com/socket.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+
+<!-- 데이터테이블 CSS -->
+<%-- <link rel="stylesheet" type="text/css" href="<c:url value='/resource/datatables/datatables.css'><c:param name="dt" value="${nowDate}"/></c:url>" /> --%>
+<%-- <link rel="stylesheet" type="text/css" href="<c:url value='/resource/datatables/scroller.dataTables.min.css'><c:param name="dt" value="${nowDate}"/></c:url>" /> --%>
+
+<!-- full page js -->
+<script type="text/javascript" src="<c:url value='/js/com/jquery.fullPage.js'><c:param name="dt" value="${nowDate}"/></c:url>" ></script>
+
+<!-- CSS -->
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/slick.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/slick-theme.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/jquery.fullPage.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/style.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/board.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/common.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<%-- <link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/popup.css'><c:param name="dt" value="${nowDate}"/></c:url>" /> --%>
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/custom/responsive.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/jquery-ui-1.12.1/jquery-ui.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+
+<!-- pdf변환 -->
+<script type="text/javascript" src="<c:url value='/js/com/html2pdf.bundle.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<%-- <script type="text/javascript" src="<c:url value='/js/com/fontawesome.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<script type="text/javascript" src="<c:url value='/js/com/jquery.smoothwheel.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/js/com/jquery.easing.1.3.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<!-- 데이터테이블 JS -->
+<%-- <script type="text/javascript" src="<c:url value='/resource/datatables/datatables.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/resource/datatables/dataTables.scrollResize.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/resource/datatables/dataTables.scroller.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/resource/datatables/language_ko.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/resource/datatables/dataTables.fixedColumns.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+
+<!-- 이미지뷰어 JS -->
+<%-- <script type="text/javascript" src="<c:url value='/js/com/printPreview.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/js/com/imageViewFileUpload.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<%-- <script type="text/javascript" src="<c:url value='/js/com/ajaxFileUpload.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+<script type="text/javascript" src="<c:url value='/js/com/fileUpload.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<!-- blockUI -->
+<script type="text/javascript" src="<c:url value='/js/com/jquery.blockUI.js'><c:param name="dt" value="${nowDate}"/></c:url>" ></script>
+
+<!-- 쿠키JS -->
+<script type="text/javascript" src="<c:url value='/js/com/jquery.cookie.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<!-- 테이블 Excel Export -->
+<%-- <script type="text/javascript" src="<c:url value='/js/com/tableExcelExport.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script> --%>
+
+<!-- 전자정부 validator -->
+<script type="text/javascript" src="<c:url value="/validator.do"><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<script type="text/javascript" src="<c:url value='/js/com/slick.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<!-- 공통JS -->
+<script type="text/javascript" src="<c:url value='/js/com/common.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/js/com/designJS.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<!-- 파일 업로드(common.js 필요) -->
+<script type="text/javascript" src="<c:url value='/js/com/dragFileUploader.js' ><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<!--[if IE]>
+<script src="<c:url value='/js/com/html5shiv.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<![endif]-->
+<style>
+.dataTable {
+ table-layout: fixed;
+}
+</style>
+<script type="text/javascript">
+$(document).ready(function() {
+ if("${message}" != null && "${message}" != "") {
+ alert("${message}");
+ }
+});
+</script>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeader.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultSubMenu.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/defaultSubMenu.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/defaultSubMenu.jsp (revision 7)
@@ -0,0 +1,61 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<%@ page trimDirectiveWhitespaces="true"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<c:set value="${sessionScope.loginVO}" var="loginVO" />
+<c:set value="${sessionScope.menuNaviVO}" var="menuNaviList" />
+<c:set value="${sessionScope.menuDepthVO}" var="menuDepthList" />
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<%-- <c:set value="" var="selMenuNm"/> --%>
+<%-- <c:set value="" var="selMenuDc"/> --%>
+<div class="sub_title">
+ <div class="breadcrumb">
+ <ul>
+ <li class="home"><a href="/" title="메인화면으로 이동">home</a></li>
+ <li class="next"><img src="<c:url value='/images/custom/arrow_right.svg'/>" alt="다음"></li>
+ <c:forEach var="menuNavi" items="${menuNaviList }" varStatus="i">
+ <c:if test="${menuNaviList.size() > i.count }">
+ <li><a href="<c:url value='${menuNavi.progrUrl }'/>" title="${menuNavi.menuNm }로 이동">${menuNavi.menuNm }</a></li>
+ <li class="next"><img src="<c:url value='/images/custom/arrow_right.svg'/>" alt="다음"></li>
+ </c:if>
+ <c:if test="${menuNaviList.size() == i.count }">
+<%-- <c:set value="${menuNavi.menuNm }" var="selMenuNm"/> --%>
+<%-- <c:set value="${menuNavi.menuDc }" var="selMenuDc"/> --%>
+ <li class="btn_location">
+ <a class="now" href="javascript:void(0);" title="<c:out value='${menuNavi.menuNm }'/>"><span class="blind">현재페이지</span><c:out value='${menuNavi.menuNm }'/></a>
+ <ul class="location">
+ <c:forEach var="menuDepth" items="${menuDepthList }">
+ <c:set var="active" value=""/>
+ <c:if test="${menuDepth.menuNo eq menuNavi.menuNo }">
+ <c:set var="active" value="active"/>
+ </c:if>
+ <li class="${active }">
+ <c:choose>
+ <c:when test="${menuDepth.progrUrl eq 'dir' }">
+ <a style="color:red" href="javascript:void(0);" title="${menuDepth.menuNm }">${menuDepth.menuNm }</a>
+ </c:when>
+ <c:otherwise>
+ <a href="<c:url value='${menuDepth.progrUrl }'/>" title="${menuDepth.menuNm }">${menuDepth.menuNm }</a>
+ </c:otherwise>
+ </c:choose>
+ </li>
+ </c:forEach>
+ </ul>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </div>
+ <div class="gnb_mobile">
+ <div class="gnb_2depth_mobile overX"></div>
+ <div class="gnb_3depth_mobile overX"></div>
+ </div>
+ <h2><c:out value="${thisMenuInfo.progrUrlNm }" escapeXml="false"/></h2>
+ <%-- <c:if test="${not empty thisMenuInfo.menuDc }">
+ <p class="subtitle"><c:out value="${fn:replace(thisMenuInfo.menuDc, crlf, '<br/>') }" escapeXml="false"/></p>
+ </c:if> --%>
+</div>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultSubMenu.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultMenu.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/defaultMenu.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/defaultMenu.jsp (revision 7)
@@ -0,0 +1,399 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<%@ page trimDirectiveWhitespaces="true"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@page import="egovframework.com.cmm.service.EgovProperties"%>
+<c:set value="${sessionScope.loginVO}" var="loginVO" />
+<c:set value="${sessionScope.menuVO}" var="menuList" />
+<c:set value="${sessionScope.menuNaviVO}" var="menuNaviList" />
+<c:forEach var="item" items="${menuList }">
+ <c:if test="${item.menuGb eq 'U' and item.upperMenuNo eq 'ROOT'}">
+ <c:set value="${item.menuNo }" var="userUpperMenuNo" />
+ </c:if>
+</c:forEach>
+<div class="skip"> <a href="#skip_content" title="본문 바로가기" >본문 바로가기</a> <a href="#gnb_wrap" title="대메뉴바로가기" >대메뉴 바로가기</a> </div>
+<header class="header">
+ <h1>
+ <a href="<c:url value="/" />" class="logo1">TS튜닝알리고</a>
+ </h1>
+ <!-- main gnb start -->
+ <div class="gnb" id="gnb_wrap">
+ <ul>
+ <c:forEach var="depth1" items="${menuList }" >
+ <c:if test="${depth1.upperMenuNo eq userUpperMenuNo }">
+ <c:set var="depth1Active" value=""/>
+ <c:forEach var="navi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${depth1.menuNo eq navi.menuNo }">
+ <c:set var="depth1Active" value=" active"/>
+ </c:if>
+ </c:forEach>
+ <li class="depth1 ${depth1Active }">
+ <a href="<c:url value='${depth1.progrUrl }'/>" title="${depth1.menuNm }">${depth1.menuNm }</a>
+ <c:if test="${depth1.childCnt > 0 }">
+ <div class="submenu_wrap">
+ <div class="inner"><strong>${depth1.menuNm }</strong>
+ <div class="submenu">
+ <ul class="depth2">
+ <c:forEach var="depth2" items="${menuList }">
+ <c:if test="${depth2.upperMenuNo eq depth1.menuNo }">
+ <c:set var="depth2Active" value=""/>
+ <c:forEach var="navi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${depth2.menuNo eq navi.menuNo }">
+ <c:set var="depth2Active" value="active"/>
+ </c:if>
+ </c:forEach>
+ <li class="${depth2Active }">
+ <a href="<c:url value='${depth2.progrUrl }'/>" title="${depth2.menuNm }">
+ <c:choose>
+ <c:when test="${depth2.menuNo eq 'PROGR_000000001341' }">
+ <!-- TS검사소 체험신청 -->
+ ${fn:replace(depth2.menuNm, 'TS', '<span class="tsimg">TS</span>') }
+ </c:when>
+ <c:otherwise>
+ ${depth2.menuNm }
+ </c:otherwise>
+ </c:choose>
+ </a>
+ <c:if test="${depth2.childCnt > 0 }">
+ <div class="depth3_wrap">
+ <ul class="depth3">
+ <c:forEach var="depth3" items="${menuList }">
+ <c:if test="${depth3.upperMenuNo eq depth2.menuNo }">
+ <c:set var="depth3Active" value=""/>
+ <c:forEach var="navi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${depth3.menuNo eq navi.menuNo }">
+ <c:set var="depth3Active" value="active"/>
+ </c:if>
+ </c:forEach>
+ <li class="${depth3Active }">
+ <a href="<c:url value='${depth3.progrUrl }'/>" title="${depth3.menuNm }">
+ <c:choose>
+ <c:when test="${depth3.menuNo eq 'PROGR_000000001341' }">
+ <!-- TS검사소 체험신청 -->
+ ${fn:replace(depth3.menuNm, 'TS', '<span class="tsimg">TS</span>') }
+ </c:when>
+ <c:otherwise>
+ ${depth3.menuNm }
+ </c:otherwise>
+ </c:choose>
+ </a>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </div>
+ </c:if>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </c:if>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </div>
+ <!-- main gnb end -->
+
+ <!-- member menu start -->
+ <div class="mnb">
+ <ul>
+ <c:if test="${!empty loginVO }">
+ <li class="login_info"><p><strong>${loginVO.name }</strong><span>님</span></p></li>
+ </c:if>
+ <c:if test="${empty loginVO }">
+ <li class="gnb_login">
+ <a href="javascript:void(0);" class="a_login" title="로그인"><em>로그인</em></a>
+ </li>
+ </c:if>
+ <c:if test="${not empty loginVO }">
+ <li class="gnb_logout">
+ <a href="<c:url value='/uat/uia/actionLogout.do'/>" title="로그아웃"><em>로그아웃</em></a>
+ </li>
+ <li class="gnb_mypage">
+ <c:choose>
+ <c:when test="${fn:contains(loginVO.authorCode, 'ROLE_USER') }">
+ <a href="<c:url value='/mbe/emplyr/mypage/saveView.do'/>" title="마이페이지"><em>마이페이지</em></a>
+ </c:when>
+ <c:otherwise>
+ <a href="<c:url value='/mbe/entrps/mypage/saveView.do'/>" title="마이페이지"><em>마이페이지</em></a>
+ </c:otherwise>
+ </c:choose>
+ </li>
+ <c:if test="${fn:contains(loginVO.authorCode, 'ROLE_ADMIN') }">
+ <li class="gnb_admin">
+ <a href="<c:url value='/admin/index.do'/>" title="관리자"><em>관리자</em></a>
+ </li>
+ </c:if>
+ </c:if>
+ <li class="gnb_cart">
+ <a href="<c:url value="/mrk/cart/list.do"/>" title="장바구니"><em>장바구니</em></a>
+ </li>
+ <li class="gnb_search">
+ <a class="btn_is" href="javascript:void(0); fnc_trendsKeyword();" title="통합검색"><em>통합검색</em></a>
+ <!-- Integrated Search start -->
+ <div class="int_search">
+ <div class="is_box">
+ <div class="inner">
+ <strong>통합검색</strong>
+ <div class="is_search">
+ <input type="text" id="searchTotalTerm" name="searchTotalTerm" value="" class="inputText" placeholder="검색어를 입력하세요" title="통합검색 입력창입니다" />
+ <button type="button" class="btn_search" id="btn_cmmSearchTotal" title="검색버튼"><span class="blind">검색버튼</span></button>
+ <!-- keyword-->
+ <div class="keyword none">
+ <ul id="cmmTotalSearchAuto">
+ </ul>
+ <div class="keyword_footer">
+ <button class="btn_close" title="연관검색 닫기버튼">닫기</button>
+ </div>
+ </div>
+ <!-- keyword -->
+ </div>
+ <div class="recommend"> <strong>인기검색어</strong>
+ <ul class="trendsKeyword">
+ </ul>
+ </div>
+ </div>
+ <button type="button" class="close_is btn_close" title="통합검색 닫기"><em class="blind">닫기버튼</em></button>
+ </div>
+ <div class="isbg"></div>
+ </div>
+ <!-- Integrated Search end -->
+ </li>
+ <li class="gnb_sitemap">
+ <a href="javascript:void(0);" title="사이트맵"><em>사이트맵</em></a>
+ </li>
+ </ul>
+ </div>
+ <!-- member menu end -->
+
+
+
+</header>
+<!-- sitemap start -->
+<div class="sitemap_wrap" id="sitemap_wrap">
+ <c:if test="${!empty loginVO }">
+ <p class="login_info"><strong>${loginVO.name }</strong><span>님</span></p>
+ </c:if>
+ <div class="sitemap_top">
+ <ul class="forM">
+ <c:if test="${empty loginVO }">
+ <li class="gnb_login">
+ <a href="javascript:void(0);" class="a_login" title="로그인"><em>로그인</em></a>
+ </li>
+ </c:if>
+ <c:if test="${not empty loginVO }">
+ <li class="gnb_logout">
+ <a href="<c:url value='/uat/uia/actionLogout.do'/>" title="로그아웃"><em>로그아웃</em></a>
+ </li>
+ <li class="gnb_mypage">
+ <c:choose>
+ <c:when test="${fn:contains(loginVO.authorCode, 'ROLE_USER') }">
+ <a href="<c:url value='/mbe/emplyr/mypage/saveView.do'/>" title="마이페이지"><em>마이페이지</em></a>
+ </c:when>
+ <c:otherwise>
+ <a href="<c:url value='/mbe/entrps/mypage/saveView.do'/>" title="마이페이지"><em>마이페이지</em></a>
+ </c:otherwise>
+ </c:choose>
+ </li>
+ <c:if test="${fn:contains(loginVO.authorCode, 'ROLE_ADMIN') }">
+ <li class="gnb_admin">
+ <a href="<c:url value='/admin/index.do'/>" title="관리자"><em>관리자</em></a>
+ </li>
+ </c:if>
+ </c:if>
+ <li class="gnb_cart">
+ <a href="<c:url value="/mrk/cart/list.do"/>" title="장바구니"><em>장바구니</em></a>
+ </li>
+ </ul>
+ <button type="button" class="close_sitemap btn_close" title="사이트맵 닫기"><em class="blind">사이트맵 닫기버튼</em>
+ </button>
+ </div>
+ <div class="sitemap_left">
+ <ul>
+ <c:forEach var="depth1" items="${menuList }">
+ <c:if test="${depth1.upperMenuNo eq userUpperMenuNo }">
+ <li class="depth1" >
+ <c:choose>
+ <c:when test="${depth1.childCnt > 0 }">
+ <strong class="sitemap_button">${depth1.menuNm }</strong>
+ <div class="submenu">
+ <ul class="depth2">
+ <c:forEach var="depth2" items="${menuList }">
+ <c:if test="${depth2.upperMenuNo eq depth1.menuNo }">
+ <li>
+ <a href="<c:url value='${depth2.progrUrl }'/>" title="${depth2.menuNm }">
+ <c:choose>
+ <c:when test="${depth2.menuNo eq 'PROGR_000000001341' }">
+ <!-- TS검사소 체험신청 -->
+ ${fn:replace(depth2.menuNm, 'TS', '<span class="tsimg">TS</span>') }
+ </c:when>
+ <c:otherwise>
+ ${depth2.menuNm }
+ </c:otherwise>
+ </c:choose>
+ </a>
+ <c:if test="${depth2.childCnt > 0 }">
+ <ul class="depth3">
+ <c:forEach var="depth3" items="${menuList }">
+ <c:if test="${depth3.upperMenuNo eq depth2.menuNo }">
+ <li>
+ <a href="<c:url value='${depth3.progrUrl }'/>" title="${depth3.menuNm }">
+ <c:choose>
+ <c:when test="${depth3.menuNo eq 'PROGR_000000001341' }">
+ <!-- TS검사소 체험신청 -->
+ ${fn:replace(depth3.menuNm, 'TS', '<span class="tsimg">TS</span>') }
+ </c:when>
+ <c:otherwise>
+ ${depth3.menuNm }
+ </c:otherwise>
+ </c:choose>
+ </a>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </c:if>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </div>
+ </c:when>
+ <c:otherwise>
+ <a class="sitemap_button no_child" href="<c:url value="${depth1.progrUrl}"/>">${depth1.menuNm }</a>
+ </c:otherwise>
+ </c:choose>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </div>
+ <div class="sitemap_right">
+ <div class="cs_wrap">
+ <p>TS튜닝알리고<br> 고객센터</p>
+ <strong>1577-0990</strong>
+ <em>평일 09:00 ~ 18:00<br/> 통화료는 사용자 부담</em>
+ </div>
+ </div>
+ <div class="cloud"><span class="blind">배경이미지(구름이미지)</span></div>
+</div>
+<!-- sitemap end -->
+
+
+<script type="text/javascript">
+$(document).ready(function() {
+ $('.a_login').on('click', function() {
+ location.href = "<c:url value='/uat/uia/egovLoginUsr.do'/>";
+ });
+ // 모바일 체크
+ function Mobile() {
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+ }
+ // 로그인 시 active
+ if ('${loginVO }' != null && '${loginVO }' != '') {
+ $('.gnb_mypage').addClass('active');
+ } else {
+ $('.gnb_mypage').removeClass('active');
+ }
+
+ /* 통합 검색 버튼 이벤트 */
+ $('#btn_cmmSearchTotal').on('click', function() {
+ var searchTotalTerm = $('#searchTotalTerm').val();
+ location.href = '<c:url value="/cmm/search/list.do"/>?searchTerm=' + searchTotalTerm;
+ });
+
+ /* 통합검색어, 연관검색어 이벤트 */
+ $(document).on('keyup', '#searchTotalTerm', function() {
+ const searchTotalTerm = $(this).val();
+ if (searchTotalTerm.length < 2) {
+ $('#cmmTotalSearchAuto').empty();
+ $('#cmmTotalSearchAuto').closest('div').addClass('none');
+ return;
+ }
+ switch (event.keyCode) {
+ case 13: // 엔터
+ location.href = '<c:url value="/cmm/search/list.do"/>?searchTerm=' + searchTotalTerm;
+ break;
+ default:
+ if (searchTotalTerm == '') {
+ $('.is_search .keyword').addClass("none");
+ } else {
+ const params = {
+ 'searchTerm': searchTotalTerm
+ };
+ $.ajax({
+ type: "GET",
+ url: "<c:url value='/cmm/search/api/autoComplete.do'/>",
+ data: params,
+ dataType: "json",
+ timeout: 3000,
+ async: false,
+ success: function(data) {
+ if (data.returnCode == 1) {
+ const result = data.resultSet.result[0].resultDocuments;
+ $('#cmmTotalSearchAuto').empty();
+ $.each(result, function(i, item) {
+ var keyword = item.KEYWORD;
+ var $dom = $('<li><a href="<c:url value='/cmm/search/list.do'/>?searchTerm=' + keyword + '" title="' + keyword + '"><em>' + keyword + '</em></a></li>');
+ $('#cmmTotalSearchAuto').append($dom);
+ });
+
+ $('.is_search .keyword').removeClass("none");
+ } else {
+ alert(data.error);
+ }
+ },
+ error: function(xhr, ajaxSettings, thrownError) {
+ alert("검색을 실패하였습니다.");
+ },
+ });
+ }
+ break;
+ }
+ });
+ //포커스시
+ $(document).on('focusin', '#searchTotalTerm', function() {
+ if ($(this).val() != '') {
+ $('.is_search .keyword').removeClass("none");
+ }
+ });
+ // 연관검색어 닫기 버튼
+ $(".keyword_footer .btn_close").click(function(){
+ $('.is_search .keyword').addClass("none");
+ });
+})
+/* 인기검색어 */
+function fnc_trendsKeyword() {
+ $('.trendsKeyword').empty();
+ $.ajax({
+ type: "GET",
+ url: "<c:url value='/cmm/search/api/trendsKeyword.do'/>",
+ dataType: "json",
+ timeout: 3000,
+ async: false,
+ success: function(data) {
+ if (data.returnCode == 1) {
+ const result = data.resultSet.result[0].resultDocuments;
+ $('#trendsKeyword').empty();
+ $.each(result, function(i, item) {
+ var dom = '<li><a href="javascript:void(0);" title="' + item.KEYWORD + '" onclick="location.href=\'<c:url value='/cmm/search/list.do'/>?searchTerm=' + item.KEYWORD + '\'">#' + item.KEYWORD + '</a></li>';
+ $('.trendsKeyword').append(dom);
+ });
+ } else {
+ alert(data.error);
+ }
+ },
+ error: function(xhr, ajaxSettings, thrownError) {
+ alert("검색을 실패하였습니다.");
+ },
+ });
+}
+</script>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultMenu.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeaderSubMenu.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeaderSubMenu.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeaderSubMenu.jsp (revision 7)
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+<%@ page trimDirectiveWhitespaces="true"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<c:set value="${sessionScope.loginVO}" var="loginVO" />
+<c:set value="${sessionScope.menuNaviVO}" var="menuNaviList" />
+<c:set value="${sessionScope.menuDepthVO}" var="menuDepthList" />
+
+<c:set value="" var="selMenuNm"/>
+<c:set value="" var="selMenuDc"/>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/defaultHeaderSubMenu.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/mypageSubMenu.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/mypageSubMenu.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/mypageSubMenu.jsp (revision 7)
@@ -0,0 +1,102 @@
+<%
+ /**
+ * 마이페이지
+ *
+ */
+%>
+<%@ 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 value="${sessionScope.menuVO}" var="menuList"/>
+<c:set value="${sessionScope.loginVO}" var="loginVO"/>
+<%-- <c:set value="${sessionScope.selMenuNo}" var="selMenuNo"/> --%>
+<c:set value="${sessionScope.menuNaviVO}" var="menuNaviList" />
+<c:forEach var="item" items="${menuList }">
+ <c:if test="${item.menuGb eq 'M' and item.upperMenuNo eq 'ROOT'}">
+ <c:set value="${item.menuNo }" var="userUpperMenuNo" />
+ </c:if>
+</c:forEach>
+
+<!-- mypage menu start -->
+<div class="mypage_lnb" id="myumenu">
+<h2>mypage</h2>
+ <ul>
+ <c:forEach var="depth1" items="${menuList }">
+ <c:if test="${depth1.upperMenuNo eq userUpperMenuNo }">
+ <c:set var="depth1Active" value=""/>
+ <c:forEach var="navi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${depth1.menuNo eq navi.menuNo }">
+ <c:set var="depth1Active" value=" active"/>
+ </c:if>
+ </c:forEach>
+ <li class="my_deb1 ${depth1Active }">
+ <a href="<c:url value='${depth1.progrUrl }'/>" title="${depth1.menuNm }">${depth1.menuNm }</a>
+ <c:if test="${depth1.childCnt > 0 }">
+ <ul class="mysub">
+ <c:forEach var="depth2" items="${menuList }">
+ <c:if test="${depth2.upperMenuNo eq depth1.menuNo }">
+ <c:set var="depth2Active" value=""/>
+ <c:forEach var="navi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${depth2.menuNo eq navi.menuNo }">
+ <c:set var="depth2Active" value=" active"/>
+ </c:if>
+ </c:forEach>
+ <li class="${depth2Active }">
+ <a href="<c:url value='${depth2.progrUrl }'/>" title="${depth2.menuNm }">
+ <c:choose>
+ <c:when test="${depth2.menuNo eq 'PROGR_000000001845' }">
+ <!-- TS검사소 체험신청 -->
+ ${fn:replace(depth2.menuNm, 'TS', '<span class="tsimg">TS</span>') }
+ </c:when>
+ <c:otherwise>
+ ${depth2.menuNm }
+ </c:otherwise>
+ </c:choose>
+ </a>
+ <c:if test="${depth2.childCnt > 0 }">
+ <ul class="depth3">
+ <c:forEach var="depth3" items="${menuList }">
+ <c:if test="${depth3.upperMenuNo eq depth2.menuNo }">
+ <c:set var="depth3Active" value=""/>
+ <c:forEach var="navi" items="${menuNaviList }" varStatus="status">
+ <c:if test="${depth3.menuNo eq navi.menuNo }">
+ <c:set var="depth3Active" value=" active"/>
+ </c:if>
+ </c:forEach>
+ <a class="${depth3Active }" href="<c:url value='${depth3.progrUrl }'/>" title="${depth3.menuNm }">
+ <c:choose>
+ <c:when test="${depth3.menuNo eq 'PROGR_000000001845' }">
+ <!-- TS검사소 체험신청 -->
+ ${fn:replace(depth3.menuNm, 'TS', '<span class="tsimg">TS</span>') }
+ </c:when>
+ <c:otherwise>
+ ${depth3.menuNm }
+ </c:otherwise>
+ </c:choose>
+ </a>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </c:if>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+ </c:if>
+ </li>
+ </c:if>
+ </c:forEach>
+ </ul>
+</div>
+
+<script>
+//마이페이지 메뉴 바로가기 추가 1126
+$(".skip").append("<a href='#myumenu' title='마이페이지 메뉴 바로가기' >마이페이지 메뉴 바로가기</a>")
+</script>
+
+<!-- mypage menu end -->
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/tiles/template/mypageSubMenu.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/EgovMainView.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/EgovMainView.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/EgovMainView.jsp (revision 7)
@@ -0,0 +1,91 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title><spring:message code="comSymMnuMpm.mainView.mainViewTitle"/></title><!-- 행정안전부 공통서비스 테스트 사이트 -->
+<script language="javascript" src="<c:url value='/js/egovframework/com/main.js' />"></script>
+<script language="javascript">
+function chk_all(val) {
+
+ var arr_chk = document.getElementsByName("chk");
+
+ if (val == "Y") {
+
+ for(i=0;i< arr_chk.length; i++) {
+ arr_chk[i].checked =true;
+ }
+ }
+ else if(val == "N") {
+ for(i=0;i< arr_chk.length; i++) {
+ arr_chk[i].checked =false;
+ }
+ }
+}
+
+</script>
+</head>
+
+<body topmargin="0" leftmargin="0">
+
+<!-- header -->
+<c:import url="./head.jsp" />
+
+<!-- contents -->
+<div>
+
+ <!-- 상단 -->
+ <div class="mp_top">
+ <div class="l"><!-- left layout -->
+ <h3 class="m_tit01 mt15"><spring:message code="comSymMnuMpm.mainView.selectBBSListPortlet"/></h3><!-- 생성된 게시판 목록 -->
+ <div style="height:150px">
+ <c:import url="/cop/bbs/selectBBSListPortlet.do" />
+ </div>
+
+ <h3 class="m_tit01 mt15"><spring:message code="comSymMnuMpm.mainView.selectCommuMasterListPortlet"/></h3><!-- 생성된 커뮤니티 목록 -->
+ <div style="height:150px">
+ <c:import url="/cop/cmy/selectCommuMasterListPortlet.do" />
+ </div>
+
+ <h3 class="m_tit01 mt15"><spring:message code="comSymMnuMpm.mainView.selectBlogListPortlet"/></h3><!-- 생성된 블로그 목록 -->
+ <div style="height:181px">
+ <c:import url="/cop/bbs/selectBlogListPortlet.do" />
+ </div>
+ </div>
+
+ <div class="r"><!-- right layout -->
+ <!-- 부서일정관리 -->
+ <h3 class="m_tit01 mt15"><spring:message code="comSymMnuMpm.mainView.deptSchdulManageMainList"/></h3><!-- 부서일정관리 -->
+ <div style="height:150px">
+ <c:import charEncoding="utf-8" url="/cop/smt/sdm/EgovDeptSchdulManageMainList.do" ></c:import>
+ </div>
+
+ <!-- 나의일정관리 -->
+ <h3 class="m_tit01 mt15"><spring:message code="comSymMnuMpm.mainView.indvdlSchdulManageMainList"/></h3><!-- 나의일정관리 -->
+ <div style="height:150px">
+ <c:import charEncoding="utf-8" url="/cop/smt/sim/EgovIndvdlSchdulManageMainList.do" ></c:import>
+ </div>
+
+ <h3 class="m_tit01 mt15"><spring:message code="comSymMnuMpm.mainView.exchangeRateInformation"/></h3><!-- 환율정보 -->
+ <iframe src="http://fx.kebhana.com/fxportal/jsp/RS/DEPLOY_EXRATE/fxrate_all.html" width="100%" height="181" border="0" frameborder="no" scrolling="no" marginwidth="0" hspace="0" vspace="0"></iframe>
+ </div>
+ </div>
+
+ <!-- 배너 -->
+ <h3 class="m_tit01 mt15"><spring:message code="comSymMnuMpm.mainView.getBannerImage"/></h3><!-- 배너 -->
+ <div class="mp_bn">
+ <c:import url="/uss/ion/bnr/getBannerImage.do" charEncoding="utf-8">
+ <c:param name="atchFileId" value="${banner.bannerImageFile}" />
+ </c:import>
+ </div>
+
+<!-- bottom -->
+<c:import url="./main_bottom.jsp" />
+</div><!-- contents -->
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/EgovMainView.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/accessDenied.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/accessDenied.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/accessDenied.jsp (revision 7)
@@ -0,0 +1,81 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" isErrorPage="true"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+
+<%@ page import="org.springframework.security.core.context.SecurityContextHolder" %>
+<%@ page import="org.springframework.security.core.Authentication" %>
+<%@ page import="org.springframework.security.core.userdetails.UserDetails" %>
+<%@ page import="org.springframework.security.core.userdetails.UserDetailsService" %>
+
+<%@ page import="egovframework.rte.fdl.string.EgovStringUtil" %>
+<%@ page import="java.lang.String" %>
+<%
+ boolean authenticateFail = false;
+ if(request.getAttribute("authenticateFail")!=null && !request.getAttribute("authenticateFail").toString().equals("")){
+ authenticateFail = true;
+ }
+
+ boolean authFail = false;
+ if(request.getAttribute("authFail")!=null && !request.getAttribute("authFail").toString().equals("")){
+ authFail = true;
+ }
+
+ String target = EgovStringUtil.null2void((String)request.getAttribute("target"));
+ target = target.equals("") ? "_top" : target;
+%>
+<c:set var="pageTitle"><spring:message code="comCmmErr.accessDenied.code"/></c:set><!-- 사용자접근권한 에러 -->
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title><spring:message code="title.html"/></title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ if('<%=authenticateFail%>' == 'true' ){
+ document.dummyForm.target="_top";
+ document.dummyForm.action = "<c:url value='/empaftererrorpage.do'/>";
+ document.dummyForm.submit();
+ }else if('<%=authFail%>' == 'true'){
+ document.dummyForm.target="<%=target%>";
+ document.dummyForm.action = "<c:url value='/empaftererrorpage.do'/>";
+ document.dummyForm.submit();
+ }else{
+ //document.location.href = "<c:url value='/empaftererrorpage.do'/>";
+ history.back(-2);
+ }
+}
+</script>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: ppx solid #666; padding: 20px;">
+
+ <p style="color:red; margin-bottom: 8px; ">${pageTitle}<br /></p>
+
+ <div class="boxType1" style="width: 700px;">
+ <div class="box">
+ <div class="error">
+ <p class="title">
+ ${SPRING_SECURITY_403_EXCEPTION}
+ <br>
+ <%
+ Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+ Object principal = auth.getPrincipal();
+ if (principal instanceof UserDetails) {
+ String username = ((UserDetails) principal).getUsername();
+ String password = ((UserDetails) principal).getPassword();
+ out.println("Account : " + username.toString() + "<br>");
+ }
+ %>
+ </p>
+ <p class="cont mb20">${pageTitle}<br /></p>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/accessDenied.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rgm/EgovAuthorGroupManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rgm/EgovAuthorGroupManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rgm/EgovAuthorGroupManage.jsp (revision 7)
@@ -0,0 +1,303 @@
+<%
+ /**
+ * @Class Name : EgovAuthorGroupManage.java
+ * @Description : EgovAuthorGroupManage List 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.23 Lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author Lee.m.j
+ * @since 2009.03.23
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comCopSecRgm.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 권한그룹관리 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javaScript" language="javascript" defer="defer">
+function fncCheckAll() {
+ var checkField = document.listForm.delYn;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fncManageChecked() {
+
+ var resultCheck = false;
+
+ var checkField = document.listForm.delYn;
+ var checkId = document.listForm.checkId;
+ var selectAuthor = document.listForm.authorManageCombo;
+ var booleanRegYn = document.listForm.regYn;
+ var listMberTyCode = document.listForm.mberTyCode;
+
+ var returnId = "";
+ var returnAuthor = "";
+ var returnRegYn = "";
+ var returnmberTyCode = "";
+
+ var checkedCount = 0;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkedCount++;
+ checkField[i].value = checkId[i].value;
+ if(returnId == "") {
+ returnId = checkField[i].value;
+ returnAuthor = selectAuthor[i].value;
+ returnRegYn = booleanRegYn[i].value;
+ returnmberTyCode = listMberTyCode[i].value;
+ }
+ else {
+ returnId = returnId + ";" + checkField[i].value;
+ returnAuthor = returnAuthor + ";" + selectAuthor[i].value;
+ returnRegYn = returnRegYn + ";" + booleanRegYn[i].value;
+ returnmberTyCode = returnmberTyCode + ";" + listMberTyCode[i].value;
+
+ }
+ }
+ }
+
+ if(checkedCount > 0)
+ resultCheck = true;
+ else {
+ alert("<spring:message code="comCopSecRgm.list.validate.alert.notSelect" />");//선택된 항목이 없습니다.
+ resultCheck = false;
+ }
+
+ } else {
+ if(document.listForm.delYn.checked == false) {
+ alert("<spring:message code="comCopSecRgm.list.validate.alert.notSelect" />");//선택 항목이 없습니다.
+ resultCheck = false;
+ }
+ else {
+ returnId = checkId.value;
+ returnAuthor = selectAuthor.value;
+ returnRegYn = booleanRegYn.value;
+ returnmberTyCode = listMberTyCode.value;
+
+ resultCheck = true;
+ }
+ }
+ } else {
+ alert("<spring:message code="comCopSecRgm.list.validate.alert.noResult" />");//조회된 결과가 없습니다.
+ }
+
+ document.listForm.userIds.value = returnId;
+ document.listForm.authorCodes.value = returnAuthor;
+ document.listForm.regYns.value = returnRegYn;
+ document.listForm.mberTyCodes.value = returnmberTyCode;
+ return resultCheck;
+}
+
+function fncSelectAuthorGroupList(pageNo){
+ //document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/rgm/EgovAuthorGroupList.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddAuthorGroupInsert() {
+
+ if(!fncManageChecked()) return;
+
+ if(confirm("<spring:message code="comCopSecRgm.list.validate.confirm.regist" />")) {//등록하시겠습니까?
+
+ document.listForm.action = "<c:url value='/sec/rgm/EgovAuthorGroupInsert.do'/>";
+ document.listForm.submit();
+ }
+}
+
+function fncAuthorGroupDeleteList() {
+
+ if(!fncManageChecked()) return;
+
+ if(confirm("<spring:message code="comCopSecRgm.list.validate.confirm.delete" />")) { //삭제하시겠습니까?
+ document.listForm.action = "<c:url value='/sec/rgm/EgovAuthorGroupDelete.do'/>";
+ document.listForm.submit();
+ }
+}
+
+function linkPage(pageNo){
+ //document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/rgm/EgovAuthorGroupList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectAuthorGroupPop() {
+
+ if(document.listForm.searchCondition.value == '3') {
+ window.open("<c:url value='/sec/gmt/EgovGroupSearchList.do'/>","notice","height=500, width=485, top=50, left=20, scrollbars=no, resizable=no");
+ } else {
+ alert("<spring:message code="comCopSecRgm.list.validate.alert.selectGroup" />");//그룹을 선택하세요.
+ return;
+ }
+
+ /*
+ var url = "<c:url value='/sec/gmt/EgovGroupSearchView.do'/>";
+ var varParam = new Object();
+ var openParam = "dialogWidth:500px;dialogHeight:485px;scroll:no;status:no;center:yes;resizable:yes;";
+ var retVal;
+
+ if(document.listForm.searchCondition.value == '3') {
+ retVal = window.showModalDialog(url, varParam, openParam);
+ if(retVal) {
+ document.listForm.searchKeyword.value = retVal;
+ }
+ } else {
+ alert("그룹을 선택하세요.");
+ return;
+ }
+ */
+
+}
+
+function onSearchCondition() {
+ document.listForm.searchKeyword.value = "";
+ if(document.listForm.searchCondition.value == '3') {
+ document.listForm.searchKeyword.readOnly = true;
+ } else {
+ document.listForm.searchKeyword.readOnly = false;
+ }
+}
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectAuthorGroupList('1');
+ }
+}
+
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form name="listForm" action="${pageContext.request.contextPath}/sec/ram/EgovAuthorGroupList.do" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 권한그룹관리 목록 -->
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <!-- 조회조건 -->
+ <li>
+ <select name="searchCondition" onchange="onSearchCondition()" title="<spring:message code="title.searchCondition" /> <spring:message code="input.cSelect" />">
+ <option value="1" <c:if test="${authorGroupVO.searchCondition == '1'}">selected</c:if> ><spring:message code="comCopSecRgm.searchCondition.userId" /></option><!-- 사용자 ID -->
+ <option value="2" <c:if test="${authorGroupVO.searchCondition == '2'}">selected</c:if> ><spring:message code="comCopSecRgm.searchCondition.userNm" /></option><!-- 사용자 명- -->
+ <option value="3" <c:if test="${authorGroupVO.searchCondition == '3'}">selected</c:if> ><spring:message code="comCopSecRgm.searchCondition.group" /></option><!-- 그룹 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="155" >
+
+ <input type="button" class="s_btn" onClick="fncSelectAuthorGroupPop()" value="<spring:message code="comCopSecRgm.btn.groupInquire" />" title="<spring:message code="comCopSecRgm.btn.groupInquire" /> <spring:message code="input.button" />" /><!-- 그룹조회팝업 -->
+ <input type="button" class="s_btn" onClick="fncSelectAuthorGroupList('1')" value="<spring:message code="button.inquire" />" title="<spring:message code="button.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+
+ <input type="button" class="s_btn" onClick="fncAuthorGroupDeleteList()" value="<spring:message code="title.delete" />" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" /><!-- 삭제 -->
+ <input type="button" class="s_btn" onClick="fncAddAuthorGroupInsert()" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="button.create" />" /><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: 10%;">
+ <col style="width: 10%;">
+ <col style="width: 10%;">
+ <col style="width: 20%;">
+ <col style="width: 10%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th>
+ <th class="board_th_link"><spring:message code="comCopSecRgm.list.userId" /></th><!-- 사용자 ID -->
+ <th><spring:message code="comCopSecRgm.list.userNm" /></th><!-- 사용자 명 -->
+ <th><spring:message code="comCopSecRgm.list.userType" /></th><!-- 사용자 유형 -->
+ <th><spring:message code="comCopSecRgm.list.author" /></th><!-- 권한 -->
+ <th><spring:message code="comCopSecRgm.list.regYn" /></th><!--등록 여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(authorGroupList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="authorGroup" items="${authorGroupList}" varStatus="status">
+ <tr>
+ <td><input type="checkbox" name="delYn" class="check2" title="선택"><input type="hidden" name="checkId" value="<c:out value="${authorGroup.uniqId}"/>"/></td>
+ <td><c:out value="${authorGroup.userId}"/></td>
+ <td><c:out value="${authorGroup.userNm}"/></td>
+ <td><c:out value="${authorGroup.mberTyNm}"/><input type="hidden" name="mberTyCode" value="${authorGroup.mberTyCode}"/></td>
+ <td><select name="authorManageCombo" title="<spring:message code="comCopSecRgm.list.authorManageCombo" />"> <!-- 권한선택 -->
+ <c:forEach var="authorManage" items="${authorManageList}" varStatus="status">
+ <option value="<c:out value="${authorManage.authorCode}"/>" <c:if test="${authorManage.authorCode == authorGroup.authorCode}">selected</c:if> ><c:out value="${authorManage.authorNm}"/></option>
+ </c:forEach>
+ </select></td>
+ <td><c:out value="${authorGroup.regYn}"/><input type="hidden" name="regYn" value="<c:out value="${authorGroup.regYn}"/>"></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <c:if test="${!empty authorGroupVO.pageIndex }">
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/></ul>
+ </div>
+ </c:if>
+
+</div><!-- end div board -->
+
+<input type="hidden" name="userId"/>
+<input type="hidden" name="userIds"/>
+<input type="hidden" name="authorCodes"/>
+<input type="hidden" name="regYns"/>
+<input type="hidden" name="mberTyCodes"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${authorGroupVO.pageIndex}'/>"/>
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rgm/EgovAuthorGroupManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleInsert.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleInsert.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleInsert.jsp (revision 7)
@@ -0,0 +1,167 @@
+<%
+/**
+ * @Class Name : EgovRoleInsert.java
+ * @Description : EgovRoleInsert jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comCopSecRmt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 롤관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="roleManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+function fncSelectRoleList() {
+ var varFrom = document.getElementById("roleManage");
+ varFrom.action = "<c:url value='/sec/rmt/EgovRoleList.do'/>";
+ varFrom.submit();
+}
+
+function fncRoleInsert(form) {
+
+ if(confirm("<spring:message code="common.save.msg" />")){ //저장하시겠습니까?
+ if(!validateRoleManage(form)){
+ return false;
+ }else{
+ form.submit();
+ }
+ }
+}
+
+function fncRoleUpdate() {
+ var varFrom = document.getElementById("roleManage");
+ varFrom.action = "<c:url value='/sec/rmt/EgovRoleUpdate.do'/>";
+
+ if(confirm("<spring:message code="common.save.msg" />")){ //저장하시겠습니까?
+ if(!validateRoleManage(varFrom)){
+ return;
+ }else{
+ varFrom.submit();
+ }
+ }
+}
+
+function fncRoleDelete() {
+ var varFrom = document.getElementById("roleManage");
+ varFrom.action = "<c:url value='/sec/rmt/EgovRoleDelete.do'/>";
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ varFrom.submit();
+ }
+}
+
+</script>
+</head>
+
+<body>
+<form:form commandName="roleManage" method="post" action="${pageContext.request.contextPath}/sec/rmt/EgovRoleInsert.do" onSubmit="fncRoleInsert(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2><!-- 롤관리 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 롤아이디 -->
+ <!--
+ <c:set var="title"><spring:message code="comCopSecRam.list.rollId" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="roleCode" title="${title} ${inputTxt}" size="40" maxlength="50" />
+ <div><form:errors path="roleCode" cssClass="error" /></div>
+ </td>
+ </tr>
+ -->
+ <!-- 롤 명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollNm" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="roleNm" title="${title} ${inputTxt}" size="40" maxlength="50" />
+ <div><form:errors path="roleNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 패턴 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollPtn" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="rolePtn" title="${title} ${inputTxt}" size="40" maxlength="200" />
+ <div><form:errors path="rolePtn" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 설명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollDc" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:textarea path="roleDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="roleDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 타입 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollType" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="roleTyp">
+ <form:options items="${cmmCodeDetailList}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="roleTyp" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 Sort -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollSort" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="roleSort" title="${title} ${inputTxt}" size="40" maxlength="10" />
+ <div><form:errors path="roleSort" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/sec/rmt/EgovRoleList.do'/>" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleInsert.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleUpdate.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleUpdate.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleUpdate.jsp (revision 7)
@@ -0,0 +1,166 @@
+<%
+/**
+ * @Class Name : EgovRoleUpdate.java
+ * @Description : EgovRoleUpdate jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comCopSecRmt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.update" /></title><!-- 롤관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="roleManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+function fncSelectRoleList() {
+ var varFrom = document.getElementById("roleManage");
+ varFrom.action = "<c:url value='/sec/rmt/EgovRoleList.do'/>";
+ varFrom.submit();
+}
+
+function fncRoleUpdate(form) {
+ if(confirm("<spring:message code="common.save.msg" />")){ //저장하시겠습니까?
+ if(!validateRoleManage(form)){
+ return false;
+ }else{
+ form.submit();
+ }
+ }
+}
+
+function fncRoleDelete() {
+ var varFrom = document.getElementById("frmIdDelete");
+ varFrom.action = "<c:url value='/sec/rmt/EgovRoleDelete.do'/>";
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ varFrom.submit();
+ }else{
+ return false;
+ }
+}
+
+</script>
+</head>
+
+<body>
+
+<form:form commandName="roleManage" method="post" action="${pageContext.request.contextPath}/sec/rmt/EgovRoleUpdate.do" onSubmit="fncRoleUpdate(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.update" /></h2><!-- 롤관리 수정 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 롤아이디 -->
+ <c:set var="title"><spring:message code="comCopSecRam.list.rollId" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ ${roleManage.roleCode}
+ </td>
+ </tr>
+ <!-- 롤 명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollNm" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="roleNm" title="${title} ${inputTxt}" size="40" maxlength="50" />
+ <div><form:errors path="roleNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 패턴 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollPtn" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="rolePtn" title="${title} ${inputTxt}" size="40" maxlength="200" />
+ <div><form:errors path="rolePtn" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 설명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollDc" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:textarea path="roleDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="roleDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 타입 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollType" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="roleTyp">
+ <form:options items="${cmmCodeDetailList}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="roleTyp" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 롤 Sort -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.rollSort" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="roleSort" title="${title} ${inputTxt}" size="40" maxlength="10" />
+ <div><form:errors path="roleSort" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/sec/rmt/EgovRoleList.do'/>" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <button class="btn_s2" onClick="fncRoleDelete();return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></button>
+ <input type="submit" class="s_submit" value="<spring:message code="button.save" />" title="<spring:message code="button.save" /> <spring:message code="button.save" />" />
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input type="hidden" name="roleCode" value="<c:out value='${roleManage.roleCode}'/>"/>
+<input type="hidden" name="searchCondition" value="<c:out value='${roleManageVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${roleManageVO.searchKeyword}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${roleManageVO.pageIndex}'/>"/>
+</form:form>
+
+<form id="frmIdDelete" name="frmDelete" method="post">
+<input type="hidden" name="roleCode" value="<c:out value='${roleManage.roleCode}'/>"/>
+<input type="hidden" name="searchCondition" value="<c:out value='${roleManageVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${roleManageVO.searchKeyword}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${roleManageVO.pageIndex}'/>"/>
+</form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleUpdate.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleManage.jsp (revision 7)
@@ -0,0 +1,234 @@
+<%
+/**
+ * @Class Name : EgovRoleManage.java
+ * @Description : EgovRoleManage jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.21
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comCopSecRmt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 롤관리 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javaScript" language="javascript" defer="defer">
+function fncCheckAll() {
+ var checkField = document.listForm.delYn;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fncManageChecked() {
+
+ var checkField = document.listForm.delYn;
+ var checkId = document.listForm.checkId;
+ var returnValue = "";
+ var returnBoolean = false;
+ var checkCount = 0;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkCount++;
+ checkField[i].value = checkId[i].value;
+ if(returnValue == "")
+ returnValue = checkField[i].value;
+ else
+ returnValue = returnValue + ";" + checkField[i].value;
+ }
+ }
+ if(checkCount > 0)
+ returnBoolean = true;
+ else {
+ alert("<spring:message code="comCopSecRmt.validate.groupSelect"/>"); //선택된 롤이 없습니다.
+ returnBoolean = false;
+ }
+ } else {
+ if(document.listForm.delYn.checked == false) {
+ alert("<spring:message code="comCopSecRmt.validate.groupSelect"/>"); //선택된 롤이 없습니다.
+ returnBoolean = false;
+ }
+ else {
+ returnValue = checkId.value;
+ returnBoolean = true;
+ }
+ }
+ } else {
+ alert("<spring:message code="comCopSecRmt.validate.groupSelectResult"/>"); //조회된 결과가 없습니다.
+ }
+
+ document.listForm.roleCodes.value = returnValue;
+ return returnBoolean;
+}
+
+function fncSelectRoleList(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/rmt/EgovRoleList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectRole(roleCode) {
+ document.listForm.roleCode.value = roleCode;
+ document.listForm.action = "<c:url value='/sec/rmt/EgovRole.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddRoleInsert() {
+ location.href = "<c:url value='/sec/rmt/EgovRoleInsertView.do'/>";
+}
+
+function fncRoleListDelete() {
+ if(fncManageChecked()) {
+ if(confirm("삭제하시겠습니까?")) { //삭제하시겠습니까?
+ document.listForm.action = "<c:url value='/sec/rmt/EgovRoleListDelete.do'/>";
+ document.listForm.submit();
+ }
+ }
+}
+
+function fncAddRoleView() {
+ document.listForm.action = "<c:url value='/sec/rmt/EgovRoleUpdate.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/rmt/EgovRoleList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectRoleList('1');
+ }
+}
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form name="listForm" action="${pageContext.request.contextPath}/sec/rmt/EgovRoleList.do" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 롤관리 목록 -->
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><div style="line-height:4px;"> </div><div><spring:message code="comCopSecRmt.searchCondition.searchKeywordText" /> : </div></li><!-- 롤명-->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${roleManageVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" onClick="fncSelectRoleList(1);return false;"/><!-- 조회 -->
+ <input type="button" class="s_btn" onClick="fncRoleListDelete()" value="<spring:message code="title.delete" />" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" /><!-- 삭제 -->
+ <span class="btn_b"><a href="<c:url value='/sec/rmt/EgovRoleInsertView.do'/>" onClick="javascript:fncAddRoleInsert();" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 3%;">
+ <col style="width: 12%;">
+ <col style="width: 25%;">
+ <col style="width: 7%;">
+ <col style="width: 7%;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ <col style="width: 5%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th><!-- 번호 -->
+ <th class="board_th_link"><spring:message code="comCopSecRam.list.rollId" /></th><!-- 롤 ID -->
+ <th><spring:message code="comCopSecRam.list.rollNm" /></th><!-- 롤 명 -->
+ <th><spring:message code="comCopSecRam.list.rollType" /></th><!-- 롤 타입 -->
+ <th><spring:message code="comCopSecRam.list.rollSort" /></th><!-- 롤 Sort -->
+ <th><spring:message code="comCopSecRam.list.rollDc" /></th><!-- 롤 설명 -->
+ <th><spring:message code="table.regdate" /></th><!-- 등록일자 -->
+ <th></th><!-- -->
+
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(roleList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="role" items="${roleList}" varStatus="status">
+ <tr>
+ <td><input type="checkbox" name="delYn" class="check2" title="선택"><input type="hidden" name="checkId" value="<c:out value="${role.roleCode}"/>" /></td>
+ <td><a href="<c:url value='/sec/rmt/EgovRoleList.do'/>?roleCode=${role.roleCode}" onclick="javascript:fncSelectRole('<c:out value="${role.roleCode}"/>');return false;"><c:out value="${role.roleCode}"/></a></td>
+ <td class="left"><c:out value="${role.roleNm}"/></td>
+ <td><c:out value="${role.roleTyp}"/></td>
+ <td><c:out value="${role.roleSort}"/></td>
+ <td class="left"><c:out value="${role.roleDc}"/></td>
+ <td><c:out value="${fn:substring(role.roleCreatDe,0,10)}"/></td>
+ <td><a href="<c:url value='/sec/rmt/EgovRoleList.do'/>?roleCode=${role.roleCode}" onclick="javascript:fncSelectRole('<c:out value="${role.roleCode}"/>');return false;s"><img src="<c:url value='/images/egovframework/com/cmm/btn/btn_search.gif'/>" align="middle" alt="<spring:message code="title.detail" />" title="<spring:message code="title.detail" />"></a></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <c:if test="${!empty roleManageVO.pageIndex }">
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/></ul>
+ </div>
+ </c:if>
+
+
+</div><!-- end div board -->
+
+<input type="hidden" name="roleCode"/>
+<input type="hidden" name="roleCodes"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${roleManageVO.pageIndex}'/>"/>
+<input type="hidden" name="searchCondition"/>
+</form:form>
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/rmt/EgovRoleManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupManage.jsp (revision 7)
@@ -0,0 +1,225 @@
+<%
+ /**
+ * @Class Name : EgovGroupManage.java
+ * @Description : EgovGroupManage List 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comCopSecGmt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 그룹관리 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+function fncCheckAll() {
+ var checkField = document.listForm.delYn;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fncManageChecked() {
+
+ var checkField = document.listForm.delYn;
+ var checkId = document.listForm.checkId;
+ var returnValue = "";
+ var returnBoolean = false;
+ var checkCount = 0;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkCount++;
+ checkField[i].value = checkId[i].value;
+
+ if(returnValue == "")
+ returnValue = checkField[i].value;
+ else
+ returnValue = returnValue + ";" + checkField[i].value;
+ }
+ }
+ if(checkCount > 0)
+ returnBoolean = true;
+ else {
+ alert("<spring:message code="comCopSecGmt.validate.groupSelect" />");//선택된 그룹이 없습니다.
+ returnBoolean = false;
+ }
+ } else {
+ if(document.listForm.delYn.checked == false) {
+ alert("<spring:message code="comCopSecGmt.validate.groupSelect" />");//선택된 그룹이 없습니다.
+ returnBoolean = false;
+ }
+ else {
+ returnValue = checkId.value;
+ returnBoolean = true;
+ }
+ }
+ } else {
+ alert("<spring:message code="comCopSecGmt.validate.groupSelectResult" />");//조회된 결과가 없습니다.
+ }
+
+ document.listForm.groupIds.value = returnValue;
+
+ return returnBoolean;
+}
+
+function fncSelectGroupList(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/gmt/EgovGroupList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectGroup(groupId) {
+ document.listForm.groupId.value = groupId;
+ document.listForm.action = "<c:url value='/sec/gmt/EgovGroup.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddGroupInsert() {
+ location.replace("<c:url value='/sec/gmt/EgovGroupInsertView.do'/>");
+}
+
+function fncGroupListDelete() {
+ if(fncManageChecked()) {
+ if(confirm("<spring:message code="comCopSecGmt.validate.confirm.delete" />")) {//삭제하시겠습니까?
+ document.listForm.action = "<c:url value='/sec/gmt/EgovGroupListDelete.do'/>";
+ document.listForm.submit();
+ }
+ }
+}
+
+function linkPage(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/gmt/EgovGroupList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectGroupList('1');
+ }
+}
+</script>
+
+</head>
+
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form name="listForm" action="${pageContext.request.contextPath}/sec/gmt/EgovGroupList.do" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 그룹관리 목록 -->
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><div style="line-height:4px;"> </div><div><spring:message code="comCopSecGmt.searchCondition.searchKeywordText" /> : </div></li><!-- 그룹 명 -->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ <input type="button" class="s_btn" onClick="fncGroupListDelete()" value="<spring:message code="title.delete" />" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" /><!-- 삭제 -->
+ <span class="btn_b"><a href="<c:url value='/sec/gmt/EgovGroupInsertView.do'/>" onClick="javascript:fncAddGroupInsert();" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 3%;">
+ <col style="width: 22%;">
+ <col style="width: 26%;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ <col style="width: 5%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th><!-- 번호 -->
+ <th class="board_th_link"><spring:message code="comCopSecGmt.list.groupId" /></th><!-- 그룹 ID -->
+ <th><spring:message code="comCopSecGmt.list.groupNm" /></th><!-- 그룹 명 -->
+ <th><spring:message code="comCopSecGmt.list.groupDc" /></th><!-- 설명 -->
+ <th><spring:message code="table.regdate" /></th><!-- 등록일자 -->
+ <th></th>
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(groupList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="group" items="${groupList}" varStatus="status">
+ <tr>
+ <td><input type="checkbox" name="delYn" class="check2" title="선택"><input type="hidden" name="checkId" value="<c:out value="${group.groupId}"/>" /></td>
+ <td><a href="<c:url value='/sec/gmt/EgovGroup.do?groupId=${group.groupId}'/>" onclick="javascript:fncSelectGroup('<c:out value="${group.groupId}"/>')"><c:out value="${group.groupId}"/></a></td>
+ <td><c:out value="${group.groupNm}"/></td>
+ <td><c:out value="${group.groupDc}"/></td>
+ <td><c:out value="${fn:substring(group.groupCreatDe,0,10)}"/></td>
+ <td><a href="<c:url value='/sec/gmt/EgovGroup.do?groupId=${group.groupId}'/>" onclick="javascript:fncSelectGroup('<c:out value="${group.groupId}"/>')"><img src="<c:url value='/images/egovframework/com/cmm/btn/btn_search.gif'/>" align="middle" alt="<spring:message code="title.detail" />" title="<spring:message code="title.detail" />"></a></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <c:if test="${!empty groupManageVO.pageIndex }">
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/></ul>
+ </div>
+ </c:if>
+
+
+</div><!-- end div board -->
+
+<input type="hidden" name="groupId"/>
+<input type="hidden" name="groupIds"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${groupManageVO.pageIndex}'/>"/>
+<input type="hidden" name="searchCondition"/>
+</form:form>
+</body>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupSearch.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupSearch.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupSearch.jsp (revision 7)
@@ -0,0 +1,190 @@
+<%
+ /**
+ * @Class Name : EgovGroupSearch.java
+ * @Description : EgovGroupSearch Search 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.23 lee.m.j 최초 생성
+ * 2016.07.06 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.23
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comCopSecGmt.groupPopup.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 그룹 조회 팝업 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+function fncManageChecked() {
+
+ var checkField = document.listForm.delYn;
+ var checkId = document.listForm.checkId;
+ var returnValue = "";
+ var checkCount = 0;
+ var returnBoolean = false;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkCount++;
+ checkField[i].value = checkId[i].value;
+ returnValue = checkField[i].value;
+ }
+ }
+
+ if(checkCount > 1) {
+ alert("<spring:message code="comCopSecGmt.validate.groupOneSelect"/>");
+ return;
+ } else if(checkCount < 1) {
+ alert("<spring:message code="comCopSecGmt.validate.groupSelect"/>");
+ return;
+ }
+ } else {
+ if(checkField.checked == true) {
+ returnValue = checkId.value;
+ } else {
+ alert("<spring:message code="comCopSecGmt.validate.groupSelect"/>");
+ return;
+ }
+ }
+
+ returnBoolean = true;
+
+ } else {
+ alert("<spring:message code="comCopSecGmt.validate.groupSelectResult"/>");
+ }
+
+ document.listForm.groupId.value = returnValue;
+
+ return returnBoolean;
+
+}
+
+function fncSelectGroupList(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ // document.listForm.action = "<c:url value='/sec/gmt/EgovGroupSearchList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectGroup(groupId) {
+ // window.returnValue = groupId;
+ opener.listForm.searchKeyword.value = groupId;
+ window.close();
+}
+
+function fncSelectGroupConfirm() {
+ if(fncManageChecked()) {
+ opener.listForm.searchKeyword.value = document.listForm.groupId.value;
+ // window.returnValue = document.listForm.groupId.value;
+ window.close();
+ }
+}
+
+function linkPage(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ // document.listForm.action = "<c:url value='/sec/gmt/EgovGroupSearchList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectGroupList('1');
+ }
+}
+</script>
+
+</head>
+
+<body>
+<DIV id="main" style="display:">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form name="listForm" action="${pageContext.request.contextPath}/sec/gmt/EgovGroupSearchList.do" method="post">
+<div class="popup">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 그룹 조회 팝업 -->
+ <!-- 검색영역 -->
+ <div class="pop_search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><div style="line-height:4px;"> </div><div><spring:message code="comCopSecGmt.groupPopup.searchKeywordText" /> : </div></li><!-- 그룹명 -->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${groupManageVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ <input type="button" class="s_btn" onClick="fncSelectGroupConfirm()" value="<spring:message code="button.confirm" />" title="<spring:message code="button.confirm" /> <spring:message code="input.button" />" /><!-- 확인 -->
+
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="pop_board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 33%;">
+ <col style="width: 30%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th></th><!-- 선택 -->
+ <th class="board_th_link"><spring:message code="comCopSecGmt.groupPopupList.groupId" /></th><!-- 그룹 ID -->
+ <th><spring:message code="comCopSecGmt.groupPopupList.groupNm" /></th><!-- 그룹 명 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(groupList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="group" items="${groupList}" varStatus="status">
+ <tr>
+ <td class="lt_text3" nowrap="nowrap"><input type="checkbox" name="delYn" class="check2" title="선택"><input type="hidden" name="checkId" value="<c:out value="${group.groupId}"/>" /></td>
+ <td class="lt_text" nowrap="nowrap"><a href="#LINK" onclick="javascript:fncSelectGroup('<c:out value="${group.groupId}"/>')"><c:out value="${group.groupId}"/></a></td>
+ <td class="lt_text" nowrap="nowrap"><c:out value="${group.groupNm}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <c:if test="${!empty groupManageVO.pageIndex }">
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/></ul>
+ </div>
+ </c:if>
+
+
+</div><!-- end div board -->
+
+
+<input type="hidden" name="groupId"/>
+<input type="hidden" name="groupIds"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${groupManageVO.pageIndex}'/>"/>
+<input type="hidden" name="searchCondition"/>
+</form:form>
+
+
+</DIV>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupSearch.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupInsert.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupInsert.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupInsert.jsp (revision 7)
@@ -0,0 +1,107 @@
+<%
+/**
+ * @Class Name : EgovAuthorInsert.java
+ * @Description : EgovAuthorInsert jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+ %>
+<%@ 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"><spring:message code="comCopSecGmt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 그룹관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="groupManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+function fncSelectGroupList() {
+ var varFrom = document.getElementById("groupManage");
+ varFrom.action = "<c:url value='/sec/gmt/EgovGroupList.do'/>";
+ varFrom.submit();
+}
+
+function fncGroupInsert(form) {
+
+ if(confirm("<spring:message code="common.regist.msg" />")){ //등록하시겠습니까?
+ if(!validateGroupManage(form)){
+ return false;
+ }else{
+ form.submit();
+ }
+ }
+}
+
+</script>
+</head>
+
+<body>
+
+<form:form commandName="groupManage" method="post" action="${pageContext.request.contextPath}/sec/gmt/EgovGroupInsert.do" onSubmit="fncGroupInsert(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2><!-- 그룹관리 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 그룹명 -->
+ <c:set var="title"><spring:message code="comCopSecGmt.regist.groupNm" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="groupNm" title="${title} ${inputTxt}" size="40" maxlength="50" />
+ <div><form:errors path="groupNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 설명 -->
+ <c:set var="title"><spring:message code="comCopSecGmt.regist.groupDc" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:textarea path="groupDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="groupDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/sec/gmt/EgovGroupList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupInsert.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupUpdate.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupUpdate.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupUpdate.jsp (revision 7)
@@ -0,0 +1,137 @@
+<%
+/**
+ * @Class Name : EgovAuthorUpdate.java
+ * @Description : EgovAuthorUpdate jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+ %>
+<%@ 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"><spring:message code="comCopSecGmt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.update" /></title><!-- 그룹관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="groupManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+function fncSelectGroupList() {
+ var varFrom = document.getElementById("groupManage");
+ varFrom.action = "<c:url value='/sec/gmt/EgovGroupList.do'/>";
+ varFrom.submit();
+}
+
+function fncGroupUpdate(form) {
+ if(confirm("<spring:message code="common.save.msg" />")){ //저장하시겠습니까?
+ if(!validateGroupManage(form)){
+ return false;
+ }else{
+ form.submit();
+ }
+ }
+}
+
+function fncGroupDelete() {
+ var varFrom = document.getElementById("frmIdDelete");
+ varFrom.action = "<c:url value='/sec/gmt/EgovGroupDelete.do'/>";
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ varFrom.submit();
+ }else{
+ return false;
+ }
+}
+</script>
+</head>
+
+<body>
+
+<form:form commandName="groupManage" method="post" action="${pageContext.request.contextPath}/sec/gmt/EgovGroupUpdate.do" onSubmit="fncGroupUpdate(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2><!-- 그룹관리 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 그룹아이디 -->
+ <c:set var="title"><spring:message code="comCopSecGmt.regist.groupId" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ ${groupManage.groupId}
+ </td>
+ </tr>
+
+ <!-- 그룹명 -->
+ <c:set var="title"><spring:message code="comCopSecGmt.regist.groupNm" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="groupNm" title="${title} ${inputTxt}" size="40" maxlength="50" />
+ <div><form:errors path="groupNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 설명 -->
+ <c:set var="title"><spring:message code="comCopSecGmt.regist.groupDc" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:textarea path="groupDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="groupDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <!-- <span class="btn_s"><a href="#" onClick="fncGroupDelete(); return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></a></span> -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/sec/gmt/EgovGroupList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ <button class="btn_s2" onClick="fncGroupDelete();return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></button><!-- 삭제 -->
+ <input type="submit" class="s_submit" value="<spring:message code="button.save" />" title="<spring:message code="button.save" /> <spring:message code="input.button" />" /><!-- 저장 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input type="hidden" name="groupId" value="<c:out value='${groupManage.groupId}'/>"/>
+<input type="hidden" name="searchCondition" value="<c:out value='${groupManageVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${groupManageVO.searchKeyword}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${groupManageVO.pageIndex}'/>"/>
+</form:form>
+
+<form id="frmIdDelete" name="frmDelete" method="post">
+<input type="hidden" name="groupId" value="<c:out value='${groupManage.groupId}'/>"/>
+<input type="hidden" name="searchCondition" value="<c:out value='${groupManageVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${groupManageVO.searchKeyword}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${groupManageVO.pageIndex}'/>"/>
+</form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/gmt/EgovGroupUpdate.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/pki/EgovCryptoInfo.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/pki/EgovCryptoInfo.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/pki/EgovCryptoInfo.jsp (revision 7)
@@ -0,0 +1,111 @@
+<%
+ /**
+ * @Class Name : EgovCryptoInfo.jsp
+ * @Description : 암호화/복호화 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2018.12.03 신용호 최초 생성
+ *
+ * @author 실행환경 개발팀 홍길동
+ * @since 2018.12.03
+ * @version 3.8
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comSecPki.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 암호화/복호화 -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+</head>
+<body>
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form name="listForm" action="${pageContext.request.contextPath}/sec/pki/EgovCryptoInfo.do" method="post">
+<div class="board">
+ <h1>${pageTitle}</h1><!-- 암호화/복호화 -->
+ <!-- 요청영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><div style="line-height:4px;"> </div><div><spring:message code="comSecPki.cryptoInfo.plainText" />(Plain Text) : </div></li><!-- 원본 문자열 -->
+ <!-- 암복호화 키워드 및 요청버튼 -->
+ <li style="border: 0px solid #d2d2d2;">
+ <input class="s_input" name="plainText" type="text" size="500" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:if test="${plainText eq '' or plainText eq null}"><spring:message code="comSecPki.cryptoInfo.sampleText" /></c:if><c:if test="${plainText ne '' and plainText ne null}"><c:out value="${plainText}"/></c:if>' maxlength="500" style="width:400px;">
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ </li>
+ </ul>
+ </div>
+
+ <!-- 상세내용 -->
+ <table class="popwTable">
+ <caption>${pageTitle}</caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: 80%;">
+ </colgroup>
+ <tbody>
+ <!-- 암호화 방식 -->
+ <tr>
+ <th><spring:message code="comSecPki.cryptoInfo.cryptoType" /></th>
+ <td class="left">ARIA</td>
+ </tr>
+ <!-- 원본문자열 -->
+ <tr>
+ <th><spring:message code="comSecPki.cryptoInfo.plainText" /></th>
+ <td class="left"><c:out value="${plainText}"/></td>
+ </tr>
+ <!-- 원본문자열 길이 -->
+ <tr>
+ <th><spring:message code="comSecPki.cryptoInfo.plainTextLen" /></th>
+ <td class="left"><c:out value="${plainTextLen}"/></td>
+ </tr>
+ <!-- 암호화문자열(Base64) -->
+ <tr>
+ <th><spring:message code="comSecPki.cryptoInfo.cryptText" /></th>
+ <td class="left"><c:out value="${cryptText}"/></td>
+ </tr>
+ <!-- 복호화문자열 -->
+ <tr>
+ <th><spring:message code="comSecPki.cryptoInfo.decryptText" /></th>
+ <td class="left"><c:out value="${decryptText}"/></td>
+ </tr>
+ <!-- 복호화문자열 길이 -->
+ <tr>
+ <th><spring:message code="comSecPki.cryptoInfo.decryptTextLen" /></th>
+ <td class="left"><c:out value="${decryptTextLen}"/></td>
+ </tr>
+
+ </tbody>
+ </table>
+
+
+</div>
+
+</form:form>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/pki/EgovCryptoInfo.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorManage.jsp (revision 7)
@@ -0,0 +1,236 @@
+<%
+ /**
+ * @Class Name : EgovAuthorManage.java
+ * @Description : EgovAuthorManage List 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.01 Lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 실행환경 개발팀 홍길동
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comCopSecRam.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 권한관리 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+function fncCheckAll() {
+ var checkField = document.listForm.delYn;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fncManageChecked() {
+
+ var checkField = document.listForm.delYn;
+ var checkId = document.listForm.checkId;
+ var returnValue = "";
+
+ var returnBoolean = false;
+ var checkCount = 0;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkField[i].value = checkId[i].value;
+ if(returnValue == "")
+ returnValue = checkField[i].value;
+ else
+ returnValue = returnValue + ";" + checkField[i].value;
+ checkCount++;
+ }
+ }
+ if(checkCount > 0)
+ returnBoolean = true;
+ else {
+ alert("<spring:message code="comCopSecRam.validate.authorSelect" />"); //선택된 권한이 없습니다."
+ returnBoolean = false;
+ }
+ } else {
+ if(document.listForm.delYn.checked == false) {
+ alert("<spring:message code="comCopSecRam.validate.authorSelect" />"); //선택된 권한이 없습니다."
+ returnBoolean = false;
+ }
+ else {
+ returnValue = checkId.value;
+ returnBoolean = true;
+ }
+ }
+ } else {
+ alert("<spring:message code="comCopSecRam.validate.authorSelectResult" />"); //조회된 결과가 없습니다.
+ }
+
+ document.listForm.authorCodes.value = returnValue;
+
+ return returnBoolean;
+}
+
+function fncSelectAuthorList(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectAuthor(author) {
+ document.listForm.authorCode.value = author;
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthor.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddAuthorInsert() {
+ location.replace("<c:url value='/sec/ram/EgovAuthorInsertView.do'/>");
+}
+
+function fncAuthorDeleteList() {
+
+ if(fncManageChecked()) {
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorListDelete.do'/>";
+ document.listForm.submit();
+ }
+ }
+}
+
+function fncAddAuthorView() {
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorUpdate.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectAuthorRole(author) {
+ document.listForm.searchKeyword.value = author;
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorRoleList.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorList.do'/>";
+ document.listForm.submit();
+}
+
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectAuthorList('1');
+ }
+}
+
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form name="listForm" action="${pageContext.request.contextPath}/sec/ram/EgovAuthorList.do" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 권한관리 목록 -->
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><div style="line-height:4px;"> </div><div><spring:message code="comCopSecRam.list.searchKeywordText" /> : </div></li><!-- 권한명 -->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li style="border: 0px solid #d2d2d2;">
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${authorManageVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ <input type="button" class="s_btn" onClick="fncAuthorDeleteList()" value="<spring:message code="title.delete" />" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" />
+ <span class="btn_b"><a href="<c:url value='/sec/ram/EgovAuthorInsertView.do'/>" onClick="javascript:fncAddAuthorInsert();" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 33%;">
+ <col style="width: 30%;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ <col style="width: 7%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th><!-- 번호 -->
+ <th class="board_th_link"><spring:message code="comCopSecRam.list.authorRollId" /></th><!-- 권한 ID -->
+ <th><spring:message code="comCopSecRam.list.authorNm" /></th><!-- 권한 명 -->
+ <th><spring:message code="comCopSecRam.list.authorDc" /></th><!-- 설명 -->
+ <th><spring:message code="table.regdate" /></th><!-- 등록일자 -->
+ <th><spring:message code="comCopSecRam.list.authorRoll" /></th><!-- 롤 정보 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(authorList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="author" items="${authorList}" varStatus="status">
+ <tr>
+ <td><input type="checkbox" name="delYn" class="check2" title="선택"><input type="hidden" name="checkId" value="<c:out value="${author.authorCode}"/>" /></td>
+ <td><a href="#LINK" onclick="javascript:fncSelectAuthor('<c:out value="${author.authorCode}"/>')"><c:out value="${author.authorCode}"/></a></td>
+ <td><c:out value="${author.authorNm}"/></td>
+ <td><c:out value="${author.authorDc}"/></td>
+ <td><c:out value="${fn:substring(author.authorCreatDe,0,10)}"/></td>
+ <td><a href="<c:url value='/sec/ram/EgovAuthorRoleList.do'/>?searchKeyword=<c:out value="${author.authorCode}"/>" onclick="javascript:fncSelectAuthorRole('<c:out value="${author.authorCode}"/>')"><img src="<c:url value='/images/egovframework/com/cmm/btn/btn_search.gif'/>" width="15" height="15" align="middle" alt="롤 정보"></a></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <c:if test="${!empty authorManageVO.pageIndex }">
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/></ul>
+ </div>
+ </c:if>
+
+
+</div><!-- end div board -->
+
+
+<input type="hidden" name="authorCode"/>
+<input type="hidden" name="authorCodes"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${authorManageVO.pageIndex}'/>"/>
+<input type="hidden" name="searchCondition" value="1"/>
+</form:form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorInsert.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorInsert.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorInsert.jsp (revision 7)
@@ -0,0 +1,135 @@
+<%
+/**
+ * @Class Name : EgovAuthorInsert.java
+ * @Description : EgovAuthorInsert jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+ %>
+<%@ 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"><spring:message code="comCopSecRam.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 권한관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="authorManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+function fncSelectAuthorList() {
+ var varFrom = document.getElementById("authorManage");
+ varFrom.action = "<c:url value='/sec/ram/EgovAuthorList.do'/>";
+ varFrom.submit();
+}
+
+function fncAuthorInsert(form) {
+ if(confirm("<spring:message code="common.regist.msg" />")){ //등록하시겠습니까?
+ if(!validateAuthorManage(form)){
+ return false;
+ }else{
+ form.submit();
+ }
+ }
+}
+
+function fncAuthorUpdate() {
+ var varFrom = document.getElementById("authorManage");
+ varFrom.action = "<c:url value='/sec/ram/EgovAuthorUpdate.do'/>";
+
+ if(confirm("<spring:message code="common.regist.msg" />")){ //등록하시겠습니까?
+ if(!validateAuthorManage(varFrom)){
+ return;
+ }else{
+ varFrom.submit();
+ }
+ }
+}
+
+function fncAuthorDelete() {
+ var varFrom = document.getElementById("authorManage");
+ varFrom.action = "<c:url value='/sec/ram/EgovAuthorDelete.do'/>";
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ varFrom.submit();
+ }
+}
+</script>
+</head>
+
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="authorManage" action="${pageContext.request.contextPath}/sec/ram/EgovAuthorInsert.do" method="post" onSubmit="fncAuthorInsert(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2><!-- 권한관리 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 권한코드 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.authorCode" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="authorCode" title="${title} ${inputTxt}" size="40" maxlength="30" />
+ <div><form:errors path="authorCode" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 권한명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.authorNm" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="authorNm" title="${title} ${inputTxt}" size="40" maxlength="60" />
+ <div><form:errors path="authorNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 설명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.authorDc" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:textarea path="authorDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="authorDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/sec/ram/EgovAuthorList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorInsert.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorUpdate.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorUpdate.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorUpdate.jsp (revision 7)
@@ -0,0 +1,127 @@
+<%
+/**
+ * @Class Name : egovAuthorUpdate.java
+ * @Description : egovAuthorUpdate jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+ %>
+<%@ 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"><spring:message code="comCopSecRam.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.update" /></title><!-- 권한관리 수정 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="authorManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+function fncSelectAuthorList() {
+ var varFrom = document.getElementById("authorManage");
+ varFrom.action = "<c:url value='/sec/ram/EgovAuthorList.do'/>";
+ varFrom.submit();
+}
+
+function fncAuthorUpdate(form) {
+ if(confirm("<spring:message code="common.update.msg" />")){ //수정하시겠습니까?
+ if(!validateAuthorManage(form)){
+ return false;
+ }else{
+ form.submit();
+ }
+ }
+}
+
+function fncAuthorDelete() {
+ var varFrom = document.getElementById("authorManage");
+ varFrom.action = "<c:url value='/sec/ram/EgovAuthorDelete.do'/>";
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ varFrom.submit();
+ }
+}
+
+</script>
+</head>
+
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="authorManage" action="${pageContext.request.contextPath}/sec/ram/EgovAuthorUpdate.do" method="post" onSubmit="fncAuthorUpdate(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.update" /></h2><!-- 권한관리 수정 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 권한코드 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.authorCode" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="authorCode" title="${title} ${inputTxt}" size="40" maxlength="30" />
+ <div><form:errors path="authorCode" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 권한명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.authorNm" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="authorNm" title="${title} ${inputTxt}" size="40" maxlength="60" />
+ <div><form:errors path="authorNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 설명 -->
+ <c:set var="title"><spring:message code="comCopSecRam.regist.authorDc" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:textarea path="authorDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="authorDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/sec/ram/EgovAuthorList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+<input type="hidden" name="searchCondition" value="<c:out value='${authorManageVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${authorManageVO.searchKeyword}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${authorManageVO.pageIndex}'/>"/>
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorUpdate.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorRoleManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorRoleManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorRoleManage.jsp (revision 7)
@@ -0,0 +1,257 @@
+<%
+/**
+ * @Class Name : EgovAuthorRoleManage.java
+ * @Description : EgovAuthorRoleManage.jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.21
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comCopSecRam.authorRoleList.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 권한롤관리 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+function fncCheckAll() {
+ var checkField = document.listForm.delYn;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fncManageChecked() {
+
+ var checkField = document.listForm.delYn;
+ var checkId = document.listForm.checkId;
+ var checkRegYn = document.listForm.regYn;
+ var returnValue = "";
+ var returnRegYns = "";
+ var checkedCount = 0;
+ var returnBoolean = false;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkedCount++;
+ checkField[i].value = checkId[i].value;
+
+ if(returnValue == "") {
+ returnValue = checkField[i].value;
+ returnRegYns = checkRegYn[i].value;
+ }
+ else {
+ returnValue = returnValue + ";" + checkField[i].value;
+ returnRegYns = returnRegYns + ";" + checkRegYn[i].value;
+ }
+ }
+ }
+
+ if(checkedCount > 0)
+ returnBoolean = true;
+ else {
+ alert("<spring:message code="comCopSecRam.authorRoleList.validate.alert.noSelect" />");//선택된 롤이 없습니다.
+ returnBoolean = false;
+ }
+ } else {
+ if(document.listForm.delYn.checked == false) {
+ alert("<spring:message code="comCopSecRam.authorRoleList.validate.alert.noSelect" />");//선택된 롤이 없습니다.
+ returnBoolean = false;
+ }
+ else {
+ returnValue = checkId.value;
+ returnRegYns = checkRegYn.value;
+
+ returnBoolean = true;
+ }
+ }
+ } else {
+ alert("<spring:message code="comCopSecRam.authorRoleList.validate.alert.noResult" />");//조회된 결과가 없습니다.
+ }
+
+ document.listForm.roleCodes.value = returnValue;
+ document.listForm.regYns.value = returnRegYns;
+
+ return returnBoolean;
+
+}
+
+function fncSelectAuthorRoleList() {
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = "1";
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorRoleList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectAuthorList(){
+ // document.listForm.searchCondition.value = "1";
+ // document.listForm.pageIndex.value = "1";
+
+ //document.listForm.searchKeyword.value = "";
+ //document.listForm.action = "<c:url value='/sec/ram/EgovAuthorList.do'/>";
+ //document.listForm.submit();
+ location.href = "<c:url value='/sec/ram/EgovAuthorList.do'/>";
+}
+
+function fncSelectAuthorRole(roleCode) {
+ document.listForm.roleCode.value = roleCode;
+ document.listForm.action = "<c:url value='/sec/ram/EgovRole.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddAuthorRoleInsert() {
+ if(fncManageChecked()) {
+ if(confirm("<spring:message code="comCopSecRam.authorRoleList.validate.confirm.regist" />")) {//등록하시겠습니까?
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorRoleInsert.do'/>";
+ document.listForm.submit();
+ }
+ } else return;
+}
+
+function linkPage(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/sec/ram/EgovAuthorRoleList.do'/>";
+ document.listForm.submit();
+}
+
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectAuthorRoleList();
+ }
+}
+</script>
+</head>
+<body>
+<div class="board">
+<form:form name="listForm" action="${pageContext.request.contextPath}/sec/ram/EgovAuthorRoleList.do" method="post">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 권한롤관리 목록 -->
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><div style="line-height:4px;"> </div><div><spring:message code="comCopSecRam.regist.authorCode" /> : </div></li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ <input type="button" class="s_btn" value="<spring:message code="button.list" />" onClick="fncSelectAuthorList()" title="<spring:message code="button.list" /> <spring:message code="input.button" />" />
+ <input type="button" class="s_btn" value="<spring:message code="button.create" />" onClick="fncAddAuthorRoleInsert()" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ </li>
+ </ul>
+ </div>
+
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 3%;">
+ <col style="width: 12%;">
+ <col style="width: 20%;">
+ <col style="width: 12%;">
+ <col style="width: 10%;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ <col style="width: 10%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th>
+ <th class="board_th_link"><spring:message code="comCopSecRam.authorRoleList.rollId" /></th><!-- 롤 ID -->
+ <th><spring:message code="comCopSecRam.authorRoleList.rollNm" /></th><!-- 롤 명 -->
+ <th><spring:message code="comCopSecRam.authorRoleList.rollType" /></th><!-- 롤 타입 -->
+ <th><spring:message code="comCopSecRam.authorRoleList.rollSort" /></th><!-- 롤 Sort -->
+ <th><spring:message code="comCopSecRam.authorRoleList.rollDc" /></th><!-- 롤 설명 -->
+ <th><spring:message code="table.regdate" /></th><!--등록일 -->
+ <th><spring:message code="comCopSecRam.authorRoleList.regYn" /></th><!-- 등록여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(authorRoleList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="authorRole" items="${authorRoleList}" varStatus="status">
+ <tr>
+ <td><input type="checkbox" name="delYn" class="check2" title="선택"><input type="hidden" name="checkId" value="<c:out value="${authorRole.roleCode}"/>" /></td>
+ <td><c:out value="${authorRole.roleCode}"/></td>
+ <td><c:out value="${authorRole.roleNm}"/></td>
+ <td><c:out value="${authorRole.roleTyp}"/></td>
+ <td><c:out value="${authorRole.roleSort}"/></td>
+ <td><c:out value="${authorRole.roleDc}"/></td>
+ <td><c:out value="${fn:substring(authorRole.creatDt,0,10)}"/></td>
+ <td>
+ <select name="regYn" title="<spring:message code="comCopSecRam.authorRoleList.regYn" />">
+ <option value="Y" <c:if test="${authorRole.regYn == 'Y'}">selected</c:if> ><spring:message code="comCopSecRam.authorRoleList.regY" /></option><!-- 등록 -->
+ <option value="N" <c:if test="${authorRole.regYn == 'N'}">selected</c:if> ><spring:message code="comCopSecRam.authorRoleList.regN" /></option><!-- 미등록 -->
+ </select>
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <c:if test="${!empty authorRoleManageVO.pageIndex }">
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/></ul>
+ </div>
+ </c:if>
+
+ <!-- 버튼역역 -->
+ <!--
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/sec/ram/EgovAuthorList.do'/>" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <span class="btn_s"><a href="javascript:fncAddAuthorRoleInsert()" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </div>
+ -->
+
+ <input type="hidden" name="roleCodes"/>
+ <input type="hidden" name="regYns"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${authorRoleManageVO.pageIndex}'/>"/>
+ <input type="hidden" name="authorCode" value="<c:out value="${authorRoleManageVO.searchKeyword}"/>"/>
+ <input type="hidden" name="searchCondition">
+</form:form>
+</div><!-- end div board -->
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sec/ram/EgovAuthorRoleManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitBottom.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitBottom.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitBottom.jsp (revision 7)
@@ -0,0 +1,18 @@
+<%@ 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"%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link href="<c:url value='/css/egovframework/com/cmm/main.css' />" rel="stylesheet" type="text/css">
+<title>eGovFrame 공통 컴포넌트</title>
+</head>
+<body>
+<div id="footer">
+ <div><strong class="footer_title_strong">Copyright(c)2018 eGovframework. All right reserved.</strong></div>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitBottom.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitTop.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitTop.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitTop.jsp (revision 7)
@@ -0,0 +1,170 @@
+<%@ 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"%>
+<%
+ /**
+ * @Class Name : EgovUnitTop.jsp
+ * @Description : 상단 헤더 영역
+ * @Modification Information
+ *
+ * @수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2020.06.23 신용호 세션만료시간 보여주기
+ *
+ * @author 공통서비스 개발팀 신용호
+ * @since 2009.03.03
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/main.css' />">
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<title>eGovFrame 공통 컴포넌트</title>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jquery.js'/>" ></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+ function getCookie(cname) {
+ var name = cname + "=";
+ var decodedCookie = decodeURIComponent(document.cookie);
+ var ca = decodedCookie.split(';');
+ for(var i = 0; i <ca.length; i++) {
+ var c = ca[i];
+ while (c.charAt(0) == ' ') {
+ c = c.substring(1);
+ }
+ if (c.indexOf(name) == 0) {
+ return c.substring(name.length, c.length);
+ }
+ }
+ return "";
+ }
+
+ function pad(n, width) {
+ n = n + '';
+ return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
+ }
+
+ var objLeftTime;
+ var objClickInfo;
+ var latestTime;
+ var expireTime;
+ var timeInterval = 1000; // 1초 간격 호출
+ var firstLocalTime = 0;
+ var elapsedLocalTime = 0;
+ var stateExpiredTime = false;
+ var logoutUrl = "<c:url value='/uat/uia/actionLogout.do'/>";
+ var timer;
+
+ function init() {
+ objLeftTime = document.getElementById("leftTimeInfo");
+
+ if (objLeftTime == null) {
+ console.log("'leftTimeInfo' ID is not exist!");
+ return;
+ }
+ objClickInfo = document.getElementById("clickInfo");
+ //console.log(objLeftTime.textContent);
+
+ latestTime = getCookie("egovLatestServerTime");
+ expireTime = getCookie("egovExpireSessionTime");
+ //console.log("latestServerTime = "+latestTime);
+ //console.log("expireSessionTime = "+expireTime);
+
+ elapsedTime = 0;
+ firstLocalTime = (new Date()).getTime();
+ showRemaining();
+
+ timer = setInterval(showRemaining, timeInterval); // 1초 간격 호출
+ }
+
+ function showRemaining() {
+ elapsedLocalTime = (new Date()).getTime() - firstLocalTime;
+
+ var timeRemaining = expireTime - latestTime - elapsedLocalTime;
+ if ( timeRemaining < timeInterval ) {
+ clearInterval(timer);
+ objLeftTime.innerHTML = "00:00:00";
+ objClickInfo.text = '<spring:message code="comCmm.top.expiredSessionTime"/>'; //시간만료
+ stateExpiredTime = true;
+ alert('<spring:message code="comCmm.top.expireSessionTimeInfo"/>');//로그인 세션시간이 만료 되었습니다.
+ // reload content main page
+ $("#sessionInfo").hide();
+
+ parent.frames["_content"].location.href = logoutUrl;
+ //parent.frames["_content"].location.reload();
+
+ return;
+ }
+ var timeHour = Math.floor(timeRemaining/1000/60 / 60);
+ var timeMin = Math.floor((timeRemaining/1000/60) % 60);
+ var timeSec = Math.floor((timeRemaining/1000) % 60);
+ //objLeftTime.textContent = pad(timeHour,2) +":"+ pad(timeMin,2) +":"+ pad(timeSec,2);
+ //objLeftTime.outerText = pad(timeHour,2) +":"+ pad(timeMin,2) +":"+ pad(timeSec,2);
+ objLeftTime.innerHTML = pad(timeHour,2) +":"+ pad(timeMin,2) +":"+ pad(timeSec,2);
+ //console.log("call showRemaining() = "+objLeftTime.innerHTML);
+ }
+
+ function reqTimeAjax() {
+
+ if (stateExpiredTime==true) {
+ alert('<spring:message code="comCmm.top.cantIncSessionTime"/>');//시간을 연장할수 없습니다.
+ return;
+ }
+
+ $.ajax({
+ url:'${pageContext.request.contextPath}/uat/uia/refreshSessionTimeout.do', //request 보낼 서버의 경로
+ type:'get', // 메소드(get, post, put 등)
+ data:{}, //보낼 데이터
+ success: function(data) {
+ //서버로부터 정상적으로 응답이 왔을 때 실행
+ latestTime = getCookie("egovLatestServerTime");
+ expireTime = getCookie("egovExpireSessionTime");
+ console.log("latestServerTime = "+latestTime);
+ console.log("expireSessionTime = "+expireTime);
+ init();
+ //alert("정상수신 , data = "+data);
+ },
+ error: function(err) {
+ alert("err : "+err);
+ //서버로부터 응답이 정상적으로 처리되지 못햇을 때 실행
+ //alert("오류발생 , error="+err.state());
+ }
+ });
+ return false;
+ }
+
+ function logout() {
+ $("#sessionInfo").hide();
+
+ parent.frames["_content"].location.href = logoutUrl;
+ }
+
+</script>
+</head>
+<body onload="init()">
+<div id="header">
+ <div class="header_box">
+ <h1>
+ <a href="<c:url value='/EgovContent.do' />" target="_content"><img src="<c:url value='/images/egovframework/com/cmm/main/top_logo.png' />" alt="eGovframe"></a>
+ </h1>
+ <div style="margin-top:4px;">
+ <strong class="top_title_strong"><spring:message code="comCmm.top.title"/></strong>
+ <span id="sessionInfo">
+ <c:if test="${loginVO != null}">
+ <br><spring:message code="comCmm.top.leftSessionTime"/> - <span id="leftTimeInfo">00:00:00</span><!-- 세션만료 남은시간 -->
+ <a id="clickInfo" class="btn02" href="#" onclick="reqTimeAjax();return false;"><spring:message code="comCmm.top.incSessionTime"/></a><!-- 시간연장 -->
+ <a class="btn02" href="#" onclick="logout();return false;"><spring:message code="comCmm.unitContent.3"/></a><!-- 로그아웃 -->
+ </c:if>
+ </span>
+ </div>
+ </div>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitTop.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitContent.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitContent.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitContent.jsp (revision 7)
@@ -0,0 +1,100 @@
+<%@ 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"%>
+<%
+ /**
+ * @Class Name : EgovUnitContent.jsp
+ * @Description : 로그인 성공후 컨텐츠 영역
+ * @Modification Information
+ *
+ * @수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2020.06.23 신용호 세션만료시간 보여주기
+ *
+ * @author 공통서비스 개발팀 신용호
+ * @since 2009.03.03
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>eGovFrame <spring:message code="comCmm.unitContent.1"/></title>
+<style type="text/css">
+.pwdTitleClass .ui-widget-header
+{
+ background-color: #F9A7AE;
+ background-image: none;
+ color: Black;
+}
+</style>
+<link type="text/css" rel="stylesheet" href="/egovframework-all-in-one/css/egovframework/com/cmm/jqueryui.css">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+
+ var $dialog;
+
+ $(document).ready(function () {
+
+ // 파일검색 화면 호출 함수
+ //var page = $(this).attr("href");
+ //var pagetitle = $(this).attr("title");
+ var pagetitle = "<spring:message code="comCmm.unitContent.20"/>"; // 비밀번호 유효기간 만료 안내
+ var page = "${pageContext.request.contextPath}/uat/uia/noticeExpirePwd.do";
+ $dialog = $('<div style="overflow:hidden;padding: 0px 0px 0px 0px;"></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ width: 600,
+ height: 550,
+ title: pagetitle,
+ dialogClass: 'pwdTitleClass'
+ });
+
+<c:if test="${loginVO != null}">
+ if ( ${elapsedTimeExpiration} > 0 )
+ $dialog.dialog('open');
+</c:if>
+ });
+</script>
+</head>
+<body>
+ <c:if test="${loginVO != null}">
+ ${loginVO.name}(${loginVO.id})<spring:message code="comCmm.unitContent.2"/> <a href="${pageContext.request.contextPath }/uat/uia/actionLogout.do"><spring:message code="comCmm.unitContent.3"/></a>
+ <!--
+ <br>passedDay = ${passedDay}
+ <br>expirePwdDay = ${expirePwdDay}
+ <br>elapsedTimeExpiration = ${elapsedTimeExpiration}
+ -->
+ <script type="text/javaScript" language="javascript">
+ parent.frames["_top"].location.reload();
+ </script>
+ </c:if>
+ <c:if test="${loginVO == null }">
+ <jsp:forward page="/uat/uia/egovLoginUsr.do"/>
+ </c:if>
+ <p/><p/><p/>
+ <b><spring:message code="comCmm.unitContent.4"/><br /><br/><!-- 실행 시 오류 사항이 있으시면 표준프레임워크센터로 연락하시기 바랍니다. -->
+ <b><img src="${pageContext.request.contextPath }/images/egovframework/com/cmm/icon/tit_icon.png"> <spring:message code="comCmm.unitContent.5"/></b><p/><!-- 화면 설명 -->
+ <spring:message code="comCmm.unitContent.6"/><p/><!-- 왼쪽 메뉴는 메뉴와 관련된 컴포넌트(메뉴관리, 사이트맵 등)들의 영향을 받지 않으며, -->
+ <spring:message code="comCmm.unitContent.7"/><p/><!-- 각 컴포넌트를 쉽게 찾아볼 수 있는 바로 가기 링크페이지입니다. -->
+
+ <br /><b><img src="${pageContext.request.contextPath }/images/egovframework/com/cmm/icon/tit_icon.png"> egovframework.com.cmm.web.EgovComIndexController.java</b><p/>
+
+ <spring:message code="comCmm.unitContent.8"/><p/><!-- 컴포넌트 설치 후 설치된 컴포넌트들을 IncludedInfo annotation을 통해 찾아낸 후 -->
+ <spring:message code="comCmm.unitContent.9"/><p/><br /><!-- 화면에 표시할 정보를 처리하는 Controller 클래스입니다. -->
+ <spring:message code="comCmm.unitContent.10"/><p/><!-- 개발 시 메뉴 구조가 잡히기 전에 배포 파일들에 포함된 공통 컴포넌트들의 목록성 화면에 URL을 제공하여 -->
+ <spring:message code="comCmm.unitContent.11"/><p/><!-- 개발자가 편리하게 활용할 수 있도록 작성되었습니다. -->
+ <spring:message code="comCmm.unitContent.12"/> <p/><!-- 운영 시에 본 컨트롤을 사용하여 메뉴를 구성하는 경우, -->
+ <spring:message code="comCmm.unitContent.13"/><p/><!-- 성능 문제를 일으키거나 사용자별 메뉴 구성에 오류를 발생할 수 있기 때문에 -->
+ <spring:message code="comCmm.unitContent.14"/><p /><!-- 실 운영 시에는 삭제해서 배포하는 것을 권장해 드립니다. -->
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitContent.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovHttpSessionException.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovHttpSessionException.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovHttpSessionException.jsp (revision 7)
@@ -0,0 +1,39 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comCmmErr.sessionException.code"/></c:set><!-- 세션만료 에러 -->
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title><spring:message code="title.html"/></title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: ppx solid #666; padding: 20px;">
+
+ <p style="color:red; margin-bottom: 8px; ">${pageTitle}<br /></p>
+
+ <div class="boxType1" style="width: 700px;">
+ <div class="box">
+ <div class="error">
+ <p class="title"><spring:message code="comCmmErr.sessionException.title" /></p><!-- 세션이 만료되었습니다! -->
+ <p class="cont mb20">${pageTitle}<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovHttpSessionException.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/dataAccessFailure.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/dataAccessFailure.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/dataAccessFailure.jsp (revision 7)
@@ -0,0 +1,39 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comCmmErr.dataAccessFailure.code"/></c:set><!-- 데이터처리 에러 -->
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title><spring:message code="title.html"/></title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: ppx solid #666; padding: 20px;">
+
+ <p style="color:red; margin-bottom: 8px; ">${pageTitle}<br /></p>
+
+ <div class="boxType1" style="width: 700px;">
+ <div class="box">
+ <div class="error">
+ <p class="title"><spring:message code="comCmmErr.dataAccessFailure.title" /></p><!-- 데이터 처리 중 오류가 발생하였습니다! -->
+ <p class="cont mb20">${pageTitle}<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/dataAccessFailure.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/accessDenied.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/accessDenied.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/accessDenied.jsp (revision 7)
@@ -0,0 +1,38 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comCmmErr.accessDenied.code"/></c:set><!-- 사용자접근권한 에러 -->
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title><spring:message code="title.html"/></title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: ppx solid #666; padding: 20px;">
+
+ <p style="color:red; margin-bottom: 8px; ">${pageTitle}</p>
+
+ <div class="boxType1" style="width: 700px;">
+ <div class="box">
+ <div class="error">
+ <p class="title"><spring:message code="comCmmErr.accessDenied.title" /></p><!-- 현재 페이지에 대한 접근권한이 없습니다! -->
+ <p class="cont mb20">${pageTitle}<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/accessDenied.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovError.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovError.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovError.jsp (revision 7)
@@ -0,0 +1,39 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comCmmErr.runtimeException.code"/></c:set><!-- 시스템 에러 -->
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title><spring:message code="title.html"/></title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: ppx solid #666; padding: 20px;">
+
+ <p style="color:red; margin-bottom: 8px; ">${pageTitle}<br /></p>
+
+ <div class="boxType1" style="width: 700px;">
+ <div class="box">
+ <div class="error">
+ <p class="title"><spring:message code="comCmmErr.runtimeException.title" /></p><!-- 알 수 없는 오류가 발생했습니다! -->
+ <p class="cont mb20">${pageTitle}<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovError.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/EgovXssException.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/EgovXssException.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/EgovXssException.jsp (revision 7)
@@ -0,0 +1,38 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title><spring:message code="title.html"/></title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: ppx solid #666; padding: 20px;">
+ <!-- Xss(Cross Site Scripting) Error -->
+ <p style="color:red; margin-bottom: 8px; ">User authorization Error</p>
+
+ <div class="boxType1" style="width: 700px;">
+ <div class="box">
+ <div class="error">
+ <p class="title">${exception.message}</p>
+ <p class="cont mb20"><spring:message code="${exception.messageKey}"/><br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/EgovXssException.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/csrfAccessDenied.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/csrfAccessDenied.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/csrfAccessDenied.jsp (revision 7)
@@ -0,0 +1,41 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>▒▒▒ eGovFrame Potal 온라인 지원 포탈 ▒▒▒</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+
+<body>
+
+<div style="width: 1000px; margin: 50px auto 50px;">
+
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: 0px solid #666; padding: 20px;">
+ <!-- 404 -->
+ <p style="color:red; margin-bottom: 8px; ">CSRF Error</p>
+
+ <div class="boxType1" style="width: 500px;">
+ <div class="box">
+ <div class="error">
+ <p class="title">CSRF Error</p>
+ <p class="cont mb20">웹 페이지를 찾을 수 없습니다.<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();">이전 페이지</a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/csrfAccessDenied.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovBizException.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovBizException.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovBizException.jsp (revision 7)
@@ -0,0 +1,39 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comCmmErr.bizException.code"/></c:set><!-- 비즈니스로직처리 에러 -->
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title><spring:message code="title.html"/></title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css" />
+
+<script language="javascript">
+function fncGoAfterErrorPage(){
+ history.back(-2);
+}
+</script>
+</head>
+<body>
+<div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: ppx solid #666; padding: 20px;">
+
+ <p style="color:red; margin-bottom: 8px; ">${pageTitle}<br /></p>
+
+ <div class="boxType1" style="width: 700px;">
+ <div class="box">
+ <div class="error">
+ <p class="title"><spring:message code="comCmmErr.bizException.title" /></p><!-- 비즈니스 로직 처리 중 발생했습니다! -->
+ <p class="cont mb20">${pageTitle}<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoAfterErrorPage();"><spring:message code="comCmmErr.button" /><!-- 이전 페이지 --></a></span>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/error/egovBizException.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/validator.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/validator.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/validator.jsp (revision 7)
@@ -0,0 +1,4 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ page language="java" contentType="application/javascript" pageEncoding="UTF-8"%>
+<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
+<validator:javascript dynamicJavascript="false" staticJavascript="true"/>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/validator.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovFileList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovFileList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovFileList.jsp (revision 7)
@@ -0,0 +1,113 @@
+<%@ 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="form" uri="http://www.springframework.org/tags/form"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+
+<c:if test="${not empty resultList }">
+ <div class="board_file">
+ <ul class="file_list">
+ <c:forEach var="item" items="${resultList }">
+ <c:choose>
+ <c:when test="${item.fileSize / 1024 > 1024 }">
+ <c:set var="fileSize" value="${item.fileSize / (1024 * 1024) }" />
+ <c:set var="fileUnit" value="MB" />
+ </c:when>
+ <c:otherwise>
+ <c:set var="fileSize" value="${item.fileSize / 1024 }" />
+ <c:set var="fileUnit" value="KB" />
+ </c:otherwise>
+ </c:choose>
+ <c:set var="fileIcon" value="file_reg" />
+ <c:choose>
+ <c:when test="${item.fileExtsn eq 'pdf'}">
+ <c:set var="fileIcon" value="file_pdf" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'ppt'}">
+ <c:set var="fileIcon" value="file_ppt" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'pptx'}">
+ <c:set var="fileIcon" value="file_ppt" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'xls'}">
+ <c:set var="fileIcon" value="file_excel" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'xlsx'}">
+ <c:set var="fileIcon" value="file_excel" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'doc'}">
+ <c:set var="fileIcon" value="file_word" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'docx'}">
+ <c:set var="fileIcon" value="file_word" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'hwp'}">
+ <c:set var="fileIcon" value="file_word" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'png'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'jpg'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'jpeg'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'gif'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'bmp'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'tiff'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'tif'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'zip'}">
+ <c:set var="fileIcon" value="file_zip" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq '7z'}">
+ <c:set var="fileIcon" value="file_zip" />
+ </c:when>
+ <c:otherwise>
+ <c:set var="fileIcon" value="file_reg" />
+ </c:otherwise>
+ </c:choose>
+
+ <c:choose>
+ <c:when test="${authorType eq 'user'}">
+ <li>
+ <!--<a href="${item.link}" title="파일 다운로드"> -->
+ <div class="file_wrap">
+ <p class="file_name">
+ <em class="blind">첨부파일명</em><c:out value="${item.originFileNm}" />
+ </p>
+ <!--</a>-->
+ <a href="${item.link }" class="btn_sq_s btn_filedown" title="<c:out value="${item.originFileNm}" /> 다운받기"><span class="blind">첨부파일다운로드</span></a>
+ </div>
+ </li>
+ </c:when>
+ <c:otherwise>
+ <li class="${fileIcon}">
+ <div class="file_wrap">
+ <p class="file_name">
+ <em class="blind">첨부파일명</em><c:out value="${item.originFileNm}" />
+ </p>
+<%-- <em><fmt:formatNumber value="${fileSize}" pattern="0.00" />${fileUnit}</em> --%>
+ <a href="${item.link}"><button type="button" class="btn_filedown btn_sq_s" title="<c:out value="${item.originFileNm}" /> 다운받기">다운</button></a>
+ </div>
+ </li>
+ </c:otherwise>
+ </c:choose>
+
+ <%-- <li class="${fileIcon }"><a href="${item.link }"> <strong>${item.originFileNm }</strong>
+ </a> <em><fmt:formatNumber value="${fileSize }" pattern=".0" />${fileUnit }</em> <!-- <button class="btn_s bgcolor01">삭제</button>
+ <button class="btn_s bgcolor01">다운로드 본문에 넣기</button> --></li>--%>
+ </c:forEach>
+ </ul>
+ </div>
+</c:if>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovFileList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovImgFileList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovImgFileList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovImgFileList.jsp (revision 7)
@@ -0,0 +1,102 @@
+<%@ 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="form" uri="http://www.springframework.org/tags/form"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+
+<c:if test="${not empty resultList }">
+ <c:forEach var="item" items="${resultList }">
+ <c:choose>
+ <c:when test="${item.fileSize / 1024 > 1024 }">
+ <c:set var="fileSize" value="${item.fileSize / (1024 * 1024) }" />
+ <c:set var="fileUnit" value="MB" />
+ </c:when>
+ <c:otherwise>
+ <c:set var="fileSize" value="${item.fileSize / 1024 }" />
+ <c:set var="fileUnit" value="KB" />
+ </c:otherwise>
+ </c:choose>
+ <c:set var="fileIcon" value="file_reg" />
+ <c:choose>
+ <c:when test="${item.fileExtsn eq 'pdf'}">
+ <c:set var="fileIcon" value="file_pdf" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'ppt'}">
+ <c:set var="fileIcon" value="file_ppt" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'pptx'}">
+ <c:set var="fileIcon" value="file_ppt" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'xls'}">
+ <c:set var="fileIcon" value="file_excel" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'xlsx'}">
+ <c:set var="fileIcon" value="file_excel" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'doc'}">
+ <c:set var="fileIcon" value="file_word" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'docx'}">
+ <c:set var="fileIcon" value="file_word" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'hwp'}">
+ <c:set var="fileIcon" value="file_word" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'png'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'jpg'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'jpeg'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'gif'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'bmp'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'tiff'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'tif'}">
+ <c:set var="fileIcon" value="file_img" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq 'zip'}">
+ <c:set var="fileIcon" value="file_zip" />
+ </c:when>
+ <c:when test="${item.fileExtsn eq '7z'}">
+ <c:set var="fileIcon" value="file_zip" />
+ </c:when>
+ <c:otherwise>
+ <c:set var="fileIcon" value="file_reg" />
+ </c:otherwise>
+ </c:choose>
+<!-- <li> -->
+<%-- <a href="#!" onclick="fncImageChange('${item.fileId }');"> --%>
+ ${item.originFileNm }<br/>
+<!-- </a> -->
+<%-- <em><fmt:formatNumber value="${fileSize }" pattern="0.00" />${fileUnit }</em> --%>
+ <!-- <button class="btn_s bgcolor01">삭제</button>
+ <button class="btn_s bgcolor01">다운로드 본문에 넣기</button> -->
+<!-- </li> -->
+ </c:forEach>
+</c:if>
+<script>
+// 이미지 변경
+function fncImageChange(fileId) {
+// fncSelectFile(fileId);
+// sel.fncSelectFile(fileId);
+// var img = $('.imageBox').find('img').eq(0);
+// img.attr('src', '/multiImageview.do?fileId=' + fileId + '&pageSn=' + 1)
+// .data('file', fileId.fileId)
+// // .data('maxpage', fileMaxPage(img))
+// .data('curpage', 1)
+// .on("contextmenu", function() {
+// return false;
+// });
+}
+</script>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/fms/EgovImgFileList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovModal.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovModal.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovModal.jsp (revision 7)
@@ -0,0 +1,57 @@
+<%
+ /**
+ * @Class Name : EgovModal.jsp
+ * @Description : 모달 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2016.07.13 장동한 최초 생성
+ *
+ * @author 2016 표준프레임워크유지보수 개발팀 장동한
+ * @since 2016.07.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=UTF-8" %>
+<%@ page import="egovframework.com.cmm.EgovWebUtil" %>
+<%@ 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" %>
+<%
+ String sScriptYn = request.getParameter("scriptYn") == null ? "" : (String)request.getParameter("scriptYn");
+ String sModelName = request.getParameter("modalName") == null ? "" : (String)request.getParameter("modalName");
+%>
+<%if(sScriptYn.equals("Y")){ %>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/modal.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/modal.js' />"></script>
+<%} %>
+<!-- The Modal -->
+<div id="<%=EgovWebUtil.clearXSSMaximum(sModelName) %>" class="modal">
+ <!-- Modal content -->
+ <div class="modal-content">
+ <div class="modal-header">
+ <span class="close"><img src="<c:url value='/images/egovframework/com/cmm/btn/btn_close.png'/>" /></span>
+ <div id="title" class="modal-title"><h2>Modal Header</h2></div>
+ </div>
+ <div id="body" class="modal-body">
+ <p>Modal Body</p>
+ <p>Modal Body</p>
+ <div style='clear:both;'></div>
+ </div>
+ <div class="modal-footer">
+
+ <div id="footer" >
+ <span class="btn_style1 blue"><a href="#">확 인</a></span>
+ <span class="btn_style1 blue"><a href="#">확 인</a></span>
+ <span class="btn_style1 gray" id='btnModalClose'><a href="#">닫 기</a></span>
+ </div>
+
+
+ </div>
+ </div>
+</div>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovModal.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitLeft.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitLeft.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitLeft.jsp (revision 7)
@@ -0,0 +1,107 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>eGovFrame 공통 컴포넌트</title>
+<link href="<c:url value='/css/egovframework/com/cmm/main.css' />" rel="stylesheet" type="text/css">
+<style type="text/css">
+link { color: #666666; text-decoration: none; }
+link:hover { color: #000000; text-decoration: none; }
+</style>
+</head>
+<body>
+<div id="lnb">
+<c:set var="isMai" value="false"/>
+<c:set var="isUat" value="false"/>
+<c:set var="isSec" value="false"/>
+<c:set var="isSts" value="false"/>
+<c:set var="isCop" value="false"/>
+<c:set var="isUss" value="false"/>
+<c:set var="isSym" value="false"/>
+<c:set var="isSsi" value="false"/>
+<c:set var="isDam" value="false"/>
+<c:set var="isCom" value="false"/>
+<c:set var="isExt" value="false"/>
+<ul class="lnb_title">
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+
+ <c:if test="${isMai == 'false' && result.gid == '0'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.mai.title"/></strong></strong><!-- 포털(예제) 메인화면 -->
+ </li>
+ <c:set var="isMai" value="true"/>
+ </c:if>
+ <c:if test="${isUat == 'false' && result.gid == '10'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.uat.title"/></strong></strong><!-- 사용자디렉토리/통합인증 -->
+ </li>
+ <c:set var="isUat" value="true"/>
+ </c:if>
+
+ <c:if test="${isSec == 'false' && result.gid == '20'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.sec.title"/></strong></strong><!-- 보안 -->
+ </li>
+ <c:set var="isSec" value="true"/>
+ </c:if>
+ <c:if test="${isSts == 'false' && result.gid == '30'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.sts.title"/></strong></strong><!-- 통계/리포팅 -->
+ </li>
+ <c:set var="isSts" value="true"/>
+ </c:if>
+ <c:if test="${isCop == 'false' && result.gid == '40'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.cop.title"/></strong></strong><!-- 협업 -->
+ </li>
+ <c:set var="isCop" value="true"/>
+ </c:if>
+ <c:if test="${isUss == 'false' && result.gid == '50'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.uss.title"/></strong></strong><!-- 사용자지원 -->
+ </li>
+ <c:set var="isUss" value="true"/>
+ </c:if>
+ <c:if test="${isSym == 'false' && result.gid == '60'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.sym.title"/></strong></strong><!-- 시스템관리 -->
+ </li>
+ <c:set var="isSym" value="true"/>
+ </c:if>
+ <c:if test="${isSsi == 'false' && result.gid == '70'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.ssi.title"/></strong></strong><!-- 시스템/서비스연계 -->
+ </li>
+ <c:set var="isSsi" value="true"/>
+ </c:if>
+ <c:if test="${isDam == 'false' && result.gid == '80'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.dam.title"/></strong></strong><!-- 디지털 자산 관리 -->
+ </li>
+ <c:set var="isDam" value="true"/>
+ </c:if>
+ <c:if test="${isCom == 'false' && result.gid == '90'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.com.title"/></strong></strong> <!-- 요소기술 -->
+ </li>
+ <c:set var="isCom" value="true"/>
+ </c:if>
+ <c:if test="${isExt == 'false' && result.gid == '100'}">
+ <li>
+ <strong class="left_title_strong"><strong class="top_title_strong"><spring:message code="comCmm.ext.title"/></strong></strong><!-- 외부 추가 컴포넌트 -->
+ </li>
+ <c:set var="isExt" value="true"/>
+ </c:if>
+
+ <c:set var="componentMsgKey">comCmm.left.${result.order}</c:set>
+ <ul class="2depth">
+ <li><a href="${pageContext.request.contextPath}<c:out value="${result.listUrl}"/>" target="_content" class="link"> <c:out value="${result.order}"/>. <spring:message code="${componentMsgKey}"/><!-- <c:out value="${result.name}"/> --></a></li>
+ </ul>
+ </c:forEach>
+</ul>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitLeft.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitMain.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitMain.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitMain.jsp (revision 7)
@@ -0,0 +1,17 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<!DOCTYPE html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>eGovFrame 공통 컴포넌트</title>
+</head>
+
+<frameset frameborder="0" framespacing="0" rows="75, *, 45">
+ <frame name="_top" src="${pageContext.request.contextPath}/EgovTop.do" scrolling="no" title="헤더">
+ <frameset frameborder="0" framespacing="0" cols="20%, 80%">
+ <frame name="_left" src="${pageContext.request.contextPath}/EgovLeft.do" scrolling="yes" title="메뉴페이지">
+ <frame name="_content" src="${pageContext.request.contextPath}/EgovContent.do" title="메인페이지">
+ </frameset>
+ <frame name="_bottom" src="${pageContext.request.contextPath}/EgovBottom.do" scrolling="no" title="푸터">
+</frameset>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cmm/EgovUnitMain.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfInqire.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfInqire.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfInqire.jsp (revision 7)
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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" %>
+<%
+ /**
+ * @Class Name : EgovBoardUseInfInqire.jsp
+ * @Description : 게시판 사용정보 조회화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.02 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="boardUseInf" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_updt_bbsUseInf(){
+ if (!validateBoardUseInf(document.boardUseInf)){
+ return;
+ }
+
+ document.boardUseInf.action = "<c:url value='/cop/com/updateBBSUseInf.do'/>";
+ document.boardUseInf.submit();
+ }
+ function fn_egov_select_bbsUseInfs(){
+ document.boardUseInf.action = "<c:url value='/cop/com/selectBBSUseInfs.do'/>";
+ document.boardUseInf.submit();
+ }
+
+</script>
+<title>게시판 사용정보 수정</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+</head>
+<body>
+<form name="boardUseInf" method="post" action="<c:url value='/cop/com/updateBBSUseInf.do'/>">
+<div style="visibility:hidden;display:none;"><input name="iptSubmit" type="submit" value="전송" title="전송"></div>
+<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>" />
+<input type="hidden" name="bbsId" value="<c:out value='${bdUseVO.bbsId}'/>" />
+<input type="hidden" name="trgetId" value="<c:out value='${bdUseVO.trgetId}'/>" />
+
+<div id="border" style="width:730px">
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="100%"class="title_left">
+ <h1>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목아이콘이미지"> 게시판 사용정보 수정
+ </h1>
+ </td>
+ </tr>
+ </table>
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="table-register" summary="게시판명, 커뮤니티/ 동호회명, 사용여부 입니다" >
+ <tr>
+ <th scope="col" width="20%" height="23" class="" nowrap >게시판명</th>
+ <td width="80%" nowrap colspan="3">
+ <c:out value="${bdUseVO.bbsNm}" />
+ </td>
+ </tr>
+ <tr>
+ <th scope="col" width="20%" height="23" class="" nowrap >커뮤니티/ 동호회명</th>
+ <td width="80%" nowrap colspan="3">
+ <c:choose>
+ <c:when test="${not empty bdUseVO.cmmntyNm}">
+ <c:out value="${bdUseVO.cmmntyNm}" />
+ </c:when>
+ <c:when test="${not empty bdUseVO.clbNm}">
+ <c:out value="${bdUseVO.clbNm}" />
+ </c:when>
+ <c:otherwise>(시스템 활용)</c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ <tr>
+ <th scope="col" width="20%" height="23" class="required_text" nowrap >
+ <label for="useAt">
+ 사용여부
+ </label>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif' />" width="15" height="15" alt="필수입력표시">
+ </th>
+ <td width="80%" nowrap colspan="3">
+ <spring:message code="button.use" /> : <input type="radio" name="useAt" class="radio2" value="Y" <c:if test="${bdUseVO.useAt == 'Y'}"> checked="checked"</c:if>>
+ <spring:message code="button.notUsed" /> : <input type="radio" name="useAt" class="radio2" value="N" <c:if test="${bdUseVO.useAt == 'N'}"> checked="checked"</c:if>>
+ <br/><form:errors path="useAt" />
+ </td>
+
+ </tr>
+ <c:choose>
+ <c:when test="${not empty bdUseVO.provdUrl}">
+ <tr>
+ <th width="20%" height="23" class="" nowrap >제공 URL</th>
+ <td width="80%" nowrap colspan="3">
+ <a href="<c:out value="${bdUseVO.provdUrl}" />" target="_new">
+ <c:out value="${bdUseVO.provdUrl}" />
+ </a>
+ </td>
+ </tr>
+ </c:when>
+ </c:choose>
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <table border="0" cellspacing="0" cellpadding="0" align="center">
+ <tr>
+ <td><span class="button">
+ <a href="<c:url value='/cop/com/updateBBSUseInf.do'/>" onclick="fn_egov_updt_bbsUseInf(); return false;">수정</a>
+ </span></td>
+ <td width="10"></td>
+ <td><span class="button">
+ <a href="<c:url value='/cop/com/selectBBSUseInfs.do'/>" onclick="fn_egov_select_bbsUseInfs(); return false;">목록</a>
+ </span></td>
+ </tr>
+ </table>
+ </div>
+</div>
+</form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfInqire.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfmInfUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfmInfUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfmInfUpdt.jsp (revision 7)
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovConfirmInfUpdt.jsp
+ * @Description : 승인 정보 수정화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.13 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function fn_egov_regist_updtConfirmInf() {
+ if (confirm('<spring:message code="common.update.msg" />')) {
+ document.frm.action = "<c:url value='/cop/com/updateConfirmRequest.do'/>";
+ document.frm.submit();
+ }
+ }
+
+ function fn_egov_select_confirmList() {
+ var target = document.frm.trgetId.value;
+ var actionUrl;
+
+ if (target == '') {
+ actionUrl = "<c:url value='/cop/com/selectConfirmRequest.do'/>";
+ } else {
+ actionUrl = "<c:url value='/cop/com/selectConfirmRequestByTrget.do'/>";
+ }
+
+ document.frm.action = actionUrl;
+ document.frm.submit();
+ }
+</script>
+<title>승인정보 수정</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+
+</head>
+<body>
+<form name="frm" method="post" action="<c:url value='/cop/com/updateConfirmRequest.do'/>">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+<input type="hidden" name="confmNumber" value="<c:out value='${historyVO.confmNumber}' />" />
+<input type="hidden" name="trgetJobId" value="<c:out value='${historyVO.trgetJobId}' />" />
+<input type="hidden" name="confmRqesterId" value="<c:out value='${historyVO.confmRqesterId}' />" />
+<input type="hidden" name="confmerId" value="<c:out value='${historyVO.confmerId}' />" />
+<input type="hidden" name="confmTyCode" value="<c:out value='${historyVO.confmTyCode}' />" />
+<input type="hidden" name="opertId" value="<c:out value='${historyVO.opertId}' />" />
+
+<input type="hidden" name="trgetId" value="<c:out value='${searchVO.trgetId}' />" />
+
+<div id="border" style="width:730px">
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="100%"class="title_left">
+ <h1>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목버튼이미지"> 승인정보수정
+ </h1>
+ </td>
+ </tr>
+ </table>
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="table-register">
+ <tr>
+ <th width="20%" height="23" class="" nowrap >승인유형</th>
+ <td width="80%" nowrap>
+ <c:out value="${historyVO.confmTyCodeNm}" />
+ </td>
+ </tr>
+ <tr>
+ <th width="20%" height="23" class="" nowrap >승인요청자</th>
+ <td width="80%" nowrap>
+ <c:out value="${historyVO.confmRqesterNm}" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" >승인상태
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif' />" width="15" height="15" alt="필수입력표시"></th>
+ <td>
+ <select name="confmSttusCode" class="select" title="승인상태선택">
+ <option selected value=''>--선택하세요--</option>
+ <c:forEach var="result" items="${typeList}" varStatus="status">
+ <option value='<c:out value="${result.code}"/>' <c:if test="${historyVO.confmSttusCode == result.code }">selected="selected"</c:if> >
+ <c:out value="${result.codeNm}"/></option>
+ </c:forEach>
+ </select>
+ </td>
+ </tr>
+
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <table border="0" cellspacing="0" cellpadding="0" align="center">
+ <tr>
+ <!--
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_left.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ <td background="<c:url value='/images/egovframework/com/cmm/btn/bu2_bg.gif'/>" class="text_left" nowrap>
+ <a href="javascript:fn_egov_regist_updtConfirmInf();">수정</a>
+ </td>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_right.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ <td width="10"></td>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_left.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ <td background="<c:url value='/images/egovframework/com/cmm/btn/bu2_bg.gif'/>" class="text_left" nowrap>
+ <a href="javascript:fn_egov_select_confirmList();">목록</a>
+ </td>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_right.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ -->
+ <td><span class="button"><input type="submit" value="수정" title="수정" onclick="javascript:fn_egov_regist_updtConfirmInf();return false;"></span></td>
+ <td width="10"></td>
+ <td><span class="button"><input type="submit" value="목록" title="목록" onclick="javascript:fn_egov_select_confirmList();return false;"></span></td>
+ </tr>
+ </table>
+ </div>
+</div>
+</form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfmInfUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfRegist.jsp (revision 7)
@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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" %>
+<%
+ /**
+ * @Class Name : EgovBoardUseInfRegist.jsp
+ * @Description : 게시판 사용정보 등록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.02 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.02
+ * @version 1.0
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/showModalDialog.js'/>"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="boardUseInf" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_select_bbsUseInfs(){
+ document.boardUseInf.action = "<c:url value='/cop/com/selectBBSUseInfs.do'/>";
+ document.boardUseInf.submit();
+ }
+
+ function fn_egov_regist_bbsUseInf(){
+ if (!validateBoardUseInf(document.boardUseInf)){
+ return;
+ }
+
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ document.boardUseInf.param_trgetType.value = document.boardUseInf.trgetType.value;
+ document.boardUseInf.action = "<c:url value='/cop/com/insertBBSUseInf.do'/>";
+ document.boardUseInf.submit();
+ }
+ }
+
+ function fn_egov_inqire_bbsInf(){
+ var retVal;
+ var url = "<c:url value='/cop/com/openPopup.do' />?requestUrl=/cop/bbs/SelectBBSMasterInfsPop.do&width=850&height=520";
+ var openParam = "dialogWidth: 900px; dialogHeight: 520px; resizable: 0, scroll: 1, center: 1";
+
+ retVal = window.showModalDialog(url,"p_cmmntyInqire", openParam, "bbsCallback");
+ if (retVal != null) {
+ var tmp = retVal.split("|");
+ document.boardUseInf.bbsId.value = tmp[0];
+ document.boardUseInf.bbsNm.value = tmp[1];
+ }
+ }
+
+ function bbsCallback(retVal) {
+ if (retVal != null) {
+ var tmp = retVal.split("|");
+ document.boardUseInf.bbsId.value = tmp[0];
+ document.boardUseInf.bbsNm.value = tmp[1];
+ }
+ }
+
+ function fn_egov_selectTargetType(obj) {
+
+ var retVal;
+ var _strType = obj.value;
+
+ if (_strType == 'CMMNTY') {
+ retVal = fn_egov_inqire_cmmnty();
+ } else if (_strType == 'CLUB') {
+ retVal = fn_egov_inqire_club();
+ } else if (_strType == '') {
+ retVal = "|";
+ } else {
+ retVal = "SYSTEM_DEFAULT_BOARD"+"|"+"시스템 활용";
+ }
+
+ if (retVal != null) {
+ var tmp = retVal.split("|");
+ document.boardUseInf.trgetId.value = tmp[0];
+ document.boardUseInf.trgetNm.value = tmp[1];
+ }
+ }
+
+ function fn_egov_inqire_cmmnty() {
+ var retVal;
+ var url = "<c:url value='/cop/com/openPopup.do' />?requestUrl=/cop/cmy/selectCmmntyInfsByPop.do&width=850&height=360";
+ var openParam = "dialogWidth: 850px; dialogHeight: 360px; resizable: 0, scroll: 1, center: 1";
+
+ retVal = window.showModalDialog(url,"p_cmmntyInqire", openParam, "communityCallback");
+ return retVal;
+ }
+
+ function communityCallback(retVal) {
+ if (retVal != null) {
+ var tmp = retVal.split("|");
+ document.boardUseInf.trgetId.value = tmp[0];
+ document.boardUseInf.trgetNm.value = tmp[1];
+ }
+ }
+
+ function fn_egov_inqire_club() {
+ var retVal;
+ var url = "<c:url value='/cop/com/openPopup.do' />?requestUrl=/cop/clb/selectClubInfsByPop.do&width=850&height=360";
+ var openParam = "dialogWidth: 850px; dialogHeight: 360px; resizable: 0, scroll: 1, center: 1";
+
+ retVal = window.showModalDialog(url,"p_cmmntyInqire", openParam, "clubCallback");
+ return retVal;
+ }
+
+ function clubCallback(retVal) {
+ if (retVal != null) {
+ var tmp = retVal.split("|");
+ document.boardUseInf.trgetId.value = tmp[0];
+ document.boardUseInf.trgetNm.value = tmp[1];
+ }
+ }
+</script>
+<title>게시판 사용등록</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+
+</head>
+<body>
+<form:form commandName="boardUseInf" name="boardUseInf" method="post">
+<div style="visibility:hidden;display:none;"><input name="iptSubmit" type="submit" value="전송" title="전송"></div>
+<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>" />
+<input type="hidden" name="param_trgetType" value="" />
+
+<div id="border" style="width:730px">
+ <table width="100%" cellpadding="8" class="table-search" border="0" summary="게시판명, 커뮤니티 동호회 정보 입니다">
+ <tr>
+ <td width="100%"class="title_left">
+ <h1>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목아이콘이미지"> 게시판 사용등록
+ </h1>
+ </td>
+ </tr>
+ </table>
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="table-register">
+ <tr>
+ <th width="30%" height="23" class="required_text" nowrap ><spring:message code="cop.bbsNm" />
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif' />" width="15" height="15" alt="필수입력표시"></th>
+ <td width="70%" nowrap colspan="3">
+ <input name="bbsId" type="hidden" />
+ <input name="bbsNm" type="text" size="40" value="" maxlength="40" title="게시판명" readonly />
+ <a href="#LINK" onclick="fn_egov_inqire_bbsInf();" style="selector-dummy: expression(this.hideFocus=false);"><img src="<c:url value='/images/egovframework/com/cmm/icon/search.gif' />"
+ width="15" height="15" align="middle" alt="새창" /></a>
+ <br/><form:errors path="bbsId" />
+ </td>
+ </tr>
+ <tr>
+ <th width="30%" height="23" class="required_text" nowrap >
+ <label for="trgetType">
+ <spring:message code="cop.trgetNm" />
+ </label>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif' />" width="15" height="15" alt="필수입력표시">
+ </th>
+ <td width="70%" nowrap colspan="3">
+ <select name="trgetType" class="select" title="<spring:message code="cop.trgetNm" />" onChange="javascript:fn_egov_selectTargetType(this)" >
+ <option selected value=''>--선택하세요--</option>
+ <c:if test="${useCommunity == 'true'}">
+ <option value="CMMNTY" >커뮤니티</option>
+ </c:if>
+ <c:if test="${useClub == 'true'}">
+ <option value="CLUB" >동호회</option>
+ </c:if>
+ <option value="SYSTEM" >시스템</option>
+ </select>
+ <input type="hidden" name="trgetId" value="" >
+ <input type="text" name="trgetNm" value="" size="40" title="<spring:message code="cop.trgetNm" />" readOnly >
+ <br/><form:errors path="trgetId" />
+ </td>
+ </tr>
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <table border="0" cellspacing="0" cellpadding="0" align="center">
+ <tr>
+ <!--
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_left.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ <td background="<c:url value='/images/egovframework/com/cmm/btn/bu2_bg.gif'/>" class="text_left" nowrap>
+ <a href="javascript:fn_egov_regist_bbsUseInf();" onclick="fn_egov_regist_bbsUseInf(); return false;"><spring:message code="button.create" /></a>
+ </td>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_right.gif'/>" width="8" height="20" alt="버튼이미지"></td> -->
+
+ <td><span class="button"><input type="submit" title="<spring:message code="button.create" />" value="<spring:message code="button.create" />" onclick="fn_egov_regist_bbsUseInf(); return false;"></span></td>
+
+ <td width="10"></td>
+ <td><span class="button">
+ <a href="<c:url value='/cop/com/selectBBSUseInfs.do'/>?searchCondition=1" onclick="fn_egov_select_bbsUseInfs(); return false;"><spring:message code="button.list" /></a>
+ </span></td>
+ </tr>
+ </table>
+ </div>
+</div>
+</form:form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBdUseInfListByTrget.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBdUseInfListByTrget.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBdUseInfListByTrget.jsp (revision 7)
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovBdUseInfListByTrget.jsp
+ * @Description : 게시판 사용정보 목록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.02 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_bbsUseInfs('1');
+ }
+ }
+
+ function fn_egov_select_bbsUseInfs(pageNo) {
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/cop/com/selectCmyBBSUseInfsByTrget.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_update_bbsUseInf(bbsId, trgetId) {
+ if (confirm('<spring:message code="cop.use.msg" />')) {
+ document.frm.bbsId.value = bbsId;
+ document.frm.param_trgetId.value = trgetId;
+ document.frm.useAt.value = 'Y';
+ document.frm.action = "<c:url value='/cop/com/updateBBSUseInfByTrget.do'/>";
+ document.frm.submit();
+ }
+ }
+
+ function fn_egov_delete_bbsUseInf(bbsId, trgetId) {
+ if (confirm('<spring:message code="cop.unuse.msg" />')) {
+ document.frm.bbsId.value = bbsId;
+ document.frm.param_trgetId.value = trgetId;
+ document.frm.useAt.value = 'N';
+ document.frm.action = "<c:url value='/cop/com/updateBBSUseInfByTrget.do'/>";
+ document.frm.submit();
+ }
+ }
+
+ function fn_egov_insert_bbsUseInf(bbsId, trgetId) {
+ if (confirm('<spring:message code="cop.use.msg" />')) {
+ document.frm.bbsId.value = bbsId;
+ document.frm.param_trgetId.value = trgetId;
+ document.frm.useAt.value = 'Y';
+ document.frm.action = "<c:url value='/cop/com/insertBBSUseInfByTrget.do'/>";
+ document.frm.submit();
+ }
+ }
+</script>
+
+<title>게시판 사용정보 조회</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+</head>
+<body>
+<form name="frm" method="post" action="<c:url value='/cop/com/selectCmyBBSUseInfsByTrget.do'/>">
+<input type="hidden" name="bbsId" />
+<input type="hidden" name="trgetId" value='<c:out value="${trgetId}"/>' />
+<input type="hidden" name="useAt" />
+<input type="hidden" name="param_trgetId" />
+<input type="hidden" name="trgetType" value='<c:out value="${trgetType}"/>' />
+
+<div id="border" style="width:730px">
+
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="40%"class="title_left">
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목버튼이미지">
+ 게시판 사용정보 조회</td>
+ <th >
+ </th>
+ <td width="10%" >
+ <select name="searchCnd" class="select" title="검색조건선택">
+ <!-- option selected value=''--><!--선택하세요--><!-- /option-->
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> >사용자명</option>
+ </select>
+ </td>
+ <td width="35%">
+ <input name="searchWrd" type="text" size="35" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="35" onkeypress="press(event);" title="검색단어입력">
+ </td>
+ <th width="10%">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><span class="button"><input type="submit" value="조회" title="조회" onclick="javascript:fn_egov_select_bbsUseInfs(('1');return false;"></span></td>
+ </tr>
+ </table>
+ </th>
+ </tr>
+ </table>
+ <table width="100%" cellpadding="8" class="table-line">
+ <thead>
+ <tr>
+ <!-- th class="title" width="3%" nowrap><input type="checkbox" name="all_check" class="check2"></th-->
+ <th class="title" width="10%" nowrap>번호</th>
+ <th class="title" width="37%" nowrap>게시판명</th>
+ <th class="title" width="30%" nowrap>사용자명</th>
+ <th class="title" width="10%" nowrap>사용여부</th>
+ <th class="title" width="10%" nowrap>상태변경</th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td class="lt_text3" nowrap><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="lt_text" nowrap><c:out value="${result.bbsNm}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userNm}"/></td>
+ <c:choose>
+ <c:when test="${result.useAt=='Y'}">
+ <td class="lt_text3" nowrap>
+ <spring:message code="button.use" />
+ </td>
+ <td class="lt_text3" nowrap>
+ <input type="button" value="사용중지" onClick="javascript:fn_egov_delete_bbsUseInf('<c:out value="${result.bbsId}"/>','<c:out value="${result.trgetId}"/>');" />
+ </td>
+ </c:when>
+ <c:when test="${result.useAt=='N'}">
+ <td class="lt_text3" nowrap>
+ <spring:message code="button.notUsed" />
+ </td>
+ <td class="lt_text3" nowrap>
+ <input type="button" value="사용" onClick="javascript:fn_egov_update_bbsUseInf('<c:out value="${result.bbsId}"/>','<c:out value="${result.trgetId}"/>');" />
+ </td>
+ </c:when>
+ <c:otherwise>
+ <td class="lt_text3" nowrap>
+ 미사용
+ </td>
+ <td class="lt_text3" nowrap>
+ <input type="button" value="사용" onClick="javascript:fn_egov_insert_bbsUseInf('<c:out value="${result.bbsId}"/>','<c:out value="${result.trgetId}"/>');" />
+ </td>
+ </c:otherwise>
+ </c:choose>
+
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td class="lt_text3" nowrap colspan="6" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ <!--tfoot>
+ <tr class="">
+ <td colspan=6 align="center"></td>
+ </tr>
+ </tfoot -->
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_bbsUseInfs" />
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+</div>
+</form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBdUseInfListByTrget.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntyMngrListPop.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntyMngrListPop.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntyMngrListPop.jsp (revision 7)
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovCmmntyMngrList.jsp
+ * @Description : 커뮤니티 관리자 목록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.13 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function fn_egov_returnUserInfo(uniqId) {
+ document.frm.emplyrId.value = uniqId;
+ document.frm.action = "<c:url value='/cop/cmy/deleteCmmntyUserBySelf.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_select_userInfo(pageIndex) {
+ var _target = document.frm.targetMethod.value;
+ var actionUrl;
+
+ if (_target == 'selectClubOprtrList') {
+ actionUrl = "<c:url value='/cop/com/selectClubOprtrList.do'/>";
+ } else if (_target == 'selectClubUserList') {
+ actionUrl = "<c:url value='/cop/com/selectClubUserList.do'/>";
+ } else if (_target == 'selectCmmntyMngrList') {
+ actionUrl = "<c:url value='/cop/com/selectCmmntyMngrList.do'/>";
+ } else if (_target == 'selectCmmntyUserList') {
+ actionUrl = "<c:url value='/cop/com/selectCmmntyUserList.do'/>";
+ } else {
+ actionUrl = "<c:url value='/cop/com/selectUserList.do'/>";
+ }
+ document.frm.pageIndex.value = pageIndex;
+ document.frm.action = actionUrl;
+ document.frm.submit();
+ }
+
+ function fn_egov_close(){
+ window.close();
+ }
+</script>
+<title>승인자 선택</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+
+</head>
+<body>
+<form name="frm" action ="" method="post">
+<input type="hidden" name="targetMethod" value="${targetMethod}" />
+<input type="hidden" name="trgetId" value="${trgetId}" />
+<input type="hidden" name="PopFlag" value="S" />
+<input type="hidden" name="cmmntyId" value="${trgetId}" />
+<input type="hidden" name="emplyrId" />
+
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="100%"class="title_left">
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="absmiddle" alt="제목버튼이미지">
+ 승인자 선택</td>
+ </tr>
+ </table>
+ <table width="100%" cellpadding="8" class="table-line">
+ <thead>
+ <tr>
+ <!-- th class="title" width="3%" nowrap><input type="checkbox" name="all_check" class="check2"></th-->
+ <th class="title" width="10%" nowrap>번호</th>
+ <th class="title" width="30%" nowrap>사용자아이디</th>
+ <th class="title" width="40%" nowrap>사용자명</th>
+ <th class="title" width="20%" nowrap>선택</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <!--td class="lt_text3" nowrap><input type="checkbox" name="check1" class="check2"></td-->
+ <td class="lt_text3" nowrap><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userId}" /></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userNm}" /></td>
+ <td class="lt_text3" nowrap>
+ <c:if test="${result.useAt == 'Y'}">
+ <input type="button" name="selectUser" value="선택"
+ onClick="javascript:fn_egov_returnUserInfo('<c:out value="${result.uniqId}" />');" />
+ </c:if>
+ </td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td class="lt_text3" nowrap colspan="4" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ <!--tfoot>
+ <tr class="">
+ <td colspan=6 align="center"></td>
+ </tr>
+ </tfoot -->
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_userInfo" />
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <table border="0" cellspacing="0" cellpadding="0" align="center">
+ <tr>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_left.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ <td background="<c:url value='/images/egovframework/com/cmm/btn/bu2_bg.gif'/>" class="text_left" nowrap>
+ <a href="javascript:fn_egov_close()">닫기</a>
+ </td>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_right.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ </tr>
+ </table>
+ </div>
+</form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntyMngrListPop.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserListPop.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserListPop.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserListPop.jsp (revision 7)
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="ImgUrl" value="${pageContext.request.contextPath}/images/egovframework/com/cmm/"/>
+
+<%
+ /**
+ * @Class Name : EgovUserListPop.jsp
+ * @Description : 사용자 목록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.04.06 이삼섭 최초 생성
+ * 2018.09.11 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.06
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comCopCom.userListPop.title"/></title><!-- 사용자 목록 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_userInfo('1');
+ }
+ }
+ function fn_egov_returnUserInfo(uniqId, userNm, userId){
+ var retVal = uniqId +"|"+userNm+"|"+userId;
+ parent.fn_egov_returnValue(retVal);
+
+ }
+
+ function fn_egov_select_userInfo(pageIndex){
+ var _target = document.frm.targetMethod.value;
+ var actionUrl;
+
+ if(_target == 'selectClubOprtrList'){
+ actionUrl = "<c:url value='/cop/com/selectClubOprtrList.do'/>";
+ }else if(_target == 'selectClubUserList'){
+ actionUrl = "<c:url value='/cop/com/selectClubUserList.do'/>";
+ }else if(_target == 'selectCmmntyMngrList'){
+ actionUrl = "<c:url value='/cop/com/selectCmmntyMngrList.do'/>";
+ }else if(_target == 'selectCmmntyUserList'){
+ actionUrl = "<c:url value='/cop/com/selectCmmntyUserList.do'/>";
+ }else{
+ actionUrl = "<c:url value='/cop/com/selectUserList.do'/>";
+ }
+ document.frm.pageIndex.value = pageIndex;
+ document.frm.action = actionUrl;
+ document.frm.submit();
+ }
+
+ function fn_egov_close(){
+ parent.closeWindow();
+ }
+</script>
+</head>
+<body>
+
+<div class="board" style="width:800px">
+ <h1><spring:message code="comCopCom.userListPop.pageTop.title"/></h1><!-- 사용자 목록 -->
+
+ <form name="frm" action ="<c:url value='/cop/com/selectUserList.do'/>" method="post">
+ <input type="hidden" name="targetMethod" value="${targetMethod}" />
+ <input type="hidden" name="trgetId" value="${trgetId}" />
+ <input type="hidden" name="PopFlag" value="Y" />
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <select name="searchCnd" class="select" title="<spring:message code="select.searchCondition"/>">
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comCopCom.userListPop.userNm"/></option><!-- 사용자명 -->
+ </select>
+ <input class="s_input2 vat" name="searchWrd" type="text" value='<c:out value="${searchVO.searchWrd}"/>' size="35" maxlength="35" onkeypress="press(event);" title="<spring:message code="title.search"/>" /><!-- 검색어 입력 -->
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="javascript:fn_egov_select_userInfo('1');return false;" title="<spring:message code="button.inquire" />" /><!-- 조회 -->
+ </li>
+ </ul>
+ </div>
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:23%" />
+ <col style="width:12%" />
+ <col style="width:8%" />
+ <col style="width:8%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comCopCom.userListPop.index"/></th><!-- 번호 -->
+ <th scope="col"><spring:message code="comCopCom.userListPop.userId"/></th><!-- 사용자아이디 -->
+ <th scope="col"><spring:message code="comCopCom.userListPop.userNm"/></th><!-- 사용자명 -->
+ <th scope="col"><spring:message code="comCopCom.userListPop.userAdres"/></th><!-- 주소 -->
+ <th scope="col"><spring:message code="comCopCom.userListPop.userEmail"/></th><!-- 이메일 -->
+ <th scope="col"><spring:message code="comCopCom.userListPop.useAt"/></th><!-- 사용여부 -->
+ <th scope="col"><spring:message code="comCopCom.userListPop.select"/></th><!-- 선택 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.userId}" /></td>
+ <td><c:out value="${result.userNm}" /></td>
+ <td><c:out value="${result.userAdres}" /></td>
+ <td><c:out value="${result.userEmail}" /></td>
+ <td>
+ <c:choose>
+ <c:when test="${result.useAt == 'Y'}">
+ <spring:message code="button.use" />
+ </c:when>
+ <c:otherwise>
+ <spring:message code="button.notUsed" />
+ </c:otherwise>
+ </c:choose>
+ </td>
+ <td>
+ <c:if test="${result.useAt == 'Y' || result.deletedAt == 'Y'}">
+ <input type="button" name="selectUser" value="<spring:message code="input.cSelect"/>" title="<spring:message code="input.cSelect"/>"
+ onclick="fn_egov_returnUserInfo('<c:out value="${result.uniqId}" />','<c:out value="${result.userNm}" />','<c:out value="${result.userId}" />');" /><!-- 선택 -->
+ </c:if>
+ </td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="7"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_userInfo"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserListPop.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntynClubView.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntynClubView.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntynClubView.jsp (revision 7)
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovCmmntyView.jsp
+ * @Description : 커뮤니티 목록 초기화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.08 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.08
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+
+<title>커뮤니티 및 동호회 목록</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+
+</head>
+<body>
+
+<div id="border" style="width:730px">
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <th align=left><a href="#cmyList">커뮤니티 목록 바로가기</a></th>
+ </tr>
+ <tr>
+ <th align=left><a href="#clubList">동호회 목록 바로가기</a></th>
+ </tr>
+ </table>
+ <br>
+ <table width="100%" cellpadding="8" class="table-search" border="0" id="cmyList" summary="커뮤니티 목록입니다.">
+ <tr>
+ <td width="100%"class="title_left">
+ <h1>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" alt=""> 커뮤니티 목록
+ </h1>
+ </td>
+ </tr>
+ <tr>
+ <td><c:import url="/cop/cus/CmmntyListPortlet.do" charEncoding="utf-8" />
+ </td>
+ </tr>
+ </table>
+ <br>
+ <table width="100%" cellpadding="8" class="table-search" border="0" id="clubList" summary="동호회 목록입니다.">
+ <tr>
+ <td width="100%"class="title_left">
+ <h1>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" alt=""> 동호회 목록
+ </h1>
+ </td>
+ </tr>
+ <tr>
+ <td><c:import url="/cop/cus/ClubListPortlet.do" charEncoding="utf-8" />
+ </td>
+ </tr>
+ </table>
+
+</div>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovCmmntynClubView.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserList.jsp (revision 7)
@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovUserList.jsp
+ * @Description : 사용자 목록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.06 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.06
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_userInfo('1');
+ }
+ }
+
+ function fn_egov_select_userInfo(pageIndex) {
+ var _target = document.frm.targetMethod.value;
+ var actionUrl;
+
+ if (_target == 'selectClubOprtrList') {
+ actionUrl = "<c:url value='/cop/com/selectClubOprtrList.do'/>";
+ } else if (_target == 'selectClubUserList') {
+ actionUrl = "<c:url value='/cop/com/selectClubUserList.do'/>";
+ } else if (_target == 'selectCmmntyMngrList') {
+ actionUrl = "<c:url value='/cop/com/selectCmmntyMngrList.do'/>";
+ } else if (_target == 'selectCmmntyUserList') {
+ actionUrl = "<c:url value='/cop/com/selectCmmntyUserList.do'/>";
+ } else {
+ actionUrl = "<c:url value='/cop/com/selectUserList.do'/>";
+ }
+ document.frm.pageIndex.value = pageIndex;
+ document.frm.action = actionUrl;
+ document.frm.submit();
+ }
+
+ function fn_egov_deleteUser(emplyrId) {
+ var _target = document.frm.targetMethod.value;
+ var url;
+
+ if (confirm('<spring:message code="cop.withdraw.msg" />')) {
+
+ if (_target == 'selectCmmntyUserList') {
+ url = "<c:url value='/cop/com/deleteCmmntyUser.do'/>";
+ document.frm.param_cmmntyId.value = document.frm.trgetId.value;
+ } else if (_target == 'selectClubUserList') {
+ url = "<c:url value='/cop/com/deleteClbUser.do'/>";
+ document.frm.param_clbId.value = document.frm.trgetId.value;
+ }
+ document.frm.param_emplyrId.value = emplyrId;
+ document.frm.action = url;
+ document.frm.submit();
+ }
+ }
+
+ function fn_egov_reRegistUser(emplyrId){
+ var _target = document.frm.targetMethod.value;
+ var url;
+
+ if (confirm('<spring:message code="cop.reregist.msg" />')) {
+ if (_target == 'selectCmmntyUserList') {
+ url = "<c:url value='/cop/com/reRegistCmmntyUser.do'/>";
+ document.frm.param_cmmntyId.value = document.frm.trgetId.value;
+ } else if (_target == 'selectClubUserList') {
+ url = "<c:url value='/cop/com/reRegistClbUser.do'/>";
+ document.frm.param_clbId.value = document.frm.trgetId.value;
+ }
+
+ document.frm.param_emplyrId.value = emplyrId;
+ document.frm.action = url;
+ document.frm.submit();
+ }
+ }
+
+ function fn_egov_registManager(emplyrId) {
+ var _target = document.frm.targetMethod.value;
+ var url;
+
+ if (confirm('<spring:message code="cop.registmanager.msg" />')) {
+ if (_target == 'selectCmmntyUserList') {
+ url = "<c:url value='/cop/com/registCmmntyManager.do'/>";
+ document.frm.param_cmmntyId.value = document.frm.trgetId.value;
+ } else if (_target == 'selectClubUserList') {
+ url = "<c:url value='/cop/com/registClbOprtr.do'/>";
+ document.frm.param_clbId.value = document.frm.trgetId.value;
+ }
+ document.frm.param_emplyrId.value = emplyrId;
+ document.frm.action = url;
+ document.frm.submit();
+ }
+ }
+</script>
+<title>사용자 목록</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+
+</head>
+<body>
+<form name="frm" action ="" method="post">
+<input type="hidden" name="targetMethod" value="${targetMethod}" />
+<input type="hidden" name="trgetId" value="${trgetId}" />
+<input type="hidden" name="param_emplyrId" />
+<input type="hidden" name="param_cmmntyId" />
+<input type="hidden" name="param_clbId" />
+
+<div id="border" style="width:730px">
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="40%"class="title_left">
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목버튼이미지">
+ 사용자 목록</td>
+ <th >
+ </th>
+ <td width="10%" >
+ <select name="searchCnd" class="select" title="검색조건선택">
+ <!-- option selected value=''--><!--선택하세요--><!-- /option-->
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> >사용자명</option>
+ </select>
+ </td>
+ <td width="35%">
+ <input name="searchWrd" type="text" size="35" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="35" onkeypress="press(event);" title="검색단어입력">
+ </td>
+ <th width="10%">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <!--
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_left.gif' />" width="8" height="20" alt="button left"></td>
+ <td background="<c:url value='/images/egovframework/com/cmm/btn/bu2_bg.gif'/>" class="text_left" nowrap>
+ <a href="javascript:fn_egov_select_userInfo('1')">조회</a>
+ </td>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_right.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ -->
+ <td><span class="button"><input type="submit" value="조회" title="조회" onclick="javascript:fn_egov_select_userInfo('1');return false;"></span></td>
+ </tr>
+ </table>
+ </th>
+ </tr>
+ </table>
+ <table width="100%" cellpadding="8" class="table-line" summary="번호, 사용자아이디 , 사용자명, 주소, 이메일, 비고 목록입니다">
+ <thead>
+ <tr>
+ <!-- th class="title" width="3%" nowrap><input type="checkbox" name="all_check" class="check2"></th-->
+ <th scope="col" class="title" width="8%" nowrap>번호</th>
+ <th scope="col" class="title" width="12%" nowrap>사용자아이디</th>
+ <th scope="col" class="title" width="13%" nowrap>사용자명</th>
+ <th scope="col" class="title" width="35%" nowrap>주소</th>
+ <th scope="col" class="title" width="12%" nowrap>이메일</th>
+ <th scope="col" class="title" width="20%" nowrap>비고</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <!--td class="lt_text3" nowrap><input type="checkbox" name="check1" class="check2"></td-->
+ <td class="lt_text3" nowrap><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userId}" /></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userNm}" /></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userAdres}" /></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userEmail}" /></td>
+ <td class="lt_text3" nowrap>
+ <c:choose>
+ <c:when test="${result.useAt == 'Y'}">
+ <input type="button" value="탈퇴" onClick="javascript:fn_egov_deleteUser('<c:out value="${result.uniqId}"/>')" />
+ |<input type="button" value="운영진등록" onClick="javascript:fn_egov_registManager('<c:out value="${result.uniqId}"/>');" />
+ </c:when>
+ <c:otherwise>
+ |<input type="button" value="재가입" onClick="javascript:fn_egov_reRegistUser('<c:out value="${result.uniqId}"/>');" />
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td class="lt_text3" nowrap colspan="6" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ <!--tfoot>
+ <tr class="">
+ <td colspan=6 align="center"></td>
+ </tr>
+ </tfoot -->
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_userInfo" />
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+</div>
+</form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovUserList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovClbOprtrListPop.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovClbOprtrListPop.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovClbOprtrListPop.jsp (revision 7)
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovClbOprtrList.jsp
+ * @Description : 사용자 목록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.06 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.06
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function fn_egov_returnUserInfo(uniqId) {
+ document.frm.emplyrId.value = uniqId;
+ document.frm.action = "<c:url value='/cop/com/deleteClubUserBySelf.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_select_userInfo(pageIndex){
+ var _target = document.frm.targetMethod.value;
+ var actionUrl;
+
+ if (_target == 'selectClubOprtrList') {
+ actionUrl = "<c:url value='/cop/com/selectClubOprtrList.do'/>";
+ } else if (_target == 'selectClubUserList') {
+ actionUrl = "<c:url value='/cop/com/selectClubUserList.do'/>";
+ } else if (_target == 'selectCmmntyMngrList') {
+ actionUrl = "<c:url value='/cop/com/selectCmmntyMngrList.do'/>";
+ } else if (_target == 'selectCmmntyUserList') {
+ actionUrl = "<c:url value='/cop/com/selectCmmntyUserList.do'/>";
+ } else {
+ actionUrl = "<c:url value='/cop/com/selectUserList.do'/>";
+ }
+ document.frm.pageIndex.value = pageIndex;
+ document.frm.action = actionUrl;
+ document.frm.submit();
+ }
+
+ function fn_egov_close(){
+ window.close();
+ }
+</script>
+<title>승인자 선택</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+
+</head>
+<body>
+<form name="frm" action ="" method="post">
+<input type="hidden" name="targetMethod" value="${targetMethod}" />
+<input type="hidden" name="trgetId" value="${trgetId}" />
+<input type="hidden" name="PopFlag" value="S" />
+<input type="hidden" name="clbId" value="${trgetId}" />
+<input type="hidden" name="emplyrId" />
+
+
+
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="100%"class="title_left">
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="absmiddle" alt="제목버튼이미지">
+ 승인자 선택</td>
+ </tr>
+ </table>
+ <table width="100%" cellpadding="8" class="table-line">
+ <thead>
+ <tr>
+ <!-- th class="title" width="3%" nowrap><input type="checkbox" name="all_check" class="check2"></th-->
+ <th class="title" width="10%" nowrap>번호</th>
+ <th class="title" width="30%" nowrap>사용자아이디</th>
+ <th class="title" width="40%" nowrap>사용자명</th>
+ <th class="title" width="20%" nowrap>선택</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <!--td class="lt_text3" nowrap><input type="checkbox" name="check1" class="check2"></td-->
+ <td class="lt_text3" nowrap><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userId}" /></td>
+ <td class="lt_text3" nowrap><c:out value="${result.userNm}" /></td>
+ <td class="lt_text3" nowrap>
+ <c:if test="${result.useAt == 'Y'}">
+ <input type="button" name="selectUser" value="선택"
+ onClick="javascript:fn_egov_returnUserInfo('<c:out value="${result.uniqId}" />');" />
+ </c:if>
+ </td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td class="lt_text3" nowrap colspan="4" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ <!--tfoot>
+ <tr class="">
+ <td colspan=6 align="center"></td>
+ </tr>
+ </tfoot -->
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_userInfo" />
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <table border="0" cellspacing="0" cellpadding="0" align="center">
+ <tr>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_left.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ <td background="<c:url value='/images/egovframework/com/cmm/btn/bu2_bg.gif'/>" class="text_left" nowrap>
+ <a href="javascript:fn_egov_close()">닫기</a>
+ </td>
+ <td><img src="<c:url value='/images/egovframework/com/cmm/btn/bu2_right.gif'/>" width="8" height="20" alt="버튼이미지"></td>
+ </tr>
+ </table>
+ </div>
+</form>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovClbOprtrListPop.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfList.jsp (revision 7)
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovBoardUseInfList.jsp
+ * @Description : 게시판 사용정보 목록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.02 이삼섭 최초 생성
+ * 2011.09.15 서준식 동호회, 커뮤니티 사용 체크 로직 추가
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_bbsUseInfs('1');
+ }
+ }
+
+ function fn_egov_select_bbsUseInfs(pageNo){
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/cop/com/selectBBSUseInfs.do'/>";
+ document.frm.submit();
+ }
+ function fn_egov_insert_addbbsUseInf(){
+ document.frm.action = "<c:url value='/cop/com/addBBSUseInf.do'/>";
+ document.frm.submit();
+ }
+ function fn_egov_select_bbsUseInf(bbsId, trgetId){
+ document.frm.bbsId.value = bbsId;
+ document.frm.trgetId.value = trgetId;
+ document.frm.action = "<c:url value='/cop/com/selectBBSUseInf.do'/>";
+ document.frm.submit();
+ }
+
+</script>
+<title>게시판 사용정보 조회</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+
+ A:link { color: #000000; text-decoration:none; }
+ A:visited { color: #000000; text-decoration:none; }
+ A:active { color: #000000; text-decoration:none; }
+ A:hover { color: #fa2e2e; text-decoration:none; }
+</style>
+
+
+</head>
+<body>
+<div id="border" style="width:730px">
+
+<form name="frm" method="post" action = "<c:url value='/cop/com/selectBBSUseInf.do'/>">
+<div style="visibility:hidden;display:none;"><input name="iptSubmit" type="submit" value="전송" title="전송"></div>
+<input type="hidden" name="bbsId" >
+<input type="hidden" name="trgetId" >
+
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="40%"class="title_left">
+ <h1>
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목아이콘이미지"> 게시판 사용정보 조회
+ </h1>
+ </td>
+ <th >
+ </th>
+ <td width="10%" >
+ <select name="searchCnd" class="select" title="선택">
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> >게시판명</option>
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected="selected"</c:if> >사용 커뮤니티명</option>
+ <option value="2" <c:if test="${searchVO.searchCnd == '2'}">selected="selected"</c:if> >사용 동호회명</option>
+ </select>
+ </td>
+ <td width="35%">
+ <input name="searchWrd" type="text" size="35" title="검색단어입력" value='<c:out value="${searchVO.searchWrd}" />' maxlength="35" onkeypress="press(event);">
+ </td>
+ <th width="10%">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><span class="button">
+ <a href="<c:url value='/cop/com/selectBBSUseInfs.do'/>" onclick="fn_egov_select_bbsUseInfs('1'); return false;">조회</a>
+ </span></td>
+ <td> </td>
+ <td><span class="button">
+ <a href="<c:url value='/cop/com/addBBSUseInf.do'/>" onclick="fn_egov_insert_addbbsUseInf(); return false;">등록</a>
+ </span></td>
+ </tr>
+ </table>
+ </th>
+ </tr>
+ </table>
+
+ <table width="100%" cellpadding="8" class="table-line" summary="번호,게시판명,사용 커뮤니티 명,사용 동호회 명,등록일시,사용여부 목록입니다">
+ <thead>
+ <tr>
+ <!-- th class="title" width="3%" nowrap><input type="checkbox" name="all_check" class="check2"></th-->
+ <th scope="col" class="title" width="10%" nowrap>번호</th>
+
+
+ <c:choose>
+ <c:when test="${useCommunity == 'true'}">
+ <th scope="col" class="title" width="30%" nowrap>게시판명</th>
+ <th scope="col" class="title" width="20%" nowrap>사용 커뮤니티 명</th>
+ <th scope="col" class="title" width="15%" nowrap>사용 동호회 명</th>
+ </c:when>
+ <c:otherwise>
+ <th scope="col" class="title" width="65%" nowrap>게시판명</th>
+ </c:otherwise>
+ </c:choose>
+
+ <th scope="col" class="title" width="15%" nowrap>등록일시</th>
+ <th scope="col" class="title" width="7%" nowrap>사용여부</th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td class="lt_text3" nowrap><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <!-- 2011.09.15 -->
+ <c:choose>
+ <c:when test="${useCommunity == 'true'}">
+ <td class="lt_text" nowrap>
+
+ <!-- 2010.11.1
+ <form name="item" method="post" action="<c:url value='/cop/com/selectBBSUseInf.do'/>" target="_blank">
+ <input type=hidden name="bbsId" value="<c:out value="${result.bbsId}"/>">
+ <input type=hidden name="trgetId" value="<c:out value="${result.trgetId}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${result.bbsNm}"/>" onclick="fn_egov_select_bbsUseInf('<c:out value="${result.bbsId}"/>','<c:out value="${result.trgetId}"/>'); return false;"></span>
+ </form>
+ -->
+
+ <input type=hidden name="bbsId" value="<c:out value="${result.bbsId}"/>">
+ <input type=hidden name="trgetId" value="<c:out value="${result.trgetId}"/>">
+
+ <a href="<c:url value='/cop/com/selectBBSUseInf.do'/>?bbsId=<c:out value='${result.bbsId}'/>&trgetId=<c:out value='${result.trgetId}'/>" onclick="">
+ <c:out value="${result.bbsNm}"/>
+ </a>
+
+ </td>
+ <td class="lt_text3" nowrap><c:out value="${result.cmmntyNm}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.clbNm}"/></td>
+ </c:when>
+ <c:otherwise>
+ <td class="lt_text" nowrap>
+
+ <input type=hidden name="bbsId" value="<c:out value="${result.bbsId}"/>">
+ <input type=hidden name="trgetId" value="<c:out value="${result.trgetId}"/>">
+
+ <a href="<c:url value='/cop/com/selectBBSUseInf.do'/>?bbsId=<c:out value='${result.bbsId}'/>&trgetId=<c:out value='${result.trgetId}'/>" onclick="">
+ <c:out value="${result.bbsNm}"/>
+ </a>
+
+ </td>
+ </c:otherwise>
+ </c:choose>
+
+
+
+ <td class="lt_text3" nowrap><c:out value="${result.frstRegisterPnttm}"/></td>
+ <td class="lt_text3" nowrap>
+ <c:if test="${result.useAt == 'N'}"><spring:message code="button.notUsed" /></c:if>
+ <c:if test="${result.useAt == 'Y'}"><spring:message code="button.use" /></c:if>
+ </td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td class="lt_text3" nowrap colspan="6" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="fn_egov_select_bbsUseInfs" />
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ </form>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovBoardUseInfList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfirmList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfirmList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfirmList.jsp (revision 7)
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="ImgUrl" value="/images/egovframework/com/cop/com/"/>
+<%
+ /**
+ * @Class Name : EgovConfirmList.jsp
+ * @Description : 승인 목록화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.13 이삼섭 최초 생성
+ * 2011.9.7 정진오 승인요청자 목록이 해당 커뮤니티 또는 해당 동호회에 한하여 조회되도록 수정함
+ * trgetId가 파라미터로 서버측으로 전송되어야 하나 누락되었음. 전송되도록 수정함
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_confirmList('1');
+ }
+ }
+
+ function fn_egov_select_confirmList(pageNo) {
+ var target = document.frm.trgetId.value;
+ var actionUrl;
+
+ if (target == '') {
+ actionUrl = "<c:url value='/cop/com/selectConfirmRequest.do'/>";
+ } else {
+ actionUrl = "<c:url value='/cop/com/selectConfirmRequestByTrget.do'/>";
+ }
+
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = actionUrl;
+ document.frm.submit();
+ }
+
+ function fn_egov_inqire_confirmInfo(cnfmNo,trgetId) {
+ document.frm.confmNumber.value = cnfmNo;
+ document.frm.trgetId.value = trgetId;
+ document.frm.action = "<c:url value='/cop/com/forUpdateConfirmRequest.do'/>";
+ document.frm.submit();
+ }
+</script>
+<title>승인 목록</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+
+ A:link { color: #000000; text-decoration:none; }
+ A:visited { color: #000000; text-decoration:none; }
+ A:active { color: #000000; text-decoration:none; }
+ A:hover { color: #fa2e2e; text-decoration:none; }
+</style>
+
+</head>
+<body>
+
+<div id="border" style="width:730px">
+<form name="frm" action ="<c:url value='/cop/com/forUpdateConfirmRequest.do' />" method="post">
+ <input type="hidden" name="confmNumber" value="0" />
+ <input type="hidden" name="confmerId" value='<c:out value="${searchVO.confmerId}"/>' />
+
+ <input type="hidden" name="trgetId" value="<c:out value="${searchVO.trgetId}"/>" />
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <table width="100%" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="40%"class="title_left">
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목아이콘이미지">
+ 승인 목록</td>
+ <th >
+ </th>
+ <td width="10%" >
+ <select name="searchCnd" class="select" title="검색조건선택">
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> >승인유형</option>
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected="selected"</c:if> >승인상태</option>
+ </select>
+ </td>
+ <td width="35%">
+ <input name="searchWrd" type="text" size="35" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="35" onkeypress="press(event);" title="검색어 입력">
+ </td>
+ <th width="10%">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <!--
+ <td><img src="<c:out value="${ImgUrl}" />btn/bu2_left.gif" width="8" height="20"></td>
+ <td class="btnBackground" nowrap><input type="submit" value="<spring:message code="button.inquire" />" onclick="fn_egov_select_confirmList('1'); return false;" style="height:20px;width:26px;padding:0px 0px 0px 0px;" ></td>
+ <td><img src="<c:out value="${ImgUrl}" />btn/bu2_right.gif" width="8" height="20"></td>
+ -->
+ <td><span class="button"><input type="button" value="<spring:message code="button.inquire" />" title="<spring:message code="button.inquire" />" onclick="fn_egov_select_confirmList('1');return false;"></span></td>
+ </tr>
+ </table>
+ </th>
+ </tr>
+ </table>
+</form>
+ <table width="100%" cellpadding="8" class="table-line">
+ <thead>
+ <tr>
+ <!-- th class="title" width="3%" nowrap><input type="checkbox" name="all_check" class="check2"></th-->
+ <th class="title" width="10%" nowrap>번호</th>
+ <th class="title" width="15%" nowrap>승인유형</th>
+ <th class="title" width="10%" nowrap>승인상태</th>
+ <th class="title" width="22%" nowrap>승인요청자</th>
+ <th class="title" width="20%" nowrap>대상업무유형</th>
+ <th class="title" width="10%" nowrap>승인일자</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <!--td class="lt_text3" nowrap><input type="checkbox" name="check1" class="check2"></td-->
+ <td class="lt_text3" nowrap><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="lt_text3" nowrap>
+ <c:choose>
+ <c:when test="${result.confmSttusCode == 'AP01'}">
+ <input type="hidden" name="confmNumber" value="0" />
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <!-- a href="<c:url value='/cop/cmy/selectCmmntyInf.do'/>?confmNumber=0"; onclick="">
+ <c:out value="${result.confmTyCodeNm}"/>
+ </a-->
+ <!-- a href="<c:url value='/cop/com/forUpdateConfirmRequest.do'/>?confmNumber=0"; onclick="">
+ <c:out value="${result.confmTyCodeNm}"/>
+ </a-->
+ <!-- 2011.9.7 수정분 -->
+ <a href="javascript:fn_egov_inqire_confirmInfo(<c:out value='${result.confmNumber}'/>, '<c:out value='${result.trgetJobId}'/>');">
+ <c:out value="${result.confmTyCodeNm}"/>
+ </a>
+
+
+
+ </c:when>
+ <c:otherwise>
+ <c:out value="${result.confmTyCodeNm}"/>
+ </c:otherwise>
+ </c:choose>
+
+ </td>
+ <td class="lt_text3" nowrap><c:out value="${result.confmSttusCodeNm}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.confmRqesterNm}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.opertTyCodeNm}"/></td>
+ <td class="lt_text3" nowrap><c:out value="${result.confmDe}"/></td >
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td class="lt_text3" nowrap colspan="6" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+
+ </tbody>
+
+ </table>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+ <div align="center">
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_confirmList" />
+ </div>
+</div>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovConfirmList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovModalPopupFrame.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovModalPopupFrame.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovModalPopupFrame.jsp (revision 7)
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovModalPopupFrame.jsp
+ * @Description : 모달 팝업을 위한 외부 프레임
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.06 이삼섭 최초 생성
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.06
+ * @version 1.0
+ *
+ */
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/showModalDialogCallee.js'/>" ></script>
+<script type="text/javascript">
+ function fn_egov_returnValue(retVal){
+ setReturnValue(retVal);
+
+ window.returnValue = retVal;
+ window.close();
+ }
+
+ function closeWindow(){
+ window.close();
+ }
+</script>
+<title>선택 목록</title>
+
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+
+
+</head>
+<body>
+ <iframe id="popupFrame" src="<c:url value='${requestUrl}' />" width="${width}" height="${height}" align="middle" frameborder="0" title="팝업창열기"></iframe>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/com/EgovModalPopupFrame.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageRegist.jsp (revision 7)
@@ -0,0 +1,252 @@
+
+<%
+ /**
+ * @Class Name : EgovArticleRegist.jsp
+ * @Description : EgovArticleRegist 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * 2018.06.05 신용호 CK Editor V4.9.2 Upgrade
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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">
+ <spring:message code="comCopBbs.articleVO.title" />
+</c:set>
+<c:set var="reBbsId" value="${fn:replace(boardMasterVO.bbsId, \"BBSMSTR_\", \"\")}" />
+<title>${pageTitle}<spring:message code="title.create" /></title>
+<!-- 게시글 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<!-- 에디터 관련 추가 CSS, Javascript 추가 -->
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate" scope="application" />
+<!-- Include Editor style. -->
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_editor.pkgd.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_style.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/font-awesome/css/font-awesome.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/codemirror/lib/codemirror.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<!-- Include Editor JS files. -->
+<script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor.pkgd.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/js/languages/ko.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor_script_custom.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/codemirror.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/xml.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<!-- 에디터 관련 추가 CSS, Javascript 종료 -->
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false" />
+<script type="text/javascript">
+ /* ********************************************************
+ * 초기화
+ ******************************************************** */
+ function fn_egov_init() {
+ // 첫 입력란에 포커스
+ document.getElementById("articleVO").nttSj.focus();
+ }
+ /* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+ function fn_egov_regist_article(form) {
+ // 개인정보입력 체크.
+ if (!fnPrivacyCheck(form.nttSj.value)) { // 제목
+ return false;
+ }
+ if (!fnPrivacyCheck(form.nttCn.value)) { // 내용
+ return false;
+ }
+ //input item Client-Side validate
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+ //비밀글은 공지게시 불가.
+ if (validateForm.secretAt.checked) {
+ if (validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretNotice" />");
+ return;
+ }
+ }
+
+ if (confirm("<spring:message code="common.regist.msg" />")) {
+ form.submit();
+ }
+ }
+ }
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_inqire_articlelist() {
+ articleVO.action = "<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleList.do'/>";
+ articleVO.submit();
+ }
+</script>
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle">
+ <spring:message code="common.noScriptTitle.msg" />
+</noscript>
+
+<form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/manage/${reBbsId}/insertArticle.do" method="post">
+ <div class="board_header">
+ <!-- 타이틀 -->
+ <h3>${boardMasterVO.bbsNm}</h3>
+ <!-- 게시글 등록 -->
+ </div>
+ <div class="board_body">
+ <!-- 등록폼 -->
+ <p class="must_text">
+ <em>*</em>는 필수 입력사항입니다.
+ </p>
+ <table class="table_write">
+ <caption>게시글 등록 - 제목, 내용, 공지신청여부, 비밀글여부, 첨부파일등록으로 구성</caption>
+ <colgroup>
+ <col style="width: 200px;">
+ <col style="width:;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt">
+ <spring:message code="input.input" />
+ </c:set>
+ <!-- 글 제목, 제목 Bold여부 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.regist.nttSj" />
+ </c:set>
+ <tr>
+ <th scope="col" class="must"><label for="nttSj">${title}</label></th>
+ <td class="left">
+ <form:input path="nttSj" title="${title} ${inputTxt}" maxlength="70" class="width100p inputText" />
+ <div>
+ <form:errors path="nttSj" cssClass="error" />
+ </div>
+ </td>
+ </tr>
+ <!-- 글 내용 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.regist.nttCn" />
+ </c:set>
+ <tr>
+ <th scope="col" class="must"><label for="nttCn">${title}</label></th>
+ <td class="nopd">
+ <textarea id="nttCn" name="nttCn">
+<%-- <c:if test="${not empty boardMasterVO.bbsForm}">${boardMasterVO.bbsForm}</c:if> --%>
+ </textarea>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.regist.noticeAt" />
+ </c:set>
+ <tr>
+ <th scope="col"><label for="noticeAt">${title}</label></th>
+ <td class="alignL">
+ <div class="check_wrap">
+ <input type="checkbox" id="noticeAt" name="noticeAt" value="Y">
+ <label for="noticeAt">공지로 등록</label>
+ </div>
+ </td>
+ </tr>
+
+ <!-- 비밀글 여부 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.regist.secretAt" />
+ </c:set>
+ <tr>
+ <th scope="col"><label for="secretAt">${title}</label></th>
+ <td class="alignL relative">
+ <div class="check_wrap">
+ <input type="checkbox" id="secretAt" name="secretAt" value="Y">
+ <label for="secretAt">비밀글 등록</label>
+ </div>
+ </td>
+ </tr>
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.regist.atchFile" />
+ </c:set>
+ <tr>
+ <th scope="col"><label for="egovComFileUploader">${title}</label></th>
+ <td class="nopd">
+ <div class="space5"></div>
+ <div class="file_up">
+ <label for="egovComFileUploader" class="inputFile" title="업로드 할 파일을 선택해주세요">파일업로드</label>
+ <input type="file" id="egovComFileUploader" name="file_1" title="<spring:message code="comCopBbs.articleVO.regist.atchFile"/>" />
+ <!-- 첨부파일 -->
+ <input type="hidden" id="atchFileId" name="atchFileId" value="" />
+ </div>
+ <em class="exp filenote">※ 파일당 10MB까지 첨부 가능합니다.</em>
+ <ul id="egovComFileList" class="file_list addFileSize" style="display: none;"></ul>
+ </td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ </table>
+ </div>
+ <div class="board_footer">
+ <!-- 하단 버튼 -->
+ <div class="bottom_wrap fl">
+ <button type="button" class="btn_s" title="<spring:message code="button.list" /> <spring:message code="input.button" />" onclick="fn_egov_inqire_articlelist();">
+ <spring:message code="button.list" />
+ </button>
+ <!-- 목록 -->
+ </div>
+ <div class="bottom_wrap fr">
+ <button type="button" class="btn_s" title="<spring:message code="button.create" /> <spring:message code="input.button" />" onclick="fn_egov_regist_article(document.forms[0]); return false;">
+ <spring:message code="button.create" />
+ </button>
+ <!-- 등록 -->
+ </div>
+ <div style="clear: both;"></div>
+ </div>
+
+ <input type="hidden" name="pageIndex" value="${searchVO.pageIndex}" />
+ <input type="hidden" name="bbsTyCode" value="${boardMasterVO.bbsTyCode}" />
+ <input type="hidden" name="replyPosblAt" value="${boardMasterVO.replyPosblAt}" />
+ <input type="hidden" name="fileAtchPosblAt" value="${boardMasterVO.fileAtchPosblAt}" />
+ <input type="hidden" id="atchPosblFileNumber" name="atchPosblFileNumber" value="${boardMasterVO.atchPosblFileNumber}" />
+ <input type="hidden" id="atchPosblFileSize" name="atchPosblFileSize" value="${boardMasterVO.atchPosblFileSize}" />
+ <input type="hidden" name="blogId" value="${searchVO.blogId}" />
+ <input type="hidden" name="blogAt" value="${articleVO.blogAt}" />
+ <input type="hidden" name="cmd" value="save">
+ <input type="hidden" name="bbsId" value="${articleVO.bbsId}">
+</form:form>
+<!-- 첨부파일 업로드 가능화일 설정 Start..-->
+<script type="text/javascript">
+ $(function() {
+ var atchPosblFileNumber = $('#atchPosblFileNumber').val();
+ var atchPosblFileSize = $('#atchPosblFileSize').val();
+ var options = {
+ fileListDivId : 'egovComFileList',
+ inputFileId : 'egovComFileUploader',
+ hiddenFileName : 'atchFileId',
+ txtAreaId : 'nttCn',
+ authorType : 'admin',
+ maxSize : atchPosblFileNumber,
+ fileMaxSize : atchPosblFileSize
+ }
+ $('#nttCn').initEditor(options);
+ });
+</script>
+<!-- 첨부파일 업로드 가능화일 설정 End.-->
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageReply.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageReply.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageReply.jsp (revision 7)
@@ -0,0 +1,230 @@
+<%
+ /**
+ * @Class Name : EgovArticleReply.jsp
+ * @Description : EgovArticleReply 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<c:set var="reBbsId" value="${fn:replace(boardMasterVO.bbsId, \"BBSMSTR_\", \"\")}"/>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 게시글 답글 등록-->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<!-- 에디터 관련 추가 CSS, Javascript 추가 -->
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate" scope="application"/>
+<!-- Include Editor style. -->
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_editor.pkgd.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_style.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/font-awesome/css/font-awesome.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/codemirror/lib/codemirror.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<!-- Include Editor JS files. -->
+<script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor.pkgd.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/js/languages/ko.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor_script_custom.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/codemirror.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/xml.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<!-- 에디터 관련 추가 CSS, Javascript 종료 -->
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스
+ document.getElementById("articleVO").nttSj.focus();
+
+}
+/* ********************************************************
+ * 답글저장처리화면
+ ******************************************************** */
+function fn_egov_reply_article(form){
+ // 개인정보입력 체크.
+ if (!fnPrivacyCheck(form.nttSj.value)) { // 제목
+ return false;
+ }
+ if (!fnPrivacyCheck(form.nttCn.value)) { // 내용
+ return false;
+ }
+ //input item Client-Side validate
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+ //비밀글은 공지게시 불가.
+ if(validateForm.secretAt.checked) {
+ if(validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretNotice" />");
+ return;
+ }
+ }
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_inqire_articlelist() {
+ $('#articleVO').attr('action',"<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleList.do'/>");
+ $('#articleVO').submit();
+}
+</script>
+
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="articleVO" action="/cop/bbs/manage/${reBbsId}/replyArticle.do" method="post" >
+<div class="board_header">
+ <!-- 타이틀 -->
+ <h3>${boardMasterVO.bbsNm}</h3><!-- 게시글 답글 등록-->
+</div>
+<div class="board_body">
+ <!-- 등록폼 -->
+ <p class="must_text"><em>*</em>는 필수 입력사항입니다.</p>
+ <table class="table_write">
+ <caption>답글등록 - 제목, 내용, 공지신청 여부, 비밀글 여부, 첨부파일 추가로 구성</caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 글 제목, 제목 Bold여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.nttSj"/> </c:set>
+ <tr>
+ <th scope="col" class="must"><label for="nttSj">${title}</label></th>
+ <td class="left">
+ <input name="nttSj" type="text" size="70" maxlength="70" title="${title} ${inputTxt}" value="RE: ${result.nttSj}" class="width100p inputText">
+ <div><form:errors path="nttSj" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 글 내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.nttCn"/> </c:set>
+ <tr>
+ <th scope="col" class="must"><label for="nttCn">${title }</label></th>
+ <td class="nopd">
+ <textarea id="nttCn" name="nttCn">
+ <c:if test="${not empty boardMasterVO.bbsForm}">${boardMasterVO.bbsForm}</c:if>
+ </textarea>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.noticeAt"/> </c:set>
+ <tr>
+ <th scope="col"><label for="noticeAt">${title}</label></th>
+ <td class="left">
+ <div class="check_wrap pt10 pl10">
+ <input type="checkbox" id="noticeAt" name="noticeAt" value="Y"><label for="noticeAt"></label>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀글 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.secretAt" /></c:set>
+ <tr>
+ <th scope="col"><label for="secretAt">${title}</label></th>
+ <td class="left" >
+ <div class="check_wrap pt10 pl10">
+ <input type="checkbox" id="secretAt" name="secretAt" value="Y" <c:if test="${articleVO.secretAt eq 'Y'}">checked="checked"</c:if>><label for="secretAt"></label>
+ </div>
+ </td>
+ </tr>
+ <%-- <!-- 익명등록 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.anonymousAt"/> </c:set>
+ <tr>
+ <th scope="col"><label for="anonymousAt">${title}</label></th>
+ <td class="left">
+ <div class="check_wrap pt10 pl10">
+ <input type="checkbox" id="anonymousAt" name="anonymousAt" value="Y"><label for="anonymousAt"><span></span></label>
+ </div>
+ </td>
+ </tr> --%>
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 추가 시작 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.atchFileAdd"/></c:set>
+ <tr>
+ <th scope="col"><label for="file_1">${title}</label> </th>
+ <td class="nopd" >
+ <input type="file" id="egovComFileUploader" name="file_1" title="<spring:message code="comCopBbs.articleVO.regist.atchFile"/>" multiple/><!-- 첨부파일 -->
+ <input type="hidden" id="atchFileId" name="atchFileId" value="" />
+ <div id="egovComFileList" class="file_list_iv" style="display: none;"></div>
+ </td>
+ </tr>
+ <!-- 첨부파일 추가 끝 -->
+ </c:if>
+
+ </tbody>
+ </table>
+
+</div>
+<!-- 하단 버튼 -->
+<div class="board_footer">
+ <div class="bottom_wrap fr">
+ <button type="button" class="btn_s" title="<spring:message code="button.create" /> <spring:message code="input.button" />" onclick="fn_egov_reply_article(document.forms[0]); return false;" ><spring:message code="button.create" /></button><!-- 등록 -->
+ <button type="button" class="btn_s" title="<spring:message code="button.list" /> <spring:message code="input.button" />" onclick="fn_egov_inqire_articlelist(); return false;" ><spring:message code="button.list" /></button><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+</div>
+
+<input name="pageIndex" type="hidden" value="${searchVO.pageIndex}"/>
+<input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}"/>
+<input type="hidden" name="bbsTyCode" value="${boardMasterVO.bbsTyCode}" />
+<input type="hidden" name="replyPosblAt" value="${boardMasterVO.replyPosblAt}" />
+<input type="hidden" name="fileAtchPosblAt" value="${boardMasterVO.fileAtchPosblAt}" />
+<input type="hidden" id="atchPosblFileNumber" name="atchPosblFileNumber" value="${boardMasterVO.atchPosblFileNumber}" />
+<input type="hidden" id="atchPosblFileSize" name="atchPosblFileSize" value="${boardMasterVO.atchPosblFileSize}" />
+
+<input type="hidden" name="parnts" value="${result.parnts}" />
+<input type="hidden" name="sortOrdr" value="${result.sortOrdr}" />
+<input type="hidden" name="replyLc" value="${result.replyLc}" />
+
+<input name="nttId" type="hidden" value="${result.nttId}">
+<input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+<input name="cmd" type="hidden" value="save">
+</form:form>
+<!-- 첨부파일 업로드 가능화일 설정 Start..-->
+<script type="text/javascript">
+$(function(){
+ var atchPosblFileNumber = $('#atchPosblFileNumber').val();
+ var atchPosblFileSize = $('#atchPosblFileSize').val();
+ var options = {
+ fileListDivId : 'egovComFileList',
+ inputFileId : 'egovComFileUploader',
+ hiddenFileName : 'atchFileId',
+ txtAreaId : 'nttCn',
+ authorType : 'admin',
+ maxSize: atchPosblFileNumber,
+ fileMaxSize: atchPosblFileSize
+ }
+ $('#nttCn').initEditor(options);
+});
+
+</script>
+<!-- 첨부파일 업로드 가능화일 설정 End.-->
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageReply.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogList.jsp (revision 7)
@@ -0,0 +1,164 @@
+<%
+ /**
+ * @Class Name : EgovBlogMasterList.jsp
+ * @Description : EgovBlogMasterList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comCopBlog.blogMasterVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 블로그 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery-1.12.4.min.js' />"></script>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.BlogMasterForm.searchCnd.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.BlogMasterForm.pageIndex.value = pageNo;
+ document.BlogMasterForm.action = "<c:url value='/cop/bbs/selectBlogMasterList.do'/>";
+ document.BlogMasterForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_blog(){
+ document.BlogMasterForm.pageIndex.value = 1;
+ document.BlogMasterForm.submit();
+}
+
+function fn_insert_Blog() {
+ document.BlogMasterForm.action = "<c:url value='/cop/bbs/insertBlogMasterView.do'/>";
+ document.BlogMasterForm.submit();
+}
+
+function fn_userChk(userId) {
+ $.ajax({
+ url :"<c:url value='/cop/bbs/selectChkBloguser.do'/>"
+ ,type: "POST"
+ ,dataType: 'json'
+ ,success : function(data){
+ if(data['userChk'] == "EXIST") {
+ alert("블로그가 이미 생성되어 있습니다.\n하나의 계정으로 하나의 블로그만 생성 가능합니다.")
+ }else{
+ fn_insert_Blog();
+ }
+ }
+ ,error: function(){
+ alert("장애가 발생했습니다. 관리자에게 문의 하세요.");
+ }
+ });
+}
+
+</script>
+</head>
+<body onload="fn_egov_init()">
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="BlogMasterForm" action="<c:url value='/cop/bbs/selectBlogList.do'/>" method="post" onSubmit="fn_egov_search_blog(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 블로그 목록 -->
+ <!-- 하단 버튼 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCnd" title="<spring:message code="title.searchCondition" /> <spring:message code="input.cSelect" />">
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comCopBlog.blogMasterVO.list.blogNm" /></option><!-- 블로그명 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ <span class="btn_b"><a href="#" onClick="fn_userChk('<c:out value="${searchVO.frstRegisterId}"/>')" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th class="board_th_link"><spring:message code="comCopBlog.blogMasterVO.list.blogNm" /></th><!-- 블로그명 -->
+ <th><spring:message code="table.reger" /></th><!-- 작성자명 -->
+ <th><spring:message code="table.regdate" /></th><!-- 작성시각 -->
+ <th><spring:message code="comCopBlog.blogMasterVO.list.useAt" /></th><!-- 사용여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="left"><a href="<c:url value='/cop/bbs/selectArticleBlogList.do'/>?blogId=${resultInfo.blogId}&bbsId=${resultInfo.bbsId}"><c:out value='${fn:substring(resultInfo.blogNm, 0, 40)}'/></a></td>
+ <td><c:out value='${resultInfo.frstRegisterNm}'/></td>
+ <td><c:out value='${resultInfo.frstRegisterPnttm}'/></td>
+ <td><c:out value='${resultInfo.useAt}'/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+ <!-- 등록버튼 -->
+ <!--
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/cop/blog/insertBlogMasterView.do' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </div>
+ -->
+
+</div>
+
+<input name="blogId" type="hidden" value="">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterDetail.jsp (revision 7)
@@ -0,0 +1,131 @@
+<%
+ /**
+ * @Class Name : EgovBBSMasterDetail.jsp
+ * @Description : EgovBBSMasterDetail 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"%>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.boardMasterVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title><!-- 게시판 상세조회 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_bbs(bbsId){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ document.BBSMasterForm.bbsId.value = bbsId;
+ document.BBSMasterForm.action = "<c:url value='/cop/bbs/deleteBBSMaster.do'/>";
+ document.BBSMasterForm.submit();
+ }
+}
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="BBSMasterForm" action="<c:url value='/cop/bbs/updateBBSMasterView.do'/>" method="post">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2><!-- 게시판 상세조회 -->
+
+ <!-- 상세조회 -->
+ <table class="wTable" summary="<spring:message code="common.summary.inqire" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 게시판명 -->
+ <tr>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.bbsNm" /></th>
+ <td colspan="3" class="left"><c:out value="${result.bbsNm}"/></td>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.bbsTyCode" /></th>
+ <td class="left"><c:out value="${result.bbsTyCodeNm}"/></td>
+ </tr>
+ <!-- 등록자, 등록일, 사용여부 -->
+ <tr>
+ <th><spring:message code="table.reger" /></th>
+ <td class="left"><c:out value="${result.frstRegisterNm}"/></td>
+ <th><spring:message code="table.regdate" /></th>
+ <td class="left"><c:out value="${result.frstRegisterPnttm}"/></td>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.useAt" /></th>
+ <td class="left"><c:out value="${result.useAt}"/></td>
+ </tr>
+ <!-- 답장가능여부, 파일첨부가능여부, 첨부가능파일숫자 -->
+ <tr>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.replyPosblAt" /></th>
+ <td class="left"><c:out value="${result.replyPosblAt}"/></td>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.fileAtchPosblAt" /></th>
+ <td class="left"><c:out value="${result.fileAtchPosblAt}"/></td>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.atchPosblFileNumber" /></th>
+ <td class="left"><c:out value="${result.atchPosblFileNumber}"/></td>
+ </tr>
+ <!-- 게시판 소개내용 -->
+ <tr>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.bbsIntrcn" /></th>
+ <td colspan="5" class="cnt">
+ <c:out value="${fn:replace(result.bbsIntrcn , crlf , '<br/>')}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <c:if test="${result.useAt == 'Y' }">
+ <tr>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.bbsAdres" /></th>
+ <td colspan="5" class="cnt">
+ <a href="<c:url value='/cop/bbs/selectArticleList.do?bbsId=${result.bbsId}' />">/cop/bbs/selectArticleList.do?bbsId=${result.bbsId }</a>
+ </td>
+ </tr>
+ </c:if>
+ <tr>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.option" /></th><!-- 추가선택사항 -->
+ <td colspan="5" class="cnt">
+ <c:if test="${result.option == ''}"><spring:message code="comCopBbs.boardMasterVO.detail.option1" /></c:if><!-- 미선택 -->
+ <c:if test="${result.option == 'comment'}"><spring:message code="comCopBbs.boardMasterVO.detail.option2" /></c:if><!-- 댓글 -->
+ <c:if test="${result.option == 'stsfdg'}"><spring:message code="comCopBbs.boardMasterVO.detail.option3" /></c:if><!-- 만족도조사 -->
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="title.update" /> <spring:message code="input.button" />" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectBBSMasterInfs.do' /><c:if test='${result.cmmntyId != null}'>?cmmntyId=${result.cmmntyId}</c:if>" title="<spring:message code="title.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="cmmntyId" type="hidden" value="<c:out value="${result.cmmntyId}" />">
+<input name="bbsId" type="hidden" value="<c:out value="${result.bbsId}" />">
+<input name="cmd" type="hidden" value="">
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleDetail.jsp (revision 7)
@@ -0,0 +1,244 @@
+<%
+ /**
+ * @Class Name : EgovArticleDetail.jsp
+ * @Description : EgovArticleDetail 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title><!-- 게시글 상세조회 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_article(form){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ form.submit();
+ }
+}
+
+/* ********************************************************
+ * 답글작성
+ ******************************************************** */
+ function fn_egov_reply_article() {
+ document.articleForm.action = "<c:url value='/cop/bbs/replyArticleView.do'/>";
+ document.articleForm.submit();
+ }
+
+</script>
+<!-- 댓글 작성 스크립트 -->
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="articleCommentVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+function fn_egov_insert_commentList() {
+
+ var form = document.getElementById("articleCommentVO");
+
+ if (!validateArticleCommentVO(form)){
+ return;
+ }
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ form.submit();
+ }
+}
+
+function fn_egov_updt_commentList() {
+
+ var form = document.getElementById("articleCommentVO");
+
+ if (!validateArticleCommentVO(form)){
+ return;
+ }
+
+ if (confirm('<spring:message code="common.update.msg" />')) {
+ form.modified.value = "true";
+ form.action = "<c:url value='/cop/cmt/updateArticleComment.do'/>";
+ form.submit();
+ }
+}
+
+function fn_egov_selectCommentForupdt(commentNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+ form.commentNo.value = commentNo;
+ form.action = "<c:url value='/cop/bbs/selectArticleDetail.do'/>";
+ form.submit();
+}
+
+function fn_egov_deleteCommentList(commentNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+ if (confirm('<spring:message code="common.delete.msg" />')) {
+ form.modified.value = "true";
+ form.commentNo.value = commentNo;
+ form.action = "<c:url value='/cop/cmt/deleteArticleComment.do'/>";
+ form.submit();
+ }
+}
+
+/* 댓글페이징 */
+function fn_egov_select_commentList(pageNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+ form.subPageIndex.value = pageNo;
+ form.commentNo.value = '';
+ form.action = "<c:url value='/cop/bbs/selectArticleDetail.do'/>";
+ form.submit();
+}
+
+</script>
+
+<!-- 2009.06.29 : 2단계 기능 추가 -->
+<c:if test="${useSatisfaction == 'true'}">
+<c:import url="/cop/stf/selectSatisfactionList.do" charEncoding="utf-8">
+ <c:param name="type" value="head" />
+</c:import>
+</c:if>
+
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2><!-- 게시글 상세조회 -->
+
+ <!-- 상세조회 -->
+ <table class="wTable" summary="<spring:message code="common.summary.inqire" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 글 제목 -->
+ <tr>
+ <th><spring:message code="comCopBbs.articleVO.detail.nttSj" /></th>
+ <td colspan="5" class="left"><c:out value="${result.nttSj}"/></td>
+ </tr>
+ <!-- 작성자, 작성시각, 조회수 -->
+ <tr>
+ <th><spring:message code="table.reger" /></th>
+ <td class="left"><c:out value="${result.frstRegisterNm}"/></td>
+ <th><spring:message code="table.regdate" /></th>
+ <td class="left"><c:out value="${result.frstRegisterPnttm}"/></td>
+ <th><spring:message code="comCopBbs.articleVO.detail.inqireCo" /></th>
+ <td class="left"><c:out value="${result.inqireCo}"/></td>
+ </tr>
+ <!-- 글 내용 -->
+ <tr>
+ <th class="vtop"><spring:message code="comCopBbs.articleVO.detail.nttCn" /></th>
+ <td colspan="5" class="cnt">
+ <c:out value="${fn:replace(result.nttCn , crlf , '<br/>')}" escapeXml="false" />
+ </td>
+ </tr>
+ <!-- 게시일자 -->
+ <tr>
+ <th class="vtop"><spring:message code="comCopBbs.articleVO.detail.ntceDe" /></th>
+ <td colspan="5" class="left">
+ <c:out value="${result.ntceBgnde} ~ ${result.ntceEndde}" escapeXml="false" />
+ </td>
+ </tr>
+ <!-- 첨부파일 -->
+ <c:if test="${not empty result.atchFileId}">
+ <tr>
+ <th><spring:message code="comCopBbs.articleVO.detail.atchFile" /></th>
+ <td colspan="5">
+ <c:import url="/cmm/fms/selectFileInfs.do" charEncoding="utf-8">
+ <c:param name="param_atchFileId" value="${result.atchFileId}" />
+ </c:import>
+ </td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ </table>
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <c:if test="${result.ntcrId != 'anonymous'}">
+ <!-- 익명글 수정/삭제 불가 -->
+ <form name="articleForm" action="<c:url value='/cop/bbs/updateArticleView.do'/>" method="post" style="float:left;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="title.update" /> <spring:message code="input.button" />" /><!-- 수정 -->
+ <input type="hidden" name="parnts" value="<c:out value='${result.parnts}'/>" >
+ <input type="hidden" name="sortOrdr" value="<c:out value='${result.sortOrdr}'/>" >
+ <input type="hidden" name="replyLc" value="<c:out value='${result.replyLc}'/>" >
+ <input type="hidden" name="nttSj" value="<c:out value='${result.nttSj}'/>" >
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ </form>
+ <form name="formDelete" action="<c:url value='/cop/bbs/deleteArticle.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.delete" />" title="<spring:message code="button.delete" /> <spring:message code="input.button" />" onclick="fn_egov_delete_article(this.form); return false;"><!-- 삭제 -->
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ </form>
+ </c:if>
+ <c:if test="${boardMasterVO.replyPosblAt == 'Y' }">
+ <form name="formReply" action="<c:url value='/cop/bbs/replyArticleView.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.reply" />"><!-- 답글 -->
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ </form>
+ </c:if>
+ <form name="formList" action="<c:url value='/cop/bbs/selectArticleList.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.list" />"><!-- 목록 -->
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ </form>
+ <form name="formScrap" action="<c:url value='/cop/scp/insertArticleScrapView.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.scrap" />"><!-- 스크랩 -->
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ </form>
+
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<!-- 댓글 -->
+<c:if test="${useComment == 'true'}">
+ <c:import url="/cop/cmt/selectArticleCommentList.do" charEncoding="utf-8">
+ </c:import>
+</c:if>
+
+<c:if test="${useSatisfaction == 'true'}">
+ <form name="frm" method="post" action="">
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ <c:import url="/cop/stf${prefix}/selectSatisfactionList.do" charEncoding="utf-8">
+ <c:param name="type" value="body" />
+ </c:import>
+ </form>
+</c:if>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogDetail.jsp (revision 7)
@@ -0,0 +1,217 @@
+<%
+ /**
+ * @Class Name : EgovArticleDetail.jsp
+ * @Description : EgovArticleDetail 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ 2017.09.06 양희훈 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title><!-- 블로그 메인 내용상세 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_article(form){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ form.submit();
+ }
+}
+
+/* ********************************************************
+ * 답글작성
+ ******************************************************** */
+ function fn_egov_reply_article() {
+ document.articleForm.action = "<c:url value='/cop/bbs/replyArticleView.do'/>";
+ document.articleForm.submit();
+ }
+
+</script>
+<!-- 댓글 작성 스크립트 -->
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="articleCommentVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+function fn_egov_insert_commentList() {
+
+ var form = document.getElementById("articleCommentVO");
+
+ if (!validateArticleCommentVO(form)){
+ return;
+ }
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ form.submit();
+ }
+}
+
+function fn_egov_updt_commentList() {
+
+ var form = document.getElementById("articleCommentVO");
+
+ if (!validateArticleCommentVO(form)){
+ return;
+ }
+
+ if (confirm('<spring:message code="common.update.msg" />')) {
+ form.modified.value = "true";
+ form.action = "<c:url value='/cop/cmt/updateArticleComment.do'/>";
+ form.submit();
+ }
+}
+
+function fn_egov_selectCommentForupdt(commentNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+ form.commentNo.value = commentNo;
+ form.action = "<c:url value='/cop/bbs/selectArticleDetail.do'/>";
+ form.submit();
+}
+
+function fn_egov_deleteCommentList(commentNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+ if (confirm('<spring:message code="common.delete.msg" />')) {
+ form.modified.value = "true";
+ form.commentNo.value = commentNo;
+ form.action = "<c:url value='/cop/cmt/deleteArticleComment.do'/>";
+ form.submit();
+ }
+}
+
+/* 댓글페이징 */
+function fn_egov_select_commentList(pageNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+ form.subPageIndex.value = pageNo;
+ form.commentNo.value = '';
+ form.action = "<c:url value='/cop/bbs/selectArticleDetail.do'/>";
+ form.submit();
+}
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <%-- <h2>${pageTitle} <spring:message code="title.detail" /></h2> --%>
+
+ <!-- 상세조회 -->
+ <table class="" summary="<spring:message code="common.summary.inqire" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 글 제목 -->
+ <div class="blog_title">
+ <h5><c:out value="${result.nttSj}"/></h5>
+ <span><a href="">맛스타그램</a></span>
+ <p>2017.08.22 10:23</p>
+ </div>
+ <!-- 글 내용 -->
+ <c:if test="${result.nttSj == null}">
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <tr>
+ <%-- <th class="vtop"><spring:message code="comCopBbs.articleVO.detail.nttCn" /></th> --%>
+ <td colspan="5" class="cnt">
+ <c:out value="${fn:replace(result.nttCn , crlf , '<br/>')}" escapeXml="false" />
+ </td>
+ </tr>
+ <!-- 첨부파일 -->
+ <c:if test="${not empty result.atchFileId}">
+ <tr>
+ <th><spring:message code="comCopBbs.articleVO.detail.atchFile" /></th>
+ <td colspan="5">
+ <c:import url="/cmm/fms/selectFileInfs.do" charEncoding="utf-8">
+ <c:param name="param_atchFileId" value="${result.atchFileId}" />
+ </c:import>
+ </td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ </table>
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <c:if test="${result.ntcrId != 'anonymous'}">
+ <!-- 익명글 수정/삭제 불가 -->
+ <form name="articleForm" action="<c:url value='/cop/bbs/updateArticleView.do'/>" method="post" style="float:left;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="title.update" /> <spring:message code="input.button" />" /><!-- 수정 -->
+ <input type="hidden" name="parnts" value="<c:out value='${result.parnts}'/>" >
+ <input type="hidden" name="sortOrdr" value="<c:out value='${result.sortOrdr}'/>" >
+ <input type="hidden" name="replyLc" value="<c:out value='${result.replyLc}'/>" >
+ <input type="hidden" name="nttSj" value="<c:out value='${result.nttSj}'/>" >
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ <input name="blogAt" type="hidden" value="chkBlog">
+ </form>
+ <form name="formDelete" action="<c:url value='/cop/bbs/deleteArticle.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.delete" />" title="<spring:message code="button.delete" /> <spring:message code="input.button" />" onclick="fn_egov_delete_article(this.form); return false;"><!-- 삭제 -->
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ <input name="blogAt" type="hidden" value="chkBlog">
+ </form>
+ </c:if>
+ <c:if test="${boardMasterVO.replyPosblAt == 'Y' }">
+ <form name="formReply" action="<c:url value='/cop/bbs/replyArticleView.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.reply" />"><!-- 답글 -->
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ </form>
+ </c:if>
+ <form name="formList" action="<c:url value='/cop/bbs/selectArticleBlogList.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.list" />"><!-- 목록 -->
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ </form>
+ <form name="formScrap" action="<c:url value='/cop/scp/insertArticleScrapView.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <input type="submit" class="s_submit" value="<spring:message code="button.scrap" />"><!-- 스크랩 -->
+ <input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+ <input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+ </form>
+
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<!-- 댓글 -->
+<c:import url="/cop/cmt/selectArticleCommentList.do" charEncoding="utf-8">
+</c:import>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogRegist.jsp (revision 7)
@@ -0,0 +1,137 @@
+<%
+ /**
+ * @Class Name : EgovBlogMasterRegist.jsp
+ * @Description : EgovBlogMasterRegist 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comCopBlog.blogMasterVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="blogMasterVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ // 첫 입력란에 포커스
+ document.getElementById("blogMasterVO").blogNm.focus();
+
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_regist_blog(form){
+ //input item Client-Side validate
+ if (!validateBlogMasterVO(form)) {
+ return false;
+ } else {
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.submit();
+ }
+ }
+}
+
+/* ********************************************************
+* 서버 처리 후 메세지 화면에 보여주기
+******************************************************** */
+function fncShowMessg(){
+ if("<c:out value='${message}'/>" != ''){
+ alert("<c:out value='${message}'/>");
+ }
+}
+</script>
+
+</head>
+<body onLoad="fn_egov_init(); fncShowMessg();">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="blogMasterVO" action="${pageContext.request.contextPath}/cop/bbs/insertBlogMaster.do" method="post" onSubmit="fn_egov_regist_blog(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 블로그명 -->
+ <c:set var="title"><spring:message code="comCopBlog.blogMasterVO.regist.blogNm"/> </c:set>
+ <tr>
+ <th><label for="blogNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="blogNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="blogNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 블로그 소개내용 -->
+ <c:set var="title"><spring:message code="comCopBlog.blogMasterVO.regist.blogIntrcn"/> </c:set>
+ <tr>
+ <th><label for="blogIntrcn">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="blogIntrcn" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="blogIntrcn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comCopBlog.blogMasterVO.regist.useAt"/> </c:set>
+ <tr>
+ <th><label for="useAt">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="Y" label="예" />
+ <form:option value='N'>아니오</form:option>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectBlogList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="cmd" type="hidden" value="<c:out value='save'/>">
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageDetail.jsp (revision 7)
@@ -0,0 +1,266 @@
+<%
+ /**
+ * @Class Name : EgovArticleDetail.jsp
+ * @Description : EgovArticleDetail 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<c:set var="reBbsId" value="${fn:replace(boardMasterVO.bbsId, \"BBSMSTR_\", \"\")}"/>
+<title>${pageTitle} <spring:message code="title.detail" /></title><!-- 게시글 상세조회 -->
+<!-- 에디터 관련 추가 CSS, Javascript 추가 -->
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_editor.pkgd.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_style.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<!-- 에디터 관련 추가 CSS, Javascript 종료 -->
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_article(form){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ form.submit();
+ }
+}
+
+/* ********************************************************
+ * 답글작성
+ ******************************************************** */
+ function fn_egov_reply_article() {
+ document.articleForm.action = "<c:url value='/cop/bbs/manage/${reBbsId}/replyArticleView.do'/>";
+ document.articleForm.submit();
+ }
+
+</script>
+<!-- 댓글 작성 스크립트 -->
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="articleCommentVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+function fn_egov_insert_commentList() {
+
+ var form = document.getElementById("articleCommentVO");
+ // 개인정보입력 체크.
+ if (!fnPrivacyCheck(form.commentCn.value)) { // 내용
+ return false;
+ }
+ if (!validateArticleCommentVO(form)){
+ return;
+ }
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ form.submit();
+ }
+}
+
+function fn_egov_updt_commentList() {
+
+ var form = document.getElementById("articleCommentVO");
+ // 개인정보입력 체크.
+ if (!fnPrivacyCheck(form.commentCn.value)) { // 내용
+ return false;
+ }
+ if (!validateArticleCommentVO(form)){
+ return;
+ }
+
+ if (confirm('<spring:message code="common.update.msg" />')) {
+ form.modified.value = "true";
+ form.action = "<c:url value='/cop/cmt/manage/${reBbsId}/updateArticleComment.do#cmtArea'/>";
+ form.submit();
+ }
+}
+
+function fn_egov_selectCommentForupdt(commentNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+
+ form.commentNo.value = commentNo;
+ form.action = "<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleDetail.do#cmtArea'/>";
+ form.submit();
+}
+
+function fn_egov_deleteCommentList(commentNo) {
+
+ var form = document.getElementById("articleCommentVO");
+
+ if (confirm('<spring:message code="common.delete.msg" />')) {
+ form.modified.value = "true";
+ form.commentNo.value = commentNo;
+ form.action = "<c:url value='/cop/cmt/manage/${reBbsId}/deleteArticleComment.do#cmtArea'/>";
+ form.submit();
+ }
+}
+
+/* 댓글페이징 */
+function fn_egov_select_commentList(pageNo) {
+
+ var form = document.getElementById("articleCommentVO");
+ form.subPageIndex.value = pageNo;
+ form.commentNo.value = '';
+ form.action = "<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleDetail.do#cmtArea'/>";
+ form.submit();
+}
+
+</script>
+
+<!-- 2009.06.29 : 2단계 기능 추가 -->
+<c:if test="${useSatisfaction == 'true'}">
+<c:import url="/cop/stf${prefix}/manage/${reBbsId}/selectSatisfactionList.do" charEncoding="utf-8">
+ <c:param name="type" value="head" />
+</c:import>
+</c:if>
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board_header">
+ <!-- 타이틀 -->
+ <h3>${boardMasterVO.bbsNm}</h3><!-- 게시글 상세조회 -->
+</div>
+<div class="board_body">
+ <!-- 상세조회 -->
+ <table class="table_view">
+ <caption>게시글 상세 - 제목, 작성자, 작성시각, 조회수, 글 내용, 첨부파일로 구성</caption>
+ <colgroup>
+ <col class="width200">
+ <col>
+ <col class="width200">
+ <col>
+ <col class="width200">
+ <col>
+ </colgroup>
+ <tbody>
+ <!-- 글 제목 -->
+ <tr>
+ <th scope="col"><spring:message code="comCopBbs.articleVO.detail.nttSj" /></th>
+ <td colspan="5">${result.nttSj}</td>
+ </tr>
+ <!-- 작성자, 작성시각, 조회수 -->
+ <tr>
+ <th scope="col"><spring:message code="table.reger" /></th>
+ <td>${result.frstRegisterNm}</td>
+ <th scope="col"><spring:message code="table.regdate" /></th>
+ <td>${result.frstRegisterPnttm}</td>
+ <th scope="col"><spring:message code="comCopBbs.articleVO.detail.inqireCo" /></th>
+ <td>${result.inqireCo}</td>
+ </tr>
+ <!-- 글 내용 -->
+ <tr>
+ <th scope="col"><spring:message code="comCopBbs.articleVO.detail.nttCn" /></th>
+
+ <td colspan="5" >
+ <div class="fr-view">
+ ${fn:replace(result.nttCn , crlf , '<br/>')}
+ </div>
+ </td>
+ </tr>
+ <!-- 첨부파일 -->
+ <c:if test="${not empty result.atchFileId}">
+ <tr>
+ <th scope="col"><spring:message code="comCopBbs.articleVO.detail.atchFile" /></th>
+ <td class="nopd ml_filelist" colspan="5">
+ <c:import url="/editor/fileListView.do" charEncoding="utf-8">
+ <c:param name="authorType" value="admin"/>
+ <c:param name="fileId" value="${result.atchFileId}" />
+ <c:param name="displayType" value="detail" />
+ </c:import>
+ </td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ </table>
+<!-- 댓글 -->
+<c:if test="${useComment == 'true'}">
+ <c:import url="/cop/cmt/manage/${reBbsId}/selectArticleCommentList.do" charEncoding="utf-8">
+ </c:import>
+</c:if>
+<!-- 만족도조사 -->
+<c:if test="${useSatisfaction == 'true'}">
+ <form name="frm" method="post" action="" class="heightauto">
+ <input name="nttId" type="hidden" value="${result.nttId}">
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+ <input name="pageIndex" type="hidden" value="${searchVO.pageIndex}">
+ <input name="searchCondition" type="hidden" value="${searchVO.searchCondition}">
+ <input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}">
+ <c:import url="/cop/stf${prefix}/manage/${reBbsId}/selectSatisfactionList.do" charEncoding="utf-8">
+ <c:param name="type" value="body" />
+ </c:import>
+ </form>
+</c:if>
+
+</div>
+<div class="board_footer">
+ <!-- 하단 버튼 -->
+ <div class="bottom_wrap fl">
+ <form name="formList" action="<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleList.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <button class="btn_s" title="<spring:message code="title.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></button><!-- 목록 -->
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}" >
+ <input name="pageIndex" type="hidden" value="${searchVO.pageIndex}" />
+ <input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}" />
+ <input name="searchCondition" type="hidden" value="${searchVO.searchCondition}" />
+ </form>
+ </div>
+ <div class="bottom_wrap fr">
+ <c:if test="${boardMasterVO.replyPosblAt == 'Y' }">
+ <form name="formReply" action="<c:url value='/cop/bbs/manage/${reBbsId}/replyArticleView.do'/>" method="post" style="float:left;">
+ <button class="btn_s" title="<spring:message code="title.list" /> <spring:message code="input.button" />"><spring:message code="button.reply" /></button><!-- 답글 -->
+ <input name="nttId" type="hidden" value="${result.nttId}" >
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+ <input name="pageIndex" type="hidden" value="${searchVO.pageIndex}" />
+ <input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}" />
+ <input name="searchCondition" type="hidden" value="${searchVO.searchCondition}" />
+ </form>
+ </c:if>
+ <c:if test="${result.ntcrId != 'anonymous'}">
+ <form name="formDelete" action="<c:url value='/cop/bbs/manage/${reBbsId}/deleteArticle.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <button class="btn_s" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" onclick="fn_egov_delete_article(this.form); return false;"><spring:message code="button.delete" /></button><!-- 삭제 -->
+ <input name="nttId" type="hidden" value="${result.nttId}" >
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}" >
+ <input name="pageIndex" type="hidden" value="${searchVO.pageIndex}" />
+ <input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}" />
+ <input name="searchCondition" type="hidden" value="${searchVO.searchCondition}" />
+ </form>
+ <!-- 익명글 수정/삭제 불가 -->
+ <form name="articleForm" action="<c:url value='/cop/bbs/manage/${reBbsId}/updateArticleView.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <button class="btn_s" title="<spring:message code="title.update" /> <spring:message code="input.button" />" ><spring:message code="button.update" /></button><!-- 수정 -->
+ <input type="hidden" name="parnts" value="${result.parnts}" >
+ <input type="hidden" name="sortOrdr" value="${result.sortOrdr}" >
+ <input type="hidden" name="replyLc" value="${result.replyLc}" >
+ <input type="hidden" name="nttSj" value="${result.nttSj}" >
+ <input name="nttId" type="hidden" value="${result.nttId}">
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}" >
+ <input name="pageIndex" type="hidden" value="${searchVO.pageIndex}" />
+ <input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}" />
+ <input name="searchCondition" type="hidden" value="${searchVO.searchCondition}" />
+ </form>
+ </c:if>
+ <%-- <form name="formScrap" action="<c:url value='/cop/scp/manage/${reBbsId}/insertArticleScrapView.do'/>" method="post" style="float:left; margin:0 0 0 3px;">
+ <button class="btn_s" title="<spring:message code="button.scrap" />"><spring:message code="button.scrap" /></button><!-- 스크랩 -->
+ <input name="nttId" type="hidden" value="${result.nttId}" >
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}" >
+ <input name="pageIndex" type="hidden" value="${searchVO.pageIndex}" />
+ <input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}" />
+ <input name="searchCondition" type="hidden" value="${searchVO.searchCondition}" />
+ </form> --%>
+
+ <div style="clear:both;"></div>
+ </div>
+</div>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListManager.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListManager.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListManager.jsp (revision 7)
@@ -0,0 +1,132 @@
+<%
+ /**
+ * @Class Name : EgovBlogMasterList.jsp
+ * @Description : EgovBlogMasterList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comCopBlog.blogMasterVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 개인블로그 관리 목록-->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery-1.12.4.min.js' />"></script>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.BlogMasterForm.searchCnd.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.BlogMasterForm.pageIndex.value = pageNo;
+ document.BlogMasterForm.action = "<c:url value='/cop/bbs/selectBlogMasterList.do'/>";
+ document.BlogMasterForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_blog(){
+ document.BlogMasterForm.pageIndex.value = 1;
+ document.BlogMasterForm.submit();
+}
+
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="BlogMasterForm" action="<c:url value='/cop/bbs/selectBlogListManager.do' />" method="post" onSubmit="fn_egov_search_blog(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 개인블로그 관리 목록-->
+ <!-- 하단 버튼 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCnd" title="<spring:message code="title.searchCondition" /> <spring:message code="input.cSelect" />">
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comCopBlog.blogMasterVO.list.blogNm" /></option><!-- 블로그명 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th class="board_th_link"><spring:message code="comCopBlog.blogMasterVO.list.blogNm" /></th><!-- 블로그명 -->
+ <th><spring:message code="table.reger" /></th><!-- 작성자명 -->
+ <th><spring:message code="table.regdate" /></th><!-- 작성시각 -->
+ <th><spring:message code="comCopBlog.blogMasterVO.list.useAt" /></th><!-- 사용여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="left"><a href="<c:url value='/cop/bbs/selectBBSMasterDetail.do'/>?bbsId=${resultInfo.bbsId}&blogId=${resultInfo.blogId}" return false;"><c:out value='${fn:substring(resultInfo.bbsNm, 0, 40)}'/></a></td>
+ <td><c:out value='${resultInfo.frstRegisterNm}'/></td>
+ <td><c:out value='${resultInfo.frstRegisterPnttm}'/></td>
+ <td><c:out value='${resultInfo.useAt}'/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+</div>
+
+<input name="blogId" type="hidden" value="<c:out value='${searchVO.blogId}'/>">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListManager.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovGuestArticleList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovGuestArticleList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovGuestArticleList.jsp (revision 7)
@@ -0,0 +1,185 @@
+<%
+ /**
+ * @Class Name : EgovGuestArticleList.jsp
+ * @Description : EgovGuestArticleList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.guest.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_guest(nttId){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ document.articleForm.nttId.value = nttId;
+ document.articleForm.action = "<c:url value='/cop/bbs/deleteGuestArticle.do'/>";
+ document.articleForm.submit();
+ }
+}
+ /* ********************************************************
+ * 등록처리
+ ******************************************************** */
+ function fn_egov_insert_guest(form) {
+ if (!validateArticleVO(form)){
+ return;
+ }
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ form.submit();
+ }
+ }
+ /* ********************************************************
+ * 수정처리
+ ******************************************************** */
+ function fn_egov_updt_guest(form) {
+ if (!validateArticleVO(form)){
+ return;
+ }
+
+ if (confirm('<spring:message code="common.update.msg" />')) {
+
+ form.action = "<c:url value='/cop/bbs/updateGuestArticle.do'/>";
+ form.submit();
+ }
+ }
+/* ********************************************************
+ * 수정전 처리
+ ******************************************************** */
+ function fn_egov_selectGuestForupdt(nttId) {
+ document.articleForm.nttId.value = nttId;
+ document.articleForm.action = "<c:url value='/cop/bbs/updateGuestArticleView.do'/>";
+ document.articleForm.submit();
+ }
+
+
+/* ********************************************************
+ * 페이징 처리
+ ******************************************************** */
+function fn_egov_select_guestList(pageNo) {
+ document.articleForm.pageIndex.value = pageNo;
+ document.articleForm.nttId.value = 0;
+ document.articleForm.action = "<c:url value='/cop/bbs/selectGuestArticleList.do'/>";
+ document.articleForm.submit();
+}
+</script>
+<!-- 댓글 작성 스크립트 -->
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<!-- 방명록 리스트 출력 -->
+<form name="articleForm" action="<c:url value='/cop/bbs/updateGuestArticleView.do'/>" method="post">
+<div class="board">
+<h2>${pageTitle}</h2>
+<div class="reply">
+ <ul>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <li>
+ <div class="top">
+ <strong><c:out value="${result.frstRegisterNm}" /></strong>
+ <span class="bar">|</span>
+ <span class="date"><c:out value="${result.frstRegisterPnttm}" /></span>
+ </div>
+ <p class="txt">
+ <c:out value="${fn:replace(result.nttCn , crlf , '<br/>')}" escapeXml="false" />
+ </p>
+ <div class="bottom">
+ <c:if test="${result.frstRegisterId == sessionUniqId}">
+ <span class="btn_s"><a href="javascript:fn_egov_selectGuestForupdt(<c:out value="${result.nttId}"/>)" title="<spring:message code="button.update" /> <spring:message code="input.button" />"><spring:message code="button.update" /> </a></span>
+ <span class="btn_s"><a href="javascript:fn_egov_delete_guest(<c:out value="${result.nttId}"/>)" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></a></span>
+ </c:if>
+ </div>
+ </li>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <li>
+ <p class="txt"><spring:message code="common.noguest.msg" /></p>
+ </li>
+ </c:if>
+ </ul>
+</div>
+
+<!-- 방명록 페이징 -->
+<div class="paging">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_guestList"/>
+ </ul>
+</div>
+
+</div>
+
+<input name="pageIndex" type="hidden" value="<c:out value='${articleVO.pageIndex}'/>">
+<input name="nttId" type="hidden" value="">
+<input name="bbsId" type="hidden" value="<c:out value='${boardMasterVO.bbsId}'/>">
+</form>
+
+<!-- 방명록 입력폼 -->
+<form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/insertGuestArticle.do" method="post" onSubmit="fn_egov_insert_guest(document.forms[1]); return false; " style="float:left; clear:both;">
+ <div class="wTableFrm" >
+ <table class="board_list top_line">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 방명록 내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.nttCn"/> </c:set>
+ <tr>
+ <th><label for="nttCn">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" cssClass="re_txt"/>
+ <div><form:errors path="nttCn" cssClass="error" /></div>
+ <c:choose>
+ <c:when test="${articleVO.nttId == '0'}">
+ <span style="float:left;"><a href="javascript:fn_egov_insert_guest(document.forms[1]); " class="btn_s re_btn" title="<spring:message code="button.comment" /> <spring:message code="input.button" />"><spring:message code="button.comment" /><spring:message code="button.create" /></a></span>
+ </c:when>
+ <c:otherwise>
+ <span style="float:left;"><a href="javascript:fn_egov_updt_guest(document.forms[1]); " class="btn_s re_btn"title="<spring:message code="button.update" /> <spring:message code="input.button" />"><spring:message code="button.comment" /><spring:message code="button.update" /></a></span>
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+<input name="nttId" type="hidden" value="<c:out value='${articleVO.nttId}'/>">
+<input name="bbsId" type="hidden" value="<c:out value='${boardMasterVO.bbsId}'/>">
+<!-- validator 검증용 -->
+<input name="nttSj" type="hidden" value="guestbook"/>
+</form:form>
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovGuestArticleList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterUpdt.jsp (revision 7)
@@ -0,0 +1,214 @@
+<%
+ /**
+ * @Class Name : EgovBBSMasterUpdt.jsp
+ * @Description : EgovBBSMasterUpdt 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * @ 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @ 2018.10.15 최두영 표준프레임워크 V3.8 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"><spring:message code="comCopBbs.boardMasterVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle } <spring:message code="title.update" /></title><!-- 게시판 마스터 수정 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="boardMasterVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.getElementById("boardMasterVO").bbsNm.focus();
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_updt_bbs(form, bbsId){
+ if (!validateBoardMasterVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("boardMasterVO");
+
+ //방명록 게시판의 경우 답장 불가, 파일첨부 불가
+ if(validateForm.bbsTyCode.value == 'BBST03') {
+ if(validateForm.replyPosblAt.value == 'Y') {
+ alert("<spring:message code="comCopBbs.boardMasterVO.guestReply" />");
+ return;
+ }
+ if(validateForm.fileAtchPosblAt.value == 'Y') {
+ alert("<spring:message code="comCopBbs.boardMasterVO.guestFile" />");
+ return;
+ }
+ } else {
+ if(validateForm.fileAtchPosblAt.value == 'Y' && validateForm.atchPosblFileNumber.value == '0') {
+ alert('첨부가능파일숫자를 선택하세요.');
+ return;
+ }
+ }
+
+ if(confirm("<spring:message code="common.update.msg" />")){
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_inqire_bbslist() {
+ boardMasterVO.action = "<c:url value='/cop/bbs/selectBBSMasterInfs.do'/>";
+ boardMasterVO.submit();
+}
+</script>
+</head>
+<body onLoad="fn_egov_init();">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<!-- 상단타이틀 -->
+<form:form commandName="boardMasterVO" action="${pageContext.request.contextPath}/cop/bbs/updateBBSMaster.do" method="post" onSubmit="fn_egov_updt_bbs(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <h2>${pageTitle} <spring:message code="title.update" /></h2><!-- 게시판 마스터 수정 -->
+
+ <!-- 수정폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.update" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.update" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 게시판명 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.updt.bbsNm"/> </c:set>
+ <tr>
+ <th><label for="bbsNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="bbsNm" title="${title} ${inputTxt }" size="70" maxlength="70" />
+ <div><form:errors path="bbsNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 게시판 소개내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.updt.bbsIntrcn"/> </c:set>
+ <tr>
+ <th><label for="bbsIntrcn">${title} <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="bbsIntrcn" title="${title} ${inputTxt}" cols="300" rows="20"/>
+ <div><form:errors path="bbsIntrcn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 게시판 유형 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.updt.bbsTyCode"/> </c:set>
+ <tr>
+ <th><label for="bbsTyCode">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="bbsTyCode" title="${title} ${inputTxt}" cssClass="txt">
+ <form:option value='' label="--선택하세요--" />
+ <form:options items="${bbsTyCode}" itemValue="code" itemLabel="codeNm" />
+ </form:select>
+ <div><form:errors path="bbsTyCode" cssClass="error" /></div>
+ </td>
+ </tr>
+
+
+ <!-- 파일첨부가능여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.updt.fileAtchPosblAt"/> </c:set>
+ <tr>
+ <th><label for="fileAtchPosblAt">${title}<span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="fileAtchPosblAt" title="${title} ${inputTxt}" cssClass="txt">
+ <form:option value='' label="--선택하세요--" />
+ <form:option value="Y" label="예" />
+ <form:option value='N'>아니오</form:option>
+ </form:select>
+ <div><form:errors path="fileAtchPosblAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 첨부가능파일숫자 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.updt.atchPosblFileNumber"/> </c:set>
+ <tr>
+ <th><label for="atchPosblFileNumber">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="atchPosblFileNumber" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="0" selected="selected">없음</form:option>
+ <form:option value='1'>1</form:option>
+ <form:option value='2'>2</form:option>
+ <form:option value='3'>3</form:option>
+ </form:select>
+ <div><form:errors path="atchPosblFileNumber" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 추가 선택사항 -->
+ <tr>
+ <th><spring:message code="comCopBbs.boardMasterVO.detail.option" /></th><!-- 추가 선택사항 -->
+ <td class="left">
+ <select name="option" class="select" <c:if test="${boardMasterVO.option != 'na'}">disabled="disabled"</c:if> title="추가선택사항">
+ <option value='na' <c:if test="${boardMasterVO.option == 'na'}">selected="selected"</c:if>>---<spring:message code="input.select" />--</option>
+ <option value='' <c:if test="${boardMasterVO.option == ''}">selected="selected"</c:if>><spring:message code="comCopBbs.boardMasterVO.detail.option1" /></option>
+ <c:if test="${useComment == 'true' }">
+ <option value='comment' <c:if test="${boardMasterVO.option == 'comment'}">selected="selected"</c:if>><spring:message code="comCopBbs.boardMasterVO.detail.option2" /></option>
+ </c:if>
+ <c:if test="${useSatisfaction == 'true' }">
+ <option value='stsfdg' <c:if test="${boardMasterVO.option == 'stsfdg'}">selected="selected"</c:if>><spring:message code="comCopBbs.boardMasterVO.detail.option3" /></option>
+ </c:if>
+ </select>
+ <spring:message code="comCopBbs.boardMasterVO.detail.option.unabledToModify" /><!-- ※ 추가 선택사항은 수정 불가 (미설정된 기존 게시판의 경우 처음 설정은 가능함) -->
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.updt.useAt"/> </c:set>
+ <tr>
+ <th><label for="useAt">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="" label="--선택하세요--" />
+ <form:option value="Y" label="예" />
+ <form:option value='N'>아니오</form:option>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectBBSMasterInfs.do' /><c:if test='${boardMasterVO.cmmntyId != null}'>?cmmntyId=${boardMasterVO.cmmntyId}</c:if>" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<!-- validator 값 체크용 -->
+<input name="replyPosblAt" type="hidden" value="<c:out value='${boardMasterVO.replyPosblAt}'/>">
+<input name="cmmntyId" type="hidden" value="<c:out value='${boardMasterVO.cmmntyId}'/>">
+<input name="bbsId" type="hidden" value="<c:out value='${boardMasterVO.bbsId}'/>">
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleUpdt.jsp (revision 7)
@@ -0,0 +1,295 @@
+
+<%
+ /**
+ * @Class Name : EgovArticleUpdt.jsp
+ * @Description : EgovArticleUpdt 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"%>
+<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %>
+<c:set var="pageTitle">
+ <spring:message code="comCopBbs.articleVO.title" />
+</c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle }<spring:message code="title.update" /></title><!-- 게시글 답글 수정-->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/html/egovframework/com/cmm/utl/ckeditor/ckeditor.js?t=B37D54V'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false" />
+<script type="text/javascript">
+$(function() {
+ $("#ntceBgnde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+ $("#ntceEndde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+});
+
+
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init() {
+
+ var ckeditor_config = {
+ filebrowserImageUploadUrl: '${pageContext.request.contextPath}/utl/wed/insertImageCk.do', // 파일 업로드를 처리 할 경로 설정.
+ };
+
+ CKEDITOR.replace('nttCn',ckeditor_config);
+
+ // 첫 입력란에 포커스..
+ document.getElementById("articleVO").nttSj.focus();
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_updt_article(form) {
+
+ CKEDITOR.instances.nttCn.updateElement();
+
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+ //비밀글은 제목 진하게 할 수 없음.
+ //비밀글은 공지게시 불가.
+ if(validateForm.secretAt.checked) {
+ if(validateForm.sjBoldAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretBold" />");
+ return;
+ }
+ if(validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretNotice" />");
+ return;
+ }
+ }
+
+ //게시기간
+ var ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ var ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde == '' && ntceEndde != '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ }
+ if(ntceBgnde != '' && ntceEndde == '') {
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+ if(ntceBgnde == '' && ntceEndde == '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+
+ ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde > ntceEndde){
+ alert("<spring:message code="comCopBbs.articleVO.ntceDeError" />");
+ return;
+ }
+
+ if (confirm("<spring:message code="common.update.msg" />")) {
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_inqire_articlelist() {
+ articleVO.action = "<c:url value='/cop/bbs/selectArticleList.do'/>";
+ articleVO.submit();
+}
+
+</script>
+</head>
+<body onLoad="fn_egov_init();">
+
+ <!-- javascript warning tag -->
+ <noscript class="noScriptTitle"> <spring:message code="common.noScriptTitle.msg" /> </noscript>
+
+ <!-- 상단타이틀 -->
+ <form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/updateArticle.do" method="post" onSubmit="fn_egov_updt_article(document.forms[0]); return false;" enctype="multipart/form-data">
+ <div class="wTableFrm">
+ <h2>${pageTitle} <spring:message code="title.update" /></h2><!-- 게시글 답글 수정-->
+
+ <!-- 수정폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.update" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.update" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width:;">
+ <col style="width:;">
+ <col style="width:;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 글 제목 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.nttSj" /></c:set>
+ <tr>
+ <th><label for="nttSj">${title}<span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="nttSj" title="${title} ${inputTxt }" size="70" maxlength="70" />
+ <div> <form:errors path="nttSj" cssClass="error" /></div>
+ </td>
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.sjBoldAt" /></c:set>
+ <th><label for="sjBoldAt">${title}</label></th>
+ <td class="left">
+ <form:checkbox path="sjBoldAt" value="Y" />
+ <div> <form:errors path="sjBoldAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 글 내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.nttCn" /></c:set>
+ <tr>
+ <th><label for="nttCn">${title}<span class="pilsu">*</span></label></th>
+ <td class="nopd" colspan="3">
+ <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" />
+
+ <div> <form:errors path="nttCn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.noticeAt" /></c:set>
+ <tr>
+ <th><label for="noticeAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="noticeAt" value="Y" />
+ <div> <form:errors path="noticeAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 비밀글 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.secretAt" /></c:set>
+ <tr>
+ <th><label for="secretAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="secretAt" value="Y" />
+ <div> <form:errors path="secretAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 유효기간 설정 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.ntceDe"/> </c:set>
+ <tr>
+ <th><label for="ntceBgnde">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:input path="ntceBgnde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;" readonly="true" />
+ ~ <form:input path="ntceEndde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;" readonly="true" />
+ <div><form:errors path="ntceBgnde" cssClass="error" /></div>
+ <div><form:errors path="ntceEndde" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 시작 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.atchFile"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="nopd" colspan="3">
+ <c:import url="/cmm/fms/selectFileInfsForUpdate.do" charEncoding="utf-8">
+ <c:param name="param_atchFileId" value="${articleVO.atchFileId}" />
+ </c:import>
+ </td>
+ </tr>
+ <!-- 첨부파일 끝 -->
+ <!-- 첨부파일 추가 시작 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.atchFileAdd"/></c:set>
+ <tr>
+ <th><label for="file_1">${title}</label> </th>
+ <td class="nopd" colspan="3">
+ <input name="file_1" id="egovComFileUploader" type="file" title="<spring:message code="comCopBbs.articleVO.updt.atchFile"/>" multiple/><!-- 첨부파일 -->
+ <div id="egovComFileList"></div>
+ </td>
+ </tr>
+ <!-- 첨부파일 추가 끝 -->
+ </c:if>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectArticleList.do' />?bbsId=${boardMasterVO.bbsId}" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear: both;"></div>
+
+ </div>
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>" />
+ <input type="hidden" name="bbsTyCode" value="<c:out value='${boardMasterVO.bbsTyCode}'/>" />
+ <input type="hidden" name="replyPosblAt" value="<c:out value='${boardMasterVO.replyPosblAt}'/>" />
+ <input type="hidden" name="fileAtchPosblAt" value="<c:out value='${boardMasterVO.fileAtchPosblAt}'/>" />
+ <input type="hidden" id="atchPosblFileNumber" name="atchPosblFileNumber" value="<c:out value='${boardMasterVO.atchPosblFileNumber}'/>" />
+ <input type="hidden" name="atchPosblFileSize" value="<c:out value='${boardMasterVO.atchPosblFileSize}'/>" />
+ <input name="nttId" type="hidden" value="${articleVO.nttId}">
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+ </form:form>
+
+<!-- 첨부파일 업로드 가능화일 설정 Start..-->
+<script type="text/javascript">
+var maxFileNum = document.getElementById('atchPosblFileNumber').value;
+if(maxFileNum==null || maxFileNum==""){
+ maxFileNum = 3;
+}
+var multi_selector = new MultiSelector( document.getElementById( 'egovComFileList' ), maxFileNum );
+multi_selector.addElement( document.getElementById( 'egovComFileUploader' ) );
+</script>
+<!-- 첨부파일 업로드 가능화일 설정 End.-->
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterList.jsp (revision 7)
@@ -0,0 +1,150 @@
+<%
+ /**
+ * @Class Name : EgovBBSMasterList.jsp
+ * @Description : EgovBBSMasterList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * @ 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @ 2018.10.15 최두영 표준프레임워크 V3.8 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.boardMasterVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 게시판 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.BBSMasterForm.searchCnd.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.BBSMasterForm.pageIndex.value = pageNo;
+ document.BBSMasterForm.action = "<c:url value='/cop/bbs/selectBBSMasterInfs.do'/>";
+ document.BBSMasterForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_bbssj(){
+ document.BBSMasterForm.pageIndex.value = 1;
+ document.BBSMasterForm.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_bbsdetail(bbsId) {
+ // 사이트 키값(siteId) 셋팅.
+ document.BBSMasterForm.bbsId.value = bbsId;
+ document.BBSMasterForm.action = "<c:url value='/cop/bbs/selectBBSMasterDetail.do'/>";
+ document.BBSMasterForm.submit();
+}
+</script>
+</head>
+<body onload="fn_egov_init()">
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="BBSMasterForm" action="<c:url value='/cop/bbs/selectBBSMasterInfs.do'/>" method="post" onSubmit="fn_egov_search_bbssj(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1><!-- 게시판 목록 -->
+ <!-- 하단 버튼 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCnd" title="<spring:message code="title.searchCondition" /> <spring:message code="input.cSelect" />">
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comCopBbs.boardMasterVO.list.bbsNm" /></option><!-- 게시판명 -->
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected="selected"</c:if> ><spring:message code="comCopBbs.boardMasterVO.list.bbsIntrcn" /></option><!-- 게시판 소개내용 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/cop/bbs/insertBBSMasterView.do?cmmntyId=${searchVO.cmmntyId}' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th class="board_th_link"><spring:message code="comCopBbs.boardMasterVO.list.bbsNm" /></th><!-- 게시판명 -->
+ <th><spring:message code="table.reger" /></th><!-- 작성자명 -->
+ <th><spring:message code="table.regdate" /></th><!-- 작성시각 -->
+ <th><spring:message code="comCopBbs.boardMasterVO.list.useAt" /></th><!-- 사용여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td class="left"><a href="<c:url value='/cop/bbs/selectBBSMasterDetail.do?bbsId=${resultInfo.bbsId}'/>" onClick="fn_egov_inquire_bbsdetail('<c:out value="${resultInfo.bbsId}"/>');return false;"><c:out value='${fn:substring(resultInfo.bbsNm, 0, 40)}'/></a></td>
+ <td><c:out value='${resultInfo.frstRegisterNm}'/></td>
+ <td><c:out value='${resultInfo.frstRegisterPnttm}'/></td>
+ <td><c:out value='${resultInfo.useAt}'/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+ <!-- 등록버튼 -->
+ <!--
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/insertBBSMasterView.do' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </div>
+ -->
+
+</div>
+<input name="cmmntyId" type="hidden" value="<c:out value='${searchVO.cmmntyId}'/>">
+<input name="bbsId" type="hidden" value="">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogUpdt.jsp (revision 7)
@@ -0,0 +1,314 @@
+
+<%
+ /**
+ * @Class Name : EgovArticleUpdt.jsp
+ * @Description : EgovArticleUpdt 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"%>
+<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %>
+<c:set var="pageTitle">
+ <spring:message code="comCopBbs.articleVO.title" />
+</c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle }<spring:message code="title.update" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/html/egovframework/com/cmm/utl/ckeditor/ckeditor.js?t=B37D54V'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false" />
+<script type="text/javascript">
+$(function() {
+ $("#ntceBgnde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+ $("#ntceEndde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+});
+
+
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init() {
+
+ var ckeditor_config = {
+ filebrowserImageUploadUrl: '${pageContext.request.contextPath}/utl/wed/insertImageCk.do', // 파일 업로드를 처리 할 경로 설정.
+ };
+
+ CKEDITOR.replace('nttCn',ckeditor_config);
+
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+
+ //------------------------------------------
+ //------------------------- 첨부파일 수정 Start
+ //-------------------------------------------
+ var existFileNum = document.getElementById("articleVO").fileListCnt.value;
+ var maxFileNum = document.getElementById("articleVO").atchPosblFileNumber.value;
+
+ if (existFileNum == "undefined" || existFileNum == null) {
+ existFileNum = 0;
+ }
+ if (maxFileNum == "undefined" || maxFileNum == null) {
+ maxFileNum = 0;
+ }
+
+ var uploadableFileNum = maxFileNum - existFileNum;
+ if (uploadableFileNum < 1) {
+ uploadableFileNum = 1;
+ }
+ var multi_selector = new MultiSelector( document.getElementById( 'egovComFileList' ), uploadableFileNum, 'file_label');
+ multi_selector.addElement( document.getElementById( 'egovfile_1' ) );
+ fn_egov_multi_selector_update_setting(multi_selector);
+ //------------------------- 첨부파일 수정 End
+ </c:if>
+
+ // 첫 입력란에 포커스..
+ document.getElementById("articleVO").nttSj.focus();
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_updt_article(form) {
+
+ CKEDITOR.instances.nttCn.updateElement();
+
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+ //비밀글은 제목 진하게 할 수 없음.
+ //비밀글은 공지게시 불가.
+ if(validateForm.secretAt.checked) {
+ if(validateForm.sjBoldAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretBold" />");
+ return;
+ }
+ if(validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretNotice" />");
+ return;
+ }
+ }
+
+ //게시기간
+ var ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ var ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde == '' && ntceEndde != '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ }
+ if(ntceBgnde != '' && ntceEndde == '') {
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+ if(ntceBgnde == '' && ntceEndde == '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+
+ ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde > ntceEndde){
+ alert("<spring:message code="comCopBbs.articleVO.ntceDeError" />");
+ return;
+ }
+
+ if (confirm("<spring:message code="common.update.msg" />")) {
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_inqire_articlelist() {
+ articleVO.action = "<c:url value='/cop/bbs/selectArticleList.do'/>";
+ articleVO.submit();
+}
+
+</script>
+</head>
+<body onLoad="fn_egov_init();">
+
+ <!-- javascript warning tag -->
+ <noscript class="noScriptTitle"> <spring:message code="common.noScriptTitle.msg" /> </noscript>
+
+ <!-- 상단타이틀 -->
+ <form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/updateArticle.do" method="post" onSubmit="fn_egov_updt_article(document.forms[0]); return false;" enctype="multipart/form-data">
+ <div class="wTableFrm">
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <!-- 수정폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.update" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.update" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width:;">
+ <col style="width:;">
+ <col style="width:;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 글 제목 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.nttSj" /></c:set>
+ <tr>
+ <th><label for="nttSj">${title}<span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="nttSj" title="${title} ${inputTxt }" size="70" maxlength="70" />
+ <div> <form:errors path="nttSj" cssClass="error" /></div>
+ </td>
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.sjBoldAt" /></c:set>
+ <th><label for="sjBoldAt">${title}</label></th>
+ <td class="left">
+ <form:checkbox path="sjBoldAt" value="Y" />
+ <div> <form:errors path="sjBoldAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 글 내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.nttCn" /></c:set>
+ <tr>
+ <th><label for="nttCn">${title}<span class="pilsu">*</span></label></th>
+ <td class="nopd" colspan="3">
+ <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" />
+
+ <div> <form:errors path="nttCn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.noticeAt" /></c:set>
+ <tr>
+ <th><label for="noticeAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="noticeAt" value="Y" />
+ <div> <form:errors path="noticeAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 비밀글 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.secretAt" /></c:set>
+ <tr>
+ <th><label for="secretAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="secretAt" value="Y" />
+ <div> <form:errors path="secretAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 유효기간 설정 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.updt.ntceDe"/> </c:set>
+ <tr>
+ <th><label for="ntceBgnde">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:input path="ntceBgnde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;"/>
+ ~ <form:input path="ntceEndde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;"/>
+ <div><form:errors path="ntceBgnde" cssClass="error" /></div>
+ <div><form:errors path="ntceEndde" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 -->
+ <c:set var="title"><spring:message code="comUssIonNws.newsVO.atchFile"/></c:set>
+ <tr>
+ <th><label for="file_1">${title}</label> </th>
+ <td class="nopd" colspan="3">
+ <!-- 첨부목록을 보여주기 위한 -->
+ <c:if test="${not empty articleVO.atchFileId}">
+ <c:import charEncoding="utf-8" url="/cmm/fms/selectFileInfsForUpdate.do" >
+ <c:param name="param_atchFileId" value="${articleVO.atchFileId}" />
+ </c:import>
+ </c:if>
+ <c:if test="${articleVO.atchFileId == ''}">
+ <input type="hidden" name="fileListCnt" value="0" />
+ </c:if>
+ <!-- attached file Start -->
+ <div>
+ <div class="egov_file_box">
+ <label for="egovfile_1" id="file_label"><spring:message code="title.attachedFileSelect" /></label>
+ <input type="file" name="file_1" id="egovfile_1" multiple>
+ </div>
+ <div id="egovComFileList"></div>
+ </div>
+ <!-- attached file End -->
+
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ </c:if>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectArticleBlogList.do' />?bbsId=${boardMasterVO.bbsId}" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear: both;"></div>
+
+ </div>
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>" />
+ <input type="hidden" name="bbsTyCode" value="<c:out value='${boardMasterVO.bbsTyCode}'/>" />
+ <input type="hidden" name="replyPosblAt" value="<c:out value='${boardMasterVO.replyPosblAt}'/>" />
+ <input type="hidden" name="fileAtchPosblAt" value="<c:out value='${boardMasterVO.fileAtchPosblAt}'/>" />
+ <input type="hidden" name="atchPosblFileNumber" value="<c:out value='${boardMasterVO.atchPosblFileNumber}'/>" />
+ <input type="hidden" name="atchPosblFileSize" value="<c:out value='${boardMasterVO.atchPosblFileSize}'/>" />
+ <input name="nttId" type="hidden" value="${articleVO.nttId}">
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+ </form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleList.jsp (revision 7)
@@ -0,0 +1,263 @@
+<%
+ /**
+ * @Class Name : EgovArticleList.jsp
+ * @Description : EgovArticleList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * 2018.06.15 신용호 페이징 처리 오류 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 게시글 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link href="<c:url value='${brdMstrVO.tmplatCours}' />" rel="stylesheet" type="text/css">
+<c:choose>
+<c:when test="${preview == 'true'}">
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.articleForm.searchCnd.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_article(){
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_articledetail(bbsId, nttId) {
+ alert('test');
+ return true;
+}
+</script>
+</c:when>
+<c:otherwise>
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.articleForm.searchCnd.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.articleForm.pageIndex.value = pageNo;
+ document.articleForm.action = "<c:url value='/cop/bbs/selectArticleList.do'/>";
+ document.articleForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_article(){
+ document.articleForm.pageIndex.value = 1;
+ document.articleForm.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_articledetail(bbsId, nttId) {
+ // 사이트 키값(siteId) 셋팅.
+ document.articleForm.bbsId.bbsId.value = bbsId;
+ document.articleForm.nttId.value = nttId;
+ document.articleForm.action = "<c:url value='/cop/bbs/selectArticleDetail.do'/>";
+ document.articleForm.submit();
+}
+</script>
+</c:otherwise>
+</c:choose>
+</head>
+<body onload="fn_egov_init()">
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+
+<div class="board">
+ <form name="articleForm" action="<c:url value='/cop/bbs/selectArticleList.do'/>" method="post" onSubmit="fn_egov_search_article(); return false;">
+ <h1>${pageTitle} <spring:message code="title.list" /> (<c:out value="${boardMasterVO.bbsNm}"/>)</h1><!-- 게시글 목록 -->
+ <!-- 하단 버튼 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCnd" title="<spring:message code="title.searchCondition" /> <spring:message code="input.cSelect" />">
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comCopBbs.articleVO.list.nttSj" /></option><!-- 글 제목 -->
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected="selected"</c:if> ><spring:message code="comCopBbs.articleVO.list.nttCn" /></option><!-- 글 내용 -->
+ <option value="2" <c:if test="${searchVO.searchCnd == '2'}">selected="selected"</c:if> ><spring:message code="table.reger" /></option><!-- 작성자 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ <c:if test="${preview != 'true'}">
+ <span class="btn_b"><a href="<c:url value='/cop/bbs/insertArticleView.do?bbsId=${boardMasterVO.bbsId}' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </c:if>
+ </li>
+ </ul>
+ </div>
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+ <input name="pageIndex" type="hidden" value="">
+ </form>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ <col style="width: 13%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th class="board_th_link"><spring:message code="comCopBbs.articleVO.list.nttSj" /></th><!--글 제목 -->
+ <th><spring:message code="table.reger" /></th><!-- 작성자명 -->
+ <th><spring:message code="table.regdate" /></th><!-- 작성시각 -->
+ <th><spring:message code="comCopBbs.articleVO.list.inqireCo" /></th><!-- 조회수 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+
+ <!-- 공지사항 본문 -->
+ <c:forEach items="${noticeList}" var="noticeInfo" varStatus="status">
+ <tr>
+ <td><img src="<c:url value='/images/egovframework/com/cop/bbs/icon_notice.png'/>" alt="notice"></td>
+ <td class="bold">
+ <form name="subForm" method="post" action="<c:url value='/cop/bbs/selectArticleDetail.do'/>">
+ <input name="nttId" type="hidden" value="<c:out value="${noticeInfo.nttId}"/>">
+ <input name="bbsId" type="hidden" value="<c:out value="${noticeInfo.bbsId}"/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <span class="link"><input type="submit" value="<c:out value='${fn:substring(noticeInfo.nttSj, 0, 40)}'/><c:if test="${noticeInfo.commentCo != ''}"> <c:out value='[${noticeInfo.commentCo}]'/></c:if>" style="border:0px solid #e0e0e0;">
+ </span>
+ </form>
+ </td>
+ <td><c:out value='${noticeInfo.frstRegisterNm}'/></td>
+ <td><c:out value='${noticeInfo.frstRegisterPnttm}'/></td>
+ <td><c:out value='${noticeInfo.inqireCo}'/></td>
+ </tr>
+ </c:forEach>
+ <!-- 게시글 본문 -->
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+
+ <c:choose>
+ <c:when test="${resultInfo.sjBoldAt == 'Y'}">
+ <!-- 제목 Bold인 경우 -->
+ <td class="bold">
+ <form name="subForm" method="post" action="<c:url value='/cop/bbs/selectArticleDetail.do'/>">
+ <input name="nttId" type="hidden" value="<c:out value="${resultInfo.nttId}"/>">
+ <input name="bbsId" type="hidden" value="<c:out value="${resultInfo.bbsId}"/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <span class="link"><c:if test="${resultInfo.replyLc!=0}"><c:forEach begin="0" end="${resultInfo.replyLc}" step="1"> </c:forEach><img src="<c:url value='/images/egovframework/com/cop/bbs/icon_reply.png'/>" alt="secret"></c:if><input type="submit" value="<c:out value='${fn:substring(resultInfo.nttSj, 0, 40)}'/><c:if test="${resultInfo.commentCo != ''}"> <c:out value='[${resultInfo.commentCo}]'/></c:if>" style="border:0px solid #e0e0e0;"></span>
+ </form>
+ </td>
+ </c:when>
+ <c:when test="${resultInfo.secretAt == 'Y' && sessionUniqId != resultInfo.frstRegisterId}">
+ <!-- 비밀글이며 작성자가 본인이 아닌 경우(클릭 불가) -->
+ <td class="left">
+ <c:if test="${resultInfo.replyLc!=0}">
+ <c:forEach begin="0" end="${resultInfo.replyLc}" step="1">
+
+ </c:forEach>
+ </c:if>
+ <img src="<c:url value='/images/egovframework/com/cop/bbs/icon_lock.png'/>" alt="secret"> <c:out value='${fn:substring(resultInfo.nttSj, 0, 40)}'/>
+ <c:if test="${resultInfo.commentCo != ''}">
+ <c:out value='[${resultInfo.commentCo}]'/>
+ </c:if>
+ </td>
+ </c:when>
+ <c:otherwise>
+ <!-- 나머지 경우 -->
+ <td class="left">
+ <c:choose>
+ <c:when test="${preview == 'true'}">
+ <input name="nttId" type="hidden" value="<c:out value="${resultInfo.nttId}"/>">
+ <input name="bbsId" type="hidden" value="<c:out value="${resultInfo.bbsId}"/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <span class="link"><c:if test="${resultInfo.replyLc!=0}"><c:forEach begin="0" end="${resultInfo.replyLc}" step="1"> </c:forEach><img src="<c:url value='/images/egovframework/com/cop/bbs/icon_reply.png'/>" alt="secret"></c:if><input type="submit" value="<c:out value='${fn:substring(resultInfo.nttSj, 0, 40)}'/><c:if test="${resultInfo.commentCo != ''}"> <c:out value='[${resultInfo.commentCo}]'/></c:if>" style="border:0px solid #e0e0e0;"></span>
+ </c:when>
+ <c:otherwise>
+ <form name="subForm" method="post" action="<c:url value='/cop/bbs/selectArticleDetail.do'/>">
+ <input name="nttId" type="hidden" value="<c:out value="${resultInfo.nttId}"/>">
+ <input name="bbsId" type="hidden" value="<c:out value="${resultInfo.bbsId}"/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <span class="link"><c:if test="${resultInfo.replyLc!=0}"><c:forEach begin="0" end="${resultInfo.replyLc}" step="1"> </c:forEach><img src="<c:url value='/images/egovframework/com/cop/bbs/icon_reply.png'/>" alt="secret"></c:if><input type="submit" value="<c:out value='${fn:substring(resultInfo.nttSj, 0, 40)}'/><c:if test="${resultInfo.commentCo != ''}"> <c:out value='[${resultInfo.commentCo}]'/></c:if>" style="border:0px solid #e0e0e0;"></span>
+ </form>
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </c:otherwise>
+ </c:choose>
+ <td><c:out value='${resultInfo.frstRegisterNm}'/></td>
+ <td><c:out value='${resultInfo.frstRegisterPnttm}'/></td>
+ <td><c:out value='${resultInfo.inqireCo}'/></td>
+ </tr>
+ </c:forEach>
+
+ <c:if test="${fn:length(resultList) == 0}">
+ <!-- 글이 없는 경우 -->
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+ <!-- 등록버튼 -->
+ <!--
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/insertBBSMasterView.do' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </div>
+ -->
+
+</div>
+
+<input name="nttId" type="hidden" value="0">
+<input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogReply.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogReply.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogReply.jsp (revision 7)
@@ -0,0 +1,274 @@
+<%
+ /**
+ * @Class Name : EgovArticleReply.jsp
+ * @Description : EgovArticleReply 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * 2020.10.27 신용호 파일 업로드 수정
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+
+$(function() {
+ $("#ntceBgnde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+ $("#ntceEndde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+});
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ // 첫 입력란에 포커스
+ document.getElementById("articleVO").nttSj.focus();
+
+}
+/* ********************************************************
+ * 답글저장처리화면
+ ******************************************************** */
+function fn_egov_reply_article(form){
+
+ CKEDITOR.instances.nttCn.updateElement();
+
+ //input item Client-Side validate
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+
+ //익명글은 공지게시 불가.
+ if(validateForm.anonymousAt.checked) {
+ if(validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.anonymousNotice" />");
+ return;
+ }
+ }
+
+ //게시기간
+ var ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ var ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde == '' && ntceEndde != '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ }
+ if(ntceBgnde != '' && ntceEndde == '') {
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+ if(ntceBgnde == '' && ntceEndde == '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+
+ ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde > ntceEndde){
+ alert("<spring:message code="comCopBbs.articleVO.ntceDeError" />");
+ return;
+ }
+
+
+
+
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.submit();
+ }
+ }
+}
+</script>
+
+</head>
+<body onLoad="fn_egov_init();">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/replyArticle.do" method="post" onSubmit="fn_egov_reply_article(document.forms[0]); return false;" enctype="multipart/form-data">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 글 제목, 제목 Bold여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.nttSj"/> </c:set>
+ <tr>
+ <th><label for="nttSj">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <input name="nttSj" type="text" size="70" maxlength="70" title="${title} ${inputTxt}" value="RE: <c:out value='${result.nttSj}'/>">
+ <div><form:errors path="nttSj" cssClass="error" /></div>
+ </td>
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.sjBoldAt"/> </c:set>
+ <th><label for="sjBoldAt">${title}</label></th>
+ <td class="left">
+ <form:checkbox path="sjBoldAt" value="Y"/>
+ <div><form:errors path="sjBoldAt" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 글 내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.nttCn"/> </c:set>
+ <tr>
+ <th><label for="nttCn">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd" colspan="3">
+ <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <ckeditor:replace replace="nttCn" basePath="${pageContext.request.contextPath}/html/egovframework/com/cmm/utl/ckeditor/" />
+ <div><form:errors path="nttCn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.noticeAt"/> </c:set>
+ <tr>
+ <th><label for="noticeAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="noticeAt" value="Y"/>
+ <div><form:errors path="noticeAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 익명등록 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.anonymousAt"/> </c:set>
+ <tr>
+ <th><label for="anonymousAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="anonymousAt" value="Y"/>
+ <div><form:errors path="anonymousAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 유효기간 설정 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.ntceDe"/> </c:set>
+ <tr>
+ <th><label for="ntceBgnde">${title} </label></th>
+ <td class="left" colspan="3">
+ <form:input path="ntceBgnde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;"/>
+ ~ <form:input path="ntceEndde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;"/>
+ <div><form:errors path="ntceBgnde" cssClass="error" /></div>
+ <div><form:errors path="ntceEndde" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.atchFile"/></c:set><!-- 첨부파일 -->
+ <tr>
+ <th><label for="file_1">${title}</label> </th>
+ <td class="nopd" colspan="3">
+ <input name="file_1" id="egovComFileUploader" type="file" title="<spring:message code="comCopBbs.articleVO.regist.atchFile"/>" multiple/><!-- 첨부파일 -->
+ <div id="egovComFileList"></div>
+ </td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectArticleBlogList.do' />?bbsId=${boardMasterVO.bbsId}" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+<input type="hidden" name="bbsTyCode" value="<c:out value='${boardMasterVO.bbsTyCode}'/>" />
+<input type="hidden" name="replyPosblAt" value="<c:out value='${boardMasterVO.replyPosblAt}'/>" />
+<input type="hidden" name="fileAtchPosblAt" value="<c:out value='${boardMasterVO.fileAtchPosblAt}'/>" />
+<input type="hidden" id="atchPosblFileNumber" name="atchPosblFileNumber" value="<c:out value='${boardMasterVO.atchPosblFileNumber}'/>" />
+<input type="hidden" name="atchPosblFileSize" value="<c:out value='${boardMasterVO.atchPosblFileSize}'/>" />
+
+<input type="hidden" name="parnts" value="<c:out value='${result.parnts}'/>" />
+<input type="hidden" name="sortOrdr" value="<c:out value='${result.sortOrdr}'/>" />
+<input type="hidden" name="replyLc" value="<c:out value='${result.replyLc}'/>" />
+
+<input name="nttId" type="hidden" value="${result.nttId}">
+<input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+<input name="cmd" type="hidden" value="<c:out value='save'/>">
+</form:form>
+
+<!-- 첨부파일 업로드 가능화일 설정 Start..-->
+<script type="text/javascript">
+var maxFileNum = document.getElementById('atchPosblFileNumber').value;
+if(maxFileNum==null || maxFileNum==""){
+ maxFileNum = 3;
+}
+var multi_selector = new MultiSelector( document.getElementById( 'egovComFileList' ), maxFileNum );
+multi_selector.addElement( document.getElementById( 'egovComFileUploader' ) );
+</script>
+<!-- 첨부파일 업로드 가능화일 설정 End.-->
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogReply.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogList.jsp (revision 7)
@@ -0,0 +1,295 @@
+<%@ 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="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" %>
+<%-- <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> --%>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 블로그 메인 목록 -->
+
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cop/bbs/style.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery-1.12.4.min.js' />"></script>
+
+<!-- 댓글 작성 스크립트 -->
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="formComment" staticJavascript="false" xhtml="true" cdata="false"/>
+
+<script>
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.articleForm.pageIndex.value = pageNo;
+ document.articleForm.action = "<c:url value='/cop/bbs/selectArticleBlogList.do'/>";
+ document.articleForm.submit();
+}
+
+function layer_toggle(ma) {
+ if (ma.style.display == 'none') {
+ ma.style.display = 'block';
+ document.getElementById('blog_cnt').style.display = 'none';
+ }else{
+ ma.style.display = 'none';
+ document.getElementById('blog_cnt').style.display = 'block';
+ }
+ }
+
+function fn_egov_loadBdList(bbsId,blogNm,cnt){
+ document.blogfrm.bbsId.value = bbsId;
+ var searchCnd = document.postCnt.searchCnd.value;
+ $('#sub').text(blogNm);
+ $(".comm_List").empty();
+ $.ajax({
+ url :"<c:url value='/cop/bbs/selectArticleBlogDetail.do'/>"
+ ,type: "POST"
+ ,data : {"bbsId":bbsId, "searchCnd":searchCnd}
+ ,dataType: 'json'
+ ,success : function(data){
+ var innerHtml = "";
+ var innerReply = "";
+ var innerPaging = "";
+ var length = data['blogSubJectList'].length;
+ if(length > 0) {
+ $.each(data['blogSubJectList'], function(i) {
+ innerHtml += '<tr>';
+ innerHtml += '<td id="target" onclick="fn_clickComm(\'' + bbsId + '\', \''+data['blogSubJectList'][i].nttId+'\', \''+data['blogSubJectList'][i].ntcrId+'\', \''+data['blogSubJectList'][i].replyPosblAt+'\', \''+data['blogSubJectList'][i].blogId+'\', \''+cnt+'\')"; style="cursor:pointer">';
+ if(data['blogSubJectList'][i].commentCo != "") {
+ innerHtml += data['blogSubJectList'][i].nttSj+"["+data['blogSubJectList'][i].commentCo+"]";
+ }else{
+ innerHtml += data['blogSubJectList'][i].nttSj;
+ }
+ innerHtml += '</td>';
+ innerHtml += '<td>';
+ innerHtml += data['blogSubJectList'][i].frstRegisterPnttm;
+ innerHtml += '</td>';
+ innerHtml += '</tr>';
+
+ });
+
+ innerPaging += '<ul>';
+ innerPaging += '<ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>';
+ innerPaging += '</ul>';
+
+ $("#subtitle").html(innerHtml);
+ $("#paging").html(innerPaging);
+ $("#target").click(); //댓글표시
+ if(data['blogCnOne'].nttCn != null){
+ $(".cnt").html(data['blogCnOne'].nttCn);
+ }
+ }
+ }
+ ,error: function(){
+ alert("<spring:message code="comCopBlog.articleBlogList.validate.noResult" />");//게시글이 없습니다!\n게시글을 등록해 주세요.
+ }
+ });
+}
+
+function fn_blog_cn(blogId){
+ var bbsId = document.blogfrm.bbsId.value;
+ if (bbsId == '' || bbsId == null) {
+ alert('<spring:message code="comCopBlog.articleBlogList.validate.noBoard" />'); //등록된 게시판이 없습니다.\n카테고리등록을 통해 게시판을 생성해주세요.
+ return;
+ }
+
+ location.href="<c:url value='/cop/bbs/insertArticleView.do' />?bbsId="+bbsId+"&blogAt=Y&blogId="+blogId;
+}
+
+function fn_clickComm(bbsId, nttId, ntcrId, replyPosblAt, blogId, cnt){
+ $.ajax({
+ url :"<c:url value='/cop/bbs/selectArticleBlogDetailCn.do'/>"
+ ,type: "POST"
+ ,data : {"bbsId":bbsId, "nttId":nttId}
+ ,dataType: 'json'
+ ,success : function(data){
+ var length = data['blogCnList'].length;
+ var innerHtml = "";
+ var innerReply = "";
+ if(length > 0) {
+ $.each(data['blogCnList'], function(i) {
+ innerHtml += data['blogCnList'][i].nttCn;
+ });
+ $(".cnt").html(innerHtml);
+
+ $('input[name=bbsId]').attr('value',bbsId);
+ $('input[name=nttId]').attr('value',nttId);
+ $('input[name=blogId]').attr('value',blogId);
+
+ $.each(data['resultList'], function(i) {
+ innerReply += "<dl>";
+ innerReply += "<dt>";
+ innerReply += "<strong>";
+ innerReply += data['resultList'][i].wrterNm;
+ innerReply += "</strong>";
+ innerReply += "<span>"
+ innerReply += data['resultList'][i].frstRegisterPnttm;
+ innerReply += "</span>"
+
+ if(cnt == 1) {
+ innerReply += "<div align='right'>";
+ innerReply += '<a href="javascript:fn_egov_deleteCommentList(\''+data['resultList'][i].commentNo+'\', \''+bbsId+'\', \''+nttId+'\', \''+blogId+'\')" ><spring:message code="button.delete" /></a>';//삭제
+ innerReply += "</div>";
+ }
+
+ innerReply += "</dt>";
+ innerReply += "<dd>";
+ innerReply += data['resultList'][i].commentCn;
+ innerReply += "</dd>";
+ innerReply += "</dl>";
+ });
+ innerReply += "<dl>";
+ innerReply += "<dd>";
+ innerReply += "<form id='formComment' name='formComment' method='post'>";
+ innerReply += "<textarea name='commentCn' placeholder='<spring:message code="comCopBlog.articleBlogList.validate.limitSize" />'/>";//댓글은 500byte 까지 작성할 수 있습니다.
+ innerReply += "<button type='button' onclick='fn_egov_insert_commentList(\""+bbsId+"\", \""+nttId+"\", \""+blogId+"\");'><spring:message code="title.create"/></button>";//등록
+ innerReply += "<input name='bbsId' type='hidden' value=''>";
+ innerReply += "<input name='nttId' type='hidden' value=''>";
+ innerReply += "<input name='blogId' type='hidden' value=''>";
+ innerReply += "<input name='modified' type='hidden' value=''>";
+ innerReply += "<input name='commentNo' type='hidden' value=''>";
+ innerReply += "<input name='blogAt' type='hidden' value='Y'>";
+ innerReply += "</form>";
+ innerReply += "</dd>";
+ innerReply += "</dl>";
+ $(".comm_List").html(innerReply);
+ }else{
+ innerHtml += "<spring:message code="comCopBlog.articleBlogList.validate.noContent" />";//본문 내용이 존재하지 않습니다!
+ $(".cnt").html(innerHtml);
+ }
+ }
+ ,error: function(){
+ alert("<spring:message code="comCopBlog.articleBlogList.validate.occurError" />");//에러가 발생했습니다.
+ }
+ });
+}
+
+function fn_egov_deleteCommentList(commentNo, bbsId, nttId, blogId) {
+
+ var form = document.getElementById("formComment");
+
+ if (confirm('<spring:message code="common.delete.msg" />')) {
+ form.modified.value = "true";
+ form.commentNo.value = commentNo;
+ form.bbsId.value = bbsId;
+ form.nttId.value = nttId;
+ form.blogId.value = blogId;
+ form.action = "<c:url value='/cop/cmt/deleteArticleComment.do'/>";
+ form.submit();
+ }
+}
+
+function fn_egov_insert_commentList(bbsId, nttId, blogId) {
+ document.formComment.bbsId.value = bbsId;
+ document.formComment.nttId.value = nttId;
+ document.formComment.blogId.value = blogId;
+ document.formComment.modified.value = false;
+ document.formComment.action = "<c:url value='/cop/cmt/insertArticleComment.do'/>";
+
+
+ if (!validateFormComment(document.formComment)){
+ return;
+ }
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ document.formComment.submit();
+ }
+
+
+}
+
+$(document).ready(function() {
+ $("#titleck").click();
+});
+
+</script>
+</head>
+<body>
+<!-- 블로그 -->
+<div class="blog_wrap">
+ <!-- header -->
+ <div class="blog_header">
+ <div class="visual_default">
+ <h1>${boardMasterVO.blogNm}</h1>
+ <p>${boardMasterVO.blogIntrcn}</p>
+ </div>
+ <div class="h_menu">
+ <ul class="gnb">
+ <c:forEach items="${blogNameList}" var="resultInfo" varStatus="status">
+ <li><a id="titleck" onclick="fn_egov_loadBdList('<c:out value="${resultInfo.bbsId}"/>','<c:out value="${resultInfo.bbsNm}" />','<c:out value="${loginUserCnt}"/>');"><c:out value="${resultInfo.bbsNm}" /></a></li>
+ </c:forEach>
+ </ul>
+
+ <ul class="gnb r">
+ <c:choose>
+ <c:when test="${loginUserCnt == 1}">
+ <li><a href="<c:url value='/cop/bbs/insertBBSMasterView.do?blogId=${boardMasterVO.blogId}&blogAt=Y' />" onclick="fn_egov_ls()"><spring:message code="comCopBlog.articleBlogList.regCategory" /></a></li><!-- 카테고리등록 -->
+ <li><a href="<c:url value='/cop/bbs/selectBlogListManager.do?blogId=${boardMasterVO.blogId}' />" ><spring:message code="comCopBlog.blogUseMgrMain.btnBoard" /></a></li> <!-- 개인블로그관리 -->
+ </ul>
+ <button class="write" onclick="fn_blog_cn('${boardMasterVO.blogId}')"><spring:message code="button.create" /></button>
+ </c:when>
+ </c:choose>
+ </div>
+ </div>
+ <!-- header //-->
+
+ <!-- 블로그 리스트 -->
+ <div class="post">
+ <div class="post_title">
+ <p id="sub"></p>
+ </div>
+
+ <div class="listBox">
+ <table class="tbl_list">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption><!-- 블로그 메인 리스트 -->
+ <colgroup>
+ <col style="width: ;" />
+ <col style="width:10%" />
+ </colgroup>
+ <tbody id=subtitle>
+ </tbody>
+ </table>
+ <form name="postCnt" method="post" onChange="$('#titleck').click();">
+ <div class="post_opt">
+ <label for="" class="blind"><spring:message code="comCopBlog.articleBlogList.setListNumbers" /></label><!-- 포스트 갯수 설정 -->
+ <select name="searchCnd" id="searchCnd">
+ <option value="5" <c:if test="${searchVO.searchCnd == '5'}">selected="selected"</c:if>><spring:message code="comCopBlog.articleBlogList.listNumber5" /></option><!-- 5줄 보기 -->
+ <option value="10" <c:if test="${searchVO.searchCnd == '10'}">selected="selected"</c:if>><spring:message code="comCopBlog.articleBlogList.listNumber10" /></option><!-- 10줄 보기 -->
+ <option value="15" <c:if test="${searchVO.searchCnd == '15'}">selected="selected"</c:if>><spring:message code="comCopBlog.articleBlogList.listNumber15" /></option><!-- 15줄 보기 -->
+ <option value="20" <c:if test="${searchVO.searchCnd == '20'}">selected="selected"</c:if>><spring:message code="comCopBlog.articleBlogList.listNumber20" /></option><!-- 20줄 보기 -->
+ <option value="30" <c:if test="${searchVO.searchCnd == '30'}">selected="selected"</c:if>><spring:message code="comCopBlog.articleBlogList.listNumber30" /></option><!-- 30줄 보기 -->
+ </select>
+ </div>
+ </form>
+ <div id="paging" class="paging">
+ </div>
+ </div>
+ </div>
+ <!-- 블로그 리스트 //-->
+
+ <!-- 블로그 본문 -->
+ <div id="blog_cnt" class="blog_cnt" style="display:block;">
+ <div class="blog_title">
+ <!-- 본문타이틀 -->
+ </div>
+ <div class="cnt">
+ <!-- 본문내용 -->
+ </div>
+ <!-- 댓글 -->
+ <div class="comm_List" >
+ </div>
+ </div>
+ <!-- 블로그 본문 //-->
+</div>
+
+<!-- 블로그 //-->
+<form name="blogfrm">
+<input name="blogCn" type="hidden" value="">
+<input name="blogName" type="hidden" value="">
+<input name="bbsId" type="hidden" value="">
+</form>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleBlogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageUpdt.jsp (revision 7)
@@ -0,0 +1,248 @@
+
+<%
+ /**
+ * @Class Name : EgovArticleUpdt.jsp
+ * @Description : EgovArticleUpdt 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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">
+ <spring:message code="comCopBbs.articleVO.title" />
+</c:set>
+<c:set var="reBbsId" value="${fn:replace(boardMasterVO.bbsId, \"BBSMSTR_\", \"\")}" />
+<title>${pageTitle }<spring:message code="title.update" /></title>
+<!-- 게시글 답글 수정-->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<!-- 에디터 관련 추가 CSS, Javascript 추가 -->
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate" scope="application" />
+<!-- Include Editor style. -->
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_editor.pkgd.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/css/froala_style.min.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/font-awesome/css/font-awesome.css'><c:param name="dt" value="${nowDate}"/></c:url>">
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/editor/codemirror/lib/codemirror.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<!-- Include Editor JS files. -->
+<script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor.pkgd.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/js/languages/ko.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/js/froala_editor_script_custom.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/codemirror.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/editor/codemirror/lib/xml.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<!-- 에디터 관련 추가 CSS, Javascript 종료 -->
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false" />
+<script type="text/javascript">
+ /* ********************************************************
+ * 초기화
+ ******************************************************** */
+ function fn_egov_init() {
+ // 첫 입력란에 포커스..
+ document.getElementById("articleVO").nttSj.focus();
+ }
+ /* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+ function fn_egov_updt_article(form) {
+ // 개인정보입력 체크.
+ if (!fnPrivacyCheck(form.nttSj.value)) { // 제목
+ return false;
+ }
+ if (!fnPrivacyCheck(form.nttCn.value)) { // 내용
+ return false;
+ }
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+ //비밀글은 공지게시 불가.
+ if (validateForm.secretAt.checked) {
+ if (validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretNotice" />");
+ return;
+ }
+ }
+ if (confirm("<spring:message code="common.update.msg" />")) {
+ form.submit();
+ }
+ }
+ }
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_inqire_articlelist() {
+ $('#articleVO')
+ .attr('action',
+ "<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleList.do'/>");
+ $('#articleVO').submit();
+
+ }
+</script>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle">
+ <spring:message code="common.noScriptTitle.msg" />
+</noscript>
+
+<!-- 상단타이틀 -->
+<form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/manage/${reBbsId}/updateArticle.do" method="post">
+ <div class="board_header">
+ <h3>${boardMasterVO.bbsNm}</h3>
+ </div>
+ <div class="board_body">
+ <!-- 수정폼 -->
+ <p class="must_text">
+ <em>*</em>는 필수 입력사항입니다.
+ </p>
+ <table class="table_write">
+ <caption>게시글 수정 - 제목, 내용, 공지신청, 비밀글여부, 첨부파일등록으로 구성</caption>
+ <colgroup>
+ <col style="width: 200px;">
+ <col style="width:;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt">
+ <spring:message code="input.input" />
+ </c:set>
+ <!-- 글 제목 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.updt.nttSj" />
+ </c:set>
+ <tr>
+ <th scope="col" class="must"><label for="nttSj">${title}</label></th>
+ <td class="left">
+ <input type="text" id="nttSj" name="nttSj" maxlength="70" class="width100p inputText" value="${articleVO.nttSj}">
+ </td>
+ </tr>
+
+ <!-- 글 내용 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.updt.nttCn" />
+ </c:set>
+ <tr>
+ <th scope="col" class="must"><label for="nttCn">${title}</label></th>
+ <td class="nopd">
+ <textarea id="nttCn" name="nttCn" class="width100p height200">${articleVO.nttCn}</textarea>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.updt.noticeAt" />
+ </c:set>
+ <tr>
+ <th scope="col"><label for="noticeAt">${title}</label></th>
+ <td class="left">
+ <div class="check_wrap">
+ <input type="checkbox" id="noticeAt" name="noticeAt" value="Y" <c:if test="${articleVO.noticeAt eq 'Y'}">checked="checked"</c:if>>
+ <label for="noticeAt">공지로 등록</label>
+ </div>
+ </td>
+ </tr>
+
+ <!-- 비밀글 여부 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.updt.secretAt" />
+ </c:set>
+ <tr>
+ <th scope="col"><label for="secretAt">${title}</label></th>
+ <td class="left">
+ <div class="check_wrap">
+ <input type="checkbox" id="secretAt" name="secretAt" value="Y" <c:if test="${articleVO.secretAt eq 'Y'}">checked="checked"</c:if>>
+ <label for="secretAt"><span>비밀글 등록</span></label>
+ </div>
+ </td>
+ </tr>
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 추가 시작 -->
+ <c:set var="title">
+ <spring:message code="comCopBbs.articleVO.updt.atchFileAdd" />
+ </c:set>
+ <tr>
+ <th scope="col"><label for="egovComFileUploader">${title}</label></th>
+ <td class="nopd">
+ <div class="file_up">
+ <label for="egovComFileUploader" class="inputFile" title="업로드 할 파일을 선택해주세요">파일업로드</label>
+ <input type="file" id="egovComFileUploader" name="file_1" title="<spring:message code="comCopBbs.articleVO.regist.atchFile"/>" />
+ <!-- 첨부파일 -->
+ <input type="hidden" id="atchFileId" name="atchFileId" value="${articleVO.atchFileId}" />
+ </div>
+ <em class="exp filenote">※ 파일당 10MB까지 첨부 가능합니다.</em>
+ <div class="space5"></div>
+ <ul id="egovComFileList" class="file_list" style="display: none;"></ul>
+ </td>
+ </tr>
+ <!-- 첨부파일 추가 끝 -->
+ </c:if>
+
+ </tbody>
+ </table>
+
+ </div>
+ <div class="board_footer">
+ <!-- 하단 버튼 -->
+ <div class="bottom_wrap fl">
+ <button type="button" class="btn_s" title="<spring:message code="button.list" /> <spring:message code="input.button" />" onclick="fn_egov_inqire_articlelist(); return false;">
+ <spring:message code="button.list" />
+ </button>
+ <!-- 목록 -->
+ </div>
+ <div class="bottom_wrap fr">
+ <button type="button" class="btn_s" title="<spring:message code="button.update" /> <spring:message code="input.button" />" onclick="fn_egov_updt_article(document.forms[0]); return false;">
+ <spring:message code="button.update" />
+ </button>
+ <!-- 수정 -->
+ </div>
+ <div style="clear: both;"></div>
+ </div>
+
+ <input name="pageIndex" type="hidden" value="${searchVO.pageIndex}" />
+ <input name="searchKeyword" type="hidden" value="${searchVO.searchKeyword}" />
+ <input type="hidden" name="bbsTyCode" value="${boardMasterVO.bbsTyCode}" />
+ <input type="hidden" name="replyPosblAt" value="${boardMasterVO.replyPosblAt}" />
+ <input type="hidden" name="fileAtchPosblAt" value="${boardMasterVO.fileAtchPosblAt}" />
+ <input type="hidden" id="atchPosblFileNumber" name="atchPosblFileNumber" value="${boardMasterVO.atchPosblFileNumber}" />
+ <input type="hidden" id="atchPosblFileSize" name="atchPosblFileSize" value="${boardMasterVO.atchPosblFileSize}" />
+ <input name="nttId" type="hidden" value="${articleVO.nttId}">
+ <input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+</form:form>
+
+<!-- 첨부파일 업로드 가능화일 설정 Start..-->
+<script type="text/javascript">
+ $(function() {
+ var atchPosblFileNumber = $('#atchPosblFileNumber').val();
+ var atchPosblFileSize = $('#atchPosblFileSize').val();
+ var options = {
+ fileListDivId : 'egovComFileList',
+ inputFileId : 'egovComFileUploader',
+ hiddenFileName : 'atchFileId',
+ txtAreaId : 'nttCn',
+ authorType : 'admin',
+ maxSize : atchPosblFileNumber,
+ fileMaxSize : atchPosblFileSize
+ }
+ $('#nttCn').initEditor(options);
+ });
+</script>
+<!-- 첨부파일 업로드 가능화일 설정 End.-->
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleReply.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleReply.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleReply.jsp (revision 7)
@@ -0,0 +1,274 @@
+<%
+ /**
+ * @Class Name : EgovArticleReply.jsp
+ * @Description : EgovArticleReply 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * 2020.10.27 신용호 파일 업로드 수정
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 게시글 답글 등록-->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+
+$(function() {
+ $("#ntceBgnde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+ $("#ntceEndde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+});
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ // 첫 입력란에 포커스
+ document.getElementById("articleVO").nttSj.focus();
+
+}
+/* ********************************************************
+ * 답글저장처리화면
+ ******************************************************** */
+function fn_egov_reply_article(form){
+
+ CKEDITOR.instances.nttCn.updateElement();
+
+ //input item Client-Side validate
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+
+ //익명글은 공지게시 불가.
+ if(validateForm.anonymousAt.checked) {
+ if(validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.anonymousNotice" />");
+ return;
+ }
+ }
+
+ //게시기간
+ var ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ var ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde == '' && ntceEndde != '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ }
+ if(ntceBgnde != '' && ntceEndde == '') {
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+ if(ntceBgnde == '' && ntceEndde == '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+
+ ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if(ntceBgnde > ntceEndde){
+ alert("<spring:message code="comCopBbs.articleVO.ntceDeError" />");
+ return;
+ }
+
+
+
+
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.submit();
+ }
+ }
+}
+</script>
+
+</head>
+<body onLoad="fn_egov_init();">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/replyArticle.do" method="post" onSubmit="fn_egov_reply_article(document.forms[0]); return false;" enctype="multipart/form-data">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2><!-- 게시글 답글 등록-->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 글 제목, 제목 Bold여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.nttSj"/> </c:set>
+ <tr>
+ <th><label for="nttSj">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <input name="nttSj" type="text" size="70" maxlength="70" title="${title} ${inputTxt}" value="RE: <c:out value='${result.nttSj}'/>">
+ <div><form:errors path="nttSj" cssClass="error" /></div>
+ </td>
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.sjBoldAt"/> </c:set>
+ <th><label for="sjBoldAt">${title}</label></th>
+ <td class="left">
+ <form:checkbox path="sjBoldAt" value="Y"/>
+ <div><form:errors path="sjBoldAt" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 글 내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.nttCn"/> </c:set>
+ <tr>
+ <th><label for="nttCn">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd" colspan="3">
+ <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <ckeditor:replace replace="nttCn" basePath="${pageContext.request.contextPath}/html/egovframework/com/cmm/utl/ckeditor/" />
+ <div><form:errors path="nttCn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.noticeAt"/> </c:set>
+ <tr>
+ <th><label for="noticeAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="noticeAt" value="Y"/>
+ <div><form:errors path="noticeAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 익명등록 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.anonymousAt"/> </c:set>
+ <tr>
+ <th><label for="anonymousAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="anonymousAt" value="Y"/>
+ <div><form:errors path="anonymousAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 유효기간 설정 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.reply.ntceDe"/> </c:set>
+ <tr>
+ <th><label for="ntceBgnde">${title} </label></th>
+ <td class="left" colspan="3">
+ <form:input path="ntceBgnde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;"/>
+ ~ <form:input path="ntceEndde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;"/>
+ <div><form:errors path="ntceBgnde" cssClass="error" /></div>
+ <div><form:errors path="ntceEndde" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.atchFile"/></c:set><!-- 첨부파일 -->
+ <tr>
+ <th><label for="file_1">${title}</label> </th>
+ <td class="nopd" colspan="3">
+ <input name="file_1" id="egovComFileUploader" type="file" title="<spring:message code="comCopBbs.articleVO.regist.atchFile"/>" multiple/><!-- 첨부파일 -->
+ <div id="egovComFileList"></div>
+ </td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectArticleList.do' />?bbsId=${boardMasterVO.bbsId}" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+<input type="hidden" name="bbsTyCode" value="<c:out value='${boardMasterVO.bbsTyCode}'/>" />
+<input type="hidden" name="replyPosblAt" value="<c:out value='${boardMasterVO.replyPosblAt}'/>" />
+<input type="hidden" name="fileAtchPosblAt" value="<c:out value='${boardMasterVO.fileAtchPosblAt}'/>" />
+<input type="hidden" id="atchPosblFileNumber" name="atchPosblFileNumber" value="<c:out value='${boardMasterVO.atchPosblFileNumber}'/>" />
+<input type="hidden" name="atchPosblFileSize" value="<c:out value='${boardMasterVO.atchPosblFileSize}'/>" />
+
+<input type="hidden" name="parnts" value="<c:out value='${result.parnts}'/>" />
+<input type="hidden" name="sortOrdr" value="<c:out value='${result.sortOrdr}'/>" />
+<input type="hidden" name="replyLc" value="<c:out value='${result.replyLc}'/>" />
+
+<input name="nttId" type="hidden" value="${result.nttId}">
+<input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+<input name="cmd" type="hidden" value="<c:out value='save'/>">
+</form:form>
+
+<!-- 첨부파일 업로드 가능화일 설정 Start..-->
+<script type="text/javascript">
+var maxFileNum = document.getElementById('atchPosblFileNumber').value;
+if(maxFileNum==null || maxFileNum==""){
+ maxFileNum = 3;
+}
+var multi_selector = new MultiSelector( document.getElementById( 'egovComFileList' ), maxFileNum );
+multi_selector.addElement( document.getElementById( 'egovComFileUploader' ) );
+</script>
+<!-- 첨부파일 업로드 가능화일 설정 End.-->
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleReply.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageList.jsp (revision 7)
@@ -0,0 +1,192 @@
+<%
+ /**
+ * @Class Name : EgovArticleList.jsp
+ * @Description : EgovArticleList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * 2018.06.15 신용호 페이징 처리 오류 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="reBbsId" value="${fn:replace(boardMasterVO.bbsId, \"BBSMSTR_\", \"\")}"/>
+<c:set var="pageTitle"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.articleForm.searchCondition.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.articleForm.pageIndex.value = pageNo;
+ document.articleForm.action = "<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleList.do'/>";
+ document.articleForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_article(){
+ document.articleForm.pageIndex.value = 1;
+ document.articleForm.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_articledetail(bbsId, nttId) {
+ // 사이트 키값(siteId) 셋팅.
+ document.articleForm.bbsId.value = bbsId;
+ document.articleForm.nttId.value = nttId;
+ document.articleForm.action = "<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleDetail.do'/>";
+ document.articleForm.submit();
+}
+/* ********************************************************
+ * 등록
+ ******************************************************** */
+function fn_regist() {
+ document.articleForm.action = "<c:url value='/cop/bbs/manage/${reBbsId}/insertArticleView.do'/>";
+ document.articleForm.submit();
+}
+/* ********************************************************
+ * 엑셀다운로드
+ ******************************************************** */
+function fn_downloadExcel() {
+ document.articleForm.action = "<c:url value='/cop/bbs/manage/${reBbsId}/downloadExcel.do'/>";
+ document.articleForm.submit();
+}
+
+$(document).ready(function() {
+ initDatePickerMulti('.bgnde', '.endde', '.date_picker');
+});
+</script>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="articleForm" action="<c:url value='/cop/bbs/manage/${reBbsId}/selectArticleList.do'/>" method="post" onSubmit="fn_egov_search_article(); return false;" >
+<div class="board_header">
+ <h3>${boardMasterVO.bbsNm}</h3><!-- 게시글 목록 -->
+ <!-- 하단 버튼 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <div class="date_picker mr10 fl">
+ <div class="date_pick">
+ <input type="text" class="inputText width100 bgnde" id="searchBgnPnttm" name="searchBgnPnttm" value="${searchVO.searchBgnPnttm}" readonly title="시작날짜를 선택하세요" placeholder="시작날짜" autocomplete="off" inputmode="text">
+ <label for="searchBgnPnttm"><em class="blind">달력아이콘</em></label>
+ </div>
+ <em class="gap">~</em>
+ <div class="date_pick">
+ <input type="text" class="inputText width100 endde" id="searchEndPnttm" name="searchEndPnttm" value="${searchVO.searchEndPnttm}" readonly title="종료날짜를 선택하세요" placeholder="종료날짜" autocomplete="off" inputmode="text">
+ <label for="searchEndPnttm"><em class="blind">달력아이콘</em></label>
+ </div>
+ </div>
+
+ <select class="select fl" name="searchCondition" title="<spring:message code="title.searchCondition" /> <spring:message code="input.cSelect" />">
+ <option value="0" <c:if test="${searchVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comCopBbs.articleVO.list.nttSj" /></option><!-- 글 제목 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comCopBbs.articleVO.list.nttCn" /></option><!-- 글 내용 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="table.reger" /></option><!-- 작성자 -->
+ </select>
+ <!-- 검색키워드 및 조회버튼 -->
+ <input class="inputText" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value="${searchVO.searchKeyword}" maxlength="155" >
+ <button class="btn_board"><spring:message code="button.inquire" /></button>
+ </div>
+</div>
+
+<div class="board_body">
+ <div class="board_infomation flex between itemC">
+ <p>총 : <span>${paginationInfo.totalRecordCount}</span>건, 쪽번호 : <span>${paginationInfo.currentPageNo }</span> / <span>${paginationInfo.totalPageCount }</span></p>
+ <button type="button" class="btn_s bgWhite btn_excel" onclick="fn_downloadExcel(); return false;"> 엑셀다운로드</button>
+ </div>
+ <!-- 목록영역 -->
+ <table class="table_list">
+ <caption>게시판 목록 - 번호, 글제목, 등록자, 작성시각, 조회수로 구성</caption>
+ <colgroup>
+ <col class="width100">
+ <col class="widthauto">
+ <col class="width150">
+ <col class="width150">
+ <col class="width100">
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="table.num" /></th><!-- 번호 -->
+ <th scope="col" class="board_th_link"><spring:message code="comCopBbs.articleVO.list.nttSj" /></th><!--글 제목 -->
+ <th scope="col"><spring:message code="table.reger" /></th><!-- 작성자명 -->
+ <th scope="col"><spring:message code="table.regdate" /></th><!-- 작성시각 -->
+ <th scope="col"><spring:message code="comCopBbs.articleVO.list.inqireCo" /></th><!-- 조회수 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${empty resultList}">
+ <!-- 글이 없는 경우 -->
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <!-- 공지사항 본문 -->
+ <c:forEach items="${noticeList}" var="noticeInfo" varStatus="status">
+ <tr class="notice">
+ <td>
+ 공지
+ </td>
+ <td class="alignL">
+ <a href="#!" onclick="fn_egov_inquire_articledetail(${reBbsId},${noticeInfo.nttId});">${noticeInfo.nttSj} <c:if test="${noticeInfo.commentCo != ''}"> [${noticeInfo.commentCo}]</c:if></a>
+ </td>
+ <td>${noticeInfo.frstRegisterNm}</td>
+ <td>${noticeInfo.frstRegisterPnttm}</td>
+ <td>${noticeInfo.inqireCo}</td>
+ </tr>
+ </c:forEach>
+ <!-- 게시글 본문 -->
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td>
+ <c:out value="${paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo-1) * paginationInfo.recordCountPerPage + status.index) }" />
+ </td>
+ <!-- 나머지 경우 -->
+ <td class="alignL <c:if test="${resultInfo.secretAt == 'Y'}">secret</c:if>">
+ <a href="#!" onclick="fn_egov_inquire_articledetail(${reBbsId},${resultInfo.nttId});">${resultInfo.nttSj} <c:if test="${resultInfo.commentCo != ''}">[${resultInfo.commentCo}]</c:if></a>
+ <c:if test="${resultInfo.secretAt eq 'Y'}">
+ <em class="icon_secret">비밀글</em>
+ </c:if>
+ </td>
+ <td>${resultInfo.frstRegisterNm}</td>
+ <td>${resultInfo.frstRegisterPnttm}</td>
+ <td>${resultInfo.inqireCo}</td>
+ </tr>
+ </c:forEach>
+ </tbody>
+</table>
+</div>
+<div class="board_footer">
+ <!-- paging navigation -->
+ <div class="page" role="group" aria-label="...">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="admin" jsFunction="fn_egov_select_linkPage" />
+ </ul>
+ </div>
+ <div class="bottom_wrap fr">
+ <button type="button" class="btn_s" style="margin-left:3px;" onclick="fn_regist(); return false;"><spring:message code="button.create" /></button>
+ </div>
+</div>
+<input name="bbsId" type="hidden" value="${boardMasterVO.bbsId}">
+<input name="nttId" type="hidden" value="0">
+<input name="pageIndex" type="hidden" value="${searchVO.pageIndex}" >
+</form>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleManageList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListPortlet.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListPortlet.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListPortlet.jsp (revision 7)
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+/**
+ * @Class Name : EgovBlogListPortlet.jsp
+ * @Description : 블로그 목록 조회 포틀릿화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.07 이삼섭 최초 생성
+ * @ 2018.10.11 이정은 포털 메인화면 - 블로그 목록 조회 포틀릿추가
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.07
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<ul>
+<c:forEach var="result" items="${resultList}" varStatus="status">
+ <li style="padding-top:5px">
+ <form name="blogForm" method="post" action="<c:url value='/cop/bbs/selectArticleBlogList.do'/>" >
+ <input type="hidden" name="blogId" value="<c:out value='${result.blogId}'/>"/>
+ <input type="hidden" name="blogNm" value="<c:out value='${result.blogNm}'/>"/>
+ <input type="submit" value="<c:out value="${result.blogNm}"/>"/>
+ </form>
+ </li>
+</c:forEach>
+</ul>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBlogListPortlet.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSListPortlet.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSListPortlet.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSListPortlet.jsp (revision 7)
@@ -0,0 +1,34 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovBBSListPortlet.jsp
+ * @Description : 게시판 목록 조회 포틀릿화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.07 이삼섭 최초 생성
+ * 2018.10.11 이정은 포털 메인화면 - 게시판 목록 조회 포틀릿추가
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.07
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<ul>
+<c:forEach var="result" items="${resultList}" varStatus="status">
+ <li style="padding-top:5px">
+ <form name="blogForm" method="post" action="<c:url value='/cop/bbs/selectBBSMasterDetail.do'/>" >
+ <input type="hidden" name="bbsId" value="<c:out value='${result.bbsId}'/>"/>
+ <input type="hidden" name="bbsNm" value="<c:out value='${result.bbsNm}'/>"/>
+ <input type="submit" value="<c:out value="${result.bbsNm}"/>"/>
+ </form>
+ </li>
+</c:forEach>
+</ul>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSListPortlet.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterRegist.jsp (revision 7)
@@ -0,0 +1,229 @@
+<%
+ /**
+ * @Class Name : EgovBBSMasterRegist.jsp
+ * @Description : EgovBBSMasterRegist 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * @ 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @ 2018.10.15 최두영 표준프레임워크 V3.8 개선
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comCopBbs.boardMasterVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 게시판 마스터 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="boardMasterVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ // 첫 입력란에 포커스
+ document.getElementById("boardMasterVO").bbsNm.focus();
+
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_regist_bbs(form){
+ //input item Client-Side validate
+ if (!validateBoardMasterVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("boardMasterVO");
+
+ //방명록 게시판의 경우 답장 불가, 파일첨부 불가
+ if(validateForm.bbsTyCode.value == 'BBST03') {
+ if(validateForm.replyPosblAt.value == 'Y') {
+ alert("<spring:message code="comCopBbs.boardMasterVO.guestReply" />");
+ return;
+ }
+ if(validateForm.fileAtchPosblAt.value == 'Y') {
+ alert("<spring:message code="comCopBbs.boardMasterVO.guestFile" />");
+ return;
+ }
+ } else {
+ if(validateForm.fileAtchPosblAt.value == 'Y' && validateForm.atchPosblFileNumber.value == '0') {
+ alert('첨부가능파일숫자를 선택하세요.');
+ return;
+ }
+ }
+
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.submit();
+ }
+ }
+}
+</script>
+
+</head>
+<body onLoad="fn_egov_init();">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="boardMasterVO" action="${pageContext.request.contextPath}/cop/bbs/insertBBSMaster.do" method="post" onSubmit="fn_egov_regist_bbs(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2><!-- 게시판 마스터 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 게시판명 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.regist.bbsNm"/> </c:set>
+ <tr>
+ <th><label for="bbsNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="bbsNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="bbsNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 게시판 소개내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.regist.bbsIntrcn"/> </c:set>
+ <tr>
+ <th><label for="bbsIntrcn">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="bbsIntrcn" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="bbsIntrcn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 게시판 유형 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.regist.bbsTyCode"/> </c:set>
+ <tr>
+ <th><label for="bbsTyCode">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="bbsTyCode" title="${title} ${inputTxt}" cssClass="txt">
+ <form:option value="" label="--선택하세요--" />
+ <form:options items="${bbsTyCode}" itemValue="code" itemLabel="codeNm" />
+ </form:select>
+ <div><form:errors path="bbsTyCode" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 답장가능여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.regist.replyPosblAt"/> </c:set>
+ <tr>
+ <th><label for="replyPosblAt">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="replyPosblAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="" label="--선택하세요--" />
+ <form:option value="Y" label="예" />
+ <form:option value='N'>아니오</form:option>
+ </form:select>
+ <div><form:errors path="replyPosblAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 파일첨부가능여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.regist.fileAtchPosblAt"/> </c:set>
+ <tr>
+ <th><label for="fileAtchPosblAt">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="fileAtchPosblAt" title="${title} ${inputTxt}" cssClass="txt">
+ <form:option value="" label="--선택하세요--" />
+ <form:option value="Y" label="예" />
+ <form:option value='N'>아니오</form:option>
+ </form:select>
+ <div><form:errors path="fileAtchPosblAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 첨부가능파일숫자 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.regist.atchPosblFileNumber"/> </c:set>
+ <tr>
+ <th><label for="atchPosblFileNumber">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="atchPosblFileNumber" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="0" selected="selected">없음</form:option>
+ <form:option value='1'>1</form:option>
+ <form:option value='2'>2</form:option>
+ <form:option value='3'>3</form:option>
+ </form:select>
+ <div><form:errors path="atchPosblFileNumber" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 2011.09.15 : 2단계 기능 추가 방법 변경 -->
+ <c:if test="${useComment == 'true' || useSatisfaction == 'true'}">
+ <tr>
+ <th><label for="option"><spring:message code="comCopBbs.boardMasterVO.detail.option" /> </label></th>
+ <td class="left">
+ <form:select path="option" title="추가선택사항선택" >
+ <form:option value="" label="미선택" />
+ <c:if test="${useComment == 'true'}">
+ <form:option value='comment'><spring:message code="comCopBbs.boardMasterVO.detail.option2" /></form:option>
+ </c:if>
+ <c:if test="${useSatisfaction == 'true'}">
+ <form:option value='stsfdg'><spring:message code="comCopBbs.boardMasterVO.detail.option3" /></form:option>
+ </c:if>
+ </form:select>
+ </td>
+ </tr>
+ </c:if>
+ <!-- 2009.06.26 : 2단계 기능 추가 방법 변경 -->
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.boardMasterVO.regist.useAt"/> </c:set>
+ <tr>
+ <th><label for="useAt">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="" label="--선택하세요--" />
+ <form:option value="Y" label="예" />
+ <form:option value='N'>아니오</form:option>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectBBSMasterInfs.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="cmmntyId" type="hidden" value="<c:out value='${searchVO.cmmntyId}'/>">
+<input name="blogId" type="hidden" value="<c:out value='${searchVO.blogId}'/>">
+<input name="blogAt" type="hidden" value="<c:out value='${searchVO.blogAt}'/>">
+<input name="cmd" type="hidden" value="<c:out value='save'/>">
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovBBSMasterRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleRegist.jsp (revision 7)
@@ -0,0 +1,302 @@
+<%
+ /**
+ * @Class Name : EgovArticleRegist.jsp
+ * @Description : EgovArticleRegist 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * 2018.06.05 신용호 CK Editor V4.9.2 Upgrade
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comCopBbs.articleVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 게시글 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/html/egovframework/com/cmm/utl/ckeditor/ckeditor.js?t=B37D54V'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<validator:javascript formName="articleVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+
+$(function() {
+ $("#ntceBgnde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+ $("#ntceEndde").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+});
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ //filebrowserUploadUrl: '${pageContext.request.contextPath}/utl/wed/insertImage.do', // 파일 업로드를 처리 할 경로 설정.
+ var ckeditor_config = {
+ //filebrowserImageUploadUrl: '${pageContext.request.contextPath}/utl/wed/insertImageCk.do', // 파일 업로드를 처리 할 경로 설정.
+ filebrowserImageUploadUrl: '${pageContext.request.contextPath}/ckUploadImage', // 파일 업로드를 처리 할 경로 설정(CK필터).
+ };
+ CKEDITOR.replace('nttCn',ckeditor_config);
+
+ // 첫 입력란에 포커스
+ document.getElementById("articleVO").nttSj.focus();
+
+
+ }
+ /* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+ function fn_egov_regist_article(form) {
+
+ CKEDITOR.instances.nttCn.updateElement();
+
+ //input item Client-Side validate
+ if (!validateArticleVO(form)) {
+ return false;
+ } else {
+
+ var validateForm = document.getElementById("articleVO");
+
+ //비밀글은 제목 진하게 할 수 없음.
+ //비밀글은 익명게시 불가.
+ //비밀글은 공지게시 불가.
+ if (validateForm.secretAt.checked) {
+ if (validateForm.sjBoldAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretBold" />");
+ return;
+ }
+ if (validateForm.anonymousAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretAnonymous" />");
+ return;
+ }
+ if (validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.secretNotice" />");
+ return;
+ }
+ }
+
+ //익명글은 공지게시 불가.
+ if (validateForm.anonymousAt.checked) {
+ if (validateForm.noticeAt.checked) {
+ alert("<spring:message code="comCopBbs.articleVO.anonymousNotice" />");
+ return;
+ }
+ }
+
+ //게시기간
+ var ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ var ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if (ntceBgnde == '' && ntceEndde != '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ }
+ if (ntceBgnde != '' && ntceEndde == '') {
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+ if (ntceBgnde == '' && ntceEndde == '') {
+ validateForm.ntceBgnde.value = '1900-01-01';
+ validateForm.ntceEndde.value = '9999-12-31';
+ }
+
+ ntceBgnde = getRemoveFormat(validateForm.ntceBgnde.value);
+ ntceEndde = getRemoveFormat(validateForm.ntceEndde.value);
+
+ if (ntceBgnde > ntceEndde) {
+ alert("<spring:message code="comCopBbs.articleVO.ntceDeError" />");
+ return;
+ }
+
+ if (confirm("<spring:message code="common.regist.msg" />")) {
+ form.submit();
+ }
+ }
+ }
+</script>
+
+</head>
+<body onLoad="fn_egov_init();">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="articleVO" action="${pageContext.request.contextPath}/cop/bbs/insertArticle.do" method="post" onSubmit="fn_egov_regist_article(document.forms[0]); return false;" enctype="multipart/form-data">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2><!-- 게시글 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 글 제목, 제목 Bold여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.nttSj"/> </c:set>
+ <tr>
+ <th><label for="nttSj">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="nttSj" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="nttSj" cssClass="error" /></div>
+ </td>
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.sjBoldAt"/> </c:set>
+ <th><label for="sjBoldAt">${title}</label></th>
+ <td class="left">
+ <form:checkbox path="sjBoldAt" value="Y"/>
+ <div><form:errors path="sjBoldAt" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 글 내용 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.nttCn"/> </c:set>
+ <tr>
+ <th><label for="nttCn">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd" colspan="3">
+ <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" />
+
+ <div><form:errors path="nttCn" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 공지신청 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.noticeAt"/> </c:set>
+ <tr>
+ <th><label for="noticeAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="noticeAt" value="Y"/>
+ <div><form:errors path="noticeAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 비밀글 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.secretAt"/> </c:set>
+ <tr>
+ <th><label for="secretAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="secretAt" value="Y"/>
+ <div><form:errors path="secretAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 익명등록 여부 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.anonymousAt"/> </c:set>
+ <tr>
+ <th><label for="anonymousAt">${title}</label></th>
+ <td class="left" colspan="3">
+ <form:checkbox path="anonymousAt" value="Y"/>
+ <div><form:errors path="anonymousAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 유효기간 설정 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.ntceDe"/> </c:set>
+ <tr>
+ <th><label for="ntceBgnde">${title} </label></th>
+ <td class="left" colspan="3">
+ <form:input path="ntceBgnde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;" readonly="true" />
+ ~ <form:input path="ntceEndde" title="${title} ${inputTxt}" size="70" maxlength="70" style="width:70px;" readonly="true" />
+ <div><form:errors path="ntceBgnde" cssClass="error" /></div>
+ <div><form:errors path="ntceEndde" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <c:if test="${boardMasterVO.fileAtchPosblAt == 'Y'}">
+ <!-- 첨부파일 -->
+ <c:set var="title"><spring:message code="comCopBbs.articleVO.regist.atchFile"/></c:set>
+ <tr>
+ <th><label for="file_1">${title}</label> </th>
+ <td class="nopd" colspan="3">
+ <input name="file_1" id="egovComFileUploader" type="file" title="<spring:message code="comCopBbs.articleVO.regist.atchFile"/>" multiple/><!-- 첨부파일 -->
+ <div id="egovComFileList"></div>
+ </td>
+ </tr>
+ </c:if>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/cop/bbs/selectArticleList.do' />?bbsId=${boardMasterVO.bbsId}" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>"/>
+<input type="hidden" name="bbsTyCode" value="<c:out value='${boardMasterVO.bbsTyCode}'/>" />
+<input type="hidden" name="replyPosblAt" value="<c:out value='${boardMasterVO.replyPosblAt}'/>" />
+<input type="hidden" name="fileAtchPosblAt" value="<c:out value='${boardMasterVO.fileAtchPosblAt}'/>" />
+<input type="hidden" id="atchPosblFileNumber" name="atchPosblFileNumber" value="<c:out value='${boardMasterVO.atchPosblFileNumber}'/>" />
+<input type="hidden" name="atchPosblFileSize" value="<c:out value='${boardMasterVO.atchPosblFileSize}'/>" />
+<input type="hidden" name="blogId" value="<c:out value='${searchVO.blogId}'/>" />
+<input type="hidden" name="blogAt" value="<c:out value='${articleVO.blogAt}'/>"/>
+<input type="hidden" name="cmd" value="<c:out value='save'/>">
+<input type="hidden" name="bbsId" value="<c:out value='${articleVO.bbsId}'/>">
+</form:form>
+
+<!-- 첨부파일 업로드 가능화일 설정 Start..-->
+<script type="text/javascript">
+var maxFileNum = document.getElementById('atchPosblFileNumber').value;
+if(maxFileNum==null || maxFileNum==""){
+ maxFileNum = 3;
+}
+var multi_selector = new MultiSelector( document.getElementById( 'egovComFileList' ), maxFileNum );
+multi_selector.addElement( document.getElementById( 'egovComFileUploader' ) );
+</script>
+<!-- 첨부파일 업로드 가능화일 설정 End.-->
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/cmt/EgovArticleCommentList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/cmt/EgovArticleCommentList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/cmt/EgovArticleCommentList.jsp (revision 7)
@@ -0,0 +1,103 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ page import="egovframework.com.cmm.service.EgovProperties" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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" %>
+<%
+ /**
+ * @Class Name : EgovCommentList.jsp
+ * @Description : 댓글
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.06.29 한성곤 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.06.29
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+
+<c:if test="${type == 'body'}">
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<!-- 댓글 내용 -->
+ <c:set var="replyTitle"><spring:message code="comCopCmt.articleCommentVO.title"/></c:set>
+ <h3>${replyTitle} <c:out value="${resultCnt}"/></h3>
+ <div class="reply">
+ <ul>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <li>
+ <div class="top">
+ <strong><c:out value="${result.wrterNm}" /></strong>
+ <span class="bar">|</span>
+ <span class="date"><c:out value="${result.frstRegisterPnttm}" /></span>
+ </div>
+ <p class="txt">
+ <c:out value="${fn:replace(result.commentCn , crlf , '<br/>')}" escapeXml="false" />
+ </p>
+ <div class="bottom">
+ <c:if test="${result.wrterId == sessionUniqId}">
+ <span class="btn_s"><a href="javascript:fn_egov_selectCommentForupdt(${result.commentNo})" title="<spring:message code="button.update" /> <spring:message code="input.button" />"><spring:message code="button.update" /> </a></span>
+ <span class="btn_s"><a href="javascript:fn_egov_deleteCommentList(${result.commentNo})" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></a></span>
+ </c:if>
+ </div>
+ </li>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <li>
+ <p class="txt"><spring:message code="common.nocomment.msg" /></p>
+ </li>
+ </c:if>
+ </ul>
+ </div>
+
+ <!-- paging navigation -->
+ <div class="paging">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_commentList"/>
+ </ul>
+ </div>
+
+ <form:form commandName="articleCommentVO" action="${pageContext.request.contextPath}/cop/cmt/insertArticleComment.do" method="post" onSubmit="fn_egov_insert_commentList(); return false;" style="float:left; clear:both;">
+ <div class="wTableFrm" >
+ <table class="board_list top_line">
+ <caption>${replyTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 댓글 내용 -->
+ <c:set var="title"><spring:message code="comCopCmt.articleCommentVO.commentCn"/> </c:set>
+ <tr>
+ <th><label for="commentCn">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="commentCn" title="${title} ${inputTxt}" cols="300" rows="20" cssClass="re_txt"/>
+ <div><form:errors path="commentCn" cssClass="error" /></div>
+ <c:choose>
+ <c:when test="${searchVO.commentNo == '' }">
+ <span style="float:left;"><a href="javascript:fn_egov_insert_commentList(); " class="btn_s re_btn" title="<spring:message code="button.comment" /> <spring:message code="input.button" />"><spring:message code="button.comment" /><spring:message code="button.create" /></a></span>
+ </c:when>
+ <c:otherwise>
+ <span style="float:left;"><a href="javascript:fn_egov_updt_commentList(); " class="btn_s re_btn"title="<spring:message code="button.update" /> <spring:message code="input.button" />"><spring:message code="button.comment" /><spring:message code="button.update" /></a></span>
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+<input name="subPageIndex" type="hidden" value="<c:out value='${searchVO.subPageIndex}'/>">
+<input name="commentNo" type="hidden" value="<c:out value='${searchVO.commentNo}'/>">
+<input name="modified" type="hidden" value="false">
+<input name="nttId" type="hidden" value="<c:out value="${result.nttId}" />">
+<input name="bbsId" type="hidden" value="<c:out value="${boardMasterVO.bbsId}" />">
+</form:form>
+
+</c:if>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/cmt/EgovArticleCommentList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberManage.jsp (revision 7)
@@ -0,0 +1,224 @@
+<%
+ /**
+ * @Class Name : EgovEntrprsMberManage.jsp
+ * @Description : 기업회원관리(조회,삭제) JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * @ 2016.07.26 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comUssUmt.entrprsUserManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 기업회원관리 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncCheckAll() {
+ var checkField = document.listForm.checkField;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+function fnDeleteUser() {
+ var checkField = document.listForm.checkField;
+ var id = document.listForm.checkId;
+ var checkedIds = "";
+ var checkedCount = 0;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkedIds += ((checkedCount==0? "" : ",") + id[i].value);
+ checkedCount++;
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ checkedIds = id.value;
+ }
+ }
+ }
+ if(checkedIds.length > 0) {
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ document.listForm.checkedIdForDel.value=checkedIds;
+ document.listForm.action = "<c:url value='/uss/umt/EgovEntrprsMberDelete.do'/>";
+ document.listForm.submit();
+ }
+ }
+}
+function fnSelectUser(id) {
+ document.listForm.selectedId.value = id;
+ array = id.split(":");
+ if(array[0] == "") {
+ } else {
+ userTy = array[0];
+ userId = array[1];
+ }
+ document.listForm.selectedId.value = userId;
+ document.listForm.action = "<c:url value='/uss/umt/EgovEntrprsMberSelectUpdtView.do'/>";
+ document.listForm.submit();
+
+}
+function fnAddUserView() {
+ document.listForm.action = "<c:url value='/uss/umt/EgovEntrprsMberInsertView.do'/>";
+ document.listForm.submit();
+}
+function fnLinkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/uss/umt/EgovEntrprsMberManage.do'/>";
+ document.listForm.submit();
+}
+function fnSearch(){
+ document.listForm.pageIndex.value = 1;
+ document.listForm.action = "<c:url value='/uss/umt/EgovEntrprsMberManage.do'/>";
+ document.listForm.submit();
+}
+<c:if test="${!empty resultMsg}">alert("<spring:message code="${resultMsg}" />");</c:if>
+-->
+</script>
+</head>
+<body>
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="listForm" action="<c:url value='/uss/umt/EgovEntrprsMberManage.do'/>" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li style="margin:3px 0 0 0;"><div>사용자수 <strong><c:out value="${paginationInfo.totalRecordCount}"/></strong></div></li>
+ <li><!-- 상태-->
+ <select name="sbscrbSttus" id="sbscrbSttus" title="<spring:message code="comUssUmt.userManageSsearch.sbscrbSttusTitle" />">
+ <option value="0" <c:if test="${empty userSearchVO.sbscrbSttus || userSearchVO.sbscrbSttus == '0'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusAll" /></option><!-- 상태(전체) -->
+ <option value="A" <c:if test="${userSearchVO.sbscrbSttus == 'A'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusA" /></option><!-- 가입신청 -->
+ <option value="D" <c:if test="${userSearchVO.sbscrbSttus == 'D'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusD" /></option><!-- 삭제 -->
+ <option value="P" <c:if test="${userSearchVO.sbscrbSttus == 'P'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusP" /></option><!-- 승인 -->
+ </select>
+ </li>
+ <li><!-- 조건 -->
+ <select name="searchCondition" id="searchCondition" title="<spring:message code="comUssUmt.userManageSsearch.searchConditioTitle" />"><!-- -->
+ <option value="0" <c:if test="${userSearchVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.searchConditionId" /></option><!-- ID -->
+ <option value="1" <c:if test="${empty userSearchVO.searchCondition || userSearchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.searchConditionName" /></option><!-- Name -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${userSearchVO.searchKeyword}"/>' maxlength="255" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ <input type="button" class="s_btn" onClick="fnDeleteUser(); return false;" value="<spring:message code="title.delete" />" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" /><!-- 삭제 -->
+ <span class="btn_b"><a href="<c:url value='/uss/umt/EgovEntrprsMberInsertView.do'/>" onClick="fnAddUserView(); return false;" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: 3%;">
+
+ <col style="width: 10%;">
+ <col style="width: 10%;">
+ <col style="width: 15%;">
+ <col style="width: 20%;">
+ <col style="width: 13%;">
+ <col style="width: 10%;">
+ <col style="width: ;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th><!-- 전체선택 -->
+
+ <th class="board_th_link"><spring:message code="comUssUmt.entrprsUserManageList.id" /></th><!--아이디 -->
+ <th><spring:message code="comUssUmt.entrprsUserManageList.company" /></th><!-- 회사명 -->
+ <th><spring:message code="comUssUmt.entrprsUserManageList.name" /></th><!-- 신청자이름 -->
+ <th><spring:message code="comUssUmt.entrprsUserManageList.email" /></th><!-- 사용자이메일 -->
+ <th><spring:message code="comUssUmt.entrprsUserManageList.phone" /></th><!-- 전화번호 -->
+ <th><spring:message code="table.regdate" /></th><!-- 등록일 -->
+ <th><spring:message code="comUssUmt.entrprsUserManageList.sbscrbSttus" /></th><!-- 가입상태 -->
+
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="9"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${status.count}"/></td>
+ <td>
+ <input type="checkbox" name="checkField" class="check2" title="선택"/>
+ <input name="checkId" type="hidden" value="<c:out value='${result.userTy}'/>:<c:out value='${result.uniqId}'/>"/>
+ </td>
+ <td><a href="<c:url value='/uss/umt/EgovEntrprsMberSelectUpdtView.do'/>?selectedId=<c:out value="${result.uniqId}"/>" onclick="javascript:fnSelectUser('<c:out value="${result.userTy}"/>:<c:out value="${result.uniqId}"/>'); return false;"><c:out value="${result.userId}"/></a></td>
+ <td><c:out value="${result.cmpnyNm}"/></td>
+ <td><c:out value="${result.userNm}"/></td>
+ <td><c:out value="${result.emailAdres}"/></td>
+ <td><c:out value="${result.areaNo}"/>)<c:out value="${result.middleTelno}"/>-<c:out value="${result.endTelno}"/></td>
+ <td><c:out value="${fn:substring(result.sbscrbDe,0,10)}"/></td>
+ <td>
+ <c:forEach var="entrprsMberSttus_result" items="${entrprsMberSttus_result}" varStatus="status">
+ <c:if test="${result.sttus == entrprsMberSttus_result.code}"><c:out value="${entrprsMberSttus_result.codeNm}"/></c:if>
+ </c:forEach>
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fnLinkPage"/></ul>
+ </div>
+
+ <input name="selectedId" type="hidden" />
+ <input name="checkedIdForDel" type="hidden" />
+ <input name="pageIndex" type="hidden" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+</div>
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSelectUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSelectUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSelectUpdt.jsp (revision 7)
@@ -0,0 +1,280 @@
+<%
+ /**
+ * @Class Name : EgovMberSelectUpdt.jsp
+ * @Description : 일반회원상세조회, 수정 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * @ 2015.06.16 조정국 password 중복필드 정리
+ * @ 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ * @ 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.userManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.update" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="mberManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+function fnListPage(){
+ document.mberManageVO.action = "<c:url value='/uss/umt/EgovMberManage.do'/>";
+ document.mberManageVO.submit();
+}
+function fnDeleteMber(checkedIds) {
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ document.mberManageVO.checkedIdForDel.value=checkedIds;
+ document.mberManageVO.action = "<c:url value='/uss/umt/EgovMberDelete.do'/>";
+ document.mberManageVO.submit();
+ }
+}
+function fnPasswordMove(){
+ document.mberManageVO.action = "<c:url value='/uss/umt/EgovMberPasswordUpdtView.do'/>";
+ document.mberManageVO.submit();
+}
+
+function fnLockIncorrect(){
+ if(confirm("<spring:message code="comUssUmt.common.lockAtConfirm" />")){
+ document.mberManageVO.action = "<c:url value='/uss/umt/EgovMberLockIncorrect.do'/>";
+ document.mberManageVO.selectedId.value=document.mberManageVO.uniqId.value;
+ document.mberManageVO.submit();
+ }
+}
+
+function fnUpdate(form){
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(validateMberManageVO(form)){
+ document.mberManageVO.submit();
+ return true;
+ }else{
+ return false;
+ }
+ }
+}
+</script>
+</head>
+<body>
+
+
+<!-- content start -->
+<form:form commandName="mberManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovMberSelectUpdt.do" name="mberManageVO" method="post" onSubmit="fnUpdate(document.forms[0]); return false;">
+
+<!-- 상세정보 사용자 삭제시 prameter 전달용 input -->
+<input name="checkedIdForDel" type="hidden" />
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+<input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+<!-- 우편번호검색 -->
+<input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+<!-- 사용자유형정보 : password 수정화면으로 이동시 타겟 유형정보 확인용, 만약검색조건으로 유형이 포함될경우 혼란을 피하기위해 userTy명칭을 쓰지 않음-->
+<input type="hidden" name="userTyForPassword" value="<c:out value='${mberManageVO.userTy}'/>" />
+<!-- for validation -->
+<input type="hidden" name="password" id="password" value="ex~Test#$12"/>
+<input type="hidden" name="selectedId" id="selectedId" value=""/>
+
+<div class="wTableFrm">
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <!-- 수정폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.id"/></c:set>
+ <tr>
+ <th><label for="mberId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberId" id="mberId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" />
+ <form:errors path="mberId" cssClass="error" />
+ <form:hidden path="uniqId" />
+ </td>
+ </tr>
+ <!-- 일반회원이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.name"/></c:set>
+ <tr>
+ <th><label for="mberNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberNm" title="${title} ${inputTxt}" size="50" maxlength="60" />
+ <div><form:errors path="mberNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passHit"/></c:set>
+ <tr>
+ <th><label for="passwordHint">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="passwordHint" id="passwordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="passwordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passOk"/></c:set>
+ <tr>
+ <th><label for="passwordCnsr">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="passwordCnsr" id="passwordCnsr" title="${title} ${inputTxt}" size="50" maxlength="100" />
+ <div><form:errors path="passwordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 성별구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.saxTypeCode"/></c:set>
+ <tr>
+ <th><label for="sexdstnCode">${title}</label></th>
+ <td class="left">
+ <form:select path="sexdstnCode" id="sexdstnCode" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${sexdstnCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+ <!-- 전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.tel"/></c:set>
+ <tr>
+ <th><label for="areaNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="전화번호" cssClass="txaIpUmt" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="middleTelno" id="middleTelno" cssClass="txaIpUmt" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="endTelno" id="endTelno" cssClass="txaIpUmt" size="5" maxlength="5" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="middleTelno" cssClass="error" /></div>
+ <div><form:errors path="endTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.fax"/></c:set>
+ <tr>
+ <th><label for="mberFxnum">${title}</label></th>
+ <td class="left">
+ <form:input path="mberFxnum" id="mberFxnum" title="${title} ${inputTxt}" size="20" maxlength="15" />
+ <div><form:errors path="mberFxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 헨드폰번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.phone"/></c:set>
+ <tr>
+ <th><label for="moblphonNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="moblphonNo" id="moblphonNo" title="${title} ${inputTxt}" size="20" maxlength="15" />
+ <div><form:errors path="moblphonNo" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.email"/></c:set>
+ <tr>
+ <th><label for="mberEmailAdres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberEmailAdres" id="mberEmailAdres" title="${title} ${inputTxt}" size="30" maxlength="50" />
+ <div><form:errors path="mberEmailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우번번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.post"/></c:set>
+ <tr>
+ <th><label for="zip">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="zip" id="zip" title="${title} ${inputTxt}" readonly="true" size="70" maxlength="6" style="width:60px;"/>
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.addr"/></c:set>
+ <tr>
+ <th><label for="adres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="adres" id="adres" title="${title} ${inputTxt}" readonly="true" size="70" maxlength="100" />
+ <div><form:errors path="adres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th><label for="detailAdres">${title}</label> </th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 그룹아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.groupId"/></c:set>
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <tr>
+ <th><label for="groupId">${title}</label></th>
+ <td class="left">
+ <form:select path="groupId" id="groupId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${groupId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="groupId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 일반회원상태코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.status"/></c:set>
+ <tr>
+ <th><label for="mberSttus">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="mberSttus" id="mberSttus" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${mberSttus_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="mberSttus" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 로그인인증제한여부 -->
+ <c:set var="title"><spring:message code="comUssUmt.common.lockAt"/></c:set>
+ <tr>
+ <th><label for="lockAt">${title}</label></th>
+ <td class="left">
+ <c:if test="${mberManageVO.lockAt eq 'Y'}">예</c:if>
+ <c:if test="${mberManageVO.lockAt == null || mberManageVO.lockAt eq '' || mberManageVO.lockAt eq 'N'}">아니오</c:if>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.save" />" title="<spring:message code="button.save" /> <spring:message code="input.button" />" />
+ <button class="btn_s2" onClick="fnDeleteMber('<c:out value='${mberManageVO.userTy}'/>:<c:out value='${mberManageVO.uniqId}'/>'); return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></button>
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovMberManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <button class="btn_s2" onClick="fnPasswordMove(); return false;" title="<spring:message code="comUssUmt.userManageModifyBtn.passwordChange" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.userManageModifyBtn.passwordChange" /></button>
+ <button class="btn_s2" onClick="fnLockIncorrect(); return false;" title="<spring:message code="comUssUmt.common.lockAtBtn" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.common.lockAtBtn" /></button>
+ <button class="btn_s2" onClick="document.mberManageVO.reset(); return false;" title="<spring:message code="button.reset" /> <spring:message code="input.button" />"><spring:message code="button.reset" /></button>
+ </div><div style="clear:both;"></div>
+</div>
+</form:form>
+<!-- content end -->
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSelectUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSbscrb.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSbscrb.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSbscrb.jsp (revision 7)
@@ -0,0 +1,367 @@
+<%
+ /**
+ * @Class Name : EgovMberSbscrb.jsp
+ * @Description : 일반회원등록 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.userManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="mberManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/ccm/zip/EgovZipPopup.js' />" ></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ //모달 셋팅
+ fn_modal_setting();
+
+}
+/*********************************************************
+ * 모달셋팅
+ ******************************************************** */
+function fn_modal_setting(){
+ //버튼에 모달 연결
+ $("#btnMbrId").egovModal( "egovModal" );
+
+ //타이틀 설졍
+ $("#egovModal").setEgovModalTitle("<spring:message code="comUssUmt.userManageRegistModal.title" />"); //아이디 중복 확인
+ var content = "";
+ content = content + "<div class='modal-alignL' style='margin:5px 0 0 0'>"+"<spring:message code="comUssUmt.userManageRegistModal.userIsId" /> :"+"</div>"; //사용할아이디
+ content = content + "<div class='modal-alignL'>"+"<input type='text' id='checkIdModal' name='checkIdModal' value='' size='20' maxlength='20' />"+"</div>";
+ content += "<div style='clear:both;'></div>";
+ content += "<div id='divModalResult' style='margin:10px 0 0 0'><spring:message code="comUssUmt.userManageRegistModal.initStatus" /></div>"; //결과 : 중복확인을 실행하십시오.
+ //모달 body 설정
+ $("#egovModal").setEgovModalBody(content);
+
+ var footer = "";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalOk' onclick='fn_id_checkOk()'>확인</button></div>";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalSelect' onclick='fn_id_check()'>조회</button></div>";
+ footer += "<span class='btn_style1 blue' id='btnModalOk' onclick='fn_id_checkOk()'><a href='#'>확인</a></span> ";
+ footer += "<span class='btn_style1 blue' id='btnModalSelect' onclick='fn_id_check()'><a href='#'>조회</a></span> ";
+ //모달 footer 설정
+ $("#egovModal").setEgovModalfooter(footer);
+
+ //엔터이벤트처리
+ $("input[name=checkIdModal]").keydown(function (key) {
+ if(key.keyCode == 13){
+ fn_id_check();
+ }
+ });
+ footer = null;
+ content = null;
+}
+/*********************************************************
+ * 아이디 체크 AJAX
+ ******************************************************** */
+function fn_id_check(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+
+ if(returnData.usedCnt > 0 ){
+ //사용할수 없는 아이디입니다.
+ $("#divModalResult").html("<font color='red'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.useMsg" /></font>");
+ }else{
+ //사용가능한 아이디입니다.
+ $("#divModalResult").html("<font color='blue'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.notUseMsg" /></font>");
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+/*********************************************************
+ * 아이디 체크 확인
+ ******************************************************** */
+function fn_id_checkOk(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ alert("<spring:message code="comUssUmt.userManageRegistModal.noIdMsg" />"); //사용이 불가능한 아이디 입니다.
+ return;
+ }else{
+
+ $("input[name=mberId]").val(returnData.checkId);
+ $("#egovModal").setEgovModalClose();
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+
+function fnIdCheck1(){
+ var retVal;
+ var url = "<c:url value='/uss/umt/EgovIdDplctCnfirmView.do'/>";
+ var varParam = new Object();
+ varParam.checkId = document.mberManageVO.mberId.value;
+ var openParam = "dialogWidth:303px;dialogHeight:250px;scroll:no;status:no;center:yes;resizable:yes;";
+
+ alert(1);
+ return false;
+ retVal = window.showModalDialog(url, varParam, openParam);
+ if(retVal) {
+ document.mberManageVO.mberId.value = retVal;
+ }
+}
+
+function showModalDialogCallback(retVal) {
+ if(retVal) {
+ document.mberManageVO.mberId.value = retVal;
+ }
+}
+
+function fnListPage(){
+ document.mberManageVO.action = "<c:url value='/uss/umt/EgovMberManage.do'/>";
+ document.mberManageVO.submit();
+}
+
+function fnInsert(form){
+
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ if(validateMberManageVO(form)){
+ if(form.password.value != form.password2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return false;
+ }
+ form.submit();
+ return true;
+ }
+ }
+
+
+
+}
+</script>
+<style>
+.modal-content {width: 400px;}
+</style>
+</head>
+<body onload="fn_egov_init()">
+<form:form commandName="mberManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovMberSbscrb.do" name="mberManageVO" method="post" onSubmit="fnInsert(document.forms[0]); return false;">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.id"/></c:set>
+ <tr>
+ <th><label for="mberId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberId" id="mberId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" style="width:80%;" />
+ <button id="btnMbrId" class="btn_s2" onClick="return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.userManageRegistBtn.idSearch" /></button>
+ <div><form:errors path="mberId" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 일반회원이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.name"/></c:set>
+ <tr>
+ <th><label for="mberNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberNm" title="${title} ${inputTxt}" size="50" maxlength="50" />
+ <div><form:errors path="mberNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.pass"/></c:set>
+ <tr>
+ <th><label for="password">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <form:password path="password" title="${title} ${inputTxt}" size="50" maxlength="20" />
+ <div><form:errors path="password" cssClass="error" /></div>
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passConfirm"/></c:set>
+ <tr>
+ <th><label for="password2">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="password2" id="password2" title="${title} ${inputTxt}" type="password" size="50" maxlength="20" />
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passHit"/></c:set>
+ <tr>
+ <th><label for="passwordHint">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="passwordHint" id="passwordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="passwordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passOk"/></c:set>
+ <tr>
+ <th><label for="passwordCnsr">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="passwordCnsr" id="passwordCnsr" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="50" maxlength="100" />
+ <div><form:errors path="passwordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 성별구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.saxTypeCode"/></c:set>
+ <tr>
+ <th><label for="sexdstnCode">${title}</label></th>
+ <td class="left">
+ <form:select path="sexdstnCode" id="sexdstnCode" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${sexdstnCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+ <!-- 전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.tel"/></c:set>
+ <tr>
+ <th><label for="areaNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="전화번호" cssClass="txaIpUmt" size="5" maxlength="4" style="width:40px;"/>
+ - <form:input path="middleTelno" id="middleTelno" cssClass="txaIpUmt" size="5" maxlength="4" style="width:40px;"/>
+ - <form:input path="endTelno" id="endTelno" cssClass="txaIpUmt" size="5" maxlength="4" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="middleTelno" cssClass="error" /></div>
+ <div><form:errors path="endTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.fax"/></c:set>
+ <tr>
+ <th><label for="mberFxnum">${title}</label></th>
+ <td class="left">
+ <form:input path="mberFxnum" id="mberFxnum" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="mberFxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 헨드폰번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.phone"/></c:set>
+ <tr>
+ <th><label for="moblphonNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="moblphonNo" id="moblphonNo" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="moblphonNo" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.email"/></c:set>
+ <tr>
+ <th><label for="mberEmailAdres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberEmailAdres" id="mberEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" />
+ <div><form:errors path="mberEmailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우번번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.post"/></c:set>
+ <tr>
+ <th><label for="zip">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="zip" id="zip" title="${title} ${inputTxt}" type="text" size="20" value="" maxlength="6" style="width:60px;" />
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.addr"/></c:set>
+ <tr>
+ <th><label for="adres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="adres" id="adres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="adres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th><label for="detailAdres">${title}</label></th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <input type="hidden" name="mberSttus" value="DEFAULT" />
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ </div><div style="clear:both;"></div>
+
+</div><!-- div end(wTableFrm) -->
+
+ <!-- 우편번호검색 -->
+ <input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+</form:form>
+
+<!-- Egov Modal include -->
+<c:import url="/EgovModal.do" charEncoding="utf-8">
+ <c:param name="scriptYn" value="Y" />
+ <c:param name="modalName" value="egovModal" />
+</c:import>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberSbscrb.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserInsert.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserInsert.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserInsert.jsp (revision 7)
@@ -0,0 +1,495 @@
+<%
+ /**
+ * @Class Name : EgovUserInsert.jsp
+ * @Description : 사용자등록View JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * 2016.07.26 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUssUmt.deptUserManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="userManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/ccm/zip/EgovZipPopup.js' />" ></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ //모달 셋팅
+ fn_modal_setting();
+
+}
+/*********************************************************
+ * 모달셋팅
+ ******************************************************** */
+function fn_modal_setting(){
+ //버튼에 모달 연결
+ $("#btnEmplyrId").egovModal( "egovModal" );
+
+ //타이틀 설졍
+ $("#egovModal").setEgovModalTitle("<spring:message code="comUssUmt.userManageRegistModal.title" />"); //아이디 중복 확인
+ var content = "";
+ content = content + "<div class='modal-alignL' style='margin:5px 0 0 0'>"+"<spring:message code="comUssUmt.userManageRegistModal.userIsId" /> :"+"</div>"; //사용할아이디
+ content = content + "<div class='modal-alignL'>"+"<input type='text' id='checkIdModal' name='checkIdModal' value='' size='20' maxlength='20' />"+"</div>";
+ content += "<div style='clear:both;'></div>";
+ content += "<div id='divModalResult' style='margin:10px 0 0 0'><spring:message code="comUssUmt.userManageRegistModal.initStatus" /></div>"; //결과 : 중복확인을 실행하십시오.
+ //모달 body 설정
+ $("#egovModal").setEgovModalBody(content);
+
+ var footer = "";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalOk' onclick='fn_id_checkOk()'>확인</button></div>";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalSelect' onclick='fn_id_check()'>조회</button></div>";
+ footer += "<span class='btn_style1 blue' id='btnModalOk' onclick='fn_id_checkOk()'><a href='#'>확인</a></span> ";
+ footer += "<span class='btn_style1 blue' id='btnModalSelect' onclick='fn_id_check()'><a href='#'>조회</a></span> ";
+ //모달 footer 설정
+ $("#egovModal").setEgovModalfooter(footer);
+
+ //엔터이벤트처리
+ $("input[name=checkIdModal]").keydown(function (key) {
+ if(key.keyCode == 13){
+ fn_id_check();
+ }
+ });
+
+ footer = null;
+ content = null;
+}
+/*********************************************************
+ * 아이디 체크 AJAX
+ ******************************************************** */
+function fn_id_check(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ //사용할수 없는 아이디입니다.
+ $("#divModalResult").html("<font color='red'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.useMsg" /></font>");
+ }else{
+ //사용가능한 아이디입니다.
+ $("#divModalResult").html("<font color='blue'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.notUseMsg" /></font>");
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+/*********************************************************
+ * 아이디 체크 확인
+ ******************************************************** */
+function fn_id_checkOk(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ alert("<spring:message code="comUssUmt.userManageRegistModal.noIdMsg" />"); //사용이 불가능한 아이디 입니다.
+ return;
+ }else{
+
+ $("input[name=emplyrId]").val(returnData.checkId);
+ $("#egovModal").setEgovModalClose();
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+function fnIdCheck1(){
+ var retVal;
+ var url = "<c:url value='/uss/umt/EgovIdDplctCnfirmView.do'/>";
+ var varParam = new Object();
+ varParam.checkId = document.userManageVO.emplyrId.value;
+ var openParam = "dialogWidth:303px;dialogHeight:250px;scroll:no;status:no;center:yes;resizable:yes;";
+ retVal = window.showModalDialog(url, varParam, openParam);
+ if(retVal) {
+ document.userManageVO.emplyrId.value = retVal;
+ }
+}
+
+function showModalDialogCallback(retVal) {
+ if(retVal) {
+ document.userManageVO.emplyrId.value = retVal;
+ }
+}
+
+function fnListPage(){
+ document.userManageVO.action = "<c:url value='/uss/umt/EgovUserManage.do'/>";
+ document.userManageVO.submit();
+}
+
+function fnInsert(form){
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ if(validateUserManageVO(form)){
+ if(form.password.value != form.password2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return false;
+ }
+ form.submit();
+ return true;
+ }
+ }
+}
+
+function fn_egov_inqire_cert() {
+ var url = "<c:url value='/uat/uia/EgovGpkiRegist.do' />";
+ var popupwidth = '500';
+ var popupheight = '400';
+ var title = '인증서';
+
+ Top = (window.screen.height - popupheight) / 3;
+ Left = (window.screen.width - popupwidth) / 2;
+ if (Top < 0) Top = 0;
+ if (Left < 0) Left = 0;
+ Future = "fullscreen=no,toolbar=no,location=no,directories=no,status=no,menubar=no, scrollbars=no,resizable=no,left=" + Left + ",top=" + Top + ",width=" + popupwidth + ",height=" + popupheight;
+ PopUpWindow = window.open(url, title, Future)
+ PopUpWindow.focus();
+}
+
+function fn_egov_dn_info_setting(dn) {
+ var frm = document.userManageVO;
+
+ frm.subDn.value = dn;
+}
+
+/*
+if (typeof(opener.fn_egov_dn_info_setting) == 'undefined') {
+ alert('메인 화면이 변경되거나 없습니다');
+ this.close();
+} else {
+ opener.fn_egov_dn_info_setting(dn);
+ this.close();
+}
+*/
+
+</script>
+<style>
+.modal-content {width: 400px;}
+</style>
+</head>
+<body onload="fn_egov_init()">
+<form:form commandName="userManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovUserInsert.do" name="userManageVO" method="post" onSubmit="fnInsert(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.id"/></c:set>
+ <tr>
+ <th><label for="emplyrId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="emplyrId" id="emplyrId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" style="width:80%;" />
+ <button id="btnEmplyrId" class="btn_s2" onClick="return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.deptUserManageRegistBtn.idSearch" /></button>
+ <div><form:errors path="emplyrId" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 일반회원이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.name"/></c:set>
+ <tr>
+ <th><label for="emplyrNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="emplyrNm" title="${title} ${inputTxt}" size="50" maxlength="60" />
+ <div><form:errors path="emplyrNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.pass"/></c:set>
+ <tr>
+ <th><label for="password">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <form:password path="password" title="${title} ${inputTxt}" size="50" maxlength="20" />
+ <div><form:errors path="password" cssClass="error" /></div>
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.passConfirm"/></c:set>
+ <tr>
+ <th><label for="password2">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="password2" id="password2" title="${title} ${inputTxt}" type="password" size="50" maxlength="20" />
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.passHit"/></c:set>
+ <tr>
+ <th><label for="passwordHint">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="passwordHint" id="passwordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="passwordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.passOk"/></c:set>
+ <tr>
+ <th><label for="passwordCnsr">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="passwordCnsr" id="passwordCnsr" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="50" maxlength="100" />
+ <div><form:errors path="passwordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 소속기관코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.insttCode"/></c:set>
+ <tr>
+ <th><label for="insttCode">${title}</label></th>
+ <td class="left">
+ <form:select path="insttCode" id="insttCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${insttCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="insttCode" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 조직아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.orgnztId"/></c:set>
+ <tr>
+ <th><label for="orgnztId">${title}</label></th>
+ <td class="left">
+ <form:select path="orgnztId" id="orgnztId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${orgnztId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="orgnztId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 직위 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.ofcps"/></c:set>
+ <tr>
+ <th><label for="ofcpsNm">${title}</label></th>
+ <td class="left">
+ <form:input path="ofcpsNm" id="ofcpsNm" title="${title} ${inputTxt}" size="20" maxlength="50" />
+ <div><form:errors path="ofcpsNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 사번 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.emplNum"/></c:set>
+ <tr>
+ <th><label for="emplNo">${title}</label></th>
+ <td class="left">
+ <form:input path="emplNo" id="emplNo" title="${title} ${inputTxt}" size="20" maxlength="20" />
+ <div><form:errors path="emplNo" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 성별구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.saxTypeCode"/></c:set>
+ <tr>
+ <th><label for="sexdstnCode">${title}</label></th>
+ <td class="left">
+ <form:select path="sexdstnCode" id="sexdstnCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${sexdstnCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="sexdstnCode" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 생일 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.brth"/></c:set>
+ <tr>
+ <th><label for="brth">${title}</label></th>
+ <td class="left">
+ <form:input path="brth" id="brth" title="${title} ${inputTxt}" size="20" maxlength="8" />
+ <div><form:errors path="brth" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 집전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.tel"/></c:set>
+ <tr>
+ <th><label for="areaNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="${title} ${inputSelect}" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="homemiddleTelno" id="homemiddleTelno" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="homeendTelno" id="homeendTelno" size="5" maxlength="5" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="homemiddleTelno" cssClass="error" /></div>
+ <div><form:errors path="homeendTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 사무실전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.areaNo"/></c:set>
+ <tr>
+ <th><label for="offmTelno">${title}</label></th>
+ <td class="left">
+ <form:input path="offmTelno" id="offmTelno" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="offmTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.offmTelno"/></c:set>
+ <tr>
+ <th><label for="fxnum">${title}</label></th>
+ <td class="left">
+ <form:input path="fxnum" id="fxnum" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="fxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 헨드폰번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.phone"/></c:set>
+ <tr>
+ <th><label for="moblphonNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="moblphonNo" id="moblphonNo" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="moblphonNo" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.email"/></c:set>
+ <tr>
+ <th><label for="emailAdres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="emailAdres" id="mberEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" />
+ <div><form:errors path="emailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우번번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.post"/></c:set>
+ <tr>
+ <th><label for="zip">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="zip" id="zip" title="${title} ${inputTxt}" type="text" size="20" value="" maxlength="8" style="width:60px;" />
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.addr"/></c:set>
+ <tr>
+ <th><label for="homeadres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="homeadres" id="homeadres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="homeadres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th><label for="detailAdres">${title}</label></th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 그룹아이디 -->
+
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.groupId"/></c:set>
+ <tr>
+ <th><label for="groupId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="groupId" id="groupId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${groupId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="groupId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 일반회원상태코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.status"/></c:set>
+ <tr>
+ <th><label for="emplyrSttusCode">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="emplyrSttusCode" id="emplyrSttusCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${emplyrSttusCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="emplyrSttusCode" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 사용자DN -->
+ <!--
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.subDn"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="subDn" id="subDn" title="${title} ${inputTxt}" size="40" maxlength="400" style="width:80%;" />
+ <button id="btnSubdn" class="btn_s2" onClick="fn_egov_inqire_cert(); return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.deptUserManageRegistBtn.Search" /></button>
+ <div><form:errors path="subDn" cssClass="error" /></div>
+ </td>
+ </tr>
+ -->
+ <form:hidden path="subDn" />
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovUserManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ </div><div style="clear:both;"></div>
+
+</div><!-- div end(wTableFrm) -->
+
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+<input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+<!-- 우편번호검색 -->
+<input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+</form:form>
+
+<!-- Egov Modal include -->
+<c:import url="/EgovModal.do" charEncoding="utf-8">
+ <c:param name="scriptYn" value="Y" />
+ <c:param name="modalName" value="egovModal" />
+</c:import>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserInsert.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserSelectUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserSelectUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserSelectUpdt.jsp (revision 7)
@@ -0,0 +1,377 @@
+<%
+ /**
+ * @Class Name : EgovUserSelectUpdt.jsp
+ * @Description : 사용자상세조회, 수정 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * @ 2015.06.16 조정국 password 중복필드 정리
+ * @ 2016.07.26 장동한 표준프레임워크 v3.6 개선
+ * @ 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.deptUserManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.update" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="userManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/ccm/zip/EgovZipPopup.js' />" ></script>
+
+<script type="text/javaScript" language="javascript" defer="defer">
+function fnListPage(){
+ document.userManageVO.action = "<c:url value='/uss/umt/EgovUserManage.do'/>";
+ document.userManageVO.submit();
+}
+function fnDeleteUser(checkedIds) {
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ document.userManageVO.checkedIdForDel.value=checkedIds;
+ document.userManageVO.action = "<c:url value='/uss/umt/EgovUserDelete.do'/>";
+ document.userManageVO.submit();
+ }
+}
+function fnPasswordMove(){
+ document.userManageVO.action = "<c:url value='/uss/umt/EgovUserPasswordUpdtView.do'/>";
+ document.userManageVO.submit();
+}
+
+
+function fnLockIncorrect(){
+ if(confirm("<spring:message code="comUssUmt.common.lockAtConfirm" />")){
+ document.userManageVO.action = "<c:url value='/uss/umt/EgovUserLockIncorrect.do'/>";
+ document.userManageVO.selectedId.value=document.userManageVO.uniqId.value;
+ document.userManageVO.submit();
+ }
+}
+
+function fnUpdate(form){
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(validateUserManageVO(form)){
+ form.submit();
+ return true;
+ }else{
+ return false;
+ }
+ }
+}
+function fn_egov_inqire_cert() {
+ var url = "<c:url value='/uat/uia/EgovGpkiRegist.do' />";
+ var popupwidth = '500';
+ var popupheight = '400';
+ var title = '인증서';
+
+ Top = (window.screen.height - popupheight) / 3;
+ Left = (window.screen.width - popupwidth) / 2;
+ if (Top < 0) Top = 0;
+ if (Left < 0) Left = 0;
+ Future = "fullscreen=no,toolbar=no,location=no,directories=no,status=no,menubar=no, scrollbars=no,resizable=no,left=" + Left + ",top=" + Top + ",width=" + popupwidth + ",height=" + popupheight;
+ PopUpWindow = window.open(url, title, Future)
+ PopUpWindow.focus();
+}
+
+function fn_egov_dn_info_setting(dn) {
+ var frm = document.userManageVO;
+
+ frm.subDn.value = dn;
+}
+
+</script>
+</head>
+<body>
+<!-- content start -->
+<form:form commandName="userManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovUserSelectUpdt.do" name="userManageVO" method="post" onSubmit="fnUpdate(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 상세정보 사용자 삭제시 prameter 전달용 input -->
+ <input name="checkedIdForDel" type="hidden" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+ <!-- 우편번호검색 -->
+ <input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+ <!-- 사용자유형정보 : password 수정화면으로 이동시 타겟 유형정보 확인용, 만약검색조건으로 유형이 포함될경우 혼란을 피하기위해 userTy명칭을 쓰지 않음-->
+ <input type="hidden" name="userTyForPassword" value="<c:out value='${userManageVO.userTy}'/>" />
+ <!-- for validation -->
+ <input type="hidden" name="password" id="password" value="ex~Test#$12"/>
+ <input type="hidden" name="selectedId" id="selectedId" value=""/>
+
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.id"/></c:set>
+ <tr>
+ <th><label for="emplyrId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="emplyrId" id="emplyrId" cssClass="txaIpUmt" size="20" maxlength="20" readonly="true" title="${title} ${inputTxt}" />
+ <form:errors path="emplyrId" cssClass="error"/>
+ <form:hidden path="uniqId" />
+ </td>
+ </tr>
+ <!-- 일반회원이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.name"/></c:set>
+ <tr>
+ <th><label for="emplyrNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="emplyrNm" title="${title} ${inputTxt}" size="50" maxlength="60" />
+ <div><form:errors path="emplyrNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.passHit"/></c:set>
+ <tr>
+ <th><label for="passwordHint">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="passwordHint" id="passwordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="passwordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.passOk"/></c:set>
+ <tr>
+ <th><label for="passwordCnsr">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="passwordCnsr" id="passwordCnsr" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="50" maxlength="100" />
+ <div><form:errors path="passwordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 소속기관코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.insttCode"/></c:set>
+ <tr>
+ <th><label for="insttCode">${title}</label></th>
+ <td class="left">
+ <form:select path="insttCode" id="insttCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${insttCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="insttCode" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 조직아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.orgnztId"/></c:set>
+ <tr>
+ <th><label for="orgnztId">${title}</label></th>
+ <td class="left">
+ <form:select path="orgnztId" id="orgnztId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${orgnztId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="orgnztId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 직위 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.ofcps"/></c:set>
+ <tr>
+ <th><label for="">${title}</label></th>
+ <td class="left">
+ <form:input path="ofcpsNm" id="ofcpsNm" title="${title} ${inputTxt}" size="20" maxlength="50" />
+ <div><form:errors path="ofcpsNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 사번 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.emplNum"/></c:set>
+ <tr>
+ <th><label for="emplNo">${title}</label></th>
+ <td class="left">
+ <form:input path="emplNo" id="emplNo" title="${title} ${inputTxt}" size="20" maxlength="20" />
+ <div><form:errors path="emplNo" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 성별구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.saxTypeCode"/></c:set>
+ <tr>
+ <th><label for="sexdstnCode">${title}</label></th>
+ <td class="left">
+ <form:select path="sexdstnCode" id="sexdstnCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${sexdstnCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+ <!-- 생일 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.brth"/></c:set>
+ <tr>
+ <th><label for="brth">${title}</label></th>
+ <td class="left">
+ <form:input path="brth" id="brth" title="${title} ${inputTxt}" size="20" maxlength="8" />
+ <div><form:errors path="brth" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 집전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.tel"/></c:set>
+ <tr>
+ <th><label for="areaNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="${title} ${inputSelect}" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="homemiddleTelno" id="homemiddleTelno" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="homeendTelno" id="homeendTelno" size="5" maxlength="5" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="homemiddleTelno" cssClass="error" /></div>
+ <div><form:errors path="homeendTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 사무실전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.areaNo"/></c:set>
+ <tr>
+ <th><label for="offmTelno">${title}</label></th>
+ <td class="left">
+ <form:input path="offmTelno" id="offmTelno" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="offmTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.offmTelno"/></c:set>
+ <tr>
+ <th><label for="fxnum">${title}</label></th>
+ <td class="left">
+ <form:input path="fxnum" id="fxnum" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="fxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 헨드폰번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.phone"/></c:set>
+ <tr>
+ <th><label for="moblphonNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="moblphonNo" id="moblphonNo" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="moblphonNo" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.email"/></c:set>
+ <tr>
+ <th><label for="emailAdres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="emailAdres" id="mberEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" />
+ <div><form:errors path="emailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우편번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.post"/></c:set>
+ <tr>
+ <th><label for="zip">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="zip" id="zip" title="${title} ${inputTxt}" type="text" size="20" value="<c:out value='${userManageVO.zip}'/>" maxlength="8" style="width:60px;" />
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.addr"/></c:set>
+ <tr>
+ <th><label for="">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="homeadres" id="homeadres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="homeadres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th><label for="detailAdres">${title}</label></th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 그룹아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.groupId"/></c:set>
+ <tr>
+ <th><label for="groupId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="groupId" id="groupId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${groupId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="groupId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 일반회원상태코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.status"/></c:set>
+ <tr>
+ <th><label for="emplyrSttusCode">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="emplyrSttusCode" id="emplyrSttusCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${emplyrSttusCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="emplyrSttusCode" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 로그인인증제한여부 -->
+ <c:set var="title"><spring:message code="comUssUmt.common.lockAt"/></c:set>
+ <tr>
+ <th><label for="lockAt">${title}</label></th>
+ <td class="left">
+ <c:if test="${userManageVO.lockAt eq 'Y'}">예</c:if>
+ <c:if test="${userManageVO.lockAt == null || userManageVO.lockAt eq '' || userManageVO.lockAt eq 'N'}">아니오</c:if>
+ </td>
+ </tr>
+
+ <!-- 사용자DN -->
+ <!--
+ <c:set var="title"><spring:message code="comUssUmt.deptUserManageRegist.subDn"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="subDn" id="subDn" title="${title} ${inputTxt}" size="40" maxlength="400" style="width:80%;" />
+ <button id="btnSubdn" class="btn_s2" onClick="fn_egov_inqire_cert(); return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.deptUserManageRegistBtn.Search" /></button>
+ <div><form:errors path="subDn" cssClass="error" /></div>
+ </td>
+ </tr>
+ -->
+ <form:hidden path="subDn" />
+ </tbody>
+ </table>
+
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.save" />" title="<spring:message code="button.save" /> <spring:message code="input.button" />" />
+ <button class="btn_s2" onClick="fnDeleteUser('<c:out value='${mberManageVO.userTy}'/>:<c:out value='${mberManageVO.uniqId}'/>'); return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></button>
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovUserManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <button class="btn_s2" onClick="fnPasswordMove(); return false;" title="<spring:message code="comUssUmt.userManageModifyBtn.passwordChange" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.userManageModifyBtn.passwordChange" /></button>
+ <button class="btn_s2" onClick="fnLockIncorrect(); return false;" title="<spring:message code="comUssUmt.common.lockAtBtn" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.common.lockAtBtn" /></button>
+ <button class="btn_s2" onClick="document.userManageVO.reset(); return false;" title="<spring:message code="button.reset" /> <spring:message code="input.button" />"><spring:message code="button.reset" /></button>
+ </div><div style="clear:both;"></div>
+
+</div>
+</form:form>
+<!-- content end -->
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserSelectUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageInsert.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageInsert.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageInsert.jsp (revision 7)
@@ -0,0 +1,129 @@
+<%
+/**
+ * @Class Name : EgovRoleUpdate.java
+ * @Description : EgovRoleUpdate jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.deptManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 부서관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="deptManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+function fncSelectDeptManageList() {
+ var varFrom = document.getElementById("deptManage");
+ varFrom.action = "<c:url value='/uss/umt/dpt/selectDeptManageList.do'/>";
+ varFrom.submit();
+}
+
+function fncDeptManageInsert() {
+ var varFrom = document.getElementById("deptManage");
+ varFrom.action = "<c:url value='/uss/umt/dpt/addDeptManage.do'/>";
+
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if (!validateDeptManage(varFrom)) {
+ return;
+ } else {
+ varFrom.submit();
+ }
+ }
+}
+</script>
+</head>
+
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="deptManage" method="post" action="${pageContext.request.contextPath}/uss/umt/dpt/addDeptManage.do' />" onSubmit="fncDeptManageInsert(); return false;" enctype="multipart/form-data">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 부서ID -->
+ <!--
+ <c:set var="title"><spring:message code="comUssUmt.deptManageRegist.deptId" /></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="orgnztId" title="${title} ${inputTxt}" size="40" maxlength="50" />
+ <div><form:errors path="orgnztId" cssClass="error" /></div>
+ </td>
+ </tr>
+ -->
+ <!-- 부서명 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptManageRegist.deptName" /></c:set>
+ <tr>
+ <th><label for="orgnztNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="orgnztNm" title="${title} ${inputTxt}" size="40" maxlength="200" />
+ <div><form:errors path="orgnztNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 설명 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptManageRegist.deptDc" /></c:set>
+ <tr>
+ <th><label for="orgnztDc">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:textarea path="orgnztDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="orgnztDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/uss/umt/dpt/selectDeptManageList.do'/>" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<!-- 검색조건 유지 -->
+<input type="hidden" name="orgnztId" value="" >
+<input type="hidden" name="searchCondition" value="<c:out value='${deptManageVO.searchCondition}'/>" >
+<input type="hidden" name="searchKeyword" value="<c:out value='${deptManageVO.searchKeyword}'/>" >
+<input type="hidden" name="pageIndex" value="<c:out value='${deptManageVO.pageIndex}'/>" >
+</form:form>
+
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageInsert.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberInsert.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberInsert.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberInsert.jsp (revision 7)
@@ -0,0 +1,442 @@
+<%
+ /**
+ * @Class Name : EgovEntrprsMberInsert.jsp
+ * @Description : 기업회원등록 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * @ 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ * @ 2020.07.20 윤주호 표준프레임워크 v3.10 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.12
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.entrprsUserManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 기업회원관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="entrprsManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/ccm/zip/EgovZipPopup.js' />" ></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ //모달 셋팅
+ fn_modal_setting();
+
+}
+/*********************************************************
+ * 모달셋팅
+ ******************************************************** */
+function fn_modal_setting(){
+ //버튼에 모달 연결
+ $("#btnMbrId").egovModal( "egovModal" );
+
+ //타이틀 설졍
+ $("#egovModal").setEgovModalTitle("<spring:message code="comUssUmt.userManageRegistModal.title" />"); //아이디 중복 확인
+ var content = "";
+ content = content + "<div class='modal-alignL' style='margin:5px 0 0 0'>"+"<spring:message code="comUssUmt.userManageRegistModal.userIsId" /> :"+"</div>"; //사용할아이디
+ content = content + "<div class='modal-alignL'>"+"<input type='text' id='checkIdModal' name='checkIdModal' value='' size='20' maxlength='20' />"+"</div>";
+ content += "<div style='clear:both;'></div>";
+ content += "<div id='divModalResult' style='margin:10px 0 0 0'><spring:message code="comUssUmt.userManageRegistModal.initStatus" /></div>"; //결과 : 중복확인을 실행하십시오.
+ //모달 body 설정
+ $("#egovModal").setEgovModalBody(content);
+
+ var footer = "";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalOk' onclick='fn_id_checkOk()'>확인</button></div>";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalSelect' onclick='fn_id_check()'>조회</button></div>";
+
+ footer += "<span class='btn_style1 blue' id='btnModalOk' onclick='fn_id_checkOk()'><a href='#'><spring:message code="button.confirm" /></a></span> ";//확인
+ footer += "<span class='btn_style1 blue' id='btnModalSelect' onclick='fn_id_check()'><a href='#'><spring:message code="button.inquire" /></a></span> ";//조회
+
+ //모달 footer 설정
+ $("#egovModal").setEgovModalfooter(footer);
+
+ //엔터이벤트처리
+ $("input[name=checkIdModal]").keydown(function (key) {
+ if(key.keyCode == 13){
+ fn_id_check();
+ }
+ });
+
+ footer = null;
+ content = null;
+}
+/*********************************************************
+ * 아이디 체크 AJAX
+ ******************************************************** */
+function fn_id_check(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ //사용할수 없는 아이디입니다.
+ $("#divModalResult").html("<font color='red'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.useMsg" /></font>");
+ }else{
+ //사용가능한 아이디입니다.
+ $("#divModalResult").html("<font color='blue'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.notUseMsg" /></font>");
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+/*********************************************************
+ * 아이디 체크 확인
+ ******************************************************** */
+function fn_id_checkOk(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ alert("<spring:message code="comUssUmt.userManageRegistModal.noIdMsg" />"); //사용이 불가능한 아이디 입니다.
+ return;
+ }else{
+
+ $("input[name=entrprsmberId]").val(returnData.checkId);
+ $("#egovModal").setEgovModalClose();
+
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+
+function fnIdCheck1(){
+ var retVal;
+ var url = "<c:url value='/uss/umt/EgovIdDplctCnfirmView.do'/>";
+ var varParam = new Object();
+ varParam.checkId = document.entrprsManageVO.entrprsmberId.value;
+ var openParam = "dialogWidth:303px;dialogHeight:250px;scroll:no;status:no;center:yes;resizable:yes;";
+ retVal = window.showModalDialog(url, varParam, openParam);
+ if(retVal) {
+ document.entrprsManageVO.entrprsmberId.value = retVal;
+ }
+}
+
+function showModalDialogCallback(retVal) {
+ if(retVal) {
+ document.entrprsManageVO.entrprsmberId.value = retVal;
+ }
+}
+
+
+function fnListPage(){
+ document.entrprsManageVO.action = "<c:url value='/uss/umt/EgovEntrprsMberManage.do'/>";
+ document.entrprsManageVO.submit();
+}
+
+function fnInsert(form){
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ if(validateEntrprsManageVO(form)){
+ if(form.entrprsMberPassword.value != form.entrprsMberPassword2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return false;
+ }
+ form.submit();
+ return true;
+ }
+ }
+}
+</script>
+<style>
+.modal-content {width: 400px;}
+</style>
+</head>
+<body onload="fn_egov_init()">
+
+<!-- content start -->
+<form:form commandName="entrprsManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovEntrprsMberInsert.do" name="entrprsManageVO" method="post" onSubmit="fnInsert(document.forms[0]); return false;">
+
+<!-- 상세정보 사용자 삭제시 prameter 전달용 input -->
+<input name="checkedIdForDel" type="hidden" />
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+<input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+
+<!-- 우편번호검색 -->
+<input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <!-- 기업회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.id"/></c:set>
+ <tr>
+ <th><label for="entrprsmberId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="entrprsmberId" id="entrprsmberId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" style="width:80%;" />
+ <button id="btnMbrId" class="btn_s2" onClick="return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.entrprsUserManageRegistBtn.idSearch" /></button>
+ <div><form:errors path="entrprsmberId" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 회사명 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.name"/></c:set>
+ <tr>
+ <th><label for="cmpnyNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="cmpnyNm" title="${title} ${inputTxt}" size="50" maxlength="60" />
+ <div><form:errors path="cmpnyNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.pass"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPassword">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <form:password path="entrprsMberPassword" title="${title} ${inputTxt}" size="50" maxlength="20" />
+ <div><form:errors path="entrprsMberPassword" cssClass="error" /></div>
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passConfirm"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPassword2">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="entrprsMberPassword2" id="entrprsMberPassword2" title="${title} ${inputTxt}" type="password" size="50" maxlength="20" />
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passHit"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPasswordHint">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="entrprsMberPasswordHint" id="entrprsMberPasswordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="entrprsMberPasswordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passOk"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPasswordCnsr">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="entrprsMberPasswordCnsr" id="entrprsMberPasswordCnsr" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="50" maxlength="100" />
+ <div><form:errors path="entrprsMberPasswordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 업종코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.indutyCode"/></c:set>
+ <tr>
+ <th><label for="indutyCode">${title}</label></th>
+ <td class="left">
+ <form:select path="indutyCode" id="indutyCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${indutyCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+ <!-- 기업구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.entrprsSeCode"/></c:set>
+ <tr>
+ <th><label for="entrprsSeCode">${title}</label></th>
+ <td class="left">
+ <form:select path="entrprsSeCode" id="entrprsSeCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${entrprsSeCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+
+ <!-- 대표이사이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.cxfc"/></c:set>
+ <tr>
+ <th><label for="cxfc">${title}</label></th>
+ <td class="left">
+ <form:input path="cxfc" id="cxfc" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="cxfc" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 사업자등록번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.bizrno"/></c:set>
+ <tr>
+ <th><label for="bizrno">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="bizrno" id="bizrno" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="10" />
+ <div><form:errors path="bizrno" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 법인등록번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.jurirno"/></c:set>
+ <tr>
+ <th><label for="jurirno">${title}</label> </th>
+ <td class="left">
+ <form:input path="jurirno" id="jurirno" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="jurirno" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 회사전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.tel"/></c:set>
+ <tr>
+ <th><label for="areaNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="전화번호" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="entrprsMiddleTelno" id="entrprsMiddleTelno" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="entrprsEndTelno" id="entrprsEndTelno" size="5" maxlength="5" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="entrprsMiddleTelno" cssClass="error" /></div>
+ <div><form:errors path="entrprsEndTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.fax"/></c:set>
+ <tr>
+ <th><label for="">${title}</label></th>
+ <td class="left">
+ <form:input path="fxnum" id="fxnum" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="fxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우번번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.post"/></c:set>
+ <tr>
+ <th><label for="zip">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="zip" title="${title} ${inputTxt}" type="text" size="20" value="" maxlength="8" style="width:60px;" />
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.addr"/></c:set>
+ <tr>
+ <th><label for="adres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="adres" id="adres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="adres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th><label for="applcntNm">${title}</label></th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 신청자이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageList.regName"/></c:set>
+ <tr>
+ <th><label for="">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="applcntNm" id="applcntNm" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="20" />
+ <div><form:errors path="applcntNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 신청자이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageList.regMail"/></c:set>
+ <tr>
+ <th><label for="applcntEmailAdres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="applcntEmailAdres" id="applcntEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" />
+ <div><form:errors path="applcntEmailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 그룹아이디 -->
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.groupId"/></c:set>
+ <tr>
+ <th><label for="groupId">${title}</label></th>
+ <td class="left">
+ <form:select path="groupId" id="groupId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${groupId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="groupId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 기업회원상태코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.status"/></c:set>
+ <tr>
+ <th><label for="entrprsMberSttus">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="entrprsMberSttus" id="entrprsMberSttus" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${entrprsMberSttus_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="entrprsMberSttus" cssClass="error"/></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovEntrprsMberManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" /><!-- 등록 -->
+ </div><div style="clear:both;"></div>
+
+
+</div>
+</form:form>
+
+<!-- Egov Modal include -->
+<c:import url="/EgovModal.do" charEncoding="utf-8">
+ <c:param name="scriptYn" value="Y" />
+ <c:param name="modalName" value="egovModal" />
+</c:import>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberInsert.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsPasswordUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsPasswordUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsPasswordUpdt.jsp (revision 7)
@@ -0,0 +1,135 @@
+<%
+ /**
+ * @Class Name : EgovEntrprsPasswordUpdt.jsp
+ * @Description : 기업회원 암호수정 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.02 조재영 최초 생성
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.userManagePasswordUpdt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 기업회원 비밀번호변경 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="passwordChgVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+
+function fnListPage(){
+ document.passwordChgVO.action = "<c:url value='/uss/umt/EgovEntrprsMberManage.do'/>";
+ document.passwordChgVO.submit();
+}
+function fnUpdate(form){
+ if(validatePasswordChgVO(form)){
+ if(form.newPassword.value != form.newPassword2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return;
+ }
+ form.submit();
+ }
+}
+<c:if test="${!empty resultMsg}">alert("<spring:message code="${resultMsg}" />");</c:if>
+</script>
+</head>
+<body>
+ <!-- content start -->
+ <form name="passwordChgVO" method="post" action="<c:url value="${'/uss/umt/EgovEntrprsPasswordUpdt.do'}"/>" onsubmit="fnUpdate(document.forms[0]); return false;">
+ <!-- onsubmit="javascript:return FormValidation(document.passwordChgVO);" > -->
+ <!-- 상세정보 사용자 삭제시 prameter 전달용 input -->
+ <input name="checkedIdForDel" type="hidden" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+ <!-- 우편번호검색 -->
+ <input type="hidden" name="url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+
+ <div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUssUmt.entrprsUserManage.title" /> ${pageTitle}</h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.id" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <input name="entrprsmberId" id="entrprsmberId" type="text" size="20" value="<c:out value='${entrprsManageVO.entrprsmberId}'/>" maxlength="20" readonly>
+ <input name="uniqId" id="uniqId" type="hidden" size="20" value="<c:out value='${entrprsManageVO.uniqId}'/>">
+ <input name="userTy" id="userTy" type="hidden" size="20" value="<c:out value='${entrprsManageVO.userTy}'/>">
+ </td>
+ </tr>
+
+ <!-- 기존 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.oldPass" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="oldPassword" id="oldPassword" type="password" size="20" value="" maxlength="100" >
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.pass" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <input name="newPassword" id="newPassword" type="password" size="20" value="" maxlength="100" >
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.passConfirm" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="newPassword2" id="newPassword2" type="password" size="20" value="" maxlength="100" >
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" />
+
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovEntrprsMberManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <button class="btn_s2" onClick="document.passwordChgVO.reset();return false;" title="<spring:message code="button.reset" /> <spring:message code="input.button" />"><spring:message code="button.reset" /></button>
+ </div><div style="clear:both;"></div>
+
+</div>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsPasswordUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageList.jsp (revision 7)
@@ -0,0 +1,142 @@
+<%
+/**
+ * @Class Name : EgovDeptManageList.java
+ * @Description : EgovDeptManageList jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * @ 2015.06.16 조정국 0건 조회 표시 메시지 버그수정
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.21
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comUssUmt.deptManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title><!-- 부서관리 목록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+
+<script type="text/javaScript" language="javascript" defer="defer">
+function fncSelectDeptManageList(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/uss/umt/dpt/selectDeptManageList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectDeptManage(bannerId) {
+ document.listForm.bannerId.value = bannerId;
+ document.listForm.action = "<c:url value='/uss/umt/dpt/getDeptManage.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddDeptManageInsert() {
+ if(document.listForm.pageIndex.value == "") {
+ document.listForm.pageIndex.value = 1;
+ }
+ document.listForm.action = "<c:url value='/uss/umt/dpt/addViewDeptManage.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/uss/umt/dpt/selectDeptManageList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectDeptManageList('1');
+ }
+}
+</script>
+
+</head>
+
+<body>
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="listForm" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><div style="line-height:4px;"> </div><div><spring:message code="comUssUmt.deptManageSearchCondition.searchKeywordText" /> : </div></li><!-- 부서명 -->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${deptManageVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/uss/umt/dpt/addViewDeptManage.do'/>" onClick="fncAddDeptManageInsert(); return false;" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 25%;">
+ <col style="width: 30%;">
+ <col style="width: ;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th class="board_th_link"><spring:message code="comUssUmt.deptManageList.deptId" /></th><!-- 부서 ID -->
+ <th class="board_th_link"><spring:message code="comUssUmt.deptManageList.deptName" /></th><!-- 부서 명 -->
+ <th><spring:message code="comUssUmt.deptManageList.deptDc" /></th><!--설명 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(deptManageList) == 0}">
+ <tr>
+ <td colspan="3"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="deptManage" items="${deptManageList}" varStatus="status">
+ <tr>
+ <td><a href="<c:url value='/uss/umt/dpt/getDeptManage.do'/>?pageIndex=${deptManageVO.pageIndex}&searchKeyword=${deptManageVO.searchKeyword}&orgnztId=${deptManage.orgnztId}"><c:out value="${deptManage.orgnztId}"/></a></td>
+ <td class="left"><a href="<c:url value='/uss/umt/dpt/getDeptManage.do'/>?pageIndex=${deptManageVO.pageIndex}&searchKeyword=${deptManageVO.searchKeyword}&orgnztId=${deptManage.orgnztId}"><c:out value="${deptManage.orgnztNm}"/></a></td>
+ <td class="left"><c:out value="${deptManage.orgnztDc}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <c:if test="${!empty deptManageVO.pageIndex }">
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/></ul>
+ </div>
+ </c:if>
+
+</div><!-- end div board -->
+
+<input name="pageIndex" type="hidden" value="<c:out value='${deptManageVO.pageIndex}'/>">
+<input type="hidden" name="searchCondition" value="1">
+</form>
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberPasswordUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberPasswordUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberPasswordUpdt.jsp (revision 7)
@@ -0,0 +1,142 @@
+<%
+ /**
+ * @Class Name : EgovMberPasswordUpdt.jsp
+ * @Description : 일반회원암호수정 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.02 조재영 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.userManagePasswordUpdt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="passwordChgVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+
+function fnListPage(){
+ document.passwordChgVO.action = "<c:url value='/uss/umt/EgovMberManage.do'/>";
+ document.passwordChgVO.submit();
+}
+function fnUpdate(form){
+ if(validatePasswordChgVO(form)){
+ if(form.newPassword.value != form.newPassword2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return false;
+ }
+ document.passwordChgVO.submit();
+ return true;
+ }else{
+ return false;
+ }
+}
+<c:if test="${!empty resultMsg}">alert("<spring:message code="${resultMsg}" />");</c:if>
+</script>
+</head>
+<body>
+
+<form name="passwordChgVO" method="post" action="<c:url value="/uss/umt/EgovMberPasswordUpdt.do"/>" onsubmit="fnUpdate(document.forms[0]); return false;">
+<!-- 상세정보 사용자 삭제시 prameter 전달용 input -->
+<input name="checkedIdForDel" type="hidden" />
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+<input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+<!-- 우편번호검색 -->
+<input type="hidden" name="url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUssUmt.userManage.title" /> ${pageTitle}</h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.id" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <input name="mberId" id="mberId" type="text" size="20" value="<c:out value='${mberManageVO.mberId}'/>" maxlength="20" readonly >
+ <input name="uniqId" id="uniqId" type="hidden" size="20" value="<c:out value='${mberManageVO.uniqId}'/>" >
+ <input name="userTy" id="userTy" type="hidden" size="20" value="<c:out value='${mberManageVO.userTy}'/>" >
+ </td>
+ </tr>
+
+ <!-- 기존 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.oldPass" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="oldPassword" id="oldPassword" type="password" size="20" value="" maxlength="100" >
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.pass" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <input name="newPassword" id="newPassword" type="password" size="20" value="" maxlength="100" >
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.passConfirm" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="newPassword2" id="newPassword2" type="password" size="20" value="" maxlength="100" >
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" />
+
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovMberManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <button class="btn_s2" onClick="document.passwordChgVO.reset();;return false;" title="<spring:message code="button.reset" /> <spring:message code="input.button" />"><spring:message code="button.reset" /></button>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+</form>
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberPasswordUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserManage.jsp (revision 7)
@@ -0,0 +1,232 @@
+<%
+
+ /**
+ * @Class Name : EgovUserManage.jsp
+ * @Description : 사용자관리(조회,삭제) JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * 2011.09.07 서준식 네비게이션명 변경 (사용자 관리 -> 업무사용자관리)
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comUssUmt.deptUserManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncCheckAll() {
+ var checkField = document.listForm.checkField;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fnDeleteUser() {
+ var checkField = document.listForm.checkField;
+ var id = document.listForm.checkId;
+ var checkedIds = "";
+ var checkedCount = 0;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkedIds += ((checkedCount==0? "" : ",") + id[i].value);
+ checkedCount++;
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ checkedIds = id.value;
+ }
+ }
+ }
+ if(checkedIds.length > 0) {
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ document.listForm.checkedIdForDel.value=checkedIds;
+ document.listForm.action = "<c:url value='/uss/umt/EgovUserDelete.do'/>";
+ document.listForm.submit();
+ }
+ }
+}
+function fnSelectUser(id) {
+ document.listForm.selectedId.value = id;
+ array = id.split(":");
+ if(array[0] == "") {
+ } else {
+ userTy = array[0];
+ userId = array[1];
+ }
+ document.listForm.selectedId.value = userId;
+ document.listForm.action = "<c:url value='/uss/umt/EgovUserSelectUpdtView.do'/>";
+ document.listForm.submit();
+
+}
+function fnAddUserView() {
+ document.listForm.action = "<c:url value='/uss/umt/EgovUserInsertView.do'/>";
+ document.listForm.submit();
+}
+function fnLinkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/uss/umt/EgovUserManage.do'/>";
+ document.listForm.submit();
+}
+function fnSearch(){
+ document.listForm.pageIndex.value = 1;
+ document.listForm.action = "<c:url value='/uss/umt/EgovUserManage.do'/>";
+ document.listForm.submit();
+}
+function fnViewCheck(){
+ if(insert_msg.style.visibility == 'hidden'){
+ insert_msg.style.visibility = 'visible';
+ }else{
+ insert_msg.style.visibility = 'hidden';
+ }
+}
+<c:if test="${!empty resultMsg}">alert("<spring:message code="${resultMsg}" />");</c:if>
+-->
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="listForm" action="<c:url value='/uss/umt/EgovUserManage.do'/>" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li style="margin:3px 0 0 0;"><div>사용자수 <strong><c:out value="${paginationInfo.totalRecordCount}"/></strong></div></li>
+ <li><!-- 상태-->
+ <select name="sbscrbSttus" id="sbscrbSttus" title="<spring:message code="comUssUmt.userManageSsearch.sbscrbSttusTitle" />">
+ <option value="0" <c:if test="${empty mberVO.sbscrbSttus || mberVO.sbscrbSttus == '0'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusAll" /></option><!-- 상태(전체) -->
+ <option value="A" <c:if test="${mberVO.sbscrbSttus == 'A'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusA" /></option><!-- 가입신청 -->
+ <option value="D" <c:if test="${mberVO.sbscrbSttus == 'D'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusD" /></option><!-- 삭제 -->
+ <option value="P" <c:if test="${mberVO.sbscrbSttus == 'P'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusP" /></option><!-- 승인 -->
+ </select>
+ </li>
+ <li><!-- 조건 -->
+ <select name="searchCondition" id="searchCondition" title="<spring:message code="comUssUmt.userManageSsearch.searchConditioTitle" />"><!-- -->
+ <option value="0" <c:if test="${mberVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.searchConditionId" /></option><!-- ID -->
+ <option value="1" <c:if test="${empty mberVO.searchCondition || mberVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.searchConditionName" /></option><!-- Name -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${userSearchVO.searchKeyword}"/>' maxlength="255" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ <input type="button" class="s_btn" onClick="fnDeleteUser(); return false;" value="<spring:message code="title.delete" />" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" />
+ <span class="btn_b"><a href="<c:url value='/uss/umt/EgovUserInsertView.do'/>" onClick="fnAddUserView(); return false;" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </li>
+ </ul>
+ </div>
+
+
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: 3%;">
+
+ <col style="width: 15%;">
+ <col style="width: 15%;">
+ <col style="width: 20%;">
+ <col style="width: 13%;">
+ <col style="width: 10%;">
+ <col style="width: ;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th><!-- 전체선택 -->
+
+ <th class="board_th_link"><spring:message code="comUssUmt.userManageList.id" /></th><!--아이디 -->
+ <th><spring:message code="comUssUmt.userManageList.name" /></th><!-- 사용자이름 -->
+ <th><spring:message code="comUssUmt.userManageList.email" /></th><!-- 사용자이메일 -->
+ <th><spring:message code="comUssUmt.userManageList.phone" /></th><!-- 전화번호 -->
+ <th><spring:message code="table.regdate" /></th><!-- 등록일 -->
+ <th><spring:message code="comUssUmt.userManageList.sbscrbSttus" /></th><!-- 가입상태 -->
+
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${status.count}"/></td>
+ <td>
+ <input type="checkbox" name="checkField" class="check2" title="선택"/>
+ <input name="checkId" type="hidden" value="<c:out value='${result.userTy}'/>:<c:out value='${result.uniqId}'/>"/>
+ </td>
+ <td><a href="<c:url value='/uss/umt/EgovMberSelectUpdtView.do'/>?selectedId=<c:out value="${result.uniqId}"/>" onclick="javascript:fnSelectUser('<c:out value="${result.userTy}"/>:<c:out value="${result.uniqId}"/>'); return false;"><c:out value="${result.userId}"/></a></td>
+ <td><c:out value="${result.userNm}"/></td>
+ <td><c:out value="${result.emailAdres}"/></td>
+ <td><c:out value="${result.areaNo}"/>)<c:out value="${result.middleTelno}"/>-<c:out value="${result.endTelno}"/></td>
+ <td><c:out value="${fn:substring(result.sbscrbDe,0,10)}"/></td>
+ <td>
+ <c:forEach var="emplyrSttusCode_result" items="${emplyrSttusCode_result}" varStatus="status">
+ <c:if test="${result.sttus == emplyrSttusCode_result.code}"><c:out value="${emplyrSttusCode_result.codeNm}"/></c:if>
+ </c:forEach>
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fnLinkPage"/></ul>
+ </div>
+
+ <input name="selectedId" type="hidden" />
+ <input name="checkedIdForDel" type="hidden" />
+ <input name="pageIndex" type="hidden" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+</div>
+</form>
+
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSelectUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSelectUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSelectUpdt.jsp (revision 7)
@@ -0,0 +1,329 @@
+<%
+ /**
+ * @Class Name : EgovEntrprsMberSelectUpdt.jsp
+ * @Description : 사용자상세조회, 수정 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * @ 2015.06.16 조정국 password 중복필드 정리
+ * @ 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ * @ 2017.07.21 장동한 로그인인증제한 작업
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.12
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.entrprsUserManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.update" /></title><!-- 기업회원관리 수정 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="entrprsManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/ccm/zip/EgovZipPopup.js' />" ></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+function fnListPage(){
+ document.entrprsManageVO.action = "<c:url value='/uss/umt/EgovEntrprsMberManage.do'/>";
+ document.entrprsManageVO.submit();
+}
+function fnDeleteEntrprs(checkedIds) {
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ document.entrprsManageVO.checkedIdForDel.value=checkedIds;
+ document.entrprsManageVO.action = "<c:url value='/uss/umt/EgovEntrprsMberDelete.do'/>";
+ document.entrprsManageVO.submit();
+ }
+}
+function fnPasswordMove(){
+ document.entrprsManageVO.action = "<c:url value='/uss/umt/EgovEntrprsPasswordUpdtView.do'/>";
+ document.entrprsManageVO.submit();
+}
+
+function fnLockIncorrect(){
+ if(confirm("<spring:message code="comUssUmt.common.lockAtConfirm" />")){
+ document.entrprsManageVO.action = "<c:url value='/uss/umt/EgovEntrprsMberLockIncorrect.do'/>";
+ document.entrprsManageVO.submit();
+ }
+}
+
+function fnUpdate(form){
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(validateEntrprsManageVO(form)){
+ form.submit();
+ return true;
+ }else{
+ return false;
+ }
+ }
+}
+</script>
+</head>
+<body>
+<!-- content start -->
+<form:form commandName="entrprsManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovEntrprsMberSelectUpdt.do" name="entrprsManageVO" method="post" onSubmit="fnUpdate(document.forms[0]); return false;">
+<!-- <div class="wTableFrm"> -->
+
+ <!-- 상세정보 사용자 삭제시 prameter 전달용 input -->
+ <input name="checkedIdForDel" type="hidden" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+ <!-- 우편번호검색 -->
+ <input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+ <!-- 사용자유형정보 : password 수정화면으로 이동시 타겟 유형정보 확인용, 만약검색조건으로 유형이 포함될경우 혼란을 피하기위해 userTy명칭을 쓰지 않음-->
+ <input type="hidden" name="userTyForPassword" value="<c:out value='${entrprsManageVO.userTy}'/>" />
+ <!-- for validation -->
+ <input type="hidden" name="entrprsMberPassword" value="ex~Test#$12">
+ <input type="hidden" name="selectedId" value="<c:out value='${entrprsManageVO.entrprsmberId}'/>"/>
+
+<!-- 우편번호검색 -->
+<input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <!-- 기업회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.id"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="entrprsmberId" id="entrprsmberId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" />
+ <div><form:errors path="entrprsmberId" cssClass="error" /></div>
+ <form:hidden path="uniqId" />
+ </td>
+ </tr>
+ <!-- 회사명 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.name"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="cmpnyNm" title="${title} ${inputTxt}" size="50" maxlength="60" />
+ <div><form:errors path="cmpnyNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passHit"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="entrprsMberPasswordHint" id="entrprsMberPasswordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="entrprsMberPasswordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passOk"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="entrprsMberPasswordCnsr" id="entrprsMberPasswordCnsr" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="50" maxlength="100" />
+ <div><form:errors path="entrprsMberPasswordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 업종코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.indutyCode"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:select path="indutyCode" id="indutyCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${indutyCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+ <!-- 기업구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.entrprsSeCode"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:select path="entrprsSeCode" id="entrprsSeCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${entrprsSeCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+
+ <!-- 대표이사이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.cxfc"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:input path="cxfc" id="cxfc" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="cxfc" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 사업자등록번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.bizrno"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="bizrno" id="bizrno" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="bizrno" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 법인등록번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.jurirno"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:select path="jurirno" id="jurirno" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${entrprsSeCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="jurirno" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 회사전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.tel"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="전화번호" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="entrprsMiddleTelno" id="entrprsMiddleTelno" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="entrprsEndTelno" id="entrprsEndTelno" size="5" maxlength="5" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="entrprsMiddleTelno" cssClass="error" /></div>
+ <div><form:errors path="entrprsEndTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.fax"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:input path="fxnum" id="fxnum" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="fxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우번번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.post"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="zip" id="zip" title="${title} ${inputTxt}" value="<c:out value='${entrprsManageVO.zip}'/>" type="text" size="20" value="" maxlength="8" style="width:60px;" />
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.addr"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="adres" id="adres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="adres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 신청자이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageList.regName"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="applcntNm" id="applcntNm" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="20" />
+ <div><form:errors path="applcntNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 신청자이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageList.regMail"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="applcntEmailAdres" id="applcntEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" />
+ <div><form:errors path="applcntEmailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 그룹아이디 -->
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.groupId"/></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <form:select path="groupId" id="groupId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${groupId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="groupId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 기업회원상태코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.status"/></c:set>
+ <tr>
+ <th>${title} <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="entrprsMberSttus" id="entrprsMberSttus" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${entrprsMberSttus_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="entrprsMberSttus" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 로그인인증제한여부 -->
+ <c:set var="title"><spring:message code="comUssUmt.common.lockAt"/></c:set>
+ <tr>
+ <th><label for="lockAt">${title}</label></th>
+ <td class="left">
+ <c:if test="${entrprsManageVO.lockAt eq 'Y'}">예</c:if>
+ <c:if test="${entrprsManageVO.lockAt == null || entrprsManageVO.lockAt eq '' || entrprsManageVO.lockAt eq 'N'}">아니오</c:if>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.save" />" title="<spring:message code="button.save" /> <spring:message code="input.button" />" />
+ <button class="btn_s2" onClick="fnDeleteEntrprs('<c:out value='${entrprsManageVO.userTy}'/>:<c:out value='${entrprsManageVO.uniqId}'/>'); return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></button>
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovEntrprsMberManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <button class="btn_s2" onClick="fnPasswordMove(); return false;" title="<spring:message code="comUssUmt.userManageModifyBtn.passwordChange" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.userManageModifyBtn.passwordChange" /></button>
+ <button class="btn_s2" onClick="fnLockIncorrect(); return false;" title="<spring:message code="comUssUmt.common.lockAtBtn" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.common.lockAtBtn" /></button>
+ <button class="btn_s2" onClick="document.entrprsManageVO.reset(); return false;" title="<spring:message code="button.reset" /> <spring:message code="input.button" />"><spring:message code="button.reset" /></button>
+ </div><div style="clear:both;"></div>
+
+
+
+
+</div>
+</form:form>
+<!-- content end -->
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSelectUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberManage.jsp (revision 7)
@@ -0,0 +1,218 @@
+<%
+ /**
+ * @Class Name : EgovUserManage.jsp
+ * @Description : 사용자관리(조회,삭제) JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comUssUmt.userManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncCheckAll() {
+ var checkField = document.listForm.checkField;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+function fnDeleteUser() {
+ var checkField = document.listForm.checkField;
+ var id = document.listForm.checkId;
+ var checkedIds = "";
+ var checkedCount = 0;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkedIds += ((checkedCount==0? "" : ",") + id[i].value);
+ checkedCount++;
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ checkedIds = id.value;
+ }
+ }
+ }
+ if(checkedIds.length > 0) {
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ document.listForm.checkedIdForDel.value=checkedIds;
+ document.listForm.action = "<c:url value='/uss/umt/EgovMberDelete.do'/>";
+ document.listForm.submit();
+ }
+ }
+}
+function fnSelectUser(id) {
+ document.listForm.selectedId.value = id;
+ array = id.split(":");
+ if(array[0] == "") {
+ } else {
+ userTy = array[0];
+ userId = array[1];
+ }
+ document.listForm.selectedId.value = userId;
+ document.listForm.action = "<c:url value='/uss/umt/EgovMberSelectUpdtView.do'/>";
+ document.listForm.submit();
+}
+function fnAddUserView() {
+ document.listForm.action = "<c:url value='/uss/umt/EgovMberInsertView.do'/>";
+ document.listForm.submit();
+}
+function fnLinkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/uss/umt/EgovMberManage.do'/>";
+ document.listForm.submit();
+}
+function fnSearch(){
+ document.listForm.pageIndex.value = 1;
+ document.listForm.action = "<c:url value='/uss/umt/EgovMberManage.do'/>";
+ document.listForm.submit();
+}
+<c:if test="${!empty resultMsg}">alert("<spring:message code="${resultMsg}" />");</c:if>
+-->
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="listForm" action="<c:url value='/uss/umt/EgovMberManage.do'/>" method="post">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <!-- 검색영역 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li><!-- 상태-->
+ <select name="sbscrbSttus" id="sbscrbSttus" title="<spring:message code="comUssUmt.userManageSsearch.sbscrbSttusTitle" />">
+ <option value="0" <c:if test="${empty mberVO.sbscrbSttus || mberVO.sbscrbSttus == '0'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusAll" /></option><!-- 상태(전체) -->
+ <option value="A" <c:if test="${mberVO.sbscrbSttus == 'A'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusA" /></option><!-- 가입신청 -->
+ <option value="D" <c:if test="${mberVO.sbscrbSttus == 'D'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusD" /></option><!-- 삭제 -->
+ <option value="P" <c:if test="${mberVO.sbscrbSttus == 'P'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.sbscrbSttusP" /></option><!-- 승인 -->
+ </select>
+ </li>
+ <li><!-- 조건 -->
+ <select name="searchCondition" id="searchCondition" title="<spring:message code="comUssUmt.userManageSsearch.searchConditioTitle" />"><!-- -->
+ <option value="0" <c:if test="${mberVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.searchConditionId" /></option><!-- ID -->
+ <option value="1" <c:if test="${empty mberVO.searchCondition || mberVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comUssUmt.userManageSsearch.searchConditionName" /></option><!-- Name -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${mberVO.searchKeyword}"/>' maxlength="255" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ <input type="button" class="s_btn" onClick="fnDeleteUser(); return false;" value="<spring:message code="title.delete" />" title="<spring:message code="title.delete" /> <spring:message code="input.button" />" />
+ <span class="btn_b"><a href="<c:url value='/uss/umt/EgovMberInsertView.do'/>" onClick="fnAddUserView(); return false;" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </li>
+ </ul>
+ </div>
+
+
+<table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: 3%;">
+
+ <col style="width: 15%;">
+ <col style="width: 15%;">
+ <col style="width: 20%;">
+ <col style="width: 13%;">
+ <col style="width: 10%;">
+ <col style="width: ;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><input type="checkbox" name="checkAll" class="check2" onclick="javascript:fncCheckAll()" title="<spring:message code="input.selectAll.title" />"></th><!-- 전체선택 -->
+
+ <th class="board_th_link"><spring:message code="comUssUmt.userManageList.id" /></th><!--아이디 -->
+ <th><spring:message code="comUssUmt.userManageList.name" /></th><!-- 사용자이름 -->
+ <th><spring:message code="comUssUmt.userManageList.email" /></th><!-- 사용자이메일 -->
+ <th><spring:message code="comUssUmt.userManageList.phone" /></th><!-- 전화번호 -->
+ <th><spring:message code="table.regdate" /></th><!-- 등록일 -->
+ <th><spring:message code="comUssUmt.userManageList.sbscrbSttus" /></th><!-- 가입상태 -->
+
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${status.count}"/></td>
+ <td>
+ <input name="checkField" title="checkField <c:out value="${status.count}"/>" type="checkbox"/>
+ <input name="checkId" type="hidden" value="<c:out value='${result.userTy}'/>:<c:out value='${result.uniqId}'/>"/>
+ </td>
+ <td><a href="<c:url value='/uss/umt/EgovMberSelectUpdtView.do'/>?selectedId=<c:out value="${result.uniqId}"/>" onclick="javascript:fnSelectUser('<c:out value="${result.userTy}"/>:<c:out value="${result.uniqId}"/>'); return false;"><c:out value="${result.userId}"/></a></td>
+ <td><c:out value="${result.userNm}"/></td>
+ <td><c:out value="${result.emailAdres}"/></td>
+ <td><c:out value="${result.areaNo}"/>)<c:out value="${result.middleTelno}"/>-<c:out value="${result.endTelno}"/></td>
+ <td><c:out value="${fn:substring(result.sbscrbDe,0,10)}"/></td>
+ <td>
+ <c:forEach var="entrprsMberSttus_result" items="${entrprsMberSttus_result}" varStatus="status">
+ <c:if test="${result.sttus == entrprsMberSttus_result.code}"><c:out value="${entrprsMberSttus_result.codeNm}"/></c:if>
+ </c:forEach>
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fnLinkPage"/></ul>
+ </div>
+
+<input name="selectedId" type="hidden" />
+<input name="checkedIdForDel" type="hidden" />
+<input name="pageIndex" type="hidden" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+</div>
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSbscrb.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSbscrb.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSbscrb.jsp (revision 7)
@@ -0,0 +1,408 @@
+<%
+ /**
+ * @Class Name : EgovEntrprsMberSbscrb.jsp
+ * @Description : 기업회원등록 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * @ 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.12
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.entrprsUserManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 기업회원관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="entrprsManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/ccm/zip/EgovZipPopup.js' />" ></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ //모달 셋팅
+ fn_modal_setting();
+
+}
+/*********************************************************
+ * 모달셋팅
+ ******************************************************** */
+function fn_modal_setting(){
+ //버튼에 모달 연결
+ $("#btnMbrId").egovModal( "egovModal" );
+
+ //타이틀 설졍
+ $("#egovModal").setEgovModalTitle("<spring:message code="comUssUmt.userManageRegistModal.title" />"); //아이디 중복 확인
+ var content = "";
+ content = content + "<div class='modal-alignL' style='margin:5px 0 0 0'>"+"<spring:message code="comUssUmt.userManageRegistModal.userIsId" /> :"+"</div>"; //사용할아이디
+ content = content + "<div class='modal-alignL'>"+"<input type='text' id='checkIdModal' name='checkIdModal' value='' size='20' maxlength='20' />"+"</div>";
+ content += "<div style='clear:both;'></div>";
+ content += "<div id='divModalResult' style='margin:10px 0 0 0'><spring:message code="comUssUmt.userManageRegistModal.initStatus" /></div>"; //결과 : 중복확인을 실행하십시오.
+ //모달 body 설정
+ $("#egovModal").setEgovModalBody(content);
+
+ var footer = "";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalOk' onclick='fn_id_checkOk()'>확인</button></div>";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalSelect' onclick='fn_id_check()'>조회</button></div>";
+
+ footer += "<span class='btn_style1 blue' id='btnModalOk' onclick='fn_id_checkOk()'><a href='#'>확인</a></span> ";
+ footer += "<span class='btn_style1 blue' id='btnModalSelect' onclick='fn_id_check()'><a href='#'>조회</a></span> ";
+
+ //모달 footer 설정
+ $("#egovModal").setEgovModalfooter(footer);
+
+ //엔터이벤트처리
+ $("input[name=checkIdModal]").keydown(function (key) {
+ if(key.keyCode == 13){
+ fn_id_check();
+ }
+ });
+
+ footer = null;
+ content = null;
+}
+/*********************************************************
+ * 아이디 체크 AJAX
+ ******************************************************** */
+function fn_id_check(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ //사용할수 없는 아이디입니다.
+ $("#divModalResult").html("<font color='red'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.useMsg" /></font>");
+ }else{
+ //사용가능한 아이디입니다.
+ $("#divModalResult").html("<font color='blue'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.notUseMsg" /></font>");
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+/*********************************************************
+ * 아이디 체크 확인
+ ******************************************************** */
+function fn_id_checkOk(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ alert("<spring:message code="comUssUmt.userManageRegistModal.noIdMsg" />"); //사용이 불가능한 아이디 입니다.
+ return;
+ }else{
+
+ $("input[name=entrprsmberId]").val(returnData.checkId);
+ $("#egovModal").setEgovModalClose();
+
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+
+function fnIdCheck1(){
+ var retVal;
+ var url = "<c:url value='/uss/umt/EgovIdDplctCnfirmView.do'/>";
+ var varParam = new Object();
+ varParam.checkId = document.entrprsManageVO.entrprsmberId.value;
+ var openParam = "dialogWidth:303px;dialogHeight:250px;scroll:no;status:no;center:yes;resizable:yes;";
+ retVal = window.showModalDialog(url, varParam, openParam);
+ if(retVal) {
+ document.entrprsManageVO.entrprsmberId.value = retVal;
+ }
+}
+
+function showModalDialogCallback(retVal) {
+ if(retVal) {
+ document.entrprsManageVO.entrprsmberId.value = retVal;
+ }
+}
+
+
+function fnListPage(){
+ document.entrprsManageVO.action = "<c:url value='/uss/umt/EgovEntrprsMberManage.do'/>";
+ document.entrprsManageVO.submit();
+}
+
+function fnInsert(form){
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ if(validateEntrprsManageVO(form)){
+ if(form.entrprsMberPassword.value != form.entrprsMberPassword2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return false;
+ }
+ form.submit();
+ return true;
+ }
+ }
+}
+</script>
+<style>
+.modal-content {width: 400px;}
+</style>
+</head>
+<body onload="fn_egov_init()">
+
+<!-- content start -->
+ <form:form commandName="entrprsManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovEntrprsMberSbscrb.do" name="entrprsManageVO" method="post" onSubmit="fnInsert(document.forms[0]); return false;">
+
+<!-- 우편번호검색 -->
+<input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <!-- 기업회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.id"/></c:set>
+ <tr>
+ <th><label for="entrprsmberId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="entrprsmberId" id="entrprsmberId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" style="width:80%;" />
+ <button id="btnMbrId" class="btn_s2" onClick="return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.entrprsUserManageRegistBtn.idSearch" /></button>
+ <div><form:errors path="entrprsmberId" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 회사명 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.name"/></c:set>
+ <tr>
+ <th><label for="cmpnyNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="cmpnyNm" title="${title} ${inputTxt}" size="50" maxlength="60" />
+ <div><form:errors path="cmpnyNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.pass"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPassword">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <form:password path="entrprsMberPassword" title="${title} ${inputTxt}" size="50" maxlength="20" />
+ <div><form:errors path="entrprsMberPassword" cssClass="error" /></div>
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passConfirm"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPassword2">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="entrprsMberPassword2" id="entrprsMberPassword2" title="${title} ${inputTxt}" type="password" size="50" maxlength="20" />
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passHit"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPasswordHint">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="entrprsMberPasswordHint" id="entrprsMberPasswordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="entrprsMberPasswordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.passOk"/></c:set>
+ <tr>
+ <th><label for="entrprsMberPasswordCnsr">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="entrprsMberPasswordCnsr" id="entrprsMberPasswordCnsr" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="50" maxlength="100" />
+ <div><form:errors path="entrprsMberPasswordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 업종코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.indutyCode"/></c:set>
+ <tr>
+ <th><label for="indutyCode">${title}</label></th>
+ <td class="left">
+ <form:select path="indutyCode" id="indutyCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${indutyCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+ <!-- 기업구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.entrprsSeCode"/></c:set>
+ <tr>
+ <th><label for="entrprsSeCode">${title}</label></th>
+ <td class="left">
+ <form:select path="entrprsSeCode" id="entrprsSeCode" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${entrprsSeCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+
+ <!-- 대표이사이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.cxfc"/></c:set>
+ <tr>
+ <th><label for="cxfc">${title}</label></th>
+ <td class="left">
+ <form:input path="cxfc" id="cxfc" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="cxfc" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 사업자등록번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.bizrno"/></c:set>
+ <tr>
+ <th><label for="bizrno">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="bizrno" id="bizrno" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="bizrno" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 법인등록번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.jurirno"/></c:set>
+ <tr>
+ <th><label for="jurirno">${title}</label> </th>
+ <td class="left">
+ <form:input path="jurirno" id="jurirno" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="jurirno" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 회사전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.tel"/></c:set>
+ <tr>
+ <th><label for="areaNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="전화번호" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="entrprsMiddleTelno" id="entrprsMiddleTelno" size="5" maxlength="5" style="width:40px;"/>
+ - <form:input path="entrprsEndTelno" id="entrprsEndTelno" size="5" maxlength="5" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="entrprsMiddleTelno" cssClass="error" /></div>
+ <div><form:errors path="entrprsEndTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.fax"/></c:set>
+ <tr>
+ <th><label for="">${title}</label></th>
+ <td class="left">
+ <form:input path="fxnum" id="fxnum" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="fxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우번번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.post"/></c:set>
+ <tr>
+ <th><label for="zip">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="zip" title="${title} ${inputTxt}" type="text" size="20" value="" maxlength="8" style="width:60px;" />
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.addr"/></c:set>
+ <tr>
+ <th><label for="adres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="adres" id="adres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="adres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th><label for="applcntNm">${title}</label></th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 신청자이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageList.regName"/></c:set>
+ <tr>
+ <th><label for="">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="applcntNm" id="applcntNm" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="20" />
+ <div><form:errors path="applcntNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 신청자이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.entrprsUserManageList.regMail"/></c:set>
+ <tr>
+ <th><label for="applcntEmailAdres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="applcntEmailAdres" id="applcntEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" />
+ <div><form:errors path="applcntEmailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <input type="hidden" name="entrprsMberSttus" value="DEFAULT" />
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ </div><div style="clear:both;"></div>
+
+
+</div>
+</form:form>
+
+<!-- Egov Modal include -->
+<c:import url="/EgovModal.do" charEncoding="utf-8">
+ <c:param name="scriptYn" value="Y" />
+ <c:param name="modalName" value="egovModal" />
+</c:import>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovEntrprsMberSbscrb.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserPasswordUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserPasswordUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserPasswordUpdt.jsp (revision 7)
@@ -0,0 +1,138 @@
+<%
+ /**
+ * @Class Name : EgovPasswordUpdt.jsp
+ * @Description : 암호수정 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.02 조재영 최초 생성
+ * @ 2016.07.26 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.04.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.userManagePasswordUpdt.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="passwordChgVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+function fnListPage(){
+ document.passwordChgVO.action = "<c:url value='/uss/umt/EgovUserManage.do'/>";
+ document.passwordChgVO.submit();
+}
+function fnUpdate(form){
+ if(validatePasswordChgVO(form)){
+ if(form.newPassword.value != form.newPassword2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return false;
+ }
+ document.passwordChgVO.submit();
+ return true;
+ }else{
+ return false;
+ }
+}
+<c:if test="${!empty resultMsg}">alert("<spring:message code="${resultMsg}" />");</c:if>
+</script>
+</head>
+<body>
+<form name="passwordChgVO" method="post" action="<c:url value="${'/uss/umt/EgovUserPasswordUpdt.do'}"/>" onsubmit="fnUpdate(document.forms[0]); return false;">
+ <!-- 상세정보 사용자 삭제시 prameter 전달용 input -->
+ <input name="checkedIdForDel" type="hidden" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+ <!-- 우편번호검색 -->
+ <input type="hidden" name="url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUssUmt.deptUserManage.title" /> ${pageTitle}</h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.id" /></c:set>
+ <tr>
+ <th>${title}</th>
+ <td class="left">
+ <input name="emplyrId" id="emplyrId" title="사용자아이디" type="text" size="20" value="<c:out value='${userManageVO.emplyrId}'/>" maxlength="20" readonly/>
+ <input name="uniqId" id="uniqId" title="uniqId" type="hidden" size="20" value="<c:out value='${userManageVO.uniqId}'/>"/>
+ <input name="userTy" id="userTy" title="userTy" type="hidden" size="20" value="<c:out value='${userManageVO.userTy}'/>"/>
+ </td>
+ </tr>
+
+ <!-- 기존 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.oldPass" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="oldPassword" id="oldPassword" type="password" size="20" value="" maxlength="100" >
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.pass" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <input name="newPassword" id="newPassword" type="password" size="20" value="" maxlength="100" >
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManagePasswordUpdt.passConfirm" /></c:set>
+ <tr>
+ <th>${title}<span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="newPassword2" id="newPassword2" type="password" size="20" value="" maxlength="100" >
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" />
+
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovUserManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <button class="btn_s2" onClick="document.passwordChgVO.reset();return false;" title="<spring:message code="button.reset" /> <spring:message code="input.button" />"><spring:message code="button.reset" /></button>
+ </div><div style="clear:both;"></div>
+
+</div>
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovUserPasswordUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovStplatCnfirm.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovStplatCnfirm.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovStplatCnfirm.jsp (revision 7)
@@ -0,0 +1,141 @@
+<%
+ /**
+ * @Class Name : EgovStplatCnfirm.jsp
+ * @Description : 약관확인 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.31 조재영 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.31
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUssUmt.stplatCnfirmt.title"/></c:set>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle}</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<base target="_self">
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fnAgree(){
+ var checkField = document.QustnrManageForm.checkField;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ }else{
+ alert("<spring:message code="comUssUmt.stplatCnfirmtValidate.disagreeStplatCnfirmt" />"); //약관에 동의하지 않으면 회원으로 가입할 수 없습니다.
+ checkField[i].focus();
+ return;
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ }else{
+ alert("<spring:message code="comUssUmt.stplatCnfirmtValidate.disagreeStplatCnfirmt" />"); //약관에 동의하지 않으면 회원으로 가입할 수 없습니다.
+ checkField[i].focus();
+ return;
+ }
+ }
+ }
+
+ //실명인증 기본페이지는 주민번호 실명확인으로 한다.
+ //패키지 변경 document.stplatForm.action = "<c:url value='/uss/umt/EgovRlnmCnfirm.do'/>";
+ document.stplatForm.action = "<c:url value='/sec/rnc/EgovRlnmCnfirm.do'/>";
+ document.stplatForm.submit();
+}
+
+function fnDisAgree(){
+ alert("<spring:message code="comUssUmt.stplatCnfirmtValidate.disagreeStplatCnfirmt" />"); //약관에 동의하지 않으면 회원가입을 하실수 없습니다.
+ return;
+}
+-->
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="QustnrManageForm" action="<c:url value='/sec/rnc/EgovRlnmCnfirm.do'/>" method="post">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle}</h2>
+
+ <!-- content start -->
+ <input type="hidden" name="sbscrbTy" value="${sbscrbTy}"/>
+ <!-- 실명인증의 기본옵션은 주민번호 실명확인임 : 주민번호 실명인증 으로 가기위한 초기화값 -->
+ <input type="hidden" name="ihidnum" value=""/>
+ <input type="hidden" name="realname" value=""/>
+ <!-- 실명인증후 다음단계에 대한 셋팅정보 -->
+ <input type="hidden" name ="nextUrlName" value="button.subscribe"/>
+ <input type="hidden" name ="nextUrl" value=
+ <c:if test="${sbscrbTy == 'USR01'}">"/uss/umt/EgovMberSbscrbView.do"</c:if>
+ <c:if test="${sbscrbTy == 'USR02'}">"/uss/umt/EgovEntrprsMberSbscrbView.do"</c:if>
+ <c:if test="${empty sbscrbTy}">""</c:if>
+ />
+ <c:forEach var="result" items="${stplatList}" varStatus="status">
+ <!-- 약관확인 -->
+ <table class="wTable">
+ <tr><th><spring:message code="comUssUmt.stplatCnfirmt.useStplatCn" /></th></tr>
+
+ <tr>
+ <td><label for="useStplatCn">
+ <textarea id="useStplatCn" cols="120" rows="15"><c:out value="${result.useStplatCn}" escapeXml="false" /></textarea>
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td><label for="checkField">
+ <input name="checkField" type="checkbox" title=<spring:message code="comUssUmt.stplatCnfirmt.useStplatCn" /> ><spring:message code="comUssUmt.stplatCnfirmtMsg.useStplat" />
+ <input name="checkuseStplatCn" type="hidden" value="<c:out value='${result.useStplatId}'/>">
+ </label>
+ </td>
+ </tr>
+ </table>
+ <!-- 정보동의내용 -->
+ <table class="wTable">
+ <tr><th><spring:message code="comUssUmt.stplatCnfirmt.infoProvdAgreCn" /></th></tr>
+ <tr>
+ <td><label for="infoProvdAgeCn">
+ <textarea id="infoProvdAgeCn" cols="120" rows="15"><c:out value="${result.infoProvdAgeCn}" escapeXml="false" /></textarea>
+ </label>
+ <!-- <c:out value="${fn:replace(result.infoProvdAgeCn , crlf , '<br/>')}" escapeXml="false" /> -->
+ </td>
+ </tr>
+ <tr>
+ <td><label for="checkField">
+ <input name="checkField" title="<spring:message code="comUssUmt.stplatCnfirmt.infoProvdAgreCn" />" type="checkbox"><spring:message code="comUssUmt.stplatCnfirmtMsg.infoProvdAgre" />
+ <input name="checkinfoProvdAgeCn" type="hidden" value="<c:out value='${result.useStplatId}'/>">
+ </label>
+ </td>
+ </tr>
+ </table>
+ </c:forEach>
+
+ <div class="btn">
+ <button class="btn_s2" onClick="fnDisAgree(); return false;" title="<spring:message code="button.disagree" /> <spring:message code="input.button" />"><spring:message code="button.disagree" /></button>
+ <input type="submit" class="s_submit" onclick="fnAgree(); return false;" value="<spring:message code="button.agree" />" title="<spring:message code="button.agree" /> <spring:message code="button.save" />" />
+ </div><div style="clear:both;"></div>
+
+
+</div>
+</form>
+ <!-- content end -->
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovStplatCnfirm.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovIdDplctCnfirm.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovIdDplctCnfirm.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovIdDplctCnfirm.jsp (revision 7)
@@ -0,0 +1,172 @@
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovIdDplctCnfirm.jsp
+ * @Description : 아이디중복확인
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.03 조재영 최초 생성
+ *
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.23
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>ID중복확인</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<base target="_self" >
+<link rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javaScript" language="javascript">
+<!--
+function fnCheckId(){
+ if(fnCheckNotKorean(document.checkForm.checkId.value) && fnCheck(document.checkForm.checkId.value)){
+ document.checkForm.submit();
+ }else{
+ return;
+ }
+}
+function fnReturnId(){
+ var retVal="";
+ if (document.checkForm.usedCnt.value == 0){
+ retVal = document.checkForm.resultId.value;
+
+ var parentPanel = null;
+ var browser = navigator.userAgent;
+
+ if (browser.indexOf('Trident/') > -1) {
+ parentPanel = parent.window.document;
+ }else{
+ parentPanel = opener.document;
+ }
+
+
+
+ if(parentPanel.entrprsManageVO){
+ parentPanel.entrprsManageVO.entrprsmberId.value = retVal;
+ }else if(parentPanel.userManageVO){
+ parentPanel.userManageVO.emplyrId.value = retVal;
+ }else if(parentPanel.mberManageVO){
+ parentPanel.mberManageVO.mberId.value = retVal;
+ }
+
+
+ parent.window.returnValue = retVal;
+ window.close();
+ }else if (document.checkForm.usedCnt.value == 1){
+ alert("이미사용중인 아이디입니다.");
+ return;
+ }else{
+ alert("먼저 중복확인을 실행하십시오");
+ return;
+ }
+}
+function fnClose(){
+ var retVal="";
+ window.returnValue = retVal;
+ window.close();
+}
+function fnCheckNotKorean(koreanStr){
+ for(var i=0;i<koreanStr.length;i++){
+ var koreanChar = koreanStr.charCodeAt(i);
+ if( !( 0xAC00 <= koreanChar && koreanChar <= 0xD7A3 ) && !( 0x3131 <= koreanChar && koreanChar <= 0x318E ) ) {
+ }else{
+ //hangul finding....
+ alert("한글은 사용할 수 없습니다.");
+ return false;
+ }
+ }
+ return true;
+}
+
+// 2011.10.25 보안점검 후속조치
+function fnCheck(str){
+ var blank_pattern = /[\s]/g;
+ var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?]/gi;
+
+ if( special_pattern.test(str) == true || blank_pattern.test(str) == true ){
+ alert("공백 및 특수문자는 사용할 수 없습니다.");
+ return false;
+ } else {
+ return true;
+ }
+}
+
+-->
+</script>
+</head>
+<body>
+ <form name="checkForm" action ="<c:url value='/uss/umt/EgovIdDplctCnfirm.do'/>">
+
+ <table border="0" cellspacing="0" cellpadding="0" width="300">
+ <tr><td height="20" colspan="2"></td></tr>
+ <tr>
+ <td colspan="2" ><img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" align="middle" alt="제목아이콘이미지">
+ 아이디 중복확인</td>
+ </tr>
+ <tr><td height="20" colspan="2"></td></tr>
+ <tr>
+ <td>사용할아이디 </td>
+ <td>
+ <input type="hidden" name="resultId" value="<c:out value="${checkId}"/>" />
+ <input type="hidden" name="usedCnt" value="<c:out value="${usedCnt}"/>" />
+ <input type="text" name="checkId" value="<c:out value="${checkId}"/>" maxlength="20" tabindex="1" title="아이디입력"/>
+ </td>
+ </tr>
+ <tr><td height="10" colspan="2"></td></tr>
+ <tr>
+ <td colspan="2">결과 :
+ <c:choose>
+ <c:when test="${usedCnt eq -1}">
+ 중복확인을 실행하십시오
+ </c:when>
+ <c:when test="${usedCnt eq 0}">
+ ${checkId} 는 사용가능한 아이디입니다.
+ </c:when>
+ <c:otherwise>
+ ${checkId} 는 사용할수 없는 아이디입니다.
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ <tr><td height="15" colspan="2"></td></tr>
+ </table>
+ <table border="0" cellspacing="0" cellpadding="0" >
+ <tr align="right">
+ <!-- 중복조회 -->
+
+ <td>
+ <span class="button"><input type="button" onclick="fnCheckId();" value="<spring:message code='button.inquire' />" /></span>
+ </td>
+
+ <td> </td>
+ <!-- 사용 -->
+ <td>
+ <span class="button"><input type="button" onclick="fnReturnId();" value="<spring:message code='button.use' />" /></span>
+ </td>
+
+ <td> </td>
+ <!-- 닫기 -->
+ <td>
+ <span class="button"><input type="button" onclick="fnClose();" value="<spring:message code='button.close' />" /></span>
+ </td>
+
+ <td></td>
+ </tr>
+ </table>
+
+ </form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovIdDplctCnfirm.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageUpdt.jsp (revision 7)
@@ -0,0 +1,136 @@
+<%
+/**
+ * @Class Name : EgovRoleUpdate.java
+ * @Description : EgovRoleUpdate jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.deptManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title><!-- 부서관리 등록 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="deptManage" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+function fncSelectDeptManageList() {
+ var varFrom = document.getElementById("deptManage");
+ varFrom.action = "<c:url value='/uss/umt/dpt/selectDeptManageList.do'/>";
+ varFrom.submit();
+}
+
+function fncDeptManageUpdate() {
+ var varFrom = document.getElementById("deptManage");
+ varFrom.action = "<c:url value='/uss/umt/dpt/updtDeptManage.do'/>";
+
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(!validateBanner(varFrom)){
+ return;
+ }else{
+ varFrom.submit();
+ }
+ }
+}
+
+function fncDeptManageDelete() {
+ var varFrom = document.getElementById("deptManage");
+ varFrom.action = "<c:url value='/uss/umt/dpt/removeDeptManage.do'/>";
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ varFrom.submit();
+ }
+}
+
+</script>
+</head>
+
+<body>
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="deptManage" method="post" action="${pageContext.request.contextPath}/uss/umt/dpt/updtDeptManage.do' />" onSubmit="fncDeptManageUpdate(); return false;" enctype="multipart/form-data">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 16%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <!-- 부서ID -->
+ <c:set var="title"><spring:message code="comUssUmt.deptManageRegist.deptId" /></c:set>
+ <tr>
+ <th><label for="orgnztId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="orgnztId" title="${title} ${inputTxt}" size="40" maxlength="50" />
+ <div><form:errors path="orgnztId" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 부서명 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptManageRegist.deptName" /></c:set>
+ <tr>
+ <th><label for="orgnztNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="orgnztNm" title="${title} ${inputTxt}" size="40" maxlength="200" />
+ <div><form:errors path="orgnztNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 설명 -->
+ <c:set var="title"><spring:message code="comUssUmt.deptManageRegist.deptDc" /></c:set>
+ <tr>
+ <th><label for="orgnztDc">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:textarea path="orgnztDc" title="${title} ${inputTxt}" cols="300" rows="10" />
+ <div><form:errors path="orgnztDc" cssClass="error" /></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/uss/umt/dpt/selectDeptManageList.do'/>" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ <button class="btn_s2" onClick="fncDeptManageDelete();return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></button><!-- 삭제 -->
+ <input type="submit" class="s_submit" value="<spring:message code="button.save" />" title="<spring:message code="button.save" /> <spring:message code="input.button" />" /><!-- 저장 -->
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${deptManageVO.searchCondition}'/>" >
+<input type="hidden" name="searchKeyword" value="<c:out value='${deptManageVO.searchKeyword}'/>" >
+<input type="hidden" name="pageIndex" value="<c:out value='${deptManageVO.pageIndex}'/>" >
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovDeptManageUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberInsert.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberInsert.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberInsert.jsp (revision 7)
@@ -0,0 +1,398 @@
+<%
+ /**
+ * @Class Name : EgovMberInsert.jsp
+ * @Description : 일반회원등록 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.02 조재영 최초 생성
+ * 2016.06.13 장동한 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 조재영
+ * @since 2009.03.02
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comUssUmt.userManage.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="mberManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/ccm/zip/EgovZipPopup.js' />" ></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ //모달 셋팅
+ fn_modal_setting();
+
+}
+/*********************************************************
+ * 모달셋팅
+ ******************************************************** */
+function fn_modal_setting(){
+ //버튼에 모달 연결
+ $("#btnMbrId").egovModal( "egovModal" );
+
+ //타이틀 설졍
+ $("#egovModal").setEgovModalTitle("<spring:message code="comUssUmt.userManageRegistModal.title" />"); //아이디 중복 확인
+ var content = "";
+ content = content + "<div class='modal-alignL' style='margin:5px 0 0 0'>"+"<spring:message code="comUssUmt.userManageRegistModal.userIsId" /> :"+"</div>"; //사용할아이디
+ content = content + "<div class='modal-alignL'>"+"<input type='text' id='checkIdModal' name='checkIdModal' value='' size='20' maxlength='20' />"+"</div>";
+ content += "<div style='clear:both;'></div>";
+ content += "<div id='divModalResult' style='margin:10px 0 0 0'><spring:message code="comUssUmt.userManageRegistModal.initStatus" /></div>"; //결과 : 중복확인을 실행하십시오.
+ //모달 body 설정
+ $("#egovModal").setEgovModalBody(content);
+
+ var footer = "";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalOk' onclick='fn_id_checkOk()'>확인</button></div>";
+ //footer += "<div class='modal-btn'><button class='btn_s2' id='btnModalSelect' onclick='fn_id_check()'>조회</button></div>";
+ footer += "<span class='btn_style1 blue' id='btnModalOk' onclick='fn_id_checkOk()'><a href='#'>확인</a></span> ";
+ footer += "<span class='btn_style1 blue' id='btnModalSelect' onclick='fn_id_check()'><a href='#'>조회</a></span> ";
+ //모달 footer 설정
+ $("#egovModal").setEgovModalfooter(footer);
+
+ //엔터이벤트처리
+ $("input[name=checkIdModal]").keydown(function (key) {
+ if(key.keyCode == 13){
+ fn_id_check();
+ }
+ });
+ footer = null;
+ content = null;
+}
+/*********************************************************
+ * 아이디 체크 AJAX
+ ******************************************************** */
+function fn_id_check(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+
+ if(returnData.usedCnt > 0 ){
+ //사용할수 없는 아이디입니다.
+ $("#divModalResult").html("<font color='red'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.useMsg" /></font>");
+ }else{
+ //사용가능한 아이디입니다.
+ $("#divModalResult").html("<font color='blue'><spring:message code="comUssUmt.userManageRegistModal.result" /> : ["+returnData.checkId+"]<spring:message code="comUssUmt.userManageRegistModal.notUseMsg" /></font>");
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+/*********************************************************
+ * 아이디 체크 확인
+ ******************************************************** */
+function fn_id_checkOk(){
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/uss/umt/EgovIdDplctCnfirmAjax.do' />",
+ data:{
+ "checkId": $("#checkIdModal").val()
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+ if(status == "success") {
+ if(returnData.usedCnt > 0 ){
+ alert("<spring:message code="comUssUmt.userManageRegistModal.noIdMsg" />"); //사용이 불가능한 아이디 입니다.
+ return;
+ }else{
+
+ $("input[name=mberId]").val(returnData.checkId);
+ $("#egovModal").setEgovModalClose();
+ }
+ }else{ alert("ERROR!");return;}
+ }
+ });
+}
+
+
+function fnIdCheck1(){
+ var retVal;
+ var url = "<c:url value='/uss/umt/EgovIdDplctCnfirmView.do'/>";
+ var varParam = new Object();
+ varParam.checkId = document.mberManageVO.mberId.value;
+ var openParam = "dialogWidth:303px;dialogHeight:250px;scroll:no;status:no;center:yes;resizable:yes;";
+
+// alert(1);
+ return false;
+ retVal = window.showModalDialog(url, varParam, openParam);
+ if(retVal) {
+ document.mberManageVO.mberId.value = retVal;
+ }
+}
+
+function showModalDialogCallback(retVal) {
+ if(retVal) {
+ document.mberManageVO.mberId.value = retVal;
+ }
+}
+
+function fnListPage(){
+ document.mberManageVO.action = "<c:url value='/uss/umt/EgovMberManage.do'/>";
+ document.mberManageVO.submit();
+}
+
+function fnInsert(form){
+
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ if(validateMberManageVO(form)){
+ if(form.password.value != form.password2.value){
+ alert("<spring:message code="fail.user.passwordUpdate2" />");
+ return false;
+ }
+ form.submit();
+ return true;
+ }
+ }
+
+
+
+}
+</script>
+<style>
+.modal-content {width: 400px;}
+</style>
+</head>
+<body onload="fn_egov_init()">
+<form:form commandName="mberManageVO" action="${pageContext.request.contextPath}/uss/umt/EgovMberInsert.do" name="mberManageVO" method="post" onSubmit="fnInsert(document.forms[0]); return false;">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 22%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.cSelect" /></c:set>
+ <!-- 일반회원아이디 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.id"/></c:set>
+ <tr>
+ <th><label for="mberId">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberId" id="mberId" title="${title} ${inputTxt}" size="20" readonly="true" maxlength="20" style="width:80%;" />
+ <button id="btnMbrId" class="btn_s2" onClick="return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />"><spring:message code="comUssUmt.userManageRegistBtn.idSearch" /></button>
+ <div><form:errors path="mberId" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 일반회원이름 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.name"/></c:set>
+ <tr>
+ <th><label for="mberNm">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberNm" title="${title} ${inputTxt}" size="50" maxlength="50" />
+ <div><form:errors path="mberNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.pass"/></c:set>
+ <tr>
+ <th><label for="password">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <div>
+ <form:password path="password" title="${title} ${inputTxt}" size="50" maxlength="20" />
+ <div><form:errors path="password" cssClass="error" /></div>
+ </div>
+ <div>
+ <div><spring:message code="info.password.rule.password1" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckcomb3" /></div>
+ <div><spring:message code="info.password.rule.pwdcheckseries" /></div>
+ </div>
+ </td>
+ </tr>
+ <!-- 비밀번호확인 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passConfirm"/></c:set>
+ <tr>
+ <th><label for="password2">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="password2" id="password2" title="${title} ${inputTxt}" type="password" size="50" maxlength="20" />
+ </td>
+ </tr>
+ <!-- 비밀번호힌트 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passHit"/></c:set>
+ <tr>
+ <th><label for="passwordHint">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="passwordHint" id="passwordHint" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${passwordHint_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="passwordHint" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 비밀번호정답 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.passOk"/></c:set>
+ <tr>
+ <th><label for="passwordCnsr">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="passwordCnsr" id="passwordCnsr" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="50" maxlength="100" />
+ <div><form:errors path="passwordCnsr" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 성별구분코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.saxTypeCode"/></c:set>
+ <tr>
+ <th><label for="sexdstnCode">${title}</label></th>
+ <td class="left">
+ <form:select path="sexdstnCode" id="sexdstnCode" title="${title} ${inputSelect}">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${sexdstnCode_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ </td>
+ </tr>
+ <!-- 전화번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.tel"/></c:set>
+ <tr>
+ <th><label for="areaNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="areaNo" id="areaNo" title="전화번호" cssClass="txaIpUmt" size="5" maxlength="4" style="width:40px;"/>
+ - <form:input path="middleTelno" id="middleTelno" cssClass="txaIpUmt" size="5" maxlength="4" style="width:40px;"/>
+ - <form:input path="endTelno" id="endTelno" cssClass="txaIpUmt" size="5" maxlength="4" style="width:40px;"/>
+ <div><form:errors path="areaNo" cssClass="error" /></div>
+ <div><form:errors path="middleTelno" cssClass="error" /></div>
+ <div><form:errors path="endTelno" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 팩스번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.fax"/></c:set>
+ <tr>
+ <th><label for="mberFxnum">${title}</label></th>
+ <td class="left">
+ <form:input path="mberFxnum" id="mberFxnum" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="mberFxnum" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 헨드폰번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.phone"/></c:set>
+ <tr>
+ <th><label for="moblphonNo">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="moblphonNo" id="moblphonNo" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="20" maxlength="15" />
+ <div><form:errors path="moblphonNo" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 이메일주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.email"/></c:set>
+ <tr>
+ <th><label for="mberEmailAdres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mberEmailAdres" id="mberEmailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="30" maxlength="50" />
+ <div><form:errors path="mberEmailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 우번번호 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.post"/></c:set>
+ <tr>
+ <th><label for="zip">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="zip" title="${title} ${inputTxt}" type="text" size="20" value="" maxlength="6" style="width:60px;" />
+ <!-- form:hidden path="zip" id="zip" -->
+ <!-- <button class="btn_s2" onClick="fn_egov_ZipSearch(document.mberManageVO, document.mberManageVO.zip, document.mberManageVO.zip_view, document.mberManageVO.adres);return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">우번번호검색</button> -->
+ <div><form:errors path="zip" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.addr"/></c:set>
+ <tr>
+ <th><label for="adres">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="adres" id="adres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="adres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 상세주소 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.addrDetail"/></c:set>
+ <tr>
+ <th><label for="detailAdres">${title}</label></th>
+ <td class="left">
+ <form:input path="detailAdres" id="detailAdres" title="${title} ${inputTxt}" cssClass="txaIpUmt" size="70" maxlength="100" />
+ <div><form:errors path="detailAdres" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 그룹아이디 -->
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.groupId"/></c:set>
+ <tr>
+ <th><label for="groupId">${title}</label></th>
+ <td class="left">
+ <form:select path="groupId" id="groupId" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${groupId_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="groupId" cssClass="error"/></div>
+ </td>
+ </tr>
+ <!-- 일반회원상태코드 -->
+ <c:set var="title"><spring:message code="comUssUmt.userManageRegist.status"/></c:set>
+ <tr>
+ <th><label for="mberSttus">${title}</label> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="mberSttus" id="mberSttus" title="${title} ${inputSelect}">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${mberSttus_result}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="mberSttus" cssClass="error"/></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/uss/umt/EgovMberManage.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ </div><div style="clear:both;"></div>
+
+</div><!-- div end(wTableFrm) -->
+
+<input name="checkedIdForDel" type="hidden" />
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${userSearchVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${userSearchVO.searchKeyword}'/>"/>
+<input type="hidden" name="sbscrbSttus" value="<c:out value='${userSearchVO.sbscrbSttus}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${userSearchVO.pageIndex}'/>"/>
+ <!-- 우편번호검색 -->
+ <input type="hidden" name="zip_url" value="<c:url value='/sym/ccm/zip/EgovCcmZipSearchPopup.do'/>" />
+</form:form>
+
+<!-- Egov Modal include -->
+<c:import url="/EgovModal.do" charEncoding="utf-8">
+ <c:param name="scriptYn" value="Y" />
+ <c:param name="modalName" value="egovModal" />
+</c:import>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uss/umt/EgovMberInsert.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_left.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_left.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_left.jsp (revision 7)
@@ -0,0 +1,67 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+
+<%
+ /**
+ * @Class Name : left.jsp
+ * @Description : 좌측메뉴화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button/";
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/mpm.css' />" type="text/css" />
+<title>메뉴정보등록</title>
+<script type="text/javascript">
+var imgpath = "<c:url value='/images/egovframework/com/cmm/utl/'/>";
+var getContextPath = "${pageContext.request.contextPath}";
+var path = "http://" + "${pageContext.request.serverName}" + ":" + "${pageContext.request.serverPort}";
+</script>
+<script language="javascript1.2" src="<c:url value='/js/egovframework/com/sym/mnu/mpm/EgovMainMenu.js' />" /></script>
+</head>
+<body leftmargin="0" topmargin="0" marginwidth="0" marginheight= "0">
+<form name="menuListForm" action ="<c:url value='/sym/mnu/mpm/EgovMenuListSelect.do' />" method="post">
+<DIV id="main" style="display:">
+
+<table width="181" cellpadding="8" class="table-search" border="1">
+ <tr>
+ <td width="181" class="title_left" >
+ <div style="width:0px; height:0px;">
+ <c:forEach var="result" items="${list_menulist}" varStatus="status" >
+ <input type="hidden" name="tmp_menuNm" value="${result.menuNo}|${result.upperMenuId}|${result.menuNm}|${result.relateImagePath}|${result.relateImageNm}|${pageContext.request.contextPath}/${result.chkURL}|"/>
+ </c:forEach>
+ </div>
+ <div class="tree" style="overflow: auto; position: absolute; z-index: 5; padding: 0pt 0pt 0pt 49px; width: 214px; height: 512px;">
+ <script language="javascript">
+ var Tree = new Array;
+ for (var j = 0; j < document.menuListForm.tmp_menuNm.length; j++) {
+ Tree[j] = document.menuListForm.tmp_menuNm[j].value;
+ }
+ createTree(Tree, true, '<c:out value="${resultVO.tempInt}"/>');
+ </script>
+ </div>
+ </td>
+ </tr>
+</table>
+</DIV>
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_left.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogList.jsp (revision 7)
@@ -0,0 +1,214 @@
+<%
+/**
+ * @Class Name : EgovUserLogList.jsp
+ * @Description : 사용자 로그 정보목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리로 경로 수정(sym.log -> sym.log.ulg)
+ * @ 2011.09.14 서준식 검색 후 화면에 검색일자 표시안되는 오류 수정
+ * @ 2017.09.17 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="spring" uri="http://www.springframework.org/tags" %>
+<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
+<c:set var="pageTitle"><spring:message code="comSymLogUlg.userLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.UserLogForm.searchWrd.focus();
+}
+/* ********************************************************
+ * 달력
+ ******************************************************** */
+function fn_egov_init_date(){
+
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+}
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.UserLogForm.pageIndex.value = pageNo;
+ document.UserLogForm.action = "<c:url value='/sym/log/ulg/SelectUserLogList.do'/>";
+ document.UserLogForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_userLog(){
+ var vFrom = document.UserLogForm;
+
+ if(vFrom.searchEndDe.value != ""){
+ if(vFrom.searchBgnDe.value > vFrom.searchEndDe.value){
+ alert("<spring:message code="comSymLogUlg.validate.dateCheck" />"); //검색조건의 시작일자가 종료일자보다 늦습니다. 검색조건 날짜를 확인하세요!
+ return;
+ }
+ }else{
+ vFrom.searchEndDe.value = "";
+ }
+
+ vFrom.pageIndex.value = "1";
+ vFrom.action = "<c:url value='/sym/log/ulg/SelectUserLogList.do'/>";
+ vFrom.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_userLog(occrrncDe, rqesterId, srvcNm, methodNm) {
+ var width = 850;
+ var height = 450;
+ var top = 0;
+ var left = 0;
+ var url = "<c:url value='/sym/log/ulg/SelectUserLogDetail.do' />?occrrncDe="+occrrncDe+"&rqesterId="+rqesterId+"&srvcNm="+srvcNm+"&methodNm="+methodNm;
+ var name = "UserLogDetailPopup"
+ var openWindows = window.open(url,name, "width="+width+",height="+height+",top="+top+",left="+left+",toolbar=no,status=no,location=no,scrollbars=yes,menubar=no,resizable=yes");
+}
+</script>
+<style>
+.board_list tbody td img{align: middle;}
+</style>
+</head>
+<body onload="fn_egov_init(); fn_egov_init_date();" >
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="UserLogForm" action="<c:url value='/sym/log/ulg/SelectUserLogList.do'/>" method="post" onSubmit="fn_egov_search_userLog(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+ <!-- 검색영역 -->
+ <!-- 발생일자 선택 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <spring:message code="comSymLogUlg.userLog.occrrncDe" /> : <!-- 발생일자 -->
+ <input type="text" name="searchBgnDe" id="searchBgnDe" size="15" maxlength="10" value="${searchVO.searchBgnDe}" title="<spring:message code="comSymLogUlg.seachWrd.searchBgnDe" />" > ~ <!-- 검색시작일 -->
+ <input type="text" name="searchEndDe" id="searchEndDe" size="15" maxlength="10" value="${searchVO.searchEndDe}" title="<spring:message code="comSymLogUlg.seachWrd.searchEndDe" />" > <!-- 검색종료일 -->
+ </li>
+ <li><div style="line-height:6px;"> </div><div><spring:message code="comSymLogUlg.userLog.user" /> : </div></li><!-- 사용자-->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="15" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="15" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: 7;">
+ <col style="width: 7;">
+ <col style="width: ;">
+ <col style="width: 5%;">
+ <col style="width: 5%;">
+ <col style="width: 5%;">
+ <col style="width: 5%;">
+ <col style="width: 10%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><spring:message code="comSymLogUlg.userLog.occrrncDe" /></th><!-- 발생일자 -->
+ <th><spring:message code="comSymLogUlg.userLog.user" /></th><!-- 사용자 -->
+ <th><spring:message code="comSymLogUlg.userLog.methodNm" /></th><!-- 메소드명 -->
+ <th><spring:message code="comSymLogUlg.userLog.create" /></th><!-- 생성 -->
+ <th><spring:message code="comSymLogUlg.userLog.modify" /></th><!-- 수정 -->
+ <th><spring:message code="comSymLogUlg.userLog.view" /></th><!-- 조회 -->
+ <th><spring:message code="comSymLogUlg.userLog.delete" /></th><!-- 삭제 -->
+ <th><spring:message code="comSymLogUlg.userLog.detail" /></th><!-- 상세보기 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="result" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <fmt:parseDate value="${result.occrrncDe}" var='occrrncDe_' pattern = "yyyyMMdd" scope="page"/>
+ <td><fmt:formatDate value="${occrrncDe_}" pattern = "yyyy-MM-dd" /></td>
+ <td><c:out value='${result.rqsterNm}'/></td>
+ <td><c:out value='${result.methodNm}'/></td>
+ <td><c:out value='${result.creatCo}'/></td>
+ <td><c:out value='${result.updtCo}'/></td>
+ <td><c:out value='${result.rdCnt}'/></td>
+ <td><c:out value='${result.deleteCo}'/></td>
+ <td>
+ <img src="<c:url value='/images/egovframework/com/cmm/btn/btn_search.gif'/>" class="cursor" onclick="fn_egov_inquire_userLog('<c:out value="${result.occrrncDe}"/>', '<c:out value="${result.rqesterId}"/>', '<c:out value="${result.srvcNm}"/>', '<c:out value="${result.methodNm}"/>'); return false;" alt="<spring:message code="title.detail" />" title="<spring:message code="title.detail" />"></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+</div>
+
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogDetail.jsp (revision 7)
@@ -0,0 +1,104 @@
+<%
+/**
+ * @Class Name : EgovSysLogDetail.jsp
+ * @Description : 사용자 로그 정보 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리, 경로수정(sym.log -> sym.log.ulg)
+ * @ 2017.09.17 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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 = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
+<c:set var="pageTitle"><spring:message code="comSymLogUlg.userLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/popup_com.css' />">
+<script type="text/javascript">
+</script>
+</head>
+<body>
+
+<div class="popup">
+ <!-- 타이틀 -->
+ <h1>${pageTitle} <spring:message code="title.detail" /></h1>
+
+ <!-- 상세조회 -->
+ <table class="popwTable">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 발생일자 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.occrrncDe" /></th>
+ <fmt:parseDate value="${result.occrrncDe}" var='occrrncDe_' pattern = "yyyyMMdd" scope="page"/>
+ <td class="left"><fmt:formatDate value="${occrrncDe_}" pattern = "yyyy-MM-dd" /></td>
+ </tr>
+ <!-- 사용자 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.user" /></th>
+ <td class="left"><c:out value="${result.rqsterNm}"/></td>
+ </tr>
+ <!-- 서비스명 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.serviceNm" /></th>
+ <td class="left"><c:out value="${result.srvcNm}"/></td>
+ </tr>
+ <!-- 메소드명 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.methodNm" /></th>
+ <td class="left"><c:out value="${result.methodNm}"/></td>
+ </tr>
+ <!-- 생성 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.create" /></th>
+ <td class="left"><c:out value="${result.creatCo}"/></td>
+ </tr>
+ <!-- 수정 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.modify" /></th>
+ <td class="left"><c:out value="${result.updtCo}"/></td>
+ </tr>
+ <!-- 조회 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.view" /></th>
+ <td class="left"><c:out value="${result.rdCnt}"/></td>
+ </tr>
+ <!-- 삭제 -->
+ <tr>
+ <th><spring:message code="comSymLogUlg.userLog.delete" /></th>
+ <td class="left"><c:out value="${result.deleteCo}"/></td>
+ </tr>
+
+
+ </tbody>
+ </table>
+ <!-- 닫기 버튼 -->
+ <div class="btn">
+ <button class="btn_style3" onclick="window.close()" title="<spring:message code="button.close" />"><spring:message code="button.close" /></button><!-- 닫기 -->
+ <div style="clear:both;"></div>
+ </div>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/ulg/EgovUserLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogList.jsp (revision 7)
@@ -0,0 +1,210 @@
+<%
+/**
+ * @Class Name : EgovSysLogList.jsp
+ * @Description : 시스템 로그 정보목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리, 경로수정(sym.log -> sym.log.lgm)
+ * @ 2011.09.14 서준식 검색 후 화면에 검색일자 표시안되는 오류 수정
+ * @ 2017.09.17 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comSymLogLgm.sysLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.SysLogForm.searchWrd.focus();
+}
+/* ********************************************************
+ * 달력
+ ******************************************************** */
+function fn_egov_init_date(){
+
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+}
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.SysLogForm.pageIndex.value = pageNo;
+ document.SysLogForm.action = "<c:url value='/sym/log/lgm/SelectSysLogList.do'/>";
+ document.SysLogForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_sysLog(){
+ var vFrom = document.SysLogForm;
+
+ if(vFrom.searchEndDe.value != ""){
+ if(vFrom.searchBgnDe.value > vFrom.searchEndDe.value){
+ alert("<spring:message code="comSymLogLgm.validate.dateCheck" />"); //검색조건의 시작일자가 종료일자보다 늦습니다. 검색조건 날짜를 확인하세요!
+ return;
+ }
+ }else{
+ vFrom.searchEndDe.value = "";
+ }
+
+ vFrom.pageIndex.value = "1";
+ vFrom.action = "<c:url value='/sym/log/lgm/SelectSysLogList.do'/>";
+ vFrom.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_sysLog(requstId) {
+ var width = 850;
+ var height = 450;
+ var top = 0;
+ var left = 0;
+ var url = "<c:url value='/sym/log/lgm/SelectSysLogDetail.do' />?requstId="+requstId;
+ var name = "sysLogDetailPopup"
+ var openWindows = window.open(url,name, "width="+width+",height="+height+",top="+top+",left="+left+",toolbar=no,status=no,location=no,scrollbars=yes,menubar=no,resizable=yes");
+}
+</script>
+<style>
+.board_list tbody td img{align: middle;}
+</style>
+</head>
+<body onload="fn_egov_init(); fn_egov_init_date();" >
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="SysLogForm" action="<c:url value='/sym/log/lgm/SelectSysLogList.do'/>" method="post" onSubmit="fn_egov_search_sysLog(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+ <!-- 검색영역 -->
+ <!-- 발생일자 선택 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <spring:message code="comSymLogLgm.sysLog.occrrncDe" /> : <!-- 발생일자 -->
+ <input type="text" name="searchBgnDe" id="searchBgnDe" size="15" maxlength="10" value="${searchVO.searchBgnDe}" title="<spring:message code="comSymLogLgm.seachWrd.searchBgnDe" />" > ~ <!-- 검색시작일 -->
+ <input type="text" name="searchEndDe" id="searchEndDe" size="15" maxlength="10" value="${searchVO.searchEndDe}" title="<spring:message code="comSymLogLgm.seachWrd.searchEndDe" />" > <!-- 검색종료일 -->
+ </li>
+ <li><div style="line-height:6px;"> </div><div><spring:message code="comSymLogLgm.sysLog.processSeCode" /> : </div></li><!-- 처리구분-->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="15" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="15" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: ;">
+ <col style="width: 15%;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ <col style="width: 10;">
+ <col style="width: 10%;">
+ <col style="width: 10%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><spring:message code="comSymLogLgm.sysLog.reqId" /></th><!-- 요청ID -->
+ <th><spring:message code="comSymLogLgm.sysLog.occrrncDe" /></th><!-- 발생일자 -->
+ <th><spring:message code="comSymLogLgm.sysLog.methodNm" /></th><!-- 메소드명 -->
+ <th><spring:message code="comSymLogLgm.sysLog.processSeCode" /></th><!-- 처리구분 -->
+ <th><spring:message code="comSymLogLgm.sysLog.processTime" /></th><!-- 처리시간 -->
+ <th><spring:message code="comSymLogLgm.sysLog.rqesterId" /></th><!-- 요청자 -->
+ <th><spring:message code="comSymLogLgm.sysLog.detail" /></th><!-- 상세보기 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="result" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value='${result.requstId}'/></td>
+ <td><c:out value='${fn:substring(result.occrrncDe,0,19)}'/></td>
+ <td><c:out value='${result.methodNm}'/></td>
+ <td><c:out value='${result.processSeCodeNm}'/></td>
+ <td><c:out value='${result.processTime}'/></td>
+ <td><c:out value='${result.rqsterNm}'/></td>
+ <td>
+ <img src="<c:url value='/images/egovframework/com/cmm/btn/btn_search.gif'/>" class="cursor" onclick="fn_egov_inquire_sysLog('<c:out value="${result.requstId}"/>'); return false;" alt="<spring:message code="title.detail" />" title="<spring:message code="title.detail" />">
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+</div>
+
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogDetail.jsp (revision 7)
@@ -0,0 +1,102 @@
+<%
+/**
+ * @Class Name : EgovSysLogDetail.jsp
+ * @Description : 시스템 로그 정보 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리, 경로수정(sym.log -> sym.log.lgm)
+ * @ 2017.09.17 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"%>
+<c:set var="pageTitle"><spring:message code="comSymLogLgm.sysLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/popup_com.css' />">
+<script type="text/javascript">
+</script>
+</head>
+<body>
+
+<div class="popup">
+ <!-- 타이틀 -->
+ <h1>${pageTitle} <spring:message code="title.detail" /></h1>
+
+ <!-- 상세조회 -->
+ <table class="popwTable">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 요청ID -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.reqId" /></th>
+ <td class="left"><c:out value="${result.requstId}"/></td>
+ </tr>
+ <!-- 발생일자 -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.occrrncDe" /></th>
+ <td class="left"><c:out value="${fn:substring(result.occrrncDe,0,19)}"/></td>
+ </tr>
+ <!-- 서비스명 -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.serviceNm" /></th>
+ <td class="left"><c:out value="${result.srvcNm}"/></td>
+ </tr>
+ <!-- 메소드명 -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.methodNm" /></th>
+ <td class="left"><c:out value="${result.methodNm}"/></td>
+ </tr>
+ <!-- 처리구분 -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.processSeCode" /></th>
+ <td class="left"><c:out value="${result.processSeCodeNm}"/></td>
+ </tr>
+ <!-- 처리시간 -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.processTime" /></th>
+ <td class="left"><c:out value="${result.processTime}"/></td>
+ </tr>
+ <!-- 요청자 -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.rqesterId" /></th>
+ <td class="left"><c:out value="${result.rqsterNm}"/></td>
+ </tr>
+ <!-- 요청자IP -->
+ <tr>
+ <th><spring:message code="comSymLogLgm.sysLog.rqesterIp" /></th>
+ <td class="left"><c:out value="${result.rqesterIp}"/></td>
+ </tr>
+
+
+ </tbody>
+ </table>
+ <!-- 닫기 버튼 -->
+ <div class="btn">
+ <button class="btn_style3" onclick="window.close()" title="<spring:message code="button.close" />"><spring:message code="button.close" /></button><!-- 닫기 -->
+ <div style="clear:both;"></div>
+ </div>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/lgm/EgovSysLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogList.jsp (revision 7)
@@ -0,0 +1,207 @@
+<%
+/**
+ * @Class Name : EgovWebLogList.jsp
+ * @Description : 웹로그 정보목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리로 경로 수정(sym.log -> sym.log.wlg)
+ * @ 2011.09.14 서준식 검색 후 화면에 검색일자 표시안되는 오류 수정
+ * @ 2017.09.20 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comSymLogWlg.webLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.WebLogForm.searchWrd.focus();
+}
+/* ********************************************************
+ * 달력
+ ******************************************************** */
+function fn_egov_init_date(){
+
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+}
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.WebLogForm.pageIndex.value = pageNo;
+ document.WebLogForm.action = "<c:url value='/sym/log/wlg/SelectWebLogList.do'/>";
+ document.WebLogForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_webLog(){
+ var vFrom = document.WebLogForm;
+
+ if(vFrom.searchEndDe.value != ""){
+ if(vFrom.searchBgnDe.value > vFrom.searchEndDe.value){
+ alert("<spring:message code="comSymLogWlg.validate.dateCheck" />"); //검색조건의 시작일자가 종료일자보다 늦습니다. 검색조건 날짜를 확인하세요!
+ return;
+ }
+ }else{
+ vFrom.searchEndDe.value = "";
+ }
+
+ vFrom.pageIndex.value = "1";
+ vFrom.action = "<c:url value='/sym/log/wlg/SelectWebLogList.do'/>";
+ vFrom.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_detail_webLog(requstId) {
+ var width = 850;
+ var height = 330;
+ var top = 0;
+ var left = 0;
+ var url = "<c:url value='/sym/log/wlg/SelectWebLogDetail.do' />?requstId="+requstId;
+ var name = "WebLogDetailPopup"
+ var openWindows = window.open(url,name, "width="+width+",height="+height+",top="+top+",left="+left+",toolbar=no,status=no,location=no,scrollbars=yes,menubar=no,resizable=yes");
+}
+</script>
+<style>
+.board_list tbody td img{align: middle;}
+</style>
+</head>
+
+<body onload="fn_egov_init(); fn_egov_init_date();" >
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form name="WebLogForm" action="<c:url value='/sym/log/wlg/SelectWebLogList.do'/>" method="post" onSubmit="fn_egov_search_webLog(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+ <!-- 검색영역 -->
+ <!-- 발생일자 선택 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <spring:message code="comSymLogWlg.webLog.occrrncDe" /> : <!-- 발생일자 -->
+ <input type="text" name="searchBgnDe" id="searchBgnDe" size="15" maxlength="10" value="${searchVO.searchBgnDe}" title="<spring:message code="comSymLogWlg.seachWrd.searchBgnDe" />" > ~ <!-- 검색시작일 -->
+ <input type="text" name="searchEndDe" id="searchEndDe" size="15" maxlength="10" value="${searchVO.searchEndDe}" title="<spring:message code="comSymLogWlg.seachWrd.searchEndDe" />" > <!-- 검색종료일 -->
+ </li>
+ <li><div style="line-height:6px;"> </div><div><spring:message code="comSymLogWlg.webLog.url" /> : </div></li><!-- URL-->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="15" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="15" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ <col style="width: 15%;">
+ <col style="width: 10%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><spring:message code="comSymLogWlg.webLog.requestId" /></th><!-- 요청ID -->
+ <th><spring:message code="comSymLogWlg.webLog.occrrncDe" /></th><!-- 발생일자 -->
+ <th><spring:message code="comSymLogWlg.webLog.url" /></th><!-- URL -->
+ <th><spring:message code="comSymLogWlg.webLog.requester" /></th><!-- 요청자 -->
+ <th><spring:message code="comSymLogWlg.webLog.requesterIp" /></th><!-- 요청자IP -->
+ <th><spring:message code="comSymLogWlg.webLog.detail" /></th><!-- 상세보기 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="7"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="result" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value='${result.requstId}'/></td>
+ <td><c:out value='${fn:substring(result.occrrncDe,0,19)}'/></td>
+ <td><c:out value='${result.url}'/></td>
+ <td><c:out value='${result.rqsterNm}'/></td>
+ <td><c:out value='${result.rqesterIp}'/></td>
+ <td>
+ <img src="<c:url value='/images/egovframework/com/cmm/btn/btn_search.gif'/>" class="cursor" onclick="fn_egov_detail_webLog('<c:out value="${result.requstId}"/>'); return false;" alt="<spring:message code="title.detail" />" title="<spring:message code="title.detail" />">
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+</div>
+
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogDetail.jsp (revision 7)
@@ -0,0 +1,86 @@
+<%
+/**
+ * @Class Name : EgovWebLogDetail.jsp
+ * @Description : 웹로그 정보 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리, 경로수정(sym.log -> sym.log.wlg)
+ * @ 2017.09.21 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"%>
+<c:set var="pageTitle"><spring:message code="comSymLogWlg.webLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/popup_com.css' />">
+<script type="text/javascript">
+</script>
+</head>
+<body>
+
+<div class="popup">
+ <!-- 타이틀 -->
+ <h1>${pageTitle} <spring:message code="title.detail" /></h1>
+
+ <!-- 상세조회 -->
+ <table class="popwTable">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 요청ID -->
+ <tr>
+ <th><spring:message code="comSymLogWlg.webLog.requestId" /></th>
+ <td class="left"><c:out value="${result.requstId}"/></td>
+ </tr>
+ <!-- 발생일자 -->
+ <tr>
+ <th><spring:message code="comSymLogWlg.webLog.occrrncDe" /></th>
+ <td class="left"><c:out value="${fn:substring(result.occrrncDe,0,19)}"/></td>
+ </tr>
+ <!-- URL -->
+ <tr>
+ <th><spring:message code="comSymLogWlg.webLog.url" /></th>
+ <td class="left"><c:out value="${result.url}"/></td>
+ </tr>
+ <!-- 요청자 -->
+ <tr>
+ <th><spring:message code="comSymLogWlg.webLog.requester" /></th>
+ <td class="left"><c:out value="${result.rqsterNm}"/></td>
+ </tr>
+ <!-- 요청자IP -->
+ <tr>
+ <th><spring:message code="comSymLogWlg.webLog.requesterIp" /></th>
+ <td class="left"><c:out value="${result.rqesterIp}"/></td>
+ </tr>
+
+ </tbody>
+ </table>
+ <!-- 닫기 버튼 -->
+ <div class="btn">
+ <button class="btn_style3" onclick="window.close()" title="<spring:message code="button.close" />"><spring:message code="button.close" /></button><!-- 닫기 -->
+ <div style="clear:both;"></div>
+ </div>
+
+</div>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/wlg/EgovWebLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogList.jsp (revision 7)
@@ -0,0 +1,208 @@
+<%
+/**
+ * @Class Name : EgovloginLogList.jsp
+ * @Description : 접속로그 정보목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리로 경로 수정(sym.log -> sym.log.clg)
+ * @ 2011.09.14 서준식 검색 후 화면에 검색일자 표시안되는 오류 수정
+ * @ 2017.09.21 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comSymLogClg.loginLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.LoginLogForm.searchWrd.focus();
+}
+/* ********************************************************
+ * 달력
+ ******************************************************** */
+function fn_egov_init_date(){
+
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+}
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.LoginLogForm.pageIndex.value = pageNo;
+ document.LoginLogForm.action = "<c:url value='/sym/log/clg/SelectLoginLogList.do'/>";
+ document.LoginLogForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_loginLog(){
+ var vFrom = document.LoginLogForm;
+
+ if(vFrom.searchEndDe.value != ""){
+ if(vFrom.searchBgnDe.value > vFrom.searchEndDe.value){
+ alert("<spring:message code="comSymLogClg.validate.dateCheck" />"); //검색조건의 시작일자가 종료일자보다 늦습니다. 검색조건 날짜를 확인하세요!
+ return;
+ }
+ }else{
+ vFrom.searchEndDe.value = "";
+ }
+
+ vFrom.pageIndex.value = "1";
+ vFrom.action = "<c:url value='/sym/log/clg/SelectLoginLogList.do'/>";
+ vFrom.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_detail_loginLog(logId) {
+ var width = 850;
+ var height = 330;
+ var top = 0;
+ var left = 0;
+ var url = "<c:url value='/sym/log/clg/SelectLoginLogDetail.do' />?logId="+logId;
+ var name = "LoginLogDetailPopup"
+ var openWindows = window.open(url,name, "width="+width+",height="+height+",top="+top+",left="+left+",toolbar=no,status=no,location=no,scrollbars=yes,menubar=no,resizable=yes");
+}
+</script>
+<style>
+.board_list tbody td img{align: middle;}
+</style>
+</head>
+
+<body onload="fn_egov_init(); fn_egov_init_date();" >
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="LoginLogForm" action="<c:url value='/sym/log/clg/SelectLoginLogList.do'/>" method="post" onSubmit="fn_egov_search_loginLog(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+ <!-- 검색영역 -->
+ <!-- 발생일자 선택 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <spring:message code="comSymLogClg.loginLog.occrrncDe" /> : <!-- 발생일자 -->
+ <input type="text" name="searchBgnDe" id="searchBgnDe" size="15" maxlength="10" value="${searchVO.searchBgnDe}" title="<spring:message code="comSymLogClg.seachWrd.searchBgnDe" />" > ~ <!-- 검색시작일 -->
+ <input type="text" name="searchEndDe" id="searchEndDe" size="15" maxlength="10" value="${searchVO.searchEndDe}" title="<spring:message code="comSymLogClg.seachWrd.searchEndDe" />" > <!-- 검색종료일 -->
+ </li>
+ <li><div style="line-height:6px;"> </div><div><spring:message code="comSymLogClg.loginLog.loginMthd" /> : </div></li><!-- 로그유형-->
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchWrd" type="text" size="15" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="15" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 5%;">
+ <col style="width: ;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ <col style="width: 10%;">
+ <col style="width: ;">
+ <col style="width: 10%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><spring:message code="comSymLogClg.loginLog.logId" /></th><!-- 로그ID -->
+ <th><spring:message code="comSymLogClg.loginLog.occrrncDe" /></th><!-- 발생일자 -->
+ <th><spring:message code="comSymLogClg.loginLog.loginMthd" /></th><!-- 로그유형 -->
+ <th><spring:message code="comSymLogClg.loginLog.loginNm" /></th><!-- 사용자 -->
+ <th><spring:message code="comSymLogClg.loginLog.loginIp" /></th><!-- 접속IP -->
+ <th><spring:message code="comSymLogClg.loginLog.detail" /></th><!-- 상세보기 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="7"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="result" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value='${result.logId}'/></td>
+ <td><c:out value='${fn:substring(result.creatDt,0,10)}'/></td>
+ <td><c:out value='${result.loginMthd}'/></td>
+ <td><c:out value='${result.loginNm}'/></td>
+ <td><c:out value='${result.loginIp}'/></td>
+ <td>
+ <img src="<c:url value='/images/egovframework/com/cmm/btn/btn_search.gif'/>" class="cursor" onclick="fn_egov_detail_loginLog('<c:out value="${result.logId}"/>'); return false;" alt="<spring:message code="title.detail" />" title="<spring:message code="title.detail" />">
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+</div>
+
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogDetail.jsp (revision 7)
@@ -0,0 +1,86 @@
+<%
+/**
+ * @Class Name : EgovLoginbLogDetail.jsp
+ * @Description : 접속로그 정보 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.11 이삼섭 최초 생성
+ * @ 2011.07.08 이기하 패키지 분리, 경로수정(sym.log -> sym.log.clg)
+ * @ 2017.09.21 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"%>
+<c:set var="pageTitle"><spring:message code="comSymLogClg.loginLog.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/popup_com.css' />">
+<script type="text/javascript">
+</script>
+</head>
+<body>
+
+<div class="popup">
+ <!-- 타이틀 -->
+ <h1>${pageTitle} <spring:message code="title.detail" /></h1>
+
+ <!-- 상세조회 -->
+ <table class="popwTable">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 로그ID -->
+ <tr>
+ <th><spring:message code="comSymLogClg.loginLog.logId" /></th>
+ <td class="left"><c:out value="${result.logId}"/></td>
+ </tr>
+ <!-- 발생일자 -->
+ <tr>
+ <th><spring:message code="comSymLogClg.loginLog.occrrncDe" /></th>
+ <td class="left"><c:out value="${fn:substring(result.creatDt,0,10)}"/></td>
+ </tr>
+ <!-- 로그유형 -->
+ <tr>
+ <th><spring:message code="comSymLogClg.loginLog.loginMthd" /></th>
+ <td class="left"><c:out value="${result.loginMthd}"/></td>
+ </tr>
+ <!-- 사용자명 -->
+ <tr>
+ <th><spring:message code="comSymLogClg.loginLog.loginNm" /></th>
+ <td class="left"><c:out value="${result.loginNm}"/></td>
+ </tr>
+ <!-- 접속IP -->
+ <tr>
+ <th><spring:message code="comSymLogClg.loginLog.loginIp" /></th>
+ <td class="left"><c:out value="${result.loginIp}"/></td>
+ </tr>
+
+ </tbody>
+ </table>
+ <!-- 닫기 버튼 -->
+ <div class="btn">
+ <button class="btn_style3" onclick="window.close()" title="<spring:message code="button.close" />"><spring:message code="button.close" /></button><!-- 닫기 -->
+ <div style="clear:both;"></div>
+ </div>
+
+</div>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/log/clg/EgovLoginLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageRegist.jsp (revision 7)
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType ="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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" %>
+<%
+ /**
+ * @Class Name : EgovBkmkMenuManageRegist.jsp
+ * @Description : 바로가기메뉴관리 등록
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.09.25 윤성록 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통컴포넌트팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymMnuBmm.bkmkMenuManageList.pageTop.title" /></title><!-- 바로가기메뉴등록 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+ <link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+ <script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+ <script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="bkmk" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_regist_bkmkInf(){
+
+ if (!validateBkmk(document.bkmk)){
+ return;
+ }
+
+ if(confirm("<spring:message code='comSymMnuBmm.bkmkMenuManageRegist.validate.confirm.regist' />")){ //등록하시겠습니까?
+ document.bkmk.action = "<c:url value='/sym/mnu/bmm/registBkmkInf.do'/>";
+ document.bkmk.submit();
+ }
+ }
+
+
+ function fn_egov_select_bkmkInfs(){
+ document.bkmk.action = "<c:url value='/sym/mnu/bmm/selectBkmkMenuManageList.do'/>";
+ document.bkmk.submit();
+ }
+
+
+ function fn_egov_inqire_menu(){
+ var retVal;
+ var width = 780;
+ var height = 700;
+ var url = "<c:url value='/sym/mnu/bmm/openPopup.do?requestUrl=/sym/mnu/bmm/selectMenuList.do'/>&width="+(width-20)+"&height="+(height-20);
+ var openParam = "dialogWidth: "+width+"px; dialogHeight: "+height+"px; resizable: 0, scroll: 1, center: 1";
+
+ retVal = window.showModalDialog(url,"p_userInqire", openParam);
+
+ if(retVal != null){
+
+ var tmp = retVal.split(",");
+
+ document.bkmk.menuId.value = tmp[0];
+ document.bkmk.menuNm.value = tmp[1];
+
+ document.bkmk.action = "<c:url value='/sym/mnu/bmm/addBkmkInf.do'/>";
+ document.bkmk.submit();
+ }
+ }
+
+ function modalDialogCallback(retVal) {
+ if(retVal != null){
+
+ var tmp = retVal.split(",");
+
+ document.bkmk.menuId.value = tmp[0];
+ document.bkmk.menuNm.value = tmp[1];
+
+ document.bkmk.action = "<c:url value='/sym/mnu/bmm/addBkmkInf.do'/>";
+ document.bkmk.submit();
+ }
+ }
+
+</script>
+<script type="text/javascript">
+ $(document).ready(function () {
+ $('#popupInqireMenu').click(function (e) {
+ e.preventDefault();
+
+ var pagetitle = $(this).attr("title");
+ var page = "<c:url value='/sym/mnu/bmm/selectMenuList.do'/>";
+
+ var $dialog = $('<div></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ height: 750,
+ width: 770,
+ title: pagetitle
+ });
+ $dialog.dialog('open');
+ });
+
+ });
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="bkmk" method="post" action = "<c:url value='/sym/mnu/bmm/registBkmkInf.do'/>">
+<input type = "hidden" name = "menuId" value = '<c:out value="${bkmkMenuManage.menuId}" />'>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymMnuBmm.bkmkMenuManageRegist.pageTop.title" /></h2><!-- 바로가기메뉴등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymMnuBmm.bkmkMenuManageRegist.menuName" /> <span class="pilsu">*</span></th><!-- 메뉴명 -->
+ <td class="left">
+ <input name="menuNm" type="text" size="30" value="<c:out value="${bkmkMenuManage.menuNm}" escapeXml="false" />" maxlength="60" style="width: 237px" readonly="readonly" class="readOnlyClass" title="메뉴명입력"/>
+ <!-- <a href="javascript:fn_egov_inqire_menu();" style="selector-dummy: expression(this.hideFocus=false);"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />"
+ style="vertical-align: middle" alt="<spring:message code="comSymMnuBmm.bkmkMenuManageRegist.selectMenu" />" title="<spring:message code="comSymMnuBmm.bkmkMenuManageRegist.selectMenu" />"></a> --><!-- 메뉴선택 -->
+ <a id="popupInqireMenu" title="메뉴선택" style="selector-dummy: expression(this.hideFocus=false);"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />"
+ style="vertical-align: middle" alt="<spring:message code="comSymMnuBmm.bkmkMenuManageRegist.selectMenu" />" title="<spring:message code="comSymMnuBmm.bkmkMenuManageRegist.selectMenu" />"></a>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuBmm.bkmkMenuManageRegist.menuURL" /> <span class="pilsu">*</span></th><!-- 메뉴 URL -->
+ <td class="left">
+ <input name="progrmStrePath" type="text" size="30" value="<c:out value="${bkmkMenuManage.progrmStrePath}"/>" maxlength="90" style="width: 235px" readonly="readonly" class="readOnlyClass" title="<spring:message code="comSymMnuBmm.bkmkMenuManageRegist.enterMenuURL" />"/><!-- 메뉴URL입력 -->
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.save" />" onclick="fn_egov_regist_bkmkInf(); return false;" /><!-- 저장 -->
+ <span class="btn_s"><a href="<c:url value='/sym/mnu/bmm/selectBkmkMenuManageList.do'/>?pageIndex=<c:out value='${searchVO.pageIndex}'/>" onclick="fn_egov_select_bkmkInfs(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuPopup.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuPopup.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuPopup.jsp (revision 7)
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovBkmkMenuPopup.jsp
+ * @Description : 바로가기메뉴 등록을 위한 메뉴목록
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2009.09.25 윤성록 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통컴포넌트팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymMnuBmm.BkmkMenuPopup.title" /></title><!-- 메뉴목록 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_menuInfo('1');
+ }
+ }
+ function fn_egov_return_menuInfo(menuId, menuNm){
+ var retVal = menuId +","+ menuNm;
+ //parent.fn_egov_returnValue(retVal);
+ parent.modalDialogCallback(retVal);
+ }
+
+ function fn_egov_select_menuInfo(pageIndex){
+
+ document.frm.pageIndex.value = pageIndex;
+ document.frm.action = "<c:url value='/sym/mnu/bmm/selectMenuList.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_close(){
+ parent.closeWindow();
+ }
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1><spring:message code="comSymMnuBmm.BkmkMenuPopup.pageTop.title" /></h1><!-- 메뉴목록 -->
+ <span>※ "1100. 메뉴생성관리" 메뉴에서 "메뉴생성"을 먼저 해야 목록에서 확인이 가능합니다.</span>
+ <form name="frm" action ="<c:url value='/sym/mnu/bmm/selectMenuList.do'/>" method="post">
+ <input type="hidden" name="PopFlag" value="Y" >
+ <input type="hidden" name="searchCnd" value ="0" >
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymMnuBmm.bkmkMenuManageRegist.menuName" /> : </label><!-- 메뉴명 -->
+
+ <input class="s_input2 vat" name="searchWrd" type="text" value='<c:out value="${bkmkMenuManageVO.searchWrd}"/>' size="35" maxlength="35" onkeypress="press(event);" title="<spring:message code="comSymMnuBmm.bkmkMenuManageList.enterSearchName" />" /><!-- 검색단어입력 -->
+
+ <input class="s_btn" type="submit" value="<spring:message code="title.inquire" />" title="<spring:message code="title.inquire" />" onclick="fn_egov_select_menuInfo('1'); return false;" /><!-- 조회 -->
+ </li>
+ </ul>
+ </div>
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="" />
+ <col style="width:25%" />
+ <col style="width:8%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comSymMnuBmm.bkmkMenuManageList.No" /></th><!-- 번호 -->
+ <th scope="col"><spring:message code="comSymMnuBmm.bkmkMenuManageRegist.menuName" /></th><!-- 메뉴명 -->
+ <th scope="col"><spring:message code="comSymMnuBmm.bkmkMenuManageList.menuDC" /></th><!-- 메뉴DC -->
+ <th scope="col"><spring:message code="comSymMnuBmm.bkmkMenuManageList.select" /></th><!-- 선택 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.menuNm}" /></td>
+ <td><c:out value="${result.menuDc}" /></td>
+ <td>
+ <input class="btn01" type="submit" name="selectUser" value="선택" onclick="fn_egov_return_menuInfo('<c:out value="${result.menuId}" />','${result.menuNm}');" />
+ </td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="4" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_menuInfo"/>
+ </ul>
+ </div>
+
+</div>
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuPopup.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBookMarkMenuPopup.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBookMarkMenuPopup.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBookMarkMenuPopup.jsp (revision 7)
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovBookMarkMenuPopup.jsp
+ * @Description : 바로가기메뉴 미리보기 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.09.25 윤성록 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통컴포넌트팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ */
+
+ /* Image Path 설정 */
+--%>
+<%@ page 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="ImgUrl" value="/images/egovframework/com/sym/mnu/bmm/"/>
+<c:set var="CssUrl" value="/css/egovframework/com/sym/mnu/bmm/"/>
+<%
+String imagePath_icon = "/images/egovframework/com/sym/mnu/bmm/icon/";
+String imagePath_button = "/images/egovframework/com/sym/mnu/bmm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymMnuBmm.BookMarkMenuPopup.title" /></title><!-- 바로가기메뉴미리보기 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+
+<script type="text/javascript">
+
+/* ********************************************************
+ * 파일검색 화면 호출 함수
+ ******************************************************** */
+
+function fn_egov_move(progrmStrePath){
+
+ var retVal = progrmStrePath;
+ parent.fn_egov_returnValue(retVal);
+
+}
+
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="menuListForm" action ="" method="post">
+<input type="hidden" name="req_RetrunPath" value="<c:url value='/sym/mnu/bmm/EgovMenuList'/>">
+
+<div class="board">
+ <h1><spring:message code="comSymMnuBmm.BookMarkMenuPopup.pageTop.title" /></h1><!-- 바로가기 메뉴관리 -->
+
+ <h2><img src="<c:url value='/images/egovframework/com/cmm/utl/menu_base.gif' />" alt="base icon" /> <spring:message code="comSymMnuBmm.BookMarkMenuPopup.shortCut" /></h2><!-- 바로가기 -->
+
+ <table class="e002">
+ <colgroup>
+ <col style="width:20px"/>
+ <col style=""/>
+ </colgroup>
+ <c:forEach var="result" items="${list_menulist}" varStatus="status">
+ <tr>
+ <td><!-- 왼편여백 --></td>
+ <td>
+ <img src="<c:url value='/images/egovframework/com/cmm/utl/menu_page.gif' />" alt="menu_page icon" />
+ <a href="" onclick="fn_egov_move('<c:url value="${result.progrmStrePath}"/>'); return false;">
+ <c:out value="${result.menuNm}" escapeXml="false"/></a>
+ </td>
+ </tr>
+ </c:forEach>
+ </table>
+</div>
+
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBookMarkMenuPopup.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageList.jsp (revision 7)
@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgoBkmkMenuManageList.jsp
+ * @Description : 등록한 바로가기메뉴 목록 조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.09.25 윤성록 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ * 2018.10.05 신용호 showModalDialogCallback 추가
+ *
+ * @author 공통컴포넌트개발팀 윤성록
+ * @since 2009.09.25
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymMnuBmm.bkmkMenuManageList.title" /></title><!-- 바로가기 메뉴관리 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/showModalDialog.js'/>" ></script>
+<script type="text/javascript">
+
+
+/* ********************************************************
+ * 모두선택 처리 함수
+ ******************************************************** */
+function fCheckAll() {
+ var checkField = document.frm.check1;
+ if(document.frm.all_check.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+/* ********************************************************
+ * 멀티삭제 처리 함수
+ ******************************************************** */
+function fn_egov_deleteBkmkInf(){
+ var checkField = document.frm.check1;
+ var menuId = document.frm.checkMenuId;
+ var userId = document.frm.checkUserId;
+ var checkMenuIds = "";
+
+ var checkedCount = 0;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkMenuIds += ((checkedCount==0? "" : ",") + menuId[i].value);
+ checkedCount++;
+ }
+ }
+ if(checkedCount == 0){
+ alert("선택된 메뉴가 없습니다.");
+ return;
+ }
+ } else{
+ if(checkField.checked) {
+ checkMenuIds = menuId.value;
+ }else{
+ alert("선택된 메뉴가 없습니다.");
+ return;
+ }
+ }
+ }
+
+ if(confirm("삭제하시겠습니까?")){
+ document.frm.checkMenuIds.value=checkMenuIds;
+ document.frm.action = "<c:url value='/sym/mnu/bmm/EgovBkmkMenuManageDelete.do'/>";
+ document.frm.submit();
+ }
+}
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_bkmkInfs('1');
+ }
+ }
+
+ function fn_egov_select_bkmkInfs(pageNo){
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/sym/mnu/bmm/selectBkmkMenuManageList.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_add_bkmkInfs(){
+ document.frm.action = "<c:url value='/sym/mnu/bmm/addBkmkInf.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_preview_bkmkInfs(){
+ var retVal;
+ var url = "<c:url value='/sym/mnu/bmm/openPopup.do?requestUrl=/sym/mnu/bmm/previewBkmkInf.do&width=850&height=360'/>";
+ var openParam = "dialogWidth: 850px; dialogHeight: 360px; resizable: 0, scroll: 1, center: 1";
+ retVal = window.showModalDialog(url,"p_userInqire", openParam);
+
+ if(retVal != null){
+ document.frm.action = retVal;
+ document.frm.submit();
+ }
+ }
+
+ function showModalDialogCallback(src) {
+ alert(src);
+ }
+
+</script>
+
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1><spring:message code="comSymMnuBmm.bkmkMenuManageRegist.title" /></h1><!-- 바로가기 메뉴관리 -->
+
+ <form name="frm" action = "<c:url value='/sym/mnu/bmm/selectBkmkMenuManageList.do' />" method="post">
+ <input type="hidden" name="checkMenuIds" value = "" >
+ <input type="hidden" name="searchCnd" value ="0" >
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymMnuBmm.bkmkMenuManageList.menuName" /> : </label><!-- 메뉴명 -->
+ <input class="s_input2 vat" name="searchWrd" type="text" value='<c:out value="${searchVO.searchWrd}"/>' size="35" maxlength="35" onkeypress="press(event);" title="<spring:message code="comSymMnuBmm.bkmkMenuManageList.enterSearchName" />" style="width: 200px" /><!-- 검색단어입력 -->
+ <input class="s_btn" type="submit" value="<spring:message code="title.inquire" />" title="<spring:message code="title.inquire" />" onclick="fn_egov_select_bkmkInfs('1'); return false;" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/sym/mnu/bmm/openPopup.do?requestUrl=/sym/mnu/bmm/previewBkmkInf.do&width=850&height=360'/>" onclick="fn_egov_preview_bkmkInfs(); return false;" title="<spring:message code="comSymMnuBmm.bkmkMenuManageList.newWindow" />"><spring:message code="comSymMnuBmm.bkmkMenuManageList.preview" /></a></span><!-- 새창 --><!-- 미리보기 -->
+ <span class="btn_b"><a href="<c:url value= 'fn_egov_deleteBkmkInf()'/>" onclick="fn_egov_deleteBkmkInf(); return false;" title="<spring:message code="title.delete" />"><spring:message code="title.delete" /></a></span><!-- 삭제 -->
+ <span class="btn_b"><a href="<c:url value='/sym/mnu/bmm/addBkmkInf.do'/>" onclick="fn_egov_add_bkmkInfs(); return false;" title="<spring:message code="button.create" />"><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:40%" />
+ <col style="width:50%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><input type="checkbox" name="all_check" class="check2" onclick = "fCheckAll();"></th>
+ <th scope="col"><spring:message code="comSymMnuBmm.bkmkMenuManageList.menuName" /></th><!-- 메뉴명 -->
+ <th scope="col"><spring:message code="comSymMnuBmm.bkmkMenuManageList.menuURL" /></th><!-- 메뉴URL -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><input type="checkbox" name="check1" class="check2">
+ <input name="checkMenuId" type="hidden" value="<c:out value='${result.menuId}'/>">
+ <input name="checkUserId" type="hidden" value="<c:out value='${result.userId}'/>"></td>
+ <td>
+ <span><c:out value="${result.menuNm}" escapeXml="false"/></span>
+ </td>
+ <td><c:out value="${result.progrmStrePath}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td class="lt_text3" nowrap colspan="3" ><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_bkmkInfs"/>
+ </ul>
+ </div>
+
+ </form>
+
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovBkmkMenuManageList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovModalPopupFrame.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovModalPopupFrame.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovModalPopupFrame.jsp (revision 7)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovModalPopupFrame.jsp
+ * @Description : 모달 팝업을 위한 외부 프레임
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.04.06 이삼섭 최초 생성
+ * @ 2020.07.07 윤주호 43L <c:out> 중복 따옴표 문제 수정
+ *
+ * @author 공통서비스 개발팀 이삼섭
+ * @since 2009.04.06
+ * @version 1.0
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/showModalDialogCallee.js'/>" ></script>
+<script type="text/javascript">
+ function fn_egov_returnValue(retVal){
+ setReturnValue(retVal);
+
+ window.returnValue = retVal;
+ window.close();
+ }
+
+ function closeWindow(){
+ window.close();
+ }
+</script>
+<title>선택 목록</title>
+</head>
+<body>
+ <iframe id="popupFrame" src="<c:url value='${fn:escapeXml(requestUrl)}' />" width="${width}" height="${height}" align="middle" frameborder="0" title="선택목록팝업창호출"></iframe>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/bmm/EgovModalPopupFrame.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreat.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreat.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreat.jsp (revision 7)
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovMenuCreat.jsp
+ * @Description : 메뉴생성 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ * 2019.12.11 신용호 KISA 보안약점 조치 (크로스사이트 스크립트)
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+
+ /* Image Path 설정 */
+// String imagePath_icon = "/images/egovframework/com/sym/mnu/mcm/icon/";
+// String imagePath_button = "/images/egovframework/com/sym/mnu/mcm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymMnuMpm.MenuCreat.title" /></title><!-- 메뉴생성 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+var imgpath = "<c:url value='/images/egovframework/com/cmm/utl/'/>";
+</script>
+<script language="javascript1.2" type="text/javaScript" src="<c:url value='/js/egovframework/com/sym/mnu/mcm/EgovMenuCreat.js' />"></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 조회 함수
+ ******************************************************** */
+function selectMenuCreatTmp() {
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+/* ********************************************************
+ * 멀티입력 처리 함수
+ ******************************************************** */
+function fInsertMenuCreat() {
+ var checkField = document.menuCreatManageForm.checkField;
+ var checkMenuNos = "";
+ var checkedCount = 0;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkMenuNos += ((checkedCount==0? "" : ",") + checkField[i].value);
+ checkedCount++;
+ console.log("checkMenuNos = "+checkMenuNos);
+ console.log("checkedCount = "+checkedCount);
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ checkMenuNos = checkField.value;
+ }
+ }
+ }
+ if(checkedCount == 0){
+ alert("선택된 메뉴가 없습니다.");
+ return false;
+ }
+ document.menuCreatManageForm.checkedMenuNoForInsert.value=checkMenuNos;
+ document.menuCreatManageForm.checkedAuthorForInsert.value=document.menuCreatManageForm.authorCode.value;
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatInsert.do'/>";
+ document.menuCreatManageForm.submit();
+}
+/* ********************************************************
+ * 메뉴사이트맵 생성 화면 호출
+ ******************************************************** */
+function fMenuCreatSiteMap() {
+ id = document.menuCreatManageForm.authorCode.value;
+ window.open("<c:url value='/sym/mnu/mcm/EgovMenuCreatSiteMapSelect.do'/>?authorCode="+id,'Pop_SiteMap','scrollbars=yes, width=550, height=700');
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+
+<style type="text/css">
+.tree {margin-bottom:30px; padding:10px; border-top:2px solid #1a90d8; border-bottom:2px solid #1a90d8; background:#f7f7f7; }
+.tree input[type=checkbox] {margin-right:2px; vertical-align:-2px; }
+.tree img {vertical-align:-4px; }
+</style>
+
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form name="menuCreatManageForm" action ="<c:url value='/sym/mnu/mcm/EgovMenuCreatSiteMapSelect.do' />" method="post">
+<input name="checkedMenuNoForInsert" type="hidden" >
+<input name="checkedAuthorForInsert" type="hidden" >
+
+<div class="board">
+ <h1><spring:message code="comSymMnuMpm.MenuCreat.pageTop.title" /></h1><!-- 메뉴생성 -->
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymMnuMpm.MenuCreat.authCode" /> : </label><!-- 권한코드 -->
+ <input class="s_input2 vat" name="authorCode" type="text" value="<c:out value='${resultVO.authorCode}'/>" maxlength="30" title="<spring:message code="comSymMnuMpm.MenuCreat.authCode" />" readonly="readonly" style="width:250px" /><!-- 권한코드 -->
+
+ <span class="btn_b"><a href="#LINK" onclick="fInsertMenuCreat(); return false;" title="<spring:message code="comSymMnuMpm.MenuCreat.createMenu" />"><spring:message code="comSymMnuMpm.MenuCreat.createMenu" /></a></span><!-- 메뉴생성 -->
+ <input class="s_btn" type="submit" value="<spring:message code="comSymMnuMpm.MenuCreat.createSiteMap" />" title="<spring:message code="comSymMnuMpm.MenuCreat.createSiteMap" />" onclick="fMenuCreatSiteMap(); return false;" /><!-- 사이트맵생성 -->
+ </li>
+ </ul>
+ </div>
+
+ <c:forEach var="result1" items="${list_menulist}" varStatus="status" >
+ <input type="hidden" name="tmp_menuNmVal" value="${result1.menuNo}|${result1.upperMenuId}|${result1.menuNm}|${result1.progrmFileNm}|${result1.chkYeoBu}|">
+ </c:forEach>
+
+ <div class="tree">
+ <script language="javascript" type="text/javaScript">
+ var chk_Object = true;
+ var chk_browse = "";
+ if (eval(document.menuCreatManageForm.authorCode)=="[object]") chk_browse = "IE";
+ if (eval(document.menuCreatManageForm.authorCode)=="[object NodeList]") chk_browse = "Fox";
+ if (eval(document.menuCreatManageForm.authorCode)=="[object Collection]") chk_browse = "safai";
+
+ var Tree = new Array;
+ if(chk_browse=="IE"&&eval(document.menuCreatManageForm.tmp_menuNmVal)!="[object]"){
+ alert("<spring:message code="comSymMnuMpm.MenuCreat.validate.menuNmVal.none1" />"); //메뉴 목록 데이타가 존재하지 않습니다.
+ chk_Object = false;
+ }
+ if(chk_browse=="Fox"&&eval(document.menuCreatManageForm.tmp_menuNmVal)!="[object NodeList]"){
+ alert("<spring:message code="comSymMnuMpm.MenuCreat.validate.menuNmVal.none1" />"); //메뉴 목록 데이타가 존재하지 않습니다.
+ chk_Object = false;
+ }
+ if(chk_browse=="safai"&&eval(document.menuCreatManageForm.tmp_menuNmVal)!="[object Collection]"){
+ alert("<spring:message code="comSymMnuMpm.MenuCreat.validate.menuNmVal.none1" />"); //메뉴 목록 데이타가 존재하지 않습니다.
+ chk_Object = false;
+ }
+ if( chk_Object ){
+ for (var j = 0; j < document.menuCreatManageForm.tmp_menuNmVal.length; j++) {
+ Tree[j] = document.menuCreatManageForm.tmp_menuNmVal[j].value;
+ }
+ createTree(Tree);
+ }else{
+ alert("<spring:message code="comSymMnuMpm.MenuCreat.validate.menuNmVal.none2" />"); //메뉴가 존재하지 않습니다. 메뉴 등록 후 사용하세요.
+ window.close();
+ }
+ </script>
+ </div>
+
+</div>
+
+
+
+
+
+
+
+<!-- 개발로직 최종 테스트 후 아래 소스를 삭제해주세요 -->
+
+<div id="border" style="width:730px">
+<table border="0">
+ <tr>
+ <td width="700">
+<!-- ********** 여기서 부터 본문 내용 *************** -->
+
+
+
+<div id="main" style="display:width:700px;">
+
+<%-- <table width="717" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="40%" class="title_left">
+ <h1><img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif'/>" width="16" height="16" hspace="3" alt=""> 메뉴생성</h1></td>
+ <td width="10%"></td>
+ <td width="25%"></td>
+ <th width="25%">
+ <table border="0" cellspacing="0" cellpadding="0" align="right">
+ <tr>
+ <td width="10"></td>
+ <td><span class="button"><a href="#LINK" onclick="fInsertMenuCreat(); return false;">메뉴생성</a></span></td>
+ <td width="5%"></td>
+ <td><span class="button"><input type="submit" value="사이트맵생성" onclick="fMenuCreatSiteMap(); return false;"></span></td>
+ </tr>
+ </table>
+ </th>
+ </tr>
+</table>
+
+<table width="717" border="0" cellpadding="0" cellspacing="1">
+ <tr>
+ <td width="100%">
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="table-register" summary="메뉴생성 검색조건" >
+ <caption>메뉴생성 검색조건 </caption>
+ <tr>
+ <th width="15%" height="40" class="" scope="row"><label for="authorCode">권한코드 </label></th>
+ <td width="85%"><input name="authorCode" type="text" size="30" maxlength="30" title="권한코드" value="${resultVO.authorCode}" readonly></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table> --%>
+
+
+
+
+</div>
+
+<!-- ********** 여기까지 내용 *************** -->
+</td>
+</tr>
+</table>
+</div>
+
+<input type="hidden" name="req_menuNo">
+</form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreat.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap.jsp (revision 7)
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ page import="egovframework.com.cmm.service.Globals" %>
+<%
+ /**
+ * @Class Name : EgovMenuCreatSiteMap.jsp
+ * @Description : 메뉴사이트맵 생성 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * @ 2011.07.29 서준식 사이트맵 저장경로 수정
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ * 2019.12.11 신용호 KISA 보안약점 조치 (크로스사이트 스크립트)
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/mnu/mcm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mcm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.MenuCreatSiteMap.title" /></title><!-- 메뉴사이트맵생성 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+var imgpath = "<c:url value='/images/egovframework/com/cmm/utl/'/>";
+var getContextPath = "${pageContext.request.contextPath}";
+</script>
+<script language="javascript1.2" type="text/javaScript" src="<c:url value='/js/egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap.js' />"></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/*절대 path 사이트맵이 저장될 장소의 절대 패스*/
+//var vRootPath = "C:/egovframework/workspace2/sym.mnu.mcm/src/main/webapp"; // Window webapp 위치
+//var vRootPath = "/product/jeus/webhome/was_com/egovframework-com-1_0/egovframework-com-1_0_war___"; // Unix webapp 위치
+/* 절대 path내 사이트맵 jsp를 저장할 장소 지정 */
+//var vSiteMapPath = "/html/egovframework/com/sym/mnu/mcm/";
+
+
+/* ********************************************************
+ * 조회 함수
+ ******************************************************** */
+function selectMenuCreatSiteMap() {
+ document.menuCreatManageSiteMapForm.scrtyEstbstrgetId.value = opener.document.menuCreatManageForm.scrtyEstbstrgetId.value;
+ document.menuCreatManageSiteMapForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatSiteMapSelect.do'/>";
+ document.menuCreatManageSiteMapForm.submit();
+}
+
+/* ********************************************************
+ * jsp 생성 함수
+ ******************************************************** */
+function CreatSiteMap() {
+ fHtmlCreat_Head();
+ console.log("vHtmlCode = "+vHtmlCode);
+ usrID = document.menuCreatManageSiteMapForm.creatPersonId.value;
+ authorCode = document.menuCreatManageSiteMapForm.authorCode.value;
+ document.menuCreatManageSiteMapForm.valueHtml.value = vHtmlCode;
+ document.menuCreatManageSiteMapForm.bndeFileNm.value = authorCode+"_SiteMap.jsp";
+ //document.menuCreatManageSiteMapForm.tmp_rootPath.value = vRootPath;
+ //document.menuCreatManageSiteMapForm.bndeFilePath.value = vSiteMapPath;
+ document.menuCreatManageSiteMapForm.mapCreatId.value = authorCode;
+ document.menuCreatManageSiteMapForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatSiteMapInsert.do'/>";
+ document.menuCreatManageSiteMapForm.submit();
+}
+
+/* ********************************************************
+* 메뉴 호출 함수
+******************************************************** */
+function fCallUrl(url) {
+ window.open(url,'dokdo','width=800,height=600,menubar=no,toolbar=no,location=no,resizable=no,status=no,scrollbars=no,top=300,left=700');
+}
+
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="comSymMnuMpm.MenuCreatSiteMap.title" /></noscript>
+
+<form name="menuCreatManageSiteMapForm" action ="<c:url value='/sym/mnu/mcm/EgovMenuCreatSiteMapSelect.do' />" method="post">
+<div style="visibility:hidden;display:none;"><input name="iptSubmit" type="submit" value="<spring:message code="comSymMnuMpm.MenuCreatSiteMap.send" />" title="<spring:message code="comSymMnuMpm.MenuCreatSiteMap.send" />"></div><!-- 전송 -->
+<input name="valueHtml" type="hidden" />
+<input name="creatPersonId" type="hidden" value ="<c:out value='${resultVO.creatPersonId}'/>" />
+<input name="bndeFileNm" type="hidden" />
+<input name="bndeFilePath" type="hidden" />
+<input name="mapCreatId" type="hidden" />
+<input name="tmp_rootPath" type="hidden" />
+
+<div class="board" style="width:530px">
+ <h1><spring:message code="comSymMnuMpm.MenuCreatSiteMap.pageTop.title" /></h1><!-- 메뉴사이트맵생성 -->
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymMnuMpm.MenuCreatSiteMap.authCode" /> : </label><!-- 권한코드 -->
+ <input class="s_input2 vat" name="authorCode" type="text" value="<c:out value='${resultVO.authorCode}'/>" size="20" maxlength="30" title="<spring:message code="comSymMnuMpm.MenuCreatSiteMap.authName" />" readonly="readonly" /><!-- 권한명 -->
+ <input class="s_input2 vat" name="chkCreat" type="text" value="<c:out value='${resultBoolean.chkCreat}'/>" size="10" maxlength="10" title="<spring:message code="comSymMnuMpm.MenuCreatSiteMap.authCode" />" readonly="readonly" /><!-- 권한코드 -->
+
+ <span class="btn_b"><a href="#LINK" onclick="CreatSiteMap(); return false;" title="<spring:message code="comSymMnuMpm.MenuCreatSiteMap.createSitemap" />"><spring:message code="comSymMnuMpm.MenuCreatSiteMap.createSitemap" /></a></span><!-- 사이트맵생성 -->
+ </li>
+ </ul>
+ </div>
+
+ <c:forEach var="result1" items="${list_menulist}" varStatus="status" >
+ <input type="hidden" name="tmp_menuNmVal" value="${result1.menuNo}|${result1.upperMenuId}|${result1.menuNm}|${result1.menuOrdr}|${result1.chkURL}|">
+ </c:forEach>
+
+ <div class="tree" style="width:480px;" id="treeSiteMap">
+ <script language="javascript" type="text/javaScript">
+ var Tree = new Array;
+ var baseObj = document.getElementById("treeSiteMap");
+ if ( typeof document.menuCreatManageSiteMapForm.tmp_menuNmVal == "undefined"
+ || typeof document.menuCreatManageSiteMapForm.tmp_menuNmVal.length == "undefined" ) {
+ alert("<spring:message code="comSymMnuMpm.MenuCreatSiteMap.validate.menuNmVal.none2" />"); //사이트맵 생성 데이타가 존재하지 않습니다. \n 메뉴를 생성하신 후 작업하세요.
+ window.close();
+ } else {
+ for (var j = 0; j < document.menuCreatManageSiteMapForm.tmp_menuNmVal.length; j++) {
+ Tree[j] = document.menuCreatManageSiteMapForm.tmp_menuNmVal[j].value;
+ }
+ createTree(baseObj,Tree);
+ }
+ </script>
+ </div>
+</div>
+
+</form>
+
+</body>
+</html>
+
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatManage.jsp (revision 7)
@@ -0,0 +1,146 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovMenuCreatManage.jsp
+ * @Description : 메뉴생성관리 조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/mnu/mcm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mcm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.menuCreatManage.title" /></title><!-- 메뉴생성관리 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 최초조회 함수
+ ******************************************************** */
+function fMenuCreatManageSelect(){
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatManageSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+ document.menuCreatManageForm.pageIndex.value = pageNo;
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatManageSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectMenuCreatManageList() {
+ document.menuCreatManageForm.pageIndex.value = 1;
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatManageSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+/* ********************************************************
+ * 메뉴생성 화면 호출
+ ******************************************************** */
+function selectMenuCreat(vAuthorCode) {
+ document.menuCreatManageForm.authorCode.value = vAuthorCode;
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="board">
+ <h1><spring:message code="comSymMnuMpm.menuCreatManage.pageTop.title" /></h1><!-- 메뉴생성관리 -->
+
+ <form name="menuCreatManageForm" action ="<c:url value='/sym/mnu/mcm/EgovMenuCreatManageSelect.do'/>" method="post">
+ <input name="checkedMenuNoForDel" type="hidden" />
+ <input name="authorCode" type="hidden" />
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymMnuMpm.menuCreatManage.authCode" /> : </label><!-- 보안설정대상ID -->
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' size="80" maxlength="60" title="검색조건" />
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="selectMenuCreatManageList(); return false;" />
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:20%" />
+ <col style="width:20%" />
+ <col style="width:20%" />
+ <col style="width:20%" />
+ <col style="width:20%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comSymMnuMpm.menuCreatManage.authCode" /></th><!-- 권한코드 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuCreatManage.authName" /></th><!-- 권한명 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuCreatManage.authDesc" /></th><!-- 권한 설명 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuCreatManage.creationStatus" /></th><!-- 메뉴생성여부 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuCreatManage.createMenu" /></th><!-- 메뉴생성 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${list_menumanage}" varStatus="status">
+ <tr>
+ <td><c:out value="${result.authorCode}"/></td>
+ <td><c:out value="${result.authorNm}"/></td>
+ <td><c:out value="${result.authorDc}"/></td>
+ <td>
+ <c:if test="${result.chkYeoBu > 0}">Y</c:if>
+ <c:if test="${result.chkYeoBu == 0}">N</c:if>
+ </td>
+ <td>
+ <a class="btn02" href="<c:url value='/sym/mnu/mcm/EgovMenuCreatSelect.do'/>?authorCode='<c:out value="${result.authorCode}"/>'" onclick="selectMenuCreat('<c:out value="${result.authorCode}"/>'); return false;">메뉴생성</a>
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+
+ <input type="hidden" name="req_menuNo">
+ </form>
+
+</div>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mcm/EgovMenuCreatManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist.jsp (revision 7)
@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%
+ /**
+ * @Class Name : EgovMenuBndeRegist.jsp
+ * @Description : 메뉴프로그램목록 일괄 등록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button/";
+%>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.menuRegist.title"/></title>
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script language="javascript1.2" type="text/javaScript">
+/* ********************************************************
+ * 메뉴일괄생성처리 함수
+ ******************************************************** */
+function insertMenuManage() {
+ if(confirm("<spring:message code="comSymMnuMpm.menuBndeRegist.validate.confirm.insert"/>")){ //메뉴 일괄등록을 하시겠습니까?. \n 메뉴정보와 프로그램목록, 프로그램 변경내역 존재시 삭제 하실 수 없습니다.
+ if(checkFile()){
+ document.menuManageRegistForm.action ="<c:url value='/sym/mnu/mpm/EgovMenuBndeRegist.do' />";
+ document.menuManageRegistForm.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 메뉴일괄삭제처리 함수
+ ******************************************************** */
+function deleteMenuList() {
+ if(confirm("<spring:message code="comSymMnuMpm.menuBndeRegist.validate.confirm.delete"/>")){ //메뉴일괄삭제를 하시겠습니까?. \n 메뉴정보와 프로그램목록, 프로그램 변경내역 데이타 모두 삭제 됩니다.
+ document.menuManageRegistForm.action ="<c:url value='/sym/mnu/mpm/EgovMenuBndeAllDelete.do' />";
+ document.menuManageRegistForm.submit();
+ }
+}
+/* ********************************************************
+ * 메뉴일괄등록시 등록파일 체크 함수
+ ******************************************************** */
+function checkFile(){
+ if(document.menuManageRegistForm.file.value==""){
+ alert("<spring:message code="comSymMnuMpm.menuBndeRegist.validate.alert.checkFile"/>"); //업로드 할 파일을 지정해 주세요
+ return false;
+ }
+
+ var str_dotlocation,str_ext,str_low;
+ str_value = document.menuManageRegistForm.file.value;
+ str_low = str_value.toLowerCase(str_value);
+ str_dotlocation = str_low.lastIndexOf(".");
+ str_ext = str_low.substring(str_dotlocation+1);
+
+ switch (str_ext) {
+ case "xls" :
+ case "xlsx" :
+ return true;
+ break;
+ default:
+ alert("<spring:message code="comSymMnuMpm.menuBndeRegist.validate.checkFile"/>"); //파일 형식이 맞지 않습니다.\n xls,xlsx만 업로드가 가능합니다!
+ return false;
+ }
+}
+
+/* ********************************************************
+ * 목록조회 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do' />";
+}
+
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+</script>
+</head>
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymMnuMpm.menuRegist.pageTop.title"/></h2>
+
+ <form name="menuManageRegistForm" action ="<c:url value='/sym/mnu/mpm/EgovMenuBndeRegist.do'/>" method="post" enctype="multipart/form-data">
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuBndeRegist.menuNo"/> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input type = "file" name="file" size="40" title="<spring:message code='title.attachedFileSelect'/>">
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.bulkUpload" />" onclick="insertMenuManage(); return false;" /><!-- 일괄등록 -->
+ <span class="btn_s"><a href="<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do'/>" onclick="selectList(); return false;"><spring:message code="button.list"/></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+
+ <input name="cmd" type="hidden" value="<c:out value='bndeInsert'/>"/>
+ </form>
+
+</div>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuBndeRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuManage.jsp (revision 7)
@@ -0,0 +1,235 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovMenuManage.jsp
+ * @Description : 메뉴관리 조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ 2011.07.27 서준식 메뉴 삭제 자바스크립트 오류 수정
+ 2018.08.09 신용호 삭제시 목록이 1개인경우 예외처리 수정
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.menuManage.title"/></title><!-- 메뉴관리리스트 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 모두선택 처리 함수
+ ******************************************************** */
+function fCheckAll() {
+ var checkField = document.menuManageForm.checkField;
+ if(document.menuManageForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+/* ********************************************************
+ * 멀티삭제 처리 함수
+ ******************************************************** */
+function fDeleteMenuList() {
+ var checkField = document.menuManageForm.checkField;
+ var menuNo = document.menuManageForm.checkMenuNo;
+ var checkMenuNos = "";
+ var checkedCount = 0;
+ if(checkField) {
+
+ if(typeof(checkField.length) != "undefined") {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkMenuNos += ((checkedCount==0? "" : ",") + menuNo[i].value);
+ checkedCount++;
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ checkMenuNos = menuNo.value;
+ checkedCount = 1;
+ }
+ }
+ }
+
+ if(checkedCount ==0){
+ alert("선택된 메뉴가 없습니다.");
+ return false;
+ }
+
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ document.menuManageForm.checkedMenuNoForDel.value=checkMenuNos;
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuManageListDelete.do'/>";
+ document.menuManageForm.submit();
+ }
+}
+
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+// document.menuManageForm.searchKeyword.value =
+ document.menuManageForm.pageIndex.value = pageNo;
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do'/>";
+ document.menuManageForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectMenuManageList() {
+ document.menuManageForm.pageIndex.value = 1;
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do'/>";
+ document.menuManageForm.submit();
+}
+
+/* ********************************************************
+ * 입력 화면 호출 함수
+ ******************************************************** */
+function insertMenuManage() {
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuRegistInsert.do'/>";
+ document.menuManageForm.submit();
+}
+
+/* ********************************************************
+ * 일괄처리 화면호출 함수
+ ******************************************************** */
+/* function bndeInsertMenuManage() {
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuRegistInsert.do'/>";
+ document.menuManageForm.submit();
+ }
+ */
+function bndeInsertMenuManage() {
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuBndeRegist.do'/>";
+ document.menuManageForm.submit();
+}
+/* ********************************************************
+ * 상세조회처리 함수
+ ******************************************************** */
+function selectUpdtMenuManageDetail(menuNo) {
+ document.menuManageForm.req_menuNo.value = menuNo;
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuManageListDetailSelect.do'/>";
+ document.menuManageForm.submit();
+}
+/* ********************************************************
+ * 최초조회 함수
+ ******************************************************** */
+function fMenuManageSelect(){
+ document.menuManageForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do'/>";
+ document.menuManageForm.submit();
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+
+</head>
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<form name="menuManageForm" action ="<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do'/>" method="post">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+<input name="checkedMenuNoForDel" type="hidden" />
+<input name="req_menuNo" type="hidden" />
+
+<div class="board">
+ <h1><spring:message code="comSymMnuMpm.menuManage.pageTop.title"/></h1><!-- 메뉴관리리스트 -->
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymMnuMpm.menuManage.menuNm"/> : </label><!-- 메뉴명 -->
+ <input class="s_input2 vat" name="searchKeyword" type="text" value="${searchVO.searchKeyword }" size="25" title="<spring:message code="title.searchCondition"/>" /><!-- 검색조건 -->
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="selectMenuManageList(); return false;" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/sym/mnu/mpm/EgovMenuRegistInsert.do'/>" onclick="bndeInsertMenuManage(); return false;" title="<spring:message code="button.bulkUpload" />"><spring:message code="button.bulkUpload" /></a></span><!-- 일괄등록 -->
+ <span class="btn_b"><a href="<c:url value='/sym/mnu/mpm/EgovMenuRegistInsert.do'/>" onclick="insertMenuManage(); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span><!-- 등록 -->
+ <span class="btn_b"><a href="#" onclick="fDeleteMenuList(); return false;" title='<spring:message code="button.delete" />'><spring:message code="button.delete" /></a></span><!-- 삭제 -->
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:30px" />
+ <col style="width:100px" />
+ <col style="width:120px" />
+ <col style="width:200px" />
+ <col style="width:167px" />
+ <col style="width:100px" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><input type="checkbox" name="checkAll" class="check2" onclick="fCheckAll();" title="전체선택"/></th><!-- 전체선택 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuManage.menuNo"/></th><!-- 메뉴ID -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuManage.menuNmHn"/></th><!-- 메뉴한글명 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuManage.progrmFileNm"/></th><!-- 프로그램파일명 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuManage.menuDc"/></th><!-- 메뉴설명 -->
+ <th scope="col"><spring:message code="comSymMnuMpm.menuManage.upperMenuId"/></th><!-- 상위메뉴ID -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${list_menumanage}" varStatus="status">
+ <tr>
+ <td>
+ <input type="checkbox" name="checkField" class="check2" title="선택"/>
+ <input name="checkMenuNo" type="hidden" value="<c:out value='${result.menuNo}'/>"/>
+ </td>
+ <td><c:out value="${result.menuNo}"/></td>
+ <td style="cursor:hand;">
+ <span class="link"><a href="<c:url value='/sym/mnu/mpm/EgovMenuManageListDetailSelect.do?req_menuNo='/>${result.menuNo}" onclick="selectUpdtMenuManageDetail('<c:out value="${result.menuNo}"/>'); return false;"><c:out value="${result.menuNm}"/></a></span>
+ </td>
+ <td><c:out value="${result.progrmFileNm}"/></td>
+ <td><c:out value="${result.menuDc}"/></td>
+ <td><c:out value="${result.upperMenuId}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmnNew.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmnNew.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmnNew.jsp (revision 7)
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%
+ /**
+ * @Class Name : EgovMenuMvmn.jsp
+ * @Description : 메뉴이동 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button/";
+
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.menuMvmn.title"/></title><!-- 메뉴이동 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+var imgpath = "<c:url value='/images/egovframework/com/cmm/utl/'/>";
+</script>
+<script language="javascript1.2" type="text/javaScript" src="<c:url value='/js/egovframework/com/sym/mnu/mpm/EgovMenuList.js' />" /></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+function selectProgramListSearch() {
+ progrmManageForm.submit();
+}
+function choisProgramListSearch(vFileNm) {
+ eval("parent.document.all."+parent.document.all.tmp_SearchElementName.value).value = vFileNm;
+ parent.$('.ui-dialog-content').dialog('close');
+}
+
+/* ********************************************************
+ * 상세내역조회 함수
+ ******************************************************** */
+function choiceNodes(nodeNum) {
+ var nodeValues = treeNodes[nodeNum].split("|");
+ parent.document.menuManageVO.upperMenuId.value = nodeValues[4];
+ parent.$('.ui-dialog-content').dialog('close');
+}
+/* ********************************************************
+ * 조회 함수
+ ******************************************************** */
+function selectMenuListTmp() {
+ document.menuListForm.req_RetrunPath.value = "<c:url value='/sym/mnu/mpm/EgovMenuMvmn'/>";
+ document.menuListForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuListSelectTmp.do'/>";
+ document.menuListForm.submit();
+}
+-->
+</script>
+</head>
+<body>
+<form name="searchUpperMenuIdForm" action ="<c:url value='/sym/mnu/mpm/EgovMenuListSelectTmp.do'/>" method="post">
+<div style="visibility:hidden;display:none;"><input name="iptSubmit" type="submit" value="전송" title="전송"></div>
+<input type="hidden" name="req_RetrunPath" value="/sym/mnu/mpm/EgovMenuMvmn">
+<c:forEach var="result" items="${list_menulist}" varStatus="status" >
+<input type="hidden" name="tmp_menuNmVal" value="${result.menuNo}|${result.upperMenuId}|${result.menuNm}|${result.progrmFileNm}|${result.menuNo}|${result.menuOrdr}|${result.menuNm}|${result.upperMenuId}|${result.menuDc}|${result.relateImagePath}|${result.relateImageNm}|${result.progrmFileNm}|">
+</c:forEach>
+
+<div class="wTableFrm" style="width:580px">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymMnuMpm.menuMvmn.pageTop.title"/></h2><!-- 메뉴이동 -->
+
+ <!-- 등록폼 -->
+<%--
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuMvmn.menuNo"/></th><!-- 이동할메뉴명 -->
+ <td class="left">
+ <input name="progrmFileNm" type="text" size="30" value="" maxlength="60" title="<spring:message code="comSymMnuMpm.menuMvmn.menuNo"/>" readonly="readonly"/>
+ </td>
+ </tr>
+ </table>
+--%>
+ <div style="clear:both;"></div>
+</div>
+
+<DIV id="main" style="display:">
+
+<table width="570" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"> </td>
+ </tr>
+</table>
+
+<table width="570" cellpadding="8" class="table-line">
+ <tr>
+ <td>
+ <div class="tree" style="width:400px;">
+ <script language="javascript" type="text/javaScript">
+
+ var Tree = new Array;
+
+ if ( typeof document.searchUpperMenuIdForm.req_RetrunPath == "object"
+ && typeof document.searchUpperMenuIdForm.tmp_menuNmVal == "object"
+ && document.searchUpperMenuIdForm.tmp_menuNmVal.length > 0 ) {
+ for (var j = 0; j < document.searchUpperMenuIdForm.tmp_menuNmVal.length; j++) {
+ Tree[j] = document.searchUpperMenuIdForm.tmp_menuNmVal[j].value;
+ }
+ createTree(Tree, true);
+ }else{
+ alert("<spring:message code="comSymMnuMpm.menuMvmn.validate.alert.menu"/>");
+ window.close();
+ }
+ </script>
+ </div>
+ </td>
+ </tr>
+</table>
+</DIV>
+
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmnNew.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuRegist.jsp (revision 7)
@@ -0,0 +1,256 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovMenuRegist.jsp
+ * @Description : 메뉴정보 등록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+--%>
+<%@ page 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="ImgUrl" value="${pageContext.request.contextPath}/images/egovframework/com/sym/mnu/mpm/"/>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.menuRegist.title"/></title><!-- 메뉴정보등록 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+<validator:javascript formName="menuManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 메뉴이동 화면 호출 함수
+ ******************************************************** */
+function mvmnMenuList() {
+ window.open("<c:url value='/sym/mnu/mpm/EgovMenuListSelectMvmn.do' />",'Pop_Mvmn','scrollbars=yes,width=600,height=600');
+}
+
+/* ********************************************************
+* 입력값 validator 함수
+******************************************************** */
+function fn_validatorMenuList() {
+
+ if(document.menuManageVO.menuNo.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNo.notNull" />"); return false;} //메뉴번호는 핍수입력 항목입니다.
+ if(!checkNumber(document.menuManageVO.menuNo.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNo.onlyNumber" />"); return false;} //메뉴번호는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.menuOrdr.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuOrdr.notNull" />"); return false;} //메뉴순서는 핍수입력 항목입니다.
+ if(!checkNumber(document.menuManageVO.menuOrdr.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuOrdr.onlyNumber" />"); return false;} //메뉴순서는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.upperMenuId.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.upperMenuId.notNull" />"); return false;} //상위메뉴번호는 핍수입력 항목입니다.
+ if(!checkNumber(document.menuManageVO.upperMenuId.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.upperMenuId.onlyNumber" />"); return false;} //상위메뉴번호는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.progrmFileNm.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.progrmFileNm.notNull" />"); return false;} //프로그램파일명은 핍수입력 항목입니다.
+ if(document.menuManageVO.menuNm.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNm.notNull" />"); return false;} //메뉴명은 핍수입력 항목입니다.
+
+ return true;
+}
+
+/* ********************************************************
+* 필드값 Number 체크 함수
+******************************************************** */
+function checkNumber(str) {
+ var flag=true;
+ if (str.length > 0) {
+ for (i = 0; i < str.length; i++) {
+ if (str.charAt(i) < '0' || str.charAt(i) > '9') {
+ flag=false;
+ }
+ }
+ }
+ return flag;
+}
+
+/* ********************************************************
+ * 입력처리 함수
+ ******************************************************** */
+function insertMenuManage(form) {
+ if(!fn_validatorMenuList()){return;}
+ if(confirm("<spring:message code="common.save.msg" />")){
+
+ if(!validateMenuManageVO(form)){
+ return;
+ }else{
+ form.submit();
+ }
+ }
+}
+
+/* ********************************************************
+ * 파일목록조회 함수
+ ******************************************************** */
+function searchFileNm() {
+ document.all.tmp_SearchElementName.value = "progrmFileNm";
+ window.open("<c:url value='/sym/prm/EgovProgramListSearch.do' />",'Pop_progrmFileNm','width=500,height=600');
+}
+
+/* ********************************************************
+ * 목록조회 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do' />";
+}
+/* ********************************************************
+ * 파일명 엔터key 목록조회 함수
+ ******************************************************** */
+function press() {
+ if (event.keyCode==13) {
+ searchFileNm(); // 원래 검색 function 호출
+ }
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+<script type="text/javascript">
+ $(document).ready(function () {
+ // 파일검색 화면 호출 함수
+ $('#popupProgrmFileNm').click(function (e) {
+ e.preventDefault();
+ //var page = $(this).attr("href");
+ var pagetitle = $(this).attr("title");
+ var page = "<c:url value='/sym/prm/EgovProgramListSearchNew.do'/>";
+ var $dialog = $('<div></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ width: 550,
+ height: 650,
+ title: pagetitle
+ });
+ $dialog.dialog('open');
+ });
+ // 메뉴이동 화면 호출 함수
+ $('#popupUpperMenuId').click(function (e) {
+ e.preventDefault();
+ //var page = $(this).attr("href");
+ var pagetitle = $(this).attr("title");
+ var page = "<c:url value='/sym/mnu/mpm/EgovMenuListSelectMvmnNew.do'/>";
+ var $dialog = $('<div style="overflow:hidden;padding: 0px 0px 0px 0px;"></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ width: 610,
+ height: 550,
+ title: pagetitle
+ });
+ $dialog.dialog('open');
+ });
+ });
+</script>
+</head>
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<form:form commandName="menuManageVO" name="menuManageVO" method="post" action="${pageContext.request.contextPath}/sym/mnu/mpm/EgovMenuRegistInsert.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymMnuMpm.menuRegist.pageTop.title"/></h2><!-- 메뉴 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuRegist.menuNo"/> <span class="pilsu">*</span></th><!-- 메뉴No -->
+ <td class="left">
+ <form:input path="menuNo" maxlength="10" title="<spring:message code='comSymMnuMpm.menuRegist.menuNo'/>" cssStyle="width:50px" /><!-- 메뉴No -->
+ <form:errors path="menuNo" />
+ </td>
+ <th><spring:message code="comSymMnuMpm.menuRegist.menuOrder"/> <span class="pilsu">*</span></th><!-- 메뉴순서 -->
+ <td class="left">
+ <form:input path="menuOrdr" maxlength="10" title="<spring:message code='comSymMnuMpm.menuRegist.menuOrder'/>" cssStyle="width:50px" /><!-- 메뉴순서 -->
+ <form:errors path="menuOrdr" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuRegist.menuNm"/> <span class="pilsu">*</span></th><!-- 메뉴명 -->
+ <td class="left">
+ <form:input path="menuNm" maxlength="30" title="<spring:message code='comSymMnuMpm.menuRegist.menuNm'/>" /><!-- 메뉴명 -->
+ <form:errors path="menuNm" />
+ </td>
+ <th><spring:message code="comSymMnuMpm.menuRegist.upperMenuId"/> <span class="pilsu">*</span></th><!-- 상위메뉴No -->
+ <td class="left">
+ <form:input path="upperMenuId" maxlength="10" title="<spring:message code='comSymMnuMpm.menuRegist.upperMenuId'/>" readonly="true" class="readOnlyClass" cssStyle="width:50px" /><!-- 상위메뉴No -->
+ <form:errors path="upperMenuId" />
+ <a id="popupUpperMenuId" href="<c:url value='/sym/mnu/mpm/EgovMenuListSelectMvmn.do' />" target="_blank" title="<spring:message code="comSymMnuMpm.menuRegist.newWindow"/>"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />"
+ alt='' />(<spring:message code="comSymMnuMpm.menuRegist.selectMenuSearch"/>)</a><!-- 새창으로 --><!-- 메뉴선택 검색 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuRegist.progrmFileNm"/> <span class="pilsu">*</span></th><!-- -->
+ <td class="left" colspan="3">
+ <form:input path="progrmFileNm" maxlength="60" onkeypress="press();" title="파일명" readonly="true" class="readOnlyClass" cssStyle="width:350px" /><!-- 파일명 -->
+ <form:errors path="progrmFileNm" />
+ <a id="popupProgrmFileNm" href="<c:url value='/sym/prm/EgovProgramListSearch.do'/>?tmp_SearchElementName=progrmFileNm" target="_blank" title="<spring:message code="comSymMnuMpm.menuRegist.newWindow"/>">
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />" alt='' />(<spring:message code="comSymMnuMpm.menuRegist.programFileNameSearch"/>)</a><!-- 새창으로 --><!-- 프로그램파일명 검색 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuRegist.relateImageNm"/> <span class="pilsu">*</span></th><!-- 관련이미지명 -->
+ <td class="left">
+ <form:input path="relateImageNm" maxlength="30" title="<spring:message code='comSymMnuMpm.menuRegist.relateImageNm'/>"/><!-- 관련이미지명 -->
+ <form:errors path="relateImageNm" />
+ </td>
+ <th><spring:message code="comSymMnuMpm.menuRegist.relateImagePath"/> <span class="pilsu">*</span></th><!-- 관련이미지경로 -->
+ <td class="left">
+ <form:input path="relateImagePath" maxlength="30" title="<spring:message code='comSymMnuMpm.menuRegist.relateImagePath'/>"/><!-- 관련이미지경로 -->
+ <form:errors path="relateImagePath" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuRegist.menuDc"/> <span class="pilsu">*</span></th><!-- 메뉴설명 -->
+ <td class="left" colspan="3">
+ <form:textarea path="menuDc" rows="14" cols="75" cssClass="txaClass" title="<spring:message code='comSymMnuMpm.menuRegist.menuDc'/>" cssStyle="height:200px"/><!-- 메뉴설명 -->
+ <form:errors path="menuDc"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.create" />' onclick="insertMenuManage(document.forms[0]); return false;" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do'/>" onclick="selectList(); return false;"><spring:message code="button.list"/></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input type="hidden" name="tmp_SearchElementName" value="">
+<input type="hidden" name="tmp_SearchElementVal" value="">
+<input name="cmd" type="hidden" value="<c:out value='insert'/>">
+
+</form:form>
+
+</body>
+</html>
+
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuDetailSelectUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuDetailSelectUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuDetailSelectUpdt.jsp (revision 7)
@@ -0,0 +1,255 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovMenuDetailSelectUpdt.jsp
+ * @Description : 메뉴정보 상세조회및 수정 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+--%>
+<%@ page 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="ImgUrl" value="/images/egovframework/com/sym/mnu/mpm/"/>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.title"/></title><!-- 메뉴상세조회및 수정 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="menuManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+
+/* ********************************************************
+* 입력값 validator 함수
+******************************************************** */
+function fn_validatorMenuList() {
+
+ if(document.menuManageVO.menuNo.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNo.notNull" />"); return false;} //메뉴번호는 필수 항목입니다.
+ if(!checkNumber(document.menuManageVO.menuNo.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNo.onlyNumber" />"); return false;} //메뉴번호는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.menuOrdr.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuOrdr.notNull" />"); return false;} // 메뉴순서는 필수 항목입니다.
+ if(!checkNumber(document.menuManageVO.menuOrdr.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuOrdr.onlyNumber" />"); return false;} //메뉴순서는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.upperMenuId.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.upperMenuId.notNull" />"); return false;} //상위메뉴번호는 필수 항목입니다.
+ if(!checkNumber(document.menuManageVO.upperMenuId.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.upperMenuId.onlyNumber" />"); return false;} //상위메뉴번호는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.progrmFileNm.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.progrmFileNm.notNull" />"); return false;} //프로그램파일명은 필수 항목입니다.
+ if(document.menuManageVO.menuNm.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNm.notNull" />"); return false;} //메뉴명은 필수 항목입니다.
+
+ return true;
+}
+
+
+/* ********************************************************
+* 필드값 Number 체크 함수
+******************************************************** */
+function checkNumber(str) {
+ var flag=true;
+ if (str.length > 0) {
+ for (i = 0; i < str.length; i++) {
+ if (str.charAt(i) < '0' || str.charAt(i) > '9') {
+ flag=false;
+ }
+ }
+ }
+ return flag;
+}
+
+/* ********************************************************
+ * 수정처리 함수
+ ******************************************************** */
+function updateMenuManage(form) {
+ if(!fn_validatorMenuList()){return;}
+ if(confirm("<spring:message code="common.save.msg"/>")){
+
+ if(!validateMenuManageVO(form)){
+ return;
+ }else{
+ form.action="<c:url value='/sym/mnu/mpm/EgovMenuDetailSelectUpdt.do' />";
+ form.submit();
+ }
+ }
+}
+
+/* ********************************************************
+ * 삭제처리함수
+ ******************************************************** */
+function deleteMenuManage(form) {
+ if(confirm("<spring:message code="common.delete.msg"/>")){
+ form.action="<c:url value='/sym/mnu/mpm/EgovMenuManageDelete.do' />";
+ form.submit();
+ }
+}
+/* ********************************************************
+ * 목록조회 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do' />";
+}
+
+/* ********************************************************
+ * 파일명 엔터key 목록조회 함수
+ ******************************************************** */
+function press() {
+ if (event.keyCode==13) {
+ searchFileNm(); // 원래 검색 function 호출
+ }
+}
+
+
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+<script type="text/javascript">
+ $(document).ready(function () {
+ // 파일검색 화면 호출 함수
+ $('#popupProgrmFileNm').click(function (e) {
+ e.preventDefault();
+ //var page = $(this).attr("href");
+ var pagetitle = $(this).attr("title");
+ var page = "<c:url value='/sym/prm/EgovProgramListSearchNew.do'/>";
+ var $dialog = $('<div></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ width: 550,
+ height: 650,
+ title: pagetitle
+ });
+ $dialog.dialog('open');
+ });
+ // 메뉴이동 화면 호출 함수
+ $('#popupUpperMenuId').click(function (e) {
+ e.preventDefault();
+ //var page = $(this).attr("href");
+ var pagetitle = $(this).attr("title");
+ var page = "<c:url value='/sym/mnu/mpm/EgovMenuListSelectMvmnNew.do'/>";
+ var $dialog = $('<div style="overflow:hidden;padding: 0px 0px 0px 0px;"></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ width: 610,
+ height: 550,
+ title: pagetitle
+ });
+ $dialog.dialog('open');
+ });
+ });
+</script>
+</head>
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<form:form commandName="menuManageVO" name="menuManageVO" action ="<c:url value='/sym/mnu/mpm/EgovMenuDetailSelectUpdt.do' />" method="post">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.pageTop.title"/></h2><!-- 메뉴상세조회및 수정 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.menuNo"/> <span class="pilsu">*</span></th><!-- 메뉴No -->
+ <td class="left">
+ <c:out value="${menuManageVO.menuNo}"/>
+ <form:hidden path="menuNo" />
+ <form:errors path="menuNo" />
+ </td>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.menuOrder"/> <span class="pilsu">*</span></th><!-- 메뉴순서 -->
+ <td class="left">
+ <form:input path="menuOrdr" maxlength="10" title="<spring:message code='comSymMnuMpm.menuDetailSelectUpdt.menuOrder'/>" cssStyle="width:50px"/><!-- 메뉴순서 -->
+ <form:errors path="menuOrdr" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.menuNm"/> <span class="pilsu">*</span></th><!-- 메뉴명 -->
+ <td class="left">
+ <form:input path="menuNm" size="30" maxlength="30" title="<spring:message code='comSymMnuMpm.menuDetailSelectUpdt.menuNm'/>"/><!-- 메뉴명 -->
+ <form:errors path="menuNm" />
+ </td>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.upperMenuId"/> <span class="pilsu">*</span></th><!-- 상위메뉴No -->
+ <td class="left">
+ <form:input path="upperMenuId" maxlength="10" title="<spring:message code='comSymMnuMpm.menuDetailSelectUpdt.upperMenuId'/>" cssStyle="width:50px"/><!-- 상위메뉴No -->
+ <form:errors path="upperMenuId" />
+ <a id="popupUpperMenuId" href="<c:url value='/sym/mnu/mpm/EgovMenuListSelectMvmn.do' />" target="_blank" title="<spring:message code="comSymMnuMpm.menuDetailSelectUpdt.newWindow"/>"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />"
+ alt='' width="15" height="15" />(<spring:message code="comSymMnuMpm.menuDetailSelectUpdt.selectMenuSearch"/>)</a><!--새창으로 --><!-- 메뉴선택 검색 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.progrmFileNm"/> <span class="pilsu">*</span></th><!-- 파일명 -->
+ <td class="left" colspan="3">
+ <form:input path="progrmFileNm" size="60" maxlength="60" title="<spring:message code='comSymMnuMpm.menuDetailSelectUpdt.progrmFileNm'/>" cssStyle="width:350px"/><!-- 파일명 -->
+ <form:errors path="progrmFileNm" />
+ <a id="popupProgrmFileNm" href="<c:url value='/sym/prm/EgovProgramListSearch.do' />" target="_blank" title="<spring:message code="comSymMnuMpm.menuDetailSelectUpdt.newWindow"/>"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />"
+ alt='' width="15" height="15" />(<spring:message code="comSymMnuMpm.menuDetailSelectUpdt.programFileNameSearch"/>)</a><!-- 새창으로 이동 --><!-- 프로그램파일명 검색 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.relateImageNm"/> <span class="pilsu">*</span></th><!-- 관련이미지명 -->
+ <td class="left">
+ <form:input path="relateImageNm" size="30" maxlength="30" title="<spring:message code='comSymMnuMpm.menuDetailSelectUpdt.relateImageNm'/>"/><!-- 관련이미지명 -->
+ <form:errors path="relateImageNm" />
+ </td>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.relateImagePath"/> <span class="pilsu">*</span></th><!-- 관련이미지경로 -->
+ <td class="left">
+ <form:input path="relateImagePath" size="30" maxlength="30" title="<spring:message code='comSymMnuMpm.menuDetailSelectUpdt.relateImagePath'/>"/><!-- 관련이미지경로 -->
+ <form:errors path="relateImagePath" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuDetailSelectUpdt.menuDc"/> <span class="pilsu">*</span></th><!-- 메뉴설명 -->
+ <td class="left" colspan="3">
+ <form:textarea path="menuDc" rows="14" cols="75" title="<spring:message code='comSymMnuMpm.menuDetailSelectUpdt.menuDc'/>" cssStyle="height:200px"/><!-- 메뉴설명 -->
+ <form:errors path="menuDc"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.update" />' onclick="updateMenuManage(document.forms[0]); return false;" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/uss/ion/evt/selectEventRceptList.do'/>?menuNo=<c:out value='${menuManageVO.menuNo}'/>" onclick="deleteMenuManage(document.forms[0]); return false;"><spring:message code="button.delete" /></a></span><!-- 삭제 -->
+ <span class="btn_s"><a href="<c:url value='/sym/mnu/mpm/EgovMenuManageSelect.do'/>" onclick="selectList(); return false;"><spring:message code="button.list"/></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input type="hidden" name="tmp_SearchElementName" value=""/>
+<input type="hidden" name="tmp_SearchElementVal" value=""/>
+<input name="cmd" type="hidden" value="update"/>
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuDetailSelectUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmn.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmn.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmn.jsp (revision 7)
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%
+ /**
+ * @Class Name : EgovMenuMvmn.jsp
+ * @Description : 메뉴이동 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button/";
+
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymMnuMpm.menuMvmn.title"/></title><!-- 메뉴이동 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+var imgpath = "<c:url value='/images/egovframework/com/cmm/utl/'/>";
+</script>
+<script language="javascript1.2" type="text/javaScript" src="<c:url value='/js/egovframework/com/sym/mnu/mpm/EgovMenuList.js' />" /></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+function selectProgramListSearch() {
+ progrmManageForm.submit();
+}
+function choisProgramListSearch(vFileNm) {
+ eval("opener.document.all."+opener.document.all.tmp_SearchElementName.value).value = vFileNm;
+ window.close();
+}
+
+/* ********************************************************
+ * 상세내역조회 함수
+ ******************************************************** */
+function choiceNodes(nodeNum) {
+ var nodeValues = treeNodes[nodeNum].split("|");
+ opener.document.menuManageVO.upperMenuId.value = nodeValues[4];
+ window.close();
+}
+/* ********************************************************
+ * 조회 함수
+ ******************************************************** */
+function selectMenuListTmp() {
+ document.menuListForm.req_RetrunPath.value = "<c:url value='/sym/mnu/mpm/EgovMenuMvmn'/>";
+ document.menuListForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuListSelectTmp.do'/>";
+ document.menuListForm.submit();
+}
+-->
+</script>
+</head>
+<body style="overflow-x:hidden;overflow-y:auto">
+<form name="searchUpperMenuIdForm" action ="<c:url value='/sym/mnu/mpm/EgovMenuListSelectTmp.do'/>" method="post">
+<div style="visibility:hidden;display:none;"><input name="iptSubmit" type="submit" value="전송" title="전송"></div>
+<input type="hidden" name="req_RetrunPath" value="/sym/mnu/mpm/EgovMenuMvmn">
+<c:forEach var="result" items="${list_menulist}" varStatus="status" >
+<input type="hidden" name="tmp_menuNmVal" value="${result.menuNo}|${result.upperMenuId}|${result.menuNm}|${result.progrmFileNm}|${result.menuNo}|${result.menuOrdr}|${result.menuNm}|${result.upperMenuId}|${result.menuDc}|${result.relateImagePath}|${result.relateImageNm}|${result.progrmFileNm}|">
+</c:forEach>
+
+<div class="wTableFrm" style="width:580px">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymMnuMpm.menuMvmn.pageTop.title"/></h2><!-- 메뉴이동 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuMvmn.menuNo"/></th><!-- 이동할메뉴명 -->
+ <td class="left">
+ <input name="progrmFileNm" type="text" size="30" value="" maxlength="60" title="<spring:message code="comSymMnuMpm.menuMvmn.menuNo"/>"/>
+ </td>
+ </tr>
+ </table>
+
+ <div style="clear:both;"></div>
+</div>
+
+<DIV id="main" style="display:">
+
+<table width="570" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"> </td>
+ </tr>
+</table>
+
+<table width="570" cellpadding="8" class="table-line">
+ <tr>
+ <td>
+ <div class="tree" style="width:400px;">
+ <script language="javascript" type="text/javaScript">
+
+ var Tree = new Array;
+
+ if ( typeof document.searchUpperMenuIdForm.req_RetrunPath == "object"
+ && typeof document.searchUpperMenuIdForm.tmp_menuNmVal == "object"
+ && document.searchUpperMenuIdForm.tmp_menuNmVal.length > 0 ) {
+ for (var j = 0; j < document.searchUpperMenuIdForm.tmp_menuNmVal.length; j++) {
+ Tree[j] = document.searchUpperMenuIdForm.tmp_menuNmVal[j].value;
+ }
+ createTree(Tree, true);
+ }else{
+ alert("<spring:message code="comSymMnuMpm.menuMvmn.validate.alert.menu"/>");
+ window.close();
+ }
+ </script>
+ </div>
+ </td>
+ </tr>
+</table>
+</DIV>
+
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuMvmn.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuList.jsp (revision 7)
@@ -0,0 +1,387 @@
+<!DOCTYPE html>
+
+<%--
+ /**
+ * @Class Name : EgovMenuList.jsp
+ * @Description : 메뉴목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2013.10.04 이기하 메뉴트리 위치 변경
+ * 2018.09.10 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+
+ /* Image Path 설정 */
+--%>
+<%@ page 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" %>
+<%
+//String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon/";
+//String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymMnuMpm.menuList.title" /></title>
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+<script type="text/javascript">
+var imgpath = "<c:url value='/images/egovframework/com/cmm/utl/'/>";
+</script>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+
+<script language="javascript1.2" type="text/javaScript" src="<c:url value='/js/egovframework/com/sym/mnu/mpm/EgovMenuList.js' />"></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 메뉴등록 처리 함수
+ ******************************************************** */
+function insertMenuList() {
+ if(!fn_validatorMenuList()){return;}
+ if(document.menuManageVO.tmp_CheckVal.value == "U"){alert("<spring:message code="comSymMnuMpm.menuList.validate.checkVal" />"); return;} //상세조회시는 수정혹은 삭제만 가능합니다.
+ document.menuManageVO.action = "<c:url value='/sym/mnu/mpm/EgovMenuListInsert.do'/>";
+ menuManageVO.submit();
+
+}
+
+/* ********************************************************
+ * 메뉴수정 처리 함수
+ ******************************************************** */
+function updateMenuList() {
+ if(!fn_validatorMenuList()){return;}
+ if(document.menuManageVO.tmp_CheckVal.value != "U"){alert("<spring:message code="comSymMnuMpm.menuList.validate.checkVal.update" />"); return;} //상세조회시는 수정혹은 삭제만 가능합니다. 초기화 하신 후 등록하세요.
+ document.menuManageVO.action = "<c:url value='/sym/mnu/mpm/EgovMenuListUpdt.do'/>";
+ menuManageVO.submit();
+}
+
+/* ********************************************************
+ * 메뉴삭제 처리 함수
+ ******************************************************** */
+function deleteMenuList() {
+ if(!fn_validatorMenuList()){return;}
+ if(document.menuManageVO.tmp_CheckVal.value != "U"){alert("<spring:message code="comSymMnuMpm.menuList.validate.checkVal" />"); return;} //상세조회시는 수정혹은 삭제만 가능합니다.
+ document.menuManageVO.action = "<c:url value='/sym/mnu/mpm/EgovMenuListDelete.do'/>";
+ menuManageVO.submit();
+}
+
+/* ********************************************************
+ * 메뉴리스트 조회 함수
+ ******************************************************** */
+function selectMenuList() {
+ document.menuManageVO.action = "<c:url value='/sym/mnu/mpm/EgovMenuListSelect.do'/>";
+ document.menuManageVO.submit();
+}
+
+/* ********************************************************
+ * 초기화 함수
+ ******************************************************** */
+function initlMenuList() {
+ document.menuManageVO.menuNo.value="";
+ document.menuManageVO.menuOrdr.value="";
+ document.menuManageVO.menuNm.value="";
+ document.menuManageVO.upperMenuId.value="";
+ document.menuManageVO.menuDc.value="";
+ document.menuManageVO.relateImagePath.value="";
+ document.menuManageVO.relateImageNm.value="";
+ document.menuManageVO.progrmFileNm.value="";
+ document.menuManageVO.menuNo.readOnly=false;
+ document.menuManageVO.tmp_CheckVal.value = "";
+}
+
+/* ********************************************************
+ * 조회 함수
+
+ ******************************************************** */
+function selectMenuListTmp() {
+ document.menuManageVO.req_RetrunPath.value = "/sym/mnu/mpm/EgovMenuList";
+ document.menuManageVO.action = "<c:url value='/sym/mnu/mpm/EgovMenuListSelectTmp.do'/>";
+ document.menuManageVO.submit();
+}
+
+/* ********************************************************
+ * 상세내역조회 함수
+ ******************************************************** */
+ function choiceNodes(nodeNum) {
+ var nodeValues = treeNodes[nodeNum].split("|");
+ document.menuManageVO.menuNo.value = nodeValues[4];
+ document.menuManageVO.menuOrdr.value = nodeValues[5];
+ document.menuManageVO.menuNm.value = nodeValues[6];
+ document.menuManageVO.upperMenuId.value = nodeValues[7];
+ document.menuManageVO.menuDc.value = nodeValues[8];
+ document.menuManageVO.relateImagePath.value = nodeValues[9];
+ document.menuManageVO.relateImageNm.value = nodeValues[10];
+ document.menuManageVO.progrmFileNm.value = nodeValues[11];
+ document.menuManageVO.menuNo.readOnly=true;
+ document.menuManageVO.tmp_CheckVal.value = "U";
+}
+
+/* ********************************************************
+ * 입력값 validator 함수
+ ******************************************************** */
+function fn_validatorMenuList() {
+
+ if(document.menuManageVO.menuNo.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNo.notNull" />"); return false;} //메뉴번호는 Not Null 항목입니다.
+ if(!checkNumber(document.menuManageVO.menuNo.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNo.onlyNumber" />"); return false;} //메뉴번호는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.menuOrdr.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuOrdr.notNull" />"); return false;} //메뉴순서는 Not Null 항목입니다.
+ if(!checkNumber(document.menuManageVO.menuOrdr.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuOrdr.onlyNumber" />"); return false;} //메뉴순서는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.upperMenuId.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.upperMenuId.notNull" />"); return false;} //상위메뉴번호는 Not Null 항목입니다.
+ if(!checkNumber(document.menuManageVO.upperMenuId.value)){alert("<spring:message code="comSymMnuMpm.menuList.validate.upperMenuId.onlyNumber" />"); return false;} //상위메뉴번호는 숫자만 입력 가능합니다.
+
+ if(document.menuManageVO.progrmFileNm.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.progrmFileNm.notNull" />"); return false;} //프로그램파일명은 Not Null 항목입니다.
+ if(document.menuManageVO.menuNm.value == ""){alert("<spring:message code="comSymMnuMpm.menuList.validate.menuNm.notNull" />"); return false;} //메뉴명은 Not Null 항목입니다.
+
+ return true;
+}
+
+/* ********************************************************
+ * 필드값 Number 체크 함수
+ ******************************************************** */
+function checkNumber(str) {
+ var flag=true;
+ if (str.length > 0) {
+ for (i = 0; i < str.length; i++) {
+ if (str.charAt(i) < '0' || str.charAt(i) > '9') {
+ flag=false;
+ }
+ }
+ }
+ return flag;
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+<script type="text/javascript">
+ $(document).ready(function () {
+ // 파일검색 화면 호출 함수
+ $('#popupProgrmFileNm').click(function (e) {
+ e.preventDefault();
+ //var page = $(this).attr("href");
+ var pagetitle = $(this).attr("title");
+ var page = "<c:url value='/sym/prm/EgovProgramListSearchNew.do'/>";
+ var $dialog = $('<div></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ width: 550,
+ height: 650,
+ title: pagetitle
+ });
+ $dialog.dialog('open');
+ });
+ // 메뉴이동 화면 호출 함수
+ $('#popupUpperMenuId').click(function (e) {
+ e.preventDefault();
+ //var page = $(this).attr("href");
+ var pagetitle = $(this).attr("title");
+ var page = "<c:url value='/sym/mnu/mpm/EgovMenuListSelectMvmnNew.do'/>";
+ var $dialog = $('<div style="overflow:hidden;padding: 0px 0px 0px 0px;"></div>')
+ .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
+ .dialog({
+ autoOpen: false,
+ modal: true,
+ width: 600,
+ height: 550,
+ title: pagetitle
+ });
+ $dialog.dialog('open');
+ });
+ });
+</script>
+
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<div id="border" style="width:730px">
+<table border="0">
+ <tr>
+ <td width="700">
+<!-- ********** 여기서 부터 본문 내용 *************** -->
+
+
+<form name="menuManageVO" action ="<c:url value='/sym/mnu/mpm/EgovMenuListInsert.do' />" method="post">
+<input type="hidden" name="req_RetrunPath" value="/sym/mnu/mpm/EgovMenuList">
+
+<div class="board">
+ <h1 style="background-position:left 3px"><spring:message code="comSymMnuMpm.menuList.pageTop.title" /></h1><!-- 메뉴 목록 -->
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <span class="btn_b"><a href="<c:url value='/sym/mnu/mpm/EgovMenuListSelect.do'/>" onclick="initlMenuList(); return false;" title="<spring:message code="button.init" />"><spring:message code="button.init" /></a></span><!-- 초기화 -->
+ <input class="s_btn" type="submit" value='<spring:message code="button.save" />' title='<spring:message code="button.save" />' onclick="insertMenuList(); return false;" />
+ <span class="btn_b"><a href="#LINK" onclick="updateMenuList(); return false;" title='<spring:message code="button.update" />'><spring:message code="button.update" /></a></span>
+ <span class="btn_b"><a href="#LINK" onclick="deleteMenuList(); return false;" title='<spring:message code="button.delete" />'><spring:message code="button.delete" /></a></span>
+ </li>
+ </ul>
+ </div>
+</div>
+
+
+
+<div id="main" style="display:">
+
+<%-- <table width="717" cellpadding="8" class="table-search" border="0">
+ <tr>
+ <td width="100%" class="title_left">
+ <h1><img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif' />" width="16" height="16" hspace="3" alt=""> 메뉴 목록</h1></td>
+ </tr>
+</table> --%>
+
+
+<table>
+ <colgroup>
+ <col style="width:240px" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <td style="vertical-align:top">
+ <c:forEach var="result" items="${list_menulist}" varStatus="status" >
+ <input type="hidden" name="tmp_menuNmVal" value="${result.menuNo}|${result.upperMenuId}|${result.menuNm}|${result.progrmFileNm}|${result.menuNo}|${result.menuOrdr}|${result.menuNm}|${result.upperMenuId}|${result.menuDc}|${result.relateImagePath}|${result.relateImageNm}|${result.progrmFileNm}|">
+ </c:forEach>
+
+ <div class="tree" style="overflow:scroll; width:218px; height:383px; padding:5px; border:1px solid #ddd">
+ <script language="javascript" type="text/javaScript">
+ var chk_Object = true;
+ var chk_browse = "";
+ if (eval(document.menuManageVO.req_RetrunPath)=="[object]") chk_browse = "IE";
+ if (eval(document.menuManageVO.req_RetrunPath)=="[object NodeList]") chk_browse = "Fox";
+ if (eval(document.menuManageVO.req_RetrunPath)=="[object Collection]") chk_browse = "safai";
+
+ var Tree = new Array;
+ if(chk_browse=="IE"&&eval(document.menuManageVO.tmp_menuNmVal)!="[object]"){
+ alert("<spring:message code="comSymMnuMpm.menuList.validate.chkBrowse" />"); //메뉴 목록 데이타가 존재하지 않습니다.
+ chk_Object = false;
+ }
+ if(chk_browse=="Fox"&&eval(document.menuManageVO.tmp_menuNmVal)!="[object NodeList]"){
+ alert("<spring:message code="comSymMnuMpm.menuList.validate.chkBrowse" />"); //메뉴 목록 데이타가 존재하지 않습니다.
+ chk_Object = false;
+ }
+ if(chk_browse=="safai"&&eval(document.menuManageVO.tmp_menuNmVal)!="[object Collection]"){
+ alert("<spring:message code="comSymMnuMpm.menuList.validate.chkBrowse" />"); //메뉴 목록 데이타가 존재하지 않습니다.
+ chk_Object = false;
+ }
+ if( chk_Object ){
+ for (var j = 0; j < document.menuManageVO.tmp_menuNmVal.length; j++) {
+ Tree[j] = document.menuManageVO.tmp_menuNmVal[j].value;
+ }
+ createTree(Tree);
+ }else{
+ alert("<spring:message code="comSymMnuMpm.menuList.validate.chkObject" />"); //메뉴가 존재하지 않습니다. 메뉴 등록 후 사용하세요.
+ }
+ </script>
+ </div>
+ </td>
+ <%-- <td width="*" class="title_left">
+ <table border="0" cellspacing="0" cellpadding="0" align="left">
+ <tr>
+ <td width="90%"></td>
+ <td><span class="button"><a href="<c:url value='/sym/mnu/mpm/EgovMenuListSelect.do'/>" onclick="initlMenuList(); return false;">초기화</a></span></td>
+ <td width="2%"></td>
+ <td><span class="button"><input type="submit" value="<spring:message code="button.save" />" onclick="insertMenuList(); return false;"></span></td>
+ <td width="2%"></td>
+ <td><span class="button"><a href="#LINK" onclick="updateMenuList(); return false;"><spring:message code="button.update" /></a></span></td>
+ <td width="2%"></td>
+ <td><span class="button"><a href="#LINK" onclick="deleteMenuList(); return false;"><spring:message code="button.delete" /></a></span></td>
+ </tr>
+ </table>
+ </td> --%>
+ <td style="vertical-align:top">
+
+ <table class="wTable" >
+ <colgroup>
+ <col style="width:30%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.menuNo" /> <span class="pilsu">*</span></th><!-- 메뉴No -->
+ <td class="left">
+ <input name="menuNo" type="text" value="" maxlength="10" title="<spring:message code="comSymMnuMpm.menuList.menuNo" />" style="width:68px"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.menuOrdr" /> <span class="pilsu">*</span></th><!-- 메뉴순서 -->
+ <td class="left">
+ <input name="menuOrdr" type="text" value="" maxlength="10" title="<spring:message code="comSymMnuMpm.menuList.menuOrdr" />" style="width:68px"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.menuNm" /> <span class="pilsu">*</span></th><!-- 메뉴명 -->
+ <td class="left">
+ <input name="menuNm" type="text" size="30" value="" maxlength="30" title="<spring:message code="comSymMnuMpm.menuList.menuNm" />">
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.upperMenuId" /> <span class="pilsu">*</span></th><!-- 상위메뉴No -->
+ <td class="left">
+ <input name="upperMenuId" type="text" value="" maxlength="10" title="<spring:message code="comSymMnuMpm.menuList.upperMenuId" />" style="width:190px"/>
+ <a id="popupUpperMenuId" href="/sym/mnu/mpm/EgovMenuListSelectMvmn.do" target="_blank" title="<spring:message code="comSymMnuMpm.menuList.upperMenuId" />" style="selector-dummy:expression(this.hideFocus=false);"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />"
+ alt='' width="15" height="15" />(<spring:message code="comSymMnuMpm.menuList.mvmnMenuList" />)</a><!-- 메뉴선택 검색 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.progrmFileNm" /> <span class="pilsu">*</span></th><!-- 파일명 -->
+ <td class="left">
+ <input name="progrmFileNm" type="text" size="30" value="" maxlength="60" title="<spring:message code="comSymMnuMpm.menuList.progrmFileNm" />" style="width:190px"/>
+ <a id="popupProgrmFileNm" href="/sym/prm/EgovProgramListSearch.do" target="_blank" title="<spring:message code="comSymMnuMpm.menuList.progrmFileNm" />" style="selector-dummy:expression(this.hideFocus=false);"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />"
+ alt='' width="15" height="15" />(<spring:message code="comSymMnuMpm.menuList.searchFileNm" />)</a>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.relateImageNm" /> <span class="pilsu">*</span></th><!-- 관련이미지명 -->
+ <td width="70%" nowrap>
+ <input name="relateImageNm" type="text" size="30" value="" maxlength="30" title="<spring:message code="comSymMnuMpm.menuList.relateImageNm" />">
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.relateImagePath" /> <span class="pilsu">*</span></th><!-- 관련이미지경로 -->
+ <td>
+ <input name="relateImagePath" type="text" size="30" value="" maxlength="60" title="<spring:message code="comSymMnuMpm.menuList.relateImagePath" />">
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymMnuMpm.menuList.menuDc" /></th><!-- 메뉴설명 -->
+ <td width="70%">
+ <textarea name="menuDc" class="textarea" cols="45" rows="8" style="width:350px;" title="<spring:message code="comSymMnuMpm.menuList.menuDc" />"></textarea>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+
+ <input type="hidden" name="tmp_SearchElementName" value="">
+ <input type="hidden" name="tmp_SearchElementVal" value="">
+ <input type="hidden" name="tmp_CheckVal" value="">
+</div>
+
+</form>
+
+<!-- ********** 여기까지 내용 *************** -->
+</td>
+</tr>
+</table>
+</DIV>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/mpm/EgovMenuList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMap.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMap.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMap.jsp (revision 7)
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovSiteMap.jsp
+ * @Description : 사이트맵 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+
+ /* Image Path 설정 */
+// String imagePath_icon = "/images/egovframework/com/sym/mnu/stm/icon/";
+// String imagePath_button = "/images/egovframework/com/sym/mnu/stm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />" type="text/css">
+<link rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />" type="text/css">
+<title>메뉴생성</title>
+<style type="text/css">
+ h1 {font-size:12px;}
+ caption {visibility:hidden; font-size:0; height:0; margin:0; padding:0; line-height:0;}
+</style>
+<script type="text/javascript">
+var imgpath = "<c:url value='/images/egovframework/com/cmm/utl/'/>";
+</script>
+<script language="javascript1.2" type="text/javaScript" src="<c:url value='/js/egovframework/com/sym/mnu/mcm/EgovMenuCreatSiteMap.js' />" /></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+
+
+/* ********************************************************
+ * 메뉴 호출 함수
+ ******************************************************** */
+function fCallUrl(url) {
+
+ window.open(url,'dokdo','width=800,height=600,menubar=no,toolbar=no,location=no,resizable=no,status=no,scrollbars=no,top=300,left=700');
+}
+
+/* ********************************************************
+ * 조회 함수
+ ******************************************************** */
+function selectMenuCreatTmp() {
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+/* ********************************************************
+ * 멀티입력 처리 함수
+ ******************************************************** */
+function fInsertMenuCreat() {
+ var checkField = document.menuCreatManageForm.checkField;
+ var checkMenuNos = "";
+ var checkedCount = 0;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkMenuNos += ((checkedCount==0? "" : ",") + checkField[i].value);
+ checkedCount++;
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ checkMenuNos = checkField.value;
+ }
+ }
+ }
+ document.menuCreatManageForm.checkedMenuNoForInsert.value=checkMenuNos;
+ document.menuCreatManageForm.checkedAuthorForInsert.value=document.menuCreatManageForm.authorCode.value;
+ document.menuCreatManageForm.action = "<c:url value='/sym/mnu/mcm/EgovMenuCreatInsert.do'/>";
+ document.menuCreatManageForm.submit();
+}
+/* ********************************************************
+ * 메뉴사이트맵 생성 화면 호출
+ ******************************************************** */
+function fMenuCreatSiteMap() {
+ id = document.menuCreatManageForm.authorCode.value;
+ window.open("<c:url value='/sym/mnu/mcm/EgovMenuCreatSiteMapSelect.do'/>?authorCode="+id,'Pop_SiteMap','scrollbars=yes, width=550, height=700');
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+
+</head>
+<body>
+<form name="menuCreatManageForm" action ="<c:url value='/sym/mnu/mcm/EgovMenuCreatSelect.do' />" method="post">
+<div style="visibility:hidden;display:none;"><input name="iptSubmit" type="submit" value="전송" title="전송"></div>
+<input name="checkedMenuNoForInsert" type="hidden" />
+<input name="checkedAuthorForInsert" type="hidden" />
+
+<DIV id="main" style="display:width:700px;">
+
+
+
+<table width="717" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10">
+ <c:forEach var="result1" items="${list_menulist}" varStatus="status" >
+ <input type="hidden" name="tmp_menuNmVal" value="${result1.menuNo}|${result1.upperMenuId}|${result1.menuNm}|${result1.menuOrdr}|${result1.chkURL}|">
+ </c:forEach>
+ </td>
+ </tr>
+</table>
+<table width="717" cellpadding="8" class="table-line" summary="메뉴목록">
+ <caption>메뉴목록</caption>
+ <tr>
+ <td width='20'> </td>
+ <td>
+ <div class="tree" style="width:700px;">
+ <script language="javascript" type="text/javaScript">
+ var chk_Object = true;
+ var chk_browse = "";
+ if (eval(document.menuCreatManageForm.authorCode)=="[object]") chk_browse = "IE";
+ if (eval(document.menuCreatManageForm.authorCode)=="[object NodeList]") chk_browse = "Fox";
+ if (eval(document.menuCreatManageForm.authorCode)=="[object Collection]") chk_browse = "safai";
+
+ var Tree = new Array;
+ if(chk_browse=="IE"&&eval(document.menuCreatManageForm.tmp_menuNmVal)!="[object]"){
+ alert("메뉴 목록 데이타가 존재하지 않습니다.");
+ chk_Object = false;
+ }
+ if(chk_browse=="Fox"&&eval(document.menuCreatManageForm.tmp_menuNmVal)!="[object NodeList]"){
+ alert("메뉴 목록 데이타가 존재하지 않습니다.");
+ chk_Object = false;
+ }
+ if(chk_browse=="safai"&&eval(document.menuCreatManageForm.tmp_menuNmVal)!="[object Collection]"){
+ alert("메뉴 목록 데이타가 존재하지 않습니다.");
+ chk_Object = false;
+ }
+ if( chk_Object ){
+ for (var j = 0; j < document.menuCreatManageForm.tmp_menuNmVal.length; j++) {
+ Tree[j] = document.menuCreatManageForm.tmp_menuNmVal[j].value;
+ }
+ createTree(Tree);
+ }else{
+ alert("메뉴가 존재하지 않습니다. 메뉴 등록 후 사용하세요.");
+ window.close();
+ }
+ </script>
+ </div>
+ </td>
+ <td>
+
+ </td>
+ </tr>
+</table>
+
+</DIV>
+<input type="hidden" name="req_menuNo">
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMap.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMapng.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMapng.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMapng.jsp (revision 7)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+
+<%
+ /**
+ * @Class Name : EgovSiteMapng.jsp
+ * @Description : 사이트맵 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2011.07.29 서준식 사이트 맵 생성이 안되었을 때 발생하는 오류 수정
+ * 2018.10.11 이정은 공통컴포넌트 3.8 개선(사이트 맵 생성이 안되었을 때 안내 메시지 추가, 다국어처리, 퍼블리싱)
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+
+%>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<title><spring:message code="comSymMnuStm.siteMapng.siteMap"/></title><!-- 사이트맵 -->
+<!-- <style type="text/css">
+.location{ font-family:"돋움"; font-size:8pt; color:#6d6d6d ;padding-top:1px; padding-left:3px;
+ vertical-align: middle; text-dacoration: none}
+</style> -->
+<script language="javascript1.2">
+<!--
+/* ********************************************************
+ * 조회 함수
+ ******************************************************** */
+function fSiteMapng() {
+ document.siteMapngForm.action = "<c:url value='/sym/mnu/stm/EgovSiteMapng.do'/>";
+ document.siteMapngForm.submit();
+}
+/* ********************************************************
+ * Url Call 함수
+ ******************************************************** */
+function fCallUrl(fURL){
+ var vPath = "<c:url value='/'/>" +fURL;
+ window.location = vPath.replace("//","/");
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body>
+
+<title><spring:message code="comSymMnuStm.siteMapng.siteMap"/></title><!-- 사이트맵 -->
+
+
+<div class="wTableFrm">
+<form name="siteMapngForm" action ="javascript:fSiteMapng()" method="post">
+<!-- 타이틀 -->
+<h2><spring:message code="comSymMnuStm.siteMapng.siteMap"/></h2><!-- 사이트맵 -->
+<!-- 가로배열 -->
+<table>
+ <tr>
+ <input type="hidden" name="scrtyId" value="">
+ <c:if test="${!empty resultVO.bndeFileNm}">
+ <c:import url="${fn:trim(resultVO.bndeFileNm)}" />
+ </c:if>
+ <c:if test="${empty resultVO.bndeFileNm}">
+ <span><spring:message code="comSymMnuStm.siteMapng.emptySiteMap"/></span>
+ <!-- 1100.메뉴생성관리 > [메뉴생성]클릭 > 목록에서 체크선택 > [메뉴생성]클릭 > [사이트맵생성] 클릭 > 팝업에서 [사이트맵생성]클릭 과정을 거쳐야 사이트맵 생성이 됩니다. -->
+ </c:if>
+ </tr>
+</table>
+</div>
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/mnu/stm/EgovSiteMapng.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstDetailSelectUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstDetailSelectUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstDetailSelectUpdt.jsp (revision 7)
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovProgramChangRequstDetailSelectUpdt.jsp
+ * @Description : 프로그램변경요청 상세조회및 수정 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.04 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ //String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ //String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+--%>
+<%@ page 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="ImgUrl" value="/images/egovframework/com/sym/prm/"/>
+<c:set var="CssUrl" value="/css/egovframework/com/sym/prm/"/>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.title"/></title><!-- 프로그램변경요청 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+<validator:javascript formName="progrmManageDtlVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 파일검색 화면 호출 함수
+ ******************************************************** */
+function searchFileNm() {
+ document.progrmChangeRequstForm.tmp_SearchElementName.value = "progrmFileNm";
+ window.open("<c:url value='/sym/prm/EgovProgramListSearch.do' />",'','width=500,height=600');
+}
+
+/* ********************************************************
+ * 수정 처리 함수
+ ******************************************************** */
+function updateProgrmChangeRequst(form) {
+ if(confirm("<spring:message code="common.save.msg"/>")){
+ if(!validateProgrmManageDtlVO(form)){
+ return;
+ }else{
+ form.action ="<c:url value='/sym/prm/EgovProgramChangRequstDetailSelectUpdt.do'/>";
+ form.submit();
+ }
+ }
+}
+
+
+/* ********************************************************
+ * 삭제처리 함수
+ ******************************************************** */
+function deleteProgrmChangeRequst(form) {
+ form.action = "<c:url value='/sym/prm/EgovProgramChangRequstDelete.do'/>";
+ form.submit();
+}
+
+/* ********************************************************
+ * 목록조회 처리 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/prm/EgovProgramChangeRequstSelect.do' />";
+}
+
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body>
+<c:set var="vrqesterSj"><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.rqesterSj"/></c:set>
+<c:set var="vchangerqesterCn"><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.changerqesterCn"/></c:set>
+<c:set var="vrqesterProcessCn"><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.rqesterProcessCn"/></c:set>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg"/></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<form:form commandName="progrmManageDtlVO" method="post">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.pageTop.title"/></h2><!-- 프로그램변경요청 상세조회 /수정 -->
+
+ <!-- 등록폼 -->
+ <h2 class="tit02" style="margin:0 0 10px 0"><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.title.sub1"/></h2><!-- 변경요청내역 -->
+ <table class="wTable mb20">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.rqesterNo"/> <span class="pilsu">*</span></th><!-- 요청번호 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.rqesterNo}"/>
+ <form:hidden path="rqesterNo" />
+ <form:errors path="rqesterNo" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.progrmFileNm"/> <span class="pilsu">*</span></th><!-- 프로그램파일명 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.progrmFileNm}"/>
+ <form:hidden path="progrmFileNm" />
+ <form:errors path="progrmFileNm" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.rqesterPersonId"/> <span class="pilsu">*</span></th><!-- 요청자ID -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.rqesterPersonId}"/>
+ <form:hidden path="rqesterPersonId" />
+ <form:errors path="rqesterPersonId" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.rqesterDe"/> <span class="pilsu">*</span></th><!-- 요청일자 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.rqesterDe}"/>
+ <form:hidden path="rqesterDe" />
+ <form:errors path="rqesterDe" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.rqesterSj"/> <span class="pilsu">*</span></th><!-- 요청제목 -->
+ <td class="left">
+ <form:input path="rqesterSj" size="60" maxlength="60" title="${vrqesterSj}"/>
+ <form:errors path="rqesterSj" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.changerqesterCn"/> </th><!-- 변경요청내용 -->
+ <td class="left">
+ <form:textarea path="changerqesterCn" rows="4" cols="75" title="${vchangerqesterCn}"/><!-- 변경요청내용 -->
+ <form:errors path="changerqesterCn"/>
+ </td>
+ </tr>
+ </table>
+
+ <h2 class="tit02" style="margin:0 0 10px 0"><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.title.sub2"/></h2><!-- 변경처리내역 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.processDe"/> <span class="pilsu">*</span></th><!-- 변경처리일자 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.processDe}"/>
+ <form:hidden path="processDe" />
+ <form:errors path="processDe" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.opetrId"/> <span class="pilsu">*</span></th><!-- 변경처리자 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.opetrId}"/>
+ <form:hidden path="opetrId" />
+ <form:errors path="opetrId" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.processSttus"/> <span class="pilsu">*</span></th><!-- 변경처리상태 -->
+ <td class="left">
+ <c:if test="${empty progrmManageDtlVO.processSttus}">N/A</c:if>
+ <c:if test="${progrmManageDtlVO.processSttus == 'A'}"><spring:message code="comSymPrm.programChangeRequst.processSttusA"/></c:if><!-- 신청중 -->
+ <c:if test="${progrmManageDtlVO.processSttus == 'P'}"><spring:message code="comSymPrm.programChangeRequst.processSttusP"/></c:if><!-- 진행중 -->
+ <c:if test="${progrmManageDtlVO.processSttus == 'R'}"><spring:message code="comSymPrm.programChangeRequst.processSttusR"/></c:if><!-- 반려 -->
+ <c:if test="${progrmManageDtlVO.processSttus == 'C'}"><spring:message code="comSymPrm.programChangeRequst.processSttusC"/></c:if><!-- 처리완료 -->
+ <form:hidden path="processSttus" />
+ <form:errors path="processSttus" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstDetailSelectUpdt.rqesterProcessCn"/></th><!-- 변경처리내용 -->
+ <td class="left">
+ <textarea id="rqesterProcessCn" name="rqesterProcessCn" rows="4" readonly cols="75" title="${vrqesterProcessCn}">${progrmManageDtlVO.rqesterProcessCn }</textarea><!-- 변경처리내용 -->
+ <form:errors path="rqesterProcessCn"/>
+ </td>
+ </tr>
+ </table>
+
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/sym/prm/EgovProgramChangeRequstSelect.do'/>" onclick="selectList(); return false;"><spring:message code="button.list"/></a></span><!-- 목록 -->
+ <input class="s_submit" type="submit" value='<spring:message code="button.update" />' onclick="updateProgrmChangeRequst(document.forms[0]); return false;" /><!-- 수정 -->
+ <span class="btn_s"><a href="#LINK" onclick="deleteProgrmChangeRequst(document.forms[0]); return false;"><spring:message code="button.delete"/></a></span><!-- 삭제 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input type="hidden" name="tmp_SearchElementName" value="">
+<input type="hidden" name="tmp_SearchElementVal" value="">
+
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstDetailSelectUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearch.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearch.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearch.jsp (revision 7)
@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovFileNmSearch.jsp
+ * @Description : 프로그램파일명 검색 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2011.10.18 서준식 프로그램파일명 검색 결과를 부모창으로 넘겨주는 자바스크립트 수정(브라우저 호환성 문제로 수정함)
+
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymPrm.fileNmSearch.title"/></title><!-- 프로그램파일명 검색 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jquery-1.4.2.min.js' />" ></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+ document.progrmManageForm.pageIndex.value = pageNo;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListSearch.do'/>";
+ document.progrmManageForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectProgramListSearch() {
+ document.progrmManageForm.pageIndex.value = 1;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListSearch.do'/>";
+ document.progrmManageForm.submit();
+}
+
+/* ********************************************************
+ * 프로그램목록 선택 처리 함수
+ ******************************************************** */
+function choisProgramListSearch(vFileNm) {
+ //eval("opener.document.all."+opener.document.all.tmp_SearchElementName.value).value = vFileNm;
+ //opener.document.menuManageVO.progrmFileNm.value = vFileNm;
+ var parentFrom = opener.document.getElementsByTagName('form');
+ parentFrom[0].progrmFileNm.value = vFileNm;
+ window.close();
+}
+-->
+</script>
+</head>
+<body>
+<form name="progrmManageForm" action ="<c:url value='/sym/prm/EgovProgramListSearch.do'/>" method="post">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+
+<div class="board" style="width:480px">
+ <h1><spring:message code="comSymPrm.fileNmSearch.pageTop.title"/></h1><!-- 프로그램파일명 검색 -->
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymPrm.fileNmSearch.progrmFileNm"/> : </label><!-- 프로그램파일명 -->
+ <input class="s_input2 vat" name="searchKeyword" type="text" value="" size="30" maxlength="60" title="<spring:message code="title.searchCondition"/>" /><!-- 검색조건 -->
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title="<spring:message code="title.inquire"/>" onclick="selectProgramListSearch(); return false;" /><!-- 조회 -->
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:50%" />
+ <col style="width:50%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comSymPrm.fileNmSearch.progrmFileNm"/></th><!-- 프로그램파일명 -->
+ <th scope="col"><spring:message code="comSymPrm.fileNmSearch.progrmNm"/></th><!-- 프로그램명 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${list_progrmmanage}" varStatus="status">
+ <tr>
+ <td>
+ <span class="link"><a href="#LINK" onclick="choisProgramListSearch('<c:out value="${result.progrmFileNm}"/>'); return false;">
+ <c:out value="${result.progrmFileNm}"/></a></span></td>
+ <td><c:out value="${result.progrmKoreanNm}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearch.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequstProcess.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequstProcess.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequstProcess.jsp (revision 7)
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovProgramChangeRequstProcess.jsp
+ * @Description : 프로그램변경요청처리 조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.04 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programChangeRequstProcess.title"/></title><!-- 프로그램변경요청처리 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+function initCalendar(){
+
+ $("#searchKeywordFrom").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ $("#searchKeywordTo").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+}
+
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+ document.programChangeRequstProcessListForm.pageIndex.value = pageNo;
+ document.programChangeRequstProcessListForm.action = "<c:url value='/sym/prm/EgovProgramChangeRequstProcessListSelect.do'/>";
+ document.programChangeRequstProcessListForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectProgramChangeRequstProcessList() {
+ document.programChangeRequstProcessListForm.pageIndex.value = 1;
+ document.programChangeRequstProcessListForm.action = "<c:url value='/sym/prm/EgovProgramChangeRequstProcessListSelect.do'/>";
+ document.programChangeRequstProcessListForm.submit();
+}
+
+/* ********************************************************
+ * 상세조회처리 함수
+ ******************************************************** */
+function selectChangeRequstProcessListDetail(progrmFileNm, tmpNo) {
+ document.programChangeRequstProcessListForm.tmpProgrmNm.value = progrmFileNm;
+ document.programChangeRequstProcessListForm.tmpRqesterNo.value = tmpNo;
+ document.programChangeRequstProcessListForm.action = "<c:url value='/sym/prm/EgovProgramChangRequstProcessDetailSelect.do'/>";
+ document.programChangeRequstProcessListForm.submit();
+}
+
+/* ********************************************************
+ * 검색조건 처리 함수
+ ******************************************************** */
+function fncSearchSpan(vSearch) {
+ searchSpan.innerHTML = " "
+ if(vSearch == "1"){
+ searchSpan.innerHTML += "<spring:message code="comSymPrm.programChangeRequstProcess.searchKeyword.all"/> <input name='searchKeyword' type='hidden' size='10' value='%' maxlength='20' >";
+ }else if(vSearch == "2"){
+ searchSpan.innerHTML += "<spring:message code="comSymPrm.programChangeRequstProcess.searchCondition.opt2"/> <select name='searchKeyword'> <option value=A><spring:message code="comSymPrm.programChangeRequstProcess.processSttusA"/> <//option> <option value=P><spring:message code="comSymPrm.programChangeRequstProcess.processSttusP"/> <//option> <option value=R><spring:message code="comSymPrm.programChangeRequstProcess.processSttusR"/> <//option> <option value=C><spring:message code="comSymPrm.programChangeRequstProcess.processSttusC"/> <//option> <//select>";//처리상태/신청중/진행중/반려/처리완료
+ }else if(vSearch == "3"){
+ searchSpan.innerHTML += "<spring:message code="comSymPrm.programChangeRequstProcess.rqesterDe"/> "
+ + "<input type='hidden' name='cal_url' value=\"<c:url value='/sym/cal/EgovNormalCalPopup.do'/>\" />"
+ + "<input id='searchKeywordFrom' name='searchKeywordFrom' type='text' size='10' value='' maxlength='10'>"
+ + " <input id='searchKeywordTo' name='searchKeywordTo' type='text' size='10' value='' maxlength='10'>";
+ initCalendar();
+ }else if(vSearch == "4"){
+ searchSpan.innerHTML += "<spring:message code="comSymPrm.programChangeRequstProcess.rqesterPersonId"/> <input name='searchKeyword' type='text' size='10' value='' maxlength='20' >";
+ }
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="board">
+ <h1><spring:message code="comSymPrm.programChangeRequstProcess.pageTop.title"/></h1><!-- 프로그램변경요청처리 -->
+
+ <form name="programChangeRequstProcessListForm" method="post" action="">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <select name="searchCondition" onchange="fncSearchSpan(this.value);" title="검색조건">
+ <option value="1"><spring:message code="comSymPrm.programChangeRequstProcess.searchCondition.opt1"/></option><!-- 전체 -->
+ <option value="2"><spring:message code="comSymPrm.programChangeRequstProcess.searchCondition.opt2"/></option><!-- 처리상태 -->
+ <option value="3"><spring:message code="comSymPrm.programChangeRequstProcess.searchCondition.opt3"/></option><!-- 요청일자 -->
+ <option value="4"><spring:message code="comSymPrm.programChangeRequstProcess.searchCondition.opt4"/></option><!-- 요청자 -->
+ </select>
+ <span id="searchSpan" > <spring:message code="comSymPrm.programChangeRequstProcess.searchKeyword.all"/> <input name='searchKeyword' type='hidden' size='10' value='%' maxlength='20' title="<spring:message code="comSymPrm.programChangeRequstProcess.searchKeyword.value"/>"></span><!-- 전체조회 --><!-- 검색조건값 -->
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="selectProgramChangeRequstProcessList(); return false;" /><!-- 조회 -->
+ </li>
+ </ul>
+ </div>
+ <input type="hidden" name="tmpProgrmNm">
+ <input type="hidden" name="tmpRqesterNo">
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:80px" />
+ <col style="width:177px" />
+ <col style="width:80px" />
+ <col style="width:200px" />
+ <col style="width:80px" />
+ <col style="width:100px" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequstProcess.rqesterNo"/></th><!-- 요청번호 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequstProcess.progrmNm"/></th><!-- 프로그램파일명 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequstProcess.processSttus"/></th><!-- 처리상태 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequstProcess.rqesterSj"/></th><!-- 요청제목 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequstProcess.rqesterPersonId"/></th><!-- 요청자 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequstProcess.rqesterDe"/></th><!-- 요청일자 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:if test="${fn:length(list_changerequst) == 0}">
+ <tr>
+ <td colspan="6">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <c:forEach var="result" items="${list_changerequst}" varStatus="status">
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <tr>
+ <td><c:out value="${result.rqesterNo}"/></td>
+ <td>
+ <form name="item" method="post" action="<c:url value='/sym/prm/EgovProgramChangRequstProcessDetailSelect.do'/>">
+ <input type="hidden" name="tmpProgrmNm" value="<c:out value="${result.progrmFileNm }"/>"/>
+ <input type="hidden" name="tmpRqesterNo" value="<c:out value="${result.rqesterNo }"/>"/>
+ <span class="link"><input type="submit" value="<c:out value="${result.progrmFileNm }"/>" onclick="selectChangeRequstProcessListDetail('<c:out value="${result.progrmFileNm}"/>','<c:out value="${result.rqesterNo}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td>
+ <c:if test="${empty result.processSttus}">N/A</c:if>
+ <c:if test="${result.processSttus == 'A'}"><spring:message code="comSymPrm.programChangeRequstProcess.processSttusA"/></c:if><!-- 신청중 -->
+ <c:if test="${result.processSttus == 'P'}"><spring:message code="comSymPrm.programChangeRequstProcess.processSttusP"/></c:if><!-- 진행중 -->
+ <c:if test="${result.processSttus == 'R'}"><spring:message code="comSymPrm.programChangeRequstProcess.processSttusR"/></c:if><!-- 반려 -->
+ <c:if test="${result.processSttus == 'C'}"><spring:message code="comSymPrm.programChangeRequstProcess.processSttusC"/></c:if><!-- 처리완료 -->
+ </td>
+ <td><c:out value="${result.rqesterSj}"/></td>
+ <td><c:out value="${result.rqesterPersonId}"/></td>
+ <td><c:out value="${result.rqesterDe}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequstProcess.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListManage.jsp (revision 7)
@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovProgramListManage.jsp
+ * @Description : 프로그램목록 조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.03 신용호 공통컴포넌트 3.8 개선
+ * 2019.12.11 신용호 KISA 보안약점 조치 (크로스사이트 스크립트)
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programListManage.title" /></title><!-- 프로그램목록리스트 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 모두선택 처리 함수
+ ******************************************************** */
+function fCheckAll() {
+ var checkField = document.progrmManageForm.checkField;
+ if(document.progrmManageForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+/* ********************************************************
+ * 멀티삭제 처리 함수
+ ******************************************************** */
+function fDeleteProgrmManageList() {
+ var checkField = document.progrmManageForm.checkField;
+ var ProgrmFileNm = document.progrmManageForm.checkProgrmFileNm;
+ var checkProgrmFileNms = "";
+ var checkedCount = 0;
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkProgrmFileNms += ((checkedCount==0? "" : ",") + ProgrmFileNm[i].value);
+ checkedCount++;
+ }
+ }
+ } else {
+ if(checkField.checked) {
+ checkProgrmFileNms = ProgrmFileNm.value;
+ }
+ }
+ }
+
+ if(checkedCount ==0){
+ alert("선택된 메뉴가 없습니다.");
+ return false;
+ }
+
+ if(confirm("<spring:message code="common.delete.msg" />")){ //삭제하시겠습니까?
+ document.progrmManageForm.checkedProgrmFileNmForDel.value=checkProgrmFileNms;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgrmManageListDelete.do'/>";
+ document.progrmManageForm.submit();
+ }
+}
+
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+// document.menuManageForm.searchKeyword.value =
+ document.progrmManageForm.pageIndex.value = pageNo;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListManageSelect.do'/>";
+ document.progrmManageForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectProgramListManage() {
+ document.progrmManageForm.pageIndex.value = 1;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListManageSelect.do'/>";
+ document.progrmManageForm.submit();
+}
+/* ********************************************************
+ * 입력 화면 호출 함수
+ ******************************************************** */
+function insertProgramListManage() {
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListRegist.do'/>";
+ document.progrmManageForm.submit();
+}
+/* ********************************************************
+ * 상세조회처리 함수
+ ******************************************************** */
+function selectUpdtProgramListDetail(progrmFileNm) {
+ document.progrmManageForm.tmp_progrmNm.value = progrmFileNm;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListDetailSelect.do'/>";
+ document.progrmManageForm.submit();
+}
+/* ********************************************************
+ * focus 시작점 지정함수
+ ******************************************************** */
+ function fn_FocusStart(){
+ var objFocus = document.getElementById('F1');
+ objFocus.focus();
+ }
+
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1><spring:message code="comSymPrm.programListManage.pageTop.title" /></h1><!-- 프로그램목록관리 -->
+ <form name="progrmManageForm" action ="<c:url value='/sym/prm/EgovProgramListManageSelect.do' />" method="post">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <input name="checkedProgrmFileNmForDel" type="hidden" />
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymPrm.programListManage.programName" /> : </label><!-- 프로그램명 -->
+ <input id="F1" class="s_input2 vat" name="searchKeyword" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="60" maxlength="60" onkeypress="press();" title="<spring:message code="title.searchCondition" />" /><!-- 검색조건 -->
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="selectProgramListManage(); return false;" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/sym/prm/EgovProgramListRegist.do'/>" onclick="insertProgramListManage(); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span><!-- 등록 -->
+ <span class="btn_b"><a href="#LINK" onclick="fDeleteProgrmManageList(); return false;" title='<spring:message code="button.delete" />'><spring:message code="button.delete" /></a></span><!-- 삭제 -->
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:20px" />
+ <col style="" />
+ <col style="width:137px" />
+ <col style="width:260px" />
+ <col style="width:150px" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><input type="checkbox" name="checkAll" class="check2" onclick="fCheckAll();" title="전체선택" /></th>
+ <th scope="col"><spring:message code="comSymPrm.programListManage.programFileName" /></th><!-- 프로그램파일명 -->
+ <th scope="col"><spring:message code="comSymPrm.programListManage.programName" /></th><!-- 프로그램명 -->
+ <th scope="col">URL</th>
+ <th scope="col"><spring:message code="comSymPrm.programListManage.ProgramDescription" /></th><!-- 프로그램설명 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(list_progrmmanage) == 0}">
+ <tr>
+ <td colspan="5">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+
+ <c:forEach var="result" items="${list_progrmmanage}" varStatus="status">
+ <tr>
+ <td>
+ <input type="checkbox" name="checkField" class="check2" title="선택">
+ <input name="checkProgrmFileNm" type="hidden" value="<c:out value='${result.progrmFileNm}'/>"/>
+ </td>
+ <td>
+ <span class="link"><a href="<c:url value='/sym/prm/EgovProgramListDetailSelect.do'/>?tmp_progrmNm=<c:out value="${result.progrmFileNm}"/>" onclick="selectUpdtProgramListDetail('<c:out value="${result.progrmFileNm}"/>'); return false;">
+
+ <c:if test="${fn:length(result.progrmFileNm)> 22}">
+ <c:out value="${fn:substring(result.progrmFileNm,0, 22)}"/>...
+ </c:if>
+ <c:if test="${fn:length(result.progrmFileNm)<= 22}">
+ <c:out value="${result.progrmFileNm}"/>
+ </c:if>
+
+ </a></span>
+ </td>
+ <td>
+ <c:if test="${fn:length(result.progrmKoreanNm)> 12}">
+ <c:out value="${fn:substring(result.progrmKoreanNm,0, 12)}"/>...
+ </c:if>
+ <c:if test="${fn:length(result.progrmKoreanNm)<= 12}">
+ <c:out value="${result.progrmKoreanNm}"/>
+ </c:if>
+ </td>
+ <td>
+ <c:if test="${fn:length(result.URL)> 35}">
+ <c:out value="${fn:substring(result.URL,0, 35)}"/>...
+ </c:if>
+ <c:if test="${fn:length(result.URL)<= 35}">
+ <c:out value="${result.URL}"/>
+ </c:if>
+
+ </td>
+ <td><c:out value="${result.progrmDc}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+
+ <input type="hidden" name="cmd">
+ <input type="hidden" name="tmp_progrmNm">
+ </form>
+
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListRegist.jsp (revision 7)
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovProgramListRegist.jsp
+ * @Description : 프로그램목록 등록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.03 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ //String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ // String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+--%>
+<%@ page 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="ImgUrl" value="/images/egovframework/com/sym/prm/"/>
+<c:set var="CssUrl" value="/css/egovframework/com/sym/prm/"/>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programListRegist.title" /></title><!-- 프로그램목록등록 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+<validator:javascript formName="progrmManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 입력 처리 함수
+ ******************************************************** */
+function insertProgramListManage(form) {
+ if(confirm("<spring:message code="common.save.msg"/>")){
+ if(!validateProgrmManageVO(form)){
+ return;
+ }else{
+
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록조회 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/prm/EgovProgramListManageSelect.do' />";
+}
+
+/* ********************************************************
+ * focus 시작점 지정함수
+ ******************************************************** */
+ function fn_FocusStart(){
+ var objFocus = document.getElementById('F1');
+ objFocus.focus();
+ }
+
+
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body>
+<c:set var="vprogrmFileNm"><spring:message code="comSymPrm.programListRegist.progrmFileNm"/></c:set>
+<c:set var="vprogrmStrePath"><spring:message code="comSymPrm.programListRegist.progrmStrePath"/></c:set>
+<c:set var="vprogrmKoreanNm"><spring:message code="comSymPrm.programListRegist.progrmKoreanNm"/></c:set>
+<c:set var="vprogrmDc"><spring:message code="comSymPrm.programListRegist.progrmDc"/></c:set>
+<c:set var="vurl"><spring:message code="comSymPrm.programListDetailSelectUpdt.url"/></c:set>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<div id="border" style="width:730px">
+<table border="0">
+ <tr>
+ <td width="700">
+<!-- ********** 여기서 부터 본문 내용 *************** -->
+<form:form commandName="progrmManageVO" method="post" >
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymPrm.programListRegist.pageTop.title" /></h2><!-- 프로그램목록 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programListRegist.progrmFileNm"/><span class="pilsu">*</span></th><!-- 프로그램파일명 -->
+ <td class="left">
+ <form:input path="progrmFileNm" size="50" maxlength="50" id="F1" title="${vprogrmFileNm}"/><!-- 프로그램파일명 -->
+ <form:errors path="progrmFileNm" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListRegist.progrmStrePath"/><span class="pilsu">*</span></th><!-- 저장경로 -->
+ <td class="left">
+ <form:input path="progrmStrePath" size="60" maxlength="60" title="${vprogrmStrePath}"/><!-- 저장경로 -->
+ <form:errors path="progrmStrePath" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListRegist.progrmKoreanNm"/> <span class="pilsu">*</span></th><!-- 한글명 -->
+ <td class="left">
+ <form:input path="progrmKoreanNm" size="60" maxlength="60" title="${vprogrmKoreanNm}"/><!-- 한글명 -->
+ <form:errors path="progrmKoreanNm"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListRegist.url"/> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="URL" size="60" maxlength="60" title="${vurl}"/>
+ <form:errors path="URL"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListRegist.progrmDc"/></th><!-- 프로그램설명 -->
+ <td class="left">
+ <form:textarea path="progrmDc" rows="14" cols="75" cssClass="txaClass" title="${vprogrmDc}"/><!-- 프로그램설명 -->
+ <form:errors path="progrmDc"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="insertProgramListManage(document.forms[0]); return false;" /><!-- 저장 -->
+ <span class="btn_s"><a href="<c:url value='/sym/prm/EgovProgramListManageSelect.do'/>" onclick="selectList(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input name="cmd" type="hidden" value="<c:out value='insert'/>"/>
+</form:form>
+<!-- ********** 여기까지 내용 *************** -->
+</td>
+</tr>
+</table>
+</DIV>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListDetailSelectUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListDetailSelectUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListDetailSelectUpdt.jsp (revision 7)
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovProgramListDetailSelectUpdt.jsp
+ * @Description : 프로그램목록 상세조회및 수정 화면
+ * @Modification Ination
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.03 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ //String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ //String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+--%>
+<%@ page 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="ImgUrl" value="/images/egovframework/com/sym/prm/"/>
+<c:set var="CssUrl" value="/css/egovframework/com/sym/prm/"/>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programListDetailSelectUpdt.title"/></title><!-- 프로그램목록 상세조회 /수정 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="progrmManageVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 수정처리 함수
+ ******************************************************** */
+function updateProgramListManage(form) {
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(!validateProgrmManageVO(form)){
+ return;
+ }else{
+ form.action="<c:url value='/sym/prm/EgovProgramListDetailSelectUpdt.do' />";
+ form.submit();
+ }
+ }
+}
+
+/* ********************************************************
+ * 삭제처리함수
+ ******************************************************** */
+function deleteProgramListManage(form) {
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ form.action="<c:url value='/sym/prm/EgovProgramListManageDelete.do' />";
+ form.submit();
+ }
+}
+
+/* ********************************************************
+ * 목록조회 함수
+ ******************************************************** */
+function selectList(){
+
+ var varForm = document.getElementById("progrmManageVO");
+ varForm.action = "<c:url value='/sym/prm/EgovProgramListManageSelect.do' />";
+ varForm.submit();
+
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body>
+<c:set var="vprogrmFileNm"><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmFileNm"/></c:set>
+<c:set var="vprogrmStrePath"><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmStrePath"/></c:set>
+<c:set var="vprogrmKoreanNm"><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmKoreanNm"/></c:set>
+<c:set var="vprogrmDc"><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmDc"/></c:set>
+<c:set var="vurl"><spring:message code="comSymPrm.programListDetailSelectUpdt.url"/></c:set>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="progrmManageVO" method="post">
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymPrm.programListDetailSelectUpdt.pageTop.title"/></h2><!-- 프로그램목록 상세조회 /수정 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmFileNm"/> <span class="pilsu">*</span></th><!-- 프로그램파일명 -->
+ <td class="left">
+ <form:input path="progrmFileNm" size="50" maxlength="50" title="${vprogrmFileNm}"/><!-- 프로그램파일명 -->
+ <form:errors path="progrmFileNm"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmStrePath"/> <span class="pilsu">*</span></th><!-- 저장경로 -->
+ <td class="left">
+ <form:input path="progrmStrePath" size="50" maxlength="50" title="${vprogrmStrePath}"/><!-- 저장경로 -->
+ <form:errors path="progrmStrePath"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmKoreanNm"/> <span class="pilsu">*</span></th><!-- 한글명 -->
+ <td class="left">
+ <form:input path="progrmKoreanNm" size="60" maxlength="60" title="${vprogrmKoreanNm}"/><!-- 한글명 -->
+ <form:errors path="progrmKoreanNm" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListDetailSelectUpdt.url"/> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="URL" size="60" maxlength="60" title="${vurl}" />
+ <form:errors path="URL" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programListDetailSelectUpdt.progrmDc"/> <span class="pilsu">*</span></th><!-- 프로그램설명 -->
+ <td class="left">
+ <form:textarea path="progrmDc" rows="14" cols="75" title="${vprogrmDc}"/><!-- 프로그램설명 -->
+ <form:errors path="progrmDc"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a onclick="selectList(); return false;"><spring:message code="button.list"/></a></span><!-- 목록 -->
+ <input class="s_submit" type="submit" value='<spring:message code="button.update" />' onclick="updateProgramListManage(document.forms[0]); return false;" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/sym/prm/EgovProgramListManageDelete.do'/>?progrmFileNm=<c:out value="${progrmManageVO.progrmFileNm }"/>" onclick="deleteProgramListManage(document.forms[0]); return false;"><spring:message code="button.delete" /></a></span><!-- 삭제 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input name="cmd" type="hidden" value="<c:out value='update'/>"/>
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramListDetailSelectUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHst.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHst.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHst.jsp (revision 7)
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovProgramChgHst.jsp
+ * @Description : 프로그램변경이력 조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.04 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programChgHst.title"/></title><!-- 프로그램변경이력 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+// document.programChgHstForm.searchKeyword.value =
+ document.programChgHstForm.pageIndex.value = pageNo;
+ document.programChgHstForm.action = "<c:url value='/sym/prm/EgovProgramChgHstListSelect.do'/>";
+ document.programChgHstForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectProgrmChgHstList() {
+ document.programChgHstForm.pageIndex.value = 1;
+ document.programChgHstForm.action = "<c:url value='/sym/prm/EgovProgramChgHstListSelect.do'/>";
+ document.programChgHstForm.submit();
+}
+
+/* ********************************************************
+ * 상세조회처리 함수
+ ******************************************************** */
+function selectChgHstListDetail(progrmFileNm, tmp_no) {
+ document.programChgHstForm.tmpRqesterNo.value = '';
+ document.programChgHstForm.tmpProgrmNm.value = progrmFileNm;
+ document.programChgHstForm.tmp_rqesterNo.value = tmp_no;
+ document.programChgHstForm.action = "<c:url value='/sym/prm/EgovProgramChgHstListDetailSelect.do'/>";
+ document.programChgHstForm.submit();
+}
+-->
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="board">
+ <h1><spring:message code="comSymPrm.programChgHst.pageTop.title"/></h1><!--프로그램변경이력-->
+
+ <form name="programChgHstForm" action ="<c:url value='/sym/prm/EgovProgramChgHstListSelect.do'/>" method="post">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <div class="search_box" title="이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다.">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymPrm.programChgHst.progrmFileNm"/> : </label><!--프로그램파일명-->
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="60" size="80" title="<spring:message code="title.searchCondition"/>" /><!-- 검색조건 -->
+ <input class="s_btn" type="submit" value="<spring:message code="title.inquire"/>" title="<spring:message code="title.inquire"/>" onclick="selectProgrmChgHstList(); return false;" /><!-- 조회 -->
+ </li>
+ </ul>
+ </div>
+ <input type="hidden" name="tmpProgrmNm">
+ <input type="hidden" name="tmpRqesterNo">
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:15%" />
+ <col style="width:10%" />
+ <col style="width:30%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comSymPrm.programChgHst.progrmFileNm"/></th><!--프로그램파일명-->
+ <th scope="col"><spring:message code="comSymPrm.programChgHst.processSttus"/></th><!-- 처리상태 -->
+ <th scope="col"><spring:message code="comSymPrm.programChgHst.rqesterProcessCn"/></th><!-- 처리내용 -->
+ <th scope="col"><spring:message code="comSymPrm.programChgHst.rqesterPersonId"/></th><!-- 변경요청자 -->
+ <th scope="col"><spring:message code="comSymPrm.programChgHst.rqesterDe"/></th><!-- 변경요청일자 -->
+ <th scope="col"><spring:message code="comSymPrm.programChgHst.processDe"/></th><!-- 변경완료일자 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(list_changerequst) == 0}">
+ <tr>
+ <td colspan="6">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <c:forEach var="result" items="${list_changerequst}" varStatus="status">
+ <tr>
+ <td style="cursor:hand;">
+ <form name="item" method="post" action="<c:url value='/sym/prm/EgovProgramChgHstListDetailSelect.do'/>">
+ <input type="hidden" name="tmpProgrmNm" value="<c:out value="${result.progrmFileNm }"/>"/>
+ <input type="hidden" name="tmpRqesterNo" value="<c:out value="${result.rqesterNo }"/>"/>
+ <span class="link"><input type="submit" value="<c:out value="${result.progrmFileNm}"/>" onclick="selectChgHstListDetail('<c:out value="${result.progrmFileNm}"/>','<c:out value="${result.rqesterNo}"/>'); return false;"></span>
+ </form></td>
+ <td>
+ <c:if test="${empty result.processSttus}">N/A</c:if>
+ <c:if test="${result.processSttus == 'A'}"><spring:message code="comSymPrm.programChgHst.processSttusA"/></c:if><!-- 신청중 -->
+ <c:if test="${result.processSttus == 'P'}"><spring:message code="comSymPrm.programChgHst.processSttusP"/></c:if><!-- 진행중 -->
+ <c:if test="${result.processSttus == 'R'}"><spring:message code="comSymPrm.programChgHst.processSttusR"/></c:if><!-- 반려 -->
+ <c:if test="${result.processSttus == 'C'}"><spring:message code="comSymPrm.programChgHst.processSttusC"/></c:if><!-- 처리완료 -->
+ </td>
+ <td><c:out value="${result.rqesterProcessCn}"/></td>
+ <td><c:out value="${result.rqesterPersonId}"/></td>
+ <td><c:out value="${result.rqesterDe}"/></td>
+ <td><c:out value="${result.processDe}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHst.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequst.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequst.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequst.jsp (revision 7)
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovProgramChangeRequst.jsp
+ * @Description : 프로그램변경요청 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2011.09.14 서준식 리스트 내용 없음 표시
+ * 2018.09.03 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programChangeRequst.title"/></title><!-- 프로그램변경요청 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+// document.progrmChangeRequstForm.searchKeyword.value =
+ document.progrmChangeRequstForm.pageIndex.value = pageNo;
+ document.progrmChangeRequstForm.action = "<c:url value='/sym/prm/EgovProgramChangeRequstSelect.do'/>";
+ document.progrmChangeRequstForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectProgrmChangeRequstList() {
+ document.progrmChangeRequstForm.pageIndex.value = 1;
+ document.progrmChangeRequstForm.action = "<c:url value='/sym/prm/EgovProgramChangeRequstSelect.do'/>";
+ document.progrmChangeRequstForm.submit();
+}
+
+/* ********************************************************
+ * 입력 화면 호출 함수
+ ******************************************************** */
+function insertChangeRequst() {
+ document.progrmChangeRequstForm.action = "<c:url value='/sym/prm/EgovProgramChangRequstStre.do'/>";
+ document.progrmChangeRequstForm.submit();
+}
+
+/* ********************************************************
+ * 상세조회처리 함수
+ ******************************************************** */
+function selectUpdtChangeRequstListDetail(progrmFileNm, tmpNo) {
+ document.progrmChangeRequstForm.tmpProgrmNm.value = progrmFileNm;
+ document.progrmChangeRequstForm.tmpRqesterNo.value = tmpNo;
+ document.progrmChangeRequstForm.action = "<c:url value='/sym/prm/EgovProgramChangRequstDetailSelect.do'/>";
+ document.progrmChangeRequstForm.submit();
+}
+
+function deleteChangeRequstList() {
+ progrmChangeRequstForm.submit();
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg"/></noscript>
+
+<div class="board">
+ <h1><spring:message code="comSymPrm.programChangeRequst.pageTop.title"/></h1><!-- 프로그램변경요청 -->
+
+ <form name="progrmChangeRequstForm" action ="<c:url value='/sym/prm/EgovProgramChangeRequstSelect.do'/>?pageIndex=1" method="post">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymPrm.programChangeRequst.progrmFileNm"/> : </label><!-- 프로그램파일명 -->
+ <input class="s_input2 vat" name="searchKeyword" type="text" value="" size="80" maxlength="60" title="<spring:message code="title.searchCondition"/>" /><!-- 검색조건 -->
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title="조회" onclick="selectProgrmChangeRequstList(); return false;" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/sym/prm/EgovProgramChangRequstStre.do'/>" onclick="insertChangeRequst(); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span><!-- 등록 -->
+ </li>
+ </ul>
+ </div>
+ <input type="hidden" name="tmpProgrmNm">
+ <input type="hidden" name="tmpRqesterNo">
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:80px" />
+ <col style="width:177px" />
+ <col style="width:200px" />
+ <col style="width:80px" />
+ <col style="width:100px" />
+ <col style="width:80px" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequst.rqesterNo"/></th><!-- 요청번호 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequst.progrmFileNm"/></th><!-- 프로그램파일명 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequst.rqesterSj"/></th><!-- 요청제목 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequst.rqesterPersonId"/></th><!-- 요청자 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequst.rqesterDe"/></th><!-- 요청일자 -->
+ <th scope="col"><spring:message code="comSymPrm.programChangeRequst.processSttus"/></th><!-- 처리여부 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(list_changerequst) == 0}">
+ <tr>
+ <td colspan="6">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <c:forEach var="result" items="${list_changerequst}" varStatus="status">
+ <tr>
+ <td><c:out value="${result.rqesterNo}"/></td>
+ <td>
+ <form name="item" method="post" action="<c:url value='/sym/prm/EgovProgramChangRequstDetailSelect.do'/>">
+ <input type="hidden" name="tmpProgrmNm" value="<c:out value="${result.progrmFileNm }"/>"/>
+ <input type="hidden" name="tmpRqesterNo" value="<c:out value="${result.rqesterNo }"/>"/>
+ <span class="link"><input type="submit" value="<c:out value="${result.progrmFileNm }"/>" onclick="selectUpdtChangeRequstListDetail('<c:out value="${result.progrmFileNm}"/>','<c:out value="${result.rqesterNo}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td><c:out value="${result.rqesterSj}"/></td>
+ <td><c:out value="${result.rqesterPersonId}"/></td>
+ <td><c:out value="${result.rqesterDe}"/></td>
+ <td>
+ <c:if test="${empty result.processSttus}">N/A</c:if>
+ <c:if test="${result.processSttus == 'A'}"><spring:message code="comSymPrm.programChangeRequst.processSttusA"/></c:if><!-- 신청중 -->
+ <c:if test="${result.processSttus == 'P'}"><spring:message code="comSymPrm.programChangeRequst.processSttusP"/></c:if><!-- 진행중 -->
+ <c:if test="${result.processSttus == 'R'}"><spring:message code="comSymPrm.programChangeRequst.processSttusR"/></c:if><!-- 반려 -->
+ <c:if test="${result.processSttus == 'C'}"><spring:message code="comSymPrm.programChangeRequst.processSttusC"/></c:if><!-- 처리완료 -->
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangeRequst.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHstDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHstDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHstDetail.jsp (revision 7)
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovProgramChgHstDetail.jsp
+ * @Description : 프로그램변경이력 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.04 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programChgHstDetail.title"/></title><!-- 프로그램변경이력상세 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 수정 처리 함수
+ ******************************************************** */
+function updateChangRequstProcess() {
+ progrmChangRequstProcessForm.submit();
+}
+
+/* ********************************************************
+ * 삭제 처리 함수
+ ******************************************************** */
+function deleteChangRequstProcess() {
+ document.progrmChangRequstProcessForm.action = "<c:url value='EgovProgramChangeRequstProcessDelete.do'/>";
+ document.progrmChangRequstProcessForm.submit();
+}
+
+/* ********************************************************
+ * 목록조회 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/prm/EgovProgramChgHstListSelect.do' />";
+}
+-->
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<form name="progrmChangeRequstForm" action ="<c:url value='/sym/prm/EgovProgramChgHstListSelect.do'/>" method="post">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymPrm.programChgHstDetail.pageTop.title"/></h2><!-- 프로그램변경이력상세조회 -->
+
+ <h2 class="tit02" style="margin:0 0 10px 0"><spring:message code="comSymPrm.programChgHstDetail.title.sub1"/></h2><!-- 변경요청내역 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable mb20">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.rqesterNo"/></th><!-- 요청번호 -->
+ <td class="left">
+ <c:out value="${resultVO.rqesterNo}"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.progrmFileNm"/></th><!-- 프로그램파일명 -->
+ <td class="left">
+ <c:out value="${resultVO.progrmFileNm}"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.rqesterPersonId"/></th><!-- 요청자ID -->
+ <td class="left">
+ <c:out value="${resultVO.rqesterPersonId}"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.rqesterDe"/></th><!-- 요청일자 -->
+ <td class="left">
+ <c:out value="${resultVO.rqesterDe}"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.rqesterSj"/></th><!-- 요청제목 -->
+ <td class="left">
+ <c:out value="${resultVO.rqesterSj}"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.changerqesterCn"/></th><!-- 변경요청내용 -->
+ <td class="left">
+ <textarea name="changerqesterCn" class="textarea" cols="75" rows="5" readOnly="readOnly" style="width:450px;border:0;background-color:transparent;filter: chroma(color=ffffff);" title="<spring:message code="comSymPrm.programChgHstDetail.changerqesterCn"/>"><c:out value="${resultVO.changerqesterCn}"/></textarea>
+ </td>
+ </tr>
+ </table>
+
+ <h2 class="tit02" style="margin:0 0 10px 0"><spring:message code="comSymPrm.programChgHstDetail.title.sub2"/></h2><!-- 변경처리내역 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.processDe"/></th><!-- 변경처리일자 -->
+ <td class="left">
+ <c:out value="${resultVO.processDe}"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.opetrId"/></th><!-- 변경처리자 -->
+ <td class="left">
+ <c:out value="${resultVO.opetrId}"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.processSttus"/></th><!-- 변경처리상태 -->
+ <td class="left">
+ <c:if test="${empty resultVO.processSttus}">N/A</c:if>
+ <c:if test="${resultVO.processSttus == 'A'}"><spring:message code="comSymPrm.programChgHstDetail.processSttusA"/></c:if><!-- 신청중 -->
+ <c:if test="${resultVO.processSttus == 'P'}"><spring:message code="comSymPrm.programChgHstDetail.processSttusP"/></c:if><!-- 진행중 -->
+ <c:if test="${resultVO.processSttus == 'R'}"><spring:message code="comSymPrm.programChgHstDetail.processSttusR"/></c:if><!-- 반려 -->
+ <c:if test="${resultVO.processSttus == 'C'}"><spring:message code="comSymPrm.programChgHstDetail.processSttusC"/></c:if><!-- 처리완료 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChgHstDetail.rqesterProcessCn"/></th><!-- 변경처리내용 -->
+ <td class="left">
+ <textarea name="rqesterProcessCn" class="textarea" cols="75" rows="5" readOnly="readOnly" style="width:450px;border:0;background-color:transparent;filter: chroma(color=ffffff);" title="<spring:message code="comSymPrm.programChgHstDetail.rqesterProcessCn"/>"><c:out value="${resultVO.rqesterProcessCn}"/></textarea>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value=목록 onclick="selectList(); return false;" />
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChgHstDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearchNew.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearchNew.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearchNew.jsp (revision 7)
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovFileNmSearch.jsp
+ * @Description : 프로그램파일명 검색 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2011.10.18 서준식 프로그램파일명 검색 결과를 부모창으로 넘겨주는 자바스크립트 수정(브라우저 호환성 문제로 수정함)
+
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comSymPrm.fileNmSearch.title"/></title><!-- 프로그램파일명 검색 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jquery-1.4.2.min.js' />" ></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+ document.progrmManageForm.pageIndex.value = pageNo;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListSearchNew.do'/>";
+ document.progrmManageForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectProgramListSearch() {
+ document.progrmManageForm.pageIndex.value = 1;
+ document.progrmManageForm.action = "<c:url value='/sym/prm/EgovProgramListSearchNew.do'/>";
+ document.progrmManageForm.submit();
+}
+
+/* ********************************************************
+ * 프로그램목록 선택 처리 함수
+ ******************************************************** */
+function choisProgramListSearch(vFileNm) {
+ //eval("opener.document.all."+opener.document.all.tmp_SearchElementName.value).value = vFileNm;
+ //opener.document.menuManageVO.progrmFileNm.value = vFileNm;
+ var parentFrom = parent.document.getElementsByTagName('form');
+ parentFrom[0].progrmFileNm.value = vFileNm;
+ parent.$('.ui-dialog-content').dialog('close');
+}
+-->
+</script>
+</head>
+<body>
+<form name="progrmManageForm" action ="<c:url value='/sym/prm/EgovProgramListSearchNew.do'/>" method="post">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+<div class="board" style="width:480px">
+ <h1><spring:message code="comSymPrm.fileNmSearch.pageTop.title"/></h1><!-- 프로그램파일명 검색 -->
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다. -->
+ <ul>
+ <li>
+ <label for=""><spring:message code="comSymPrm.fileNmSearch.progrmNm"/> : </label><!-- 프로그램명 -->
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' size="30" maxlength="60" title="<spring:message code="title.searchCondition"/>" /><!-- 검색조건 -->
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title="<spring:message code="title.inquire"/>" onclick="selectProgramListSearch(); return false;" /><!-- 조회 -->
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:50%" />
+ <col style="width:50%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comSymPrm.fileNmSearch.progrmFileNm"/></th><!-- 프로그램파일명 -->
+ <th scope="col"><spring:message code="comSymPrm.fileNmSearch.progrmNm"/></th><!-- 프로그램명 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${list_progrmmanage}" varStatus="status">
+ <tr>
+ <td>
+ <span class="link"><a href="#LINK" onclick="choisProgramListSearch('<c:out value="${result.progrmFileNm}"/>'); return false;">
+ <c:out value="${result.progrmFileNm}"/></a></span></td>
+ <td><c:out value="${result.progrmKoreanNm}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+</form>
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovFileNmSearchNew.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt.jsp (revision 7)
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovProgramChangRequstProcessDetailSelectUpdt.jsp
+ * @Description : 프로그램변경요청처리상세조회/수정
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2011.09.14 서준식 변경처리 요청내용 Readonly로 변경
+ * 2018.09.04 신용호 공통컴포넌트 3.8 개선
+
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+--%>
+<%@ page 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="ImgUrl" value="/images/egovframework/com/sym/prm/"/>
+<c:set var="CssUrl" value="/css/egovframework/com/sym/prm/"/>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.title"/></title><!-- 프로그램변경요청처리상세조회/수정 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<validator:javascript formName="progrmManageDtlVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 수정 처리 함수
+ ******************************************************** */
+function updateChangRequstProcess(form) {
+ if(confirm("<spring:message code="common.save.msg"/>")){
+ if(!validateProgrmManageDtlVO(form)){
+ return;
+ }else{
+ form.action ="<c:url value='/sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt.do' />";
+ form.submit();
+ }
+ }
+}
+
+/* ********************************************************
+ * 삭제 처리 함수
+ ******************************************************** */
+function deleteChangRequstProcess(form) {
+ form.action = "<c:url value='/sym/prm/EgovProgramChangeRequstProcessDelete.do' />";
+ form.submit();
+}
+
+/* ********************************************************
+ * 목록조회 처리 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/prm/EgovProgramChangeRequstProcessListSelect.do' />";
+}
+
+function initCalendar(){
+
+ $("#processDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+}
+
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body onload="initCalendar()">
+<c:set var="vprocessDe"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processDe"/></c:set>
+<c:set var="vopetrId"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.opetrId"/></c:set>
+<c:set var="vprocessSttus"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttus"/></c:set>
+<c:set var="vrqesterProcessCn"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterProcessCn"/></c:set>
+<c:set var="vchangerqesterCn"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.changerqesterCn"/></c:set>
+<c:set var="vprocessSttusA"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusA"/></c:set>
+<c:set var="vprocessSttusP"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusP"/></c:set>
+<c:set var="vprocessSttusR"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusR"/></c:set>
+<c:set var="vprocessSttusC"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttusC"/></c:set>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<form:form commandName="progrmManageDtlVO" method="post">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.pageTop.title"/></h2><!-- 프로그램변경요청처리상세조회/수정 -->
+
+ <h2 class="tit02" style="margin:0 0 10px 0"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.title.sub1"/></h2><!-- 변경처리내역 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable mb20">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processDe"/> <span class="pilsu">*</span></th><!-- 변경처리일자 -->
+ <td class="left">
+ <input type="hidden" name="cal_url" value="<c:url value='/sym/cal/EgovNormalCalPopup.do'/>" />
+ <form:input path="processDe" cssClass="txaIpt" title="${vprocessDe}" readonly="true" cssStyle="width:70px"/>
+ <form:errors path="processDe"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.opetrId"/> <span class="pilsu">*</span></th><!-- 변경처리자 -->
+ <td class="left">
+ <form:input path="opetrId" cssClass="txaIpt" maxlength="30" title="${vopetrId}" readonly="true"/>
+ <form:errors path="opetrId" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.processSttus"/> <span class="pilsu">*</span></th><!-- 변경처리상태 -->
+ <td class="left">
+ <form:select path="processSttus" title="${vprocessSttus}">
+ <form:option value="" label="N/A"/>
+ <form:option value="A" label="${vprocessSttusA}"/><!-- 신청중 -->
+ <form:option value="P" label="${vprocessSttusP}"/><!-- 진행중 -->
+ <form:option value="R" label="${vprocessSttusR}"/><!-- 반려 -->
+ <form:option value="C" label="${vprocessSttusC}"/><!-- 처리완료 -->
+ </form:select>
+ <div><form:errors path="processSttus" /></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterProcessCn"/></th><!-- 변경처리내용 -->
+ <td class="left">
+ <form:textarea path="rqesterProcessCn" rows="5" cols="75" cssClass="txaClass" title="${vrqesterProcessCn}"/>
+ <form:errors path="rqesterProcessCn"/>
+ </td>
+ </tr>
+ </table>
+
+ <h2 class="tit02" style="margin:0 0 10px 0"><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.title.sub2"/></h2><!-- 변경요청내역 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterNo"/> <span class="pilsu">*</span></th><!-- 요청번호 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.rqesterNo}"/>
+ <form:hidden path="rqesterNo" />
+ <form:errors path="rqesterNo" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.progrmFileNm"/> <span class="pilsu">*</span></th><!-- 프로그램파일명 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.progrmFileNm}"/>
+ <form:hidden path="progrmFileNm" />
+ <form:errors path="progrmFileNm" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterPersonId"/> <span class="pilsu">*</span></th><!-- 요청자ID -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.rqesterPersonId}"/>
+ <form:hidden path="rqesterPersonId" />
+ <form:errors path="rqesterPersonId" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterDe"/> <span class="pilsu">*</span></th><!-- 요청일자 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.rqesterDe}"/>
+ <form:hidden path="rqesterDe" />
+ <form:errors path="rqesterDe" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.rqesterSj"/> <span class="pilsu">*</span></th><!-- 요청제목 -->
+ <td class="left">
+ <c:out value="${progrmManageDtlVO.rqesterSj}" />
+ <form:hidden path="rqesterSj" />
+ <form:errors path="rqesterSj" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstProcessDetailSelectUpdt.changerqesterCn"/> <span class="pilsu">*</span></th><!-- 변경요청내용 -->
+ <td class="left">
+ <form:textarea path="changerqesterCn" rows="5" cols="75" readonly="true" cssClass="txaClass" title="변경요청내용"/>
+ <form:errors path="changerqesterCn"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/sym/prm/EgovProgramChangeRequstProcessListSelect.do'/>" onclick="selectList(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ <input class="s_submit" type="submit" value='<spring:message code="button.update" />' onclick="updateChangRequstProcess(document.forms[0]); return false;" /><!-- 수정 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstProcessDetailSelectUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstStre.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstStre.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstStre.jsp (revision 7)
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<%--
+ /**
+ * @Class Name : EgovProgramChangRequstStre.jsp
+ * @Description : 프로그램변경요청 등록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * 2018.09.04 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ *
+ */
+ /* Image Path 설정 */
+ //String imagePath_icon = "/images/egovframework/com/sym/prm/icon/";
+ //String imagePath_button = "/images/egovframework/com/sym/prm/button/";
+--%>
+<%@ page 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="ImgUrl" value="/images/egovframework/com/sym/prm/"/>
+<c:set var="CssUrl" value="/css/egovframework/com/sym/prm/"/>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<title><spring:message code="comSymPrm.programChangRequstStre.title"/></title><!-- 프로그램변경요청 등록 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+<validator:javascript formName="progrmManageDtlVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+
+<script language="javascript1.2" type="text/javaScript">
+<!--
+/* ********************************************************
+ * 파일목록조회 함수
+ ******************************************************** */
+function searchFileNm() {
+ document.all.tmp_SearchElementName.value = "progrmFileNm";
+ window.open("<c:url value='/sym/prm/EgovProgramListSearch.do' />",'','width=500,height=600');
+}
+
+/* ********************************************************
+ * 입력 처리 함수
+ ******************************************************** */
+function insertProgrmChangeRequst(form) {
+ if(confirm("<spring:message code="common.save.msg" />")){
+
+ if(!validateProgrmManageDtlVO(form)){
+ return;
+ }else{
+ form.action = "<c:url value='/sym/prm/EgovProgramChangRequstStre.do'/>";
+ form.submit();
+ }
+ }
+// progrmListRegistForm.submit();
+}
+
+function initCalendar(){
+
+ $("#rqesterDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+}
+
+/* ********************************************************
+ * 목록조회 처리 함수
+ ******************************************************** */
+function selectList(){
+ location.href = "<c:url value='/sym/prm/EgovProgramChangeRequstSelect.do' />";
+}
+<c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+-->
+</script>
+</head>
+<body onload="initCalendar()">
+<c:set var="vrqesterNo"><spring:message code="comSymPrm.programChangRequstStre.rqesterNo"/></c:set>
+<c:set var="vrqesterPersonId"><spring:message code="comSymPrm.programChangRequstStre.rqesterPersonId"/></c:set>
+<c:set var="vrqesterSj"><spring:message code="comSymPrm.programChangRequstStre.rqesterSj"/></c:set>
+<c:set var="vchangerqesterCn"><spring:message code="comSymPrm.programChangRequstStre.changerqesterCn"/></c:set>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg"/></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<form:form commandName="progrmManageDtlVO" name="progrmManageDtlVO" action ="<c:url value='/sym/prm/EgovProgramChangRequstStre.do'/>" method="post">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comSymPrm.programChangRequstStre.pageTop.title"/></h2><!-- 프로그램변경요청 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstStre.rqesterNo"/> <span class="pilsu">*</span></th><!-- 요청번호 -->
+ <td class="left">
+ <form:input path="rqesterNo" size="50" maxlength="50" title="${vrqesterNo}" readonly="true"/><!-- 요청번호 -->
+ <form:errors path="rqesterNo" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstStre.progrmFileNm"/> <span class="pilsu">*</span></th><!-- 프로그램파일명 -->
+ <td class="left">
+ <input id="progrmFileNm" name="progrmFileNm" maxlength="50" title="<spring:message code="comSymPrm.programChangRequstStre.progrmFileNm"/>" readonly="readonly"/><!-- 프로그램파일명 -->
+ <form:errors path="progrmFileNm" />
+ <a href="<c:url value='/sym/prm/EgovProgramListSearch.do'/>?tmp_SearchElementName=progrmFileNm" target="_blank" onclick="searchFileNm(); return false;" style="selector-dummy:expression(this.hideFocus=false);" title="새 창으로 이동"><!-- 새 창으로 이동 -->
+ <img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />" alt='(<spring:message code="comSymPrm.programChangRequstStre.searchProgrmFileNm"/>)' width="15" height="15" /></a><!-- 프로그램파일명 검색 -->
+ (<spring:message code="comSymPrm.programChangRequstStre.searchProgrmFileNm"/>)<!-- 프로그램파일명 검색 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstStre.rqesterPersonId"/> <span class="pilsu">*</span></th><!-- 요청자 -->
+ <td class="left">
+ <form:input path="rqesterPersonId" size="20" maxlength="20" title="${vrqesterPersonId}" readonly="true"/><!-- 요청자 -->
+ <form:errors path="rqesterPersonId" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstStre.rqesterDe"/> <span class="pilsu">*</span></th><!-- 요청일자 -->
+ <td class="left">
+ <input type="hidden" name="cal_url" value="<c:url value='/sym/cal/EgovNormalCalPopup.do'/>" />
+ <input id="rqesterDe" name="rqesterDe" maxlength="50" title="<spring:message code="comSymPrm.programChangRequstStre.rqesterDe"/>" readonly="readonly" style="width:70px"/><!-- 요청일자 -->
+ <form:errors path="rqesterDe"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstStre.rqesterSj"/> <span class="pilsu">*</span></th><!-- 요청제목 -->
+ <td class="left">
+ <form:input path="rqesterSj" size="50" maxlength="50" title="${vrqesterSj}"/><!-- 요청제목 -->
+ <form:errors path="rqesterSj" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comSymPrm.programChangRequstStre.changerqesterCn"/></th><!-- 변경요청내용 -->
+ <td class="left">
+ <form:textarea path="changerqesterCn" rows="14" cols="75" title="${changerqesterCn}"/><!-- 변경요청내용 -->
+ <form:errors path="changerqesterCn"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.create" />' onclick="insertProgrmChangeRequst(document.forms[0]); return false;" /><!-- 등록 -->
+ <span class="btn_s"><a href="<c:url value='/sym/prm/EgovProgramChangeRequstSelect.do'/>" onclick="selectList(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<form:hidden path="rqesterProcessCn" />
+<form:hidden path="opetrId" />
+<form:hidden path="processSttus" />
+<form:hidden path="processDe" />
+<input name="cmd" type="hidden" value="insert"/>
+</form:form>
+<input type="hidden" name="tmp_SearchElementName"/>
+<input type="hidden" name="tmp_SearchElementVal"/>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/prm/EgovProgramChangRequstStre.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeUpdt.jsp (revision 7)
@@ -0,0 +1,150 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnCodeUpdt.jsp
+ * @Description : 공통코드 수정하는 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.09 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"><spring:message code="comSymCcmCca.cmmnCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle } <spring:message code="title.update" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="cmmnCodeVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.getElementById("cmmnCodeVO").codeIdNm.focus();
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_updt_code(form){
+ //input item Client-Side validate
+ if (!validateCmmnCodeVO(form)) {
+ return false;
+ } else {
+ if(confirm("<spring:message code="common.update.msg" />")){
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_inqire_code() {
+ cmmnCodeVO.action = "<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeList.do'/>";
+ cmmnCodeVO.submit();
+}
+</script>
+</head>
+<body onLoad="fn_egov_init();">
+
+
+<!-- 상단타이틀 -->
+<form:form commandName="cmmnCodeVO" action="${pageContext.request.contextPath}/sym/ccm/cca/UpdateCcmCmmnCode.do" method="post" onSubmit="fn_egov_updt_code(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <!-- 수정폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.update" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.update" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputYes"><spring:message code="input.yes" /></c:set>
+ <c:set var="inputNo"><spring:message code="input.no" /></c:set>
+
+ <!-- 분류코드명 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.clCodeNm"/> </c:set>
+ <tr>
+ <th><label for="clCode">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="clCode" type="hidden"/>
+ <form:input path="clCodeNm" title="${title} ${inputTxt}" size="70" maxlength="70" readonly="true" />
+ <div><form:errors path="clCode" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 코드ID -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.codeId"/> </c:set>
+ <tr>
+ <th><label for="codeId">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="codeId" title="${title} ${inputTxt}" size="70" maxlength="70" readonly="true" />
+ <div><form:errors path="codeId" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 코드ID명 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdNm"/> </c:set>
+ <tr>
+ <th><label for="codeIdNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="codeIdNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="codeIdNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 코드ID설명 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdDc"/> </c:set>
+ <tr>
+ <th><label for="codeIdDc">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="codeIdDc" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="codeIdDc" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.useAt"/> </c:set>
+ <tr>
+ <th><label for="useAt">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="Y" label=" ${inputYes}"/>
+ <form:option value="N" label=" ${inputNo}"/>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" />
+ <a href="<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeList.do' />" class="btn_s" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a>
+ </div><div style="clear:both;"></div>
+
+</div>
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeList.jsp (revision 7)
@@ -0,0 +1,143 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnCodeList.jsp
+ * @Description : 공통코드 목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.08 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comSymCcmCca.cmmnCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.CcmCodeForm.searchCondition.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.CcmCodeForm.pageIndex.value = pageNo;
+ document.CcmCodeForm.action = "<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeList.do'/>";
+ document.CcmCodeForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_code(){
+ document.CcmCodeForm.pageIndex.value = 1;
+ document.CcmCodeForm.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_codedetail(codeId) {
+ // 사이트 키값(siteId) 셋팅.
+ document.CcmCodeForm.codeId.value = codeId;
+ document.CcmCodeForm.action = "<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeDetail.do'/>";
+ document.CcmCodeForm.submit();
+}
+</script>
+</head>
+<body onload="fn_egov_init()">
+
+<form name="CcmCodeForm" action="<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeList.do'/>" method="post" onSubmit="fn_egov_search_code(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <!-- 검색영역 -->
+ <!-- 검색조건선택 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" title="<spring:message code="title.searchCondition" />">
+ <%-- <option <c:if test="${searchVO.searchCondition == ''}">selected="selected"</c:if>><spring:message code="input.select" /></option><!-- 선택하세요 --> --%>
+ <option selected value=''><spring:message code="input.select" /></option><!-- 선택하세요 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comSymCcmCca.cmmnCodeVO.codeId" /></option><!-- 코드ID -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdNm" /></option><!-- 코드ID명 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ <span class="btn_b"><a href="<c:url value='/sym/ccm/cca/RegistCcmCmmnCodeView.do' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><spring:message code="comSymCcmCca.cmmnCodeVO.clCodeNm" /></th><!-- 분류코드명 -->
+ <th class="board_th_link"><spring:message code="comSymCcmCca.cmmnCodeVO.codeId" /></th><!-- 코드ID -->
+ <th><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdNm"/></th><!-- 코드ID -->
+ <th><spring:message code="comSymCcmCca.cmmnCodeVO.useAt" /></th><!-- 사용여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value='${resultInfo.clCodeNm}'/></td>
+ <td><a href="<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeDetail.do'/>?codeId=${resultInfo.codeId}" onClick="fn_egov_inquire_codedetail('<c:out value="${resultInfo.codeId}"/>');return false;"><c:out value='${fn:substring(resultInfo.codeId, 0, 40)}'/></a></td>
+ <td><a href="<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeDetail.do'/>?codeId=${resultInfo.codeId}" onClick="fn_egov_inquire_codedetail('<c:out value="${resultInfo.codeId}"/>');return false;"><c:out value='${fn:substring(resultInfo.codeIdNm, 0, 40)}'/></a></td>
+ <td><c:out value='${resultInfo.useAt}'/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+</div>
+
+<input name="codeId" type="hidden" value="">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeDetail.jsp (revision 7)
@@ -0,0 +1,104 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnCodeDetail.jsp
+ * @Description : 공통코드 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.09 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"%>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comSymCcmCca.cmmnCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_code(codeId){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ document.CcmCodeForm.codeId.value = codeId;
+ document.CcmCodeForm.action = "<c:url value='/sym/ccm/cca/RemoveCcmCmmnCode.do'/>";
+ document.CcmCodeForm.submit();
+ }
+}
+</script>
+</head>
+<body>
+
+<form name="CcmCodeForm" action="<c:url value='/sym/ccm/cca/UpdateCcmCmmnCodeView.do'/>" method="post">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2>
+
+ <!-- 상세조회 -->
+ <table class="wTable" summary="<spring:message code="common.summary.inqire" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 분류코드명 -->
+ <tr>
+ <th><spring:message code="comSymCcmCca.cmmnCodeVO.clCodeNm" /></th>
+ <td class="left"><c:out value="${result.clCodeNm}"/></td>
+ </tr>
+ <!-- 코드ID -->
+ <tr>
+ <th><spring:message code="comSymCcmCca.cmmnCodeVO.codeId" /></th>
+ <td class="left"><c:out value="${result.codeId}"/></td>
+ </tr>
+ <!-- 코드ID명 -->
+ <tr>
+ <th><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdNm" /></th>
+ <td class="left"><c:out value="${result.codeIdNm}"/></td>
+ </tr>
+ <!-- 코드ID설명 -->
+ <tr>
+ <th class="vtop"><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdDc" /></th>
+ <td class="cnt">
+ <c:out value="${fn:replace(result.codeIdDc , crlf , '<br/>')}" escapeXml="false" />
+ </td>
+ </tr>
+ <!-- 사용여부 -->
+ <tr>
+ <th><spring:message code="comSymCcmCca.cmmnCodeVO.useAt" /></th>
+ <td class="left"><c:out value="${result.useAt}"/></td>
+ </tr>
+
+
+ </tbody>
+ </table>
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="title.update" /> <spring:message code="input.button" />" />
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/cca/RemoveCcmCmmnCode.do?codeId=${result.codeId}' />" onClick="fn_egov_delete_code('<c:out value="${result.codeId}"/>'); return false;" title="<spring:message code="title.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></a></span>
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeList.do' />" title="<spring:message code="title.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="codeId" type="hidden" value="<c:out value="${result.codeId}" />">
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeRegist.jsp (revision 7)
@@ -0,0 +1,167 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnCodeRegist.jsp
+ * @Description : 공통코드 등록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.18 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"><spring:message code="comSymCcmCca.cmmnCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="cmmnCodeVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ // 첫 입력란에 포커스
+ document.getElementById("cmmnCodeVO").codeId.focus();
+
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_list_code(){
+ location.href = "<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeList.do' />";
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_regist_code(form){
+ //input item Client-Side validate
+ if (!validateCmmnCodeVO(form)) {
+ return false;
+ } else {
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.submit();
+ }
+ }
+}
+
+/* ********************************************************
+* 서버 처리 후 메세지 화면에 보여주기
+******************************************************** */
+function fncShowMessg(){
+ if("<c:out value='${message}'/>" != ''){
+ alert("<c:out value='${message}'/>");
+ }
+}
+
+</script>
+
+</head>
+<body onLoad="fn_egov_init(); fncShowMessg();">
+
+<form:form commandName="cmmnCodeVO" action="${pageContext.request.contextPath}/sym/ccm/cca/RegistCcmCmmnCode.do" method="post" onSubmit="fn_egov_regist_code(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <c:set var="inputYes"><spring:message code="input.yes" /></c:set>
+ <c:set var="inputNo"><spring:message code="input.no" /></c:set>
+ <!-- 분류코드명 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.clCodeNm"/> </c:set>
+ <tr>
+ <th><label for="clCode">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="clCode" title="${title} ${inputSelect }" >
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${clCodeList}" itemValue="clCode" itemLabel="clCodeNm"/>
+ </form:select>
+ <div><form:errors path="clCode" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 코드ID -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.codeId"/> </c:set>
+ <tr>
+ <th><label for="codeId">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="codeId" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="codeId" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 코드ID명 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdNm"/> </c:set>
+ <tr>
+ <th><label for="codeIdNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="codeIdNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="codeIdNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 코드ID설명 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.codeIdDc"/> </c:set>
+ <tr>
+ <th><label for="codeIdDc">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="codeIdDc" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="codeIdDc" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comSymCcmCca.cmmnCodeVO.useAt"/> </c:set>
+ <tr>
+ <th>${title } <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="Y" label=" ${inputYes}"/>
+ <form:option value="N" label=" ${inputNo}"/>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/cca/SelectCcmCmmnCodeList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="cmd" type="hidden" value="<c:out value='save'/>">
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cca/EgovCcmCmmnCodeRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist.jsp (revision 7)
@@ -0,0 +1,149 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnClCodeRegist.jsp
+ * @Description : 공통분류코드 등록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.07 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"><spring:message code="comSymCcmCcc.cmmnClCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="cmmnClCodeVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ // 첫 입력란에 포커스
+ document.getElementById("cmmnClCodeVO").clCode.focus();
+
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_regist_code(form){
+ //input item Client-Side validate
+ if (!validateCmmnClCodeVO(form)) {
+ return false;
+ } else {
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.submit();
+ }
+ }
+}
+
+/* ********************************************************
+* 서버 처리 후 메세지 화면에 보여주기
+******************************************************** */
+function fncShowMessg(){
+ if("<c:out value='${message}'/>" != ''){
+ alert("<c:out value='${message}'/>");
+ }
+}
+
+</script>
+
+</head>
+<body onLoad="fn_egov_init(); fncShowMessg();">
+
+<form:form commandName="cmmnClCodeVO" action="${pageContext.request.contextPath}/sym/ccm/ccc/RegistCcmCmmnClCode.do" method="post" onSubmit="fn_egov_regist_code(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputYes"><spring:message code="input.yes" /></c:set>
+ <c:set var="inputNo"><spring:message code="input.no" /></c:set>
+
+ <!-- 분류코드 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCode"/> </c:set>
+ <tr>
+ <th><label for="clCode">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="clCode" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="clCode" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 분류코드명 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeNm"/> </c:set>
+ <tr>
+ <th><label for="clCodeNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="clCodeNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="clCodeNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 분류코드설명 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeDc"/> </c:set>
+ <tr>
+ <th><label for="clCodeDc">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="clCodeDc" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="clCodeDc" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.useAt"/> </c:set>
+ <tr>
+ <th>${title } <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt}" cssClass="txt">
+ <form:option value="Y" label=" ${inputYes}"/>
+ <form:option value="N" label=" ${inputNo}"/>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="cmd" type="hidden" value="<c:out value='save'/>">
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeUpdt.jsp (revision 7)
@@ -0,0 +1,136 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnClCodeUpdt.jsp
+ * @Description : 공통분류코드 수정하는 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.04 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"><spring:message code="comSymCcmCcc.cmmnClCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle } <spring:message code="title.update" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="cmmnClCodeVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.getElementById("cmmnClCodeVO").clCodeNm.focus();
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_updt_code(form){
+ if (!validateCmmnClCodeVO(form)) {
+ return false;
+ } else {
+ if(confirm("<spring:message code="common.update.msg" />")){
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_inqire_code() {
+ cmmnClCodeVO.action = "<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeList.do'/>";
+ cmmnClCodeVO.submit();
+}
+</script>
+</head>
+<body onLoad="fn_egov_init();">
+
+<!-- 상단타이틀 -->
+<form:form commandName="cmmnClCodeVO" action="${pageContext.request.contextPath}/sym/ccm/ccc/UpdateCcmCmmnClCode.do" method="post" onSubmit="fn_egov_updt_code(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <!-- 수정폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.update" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.update" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputYes"><spring:message code="input.yes" /></c:set>
+ <c:set var="inputNo"><spring:message code="input.no" /></c:set>
+
+ <!-- 분류코드 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCode"/> </c:set>
+ <tr>
+ <th><label for="clCode">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="clCode" title="${title} ${inputTxt}" size="70" maxlength="70" readonly="true" />
+ <div><form:errors path="clCode" cssClass="error" /></div>
+ </td>
+ </tr>
+ <!-- 분류코드명 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeNm"/> </c:set>
+ <tr>
+ <th><label for="clCodeNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="clCodeNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="clCodeNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 분류코드설명 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeDc"/> </c:set>
+ <tr>
+ <th><label for="clCodeDc">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="clCodeDc" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="clCodeDc" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comSymCcmCcc.cmmnClCodeVO.useAt"/> </c:set>
+ <tr>
+ <th><label for="useAt">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="Y" label=" ${inputYes}"/>
+ <form:option value="N" label=" ${inputNo}"/>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" />
+ <a href="<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeList.do' />" class="btn_s" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a>
+ </div><div style="clear:both;"></div>
+
+</div>
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeList.jsp (revision 7)
@@ -0,0 +1,141 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnClCodeList.jsp
+ * @Description : 공통분류코드 목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.07.20 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comSymCcmCcc.cmmnClCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.CcmClCodeForm.searchCondition.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.CcmClCodeForm.pageIndex.value = pageNo;
+ document.CcmClCodeForm.action = "<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeList.do'/>";
+ document.CcmClCodeForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_code(){
+ document.CcmClCodeForm.pageIndex.value = 1;
+ document.CcmClCodeForm.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_codedetail(clCode) {
+ // 사이트 키값(siteId) 셋팅.
+ document.CcmClCodeForm.clCode.value = clCode;
+ document.CcmClCodeForm.action = "<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeDetail.do'/>";
+ document.CcmClCodeForm.submit();
+}
+</script>
+</head>
+<body onload="fn_egov_init()">
+
+<form name="CcmClCodeForm" action="<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeList.do'/>" method="post" onSubmit="fn_egov_search_code(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <!-- 검색영역 -->
+ <!-- 검색조건선택 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" title="<spring:message code="title.searchCondition" />">
+
+ <%-- <option <c:if test="${searchVO.searchCondition == ''}">selected="selected"</c:if>><spring:message code="input.select" /></option><!-- 선택하세요 --> --%>
+ <option selected value=''><spring:message code="input.select" /></option><!-- 선택하세요 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCode" /></option><!-- 분류코드 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeNm" /></option><!-- 분류코드명 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ <span class="btn_b"><a href="<c:url value='/sym/ccm/ccc/RegistCcmCmmnClCodeView.do' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 13%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCode" /></th><!-- 분류코드 -->
+ <th class="board_th_link"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeNm" /></th><!-- 분류코드명 -->
+ <th><spring:message code="comSymCcmCcc.cmmnClCodeVO.useAt" /></th><!-- 사용여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="4"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value='${resultInfo.clCode}'/></td>
+ <td><a href="<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeDetail.do'/>?clCode=${resultInfo.clCode}" onClick="fn_egov_inquire_codedetail('<c:out value="${resultInfo.clCode}"/>');return false;"><c:out value='${fn:substring(resultInfo.clCodeNm, 0, 40)}'/></a></td>
+ <td><c:out value='${resultInfo.useAt}'/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+</div>
+
+<input name="clCode" type="hidden" value="">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeDetail.jsp (revision 7)
@@ -0,0 +1,99 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnClCodeDetail.jsp
+ * @Description : 공통분류코드 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.03 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"%>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comSymCcmCcc.cmmnClCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_code(clCode){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ document.CcmClCodeForm.clCode.value = clCode;
+ document.CcmClCodeForm.action = "<c:url value='/sym/ccm/ccc/RemoveCcmCmmnClCode.do'/>";
+ document.CcmClCodeForm.submit();
+ }
+}
+</script>
+</head>
+<body>
+
+<form name="CcmClCodeForm" action="<c:url value='/sym/ccm/ccc/UpdateCcmCmmnClCodeView.do'/>" method="post">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2>
+
+ <!-- 상세조회 -->
+ <table class="wTable" summary="<spring:message code="common.summary.inqire" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 분류코드 -->
+ <tr>
+ <th><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCode" /></th>
+ <td class="left"><c:out value="${result.clCode}"/></td>
+ </tr>
+ <!-- 분류코드명 -->
+ <tr>
+ <th><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeNm" /></th>
+ <td class="left"><c:out value="${result.clCodeNm}"/></td>
+ </tr>
+ <!-- 분류코드설명 -->
+ <tr>
+ <th class="vtop"><spring:message code="comSymCcmCcc.cmmnClCodeVO.clCodeDc" /></th>
+ <td class="cnt">
+ <c:out value="${fn:replace(result.clCodeDc , crlf , '<br/>')}" escapeXml="false" />
+ </td>
+ </tr>
+ <!-- 사용여부 -->
+ <tr>
+ <th><spring:message code="comSymCcmCcc.cmmnClCodeVO.useAt" /></th>
+ <td class="left"><c:out value="${result.useAt}"/></td>
+ </tr>
+
+
+ </tbody>
+ </table>
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="title.update" /> <spring:message code="input.button" />" />
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/ccc/RemoveCcmCmmnClCode.do?clCode=${result.clCode}' />" onClick="fn_egov_delete_code('<c:out value="${result.clCode}"/>'); return false;" title="<spring:message code="title.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></a></span>
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/ccc/SelectCcmCmmnClCodeList.do' />" title="<spring:message code="title.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="clCode" type="hidden" value="<c:out value="${result.clCode}" />">
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/ccc/EgovCcmCmmnClCodeDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt.jsp (revision 7)
@@ -0,0 +1,151 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnDetailCodeUpdt.jsp
+ * @Description : 공통상세코드 수정하는 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.09.04 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.update" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="cmmnDetailCodeVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.getElementById("cmmnDetailCodeVO").codeNm.focus();
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_updt_code(form){
+ //input item Client-Side validate
+ if (!validateCmmnDetailCodeVO(form)) {
+ return false;
+ } else {
+ if(confirm("<spring:message code="common.update.msg" />")){
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_inqire_code() {
+ document.CcmDeCodeForm.action = "<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do'/>";
+ document.CcmDeCodeForm.submit();
+}
+</script>
+</head>
+<body onLoad="fn_egov_init();">
+
+
+<!-- 상단타이틀 -->
+<form:form commandName="cmmnDetailCodeVO" action="${pageContext.request.contextPath}/sym/ccm/cde/UpdateCcmCmmnDetailCode.do" method="post" onSubmit="fn_egov_updt_code(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <!-- 수정폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.update" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.update" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <c:set var="inputYes"><spring:message code="input.yes" /></c:set>
+ <c:set var="inputNo"><spring:message code="input.no" /></c:set>
+
+ <!-- 코드ID -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeId"/> </c:set>
+ <tr>
+ <th><label for="codeId">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="codeId" title="${title} ${inputSelect}" readonly="true"/>
+ <div><form:errors path="codeId" cssClass="error" /></div>
+
+ </td>
+ </tr>
+
+ <!-- 상세코드 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.code"/> </c:set>
+ <tr>
+ <th><label for="code">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="code" title="${title} ${inputTxt}" size="70" maxlength="70" readonly="true" />
+ <div><form:errors path="code" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 상세코드명 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeNm"/> </c:set>
+ <tr>
+ <th><label for="codeNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="codeNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="codeNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 상세코드설명 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeDc"/> </c:set>
+ <tr>
+ <th><label for="codeDc">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="codeDc" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="codeDc" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.useAt"/> </c:set>
+ <tr>
+ <th><label for="useAt">${title } <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="Y" label=" ${inputYes}"/>
+ <form:option value="N" label=" ${inputNo}"/>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="button.update" /> <spring:message code="input.button" />" />
+ <a href="<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do' />" class="btn_s" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a>
+ </div><div style="clear:both;"></div>
+
+</div>
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeList.jsp (revision 7)
@@ -0,0 +1,145 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnDetailCodeList.jsp
+ * @Description : 공통상세코드 목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.31 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="spring" uri="http://www.springframework.org/tags" %>
+<c:set var="pageTitle"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ // 첫 입력란에 포커스..
+ document.CcmDeCodeForm.searchCondition.focus();
+}
+
+/*********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function fn_egov_select_linkPage(pageNo){
+ document.CcmDeCodeForm.pageIndex.value = pageNo;
+ document.CcmDeCodeForm.action = "<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do'/>";
+ document.CcmDeCodeForm.submit();
+}
+/*********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function fn_egov_search_code(){
+ document.CcmDeCodeForm.pageIndex.value = 1;
+ document.CcmDeCodeForm.submit();
+}
+/* ********************************************************
+ * 상세회면 처리 함수
+ ******************************************************** */
+function fn_egov_inquire_codedetail(codeId, code) {
+ // 사이트 키값(siteId) 셋팅.
+ document.CcmDeCodeForm.codeId.value = codeId;
+ document.CcmDeCodeForm.code.value = code;
+ document.CcmDeCodeForm.action = "<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeDetail.do'/>";
+ document.CcmDeCodeForm.submit();
+}
+</script>
+</head>
+<body onload="fn_egov_init()">
+
+<form name="CcmDeCodeForm" action="<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do'/>" method="post" onSubmit="fn_egov_search_code(); return false;">
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <!-- 검색영역 -->
+ <!-- 검색조건선택 -->
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" title="<spring:message code="title.searchCondition" />">
+ <option selected value=''><spring:message code="input.select" /></option><!-- 선택하세요 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeId" /></option><!-- 코드ID -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comSymCcmCde.cmmnDetailCodeVO.code" /></option><!-- 코드ID -->
+ <option value="3" <c:if test="${searchVO.searchCondition == '3'}">selected="selected"</c:if> ><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeNm" /></option><!-- 코드명 -->
+ </select>
+ </li>
+ <!-- 검색키워드 및 조회버튼 -->
+ <li>
+ <input class="s_input" name="searchKeyword" type="text" size="35" title="<spring:message code="title.search" /> <spring:message code="input.input" />" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="155" >
+ <input type="submit" class="s_btn" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />" />
+ <span class="btn_b"><a href="<c:url value='/sym/ccm/cde/RegistCcmCmmnDetailCodeView.do' />" title="<spring:message code="button.create" /> <spring:message code="input.button" />"><spring:message code="button.create" /></a></span>
+ </li>
+ </ul>
+ </div>
+
+ <!-- 목록영역 -->
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle}<spring:message code="title.list" /></caption>
+ <colgroup>
+ <col style="width: 9%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ <col style="width: 40%;">
+ <col style="width: 13%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th><spring:message code="table.num" /></th><!-- 번호 -->
+ <th><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeId" /></th><!-- 코드ID -->
+ <th class="board_th_link"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.code" /></th><!-- 코드 -->
+ <th><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeNm"/></th><!-- 코드명 -->
+ <th><spring:message code="comSymCcmCde.cmmnDetailCodeVO.useAt" /></th><!-- 사용여부 -->
+ </tr>
+ </thead>
+ <tbody class="ov">
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value='${resultInfo.codeId}'/></td>
+ <td><c:out value='${resultInfo.code}'/></td>
+ <td><a href="<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeDetail.do'/>?codeId=${resultInfo.codeId}&code=${resultInfo.code}" onClick="fn_egov_inquire_codedetail('<c:out value="${resultInfo.codeId}"/>','<c:out value="${resultInfo.code}"/>');return false;"><c:out value='${fn:substring(resultInfo.codeNm, 0, 40)}'/></a></td>
+ <td><c:out value='${resultInfo.useAt}'/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_linkPage"/>
+ </ul>
+ </div>
+
+</div>
+
+<input name="codeId" type="hidden" value="">
+<input name="code" type="hidden" value="">
+<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+</form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeDetail.jsp (revision 7)
@@ -0,0 +1,106 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnDetailCodeDetail.jsp
+ * @Description : 공통상세코드 상세조회 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.08.09 이정은 표준프레임워크 v3.7 개선
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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"%>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript">
+/* ********************************************************
+ * 삭제처리
+ ******************************************************** */
+ function fn_egov_delete_code(codeId, code){
+ if(confirm("<spring:message code="common.delete.msg" />")){
+ // Delete하기 위한 키값을 셋팅
+ document.CcmDeCodeForm.codeId.value = codeId;
+ document.CcmDeCodeForm.code.value = code;
+ document.CcmDeCodeForm.action = "<c:url value='/sym/ccm/cde/RemoveCcmCmmnDetailCode.do'/>";
+ document.CcmDeCodeForm.submit();
+ }
+}
+</script>
+</head>
+<body>
+
+<form name="CcmDeCodeForm" action="<c:url value='/sym/ccm/cde/UpdateCcmCmmnDetailCodeView.do'/>" method="post">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2>
+
+ <!-- 상세조회 -->
+ <table class="wTable" summary="<spring:message code="common.summary.inqire" arguments="${pageTitle}" />">
+ <caption>${pageTitle} <spring:message code="title.detail" /></caption>
+ <colgroup>
+ <col style="width: 20%;">
+ <col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 코드ID명 -->
+ <tr>
+ <th><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeIdNm" /></th>
+ <td class="left"><c:out value="${result.codeIdNm}"/></td>
+ </tr>
+ <!-- 상세코드 -->
+ <tr>
+ <th><spring:message code="comSymCcmCde.cmmnDetailCodeVO.code" /></th>
+ <td class="left"><c:out value="${result.code}"/></td>
+ </tr>
+ <!-- 상세코드명 -->
+ <tr>
+ <th><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeNm" /></th>
+ <td class="left"><c:out value="${result.codeNm}"/></td>
+ </tr>
+ <!-- 상세코드설명 -->
+ <tr>
+ <th class="vtop"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeDc" /></th>
+ <td class="cnt">
+ <c:out value="${fn:replace(result.codeDc , crlf , '<br/>')}" escapeXml="false" />
+ </td>
+ </tr>
+ <!-- 사용여부 -->
+ <tr>
+ <th><spring:message code="comSymCcmCde.cmmnDetailCodeVO.useAt" /></th>
+ <td class="left"><c:out value="${result.useAt}"/></td>
+ </tr>
+
+
+ </tbody>
+ </table>
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.update" />" title="<spring:message code="title.update" /> <spring:message code="input.button" />" />
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/cde/RemoveCcmCmmnDetailCode.do?codeId=${result.codeId}&code=${result.code}' />" onClick="fn_egov_delete_code('<c:out value="${result.codeId}"/>','<c:out value="${result.code}"/>'); return false;" title="<spring:message code="title.delete" /> <spring:message code="input.button" />"><spring:message code="button.delete" /></a></span>
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do' />" title="<spring:message code="title.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<input name="codeId" type="hidden" value="<c:out value="${result.codeId}" />">
+<input name="code" type="hidden" value="<c:out value="${result.code}" />">
+</form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist.jsp (revision 7)
@@ -0,0 +1,182 @@
+<%
+ /**
+ * @Class Name : EgovCcmCmmnDetailCodeRegist.jsp
+ * @Description : 공통상세코드 등록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 박정규 최초 생성
+ * 2017.09.04 이정은 표준프레임워크 v3.7 개선
+ *
+ * @author 공통서비스팀
+ * @since 2009.02.01
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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="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"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="cmmnDetailCodeVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ // 첫 입력란에 포커스
+ document.getElementById("cmmnDetailCodeVO").clCode.focus();
+
+}
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_list_code(){
+ location.href = "<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do' />";
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_regist_code(form){
+ //input item Client-Side validate
+ if (!validateCmmnDetailCodeVO(form)) {
+ return false;
+ } else {
+ if(confirm("<spring:message code="common.regist.msg" />")){
+ form.action="<c:url value='/sym/ccm/cde/RegistCcmCmmnDetailCode.do'/>";
+ form.submit();
+ }
+ }
+}
+/* ********************************************************
+ * CodeId 가져오기
+ ******************************************************** */
+function fn_egov_get_CodeId(form){
+
+ form.action="<c:url value='/sym/ccm/cde/RegistCcmCmmnDetailCodeView.do'/>";
+ form.submit();
+}
+
+/* ********************************************************
+* 서버 처리 후 메세지 화면에 보여주기
+******************************************************** */
+function fncShowMessg(){
+ if("<c:out value='${message}'/>" != ''){
+ alert("<c:out value='${message}'/>");
+ }
+}
+
+</script>
+
+</head>
+<body onLoad="fn_egov_init(); fncShowMessg();">
+
+<form:form commandName="cmmnDetailCodeVO" method="post" onSubmit="fn_egov_regist_code(document.forms[0]); return false;">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption>${pageTitle } <spring:message code="title.create" /></caption>
+ <colgroup>
+ <col style="width: 20%;"><col style="width: ;">
+ </colgroup>
+ <tbody>
+ <!-- 입력/선택 -->
+ <c:set var="inputTxt"><spring:message code="input.input" /></c:set>
+ <c:set var="inputSelect"><spring:message code="input.select"/></c:set>
+ <c:set var="inputYes"><spring:message code="input.yes" /></c:set>
+ <c:set var="inputNo"><spring:message code="input.no" /></c:set>
+ <!-- 코드ID -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeId"/> </c:set>
+ <tr>
+ <th><label for="codeId">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:select path="clCode" title="${title} ${inputSelect}" onChange="fn_egov_get_CodeId(cmmnDetailCodeVO);">
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${clCodeList}" itemValue="clCode" itemLabel="clCodeNm"/>
+ </form:select>
+
+ <form:select path="codeId" title="${title} ${inputSelect}" >
+ <form:option value="" label="${inputSelect}"/>
+ <form:options items="${codeList}" itemValue="codeId" itemLabel="codeIdNm"/>
+ </form:select>
+ <div><form:errors path="codeId" cssClass="error" /></div>
+
+ </td>
+ </tr>
+
+ <!-- 상세코드 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.code"/> </c:set>
+ <tr>
+ <th><label for="code">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="code" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="code" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 상세코드명 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeNm"/> </c:set>
+ <tr>
+ <th><label for="codeNm">${title} <span class="pilsu">*</span></label></th>
+ <td class="left">
+ <form:input path="codeNm" title="${title} ${inputTxt}" size="70" maxlength="70" />
+ <div><form:errors path="codeNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 상세코드설명 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.codeDc"/> </c:set>
+ <tr>
+ <th><label for="codeDc">${title } <span class="pilsu">*</span></label></th>
+ <td class="nopd">
+ <form:textarea path="codeDc" title="${title} ${inputTxt}" cols="300" rows="20" />
+ <div><form:errors path="codeDc" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <!-- 사용여부 -->
+ <c:set var="title"><spring:message code="comSymCcmCde.cmmnDetailCodeVO.useAt"/> </c:set>
+ <tr>
+ <th>${title } <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:select path="useAt" title="${title} ${inputTxt }" cssClass="txt">
+ <form:option value="Y" label=" ${inputYes}"/>
+ <form:option value="N" label=" ${inputNo}"/>
+ </form:select>
+ <div><form:errors path="useAt" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input type="submit" class="s_submit" value="<spring:message code="button.create" />" title="<spring:message code="button.create" /> <spring:message code="input.button" />" />
+ <span class="btn_s"><a href="<c:url value='/sym/ccm/cde/SelectCcmCmmnDetailCodeList.do' />" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </div><div style="clear:both;"></div>
+
+</div>
+
+<%-- <input name="cmd" type="hidden" value="<c:out value='save'/>"> --%>
+</form:form>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyRegist.jsp (revision 7)
@@ -0,0 +1,169 @@
+<%--
+/**
+ * @Class Name : EgovLoginPolicyRegist.java
+ * @Description : EgovLoginPolicyRegist jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * @ 2018.09.03 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+ --%>
+<%@ page 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" %>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<title><spring:message code="comUatUap.loginPolicyRegist.title"/></title><!-- 로그인정책 등록 -->
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="loginPolicy" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+function fncSelectLoginPolicyList() {
+ var varFrom = document.getElementById("loginPolicy");
+ varFrom.action = "<c:url value='/uat/uap/selectLoginPolicyList.do'/>";
+ varFrom.submit();
+}
+
+function fncLoginPolicyInsert() {
+
+ var varFrom = document.getElementById("loginPolicy");
+ varFrom.action = "<c:url value='/uat/uap/addLoginPolicy.do'/>";
+
+ if(confirm("<spring:message code="comUatUap.loginPolicyRegist.validate.confirm.save"/>")){ //저장 하시겠습니까?
+ if(!validateLoginPolicy(varFrom)){
+ return;
+ }else{
+ if(ipValidate())
+ varFrom.submit();
+ else
+ return;
+ }
+ }
+}
+
+function ipValidate() {
+
+ var varFrom = document.getElementById("loginPolicy");
+ var IPvalue = varFrom.ipInfo.value;
+
+ var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
+ var ipArray = IPvalue.match(ipPattern);
+
+ var result = "";
+ var thisSegment;
+
+ if(IPvalue == "0.0.0.0") {
+ alert(IPvalue + " : <spring:message code="comUatUap.loginPolicyRegist.validate.info.exceptionIP"/>"); //예외 아이피 입니다.
+ result = false;
+ } else if (IPvalue == "255.255.255.255") {
+ alert(result =IPvalue + " : <spring:message code="comUatUap.loginPolicyRegist.validate.info.exceptionIP"/>"); //예외 아이피 입니다.
+ result = false;
+ } else {
+ result = true;
+ }
+
+ if(ipArray == null) {
+ alert("<spring:message code="comUatUap.loginPolicyRegist.validate.info.invalidForm"/>"); //형식이 일치 하지않습니다.
+ result = false;
+ } else {
+ for (var i=1; i<5; i++) {
+
+ thisSegment = ipArray[i];
+
+ if (thisSegment > 255) {
+ alert("<spring:message code="comUatUap.loginPolicyRegist.validate.info.invalidForm"/>"); //형식이 일치 하지않습니다.
+ result = false;
+ }
+
+ if ((i == 0) && (thisSegment > 255)) {
+ alert("<spring:message code="comUatUap.loginPolicyRegist.validate.info.invalidForm"/>"); //형식이 일치 하지않습니다.
+ result = false;
+ }
+ }
+ }
+
+ return result;
+}
+
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUatUap.loginPolicyRegist.pageTop.title"/></h2><!-- 로그인정책 등록 -->
+ <form:form commandName="loginPolicy" method="post" action="${pageContext.request.contextPath}/uat/uap/addLoginPolicy.do' />">
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyRegist.emplyrId"/> <span class="pilsu">*</span></th><!-- 사용자ID -->
+ <td class="left">
+ <input id="emplyrId" name="emplyrId" type="text" value="<c:out value='${loginPolicy.emplyrId}'/>" title="<spring:message code="comUatUap.loginPolicyRegist.emplyrId"/>" size="30" maxlength="30" readonly="readonly" /><!-- 사용자ID -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyRegist.emplyrNm"/> <span class="pilsu">*</span></th><!-- 사용자명 -->
+ <td class="left">
+ <input id="emplyrNm" type="text" name="emplyrNm" value="<c:out value='${loginPolicy.emplyrNm}'/>" title="<spring:message code="comUatUap.loginPolicyRegist.emplyrNm"/>" size="30" maxlength="50" readonly="readonly" /><!-- 사용자명 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyRegist.ipInfo"/> <span class="pilsu">*</span></th><!-- IP정보 -->
+ <td class="left">
+ <input id="ipInfo" type="text" name="ipInfo" title="<spring:message code="comUatUap.loginPolicyRegist.ipInfo"/>" size="30" maxLength="23" /> <form:errors path="ipInfo" /><!-- IP정보 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyRegist.lmttAt"/> <span class="pilsu">*</span></th><!-- IP제한여부 -->
+ <td class="left">
+ <select name="lmttAt" id="lmttAt" title="<spring:message code="comUatUap.loginPolicyRegist.lmttAt"/>"><!-- IP제한여부 -->
+ <option value="Y">Y</option>
+ <option value="N">N</option>
+ </select> <form:errors path="lmttAt" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.save" />" onclick="fncLoginPolicyInsert(); return false;" /><!-- 저장 -->
+ <span class="btn_s"><a href="<c:url value='/uat/uap/selectLoginPolicyList.do'/>?pageIndex=<c:out value='${loginPolicyVO.pageIndex}'/>&searchKeyword=<c:out value="${loginPolicyVO.searchKeyword}"/>&searchCondition=1" onclick="fncSelectLoginPolicyList(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+ <input type="hidden" name="dplctPermAt" value="Y" >
+ <input type="hidden" name="searchCondition" value="<c:out value='${loginPolicyVO.searchCondition}'/>" >
+ <input type="hidden" name="searchKeyword" value="<c:out value='${loginPolicyVO.searchKeyword}'/>" >
+ <input type="hidden" name="pageIndex" value="<c:out value='${loginPolicyVO.pageIndex}'/>" >
+ </form:form>
+</div>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyUpdt.jsp (revision 7)
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<%--
+/**
+ * @Class Name : EgovLoginPolicyUpdt.java
+ * @Description : EgovLoginPolicyUpdt jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * @ 2018.09.03 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.11
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+ --%>
+<%@ page 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" %>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comUatUap.loginPolicyUpdt.title"/></title><!-- 로그인정책 수정 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<%-- <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFile.js'/>" ></script> --%>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="loginPolicy" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+
+function fncSelectLoginPolicyList() {
+ var varFrom = document.getElementById("loginPolicy");
+ varFrom.action = "<c:url value='/uat/uap/selectLoginPolicyList.do'/>";
+ varFrom.submit();
+}
+
+function fncLoginPolicyUpdate() {
+ var varFrom = document.getElementById("loginPolicy");
+ varFrom.action = "<c:url value='/uat/uap/updtLoginPolicy.do'/>";
+
+ if(confirm("<spring:message code="comUatUap.loginPolicyUpdt.validate.confirm.save"/>")){ //저장 하시겠습니까?
+ if(!validateLoginPolicy(varFrom)){
+ return;
+ }else{
+ if(ipValidate())
+ varFrom.submit();
+ else
+ return;
+ }
+ }
+}
+
+function fncLoginPolicyDelete() {
+ var varFrom = document.getElementById("loginPolicy");
+ varFrom.action = "<c:url value='/uat/uap/removeLoginPolicy.do'/>";
+ if(confirm("<spring:message code="comUatUap.loginPolicyUpdt.validate.confirm.delete"/>")){ //삭제 하시겠습니까?
+ varFrom.submit();
+ }
+}
+
+function ipValidate() {
+
+ var varFrom = document.getElementById("loginPolicy");
+ var IPvalue = varFrom.ipInfo.value;
+
+ var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
+ var ipArray = IPvalue.match(ipPattern);
+
+ var result = "";
+ var thisSegment;
+
+ if(IPvalue == "0.0.0.0") {
+ alert(IPvalue + " : <spring:message code="comUatUap.loginPolicyUpdt.validate.info.exceptionIP"/>"); //예외 아이피 입니다.
+ result = false;
+ } else if (IPvalue == "255.255.255.255") {
+ alert(result =IPvalue + " : <spring:message code="comUatUap.loginPolicyUpdt.validate.info.exceptionIP"/>"); //예외 아이피 입니다.
+ result = false;
+ } else {
+ result = true;
+ }
+
+ if(ipArray == null) {
+ alert("<spring:message code="comUatUap.loginPolicyUpdt.validate.info.invalidForm"/>"); //형식이 일치 하지않습니다.
+ result = false;
+ } else {
+ for (var i=1; i<5; i++) {
+
+ thisSegment = ipArray[i];
+
+ if (thisSegment > 255) {
+ alert("<spring:message code="comUatUap.loginPolicyUpdt.validate.info.invalidForm"/>"); //형식이 일치 하지않습니다.
+ result = false;
+ }
+
+ if ((i == 0) && (thisSegment > 255)) {
+ alert("<spring:message code="comUatUap.loginPolicyUpdt.validate.info.invalidForm"/>"); //형식이 일치 하지않습니다.
+ result = false;
+ }
+ }
+ }
+
+ return result;
+}
+
+-->
+</script>
+</head>
+
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+<form:form commandName="loginPolicy" method="post" action="${pageContext.request.contextPath}/uat/uap/updtLoginPolicy.do' />">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUatUap.loginPolicyUpdt.pageTop.title"/></h2><!-- 로그인정책 수정 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyUpdt.emplyrId"/> <span class="pilsu">*</span></th><!-- 사용자ID -->
+ <td class="left">
+ <input name="emplyrId" id="emplyrId" title="<spring:message code="comUatUap.loginPolicyUpdt.emplyrId"/>" type="text" <c:if test="${registerFlag == 'UPDATE'}">readonly</c:if> value="<c:out value='${loginPolicy.emplyrId}'/>" readonly="readonly" style="width:180px" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyUpdt.emplyrNm"/> <span class="pilsu">*</span></th><!-- 사용자명 -->
+ <td class="left">
+ <input name="emplyrNm" id="emplyrNm" title="<spring:message code="comUatUap.loginPolicyUpdt.emplyrNm"/>" type="text" value="<c:out value='${loginPolicy.emplyrNm}'/>" maxLength="50" readonly="readonly" style="width:180px" /><!-- 사용자명 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyUpdt.ipInfo"/> <span class="pilsu">*</span></th><!-- IP정보 -->
+ <td class="left">
+ <input name="ipInfo" id="ipInfo" title="<spring:message code="comUatUap.loginPolicyUpdt.ipInfo"/>" type="text" value="<c:out value='${loginPolicy.ipInfo}'/>" maxLength="23" size="30" > <form:errors path="ipInfo" /><!-- IP정보 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyUpdt.lmttAt"/> <span class="pilsu">*</span></th><!-- IP제한여부 -->
+ <td class="left">
+ <select name="lmttAt" id="lmttAt" title="<spring:message code="comUatUap.loginPolicyUpdt.lmttAt"/>"><!-- IP제한여부 -->
+ <option value="Y" <c:if test="${loginPolicy.lmttAt == 'Y'}">selected</c:if> >Y</option>
+ <option value="N" <c:if test="${loginPolicy.lmttAt == 'N'}">selected</c:if> >N</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUatUap.loginPolicyUpdt.regDate"/> <span class="pilsu">*</span></th><!-- 등록일시 -->
+ <td class="left">
+ <input name="regDate" id="regDate" title="<spring:message code="comUatUap.loginPolicyUpdt.regDate"/>" type="text" value="<c:out value='${loginPolicy.regDate}'/>" maxLength="50" readonly="readonly" style="width:180px" /><!-- 등록일시 -->
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fncLoginPolicyUpdate();return false;" /><!-- 저장 -->
+ <span class="btn_s"><a href="<c:url value='/uat/uap/removeLoginPolicy.do'/>?emplyrId=<c:out value='${loginPolicyVO.emplyrId}'/>" onclick="fncLoginPolicyDelete(); return false;"><spring:message code="button.delete" /></a></span><!-- 삭제 -->
+ <span class="btn_s"><a href="<c:url value='/uat/uap/selectLoginPolicyList.do'/>?pageIndex=<c:out value='${loginPolicyVO.pageIndex}'/>&searchKeyword=<c:out value="${loginPolicyVO.searchKeyword}"/>&searchCondition=1" onclick="fncSelectLoginPolicyList(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<!-- 검색조건 유지 -->
+<input type="hidden" name="dplctPermAt" value="Y" >
+<input type="hidden" name="searchCondition" value="<c:out value='${loginPolicyVO.searchCondition}'/>" >
+<input type="hidden" name="searchKeyword" value="<c:out value='${loginPolicyVO.searchKeyword}'/>" >
+<input type="hidden" name="pageIndex" value="<c:out value='${loginPolicyVO.pageIndex}'/>" >
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyList.jsp (revision 7)
@@ -0,0 +1,269 @@
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ page import="egovframework.com.cmm.LoginVO" %>
+<%@ page import="egovframework.com.cmm.util.EgovUserDetailsHelper" %>
+<%
+/**
+ * @Class Name : EgovLoginPolicyList.java
+ * @Description : EgovLoginPolicyList jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2009.02.01 lee.m.j 최초 생성
+ * @ 2011.09.30 이기하 데이터 없을시 메시지 추가
+ * @ 2018.09.03 신용호 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2009.03.21
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comUatUap.LoginPolicyList.title" /></title><!-- 로그인정책 목록조회 -->
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+
+function fncCheckAll() {
+ var checkField = document.listForm.delYn;
+ if(document.listForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fncManageChecked() {
+
+ var checkField = document.listForm.delYn;
+ var checkId = document.listForm.checkId;
+ var returnValue = "";
+ var returnBoolean = false;
+ var checkCount = 0;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkCount++;
+ checkField[i].value = checkId[i].value;
+ if(returnValue == "")
+ returnValue = checkField[i].value;
+ else
+ returnValue = returnValue + ";" + checkField[i].value;
+ }
+ }
+ if(checkCount > 0)
+ returnBoolean = true;
+ else {
+ alert("<spring:message code="comUatUap.LoginPolicyList.validate.checkCount"/>");//선택된 로그인정책이 없습니다.
+ returnBoolean = false;
+ }
+ } else {
+ if(document.listForm.delYn.checked == false) {
+ alert("<spring:message code="comUatUap.LoginPolicyList.validate.checkCount"/>");//선택된 로그인정책이 없습니다.
+ returnBoolean = false;
+ }
+ else {
+ returnValue = checkId.value;
+ returnBoolean = true;
+ }
+ }
+ } else {
+ alert("<spring:message code="comUatUap.LoginPolicyList.validate.checkField"/>");//조회된 결과가 없습니다.
+ }
+
+ document.listForm.emplyrIds.value = returnValue;
+ return returnBoolean;
+}
+
+function fncSelectLoginPolicyList(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/uat/uap/selectLoginPolicyList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectLoginPolicy(emplyrId) {
+ document.listForm.emplyrId.value = emplyrId;
+ document.listForm.action = "<c:url value='/uat/uap/getLoginPolicy.do'/>";
+ document.listForm.submit();
+}
+
+function fncInsertCheckId() {
+
+ var checkedCounter = 0;
+ var checkIds = document.listForm.delYn;
+ var checkIdv = document.listForm.checkId;
+ var checkReg = document.listForm.regYn;
+
+ if(checkIds == null) {
+ alert("<spring:message code="comUatUap.LoginPolicyList.validate.checkIds"/>");//조회 후 등록하시기 바랍니다.
+ return;
+ }
+ else {
+
+ for(var i=0; i<checkIds.length; i++) {
+ if(checkIds[i].checked) {
+ if(checkReg[i].value == 'Y' ) {
+ alert("<spring:message code="comUatUap.LoginPolicyList.validate.checkReg"/>");//이미 로그인정책이 등록되어 있습니다.
+ return;
+ }
+ checkedCounter++;
+ document.listForm.emplyrId.value = checkIdv[i].value;
+ }
+ }
+
+ if(checkedCounter > 1) {
+ alert("<spring:message code="comUatUap.LoginPolicyList.validate.checkedCounter.onlyOne"/>");//등록대상 하나만 선택하십시오.
+ return false;
+ } else if(checkedCounter < 1) {
+ alert("<spring:message code="comUatUap.LoginPolicyList.validate.checkedCounter.none"/>");//선택된 등록대상이 없습니다.
+ return false;
+ }
+
+ return true;
+ }
+}
+
+function fncAddLoginPolicyInsert() {
+
+ if(fncInsertCheckId()) {
+ document.listForm.action = "<c:url value='/uat/uap/addLoginPolicyView.do'/>";
+ document.listForm.submit();
+ }
+}
+
+function fncLoginPolicyListDelete() {
+ if(fncManageChecked()) {
+ if(confirm("<spring:message code="comUatUap.LoginPolicyList.validate.delete"/>")) {//삭제하시겠습니까?
+ document.listForm.action = "<c:url value='/uat/uap/removeLoginPolicyList.do'/>";
+ document.listForm.submit();
+ }
+ }
+}
+
+function linkPage(pageNo){
+ document.listForm.searchCondition.value = "1";
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/uat/uap/selectLoginPolicyList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+
+ if (event.keyCode==13) {
+ fncSelectLoginPolicyList('1');
+ }
+}
+-->
+</script>
+
+</head>
+
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1><spring:message code="comUatUap.LoginPolicyList.caption" /></h1>
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <form name="listForm" action="<c:url value='/uat/uap/selectLoginPolicyList.do'/>" method="post">
+
+ <ul>
+ <li>
+ <label for=""><spring:message code="comUatUap.LoginPolicyList.userName" /> : </label><!-- 사용자 명 -->
+ <input class="s_input2 vat" name="searchKeyword" type="text" value="<c:out value="${loginPolicyVO.searchKeyword}"/>" size="25" onkeypress="press();" title="<spring:message code="comUatUap.LoginPolicyList.userNameSearch" />" /><!-- 사용자명검색 -->
+ <input class="s_btn" type="submit" value="<spring:message code="button.inquire" />" title="<spring:message code="title.inquire"/>" onclick="fncSelectLoginPolicyList('1'); return false;" /><!-- 조회 -->
+ </li>
+ </ul>
+ <input type="hidden" name="emplyrId">
+ <input type="hidden" name="pageIndex" value="<c:if test="${empty loginPolicyVO.pageIndex }">1</c:if><c:if test="${!empty loginPolicyVO.pageIndex }"><c:out value='${loginPolicyVO.pageIndex}'/></c:if>">
+ <input type="hidden" name="searchCondition" value="1" >
+ </form>
+ </div>
+
+ <table class="board_list">
+ <caption><spring:message code="comUatUap.LoginPolicyList.caption" /></caption><!-- 로그인정책 관리 -->
+ <colgroup>
+ <col style="width:20%" />
+ <col style="width:25%" />
+ <col style="width:20%" />
+ <col style="width:15%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUatUap.LoginPolicyList.userId"/></th><!-- 사용자 ID -->
+ <th scope="col"><spring:message code="comUatUap.LoginPolicyList.userName" /></th><!-- 사용자 명 -->
+ <th scope="col"><spring:message code="comUatUap.LoginPolicyList.ipInfo" /></th><!-- IP 정보 -->
+ <th scope="col"><spring:message code="comUatUap.LoginPolicyList.restricted" /></th><!-- 제한여부 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(loginPolicyList) == 0}">
+ <tr>
+ <td colspan="4">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <c:forEach var="loginPolicy" items="${loginPolicyList}" varStatus="status">
+ <tr>
+ <td>
+ <form name="item" action="<c:url value='/uat/uap/getLoginPolicy.do'/>">
+ <input type="hidden" name="emplyrId" value="<c:out value="${loginPolicy.emplyrId}"/>">
+ <input type="hidden" name="pageIndex" value="<c:out value='${loginPolicyVO.pageIndex}'/>">
+ <input type="hidden" name="searchCondition" value="<c:out value='${loginPolicyVO.searchCondition}'/>">
+ <input type="hidden" name="searchKeyword" value="<c:out value="${loginPolicyVO.searchKeyword}"/>">
+ <span class="link ac"><input type="submit" value="<c:out value="${loginPolicy.emplyrId}"/>" onclick="fncSelectLoginPolicy('<c:out value="${loginPolicy.emplyrId}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td><c:out value="${loginPolicy.emplyrNm}"/></td>
+ <td><c:out value="${loginPolicy.ipInfo}"/></td>
+ <td><c:if test="${loginPolicy.lmttAt == 'Y'}">Y</c:if><c:if test="${loginPolicy.lmttAt == 'N'}">N</c:if></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <c:if test="${!empty loginPolicyVO.pageIndex }">
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+ </c:if>
+
+</div>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uap/EgovLoginPolicyList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordSearch.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordSearch.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordSearch.jsp (revision 7)
@@ -0,0 +1,192 @@
+<%
+ /**
+ * @Class Name : EgovIdPasswordSearch.jsp
+ * @Description : 아이디/비밀번호 찾기 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.09 박지욱 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ * @author 공통서비스팀
+ * @since 2009.03.09
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<c:set var="pageTitle"><spring:message code="comUatUia.idPw.title"/></c:set>
+<!DOCTYPE html>
+<html>
+<head>
+<title>${pageTitle} </title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/uat/uia/idpw.css' />">
+<script>
+
+function fnCheckUsrId(userSe) {
+ // 일반회원
+ if (userSe == "GNR") {
+ document.getElementById("idGnr").className = "on";
+ document.getElementById("idEnt").className = "";
+ document.getElementById("idUsr").className = "";
+ document.idForm.userSe.value = "GNR";
+ // 기업회원
+ } else if (userSe == "ENT") {
+ document.getElementById("idGnr").className = "";
+ document.getElementById("idEnt").className = "on";
+ document.getElementById("idUsr").className = "";
+ document.idForm.userSe.value = "ENT";
+ // 업무사용자
+ } else if (userSe == "USR") {
+ document.getElementById("idGnr").className = "";
+ document.getElementById("idEnt").className = "";
+ document.getElementById("idUsr").className = "on";
+ document.idForm.userSe.value = "USR";
+ }
+}
+
+function fnCheckUsrPassword(userSe) {
+ // 일반회원
+ if (userSe == "GNR") {
+ document.getElementById("pwGnr").className = "on";
+ document.getElementById("pwEnt").className = "";
+ document.getElementById("pwUsr").className = "";
+ document.passwordForm.userSe.value = "GNR";
+ // 기업회원
+ } else if (userSe == "ENT") {
+ document.getElementById("pwGnr").className = "";
+ document.getElementById("pwEnt").className = "on";
+ document.getElementById("pwUsr").className = "";
+ document.passwordForm.userSe.value = "ENT";
+ // 업무사용자
+ } else if (userSe == "USR") {
+ document.getElementById("pwGnr").className = "";
+ document.getElementById("pwEnt").className = "";
+ document.getElementById("pwUsr").className = "on";
+ document.passwordForm.userSe.value = "USR";
+ }
+}
+
+function fnSearchId() {
+ if (document.idForm.name.value =="") {
+ alert("<spring:message code="comUatUia.idPw.validate.name" />");
+ } else if (document.idForm.email.value =="") {
+ alert("<spring:message code="comUatUia.idPw.validate.email" />");
+ } else {
+ document.idForm.submit();
+ }
+}
+
+function fnSearchPassword() {
+ if (document.passwordForm.id.value =="") {
+ alert("<spring:message code="comUatUia.idPw.validate.id" />");
+ } else if (document.passwordForm.name.value =="") {
+ alert("<spring:message code="comUatUia.idPw.validate.name" />");
+ } else if (document.passwordForm.email.value =="") {
+ alert("<spring:message code="comUatUia.idPw.validate.email" />");
+ } else if (document.passwordForm.passwordHint.value =="") {
+ alert("<spring:message code="comUatUia.idPw.validate.passwordHint" />");
+ } else if (document.passwordForm.passwordCnsr.value =="") {
+ alert("<spring:message code="comUatUia.idPw.validate.passwordCnsr" />");
+ } else {
+ document.passwordForm.submit();
+ }
+}
+
+</script>
+</head>
+<body>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="idpw_form">
+
+ <!-- 아이디 찾기 -->
+ <fieldset class="id_search">
+ <form name="idForm" action ="<c:url value='/uat/uia/searchId.do'/>" method="post">
+ <legend><spring:message code="comUatUia.idPw.searchId" /></legend>
+ <h2><spring:message code="comUatUia.idPw.searchId" /></h2>
+ <div class="login_type">
+ <ul>
+ <li><a id="idGnr" onClick="fnCheckUsrId('GNR');" class="on"><spring:message code="comUatUia.idPw.gnr" /></a></li>
+ <li><a id="idEnt" onClick="fnCheckUsrId('ENT');"><spring:message code="comUatUia.idPw.ent" /></a></li>
+ <li><a id="idUsr" onClick="fnCheckUsrId('USR');"><spring:message code="comUatUia.idPw.usr" /></a></li>
+ </ul>
+ </div>
+ <div class="login_input">
+ <ul>
+ <li>
+ <label for="name"><spring:message code="comUatUia.idPw.name" /></label>
+ <input type="text" name="name" maxlength="20" title="<spring:message code="comUatUia.idPw.name" />" placeholder="<spring:message code="comUatUia.idPw.name" />" />
+ </li>
+ <li>
+ <label for="email"><spring:message code="comUatUia.idPw.email" /></label>
+ <input type="text" name="email" maxlength="30" title="<spring:message code="comUatUia.idPw.email" />" placeholder="<spring:message code="comUatUia.idPw.email" />" />
+ </li>
+ <li>
+ <input type="button" class="btn_login" onClick="fnSearchId();" value="<spring:message code="comUatUia.idPw.searchId" />" />
+ </li>
+ </ul>
+ </div>
+ <input name="userSe" type="hidden" value="GNR">
+ </form>
+ </fieldset>
+ <!-- 아이디 찾기 //-->
+
+ <!-- 비밀번호 찾기 -->
+ <fieldset class="pw_search">
+ <form name="passwordForm" action ="<c:url value='/uat/uia/searchPassword.do'/>" method="post">
+ <legend><spring:message code="comUatUia.idPw.searchPassword" /></legend>
+ <h2><spring:message code="comUatUia.idPw.searchPassword" /></h2>
+ <div class="login_type">
+ <ul>
+ <li><a id="pwGnr" onClick="fnCheckUsrPassword('GNR');" class="on"><spring:message code="comUatUia.idPw.gnr" /></a></li>
+ <li><a id="pwEnt" onClick="fnCheckUsrPassword('ENT');"><spring:message code="comUatUia.idPw.ent" /></a></li>
+ <li><a id="pwUsr" onClick="fnCheckUsrPassword('USR');"><spring:message code="comUatUia.idPw.usr" /></a></li>
+ </ul>
+ </div>
+ <div class="login_input">
+ <ul>
+ <li>
+ <label for="id"><spring:message code="comUatUia.idPw.id" /></label>
+ <input type="text" name="id" maxlength="15" title="<spring:message code="comUatUia.idPw.id" />" placeholder="<spring:message code="comUatUia.idPw.id" />" />
+ </li>
+ <li>
+ <label for="name"><spring:message code="comUatUia.idPw.name" /></label>
+ <input type="text" name="name" maxlength="20" title="<spring:message code="comUatUia.idPw.name" />" placeholder="<spring:message code="comUatUia.idPw.name" />" />
+ </li>
+ <li>
+ <label for="email"><spring:message code="comUatUia.idPw.email" /></label>
+ <input type="text" name="email" maxlength="30" title="<spring:message code="comUatUia.idPw.email" />" placeholder="<spring:message code="comUatUia.idPw.email" />" />
+ </li>
+ <li>
+ <select name="passwordHint" title="<spring:message code="comUatUia.idPw.passwordHint" />">
+ <option selected value=''><spring:message code="comUatUia.idPw.validate.passwordHint" /></option><!-- --선택하세요-- -->
+ <c:forEach var="result" items="${pwhtCdList}" varStatus="status">
+ <option value='<c:out value="${result.code}"/>'><c:out value="${result.codeNm}"/></option>
+ </c:forEach>
+ </select>
+ </li>
+ <li>
+ <label for="passwordCnsr"><spring:message code="comUatUia.idPw.passwordCnsr" /></label>
+ <input type="text" name="passwordCnsr" maxlength="50" title="<spring:message code="comUatUia.idPw.passwordCnsr" />" placeholder="<spring:message code="comUatUia.idPw.passwordCnsr" />">
+ </li>
+ <li>
+ <input type="button" class="btn_login" onClick="fnSearchPassword();" value="<spring:message code="comUatUia.idPw.searchPassword" />">
+ </li>
+ </ul>
+ </div>
+ <input name="userSe" type="hidden" value="GNR">
+ </form>
+ </fieldset>
+ <!-- 비밀번호 찾기 //-->
+</div>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordSearch.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordResult.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordResult.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordResult.jsp (revision 7)
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovIdPasswordResult.jsp
+ * @Description : 아이디/비밀번호 찾기 결과화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.17 박지욱 최초 생성
+ * 2016.06.13 김연호 표준프레임워크 v3.6 개선
+ *
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.17
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />" type="text/css">
+<c:set var="pageTitle"><spring:message code="comUatUia.idPw.title"/> <spring:message code="comUatUia.idPw.result"/></c:set>
+<title>${pageTitle}</title>
+<script>
+/* ********************************************************
+ * 뒤로 처리 함수
+ ******************************************************** */
+function fncGoAfterPage(){
+ history.back(-2);
+}
+
+function fncGoIdPwd(){
+ location.href="<c:url value='/uat/uia/egovIdPasswordSearch.do'/>";
+}
+
+function fncGoLogin(){
+ location.href="<c:url value='/uat/uia/egovLoginUsr.do'/>";
+}
+
+</script>
+</head>
+<body>
+ <div style="width: 1000px; margin: 50px auto 50px;">
+ <p style="font-size: 18px; color: #000; margin-bottom: 10px; "><img src="<c:url value='/images/egovframework/com/cmm/er_logo.jpg' />" width="379" height="57" /></p>
+ <div style="border: 0px solid #666; padding: 20px;">
+ <p style="color:red; margin-bottom: 8px; "></p>
+
+ <div class="boxType1" style="width: 500px;">
+ <div class="box">
+ <div class="error">
+ <p class="title">${pageTitle}</p>
+ <p class="cont mb20">${resultInfo}<br /></p>
+ <span class="btn_style1 blue"><a href="javascript:fncGoIdPwd();"><spring:message code="comUatUia.idPasswordResult.searchIdPwd" /></a></span><!-- 아이디 및 비밀번호 찾기 -->
+ <span class="btn_style1 blue"><a href="javascript:fncGoLogin();"><spring:message code="comUatUia.loginForm.login" /></a></span><!-- 로그인 -->
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovIdPasswordResult.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovLoginUsr.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovLoginUsr.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovLoginUsr.jsp (revision 7)
@@ -0,0 +1,316 @@
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovLoginUsr.jsp
+ * @Description : Login 인증 화면
+ * @Modification Information
+ *
+ * @수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2009.03.03 박지욱 최초 생성
+ * 2011.09.25 서준식 사용자 관리 패키지가 미포함 되었을때에 회원가입 오류 메시지 표시
+ * 2011.10.27 서준식 사용자 입력 탭 순서 변경
+ * 2017.07.21 장동한 로그인인증제한 작업
+ * 2019.12.11 신용호 KISA 보안약점 조치 (크로스사이트 스크립트)
+ * 2020.06.23 신용호 세션만료시간 보여주기
+ *
+ * @author 공통서비스 개발팀 박지욱
+ * @since 2009.03.03
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<!DOCTYPE html>
+<html>
+<head>
+<title><spring:message code="comUatUia.title" /></title><!-- 로그인 -->
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/uat/uia/login.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/showModalDialog.js'/>" ></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jquery.js'/>" ></script>
+<script type="text/javaScript" language="javascript">
+function checkLogin(userSe) {
+ // 일반회원
+ if (userSe == "GNR") {
+ document.loginForm.rdoSlctUsr[0].checked = true;
+ document.loginForm.rdoSlctUsr[1].checked = false;
+ document.loginForm.rdoSlctUsr[2].checked = false;
+ document.loginForm.userSe.value = "GNR";
+ // 기업회원
+ } else if (userSe == "ENT") {
+ document.loginForm.rdoSlctUsr[0].checked = false;
+ document.loginForm.rdoSlctUsr[1].checked = true;
+ document.loginForm.rdoSlctUsr[2].checked = false;
+ document.loginForm.userSe.value = "ENT";
+ // 업무사용자
+ } else if (userSe == "USR") {
+ document.loginForm.rdoSlctUsr[0].checked = false;
+ document.loginForm.rdoSlctUsr[1].checked = false;
+ document.loginForm.rdoSlctUsr[2].checked = true;
+ document.loginForm.userSe.value = "USR";
+ }
+}
+
+function actionLogin() {
+ if (document.loginForm.id.value =="") {
+ alert("<spring:message code="comUatUia.validate.idCheck" />"); <%-- 아이디를 입력하세요 --%>
+ } else if (document.loginForm.password.value =="") {
+ alert("<spring:message code="comUatUia.validate.passCheck" />"); <%-- 비밀번호를 입력하세요 --%>
+ } else {
+ document.loginForm.action="<c:url value='/uat/uia/actionLogin.do'/>";
+ //document.loginForm.j_username.value = document.loginForm.userSe.value + document.loginForm.username.value;
+ //document.loginForm.action="<c:url value='/j_spring_security_check'/>";
+ document.loginForm.submit();
+ }
+}
+
+function actionCrtfctLogin() {
+ document.defaultForm.action="<c:url value='/uat/uia/actionCrtfctLogin.do'/>";
+ document.defaultForm.submit();
+}
+
+function goFindId() {
+ document.defaultForm.action="<c:url value='/uat/uia/egovIdPasswordSearch.do'/>";
+ document.defaultForm.submit();
+}
+
+function goRegiUsr() {
+
+ var useMemberManage = '${useMemberManage}';
+
+ if(useMemberManage != 'true'){
+ <%-- 사용자 관리 컴포넌트가 설치되어 있지 않습니다. \n관리자에게 문의하세요. --%>
+ alert("<spring:message code="comUatUia.validate.userManagmentCheck" />");
+ return false;
+ }
+
+ var userSe = document.loginForm.userSe.value;
+
+ // 일반회원
+ if (userSe == "GNR") {
+ document.loginForm.action="<c:url value='/uss/umt/EgovStplatCnfirmMber.do'/>";
+ document.loginForm.submit();
+ // 기업회원
+ } else if (userSe == "ENT") {
+ document.loginForm.action="<c:url value='/uss/umt/EgovStplatCnfirmEntrprs.do'/>";
+ document.loginForm.submit();
+ // 업무사용자
+ } else if (userSe == "USR") {
+ <%-- 업무사용자는 별도의 회원가입이 필요하지 않습니다. --%>
+ alert("<spring:message code="comUatUia.validate.membershipCheck" />");
+ }
+}
+
+function goGpkiIssu() {
+ document.defaultForm.action="<c:url value='/uat/uia/egovGpkiIssu.do'/>";
+ document.defaultForm.submit();
+}
+
+function setCookie (name, value, expires) {
+ document.cookie = name + "=" + escape (value) + "; path=/; expires=" + expires.toGMTString();
+}
+
+function getCookie(Name) {
+ var search = Name + "=";
+ if (document.cookie.length > 0) { // 쿠키가 설정되어 있다면
+ offset = document.cookie.indexOf(search);
+ if (offset != -1) { // 쿠키가 존재하면
+ offset += search.length;
+ // set index of beginning of value
+ end = document.cookie.indexOf(";", offset);
+ // 쿠키 값의 마지막 위치 인덱스 번호 설정
+ if (end == -1)
+ end = document.cookie.length;
+ return unescape(document.cookie.substring(offset, end));
+ }
+ }
+ return "";
+}
+
+function saveid(form) {
+ var expdate = new Date();
+ // 기본적으로 30일동안 기억하게 함. 일수를 조절하려면 * 30에서 숫자를 조절하면 됨
+ if (form.checkId.checked)
+ expdate.setTime(expdate.getTime() + 1000 * 3600 * 24 * 30); // 30일
+ else
+ expdate.setTime(expdate.getTime() - 1); // 쿠키 삭제조건
+ setCookie("saveid", form.id.value, expdate);
+}
+
+function getid(form) {
+ form.checkId.checked = ((form.id.value = getCookie("saveid")) != "");
+}
+
+function fnInit() {
+ /* if (document.getElementById('loginForm').message.value != null) {
+ var message = document.getElementById('loginForm').message.value;
+ } */
+ /* if ("<c:out value='${message}'/>" != "") {
+ alert("<c:out value='${message}'/>");
+ } */
+
+ /* *************************
+ document.loginForm.rdoSlctUsr[0].checked = false;
+ document.loginForm.rdoSlctUsr[1].checked = false;
+ document.loginForm.rdoSlctUsr[2].checked = true;
+ document.loginForm.userSe.value = "USR";
+ document.loginForm.id.value="TEST1";
+ document.loginForm.password.value="rhdxhd12";
+ **************************** */
+
+ //getid(document.loginForm);
+ // 포커스
+ //document.loginForm.rdoSlctUsr.focus();
+
+ getid(document.loginForm);
+
+ fnLoginTypeSelect("typeGnr");
+
+ <c:if test="${not empty fn:trim(loginMessage) && loginMessage ne ''}">
+ alert("loginMessage:<c:out value='${loginMessage}'/>");
+ </c:if>
+
+ // reload "_top" frame page
+ if (parent.frames["_top"] == undefined)
+ console.log("'_top' frame is not exist!");
+ parent.frames["_top"].location.reload();
+}
+
+function fnLoginTypeSelect(objName){
+
+ document.getElementById("typeGnr").className = "";
+ document.getElementById("typeEnt").className = "";
+ document.getElementById("typeUsr").className = "";
+
+ document.getElementById(objName).className = "on";
+
+ if(objName == "typeGnr"){ //일반회원
+ document.loginForm.userSe.value = "GNR";
+ }else if(objName == "typeEnt"){ //기업회원
+ document.loginForm.userSe.value = "ENT";
+ }else if(objName == "typeUsr"){ //업무사용자
+ document.loginForm.userSe.value = "USR";
+ }
+
+}
+
+function fnShowLogin(stat) {
+ if (stat < 1) { //일반로그인
+ $(".login_input").eq(0).show();
+ $(".login_input").eq(1).hide();
+ } else { //공인인증서 로그인
+ $(".login_input").eq(0).hide();
+ $(".login_type").hide();
+ $(".login_input").eq(1).show();
+ }
+}
+
+</script>
+</head>
+<body onLoad="fnInit();">
+
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+
+<!-- 일반로그인 -->
+<div class="login_form">
+ <form name="loginForm" id="loginForm" action="<c:url value='/uat/uia/actionLogin.do'/>" method="post">
+ <input type="hidden" id="message" name="message" value="<c:out value='${message}'/>">
+
+ <fieldset>
+ <img src="<c:url value='/images/egovframework/com/uat/uia/login_tit.png'/>" style="margin:30px 0 0px 60px" alt="login title image" title="login title image">
+ <div class="login_type">
+ <ul id="ulLoginType">
+ <li><a href="javascript:fnLoginTypeSelect('typeGnr');" id="typeGnr" title=""><spring:message code="comUatUia.loginForm.GNR"/></a></li> <!-- 일반 -->
+ <li><a href="javascript:fnLoginTypeSelect('typeEnt');" id="typeEnt" title=""><spring:message code="comUatUia.loginForm.ENT"/></a></li> <!-- 기업 -->
+ <li><a href="javascript:fnLoginTypeSelect('typeUsr');" id="typeUsr" title=""><spring:message code="comUatUia.loginForm.USR"/></a></li> <!-- 업무 -->
+ </ul>
+ </div>
+
+ <div class="login_input">
+ <ul>
+ <!-- 아이디 -->
+ <c:set var="title"><spring:message code="comUatUia.loginForm.id"/></c:set>
+ <li>
+ <label for="id">${title}</label>
+ <input type="text" name="id" id="id" maxlength="20" title="${title} ${inputTxt}" placeholder="${title} ${inputTxt}">
+ </li>
+ <!-- 비밀번호 -->
+ <c:set var="title"><spring:message code="comUatUia.loginForm.pw"/></c:set>
+ <li>
+ <label for="password">${title}</label>
+ <input type="password" name="password" id="password" maxlength="20" title="${title} ${inputTxt}" placeholder="${title} ${inputTxt}">
+ </li>
+ <!-- 아이디 저장 -->
+ <c:set var="title"><spring:message code="comUatUia.loginForm.idSave"/></c:set>
+ <li class="chk">
+ <input type="checkbox" name="checkId" class="check2" onclick="javascript:saveid(document.loginForm);" id="checkId">${title}
+ </li>
+ <li>
+ <input type="button" class="btn_login" value="<spring:message code="comUatUia.loginForm.login"/>" onclick="actionLogin()"> <!-- 로그인 -->
+ </li>
+ <li>
+ <ul class="btn_idpw" >
+ <li><a href="#" onclick="goRegiUsr(); return false;"><spring:message code="comUatUia.loginForm.regist"/></a></li> <!-- 회원가입 -->
+ </ul>
+ </li>
+ <li>
+ <ul class="btn_idpw" >
+ <li><a href="#" onclick="fnShowLogin(1);"><spring:message code="comUatUia.loginForm.login.gpki"/></a></li><!-- 인증서로그인 -->
+ <li><a href="<c:url value='/uat/uia/egovGpkiIssu.do'/>"><spring:message code="comUatUia.loginForm.gpki.info"/></a></li><!-- 인증서안내 -->
+ </ul>
+ </li>
+
+ </ul>
+ </div>
+
+ <div class="login_input" style="display: none">
+ <ul>
+ <li>
+ <label for="password"><spring:message code="comUatUia.loginForm.pw"/></label><!-- 비밀번호 -->
+ <input type="password" name="pwd" id="" maxlength="20" title="${title} ${inputTxt}" placeholder="<spring:message code="comUatUia.loginForm.pw"/>"><!-- 비밀번호 -->
+ </li>
+ <li>
+ <input type="button" class="btn_login" value="<spring:message code="comUatUia.loginForm.login.gpki"/>" onclick="actionLogin()"><!-- 인증서로그인 -->
+ </li>
+ <li>
+ <ul class="btn_idpw" >
+ <li><a href="#" onclick="fnShowLogin(0);"><spring:message code="comUatUia.loginForm.login.normal"/></a></li><!-- 일반로그인 -->
+ </ul>
+ <ul class="btn_idpw" >
+ <li>※ <spring:message code="comUatUia.loginForm.gpki.descrption"/></li>
+ </ul>
+ </li>
+ </ul>
+
+ </div>
+ </fieldset>
+
+ <input name="userSe" type="hidden" value="GNR"/>
+ <input name="j_username" type="hidden"/>
+ </form>
+</div>
+
+<!-- 팝업 폼 -->
+<form name="defaultForm" action ="" method="post" target="_blank">
+<div style="visibility:hidden;display:none;">
+<input name="iptSubmit3" type="submit" value="<spring:message code="comUatUia.loginForm.submit"/>" title="<spring:message code="comUatUia.loginForm.submit"/>">
+</div>
+</form>
+<!-- login영역 //-->
+
+
+
+</body>
+</html>
+
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovLoginUsr.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovExpirePwd.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovExpirePwd.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovExpirePwd.jsp (revision 7)
@@ -0,0 +1,132 @@
+<%@ 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"%>
+<%
+ /**
+ * @Class Name : EgovUnitContent.jsp
+ * @Description : 로그인 성공후 컨텐츠 영역
+ * @Modification Information
+ *
+ * @수정일 수정자 수정내용
+ * ---------- -------- ---------------------------
+ * 2020.07.08 신용호 비밀번호 만료 처리
+ *
+ * @author 공통서비스 개발팀 신용호
+ * @since 2020.07.08
+ * @version 3.10
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>eGovFrame <spring:message code="comCmm.unitContent.20"/></title>
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jquery.js'/>" ></script>
+<script type="text/javascript">
+var flagTopFrame = false;
+
+// 기업회원 (ENTERPRISE)
+function fnPasswordMoveEnt(){
+ document.pwdManage.action = "<c:url value='/uss/umt/EgovEntrprsPasswordUpdtView.do'/>";
+ document.pwdManage.submit();
+}
+// 일반회원 (USER)
+function fnPasswordMoveMber(){
+ document.pwdManage.action = "<c:url value='/uss/umt/EgovMberPasswordUpdtView.do'/>";
+ document.pwdManage.submit();
+}
+// 업무사용자 (TEST1/webmaster)
+function fnPasswordMoveUser(){
+ document.pwdManage.action = "<c:url value='/uss/umt/EgovUserPasswordUpdtView.do'/>";
+ document.pwdManage.submit();
+}
+
+function fn_egov_init() {
+
+ switch ( $("#userSe").val() ) {
+ case "USR" :
+ $("#emplyrId").val($("#loginId").val());
+ $("#userSeName").text("<spring:message code="comCmm.expirePwdContent.10"/>"); //업무사용자
+ break;
+ case "ENT" :
+ $("#entrprsmberId").val($("#loginId").val());
+ $("#userSeName").text("<spring:message code="comCmm.expirePwdContent.11"/>"); //기업회원
+ break;
+ case "GNR" :
+ $("#mberId").val($("#loginId").val());
+ $("#userSeName").text("<spring:message code="comCmm.expirePwdContent.12"/>"); //일반회원
+ break;
+ }
+
+}
+
+function fn_egov_change_pwd() {
+
+ switch ( $("#userSe").val() ) {
+ case "USR" : // 업무사용자
+ console.log("<spring:message code="comCmm.expirePwdContent.10"/>"); //업무사용자
+ fnPasswordMoveUser();
+ break;
+ case "ENT" : // 기업회원
+ console.log("<spring:message code="comCmm.expirePwdContent.11"/>"); //기업회원
+ fnPasswordMoveEnt();
+ break;
+ case "GNR" : //일반회원
+ console.log("<spring:message code="comCmm.expirePwdContent.12"/>"); //일반회원
+ fnPasswordMoveMber();
+ break;
+ }
+}
+
+</script>
+</head>
+<body onload="fn_egov_init()">
+ <c:if test="${loginVO != null}">
+ <spring:message code="comCmm.expirePwdContent.1"/> ID : ${loginVO.id}<br><!-- 로그인 -->
+ <spring:message code="comCmm.expirePwdContent.2"/> : <span id="userSeName"></span><!-- 로그인 구분 -->
+ <!--
+ <br>passedDay = ${passedDay}
+ <br>expirePwdDay = ${expirePwdDay}
+ <br>elapsedTimeExpiration = ${elapsedTimeExpiration}
+ -->
+ <script type="text/javaScript" language="javascript">
+ flagTopFrame = true;
+ </script>
+ </c:if>
+ <p/><p/><p/>
+ <b><spring:message code="comCmm.expirePwdContent.21"/></b><br/><!-- 비밀번호 유효기간의 변경은 다음 파일을 참조하여 주세요. -->
+ src/main/resources/egovframework/egovProps/globals.properties
+ <p/>
+ <b><img src="${pageContext.request.contextPath }/images/egovframework/com/cmm/icon/tit_icon.png"> <spring:message code="comCmm.expirePwdContent.22"/> </b><p/><!-- 비밀번호 유효기간 만료 -->
+ <spring:message code="comCmm.expirePwdContent.23"/><p/><!-- 비밀번호 유효기간이 만료 되었습니다. -->
+ <spring:message code="comCmm.expirePwdContent.24"/><p/><!-- 안전한 개인정보 보호를 위해 지금 비밀번호를 변경해 주세요! -->
+
+ <br /><b><img src="${pageContext.request.contextPath }/images/egovframework/com/cmm/icon/tit_icon.png"> <spring:message code="comCmm.expirePwdContent.25"/></b><p/><!-- 비밀번호 유효기간 초과일수 -->
+
+ <spring:message code="comCmm.expirePwdContent.26"/> : ${expirePwdDay}<spring:message code="comCmm.expirePwdContent.30"/><br /><!-- 비밀번호 유효기간 -->
+ <spring:message code="comCmm.expirePwdContent.27"/> : ${passedDay}<spring:message code="comCmm.expirePwdContent.30"/><br /><!-- 비밀번호 변경후 경과일수 -->
+ <spring:message code="comCmm.expirePwdContent.28"/> : ${elapsedTimeExpiration}<spring:message code="comCmm.expirePwdContent.30"/><br /><p/><!-- 비밀번호 유효기간 초과일수 -->
+ <spring:message code="comCmm.expirePwdContent.29"/><p/><!-- 주기적으로 비밀번호를 변경해 주세요. -->
+ <br/>
+ <div align="center">
+ <input class="btn_03" type="submit" value="<spring:message code="comCmm.expirePwdContent.50"/>" title="<spring:message code="comCmm.expirePwdContent.50"/>" onclick="fn_egov_change_pwd(); return false;" /><!-- 지금 즉시 변경하기 -->
+ <input class="btn_03" type="submit" value="<spring:message code="comCmm.expirePwdContent.51"/>" title="<spring:message code="comCmm.expirePwdContent.51"/>" onclick="parent.$dialog.dialog('close'); return false;" /><!-- 다음에 변경하기 -->
+ </div>
+
+ <form id="pwdManage" name="pwdManage" method="post" target="_parent">
+ <input type="hidden" id="loginId" name="loginId" readonly="readonly" value="${loginVO.id}"/>
+ <input type="hidden" id="uniqId" name="uniqId" readonly="readonly" value="${loginVO.uniqId}"/>
+ <input type="hidden" id="userSe" name="userSe" readonly="readonly" value="${loginVO.userSe}"/>
+ <br><br><br>
+ <!-- 일반회원 --><input type="hidden" id="mberId" name="mberId" readonly="readonly" value=""/><!-- USER -->
+ <!-- 기업회원 --><input type="hidden" id="entrprsmberId" name="entrprsmberId" readonly="readonly" value=""/><!-- ENTERPRISE -->
+ <!-- 업무사용자 --><input type="hidden" id="emplyrId" name="emplyrId" readonly="readonly" value=""/><!-- TEST1/webmaster -->
+ </form>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/uat/uia/EgovExpirePwd.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/head.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/head.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/head.jsp (revision 7)
@@ -0,0 +1,47 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ page import="egovframework.com.cmm.util.EgovUserDetailsHelper" %>
+<script language="text/javascript" src="<c:url value='/js/egovframework/com/main.js' />"></script>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/main_portal.css' />">
+<script type="text/javascript">
+ function fn_main_headPageMove(menuNo, url){
+ document.selectOne.menuNo.value=menuNo;
+ document.selectOne.chkURL.value=url;
+ document.selectOne.action = "<c:url value='/sym/mnu/mpm/EgovMainMenuIndex.do'/>";
+ document.selectOne.submit();
+ }
+
+ function actionLogout()
+ {
+ document.selectOne.action = "<c:url value='/uat/uia/actionLogout.do'/>";
+ document.selectOne.submit();
+ //top.document.location.href = "<c:url value='/j_spring_security_logout'/>";
+ }
+</script>
+
+<form name="selectOne">
+<input name="menuNo" type="hidden" />
+<input name="chkURL" type="hidden" />
+ <div id="gnb">
+ <div id="top_logo"><a href="<c:url value='/sym/mnu/mpm/EgovMainMenuHome.do' />" target=_top><img src="<c:url value='/images/egovframework/com/cmm/main/logo_01.gif' />" alt="egovframe" /></a></div>
+ <div id="use_descri">
+ <ul>
+ <li><spring:message code="comSymMnuMpm.head.head"/></li><!-- 공통서비스 테스트 사이트 -->
+ <li><a href="javascript:actionLogout()"><img src="<c:url value='/images/egovframework/com/cmm/main/logout_btn.gif' />" alt="로그아웃" /></a></li>
+ </ul>
+ </div>
+ </div>
+ <div id="new_topnavi">
+ <ul>
+ <li><a href="<c:url value='/sym/mnu/mpm/EgovMainMenuHome.do' />" target="_top">HOME</a></li>
+ <c:forEach var="result" items="${list_headmenu}" varStatus="status">
+ <li class="gap"> l </li>
+ <li><a href="javascript:fn_main_headPageMove('<c:out value="${result.menuNo}"/>','<c:out value="${result.chkURL}"/>')"><c:out value="${result.menuNm}"/></a></li>
+ </c:forEach>
+ </ul>
+ </div>
+
+</form>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/head.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_bottom.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_bottom.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_bottom.jsp (revision 7)
@@ -0,0 +1,22 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/main_portal.css' />">
+<title><spring:message code="comSymMnuMpm.main_bottom.mainBottomTitle"/></title><!-- 아래메인 -->
+</head>
+<body leftmargin="0" topmargin="0" marginwidth="0" marginheight= "0">
+ <div id="new_footer">
+ <ul>
+ <li style="float:left"><img src="<c:url value='/images/egovframework/com/cmm/main/bottom_logo.png' />" alt="안전행전부" /></li>
+ <li style="font-size:11px; float:left; margin: 10px"><spring:message code="comSymMnuMpm.main_bottom.address"/></p>
+ © Ministry of the Interior and Safety. All rights reserved.</li>
+ </ul>
+ </div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_bottom.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu_index.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu_index.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu_index.jsp (revision 7)
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%
+ /**
+ * @Class Name : EgovMainMenuIndex.jsp
+ * @Description : MainMenuIndex Page
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ *
+ * @author 공통서비스 개발팀 이용
+ * @since 2009.03.10
+ * @version 1.0
+ * @see
+ * ?vStartP=<c:out value="${result.menuNo}"/> <c:out value="${result.chkURL}"/>
+ */
+
+%>
+
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Menu Index frame</title>
+</head>
+
+<frameset rows="122,*,50" frameborder="0" >
+ <frame src="<c:url value='/sym/mnu/mpm/EgovMainMenuHead.do' />" name="main_top" marginwidth="0" marginheight="0">
+ <frameset cols="273,*" frameborder="0">
+ <frame src="<c:url value='/sym/mnu/mpm/EgovMainMenuLeft.do' />?vStartP=<c:out value="${resultVO.menuNo}" />" scrolling="no" name="main_left" marginwidth="0" marginheight="0">
+ <frame src="<c:url value='/sym/mnu/mpm/EgovMainMenuRight.do' />?vStartP=<c:out value="${resultVO.menuNo}" />" name="main_right" marginwidth="0" marginheight="0">
+ </frameset>
+ <frame src="<c:url value='/EgovPageLink.do' />?link=/egovframework/com/main_bottom" scrolling="no" name="main_bottom" marginwidth="0" marginheight="0">
+</frameset>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu_index.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/mdl/EgovModal.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/mdl/EgovModal.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/mdl/EgovModal.jsp (revision 7)
@@ -0,0 +1,68 @@
+<%
+ /**
+ * @Class Name : EgovModal.jsp
+ * @Description : 모달 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2016.07.13 장동한 최초 생성
+ *
+ * @author 2016 표준프레임워크유지보수 개발팀 장동한
+ * @since 2016.07.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>modal</title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+ $('#egovBtn').egovModal( 'egovModal' );
+ $('#egovBtn2').egovModal( 'egovModal2' );
+}
+</script>
+<style>
+.modal-content {width: 80%;}
+</style>
+</head>
+<body onload="fn_egov_init()">
+
+
+<!-- Trigger/Open The Modal -->
+<button id="egovBtn">Open Modal</button>
+<button id="egovBtn2">Open Modal2</button>
+
+
+<!-- Egov Modal include -->
+<c:import url="/EgovModal.do" charEncoding="utf-8">
+ <c:param name="scriptYn" value="Y" />
+ <c:param name="modalName" value="egovModal" />
+</c:import>
+
+
+<!-- Egov Modal include -->
+<c:import url="/EgovModal.do" charEncoding="utf-8">
+ <c:param name="scriptYn" value="N" />
+ <c:param name="modalName" value="egovModal2" />
+</c:import>
+
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/mdl/EgovModal.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonInquire.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonInquire.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonInquire.jsp (revision 7)
@@ -0,0 +1,77 @@
+<%
+ /**
+ * @Class Name : EgovUtlJsonInquire.jsp
+ * @Description : 요소기술 - 단건 AJAX JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2016.07.13 장동한 최초 생성
+ *
+ * @author 2016 표준프레임워크유지보수 장동한
+ * @since 2016.07.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>AJAX</title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+}
+
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_json_inquire(){
+
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/utl/jso/EgovUtlJsonInquire.do' />",
+ data:{
+ "param1":"param1",
+ "param2":"파라미터2"
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+
+ console.trace("상태값>"+status);
+ console.trace("결과값>"+returnData);
+ $.each(returnData, function(key, value) {
+ console.trace(key + ': ' + value);
+ });
+
+ if(status == "success") {
+ }else{ alert("ERROR!");return;}
+ }
+ });
+
+
+}
+</script>
+</head>
+<body onload="fn_egov_init()">
+
+<div class="board">
+<!-- Trigger/Open The Modal -->
+<button id="egovBtn" onclick="fn_egov_json_inquire()">단건 조회 AJAX</button>
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonInquire.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonMultiInquire.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonMultiInquire.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonMultiInquire.jsp (revision 7)
@@ -0,0 +1,88 @@
+<%
+ /**
+ * @Class Name : EgovUtlJsonInquire.jsp
+ * @Description : 요소기술 - 다건 AJAX JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2016.07.13 장동한 최초 생성
+ *
+ * @author 2016 표준프레임워크유지보수 장동한
+ * @since 2016.07.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>AJAX</title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javaScript" language="javascript">
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+}
+
+/*********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_json_inquire(){
+
+ var gListCurrent=1;
+ $.ajax({
+ type:"POST",
+ url:"<c:url value='/utl/jso/EgovUtlJsonMultiInquire.do' />",
+ data:{
+ "param1":"param1",
+ "param2":"파라미터2"
+ },
+ dataType:'json',
+ timeout:(1000*30),
+ success:function(returnData, status){
+
+ console.trace("상태값>"+status);
+ console.trace("결과값>"+returnData);
+ $.each(returnData, function(key, value) {
+ if(key == "list"){
+ $.each(value, function(key2, value2) {
+ console.trace("[list"+ gListCurrent++ +"]");
+ $.each(value2, function(key3, value3) {
+ console.trace(key3 + ': ' + value3);
+ });
+
+ });
+ }else{
+ console.trace(key + ': ' + value);
+ }
+ });
+
+ if(status == "success") {
+ }else{ alert("ERROR!");return;}
+ }
+ });
+
+
+}
+</script>
+</head>
+<body onload="fn_egov_init()">
+
+<div class="board">
+<!-- Trigger/Open The Modal -->
+<button id="egovBtn" onclick="fn_egov_json_inquire()">다건 조회 AJAX</button>
+
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/jso/EgovUtlJsonMultiInquire.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovInsertImage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovInsertImage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovInsertImage.jsp (revision 7)
@@ -0,0 +1,444 @@
+<%@ page language="java" contentType="text/html; charset=utf-8"
+ pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovInsertImage.jsp
+ * @Description : 웹에디터 이미지 upload 기능을 위한 팝업 화면 (기존 insert_image.html 대체)
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ----------- -------- ---------------------------
+ * @ 2009.08.26 한성곤 최초 생성
+ * @ 2012.12.18 이기하 image alt 생성기능 추가
+ *
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.26
+ * @version 1.0
+ * @see
+ */
+
+ //htmlArea v3.0 - Copyright (c) 2002, 2003 interactivetools.com, inc.
+ //This copyright notice MUST stay intact for use (see license.txt).
+ //
+ //Portions (c) dynarch.com, 2003
+ //
+ //A free WYSIWYG editor replacement for <textarea> fields.
+ //For full source code and docs, visit http://www.htmlarea.com/
+ //
+ //Version 3.0 developed by Mihai Bazon.
+ //http://dynarch.com/mishoo
+ //
+ //$Id: popup.js,v 1.12 2005/01/24 18:29:48 itools Exp $
+%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<title>이미지 추가</title>
+<script type="text/javascript">
+ function getAbsolutePos(el) {
+ var r = {
+ x : el.offsetLeft,
+ y : el.offsetTop
+ };
+ if (el.offsetParent) {
+ var tmp = getAbsolutePos(el.offsetParent);
+ r.x += tmp.x;
+ r.y += tmp.y;
+ }
+ return r;
+ };
+
+ function comboSelectValue(c, val) {
+ var ops = c.getElementsByTagName("option");
+ for ( var i = ops.length; --i >= 0;) {
+ var op = ops[i];
+ op.selected = (op.value == val);
+ }
+ c.value = val;
+ };
+
+ function __dlg_onclose() {
+ opener.Dialog._return(null);
+ };
+
+ function __dlg_init(bottom) {
+ var body = document.body;
+ var body_height = 0;
+ if (typeof bottom == "undefined") {
+ var div = document.createElement("div");
+ body.appendChild(div);
+ var pos = getAbsolutePos(div);
+ body_height = pos.y;
+ } else {
+ var pos = getAbsolutePos(bottom);
+ body_height = pos.y + bottom.offsetHeight;
+ }
+ window.dialogArguments = opener.Dialog._arguments;
+ if (!document.all) {
+ //window.sizeToContent();
+ //window.sizeToContent(); // for reasons beyond understanding,
+ // only if we call it twice we get the
+ // correct size.
+ window.addEventListener("unload", __dlg_onclose, true);
+ window.innerWidth = body.offsetWidth + 5;
+ window.innerHeight = body_height + 2;
+ // center on parent
+ var x = opener.screenX + (opener.outerWidth - window.outerWidth)
+ / 2;
+ var y = opener.screenY + (opener.outerHeight - window.outerHeight)
+ / 2;
+ window.moveTo(x, y);
+ if (navigator.userAgent.toLowerCase().indexOf("chrome") != -1) { // chrome 경우는 alert()을 추가해 주어야만 사이징이 됨... 허허
+ alert('삽입할 그림에 대한 정보를 설정해 주십시오.');
+ self.resizeTo(body.offsetWidth + 50, body_height + 90);
+ } else {
+ self.resizeTo(body.offsetWidth + 50, body_height + 90);
+ }
+ } else { // IE
+ // window.dialogHeight = body.offsetHeight + 50 + "px";
+ // window.dialogWidth = body.offsetWidth + "px";
+ window.resizeTo(body.offsetWidth + 30, body_height + 90);
+ var ch = body.clientHeight;
+ var cw = body.clientWidth;
+ window.resizeBy(body.offsetWidth - cw, body_height - ch);
+ var W = body.offsetWidth;
+ var H = 2 * body_height - ch;
+ var x = (screen.availWidth - W) / 2;
+ var y = (screen.availHeight - H) / 2;
+ window.moveTo(x, y);
+ }
+ document.body.onkeypress = __dlg_close_on_esc;
+ };
+
+ function __dlg_translate(i18n) {
+ var types = [ "input", "select", "legend", "span", "option", "td",
+ "button", "div" ];
+ for ( var type = 0; type < types.length; ++type) {
+ var spans = document.getElementsByTagName(types[type]);
+ for ( var i = spans.length; --i >= 0;) {
+ var span = spans[i];
+ if (span.firstChild && span.firstChild.data) {
+ var txt = i18n[span.firstChild.data];
+ if (txt)
+ span.firstChild.data = txt;
+ }
+ if (span.title) {
+ var txt = i18n[span.title];
+ if (txt)
+ span.title = txt;
+ }
+ }
+ }
+ var txt = i18n[document.title];
+ if (txt)
+ document.title = txt;
+ };
+
+ //closes the dialog and passes the return info upper.
+ function __dlg_close(val) {
+ opener.Dialog._return(val);
+ window.close();
+ };
+
+ function __dlg_close_on_esc(ev) {
+ ev || (ev = window.event);
+ if (ev.keyCode == 27) {
+ window.close();
+ return false;
+ }
+ return true;
+ };
+</script>
+<script type="text/javascript">
+ window.resizeTo(420, 120);
+ function Init() {
+ __dlg_init();
+
+ var param = window.dialogArguments;
+
+ if (param) {
+ document.getElementById("f_url").value = param["f_url"];
+ document.getElementById("f_alt").value = param["f_alt"];
+ document.getElementById("f_border").value = param["f_border"];
+ document.getElementById("f_align").value = param["f_align"];
+ document.getElementById("f_vert").value = param["f_vert"];
+ document.getElementById("f_horiz").value = param["f_horiz"];
+
+ window.ipreview.location.replace(param.f_url);
+ } else {
+ if (document.getElementById("f_url").value) {
+ window.ipreview.location.replace(document
+ .getElementById("f_url").value);
+ }
+ }
+
+ document.getElementById("f_url").focus();
+
+ var msg = "${msg}";
+ if ( msg!="" ) alert(msg);
+ };
+
+ function onOK() {
+
+ var required = {
+ "f_url" : "You must enter the URL"
+ };
+
+ for ( var i in required) {
+ var el = document.getElementById(i);
+
+ if (!el.value) {
+ alert(required[i]);
+ el.focus();
+
+ return false;
+ }
+ }
+
+ // pass data back to the calling window
+
+ var fields = [ "f_url", "f_alt", "f_align", "f_border", "f_horiz",
+ "f_vert" ];
+
+ var param = new Object();
+
+ for ( var i in fields) {
+ var id = fields[i];
+ var el = document.getElementById(id);
+
+ param[id] = el.value;
+ }
+
+ // alert(param["f_url"]);
+ // alert(param["f_alt"]);
+
+ __dlg_close(param);
+
+ return false;
+ };
+
+ function onCancel() {
+ __dlg_close(null);
+
+ return false;
+ };
+
+ function onPreview() {
+ var f_url = document.getElementById("f_url");
+ var url = f_url.value;
+
+ if (!url) {
+ alert("You have to enter an URL first");
+ f_url.focus();
+
+ return false;
+ }
+
+ window.ipreview.location.replace(url);
+
+ return false;
+ };
+
+ function onUpload() {
+ var f_upload = document.getElementById("f_upload");
+ var file = f_upload.value;
+
+ if (!file) {
+ alert("You have to select image file first");
+ f_upload.focus();
+
+ return false;
+ }
+
+ var frm = document.getElementsByTagName("form")[0];
+
+ frm.submit();
+
+ return false;
+ };
+</script>
+
+<style type="text/css">
+html,body {
+ background: ButtonFace;
+ color: ButtonText;
+ font: 11px Tahoma, Verdana, sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+body {
+ padding: 5px;
+}
+
+table {
+ font: 11px Tahoma, Verdana, sans-serif;
+}
+
+form p {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+
+.fl {
+ width: 9em;
+ float: left;
+ padding: 2px 5px;
+ text-align: right;
+}
+
+.fr {
+ width: 6em;
+ float: left;
+ padding: 2px 5px;
+ text-align: right;
+}
+
+fieldset {
+ padding: 0px 10px 5px 5px;
+}
+
+select,input,button {
+ font: 11px Tahoma, Verdana, sans-serif;
+}
+
+button {
+ width: 70px;
+}
+
+.space {
+ padding: 2px;
+}
+
+.title {
+ background: #ddf;
+ color: #000;
+ font-weight: bold;
+ font-size: 120%;
+ padding: 3px 10px;
+ margin-bottom: 10px;
+ border-bottom: 1px solid black;
+ letter-spacing: 2px;
+}
+
+form {
+ padding: 0px;
+ margin: 0px;
+}
+</style>
+</head>
+<body onload="Init()">
+ <div class="title">이미지 추가</div>
+ <form action="" method="post" enctype="multipart/form-data">
+ <table border="0" width="100%" style="padding: 0px; margin: 0px">
+ <tbody>
+ <tr>
+ <td style="width: 7em; text-align: right"><label
+ for="f_upload">Image Upload:</label></td>
+ <td><input type="file" name="file" id="f_upload"
+ style="width: 100%" title="Select upload image here" />
+ <button name="upload" onclick="return onUpload();"
+ title="Upload image file">Upload</button></td>
+ </tr>
+ <tr>
+ <td style="width: 7em; text-align: right"><label
+ for="f_url">Image URL:</label></td>
+ <td><input type="text" name="url" id="f_url"
+ style="width: 75%" title="Enter the image URL here" value="${url}" />
+ <button name="preview" onclick="return onPreview();"
+ title="Preview the image in a new window">Preview</button></td>
+ </tr>
+ <tr>
+ <td style="width: 7em; text-align: right"><label
+ for="f_alt">Alternate text:</label></td>
+ <td><input type="text" name="alt" id="f_alt" value="${alt}"
+ style="width: 100%" title="For browsers that don't support images" /></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p />
+
+ <fieldset style="float: left; margin-left: 5px;">
+
+ <legend>Layout</legend>
+
+ <div class="space"></div>
+
+ <div class="fl">
+ <label for="f_align">Alignment:</label>
+ </div>
+
+ <select size="1" name="align" id="f_align"
+ title="Positioning of this image">
+ <option value="">Not set</option>
+ <option value="left">Left</option>
+ <option value="right">Right</option>
+ <option value="texttop">Texttop</option>
+ <option value="absmiddle">Absmiddle</option>
+ <option value="baseline" selected="selected">Baseline</option>
+ <option value="absbottom">Absbottom</option>
+ <option value="bottom">Bottom</option>
+ <option value="middle">Middle</option>
+ <option value="top">Top</option>
+ </select>
+
+ <p />
+
+ <div class="fl">
+ <label for="f_border">Border thickness:</label>
+ </div>
+
+ <input type="text" name="border" id="f_border" size="5"
+ title="Leave empty for no border" />
+
+ <div class="space"></div>
+
+ </fieldset>
+
+ <fieldset style="float: right; margin-right: 5px;">
+
+ <legend>Spacing</legend>
+
+ <div class="space"></div>
+
+ <div class="fr"><label for="f_horiz">Horizontal:</label></div>
+
+ <input type="text" name="horiz" id="f_horiz" size="5"
+ title="Horizontal padding" />
+ <p />
+
+ <div class="fr"><label for="f_vert">Vertical:</label></div>
+
+ <input type="text" name="vert" id="f_vert" size="5"
+ title="Vertical padding" />
+
+ <div class="space"></div>
+
+ </fieldset>
+
+ <br clear="all" />
+
+ <table width="100%" style="margin-bottom: 0.2em">
+ <tr>
+ <td valign="bottom"><label for="ipreview">Image Preview:</label><br /> <iframe
+ name="ipreview" id="ipreview" frameborder="0"
+ style="border: 1px solid gray;" height="200" width="300" src=""
+ title="이미지 미리보기"></iframe>
+ </td>
+ <td valign="bottom" style="text-align: right">
+ <button type="button" name="ok" onclick="return onOK();">OK</button>
+ <br />
+ <button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
+ </td>
+ </tr>
+ </table>
+ </form>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovInsertImage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovUploadImageComplete.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovUploadImageComplete.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovUploadImageComplete.jsp (revision 7)
@@ -0,0 +1,24 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%
+ /**
+ * @Class Name : EgovUploadImageComplte.jsp
+ * @Description : 웹에디터 이미지 upload 기능을 위한 팝업 화면 (기존 insert_image.html 대체)
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ----------- -------- ---------------------------
+ * @ 2018.05.31 신용호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 한성곤
+ * @since 2009.08.26
+ * @version 1.0
+ * @see
+ */
+%>
+<script type='text/javascript'>
+window.parent.CKEDITOR.tools.callFunction('${ckEditorFuncNum}', '${url}', '${msg}');
+</script>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/wed/EgovUploadImageComplete.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngUpdt.jsp (revision 7)
@@ -0,0 +1,154 @@
+<%
+/**
+ * @Class Name : EgovFileSysMntrngUpdt.jsp
+ * @Description : 파일시스템모니터대상 수정
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.18 장철호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.18
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysFsm.fileSysMntrng.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="fileSysMntrngVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_FileSysMntrng(){
+
+ }
+
+ function fn_egov_update_filesysmntrng() {
+ if (!validateFileSysMntrngVO(document.fileSysMntrngVO)){
+ return;
+ }
+
+ if(eval(document.fileSysMntrngVO.fileSysMg.value) < 1){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngUpdt.fileSysMg"/>");/* 파일시스템 크기를 1G 이상 입력하여야 합니다. */
+ return;
+ }
+
+ if(eval(document.fileSysMntrngVO.fileSysThrhld.value) < 1){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngUpdt.fileSysThrhldG"/>");/* 파일시스템 임계치를 1G 이상 입력하여야 합니다. */
+ return;
+ }
+
+ if(eval(document.fileSysMntrngVO.fileSysThrhld.value) > eval(document.fileSysMntrngVO.fileSysMg.value)){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngUpdt.fileSysThrhldLimit"/>");/* 파일시스템 임계치는 파일시스템 크기보다 클 수 없습니다. */
+ return;
+ }
+
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/updateFileSysMntrng.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_filesysmntrng(){
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+
+</script>
+<title>${pageTitle} <spring:message code="title.update" /></title>
+</head>
+<body onLoad="fn_egov_init_FileSysMntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <form:form commandName="fileSysMntrngVO" name="fileSysMntrngVO" method="post" action="${pageContext.request.contextPath}/utl/sys/fsm/updateFileSysMntrng.do">
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="fileSysNm" size="50" maxlength="60" title="<spring:message code='comUtlSysFsm.fileSysMntrng.fileSysNm.label' />"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysManageNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="fileSysManageNm" size="65" maxlength="255" title="<spring:message code='comUtlSysFsm.fileSysMntrng.fileSysManageNm.label' />"/>
+ <div><form:errors path="fileSysManageNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysMg.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.fileSysMg}'/>G
+ <input type="hidden" name="fileSysMg" id="fileSysMg" value="<c:out value='${fileSysMntrngVO.fileSysMg}'/>"/>
+ <div><form:errors path="fileSysMg" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysThrhld.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="fileSysThrhld" maxlength="8" title="<spring:message code='comUtlSysFsm.fileSysMntrng.fileSysThrhld.label' />" cssStyle="width:50px"/>G
+ <div><form:errors path="fileSysThrhld" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.mngrNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mngrNm" maxlength="60" title="<spring:message code='comUtlSysFsm.fileSysMntrng.mngrNm.label' />" cssStyle="width:150px"/>
+ <div><form:errors path="mngrNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="25" maxlength="50" title="<spring:message code='comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label' />"/>
+ <div><form:errors path="mngrEmailAddr" cssClass="error"/></div>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fn_egov_update_filesysmntrng()" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>?searchWrd=<c:out value='${fileSysMntrngVO.searchWrd}'/>&searchCnd=<c:out value='${fileSysMntrngVO.searchCnd}'/>&pageIndex=<c:out value='${fileSysMntrngVO.pageIndex}'/>" onclick="fn_egov_list_filesysmntrng(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+
+ <input type="hidden" name="fileSysId" value="<c:out value='${fileSysMntrngVO.fileSysId}'/>" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchWrd" value="<c:out value='${fileSysMntrngVO.searchWrd}'/>" />
+ <input type="hidden" name="searchCnd" value="<c:out value='${fileSysMntrngVO.searchCnd}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${fileSysMntrngVO.pageIndex}'/>" />
+ <!-- 검색조건 유지 -->
+ </form:form>
+
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngList.jsp (revision 7)
@@ -0,0 +1,162 @@
+<%
+/**
+ * @Class Name : EgovFileSysMntrngList.jsp
+ * @Description : 파일시스템모니터링 대상 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.18 장철호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.18
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysFsm.fileSysMntrng.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<script type="text/javascript">
+
+ function fn_egov_init_filesysmntrng(){
+
+ }
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_filesysmntrng('1');
+ }
+ }
+
+ function fn_egov_select_filesysmntrng(pageNo) {
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_inqire_filesysmntrng(fileSysId) {
+ document.frm.fileSysId.value = fileSysId;
+ document.frm.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrng.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_insert_filesysmntrng(){
+ document.frm.action = "<c:url value='/utl/sys/fsm/addFileSysMntrng.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_log_filesysmntrng(){
+ document.frm.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngLogList.do'/>";
+ document.frm.submit();
+ }
+</script>
+</head>
+<body onLoad="fn_egov_init_filesysmntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <span>※ 1. <spring:message code="comUtlSysFsm.fileSysMntrngList.guideOne" /></span><br>
+ <span>※ 2. <spring:message code="comUtlSysFsm.fileSysMntrngList.guideTwo" /></span>
+
+ <form name="frm" method="post" action="<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>">
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="fileSysId">
+
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <select name="searchCnd" class="select" title="<spring:message code='select.searchCondition' />">
+ <option value="" <c:if test="${searchVO.searchCnd == ''}">selected="selected"</c:if>>--<spring:message code="input.select" />--</option><!-- 선택하세요 -->
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngList.fileSysNm.label" /></option>
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngList.fileSysManageNm.label" /></option>
+ <option value="2" <c:if test="${searchVO.searchCnd == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngList.mngrNm.label" /></option>
+ <option value="3" <c:if test="${searchVO.searchCnd == '3'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngList.mntrngSttus.label" /></option>
+ </select>
+ <input class="s_input2 vat" name="searchWrd" type="text" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="35" size="27" onkeypress="press(event);" title="<spring:message code='title.search' /> <spring:message code='input.input' />" />
+
+ <input class="s_btn" type="submit" value="<spring:message code='title.inquire' />" title="<spring:message code='title.inquire' />" onclick="fn_egov_select_filesysmntrng('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/fsm/addFileSysMntrng.do'/>" onclick="fn_egov_insert_filesysmntrng('1'); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span>
+ <span class="btn_b"><a href="<c:url value='/utl/sys/fsm/selectFileSysMntrngLogList.do'/>" onclick="fn_egov_log_filesysmntrng(); return false;" title='<spring:message code="button.log" />'><spring:message code="button.log" /></a></span>
+ </li>
+ </ul>
+ </div>
+ </form>
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:20%" />
+ <col style="width:20%" />
+ <col style="width:8%" />
+ <col style="width:11%" />
+ <col style="width:11%" />
+ <col style="width:10%" />
+ <col style="width:10%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.seq.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.fileSysNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.fileSysManageNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.fileSysMg.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.fileSysThrhld.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.fileSysUsgQty.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.mntrngSttus.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngList.mngrNm.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.fileSysNm}"/></td>
+ <td>
+ <form name="fileSysMntrngVO" method="post" action="<c:url value='/utl/sys/fsm/selectFileSysMntrng.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>">
+ <input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>">
+ <input type="hidden" name="fileSysId" value="<c:out value="${result.fileSysId}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${result.fileSysManageNm}"/>" onclick="javascript:fn_egov_inqire_filesysmntrng('<c:out value="${result.fileSysId}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td><c:out value="${result.fileSysMg}"/>G</td>
+ <td><c:out value="${result.fileSysThrhldRt}"/>%(<c:out value="${result.fileSysThrhld}"/>G)</td>
+ <td><c:out value="${result.fileSysUsgRt}"/>%(<c:out value="${result.fileSysUsgQty}"/>G)</td>
+ <td><c:out value="${result.mntrngSttus}"/></td>
+ <td><c:out value="${result.mngrNm}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_filesysmntrng"/>
+ </ul>
+ </div>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngDetail.jsp (revision 7)
@@ -0,0 +1,154 @@
+<%
+/**
+ * @Class Name : EgovFileSysMntrngDetail.jsp
+ * @Description : 파일시스템모니터링 상세조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.18 장철호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.18
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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="ImgUrl" value="/images/egovframework/com/cmm/"/>
+<c:set var="pageTitle"><spring:message code="comUtlSysFsm.fileSysMntrng.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="fileSysMntrngVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_FileSysMntrng(){
+
+ }
+
+ function fn_egov_update_filesysmntrng() {
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/modifyFileSysMntrng.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+
+ function fn_egov_delete_filesysmntrng(){
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/deleteFileSysMntrng.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_filesysmntrng(){
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+
+</script>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+</head>
+<body onLoad="fn_egov_init_FileSysMntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="fileSysMntrngVO" name="fileSysMntrngVO" method="post" action="${pageContext.request.contextPath}/utl/sys/fsm/modifyFileSysMntrng.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.fileSysNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysManageNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.fileSysManageNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysMg.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.fileSysMg}'/>G
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysThrhld.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.fileSysThrhldRt}'/>% (<c:out value='${fileSysMntrngVO.fileSysThrhld}'/>G)
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysUsgQty.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.fileSysUsgRt}'/>% (<c:out value='${fileSysMntrngVO.fileSysUsgQty}'/>G)
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.mngrNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.mngrNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngVO.mngrEmailAddr}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.mntrngSttus.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${fileSysMntrngVO.mntrngSttus}" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.creatDt.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${fileSysMntrngVO.creatDt}" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.update" />' onclick="fn_egov_update_filesysmntrng()" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/fsm/deleteFileSysMntrng.do'/>?fileSysId=<c:out value='${fileSysMntrngVO.fileSysId}'/>" onclick="fn_egov_delete_filesysmntrng(); return false;"><spring:message code="button.delete" /></a></span>
+ <span class="btn_s"><a href="<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>?searchWrd=<c:out value='${fileSysMntrngVO.searchWrd}'/>&searchCnd=<c:out value='${fileSysMntrngVO.searchCnd}'/>&pageIndex=<c:out value='${fileSysMntrngVO.pageIndex}'/>" onclick="fn_egov_list_filesysmntrng(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+
+</div>
+
+ <input type="hidden" name="fileSysId" value="<c:out value='${fileSysMntrngVO.fileSysId}'/>" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchWrd" value="<c:out value='${fileSysMntrngVO.searchWrd}'/>" />
+ <input type="hidden" name="searchCnd" value="<c:out value='${fileSysMntrngVO.searchCnd}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${fileSysMntrngVO.pageIndex}'/>" />
+ <!-- 검색조건 유지 -->
+</form:form>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogList.jsp (revision 7)
@@ -0,0 +1,258 @@
+<%
+/**
+ * @Class Name : EgovFileSysMntrngLogList.jsp
+ * @Description : 파일시스템모니터링 로그 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.18 장철호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.18
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysFsm.fileSysMntrngLog.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js' />"></script>
+<script type="text/javascript">
+
+ function fn_egov_init_filesysmntrng(){
+ document.frm.searchBgnHour.value = '<c:out value="${searchVO.searchBgnHour}"/>';
+ document.frm.searchEndHour.value = '<c:out value="${searchVO.searchEndHour}"/>';
+
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+ }
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_filesysmntrnglog('1');
+ }
+ }
+
+ function fn_egov_select_filesysmntrnglog(pageNo) {
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngLogList.do'/>";
+
+ var bgnDe = document.frm.searchBgnDe.value;
+ var endDe = document.frm.searchEndDe.value;
+
+ if(bgnDe != ""){
+ if(isDate(bgnDe, "<spring:message code="comUtlSysFsm.fileSysMntrngLogList.validate.bgnDe"/>") == false) { /* 검색시작일자 */
+ return;
+ }
+ }
+
+ if(endDe != ""){
+ if(isDate(endDe, "<spring:message code="comUtlSysFsm.fileSysMntrngLogList.validate.endDe"/>") == false) { /* 검색종료일자 */
+ return;
+ }
+ }
+
+ if(bgnDe.length == 8){
+ bgnDe = bgnDe.substring(0,4) + "-" + bgnDe.substring(4,6) + "-" + bgnDe.substring(6,8);
+ document.frm.searchBgnDe.value = bgnDe;
+ }
+
+ if(endDe.length == 8){
+ endDe = endDe.substring(0,4) + "-" + endDe.substring(4,6) + "-" + endDe.substring(6,8);
+ document.frm.searchEndDe.value = endDe;
+ }
+
+ var bgnHour = document.frm.searchBgnHour.value;
+ var endHour = document.frm.searchEndHour.value;
+
+ var bgnDeHour = "";
+ var endDeHour = "";
+ if(bgnDe != "" && endDe != ""){
+ if(bgnHour == ""){
+ document.frm.searchBgnHour.value = "00";
+ bgnHour = "00";
+ }
+ if(endHour == ""){
+ document.frm.searchEndHour.value = "00";
+ endHour = "00";
+ }
+ bgnDeHour = bgnDe + bgnHour;
+ endDeHour = endDe + endHour;
+
+ if(bgnDeHour > endDeHour){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngLogList.validate.bgnDeHourendDeHour"/>");/* 검색종료일시가 검색시작일시보다 빠를수 없습니다. */
+ return;
+ }
+ }
+ document.frm.submit();
+ }
+
+ function fn_egov_inqire_filesysmntrnglog(fileSysId, logId) {
+ document.frm.fileSysId.value = fileSysId;
+ document.frm.logId.value = logId;
+ document.frm.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngLog.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_select_filesysmntrng(){
+ document.frm.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>";
+ document.frm.submit();
+ }
+
+
+</script>
+</head>
+<body onLoad="fn_egov_init_filesysmntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <form name="frm" method="post" action="<c:url value='/utl/sys/fsm/selectFileSysMntrngLogList.do'/>">
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="fileSysId">
+ <input type="hidden" name="logId">
+
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <input name="searchBgnDe" id="searchBgnDe" type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchBgnDe}"/>" title="조회시작일자 입력">
+ <select name="searchBgnHour" class="select" title="조회시작 시 선택">
+ <c:forEach var="bgnHour" items="${searchBgnHour}" varStatus="status">
+ <option value="<c:out value="${bgnHour.code}"/>"><c:out value="${bgnHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+ ~
+ <input name="searchEndDe" id="searchEndDe" type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchEndDe}"/>" title="조회종료일자 입력">
+ <select name="searchEndHour" class="select" title="조회종료 시 선택">
+ <c:forEach var="endHour" items="${searchEndHour}" varStatus="status">
+ <option value="<c:out value="${endHour.code}"/>"><c:out value="${endHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+
+ <select name="searchCnd" class="select" title="조회조건 선택">
+ <option value=''>--<spring:message code="comUtlSysFsm.fileSysMntrngLogList.select"/>--</option><!-- 선택하세요 -->
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngLogList.fileSysNm.label" /></option>
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngLogList.fileSysManageNm.label" /></option>
+ <option value="2" <c:if test="${searchVO.searchCnd == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngLogList.mngrNm.label" /></option>
+ <option value="3" <c:if test="${searchVO.searchCnd == '3'}">selected="selected"</c:if> ><spring:message code="comUtlSysFsm.fileSysMntrngLogList.mntrngSttus.label" /></option>
+ </select>
+ <input class="s_input2 vat" name="searchWrd" type="text" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="35" size="27" onkeypress="press(event);" title="검색어 입력" />
+ <input class="s_btn" type="submit" value="<spring:message code="title.inquire"/>" title="<spring:message code="title.inquire"/>" onclick="fn_egov_select_filesysmntrnglog('1'); return false;" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>" onclick="fn_egov_select_filesysmntrng(); return false;" title="<spring:message code="comUtlSysFsm.fileSysMntrngLogList.list"/>"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.list"/></a></span><!-- 목록 -->
+ </li>
+ </ul>
+ </div>
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:17%" />
+ <col style="width:17%" />
+ <col style="width:8%" />
+ <col style="width:11%" />
+ <col style="width:11%" />
+ <col style="width:10%" />
+ <col style="width:16%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.seq.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.fileSysNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.fileSysManageNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.fileSysMg.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.fileSysThrhld.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.fileSysUsgQty.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.mntrngSttus.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysFsm.fileSysMntrngLogList.creatDt.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.fileSysNm}"/></td>
+ <td>
+ <form name="fileSysMntrngLogVO" method="post" action="<c:url value='/utl/sys/fsm/selectFileSysMntrngLog.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>">
+ <input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>">
+ <input name="searchBgnDe" type="hidden" value="<c:out value='${searchVO.searchBgnDe}'/>">
+ <input name="searchEndDe" type="hidden" value="<c:out value='${searchVO.searchEndDe}'/>">
+ <input name="searchBgnHour" type="hidden" value="<c:out value='${searchVO.searchBgnHour}'/>">
+ <input name="searchEndHour" type="hidden" value="<c:out value='${searchVO.searchEndHour}'/>">
+ <input type="hidden" name="fileSysId" value="<c:out value="${result.fileSysId}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${result.fileSysManageNm}"/>" onclick="javascript:fn_egov_inqire_filesysmntrnglog('<c:out value="${result.fileSysId}"/>', '<c:out value="${result.logId}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td><c:out value="${result.fileSysMg}"/>G</td>
+ <td><c:out value="${result.fileSysThrhldRt}"/>%(<c:out value="${result.fileSysThrhld}"/>G)</td>
+ <td><c:out value="${result.fileSysUsgRt}"/>%(<c:out value="${result.fileSysUsgQty}"/>G)</td>
+ <td><c:out value="${result.mntrngSttus}"/></td>
+ <td><c:out value="${result.creatDt}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="8"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_filesysmntrnglog"/>
+ </ul>
+ </div>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogDetail.jsp (revision 7)
@@ -0,0 +1,145 @@
+<%
+/**
+ * @Class Name : EgovFileSysMntrngLogDetail.jsp
+ * @Description : 파일시스템모니터링로그 상세조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.18 장철호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.18
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysFsm.fileSysMntrngLog.title"/></c:set>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="fileSysMntrngLogVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_FileSysMntrng(){
+
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_filesysmntrnglog(){
+ document.fileSysMntrngLogVO.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngLogList.do'/>";
+ document.fileSysMntrngLogVO.submit();
+ }
+
+</script>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+</head>
+<body onLoad="fn_egov_init_FileSysMntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2>
+
+ <form:form commandName="fileSysMntrngLogVO" name="fileSysMntrngLogVO" method="post" action="${pageContext.request.contextPath}/utl/sys/fsm/selectFileSysMntrngLogList.do">
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.logId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${fileSysMntrngLog.logId}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.fileSysNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngLog.fileSysNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.fileSysManageNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngLog.fileSysManageNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.fileSysMg.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngLog.fileSysMg}'/>G
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.fileSysThrhld.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngLog.fileSysThrhldRt}'/>% (<c:out value='${fileSysMntrngLog.fileSysThrhld}'/>G)
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.fileSysUsgQty.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${fileSysMntrngLog.fileSysUsgRt}'/>% (<c:out value='${fileSysMntrngLog.fileSysUsgQty}'/>G)
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.mntrngSttus.label" /></th>
+ <td class="left">
+ <c:out value="${fileSysMntrngLog.mntrngSttus}" escapeXml="false" />
+ </td>
+ </tr>
+ <c:if test="${fileSysMntrngLog.mntrngSttus} ne '정상'">
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.logInfo.label" /></th>
+ <td class="left">
+ <textarea id="logInfo" name="logInfo" rows="10" cols="75" title="<spring:message code='comUtlSysFsm.fileSysMntrngLog.logInfo.label' />" readonly><c:out value="${fileSysMntrngLog.logInfo}" escapeXml="false" /></textarea>
+ </td>
+ </tr>
+ </c:if>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrngLog.creatDt.label" /></th>
+ <td class="left">
+ <c:out value="${fileSysMntrngLog.creatDt}" escapeXml="false" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.list" />' onclick="fn_egov_list_filesysmntrnglog()" />
+ </div>
+ <div style="clear:both;"></div>
+
+ <input type="hidden" name="fileSysId" value="<c:out value='${fileSysMntrngLog.fileSysId}'/>" />
+ <input type="hidden" name="logId" value="<c:out value='${fileSysMntrngLog.logId}'/>" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchWrd" value="<c:out value='${fileSysMntrngLogVO.searchWrd}'/>" />
+ <input type="hidden" name="searchCnd" value="<c:out value='${fileSysMntrngLogVO.searchCnd}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${fileSysMntrngLogVO.pageIndex}'/>" />
+ <input name="searchBgnDe" type="hidden" value="<c:out value='${fileSysMntrngLogVO.searchBgnDe}'/>">
+ <input name="searchEndDe" type="hidden" value="<c:out value='${fileSysMntrngLogVO.searchEndDe}'/>">
+ <input name="searchBgnHour" type="hidden" value="<c:out value='${fileSysMntrngLogVO.searchBgnHour}'/>">
+ <input name="searchEndHour" type="hidden" value="<c:out value='${fileSysMntrngLogVO.searchEndHour}'/>">
+ <!-- 검색조건 유지 -->
+</form:form>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngRegist.jsp (revision 7)
@@ -0,0 +1,162 @@
+<%
+/**
+ * @Class Name : EgovFileSysMntrngRegist.jsp
+ * @Description : 파일시스템모니터대상 등록
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.18 장철호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.18
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysFsm.fileSysMntrng.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="fileSysMntrngVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_FileSysMntrng(){
+ document.fileSysMntrngVO.fileSysMg.value = "<c:out value='${fileSysMgValue}'/>";
+ if(document.fileSysMntrngVO.fileSysMg.value == ""){
+ document.fileSysMntrngVO.fileSysMg.value = 0;
+ }
+
+ if("${notApplicableFileSys}" == "true"){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngRegist.notApplicableFileSysTrue"/>");/* 파일시스템명이 올바르지 않습니다. */
+ }
+ }
+
+ function fn_egov_insert_filesysmntrng() {
+ if (!validateFileSysMntrngVO(document.fileSysMntrngVO)){
+ return;
+ }
+
+ if(eval(document.fileSysMntrngVO.fileSysMg.value) < 1){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngRegist.fileSysMg"/>");/* 파일시스템확인 버튼을 클릭하여, 파일시스템의 크기를 확인해야 합니다. */
+ return;
+ }
+
+ if(eval(document.fileSysMntrngVO.fileSysThrhld.value) < 1){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngRegist.fileSysThrhldG"/>");/* 파일시스템 임계치를 1G 이상 입력하여야 합니다. */
+ return;
+ }
+
+ if(eval(document.fileSysMntrngVO.fileSysThrhld.value) > eval(document.fileSysMntrngVO.fileSysMg.value)){
+ alert("<spring:message code="comUtlSysFsm.fileSysMntrngRegist.fileSysThrhldLimit"/>");/* 파일시스템 임계치는 파일시스템 크기보다 클 수 없습니다. */
+ return;
+ }
+
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/insertFileSysMntrng.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+ }
+
+ function fn_egov_select_filesysmg() {
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/selectFileSysMg.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_filesysmntrng(){
+ document.fileSysMntrngVO.action = "<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>";
+ document.fileSysMntrngVO.submit();
+ }
+
+</script>
+</head>
+<body onLoad="fn_egov_init_FileSysMntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="fileSysMntrngVO" name="fileSysMntrngVO" method="post" action="${pageContext.request.contextPath}/utl/sys/fsm/insertFileSysMntrng.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="fileSysNm" maxlength="60" title="<spring:message code='comUtlSysFsm.fileSysMntrng.fileSysNm.label' />" cssStyle="width:250px"/>
+ <a class="btn02" href="<c:url value='/utl/sys/fsm/selectFileSysMg.do'/>?searchWrd=<c:out value='${fileSysMntrngVO.searchWrd}'/>&searchCnd=<c:out value='${fileSysMntrngVO.searchCnd}'/>&pageIndex=<c:out value='${fileSysMntrngVO.pageIndex}'/>" onclick="fn_egov_select_filesysmg(); return false;"><spring:message code="comUtlSysFsm.fileSysMntrngRegist.selectFileSysMg"/></a><!-- 파일시스템확인 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysManageNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="fileSysManageNm" size="65" maxlength="255" title="<spring:message code='comUtlSysFsm.fileSysMntrng.fileSysManageNm.label' />"/>
+ <div><form:errors path="fileSysManageNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysMg.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="fileSysMg" maxlength="8" title="<spring:message code='comUtlSysFsm.fileSysMntrng.fileSysMg.label' />" readonly="true" cssStyle="width:50px"/>G
+ <div><form:errors path="fileSysMg" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.fileSysThrhld.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="fileSysThrhld" maxlength="8" title="<spring:message code='comUtlSysFsm.fileSysMntrng.fileSysThrhld.label' />" cssStyle="width:50px"/>G
+ <div><form:errors path="fileSysThrhld" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.mngrNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mngrNm" size="5" maxlength="60" title="<spring:message code='comUtlSysFsm.fileSysMntrng.mngrNm.label' />" cssStyle="width:100px"/>
+ <div><form:errors path="mngrNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="25" maxlength="50" title="<spring:message code='comUtlSysFsm.fileSysMntrng.mngrEmailAddr.label' />"/>
+ <div><form:errors path="mngrEmailAddr" cssClass="error"/></div>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fn_egov_insert_filesysmntrng(); return false;" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/fsm/selectFileSysMntrngList.do'/>?searchWrd=<c:out value='${fileSysMntrngVO.searchWrd}'/>&searchCnd=<c:out value='${fileSysMntrngVO.searchCnd}'/>&pageIndex=<c:out value='${fileSysMntrngVO.pageIndex}'/>" onclick="fn_egov_list_filesysmntrng(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+ <input type="hidden" name="searchWrd" value="<c:out value='${fileSysMntrngVO.searchWrd}'/>" />
+ <input type="hidden" name="searchCnd" value="<c:out value='${fileSysMntrngVO.searchCnd}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${fileSysMntrngVO.pageIndex}'/>" />
+</form:form>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/fsm/EgovFileSysMntrngRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonModify.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonModify.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonModify.jsp (revision 7)
@@ -0,0 +1,116 @@
+<%
+ /**
+ * @Class Name : EgovComUtlHttpMonModify.jsp
+ * @Description : EgovComUtlHttpMonModify 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysHtm.comUtlHttpMonModify.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>${pageTitle}</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+ <script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+ <validator:javascript formName="httpMon" staticJavascript="false" xhtml="true" cdata="false"/>
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_HttpMon(){
+ location.href = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonList.do'/>";
+ }
+ /* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+ function fn_egov_modify_HttpMon(form){
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(!validateHttpMon(form)){
+ return;
+ }else{
+ form.submit();
+ }
+ }
+ }
+ -->
+ </script>
+ </head>
+
+ <body>
+ <DIV class="wTableFrm">
+ <form:form commandName="httpMon" name="httpMon" method="post">
+ <input name="cmd" type="hidden" value="Modify">
+ <form:hidden path="sysId"/>
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <table width="700" border="0" cellpadding="0" cellspacing="1" class="wTable"
+ summary="<spring:message code="comUtlSysHtm.comUtlHttpMonModify.summary" />">
+ <caption>${pageTitle}</caption>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text" nowrap><spring:message code="comUtlSysHtm.comUtlHttpMon.webService" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 웹서비스종류 -->
+ <td class="left">
+ <select name="webKind" title="웹서비스종류 선택">
+ <option value="TOMCAT" <c:if test="${httpMon.webKind == 'TOMCAT'}">selected</c:if> >TOMCAT</option>
+ <option value="WEBLOGIC" <c:if test="${httpMon.webKind == 'WEBLOGIC'}">selected</c:if> >WEBLOGIC</option>
+ <option value="JEUS" <c:if test="${httpMon.webKind == 'JEUS'}">selected</c:if> >JEUS</option>
+ <option value="JBOSS" <c:if test="${httpMon.webKind == 'JBOSS'}">selected</c:if> >JBOSS</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text" nowrap><spring:message code="comUtlSysHtm.comUtlHttpMon.systemURL" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 시스템URL -->
+ <td width="80%" class="left">
+ <form:input path="siteUrl" size="60" maxlength="100"/>
+ <form:errors path="siteUrl"/>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text" nowrap><spring:message code="comUtlSysHtm.comUtlHttpMon.managerName" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자명 -->
+ <td width="80%" class="left">
+ <form:input path="mngrNm" size="60" maxlength="60"/>
+ <form:errors path="mngrNm"/>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text" nowrap><spring:message code="comUtlSysHtm.comUtlHttpMon.managerEmail" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자이메일 -->
+ <td width="80%" class="left">
+ <form:input path="mngrEmailAddr" size="60" maxlength="60"/>
+ <form:errors path="mngrEmailAddr"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.save" />" onclick="fn_egov_modify_HttpMon(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_list_HttpMon(); return false;" />
+ </div>
+ </form:form>
+ </DIV>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonModify.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonList.jsp (revision 7)
@@ -0,0 +1,156 @@
+<%
+ /**
+ * @Class Name : EgovComUtlHttpMonList.jsp
+ * @Description : EgovComUtlHttpMonList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ page import="java.util.*" %>
+<%@ page import="java.io.*" %>
+<c:set var="pageTitle"><spring:message code="comUtlSysHtm.comUtlHttpMonList.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>${pageTitle}</title>
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+
+ <script type="text/javascript" src="/js/egovframework/com/cmm/utl/EgovCmmUtl.js"></script>
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 초기화
+ ******************************************************** */
+ function fn_egov_initl_HttpMon(){
+ // 첫 입력란에 포커스..
+ var form = document.listForm;
+ form.searchCondition.focus();
+ }
+ /* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+ function linkPage(pageNo){
+ var form = document.listForm;
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonList.do'/>";
+ form.submit();
+ }
+ /* ********************************************************
+ * 조회 처리
+ ******************************************************** */
+ function fnSearch(){
+ var form = document.listForm;
+ form.pageIndex.value = 1;
+ form.submit();
+ }
+ /* ********************************************************
+ * 로그조회 함수
+ ******************************************************** */
+ function fnSearchLog(){
+ location.href = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonLogList.do'/>";
+ }
+ -->
+ </script>
+ </head>
+
+ <body onLoad="fn_egov_initl_HttpMon();">
+
+ <!-- 자바스크립트 경고 태그 -->
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <div class="board">
+ <h1>${pageTitle}</h1>
+
+ <form name="listForm" action="<c:url value='/utl/sys/htm/EgovComUtlHttpMonList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" class="select" title="조회조건 선택">
+ <option value=''>--<spring:message code="input.select" />--</option>
+ <option value='1' <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>><spring:message code="comUtlSysHtm.comUtlHttpMon.managerName" /></option><!-- 관리자명 -->
+ <option value='2' <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if>><spring:message code="comUtlSysHtm.comUtlHttpMon.status" /></option><!-- 상태 -->
+ </select>
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='${searchVO.searchKeyword}' maxlength="35" size="35" onkeypress="press();" title="검색어 입력" />
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fnSearch(); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/htm/EgovComUtlHttpMonRegist.do'/>" onclick="" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span>
+ <input class="s_btn" type="submit" value="<spring:message code="button.log" />" title="<spring:message code="button.log" />" onclick="fnSearchLog(); return false;" />
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:15%" />
+ <col style="width:20%" />
+ <col style="width:15%" />
+ <col style="width:20%" />
+ <col style="width:25%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.seq" /></th><!-- 순번 -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.webService" /></th><!-- 웹서비스종류 -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.systemURL" /></th><!-- 시스템URL -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.status" /></th><!-- 상태 -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.managerName" /></th><!-- 관리자명 -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.createdDateTime" /></th><!-- 생성일시 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex - 1) * searchVO.pageSize + status.count}"/></td>
+ <td>${resultInfo.webKind}</td>
+ <td>
+ <a href="<c:url value='/utl/sys/htm/EgovComUtlHttpMonDetail.do'/>?pageIndex=${searchVO.pageIndex}&sysId=${resultInfo.sysId}"><c:out value="${resultInfo.siteUrl}"/></a>
+ </td>
+ <td>${resultInfo.httpSttusCd}</td>
+ <td>${resultInfo.mngrNm}</td>
+ <td>${resultInfo.creatDt}</td>
+ </tr>
+ </c:forEach>
+
+ <!-- 데이터가 없을때 화면에 메세지를 출력해준다 -->
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="6">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+
+ </form>
+ </div>
+
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetail.jsp (revision 7)
@@ -0,0 +1,115 @@
+<%
+ /**
+ * @Class Name : EgovComUtlHttpMonDetail.jsp
+ * @Description : EgovComUtlHttpMonDetail 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysHtm.comUtlHttpMonDetail.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>${pageTitle}</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fnList(){
+ location.href = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonList.do'/>";
+ }
+ /* ********************************************************
+ * 수정화면으로 바로가기
+ ******************************************************** */
+ function fnModify(){
+ var varForm = document.all["Form"];
+ varForm.action = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonModify.do'/>";
+ varForm.sysId.value = "${result.sysId}";
+ varForm.submit();
+ }
+ /* ********************************************************
+ * 삭제 처리 함수
+ ******************************************************** */
+ function fnDelete(){
+ if (confirm("<spring:message code="common.delete.msg" />")) {
+ var varForm = document.all["Form"];
+ varForm.action = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonRemove.do'/>";
+ varForm.sysId.value = "${result.sysId}";
+ varForm.submit();
+ }
+ }
+ -->
+ </script>
+ </head>
+
+ <body>
+
+ <!-- 자바스크립트 경고 태그 -->
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <DIV class="wTableFrm">
+ <form name="Form" action="" method="post">
+ <input name="sysId" type="hidden">
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <table width="700" border="0" cellpadding="0" cellspacing="1" class="wTable"
+ summary="<spring:message code="comUtlSysHtm.comUtlHttpMonDetail.summary" />">
+ <caption>${pageTitle}</caption>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.webService" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 웹서비스종류 -->
+ <!-- <td>
+ <c:if test="${result.webKind == '001'}">TOMCAT</c:if>
+ <c:if test="${result.webKind == '002'}">WEBLOGIC</c:if>
+ <c:if test="${result.webKind == '003'}">JEUS</c:if>
+ <c:if test="${result.webKind == '004'}">JBOSS</c:if>
+ </td> -->
+ <td class="left">${result.webKind}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.systemURL" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 시스템URL -->
+ <td class="left">${result.siteUrl}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.managerName" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자명 -->
+ <td class="left">${result.mngrNm}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.managerEmail" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자이메일 -->
+ <td class="left">${result.mngrEmailAddr}</td>
+ </tr>
+ </table>
+
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.update" />" onclick="fnModify(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.delete" />" onclick="fnDelete(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fnList(); return false;" />
+ </div>
+
+ </form>
+ </DIV>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonLogList.jsp (revision 7)
@@ -0,0 +1,256 @@
+<%
+/**
+ * @Class Name : EgovComUtlHttpMonLogList.jsp
+ * @Description : EgovComUtlHttpMonLogList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.09.7 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysHtm.comUtlHttpMonLogList.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>${pageTitle}</title>
+
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+ <link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+ <script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+ <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js' />"></script>
+ <script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+ <script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+
+ <script type="text/javascript">
+
+ function fn_egov_init_httpMonLog(){
+ document.frm.searchBgnHour.value = '<c:out value="${searchVO.searchBgnHour}"/>';
+ document.frm.searchEndHour.value = '<c:out value="${searchVO.searchEndHour}"/>';
+
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ document.frm.searchKeyword.focus();
+ }
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_httpMonLog('1');
+ }
+ }
+
+ function fn_egov_select_httpMonLog(pageNo) {
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonLogList.do'/>";
+
+ var bgnDe = document.frm.searchBgnDe.value;
+ var endDe = document.frm.searchEndDe.value;
+
+ if(bgnDe != ""){
+ if(isDate(bgnDe, "검색시작일자") == false) {
+ return;
+ }
+ }
+
+ if(endDe != ""){
+ if(isDate(endDe, "검색종료일자") == false) {
+ return;
+ }
+ }
+
+ var bgnHour = document.frm.searchBgnHour.value;
+ var endHour = document.frm.searchEndHour.value;
+
+ var bgnDeHour = "";
+ var endDeHour = "";
+ if(bgnDe != "" && endDe != ""){
+ if(bgnHour == ""){
+ document.frm.searchBgnHour.value = "00";
+ bgnHour = "00";
+ }
+ if(endHour == ""){
+ document.frm.searchEndHour.value = "00";
+ endHour = "00";
+ }
+ bgnDeHour = bgnDe + bgnHour;
+ endDeHour = endDe + endHour;
+
+ if(bgnDeHour > endDeHour){
+ alert("검색종료일시가 검색시작일시보다 빠를수 없습니다.");
+ return;
+ }
+ }
+ document.frm.submit();
+ }
+
+ function fn_egov_inqire_httpMonLog(webKind, logId) {
+ document.frm.webKind.value = webKind;
+ document.frm.logId.value = logId;
+ document.frm.action = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonDetailLog.do'/>";
+ document.frm.submit();
+ }
+
+ /* ********************************************************
+ * 마스터목록조회 함수
+ ******************************************************** */
+ function fnSearch(){
+ location.href = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonList.do'/>";
+ }
+ </script>
+ </head>
+
+ <body onLoad="fn_egov_init_httpMonLog()">
+
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <div class="board">
+
+ <h1>${pageTitle}</h1>
+
+ <form name="frm" method="post" action="<c:url value='/utl/sys/prm/EgovComUtlProcessMonLogList.do'/>">
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="webKind">
+ <input type="hidden" name="logId">
+
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <input type="hidden" name="cal_url" id="cal_url" value="<c:url value='/sym/cal/EgovNormalCalPopup.do'/>" >
+ <input name="searchBgnDe" id="searchBgnDe" type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchBgnDe}"/>" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchBgnDe" />"><!-- 조회시작일자 입력 -->
+ <select name="searchBgnHour" class="select" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchBgnHour" />"><!-- 조회시작 시 선택 -->
+ <c:forEach var="bgnHour" items="${searchBgnHour}" varStatus="status">
+ <option value="<c:out value="${bgnHour.code}"/>"><c:out value="${bgnHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+ ~
+ <input name="searchEndDe" id="searchEndDe"type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchEndDe}"/>" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchEndDe" />"><!-- 조회종료일자 입력 -->
+ <select name="searchEndHour" class="select" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchEndHour" />"><!-- 조회종료 시 선택 -->
+ <c:forEach var="endHour" items="${searchEndHour}" varStatus="status">
+ <option value="<c:out value="${endHour.code}"/>"><c:out value="${endHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+
+ <select name="searchCondition" class="select" title="<spring:message code="select.searchCondition" />">
+ <option value=''>--<spring:message code="input.select" />--</option><!-- 선택하세요 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comUtlSysHtm.comUtlHttpMon.webService" /></option><!-- 웹서비스종류 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysHtm.comUtlHttpMon.status" /></option><!-- 상태 -->
+ </select>
+ <input name="searchKeyword" type="text" size="27" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="35" onkeypress="press(event);" title="검색어 입력">
+
+ <!-- <input class="s_input2 vat" name="searchKeyword" type="text" value="" size="25" onkeypress="press();" title="사용자명검색" /> -->
+ <input class="s_btn" type="submit" value="<spring:message code="button.search" />" title="<spring:message code="button.search" />" onclick="fn_egov_select_httpMonLog('1'); return false;" />
+ <input class="s_btn" type="submit" value="<spring:message code="button.list" />" title="<spring:message code="button.list" />" onclick="fnSearch(); return false;" />
+ </li>
+ </ul>
+ </div>
+
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:9%" />
+ <col style="width:22%" />
+ <col style="width:15%" />
+ <col style="width:22%" />
+ <col style="width:9%" />
+ <col style="width:23%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.seq" /></th><!-- 순번 -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.logID" /></th><!-- 로그ID -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.webService" /></th><!-- 웹서비스종류 -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.systemURL" /></th><!-- 시스템URL -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.status" /></th><!-- 상태 -->
+ <th scope="col"><spring:message code="comUtlSysHtm.comUtlHttpMon.createdDateTime" /></th><!-- 생성일시 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.logId}"/></td>
+ <td>
+ <form name="httpMonLogVO" method="post" action="<c:url value='EgovComUtlHttpMonLogList.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input name="searchCondition" type="hidden" value="<c:out value='${searchVO.searchCondition}'/>">
+ <input name="searchKeyword" type="hidden" value="<c:out value='${searchVO.searchKeyword}'/>">
+ <input name="searchBgnDe" type="hidden" value="<c:out value='${searchVO.searchBgnDe}'/>">
+ <input name="searchEndDe" type="hidden" value="<c:out value='${searchVO.searchEndDe}'/>">
+ <input name="searchBgnHour" type="hidden" value="<c:out value='${searchVO.searchBgnHour}'/>">
+ <input name="searchEndHour" type="hidden" value="<c:out value='${searchVO.searchEndHour}'/>">
+ <span class="link"><input type="submit" value="<c:out value="${result.webKind}"/>"
+ onclick="javascript:fn_egov_inqire_httpMonLog('<c:out value="${result.webKind}"/>'
+ , '<c:out value="${result.logId}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td><c:out value="${result.siteUrl}"/></td>
+ <td><c:out value="${result.httpSttusCd}"/></td>
+ <td><c:out value="${result.creatDt}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_processMonLog"/>
+ </ul>
+ </div>
+
+ </div>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetailLog.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetailLog.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetailLog.jsp (revision 7)
@@ -0,0 +1,97 @@
+<%
+ /**
+ * @Class Name : EgovComUtlHttpMonDetailLog.jsp
+ * @Description : EgovComUtlHttpMonDetailLog 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysHtm.comUtlHttpMonLogDetail.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>${pageTitle}</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fnList(){
+ location.href = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonLogList.do'/>";
+ }
+ -->
+ </script>
+ </head>
+
+ <body>
+
+ <!-- 자바스크립트 경고 태그 -->
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <DIV class="wTableFrm">
+ <form name="Form" action="" method="post">
+ <input name="webKind" type="hidden">
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <table width="700" border="0" cellpadding="0" cellspacing="1" class="wTable"
+ summary="<spring:message code="comUtlSysHtm.comUtlHttpMonLogDetail.summary" />">
+ <caption>${pageTitle}</caption>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.logID" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 로그ID -->
+ <td class="left">${result.logId}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.processID" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 프로세스ID -->
+ <td class="left">${result.sysId}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.webService" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 웹서비스종류 -->
+ <td class="left">${result.webKind}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.status" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 상태 -->
+ <td class="left">${result.httpSttusCd}</td>
+ </tr>
+ <c:if test="${result.httpSttusCd == '오류'}">
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.logInfo" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 로그 -->
+ <td class="left">${result.logInfo}</td>
+ </tr>
+ </c:if>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysHtm.comUtlHttpMon.lastCreatedDateTime" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 마지막 생성일시 -->
+ <td class="left">${result.creatDt}</td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fnList(); return false;" />
+ </div>
+
+ </form>
+ </DIV>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonDetailLog.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonRegist.jsp (revision 7)
@@ -0,0 +1,128 @@
+<%
+ /**
+ * @Class Name : EgovComUtlHttpMonRegist.jsp
+ * @Description : EgovComUtlHttpMonRegist 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysHtm.comUtlHttpMonRegist.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <title>${pageTitle}</title>
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+ <script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+ <validator:javascript formName="httpMon" staticJavascript="false" xhtml="true" cdata="false"/>
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 초기화
+ ******************************************************** */
+ function fn_egov_initl_HttpMon(){
+ // 첫 입력란에 포커스..
+ httpMon.webKind.focus();
+ }
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_HttpMon(){
+ location.href = "<c:url value='/utl/sys/htm/EgovComUtlHttpMonList.do'/>";
+ }
+ /* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+ function fn_egov_regist_HttpMon(form){
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(!validateHttpMon(form)){
+ return;
+ }else{
+ form.submit();
+ }
+ }
+ }
+ -->
+ </script>
+ </head>
+
+ <body onLoad="fn_egov_initl_HttpMon();">
+
+ <form:form commandName="httpMon" name="httpMon" method="post">
+
+ <div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle}</h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysHtm.comUtlHttpMon.webService" /> <span class="pilsu">*</span></th><!-- 웹서비스종류 -->
+ <td class="left">
+ <select name="webKind" title="<spring:message code="comUtlSysHtm.comUtlHttpMon.webService" />">
+ <option value="TOMCAT">TOMCAT</option>
+ <option value="WEBLOGIC">WEBLOGIC</option>
+ <option value="JEUS">JEUS</option>
+ <option value="JBOSS">JBOSS</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysHtm.comUtlHttpMon.systemURL" /> <span class="pilsu">*</span></th><!-- 시스템URL -->
+ <td class="left">
+ <form:input path="siteUrl" size="30" maxlength="30"/>
+ <form:errors path="siteUrl"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysHtm.comUtlHttpMon.managerName" /> <span class="pilsu">*</span></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" size="60" maxlength="60"/>
+ <form:errors path="mngrNm"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysHtm.comUtlHttpMon.managerEmail" /> <span class="pilsu">*</span></th><!-- 관리자이메일 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="60" maxlength="60"/>
+ <form:errors path="mngrEmailAddr"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="저장" onclick="fn_egov_regist_HttpMon(document.httpMon); return false;" />
+ <input class="s_submit" type="submit" value='<spring:message code="button.list" />' onclick="fn_egov_list_HttpMon(); return false;" />
+ </div>
+ <div style="clear:both;"></div>
+ </div>
+
+ </form:form>
+
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/htm/EgovComUtlHttpMonRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcList.jsp (revision 7)
@@ -0,0 +1,145 @@
+<%--
+/**
+ * @Class Name : EgovProxySvcList.java
+ * @Description : EgovProxySvcList jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comUtlSysPxy.proxySvc.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+
+function fncSelectProxySvcList(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectProxySvc(proxyId) {
+ document.listForm.proxyId.value = proxyId;
+ document.listForm.action = "<c:url value='/utl/sys/pxy/getProxySvc.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddProxySvcInsert() {
+ if(document.listForm.pageIndex.value == "") {
+ document.listForm.pageIndex.value = 1;
+ }
+ document.listForm.action = "<c:url value='/utl/sys/pxy/addViewProxySvc.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+ if (event.keyCode==13) {
+ fncSelectProxySvcList('1');
+ }
+}
+
+-->
+</script>
+</head>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+ <form name="listForm" action="<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comUtlSysPxy.proxySvcList.proxyNm.label" /> : </label>
+ <input class="s_input2 vat" name="strProxyNm" type="text" value='<c:out value="${proxySvcVO.strProxyNm}"/>' size="30" onkeypress="press();" title="검색" />
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fncSelectProxySvcList('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/pxy/addViewProxySvc.do'/>?pageIndex=<c:out value='${proxySvcVO.pageIndex}'/>&strProxyNm=<c:out value="${proxySvcVO.strProxyNm}"/>" onclick="fncAddProxySvcInsert(); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span>
+ <span class="btn_b"><a href="<c:url value='/utl/sys/pxy/selectProxyLogList.do'/>" onclick="" title="<spring:message code="comUtlSysPxy.proxyLog.log"/>"><spring:message code="comUtlSysPxy.proxyLog.log"/></a></span><!-- 로그 -->
+ </li>
+ </ul>
+ </div>
+ </form>
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:25%" />
+ <col style="width:17%" />
+ <col style="width:11%" />
+ <col style="width:19%" />
+ <col style="width:20%" />
+ <col style="width:8%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxySvcList.proxyId.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxySvcList.proxyNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxySvcList.proxyPort.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxySvcList.trgetSvcNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxySvcList.svcIp.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxySvcList.svcSttusNm.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="proxySvc" items="${proxySvcList}" varStatus="status">
+ <tr>
+ <td>
+ <form name="item" method="post" action="<c:url value='/utl/sys/pxy/getProxySvc.do'/>">
+ <input type="hidden" name="proxyId" value="<c:out value="${proxySvc.proxyId}"/>">
+ <input type="hidden" name="pageIndex" value="<c:out value='${proxySvcVO.pageIndex}'/>">
+ <input type="hidden" name="strProxyNm" value="<c:out value="${proxySvcVO.strProxyNm}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${proxySvc.proxyId}"/>" onclick="fncSelectProxySvc('<c:out value="${proxySvc.proxyId}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td><c:out value="${proxySvc.proxyNm}"/></td>
+ <td><c:out value="${proxySvc.proxyPort}"/></td>
+ <td><c:out value="${proxySvc.trgetSvcNm}"/></td>
+ <td><c:out value="${proxySvc.svcIp}"/>:<c:out value="${proxySvc.svcPort}"/></td>
+ <td><c:out value="${proxySvc.svcSttusNm}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(proxySvcList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcDetail.jsp (revision 7)
@@ -0,0 +1,149 @@
+<%--
+/**
+ * @Class Name : EgovProxySvcDetail.java
+ * @Description : EgovProxySvcDetail jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comUtlSysPxy.proxySvc.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncSelectProxySvcList() {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.action = "<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>";
+ varFrom.submit();
+}
+
+function fncProxySvcUpdateView(proxyId) {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.proxyId.value = proxyId;
+ varFrom.action = "<c:url value='/utl/sys/pxy/updtViewProxySvc.do'/>";
+ varFrom.submit();
+}
+
+function fncProxySvcDelete(proxyId) {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.proxyId.value = proxyId;
+ varFrom.action = "<c:url value='/utl/sys/pxy/removeProxySvc.do'/>";
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ varFrom.submit();
+ }
+}
+-->
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUtlSysPxy.proxySvcDetail.title" /></h2><!-- 프록시설정 상세조회 -->
+
+ <form:form commandName="proxySvc" method="post" action="${pageContext.request.contextPath}/utl/sys/pxy/removeProxySvc.do">
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.proxyId}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.proxyNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.proxyIp}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.proxyPort}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.trgetSvcNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.trgetSvcNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcDc.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.svcDc}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.svcIp}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.svcPort}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcSttusNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${proxySvc.svcSttusNm}'/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/utl/sys/pxy/updtViewProxySvc.do'/>?proxyId=<c:out value='${proxySvc.proxyId}'/>" onclick="fncProxySvcUpdateView('${proxySvc.proxyId}'); return false;"><spring:message code="button.update" /></a></span>
+ <input class="s_submit" type="submit" value='<spring:message code="button.delete" />' onclick="fncProxySvcDelete('${proxySvc.proxyId}')" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>?pageIndex=<c:out value='${proxySvcVO.pageIndex}'/>&strProxyNm=<c:out value="${proxySvcVO.strProxyNm}"/>" onclick="fncSelectProxySvcList(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+
+ <input type="hidden" name="proxyId" value="<c:out value='${proxySvc.proxyId}'/>" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="strProxyNm" value="<c:out value='${proxySvcVO.strProxyNm}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${proxySvcVO.pageIndex}'/>" />
+ </form:form>
+
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxyLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxyLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxyLogList.jsp (revision 7)
@@ -0,0 +1,200 @@
+<%--
+/**
+ * @Class Name : EgovProxyLogList.java
+ * @Description : EgovProxyLogList jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="comUtlSysPxy.proxyLog.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+
+function fn_egov_init_calendar(){
+
+ $("#strStartDate").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ $("#strEndDate").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+}
+
+function fncSelectProxyLogList(pageNo){
+
+ var fromDate = document.listForm.strStartDate.value;
+ var endDate = document.listForm.strEndDate.value;
+
+ // var tmpFromDate = fromDate.substring(0,4)+fromDate.substring(5,7)+fromDate.substring(8,10);
+ // var tmpEndDate = endDate.substring(0,4)+endDate.substring(5,7)+endDate.substring(8,10);
+
+ var tmpFromDate = fromDate.split("-");
+ var tmpEndDate = endDate.split("-");
+
+ var strTmpFromDate = "";
+ var strTmpEndDate = "";
+
+ for(var i=0;i<tmpFromDate.length;i++) {
+ strTmpFromDate = strTmpFromDate + tmpFromDate[i];
+ }
+
+ for(var j=0;j<tmpEndDate.length;j++) {
+ strTmpEndDate = strTmpEndDate + tmpEndDate[j];
+ }
+
+ if(strTmpFromDate.length != 8 || strTmpEndDate.length != 8 || !checknum(strTmpFromDate) || !checknum(strTmpEndDate)) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcList.checknum"/>");/* 날짜 형식이 잘못되었습니다 */
+ return;
+ } else {
+ if(strTmpFromDate > strTmpEndDate) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcList.strTmpFromDateEndDate"/>");/* 시작일자는 종료일자보다 클 수 없습니다 */
+ return;
+ }
+ }
+
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/pxy/selectProxyLogList.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/pxy/selectProxyLogList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+ if (event.keyCode==13) {
+ fncSelectProxyLogList('1');
+ }
+}
+
+function checknum(number) {
+
+ var rtnMsg = true;
+ var pattern = /^[0-9]+$/;
+
+ if(!pattern.test(number)) {
+ rtnMsg = false;
+ }
+
+ return rtnMsg;
+}
+-->
+</script>
+</head>
+<body onLoad="fn_egov_init_calendar();">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <form name="listForm" action="<c:url value='/utl/sys/pxy/selectProxyLogList.do'/>" method="post">
+
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comUtlSysPxy.proxyLog.period.label" /> : </label>
+ <input type="text" name="strStartDate" id="strStartDate" value="<c:out value='${pmProxyLogVO.strStartDate}'/>" size="10" maxlength="10" title="<spring:message code="comUtlSysPxy.proxySvcList.pmProxyLogVO.strStartDate"/>" ><!-- 프록시로그 시작일자 -->
+ ~
+ <input type="text" name="strEndDate" id="strEndDate" value="<c:out value='${pmProxyLogVO.strEndDate}'/>" size="10" maxlength="10" title="<spring:message code="comUtlSysPxy.proxySvcList.pmProxyLogVO.strEndDate"/>" ><!-- 프록시로그 종료일자 -->
+ <input type="hidden" name="strProxyDate" value=""/>
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fncSelectProxyLogList('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>" onclick="" title="<spring:message code="title.list"/>"><spring:message code="title.list"/></a></span><!-- 목록 -->
+ </li>
+ </ul>
+ </div>
+
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:20%" />
+ <col style="width:25%" />
+ <col style="width:15%" />
+ <col style="width:20%" />
+ <col style="width:20%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxyLog.proxyId.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxyLog.proxyNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxyLog.clntPort.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxyLog.clntIp.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysPxy.proxyLog.conectTime.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="proxyLog" items="${proxyLogList}" varStatus="status">
+ <tr>
+ <td><c:out value="${proxyLog.proxyId}"/></td>
+ <td><c:out value="${proxyLog.proxyNm}"/></td>
+ <td><c:out value="${proxyLog.clntPort}"/></td>
+ <td><c:out value="${proxyLog.clntIp}"/></td>
+ <td><c:out value="${proxyLog.conectTime}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxyLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcRegist.jsp (revision 7)
@@ -0,0 +1,188 @@
+<%--
+/**
+ * @Class Name : EgovProxySvcRegist.java
+ * @Description : EgovProxySvcRegist jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysPxy.proxySvc.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="proxySvc" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncSelectProxySvcList() {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.action = "<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>";
+ varFrom.submit();
+}
+
+function fncProxySvcInsert() {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.action = "<c:url value='/utl/sys/pxy/addProxySvc.do'/>";
+
+ if(confirm("<spring:message code='common.save.msg' />")){
+ if(!validateProxySvc(varFrom)){
+ return;
+ }else{
+ if(!ipValidate(varFrom.proxyIp.value))
+ return;
+ else if(!ipValidate(varFrom.svcIp.value))
+ return;
+ else
+ varFrom.submit();
+ }
+ }
+}
+
+function ipValidate(ipValue) {
+
+ var varFrom = document.getElementById("serverEqpmn");
+ var IPvalue = ipValue;
+
+ var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
+ var ipArray = IPvalue.match(ipPattern);
+
+ var result = "";
+ var thisSegment;
+
+ if(IPvalue == "0.0.0.0") {
+ alert(IPvalue + "<spring:message code="comUtlSysPxy.proxySvcRegist.ipValueException"/>");/* 는 예외 아이피 입니다.. */
+ result = false;
+ } else if (IPvalue == "255.255.255.255") {
+ alert(result =IPvalue + "<spring:message code="comUtlSysPxy.proxySvcRegist.ipValueException"/>");/* 는 예외 아이피 입니다.. */
+ result = false;
+ } else {
+ result = true;
+ }
+
+ if(ipArray == null) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcRegist.ipFormalException"/> ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ } else {
+ for (var i=1; i<5; i++) {
+
+ thisSegment = ipArray[i];
+
+ if (thisSegment > 255) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcRegist.ipFormalException"/> ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+
+ if ((i == 0) && (thisSegment > 255)) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcRegist.ipFormalException"/> ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+ }
+ }
+ return result;
+}
+
+-->
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+ <form:form commandName="proxySvc" method="post" action="${pageContext.request.contextPath}/utl/sys/pxy/addProxySvc.do">
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="proxyNm"><input name="proxyNm" id="proxyNm" type="text" maxLength="60" size="60" > <form:errors path="proxyNm" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="proxyIp"><input name="proxyIp" id="proxyIp" type="text" maxLength="23" style="width:128px" /> <form:errors path="proxyIp" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="proxyPort"><input name="proxyPort" id="proxyPort" type="text" maxLength="10" style="width:50px" /> <form:errors path="proxyPort" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.trgetSvcNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="trgetSvcNm"><input name="trgetSvcNm" id="trgetSvcNm" type="text" maxLength="30" size="30" > <form:errors path="trgetSvcNm" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcDc.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="svcDc"><input name="svcDc" id="svcDc" type="text" maxLength="255" size="60" ></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="svcDc"><input name="svcIp" id="svcIp" type="text" maxLength="23" style="width:128px" /> <form:errors path="svcIp" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="svcDc"><input name="svcPort" id="svcPort" type="text" maxLength="10" style="width:50px" /> <form:errors path="svcPort" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcSttusNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <select name="svcSttus">
+ <option value="01"><spring:message code="comUtlSysPxy.proxySvcRegist.svcSttus.run"/></option><!-- 정상 -->
+ <option value="03"><spring:message code="comUtlSysPxy.proxySvcRegist.svcSttus.stop"/></option><!-- 중지 -->
+ </select>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fncProxySvcInsert(); return false;" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>?pageIndex=<c:out value='${proxySvcVO.pageIndex}'/>&strProxyNm=<c:out value="${proxySvcVO.strProxyNm}"/>" onclick="fncSelectProxySvcList(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+
+ <input type="hidden" name="strProxyNm" value="<c:out value='${proxySvcVO.strProxyNm}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${proxySvcVO.pageIndex}'/>" >
+ </form:form>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcUpdt.jsp (revision 7)
@@ -0,0 +1,207 @@
+<%--
+/**
+ * @Class Name : EgovProxySvcUpdt.java
+ * @Description : EgovProxySvcUpdt jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysPxy.proxySvc.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<title>${pageTitle} <spring:message code="title.update" /></title>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="proxySvc" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncSelectProxySvcList() {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.action = "<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>";
+ varFrom.submit();
+}
+
+function fncProxySvcUpdate() {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.action = "<c:url value='/utl/sys/pxy/updtProxySvc.do'/>";
+
+ if(confirm("<spring:message code='common.save.msg' />")){
+ if(!validateProxySvc(varFrom)){
+ return;
+ }else{
+ if(!ipValidate(varFrom.proxyIp.value))
+ return;
+ else if(!ipValidate(varFrom.svcIp.value))
+ return;
+ else
+ varFrom.submit();
+ }
+ }
+}
+
+function fncProxySvcDelete() {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.action = "<c:url value='/utl/sys/pxy/removeProxySvc.do'/>";
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ varFrom.submit();
+ }
+}
+
+function ipValidate(ipValue) {
+
+ var varFrom = document.getElementById("serverEqpmn");
+ var IPvalue = ipValue;
+
+ var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
+ var ipArray = IPvalue.match(ipPattern);
+
+ var result = "";
+ var thisSegment;
+
+ if(IPvalue == "0.0.0.0") {
+ alert(IPvalue + "<spring:message code="comUtlSysPxy.proxySvcUpdt.ipValueException"/>");/* 는 예외 아이피 입니다. */
+ result = false;
+ } else if (IPvalue == "255.255.255.255") {
+ alert(IPvalue + "<spring:message code="comUtlSysPxy.proxySvcUpdt.ipValueException"/>");/* 는 예외 아이피 입니다. */
+ result = false;
+ } else {
+ result = true;
+ }
+
+ if(ipArray == null) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcUpdt.ipFormalException"/>");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ } else {
+ for (var i=1; i<5; i++) {
+
+ thisSegment = ipArray[i];
+
+ if (thisSegment > 255) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcUpdt.ipFormalException"/>");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+
+ if ((i == 0) && (thisSegment > 255)) {
+ alert("<spring:message code="comUtlSysPxy.proxySvcUpdt.ipFormalException"/>");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+ }
+ }
+
+ return result;
+}
+
+-->
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUtlSysPxy.proxySvcUpdtl.title" /></h2><!-- 프록시설정 수정 -->
+
+ <form:form commandName="proxySvc" method="post" action="${pageContext.request.contextPath}/utl/sys/pxy/updtProxySvc.do">
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="proxyId" id="proxyId" type="text" value="<c:out value='${proxySvc.proxyId}'/>" size="30" class="readOnlyClass" readOnly>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="proxyNm" id="proxyNm" type="text" value="<c:out value='${proxySvc.proxyNm}'/>" maxLength="60" size="60" > <form:errors path="proxyNm" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="proxyIp" id="proxyIp" type="text" value="<c:out value='${proxySvc.proxyIp}'/>" maxLength="23" style="width:50%"> <form:errors path="proxyIp" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.proxyPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="proxyPort" id="proxyPort" type="text" value="<c:out value='${proxySvc.proxyPort}'/>" maxLength="10" style="width:60px"> <form:errors path="proxyPort" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.trgetSvcNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="trgetSvcNm" id="trgetSvcNm" type="text" value="<c:out value='${proxySvc.trgetSvcNm}'/>" maxLength="30" size="30" > <form:errors path="trgetSvcNm" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcDc.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="svcDc" id="svcDc" type="text" value="<c:out value='${proxySvc.svcDc}'/>" maxLength="255" size="60" >
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="svcIp" id="svcIp" type="text" value="<c:out value='${proxySvc.svcIp}'/>" maxLength="23" style="width:50%"> <form:errors path="svcIp" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="svcPort" id="svcPort" type="text" value="<c:out value='${proxySvc.svcPort}'/>" maxLength="10" style="width:60px"> <form:errors path="svcPort" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPxy.proxySvc.svcSttusNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <select name="svcSttus">
+ <option value="01" <c:if test="${proxySvc.svcSttus == '01'}">selected</c:if>><spring:message code="comUtlSysPxy.proxySvcUpdt.svcSttus.run"/></option><!-- 정상 -->
+ <option value="03" <c:if test="${proxySvc.svcSttus == '03'}">selected</c:if>><spring:message code="comUtlSysPxy.proxySvcUpdt.svcSttus.stop"/></option><!-- 중지 -->
+ </select>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fncProxySvcUpdate()" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/pxy/selectProxySvcList.do'/>?pageIndex=<c:out value='${proxySvcVO.pageIndex}'/>&strProxyNm=<c:out value="${proxySvcVO.strProxyNm}"/>" onclick="fncSelectProxySvcList(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+
+ <input type="hidden" name="strPreSvcSttus" value="<c:out value='${proxySvc.svcSttus}'/>" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="strProxyNm" value="<c:out value='${proxySvcVO.strProxyNm}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${proxySvcVO.pageIndex}'/>" >
+</form:form>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/pxy/EgovProxySvcUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/rsc/EgovLoginSesionCheck.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/rsc/EgovLoginSesionCheck.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/rsc/EgovLoginSesionCheck.jsp (revision 7)
@@ -0,0 +1,109 @@
+<%--
+/**
+ * @Class Name : EgovLoginSesionCheck.java
+ * @Description : EgovLoginSesionCheck jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.09.01 lee.m.j 최초 생성
+ * @ 2015.04.09 전여철 기본 url을 /index.do로 변경
+ * @ 2018.11.02 이정은 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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" %>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="utlSysRsc.loginSessionCheck.loginSessionCheck"/></title><!-- 로그인 세션정보 체크 -->
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="proxySvc" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+
+function fncSelectLoginSession() {
+ var varFrom = document.getElementById("loginSessionCheck");
+ varFrom.action = "<c:url value='/utl/sys/rsc/loginSessionView.do'/>";
+ varFrom.submit();
+}
+
+function fncSetLoginSession() {
+ var varFrom = document.getElementById("loginSessionCheck");
+ varFrom.action = "<c:url value='/utl/sys/rsc/setLoginSession.do'/>";
+
+ if(confirm("<spring:message code="utlSysRsc.loginSessionCheck.validate.confirmSetLoginSession"/>")){/* 설정 하시겠습니까? */
+ varFrom.submit();
+ }
+}
+
+function fncgetLoginSessionView(url) {
+ window.open(url,"notice","width=800, height=600, top=50, left=20, scrollbars=no, resizable=no");
+}
+
+-->
+</script>
+</head>
+ <%
+ // 세션 정보를 가져온다. LoginVO
+ egovframework.com.cmm.LoginVO user = (egovframework.com.cmm.LoginVO)egovframework.com.cmm.util.EgovUserDetailsHelper.getAuthenticatedUser();
+ String contextPath = request.getContextPath();
+ if(user != null && (user.getUrl() == null || user.getUrl().equals("")))
+ user.setUrl(contextPath+"/index.do");
+ %>
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="wTableFrm">
+<form:form commandName="loginSessionCheck" method="post" action="${pageContext.request.contextPath}/utl/sys/rsc/setLoginSession.do">
+ <!-- 타이틀 -->
+ <h2><spring:message code="utlSysRsc.loginSessionCheck.loginSessionCheck"/></h2><!-- 로그인 세션정보 체크 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="utlSysRsc.loginSessionCheck.url"/> <span class="pilsu">*</span></th><!-- URL -->
+ <td class="left">
+ <label for="url"><input name="url" id="url" type="text" maxLength="1000" size="80" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="utlSysRsc.loginSessionCheck.sessionURL"/> <span class="pilsu">*</span></th><!-- 세션 URL -->
+ <td class="left">
+ <label for="sessionUrl"><input name="sessionUrl" id="sessionUrl" value="<%=(user == null || user.getUrl() == null) ? "" : user.getUrl() %>" type="text" maxLength="1000" size="80" readonly="readonly" class="readOnlyClass"></label>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/utl/sys/rsc/loginSessionView.do'/>" onclick="fncSelectLoginSession(); return false;"><spring:message code="button.inquire" /></a></span>
+ <input class="s_submit" type="submit" value="<spring:message code="utlSysRsc.loginSessionCheck.set"/>" onclick="fncSetLoginSession(); return false;" /><!-- 설정 -->
+ <span class="btn_s"><a href="<%=user.getUrl() %>" onclick="" target=“_blank” title="새창" onclick="fncgetLoginSessionView('<%=(user == null || user.getUrl() == null) ? "" : user.getUrl() %>'); return false;"><spring:message code="utlSysRsc.loginSessionCheck.sessionView"/></a></span><!-- 이동 -->
+ </div>
+ <div style="clear:both;"></div>
+</form:form>
+</div>
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/rsc/EgovLoginSesionCheck.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngDetail.jsp (revision 7)
@@ -0,0 +1,147 @@
+<%
+/**
+ * @Class Name : EgovNtwrkSvcMntrngDetail.jsp
+ * @Description : 네트워크서비스모니터대상 상세보기
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2010.08.17 장철호 최초 생성
+ * @ 2018.11.02 신용호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.17
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="ntwrkSvcMntrngVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_NtwrkSvcMntrng(){
+
+ }
+
+ function fn_egov_update_ntwrksvcmntrng() {
+ document.ntwrkSvcMntrngVO.action = "<c:url value='/utl/sys/nsm/modifyNtwrkSvcMntrng.do'/>";
+ document.ntwrkSvcMntrngVO.submit();
+ }
+
+ function fn_egov_delete_ntwrksvcmntrng(){
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ document.ntwrkSvcMntrngVO.action = "<c:url value='/utl/sys/nsm/deleteNtwrkSvcMntrng.do'/>";
+ document.ntwrkSvcMntrngVO.submit();
+ }
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_ntwrksvcmntrng(){
+ document.ntwrkSvcMntrngVO.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>";
+ document.ntwrkSvcMntrngVO.submit();
+ }
+
+</script>
+</head>
+<body onLoad="fn_egov_init_NtwrkSvcMntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="ntwrkSvcMntrngVO" name="ntwrkSvcMntrngVO" method="post" action="${pageContext.request.contextPath}/utl/sys/nsm/modifyNtwrkSvcMntrng.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <caption>네트워크서비스모니터대상 상세보기</caption>
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysIp.label" /> <span class="pilsu">*</span></th><!-- 시스템IP -->
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngVO.sysIp1}" escapeXml="false" />.<c:out value="${ntwrkSvcMntrngVO.sysIp2}" escapeXml="false" />.<c:out value="${ntwrkSvcMntrngVO.sysIp3}" escapeXml="false" />.<c:out value="${ntwrkSvcMntrngVO.sysIp4}" escapeXml="false" />
+ <div><form:errors path="sysIp1" cssClass="error"/></div>
+ <div><form:errors path="sysIp2" cssClass="error"/></div>
+ <div><form:errors path="sysIp3" cssClass="error"/></div>
+ <div><form:errors path="sysIp4" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysPort.label" /> <span class="pilsu">*</span></th><!-- 시스템포트 -->
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngVO.sysPort}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysNm.label" /> <span class="pilsu">*</span></th><!-- 시스템명 -->
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngVO.sysNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.mngrNm.label" /> <span class="pilsu">*</span></th><!-- 관리자명 -->
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngVO.mngrNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.mngrEmailAddr.label" /> <span class="pilsu">*</span></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngVO.mngrEmailAddr}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.mntrngSttus.label" /> <span class="pilsu">*</span></th><!-- 모니터링상태 -->
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngVO.mntrngSttus}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.creatDt.label" /> <span class="pilsu">*</span></th><!-- 마지막 생성일시 -->
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngVO.creatDt}" escapeXml="false" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.update" />' onclick="fn_egov_update_ntwrksvcmntrng(); return false;" /><!-- 수정 -->
+ <span class="btn_s"><a href="<c:url value='/utl/sys/nsm/deleteNtwrkSvcMntrng.do'/>?sysIp=<c:out value='${ntwrkSvcMntrngVO.sysIp}'/>&sysPort=<c:out value='${ntwrkSvcMntrngVO.sysPort}'/>" onclick="fn_egov_delete_ntwrksvcmntrng(); return false;"><spring:message code="button.delete" /></a></span><!-- 삭제 -->
+ <span class="btn_s"><a href="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>?searchWrd=<c:out value='${ntwrkSvcMntrngVO.searchWrd}'/>&searchCnd=<c:out value='${ntwrkSvcMntrngVO.searchCnd}'/>&pageIndex=<c:out value='${ntwrkSvcMntrngVO.pageIndex}'/>" onclick="fn_egov_list_ntwrksvcmntrng(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input type="hidden" id="sysIp" name="sysIp" value="<c:out value='${ntwrkSvcMntrngVO.sysIp}'/>"/>
+<input type="hidden" id="sysPort" name="sysPort" value="<c:out value='${ntwrkSvcMntrngVO.sysPort}'/>"/>
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchWrd" value="<c:out value='${ntwrkSvcMntrngVO.searchWrd}'/>" />
+<input type="hidden" name="searchCnd" value="<c:out value='${ntwrkSvcMntrngVO.searchCnd}'/>" />
+<input type="hidden" name="pageIndex" value="<c:out value='${ntwrkSvcMntrngVO.pageIndex}'/>" />
+<!-- 검색조건 유지 -->
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogList.jsp (revision 7)
@@ -0,0 +1,266 @@
+<%
+/**
+ * @Class Name : EgovNtwrkSvcMntrngLogList.jsp
+ * @Description : 네트워크서비스모니터링 로그 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2010.08.17 장철호 최초 생성
+ * 2018.11.02 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.17
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js' />"></script>
+<script type="text/javascript">
+
+ function initCalendar() {
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'both'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'both'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+ }
+
+ function fn_egov_init_ntwrksvcmntrnglog(){
+ initCalendar();
+ document.frm.searchBgnHour.value = '<c:out value="${searchVO.searchBgnHour}"/>';
+ document.frm.searchEndHour.value = '<c:out value="${searchVO.searchEndHour}"/>';
+ }
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_ntwrksvcmntrnglog('1');
+ }
+ }
+
+ function fn_egov_select_ntwrksvcmntrnglog(pageNo) {
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngLogList.do'/>";
+
+ var bgnDe = document.frm.searchBgnDe.value;
+ var endDe = document.frm.searchEndDe.value;
+
+ if(bgnDe != ""){
+ if(isDate(bgnDe, "<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.bgnDe" />") == false) { //검색시작일자
+ return;
+ }
+ }
+
+ if(endDe != ""){
+ if(isDate(endDe, "<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.endDe" />") == false) { //검색종료일자
+ return;
+ }
+ }
+
+ if(bgnDe.length == 8){
+ bgnDe = bgnDe.substring(0,4) + "-" + bgnDe.substring(4,6) + "-" + bgnDe.substring(6,8);
+ document.frm.searchBgnDe.value = bgnDe;
+ }
+
+ if(endDe.length == 8){
+ endDe = endDe.substring(0,4) + "-" + endDe.substring(4,6) + "-" + endDe.substring(6,8);
+ document.frm.searchEndDe.value = endDe;
+ }
+
+ var bgnHour = document.frm.searchBgnHour.value;
+ var endHour = document.frm.searchEndHour.value;
+
+ var bgnDeHour = "";
+ var endDeHour = "";
+ if(bgnDe != "" && endDe != ""){
+ if(bgnHour == ""){
+ document.frm.searchBgnHour.value = "00";
+ bgnHour = "00";
+ }
+ if(endHour == ""){
+ document.frm.searchEndHour.value = "00";
+ endHour = "00";
+ }
+ bgnDeHour = bgnDe + bgnHour;
+ endDeHour = endDe + endHour;
+
+ if(bgnDeHour > endDeHour){
+ alert("<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.validate.alert.diffBgnDeEndDe" />"); //검색종료일시가 검색시작일시보다 빠를수 없습니다.
+ return;
+ }
+ }
+
+ document.frm.submit();
+ }
+
+ function fn_egov_inqire_ntwrksvcmntrnglog(sysIp, sysPort, logId) {
+ document.frm.sysIp.value = sysIp;
+ document.frm.sysPort.value = sysPort;
+ document.frm.logId.value = logId;
+ document.frm.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngLog.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_select_ntwrksvcmntrng(){
+ document.frm.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>";
+ document.frm.submit();
+ }
+
+</script>
+</head>
+<body onLoad="fn_egov_init_ntwrksvcmntrnglog()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <form name="frm" method="post" action="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngLogList.do'/>">
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="sysIp">
+ <input type="hidden" name="sysPort">
+ <input type="hidden" name="logId">
+
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <input type="hidden" name="cal_url" id="cal_url" value="<c:url value='/sym/cal/EgovNormalCalPopup.do'/>" >
+ <input id="searchBgnDe" name="searchBgnDe" type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchBgnDe}"/>" title="<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.title.searchBgnDe" />"><!-- 조회시작일자 입력 -->
+ <select name="searchBgnHour" class="select" title="<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.title.searchBgnHour" />"><!-- 조회시작 시간 선택 -->
+ <c:forEach var="bgnHour" items="${searchBgnHour}" varStatus="status">
+ <option value="<c:out value="${bgnHour.code}"/>"><c:out value="${bgnHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+ ~
+ <input id="searchEndDe" name="searchEndDe" type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchEndDe}"/>" title="<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.title.searchEndDe" />"><!-- 조회종료일자 입력 -->
+ <select name="searchEndHour" class="select" title="<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.title.searchEndHour" />"><!-- 조회종료 시간 선택 -->
+ <c:forEach var="endHour" items="${searchEndHour}" varStatus="status">
+ <option value="<c:out value="${endHour.code}"/>"><c:out value="${endHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+
+ <select name="searchCnd" class="select" title="<spring:message code='common.searchCondition.msg' />">
+ <option value="">--<spring:message code="input.select" />--</option><!-- 선택하세요 -->
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysNm.label" /></option>
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysIp.label" /></option>
+ <option value="2" <c:if test="${searchVO.searchCnd == '2'}">selected</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.mngrNm.label" /></option>
+ <option value="3" <c:if test="${searchVO.searchCnd == '3'}">selected</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.mntrngSttus.label" /></option>
+ </select>
+ <input class="s_input2 vat" name="searchWrd" type="text" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="35" size="27" onkeypress="press(event);" title="<spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.title.searchWrd" />" /><!-- 검색어 입력 -->
+
+ <input class="s_btn" type="submit" value="<spring:message code='title.inquire' />" title="<spring:message code='title.inquire' />" onclick="fn_egov_select_ntwrksvcmntrnglog('1'); return false;" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>" onclick="fn_egov_select_ntwrksvcmntrng(); return false;" title="<spring:message code='title.list' />"><spring:message code='title.list' /></a></span><!-- 목록 -->
+ </li>
+ </ul>
+ </div>
+
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:20%" />
+ <col style="width:10%" />
+ <col style="width:30%" />
+ <col style="width:14%" />
+ <col style="width:16%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.num.label" /></th><!-- 번호 -->
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysIp.label" /></th><!-- 시스템IP -->
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysPort.label" /></th><!-- 시스템포트 -->
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysNm.label" /></th><!-- 시스템명 -->
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.mntrngSttus.label" /></th><!-- 모니터링상태 -->
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.creatDt.label" /></th><!-- 생성일시 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.sysIp}"/></td>
+ <td><c:out value="${result.sysPort}"/></td>
+ <td>
+ <form name="ntwrkSvcMntrngVO" method="post" action="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngLog.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>">
+ <input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>">
+ <input name="searchBgnDe" type="hidden" value="<c:out value='${searchVO.searchBgnDe}'/>">
+ <input name="searchEndDe" type="hidden" value="<c:out value='${searchVO.searchEndDe}'/>">
+ <input name="searchBgnHour" type="hidden" value="<c:out value='${searchVO.searchBgnHour}'/>">
+ <input name="searchEndHour" type="hidden" value="<c:out value='${searchVO.searchEndHour}'/>">
+ <input type="hidden" name="sysIp" value="<c:out value="${result.sysIp}"/>">
+ <input type="hidden" name="sysPort" value="<c:out value="${result.sysPort}"/>">
+ <input type="hidden" name="logId" value="<c:out value="${result.logId}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${result.sysNm}"/>" onclick="javascript:fn_egov_inqire_ntwrksvcmntrnglog('<c:out value="${result.sysIp}"/>', '<c:out value="${result.sysPort}"/>', '<c:out value="${result.logId}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td><c:out value="${result.mntrngSttus}"/></td>
+ <td><c:out value="${result.creatDt}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_ntwrksvcmntrnglog"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngRegist.jsp (revision 7)
@@ -0,0 +1,143 @@
+<%
+/**
+ * @Class Name : EgovNtwrkSvcMntrngRegist.jsp
+ * @Description : 네트워크서비스모니터대상 등록
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.17 장철호 최초 생성
+ * @ 2010.09.01 장철호 수정 (보안관련 분리)
+ * 2018.11.02 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.17
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.title"/></c:set>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.create" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="ntwrkSvcMntrngVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_NtwrkSvcMntrng(){
+ if("${ntwrkSvcMntrngDuplicated}" == "true"){
+ alert("<spring:message code="comUtlSysNsm.ntwrkSvcMntrng.validate.alert.duplicate" />"); //중복된 네트워크서비스의 IP와 Port가 있습니다.
+ }
+ }
+
+ function fn_egov_insert_ntwrksvcmntrng() {
+ if (!validateNtwrkSvcMntrngVO(document.ntwrkSvcMntrngVO)){
+ return;
+ }
+
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ document.ntwrkSvcMntrngVO.action = "<c:url value='/utl/sys/nsm/insertNtwrkSvcMntrng.do'/>";
+ document.ntwrkSvcMntrngVO.submit();
+ }
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_ntwrksvcmntrng(){
+ document.ntwrkSvcMntrngVO.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>";
+ document.ntwrkSvcMntrngVO.submit();
+ }
+
+</script>
+
+</head>
+<body onLoad="fn_egov_init_NtwrkSvcMntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="ntwrkSvcMntrngVO" name="ntwrkSvcMntrngVO" method="post" action="${pageContext.request.contextPath}/utl/sys/nsm/insertNtwrkSvcMntrng.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <caption>네트워크서비스모니터대상 등록</caption>
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysIp.label" /> <span class="pilsu">*</span></th><!-- 시스템IP -->
+ <td class="left">
+ <form:input path="sysIp1" maxlength="3" title="시스템IP1" cssStyle="width:30px" /> .
+ <form:input path="sysIp2" maxlength="3" title="시스템IP2" cssStyle="width:30px" /> .
+ <form:input path="sysIp3" maxlength="3" title="시스템IP3" cssStyle="width:30px" /> .
+ <form:input path="sysIp4" maxlength="3" title="시스템IP4" cssStyle="width:30px" />
+ <div><form:errors path="sysIp1" cssClass="error"/></div>
+ <div><form:errors path="sysIp2" cssClass="error"/></div>
+ <div><form:errors path="sysIp3" cssClass="error"/></div>
+ <div><form:errors path="sysIp4" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysPort.label" /> <span class="pilsu">*</span></th><!-- 시스템포트 -->
+ <td class="left">
+ <form:input path="sysPort" maxlength="5" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.sysPort.label' />" cssStyle="width:40px" />
+ <div><form:errors path="sysPort" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysNm.label" /> <span class="pilsu">*</span></th><!-- 시스템명 -->
+ <td class="left">
+ <form:input path="sysNm" size="65" maxlength="255" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.sysNm.label' />"/>
+ <div><form:errors path="sysNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.mngrNm.label" /> <span class="pilsu">*</span></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" size="5" maxlength="60" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.mngrNm.label' />" cssStyle="width:100px"/>
+ <div><form:errors path="mngrNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.mngrEmailAddr.label" /> <span class="pilsu">*</span></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="25" maxlength="50" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.mngrEmailAddr.label' />"/>
+ <div><form:errors path="mngrEmailAddr" cssClass="error"/></div>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fn_egov_insert_ntwrksvcmntrng(); return false;" /><!-- 저장 -->
+ <span class="btn_s"><a href="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>?searchWrd=<c:out value='${ntwrkSvcMntrngVO.searchWrd}'/>&searchCnd=<c:out value='${ntwrkSvcMntrngVO.searchCnd}'/>&pageIndex=<c:out value='${ntwrkSvcMntrngVO.pageIndex}'/>" onclick="fn_egov_list_ntwrksvcmntrng(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchWrd" value="<c:out value='${ntwrkSvcMntrngVO.searchWrd}'/>" />
+<input type="hidden" name="searchCnd" value="<c:out value='${ntwrkSvcMntrngVO.searchCnd}'/>" />
+<input type="hidden" name="pageIndex" value="<c:out value='${ntwrkSvcMntrngVO.pageIndex}'/>" />
+<!-- 검색조건 유지 -->
+
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogDetail.jsp (revision 7)
@@ -0,0 +1,134 @@
+<%
+/**
+ * @Class Name : EgovNtwrkSvcMntrngLogDetail.jsp
+ * @Description : 네트워크서비스모니터로그 상세보기
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2010.08.17 장철호 최초 생성
+ * @ 2018.11.02 신용호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.17
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="ntwrkSvcMntrngLogVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_NtwrkSvcMntrngLog(){
+
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_ntwrksvcmntrnglog(){
+ document.ntwrkSvcMntrngLogVO.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngLogList.do'/>";
+ document.ntwrkSvcMntrngLogVO.submit();
+ }
+
+</script>
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+</head>
+<body onLoad="fn_egov_init_NtwrkSvcMntrngLog()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="ntwrkSvcMntrngLogVO" name="ntwrkSvcMntrngLogVO" method="post" action="${pageContext.request.contextPath}/utl/sys/nsm/selectNtwrkSvcMntrngLogList.do">
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2><!-- 네트워크서비스모니터링로그 상세조회 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable" summary="이 표는 네트워크서비스모니터링 로그 정보를 제공하며, 로그ID, 시스템IP, 시스템포트, 시스템명, 모니터링상태, 로그정보, 생성일시 정보로 구성되어 있습니다 .">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.logId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngLog.logId}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngLog.sysIp}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngLog.sysPort}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.sysNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngLog.sysNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.mntrngSttus.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngLog.mntrngSttus}" escapeXml="false" />
+ </td>
+ </tr>
+ <c:if test="${ntwrkSvcMntrngLog.mntrngSttus} ne '정상'">
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.logInfo.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <textarea id="logInfo" name="logInfo" rows="10" cols="75" title="로그정보"><c:out value="${ntwrkSvcMntrngLog.logInfo}" escapeXml="false" /></textarea>
+ </td>
+ </tr>
+ </c:if>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrngLog.creatDt.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value="${ntwrkSvcMntrngLog.creatDt}" escapeXml="false" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.list" />' onclick="fn_egov_list_ntwrksvcmntrnglog(); return false;" /><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input type="hidden" id="sysIp" name="sysIp" value="<c:out value='${ntwrkSvcMntrngLog.sysIp}'/>"/>
+<input type="hidden" id="sysPort" name="sysPort" value="<c:out value='${ntwrkSvcMntrngLog.sysPort}'/>"/>
+<input type="hidden" id="logId" name="logId" value="<c:out value='${ntwrkSvcMntrngLog.logId}'/>"/>
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchWrd" value="<c:out value='${ntwrkSvcMntrngLogVO.searchWrd}'/>" />
+<input type="hidden" name="searchCnd" value="<c:out value='${ntwrkSvcMntrngLogVO.searchCnd}'/>" />
+<input type="hidden" name="pageIndex" value="<c:out value='${ntwrkSvcMntrngLogVO.pageIndex}'/>" />
+<input name="searchBgnDe" type="hidden" value="<c:out value='${ntwrkSvcMntrngLogVO.searchBgnDe}'/>">
+<input name="searchEndDe" type="hidden" value="<c:out value='${ntwrkSvcMntrngLogVO.searchEndDe}'/>">
+<input name="searchBgnHour" type="hidden" value="<c:out value='${ntwrkSvcMntrngLogVO.searchBgnHour}'/>">
+<input name="searchEndHour" type="hidden" value="<c:out value='${ntwrkSvcMntrngLogVO.searchEndHour}'/>">
+<!-- 검색조건 유지 -->
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngUpdt.jsp (revision 7)
@@ -0,0 +1,141 @@
+<%
+/**
+ * @Class Name : EgovNtwrkSvcMntrngUpdt.jsp
+ * @Description : 네트워크서비스모니터대상 수정
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2010.08.17 장철호 최초 생성
+ * 2018.11.02 신용호 표준프레임워크 v3.8 개선
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.17
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.update" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="ntwrkSvcMntrngVO" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javascript">
+ function fn_egov_init_NtwrkSvcMntrng(){
+
+ }
+
+ function fn_egov_update_ntwrksvcmntrng() {
+ if (!validateNtwrkSvcMntrngVO(document.ntwrkSvcMntrngVO)){
+ return;
+ }
+
+ if (confirm('<spring:message code="common.regist.msg" />')) {
+ document.ntwrkSvcMntrngVO.action = "<c:url value='/utl/sys/nsm/updateNtwrkSvcMntrng.do'/>";
+ document.ntwrkSvcMntrngVO.submit();
+ }
+ }
+
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_ntwrksvcmntrng(){
+ document.ntwrkSvcMntrngVO.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>";
+ document.ntwrkSvcMntrngVO.submit();
+ }
+
+</script>
+</head>
+<body onLoad="fn_egov_init_NtwrkSvcMntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="ntwrkSvcMntrngVO" name="ntwrkSvcMntrngVO" method="post" action="${pageContext.request.contextPath}/utl/sys/nsm/updateNtwrkSvcMntrng.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.update" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <caption>네트워크서비스모니터대상 수정</caption>
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysIp.label" /> <span class="pilsu">*</span></th><!-- 시스템IP -->
+ <td class="left">
+ <form:input path="sysIp1" maxlength="3" title="시스템IP1" cssStyle="width:30px" /> .
+ <form:input path="sysIp2" maxlength="3" title="시스템IP2" cssStyle="width:30px" /> .
+ <form:input path="sysIp3" maxlength="3" title="시스템IP3" cssStyle="width:30px" /> .
+ <form:input path="sysIp4" maxlength="3" title="시스템IP4" cssStyle="width:30px" />
+ <div><form:errors path="sysIp1" cssClass="error"/></div>
+ <div><form:errors path="sysIp2" cssClass="error"/></div>
+ <div><form:errors path="sysIp3" cssClass="error"/></div>
+ <div><form:errors path="sysIp4" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysPort.label" /> <span class="pilsu">*</span></th><!-- 시스템포트 -->
+ <td class="left">
+ <form:input path="sysPort" maxlength="5" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.sysPort.label' />" cssStyle="width:40px"/>
+ <div><form:errors path="sysPort" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.sysNm.label" /> <span class="pilsu">*</span></th><!-- 시스템명 -->
+ <td class="left">
+ <form:input path="sysNm" size="65" maxlength="255" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.sysNm.label' />"/>
+ <div><form:errors path="sysNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.mngrNm.label" /> <span class="pilsu">*</span></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" maxlength="60" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.mngrNm.label' />" cssStyle="width:100px"/>
+ <div><form:errors path="mngrNm" cssClass="error"/></div>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.mngrEmailAddr.label" /> <span class="pilsu">*</span></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="25" maxlength="50" title="<spring:message code='comUtlSysNsm.ntwrkSvcMntrng.mngrEmailAddr.label' />"/>
+ <div><form:errors path="mngrEmailAddr" cssClass="error"/></div>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fn_egov_update_ntwrksvcmntrng(); return false;" /><!-- 저장 -->
+ <span class="btn_s"><a href="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>?searchWrd=<c:out value='${ntwrkSvcMntrngVO.searchWrd}'/>&searchCnd=<c:out value='${ntwrkSvcMntrngVO.searchCnd}'/>&pageIndex=<c:out value='${ntwrkSvcMntrngVO.pageIndex}'/>" onclick="fn_egov_list_ntwrksvcmntrng(); return false;"><spring:message code="button.list" /></a></span><!-- 목록 -->
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<input type="hidden" id="oldSysIp" name="oldSysIp" value="<c:out value='${ntwrkSvcMntrngVO.sysIp}'/>"/>
+<input type="hidden" id="oldSysPort" name="oldSysPort" value="<c:out value='${ntwrkSvcMntrngVO.sysPort}'/>"/>
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchWrd" value="<c:out value='${ntwrkSvcMntrngVO.searchWrd}'/>" />
+<input type="hidden" name="searchCnd" value="<c:out value='${ntwrkSvcMntrngVO.searchCnd}'/>" />
+<input type="hidden" name="pageIndex" value="<c:out value='${ntwrkSvcMntrngVO.pageIndex}'/>" />
+<!-- 검색조건 유지 -->
+
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngList.jsp (revision 7)
@@ -0,0 +1,158 @@
+<%
+/**
+ * @Class Name : EgovNtwrkSvcMntrngList.jsp
+ * @Description : 네트워크서비스모니터링 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2010.08.17 장철호 최초 생성
+ * @ 2018.11.02 신용호 최초 생성
+ *
+ * @author 공통컴포넌트개발팀 장철호
+ * @since 2010.08.17
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysNsm.ntwrkSvcMntrng.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript">
+
+ function fn_egov_init_ntwrksvcmntrng(){
+
+ }
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_ntwrksvcmntrng('1');
+ }
+ }
+
+ function fn_egov_select_ntwrksvcmntrng(pageNo) {
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_inqire_ntwrksvcmntrng(sysIp, sysPort) {
+ document.frm.sysIp.value = sysIp;
+ document.frm.sysPort.value = sysPort;
+ document.frm.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrng.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_insert_ntwrksvcmntrng(){
+ document.frm.action = "<c:url value='/utl/sys/nsm/addNtwrkSvcMntrng.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_log_ntwrksvcmntrng(){
+ document.frm.action = "<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngLogList.do'/>";
+ document.frm.submit();
+ }
+</script>
+</head>
+<body onLoad="fn_egov_init_ntwrksvcmntrng()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <form name="frm" method="post" action="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngList.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="sysIp">
+ <input type="hidden" name="sysPort">
+
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <select name="searchCnd" class="select" title="<spring:message code='select.searchCondition' />">
+ <option value="">--<spring:message code="input.select" />--</option><!-- 선택하세요 -->
+ <option value="0" <c:if test="${searchVO.searchCnd == '0'}">selected="selected"</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.sysNm.label" /></option>
+ <option value="1" <c:if test="${searchVO.searchCnd == '1'}">selected="selected"</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.sysIp.label" /></option>
+ <option value="2" <c:if test="${searchVO.searchCnd == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.mngrNm.label" /></option>
+ <option value="3" <c:if test="${searchVO.searchCnd == '3'}">selected="selected"</c:if> ><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.mntrngSttus.label" /></option>
+ </select>
+ <input class="s_input2 vat" name="searchWrd" type="text" value='<c:out value="${searchVO.searchWrd}"/>' maxlength="35" size="27" onkeypress="press(event);" title="검색어 입력" />
+
+ <input class="s_btn" type="submit" value="<spring:message code='title.inquire' />" title="<spring:message code='title.inquire' />" onclick="fn_egov_select_ntwrksvcmntrng('1'); return false;" /><!-- 조회 -->
+ <span class="btn_b"><a href="<c:url value='/utl/sys/nsm/addNtwrkSvcMntrng.do'/>" onclick="fn_egov_insert_ntwrksvcmntrng('1'); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span><!-- 등록 -->
+ <span class="btn_b"><a href="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrngLogList.do'/>" onclick="fn_egov_log_ntwrksvcmntrng(); return false;" title='<spring:message code="button.log" />'><spring:message code="button.log" /></a></span><!-- 로그 -->
+ </li>
+ </ul>
+ </div>
+
+ </form>
+
+ <table class="board_list">
+ <caption>네트워크서비스모니터링대상 목록</caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:20%" />
+ <col style="width:10%" />
+ <col style="width:30%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.num.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.sysIp.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.sysPort.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.sysNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.mntrngSttus.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysNsm.ntwrkSvcMntrngList.mngrNm.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.sysIp}"/></td>
+ <td><c:out value="${result.sysPort}"/></td>
+ <td>
+ <form name="ntwrkSvcMntrngVO" method="post" action="<c:url value='/utl/sys/nsm/selectNtwrkSvcMntrng.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>">
+ <input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>">
+ <input type="hidden" name="sysIp" value="<c:out value="${result.sysIp}"/>">
+ <input type="hidden" name="sysPort" value="<c:out value="${result.sysPort}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${result.sysNm}"/>" onclick="fn_egov_inqire_ntwrksvcmntrng('<c:out value="${result.sysIp}"/>', '<c:out value="${result.sysPort}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td><c:out value="${result.mntrngSttus}"/></td>
+ <td><c:out value="${result.mngrNm}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="6"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_ntwrksvcmntrng"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/nsm/EgovNtwrkSvcMntrngList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerRegist.jsp (revision 7)
@@ -0,0 +1,176 @@
+<%--
+/**
+ * @Class Name : EgovSynchrnServerRegist.java
+ * @Description : EgovSynchrnServerRegist jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ * @ 2018.11.08 이정은 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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" %>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comUtlSysSsy.synchrnServer.title" /> <spring:message code="title.create" /></title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="synchrnServer" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncSelectSynchrnServerList() {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.action = "<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>";
+ varFrom.submit();
+}
+
+function fncSynchrnServerInsert() {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.action = "<c:url value='/utl/sys/ssy/addSynchrnServer.do'/>";
+
+ if(confirm("<spring:message code='common.save.msg' />")){
+ if(!validateSynchrnServer(varFrom)){
+ return;
+ }else{
+ if(!ipValidate(varFrom.serverIp.value))
+ return;
+ else
+ varFrom.submit();
+ }
+ }
+}
+
+function ipValidate(ipValue) {
+
+ var varFrom = document.getElementById("serverEqpmn");
+ var IPvalue = ipValue;
+
+ var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
+ var ipArray = IPvalue.match(ipPattern);
+
+ var result = "";
+ var thisSegment;
+
+ if(IPvalue == "0.0.0.0") {
+ alert(IPvalue + "<spring:message code="comUtlSysSsy.synchrnServer.validate.exceptIP"/>");/* 는 예외 아이피 입니다. */
+ result = false;
+ } else if (IPvalue == "255.255.255.255") {
+ alert(result =IPvalue + "<spring:message code="comUtlSysSsy.synchrnServer.validate.exceptIP"/>");/* 는 예외 아이피 입니다. */
+ result = false;
+ } else {
+ result = true;
+ }
+
+ if(ipArray == null) {
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.misMatchIP"/> ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ } else {
+ for (var i=1; i<5; i++) {
+
+ thisSegment = ipArray[i];
+
+ if (thisSegment > 255) {
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.misMatchIP"/> ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+
+ if ((i == 0) && (thisSegment > 255)) {
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.misMatchIP"/> ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+ }
+ }
+
+ return result;
+}
+
+-->
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="synchrnServer" method="post" action="${pageContext.request.contextPath}/utl/sys/ssy/addSynchrnServer.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUtlSysSsy.synchrnServer.title" /> <spring:message code="title.create" /></h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="serverNm"><input name="serverNm" id="serverNm" type="text" maxLength="60" size="60" > <form:errors path="serverNm" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="serverIp"><input name="serverIp" id="serverIp" type="text" maxLength="23" style="width:128px" /> <form:errors path="serverIp" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="serverPort"><input name="serverPort" id="serverPort" type="text" maxLength="10" style="width:50px" > <form:errors path="serverPort" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.ftpId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="ftpId"><input name="ftpId" id="ftpId" type="text" maxLength="20" style="width:128px" /> <form:errors path="ftpId" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.ftpPassword.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="ftpPassword"><input name="ftpPassword" id="ftpPassword" type="text" maxLength="20" style="width:128px" /> <form:errors path="ftpPassword" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.synchrnLc.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <label for="synchrnLc"><input name="synchrnLc" id="synchrnLc" type="text" maxLength="255" size="60" > <form:errors path="synchrnLc" /></label>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fncSynchrnServerInsert(); return false;" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>?pageIndex=<c:out value='${synchrnServerVO.pageIndex}'/>&strServerNm=<c:out value="${synchrnServerVO.strSynchrnServerNm}"/>" onclick="fncSelectSynchrnServerList(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="strSynchrnServerNm" value="<c:out value='${synchrnServerVO.strSynchrnServerNm}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${synchrnServerVO.pageIndex}'/>" >
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerUpdt.jsp (revision 7)
@@ -0,0 +1,188 @@
+<%--
+/**
+ * @Class Name : EgovSynchrnServerUpdt.java
+ * @Description : EgovSynchrnServerUpdt jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ * @ 2018.11.02 이정은 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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" %>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<title><spring:message code="comUtlSysSsy.synchrnServer.title" /> <spring:message code="title.update" /></title>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="synchrnServer" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncSelectSynchrnServerList() {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.action = "<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>";
+ varFrom.submit();
+}
+
+function fncSynchrnServerUpdate() {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.action = "<c:url value='/utl/sys/ssy/updtSynchrnServer.do'/>";
+
+ if(confirm("<spring:message code='common.save.msg' />")){
+ if(!validateSynchrnServer(varFrom)){
+ return;
+ }else{
+ if(!ipValidate(varFrom.serverIp.value))
+ return;
+ else
+ varFrom.submit();
+ }
+ }
+}
+
+function fncSynchrnServerDelete() {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.action = "<c:url value='/utl/sys/ssy/removeSynchrnServer.do'/>";
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ varFrom.submit();
+ }
+}
+
+function ipValidate(ipValue) {
+
+ var varFrom = document.getElementById("serverEqpmn");
+ var IPvalue = ipValue;
+
+ var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
+ var ipArray = IPvalue.match(ipPattern);
+
+ var result = "";
+ var thisSegment;
+
+ if(IPvalue == "0.0.0.0") {
+ alert(IPvalue + "는 예외 아이피 입니다.");/* 는 예외 아이피 입니다. */
+ result = false;
+ } else if (IPvalue == "255.255.255.255") {
+ alert(result =IPvalue + "는 예외 아이피 입니다.");/* 는 예외 아이피 입니다. */
+ result = false;
+ } else {
+ result = true;
+ }
+
+ if(ipArray == null) {
+ alert("IP 형식이 일치 하지않습니다. ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ } else {
+ for (var i=1; i<5; i++) {
+
+ thisSegment = ipArray[i];
+
+ if (thisSegment > 255) {
+ alert("IP 형식이 일치 하지않습니다. ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+
+ if ((i == 0) && (thisSegment > 255)) {
+ alert("IP 형식이 일치 하지않습니다. ");/* IP 형식이 일치 하지않습니다. */
+ result = false;
+ }
+ }
+ }
+
+ return result;
+}
+-->
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form:form commandName="synchrnServer" method="post" action="${pageContext.request.contextPath}/utl/sys/ssy/updtSynchrnServer.do">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUtlSysSsy.synchrnServer.title" /> <spring:message code="title.update" /></h2><!-- 동기화대상 서버정보 수정 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="serverId" id="serverId" type="text" value="<c:out value='${synchrnServer.serverId}'/>" style="width:50%" readonly>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="serverNm" id="serverNm" type="text" value="<c:out value='${synchrnServer.serverNm}'/>" maxLength="30" style="width:50%"> <form:errors path="serverNm" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="serverIp" id="serverIp" type="text" value="<c:out value='${synchrnServer.serverIp}'/>" maxLength="30" style="width:50%"> <form:errors path="serverIp" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="serverPort" id="serverPort" type="text" value="<c:out value='${synchrnServer.serverPort}'/>" maxLength="30" style="width:70px"> <form:errors path="serverPort" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.ftpId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="ftpId" id="ftpId" type="text" value="<c:out value='${synchrnServer.ftpId}'/>" maxLength="30" style="width:50%"> <form:errors path="ftpId" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.ftpPassword.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="ftpPassword" id="ftpPassword" type="text" value="<c:out value='${synchrnServer.ftpPassword}'/>" maxLength="30" style="width:50%"> <form:errors path="ftpPassword" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.synchrnLc.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <input name="synchrnLc" id="synchrnLc" type="text" value="<c:out value='${synchrnServer.synchrnLc}'/>" maxLength="30" style="width:50%"> <form:errors path="synchrnLc" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fncSynchrnServerUpdate()" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>?pageIndex=<c:out value='${synchrnServerVO.pageIndex}'/>&strSynchrnServerNm=<c:out value="${synchrnServerVO.strSynchrnServerNm}"/>" onclick="fncSelectSynchrnServerList(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="strServerNm" value="<c:out value='${synchrnServerVO.strSynchrnServerNm}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${synchrnServerVO.pageIndex}'/>" >
+</form:form>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerList.jsp (revision 7)
@@ -0,0 +1,343 @@
+<%--
+/**
+ * @Class Name : EgovSynchrnServerList.java
+ * @Description : EgovSynchrnServerList jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ * @ 2018.11.08 이정은 공통컴포넌트 3.8 개선
+ * @ 2019.12.09 신용호 KISA 보안약점 조치 (위험한 형식 파일 업로드)
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title><spring:message code="comUtlSysSsy.synchrnServer.title" /><spring:message code="title.list" /></title><!-- 동기화대상 서버 목록 -->
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/fms/EgovMultiFiles.js'/>" ></script>
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+
+function fncSelectSynchrnServerList(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>";
+ document.listForm.submit();
+}
+
+function fncSelectSynchrnServer(serverId) {
+ document.listForm.serverId.value = serverId;
+ document.listForm.action = "<c:url value='/utl/sys/ssy/getSynchrnServer.do'/>";
+ document.listForm.submit();
+}
+
+function fncAddSynchrnServerInsert() {
+ if(document.listForm.pageIndex.value == "") {
+ document.listForm.pageIndex.value = 1;
+ }
+ document.listForm.action = "<c:url value='/utl/sys/ssy/addViewSynchrnServer.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+ if (event.keyCode==13) {
+ fncSelectSynchrnServerList('1');
+ }
+}
+
+function fncProcessSynchrn(){
+
+ if(document.hiddenForm.totalRecordCount.value == null ||
+ document.hiddenForm.totalRecordCount.value == '' ||
+ document.hiddenForm.totalRecordCount.value == 0) {
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.noList"/>");/* 동기화 대상목록이 없습니다 */
+ return;
+ }
+
+ if(confirm("<spring:message code='comUtlSysSsy.sync.msg' />")) {
+ document.listForm.action = "<c:url value='/utl/sys/ssy/processSynchrn.do'/>";
+ document.listForm.submit();
+ }
+}
+
+function fncUploadFile(){
+ if(document.fileForm.file.value.length > 0){
+
+ var resultExtension = EgovMultiFilesChecker.checkExtensions("egovComFileUploader", "<c:out value='${fileUploadExtensions}'/>"); // 결과가 false인경우 허용되지 않음
+ if (!resultExtension) return true;
+ var resultSize = EgovMultiFilesChecker.checkFileSize("egovComFileUploader", <c:out value='${fileUploadMaxSize}'/>); // 파일당 1M까지 허용 (1K=1024), 결과가 false인경우 허용되지 않음
+ if (!resultSize) return true;
+
+ document.fileForm.action = "<c:url value='/utl/sys/ssy/uploadFile.do'/>";
+ document.fileForm.submit();
+ }else{
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.noSelectedFile"/>");/* 선택된 파일이 없습니다. */
+ return;
+ }
+}
+
+function fncDeleteFile(deleteFileNm){
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ document.fileForm.deleteFileNm.value = deleteFileNm;
+ document.fileForm.action = "<c:url value='/utl/sys/ssy/deleteFile.do'/>";
+ document.fileForm.submit();
+ }
+}
+
+function fncCheckAll() {
+ var checkField = document.deleteForm.delYn;
+ if(document.deleteForm.checkAll.checked) {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i < checkField.length; i++) {
+ checkField[i].checked = true;
+ }
+ } else {
+ checkField.checked = true;
+ }
+ }
+ } else {
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var j=0; j < checkField.length; j++) {
+ checkField[j].checked = false;
+ }
+ } else {
+ checkField.checked = false;
+ }
+ }
+ }
+}
+
+function fncManageChecked() {
+
+ var checkField = document.deleteForm.delYn;
+ var checkId = document.deleteForm.checkId;
+ var returnValue = "";
+ var returnBoolean = false;
+ var checkCount = 0;
+
+ if(checkField) {
+ if(checkField.length > 1) {
+ for(var i=0; i<checkField.length; i++) {
+ if(checkField[i].checked) {
+ checkCount++;
+ checkField[i].value = checkId[i].value;
+ if(returnValue == "")
+ returnValue = checkField[i].value;
+ else
+ returnValue = returnValue + ";" + checkField[i].value;
+ }
+ }
+ if(checkCount > 0)
+ returnBoolean = true;
+ else {
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.noSelectedFile"/>");/* 선택된 파일이 없습니다. */
+ returnBoolean = false;
+ }
+ } else {
+ if(document.deleteForm.delYn.checked == false) {
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.noSelectedFile"/>");/* 선택된 파일이 없습니다. */
+ returnBoolean = false;
+ }
+ else {
+ returnValue = checkId.value;
+ returnBoolean = true;
+ }
+ }
+ } else {
+ alert("<spring:message code="comUtlSysSsy.synchrnServer.validate.noQueryResult"/>");/* 조회된 결과가 없습니다. */
+ }
+
+ document.deleteForm.deleteFiles.value = returnValue;
+ return returnBoolean;
+}
+
+function fncFileListDelete() {
+ if(fncManageChecked()) {
+ if(confirm("<spring:message code='common.delete.msg' />")) {
+ document.deleteForm.action = "<c:url value='/utl/sys/ssy/deleteFile.do'/>";
+ document.deleteForm.submit();
+ }
+ }
+}
+
+function checkResultMessage() {
+
+ var resultMessage = "<c:out value='${fileUploadResultMessage}'/>";
+ if ( resultMessage != "" ) alert(resultMessage);
+}
+
+-->
+</script>
+
+</head>
+
+<body onload="checkResultMessage();">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<form name="listForm" action="<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>" method="post">
+
+<div class="board">
+ <h1><spring:message code="comUtlSysSsy.synchrnServer.title" /> <spring:message code="title.management" /></h1><!-- 동기화대상 서버 관리 -->
+
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="comUtlSysSsy.synchrnServer.serverNm.label" /> : </label>
+ <input id="strSynchrnServerNm" class="s_input2 vat" name="strSynchrnServerNm" type="text" value='<c:out value="${synchrnServerVO.strSynchrnServerNm}"/>' size="30" onkeypress="press();" title="검색" />
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fncSelectSynchrnServerList('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/ssy/addViewSynchrnServer.do'/>?pageIndex=<c:out value='${synchrnServerVO.pageIndex}'/>&strSynchrnServerNm=<c:out value="${synchrnServerVO.strSynchrnServerNm}"/>" onclick="fncAddSynchrnServerInsert(); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span>
+ <span class="btn_b"><a href="<c:url value='/utl/sys/ssy/processSynchrn.do'/>?pageIndex=<c:out value='${synchrnServerVO.pageIndex}'/>" onclick="fncProcessSynchrn(); return false;" title="동기화"><spring:message code="comUtlSysSsy.synchrnServer.synch"/></a></span><!-- 동기화 -->
+ </li>
+ </ul>
+ </div>
+<input type="hidden" name="serverId">
+<input type="hidden" name="pageIndex" value="<c:if test="${empty synchrnServerVO.pageIndex }">1</c:if><c:if test="${!empty synchrnServerVO.pageIndex }"><c:out value='${synchrnServerVO.pageIndex}'/></c:if>">
+</form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:25%" />
+ <col style="width:25%" />
+ <col style="width:20%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.serverId.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.serverNm.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.serverIp.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.reflctAt.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.lastUpdusrId.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="synchrnServer" items="${synchrnServerList}" varStatus="status">
+ <tr>
+ <td>
+ <form name="item" method="post" action="<c:url value='/utl/sys/ssy/getSynchrnServer.do'/>">
+ <input type="hidden" name="serverId" value="<c:out value="${synchrnServer.serverId}"/>">
+ <input type="hidden" name="pageIndex" value="<c:out value='${synchrnServerVO.pageIndex}'/>">
+ <input type="hidden" name="strSynchrnServerNm" value="<c:out value="${synchrnServerVO.strSynchrnServerNm}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${synchrnServer.serverId}"/>" onclick="fncSelectSynchrnServer('<c:out value="${synchrnServer.serverId}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td><c:out value="${synchrnServer.serverNm}"/></td>
+ <td><c:out value="${synchrnServer.serverIp}"/></td>
+ <td><c:out value="${synchrnServer.reflctAt}"/></td>
+ <td><c:out value="${synchrnServer.lastUpdusrId}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+<form name="hiddenForm">
+ <input type="hidden" name="totalRecordCount" value="<c:out value="${paginationInfo.totalRecordCount}"/>"/>
+</form>
+
+<div class="wTableFrm">
+<form name="fileForm" action="<c:url value='/utl/sys/ssy/uploadFile.do'/>" method="post" enctype="multipart/form-data">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUtlSysSsy.synchrnServerFile.title" /> <spring:message code="title.create" /></h2><!-- 동기화대상 파일 등록 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.fileSelect.label" /></th>
+ <td class="left">
+ <input id="egovComFileUploader" name="file" type="file" size="30" title="<spring:message code='comUtlSysSsy.synchrnServerFile.title' />" >
+ </td>
+ </tr>
+ </table>
+</form>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.create" />' onclick="fncUploadFile(); return false;" />
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<div class="board">
+<form name="deleteForm" action="<c:url value='/utl/sys/ssy/deleteFile.do'/>" method="post">
+ <h1><spring:message code="comUtlSysSsy.synchrnServerFile.title" /> <spring:message code="title.list" /></h1> <!-- 동기화대상 파일 목록 -->
+
+ <div class="search_box" title="<spring:message code='common.searchCondition.msg' />">
+ <ul>
+ <li>
+ <input class="s_btn" type="submit" value='<spring:message code="button.delete" />' title='<spring:message code="button.delete" />' onclick="fncFileListDelete(); return false;" />
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:10%" />
+ <col style="width:80%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><input type="checkbox" name="checkAll" class="check2" onclick="fncCheckAll()" title="전체선택체크박스" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.seq.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.fileNm.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="file" items="${fileList}" varStatus="status">
+ <tr>
+ <td><input type="checkbox" name="delYn" value="<c:out value="${file}"/>"><input type="hidden" name="checkId" value="<c:out value="${file}"/>" /></td>
+ <td><c:out value="${status.count}"/></td>
+ <td><c:out value="${file}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+ <input type="hidden" name="pageIndex" value="<c:out value='${synchrnServerVO.pageIndex}'/>" />
+ <input type="hidden" name="deleteFiles" />
+</form>
+</div>
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerDetail.jsp (revision 7)
@@ -0,0 +1,192 @@
+<%--
+/**
+ * @Class Name : EgovSynchrnServerDetail.java
+ * @Description : EgovSynchrnServerDetail jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ * @ 2018.11.02 이정은 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/button.css' />">
+<title><spring:message code="comUtlSysSsy.synchrnServer.title" /> <spring:message code="title.detail" /></title> <!-- 동기화대상 서버 상세보기 -->
+
+<script type="text/javaScript" language="javascript" defer="defer">
+<!--
+function fncSelectSynchrnServerList() {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.action = "<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>";
+ varFrom.submit();
+}
+
+function fncSynchrnServerUpdateView(serverId) {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.serverId.value = serverId;
+ varFrom.action = "<c:url value='/utl/sys/ssy/updtViewSynchrnServer.do'/>";
+ varFrom.submit();
+}
+
+function fncSynchrnServerDelete(serverId) {
+ var varFrom = document.getElementById("synchrnServer");
+ varFrom.serverId.value = serverId;
+ varFrom.action = "<c:url value='/utl/sys/ssy/removeSynchrnServer.do'/>";
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ varFrom.submit();
+ }
+}
+
+function fncRemoveSynchrnServerFile(fileNm) {
+ var varFrom = document.getElementById("fileList");
+ varFrom.fileNm.value = fileNm;
+ varFrom.action = "<c:url value='/utl/sys/ssy/removeSynchrnServerFile.do'/>";
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ varFrom.submit();
+ }
+}
+
+function fncDownSynchrnServerFile(fileNm) {
+ var varFrom = document.getElementById("fileList");
+ varFrom.fileNm.value = fileNm;
+ varFrom.action = "<c:url value='/utl/sys/ssy/getSynchrnServerFile.do'/>";
+ if(confirm("<spring:message code='comUtlSysSsy.download.msg' />")){
+ varFrom.submit();
+ }
+}
+
+-->
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2><spring:message code="comUtlSysSsy.synchrnServer.title" /> <spring:message code="title.detail" /></h2><!-- 동기화대상 서버정보 상세조회 -->
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${synchrnServer.serverId}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverNm.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${synchrnServer.serverNm}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverIp.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${synchrnServer.serverIp}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.serverPort.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${synchrnServer.serverPort}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.ftpId.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${synchrnServer.ftpId}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.ftpPassword.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${synchrnServer.ftpPassword}'/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysSsy.synchrnServer.synchrnLc.label" /> <span class="pilsu">*</span></th>
+ <td class="left">
+ <c:out value='${synchrnServer.synchrnLc}'/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <span class="btn_s"><a href="<c:url value='/utl/sys/ssy/updtViewSynchrnServer.do'/>?serverId=<c:out value='${synchrnServer.serverId}'/>" onclick="fncSynchrnServerUpdateView('${synchrnServer.serverId}'); return false;"><spring:message code="button.update" /></a></span>
+ <span class="btn_s"><a href="<c:url value='/utl/sys/ssy/removeSynchrnServer.do'/>?serverId=<c:out value='${synchrnServer.serverId}'/>" onclick="fncSynchrnServerDelete('${synchrnServer.serverId}'); return false;"><spring:message code="button.delete" /></a></span>
+ <span class="btn_s"><a href="<c:url value='/utl/sys/ssy/selectSynchrnServerList.do'/>?pageIndex=<c:out value='${synchrnServerVO.pageIndex}'/>&strSynchrnServerNm=<c:out value="${synchrnServerVO.strSynchrnServerNm}"/>" onclick="fncSelectSynchrnServerList(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+<div class="board">
+<form:form commandName="fileList" method="post" action="${pageContext.request.contextPath}/utl/sys/ssy/removeSynchrnServerFile.do">
+ <h1><spring:message code="comUtlSysSsy.synchrn.title" /> <spring:message code="title.list" /></h1><!-- 동기화 파일 목록 -->
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:100px" />
+ <col style="" />
+ <col style="width:100px" />
+ <col style="width:100px" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.seq.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.fileList.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.fileDownload.label" /></th>
+ <th scope="col"><spring:message code="comUtlSysSsy.synchrnServer.fileDelete.label" /></th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="file" items="${fileList}" varStatus="status">
+ <tr>
+ <c:if test="${file != 'noList'}">
+ <td><c:out value="${status.count}"/></td>
+ <td><c:out value="${file}"/> </td>
+ <td><span class="button"><a href="<c:url value='/utl/sys/ssy/getSynchrnServerFile.do'/>?pageIndex=<c:out value='${synchrnServerVO.pageIndex}'/>&strSynchrnServerNm=<c:out value="${synchrnServerVO.strSynchrnServerNm}"/>" onclick="fncDownSynchrnServerFile('<c:out value="${file}"/>'); return false;"><spring:message code="comUtlSysSsy.synchrnServer.fileDownload.label" /></a></span> </td><!-- 다운로드 -->
+ <!-- 동기화대상서버 파일 삭제 기능 -->
+ <td><span class="button"><input type="submit" value="<spring:message code="button.delete" />" onclick="fncRemoveSynchrnServerFile('<c:out value="${file}"/>'); return false;"></span></td>
+ </c:if>
+ <c:if test="${file == 'noList'}">
+ <td colspan="4"><spring:message code="comUtlSysSsy.synchrnServer.nofile.label" /></td>
+ </c:if>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+ <input type="hidden" name="serverId" value="<c:out value='${synchrnServer.serverId}'/>" />
+ <input type="hidden" name="fileNm" />
+</form:form>
+</div>
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/ssy/EgovSynchrnServerDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonRegist.jsp (revision 7)
@@ -0,0 +1,136 @@
+<%
+ /**
+ * @Class Name : EgovComUtlProcessMonRegist.jsp
+ * @Description : EgovComUtlProcessMonRegist 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysPrm.comUtlProcessMonRegist.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <title>${pageTitle}</title>
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+ <script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+ <validator:javascript formName="processMonVO" staticJavascript="false" xhtml="true" cdata="false"/>
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 초기화
+ ******************************************************** */
+ function fn_egov_initl_ProcessMon(){
+ // 첫 입력란에 포커스..
+ processMonVO.processNm.focus();
+ }
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_ProcessMon(){
+ location.href = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonList.do'/>";
+ }
+ /* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+ function fn_egov_regist_ProcessMon(form){
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(!validateProcessMonVO(form)){
+ return;
+ }else{
+ form.submit();
+ }
+ }
+ }
+ /* ********************************************************
+ * '~`!@#$%%^&*-=+\|[{]};:\',<.>/?' 문자열은 제거한다.
+ ******************************************************** */
+ function cleanQueryTerm(form) {
+ var specialChars='~`!@#$%%^&*-=+\|[{]};:\',<>/?';
+ var str=processMonVO.processNm.value;
+ var i, j;
+ if (str == '') {
+ return false;
+ }
+ for (i = 0; i < str.length; i++) {
+ for (j = 0; j < specialChars.length; j++) {
+ if (str.charAt(i) == specialChars.charAt(j))
+ str = str.replace(str.charAt(i), " ");
+ }
+ }
+ processMonVO.processNm.value = str;
+ }
+ -->
+ </script>
+ </head>
+
+ <body onLoad="fn_egov_initl_ProcessMon();">
+
+ <form:form commandName="processMonVO" name="processMonVO" method="post">
+
+ <div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle}</h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /> <span class="pilsu">*</span></th><!-- 프로세스명 -->
+ <td class="left">
+ <form:input onkeyup="cleanQueryTerm()" path="processNm" size="30" maxlength="30"/>
+ <form:errors path="processNm"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPrm.comUtlProcessMon.managerName" /> <span class="pilsu">*</span></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" maxlength="60" cssStyle="width:128px"/>
+ <form:errors path="mngrNm"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysPrm.comUtlProcessMon.managerEmail" /> <span class="pilsu">*</span></th><!-- 관리자이메일 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="60" maxlength="60"/>
+ <form:errors path="mngrEmailAddr"/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.save" />" onclick="fn_egov_regist_ProcessMon(document.processMonVO); return false;" />
+ <input class="s_submit" type="submit" value='<spring:message code="button.list" />' onclick="fn_egov_list_ProcessMon(); return false;" />
+ </div>
+ <div style="clear:both;"></div>
+ </div>
+
+
+ </form:form>
+
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonModify.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonModify.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonModify.jsp (revision 7)
@@ -0,0 +1,133 @@
+<%
+ /**
+ * @Class Name : EgovComUtlProcessMonModify.jsp
+ * @Description : EgovComUtlProcessMonModify 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ 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"><spring:message code="comUtlSysPrm.comUtlProcessMonModify.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>${pageTitle}</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+ <script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+ <validator:javascript formName="processMonVO" staticJavascript="false" xhtml="true" cdata="false"/>
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fn_egov_list_ProcessMon(){
+ location.href = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonList.do'/>";
+ }
+ /* ********************************************************
+ * '~`!@#$%%^&*-=+\|[{]};:\',<.>/?' 문자열은 제거한다.
+ ******************************************************** */
+ function cleanQueryTerm(form) {
+ var specialChars='~`!@#$%%^&*-=+\|[{]};:\',<>/?';
+ var str=processMonVO.processNm.value;
+ var i, j;
+ if (str == '') {
+ return false;
+ }
+ for (i = 0; i < str.length; i++) {
+ for (j = 0; j < specialChars.length; j++) {
+ if (str.charAt(i) == specialChars.charAt(j))
+ str = str.replace(str.charAt(i), " ");
+ }
+ }
+ processMonVO.processNm.value = str;
+ }
+ /* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+ function fn_egov_modify_ProcessMon(form){
+ if(confirm("<spring:message code="common.save.msg" />")){
+ if(!validateProcessMonVO(form)){
+ return;
+ }else{
+ form.submit();
+ }
+ }
+ }
+ -->
+ </script>
+ </head>
+
+ <body>
+ <div class="wTableFrm">
+ <form:form commandName="processMonVO" name="processMonVO" method="post">
+ <input name="cmd" type="hidden" value="Modify">
+ <form:hidden path="processId"/>
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <table width="700" border="0" cellpadding="0" cellspacing="1" class="wTable"
+ summary="<spring:message code="comUtlSysPrm.comUtlProcessMonDetail.summary" />">
+ <caption>${pageTitle}</caption>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 프로세스명 -->
+ <td width="80%">
+ <form:input onkeyup="cleanQueryTerm()" path="processNm" size="60" maxlength="60"/>
+ <form:errors path="processNm"/>
+ </td>
+ </tr>
+ <!-- <tr>
+ <th scope="row" width="20%" height="23" class="required_text">상태<img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th>
+ <td>${processMonVO.procsSttus}</td>
+ </tr> -->
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.managerName" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자명 -->
+ <td width="80%">
+ <form:input path="mngrNm" size="60" maxlength="60"/>
+ <form:errors path="mngrNm"/>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.managerEmail" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자이메일 -->
+ <td width="80%">
+ <form:input path="mngrEmailAddr" size="60" maxlength="60"/>
+ <form:errors path="mngrEmailAddr"/>
+ </td>
+ </tr>
+ </table>
+
+ <table width="700" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="10"></td>
+ </tr>
+ </table>
+
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.save" />" onclick="fn_egov_modify_ProcessMon(document.processMonVO); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_list_ProcessMon(); return false;" />
+ </div>
+
+ </form:form>
+ </DIV>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonModify.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonList.jsp (revision 7)
@@ -0,0 +1,156 @@
+<%
+ /**
+ * @Class Name : EgovComUtlProcessMonList.jsp
+ * @Description : EgovComUtlProcessMonList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.09.7 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysPrm.comUtlProcessMonList.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>${pageTitle}</title>
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+
+ <script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/utl/EgovCmmUtl.js'/>"></script>
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 초기화
+ ******************************************************** */
+ function fn_egov_initl_ProcessMon(){
+ // 첫 입력란에 포커스..
+ var form = document.listForm;
+ form.searchCondition.focus();
+ }
+ /* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+ function linkPage(pageNo){
+ var form = document.listForm;
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonList.do'/>";
+ form.submit();
+ }
+ /* ********************************************************
+ * 조회 처리
+ ******************************************************** */
+ function fnSearch(){
+ var form = document.listForm;
+ form.pageIndex.value = 1;
+ form.submit();
+ }
+ /* ********************************************************
+ * 로그조회 함수
+ ******************************************************** */
+ function fnSearchLog(){
+ location.href = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonLogList.do'/>";
+ }
+ -->
+ </script>
+ </head>
+
+ <body onLoad="fn_egov_initl_ProcessMon();">
+
+ <!-- 자바스크립트 경고 태그 -->
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <div class="board">
+ <h1>${pageTitle}</h1>
+
+ <form name="listForm" action="<c:url value='/utl/sys/prm/EgovComUtlProcessMonList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" class="select" title="조회조건 선택">
+ <option value=''>--<spring:message code="input.select" />--</option><!-- --선택하세요-- -->
+ <option value='1' <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /></option><!-- 프로세스명 -->
+ <option value='2' <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if>><spring:message code="comUtlSysPrm.comUtlProcessMon.status" /></option><!-- 상태 -->
+ </select>
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='${searchVO.searchKeyword}' size="35" title="검색어 입력" />
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fnSearch(); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/prm/EgovComUtlProcessMonRegist.do'/>" onclick="" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span>
+ <input class="s_btn" type="submit" value='<spring:message code="button.log" />' title="<spring:message code="button.log" />" onclick="fnSearchLog(); return false;" />
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:15%" />
+ <col style="width:10%" />
+ <col style="width:15%" />
+ <col style="width:25%" />
+ <col style="width:25%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.seq" /></th><!-- 순번 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /></th><!-- 프로세스명 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.status" /></th><!-- 상태 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.managerName" /></th><!-- 관리자명 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.managerEmail" /></th><!-- 관리자이메일 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.createdDateTime" /></th><!-- 생성일시 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex - 1) * searchVO.pageSize + status.count}"/></td>
+ <td>
+ <a href="<c:url value='/utl/sys/prm/EgovComUtlProcessMon.do'/>?pageIndex=${searchVO.pageIndex}&processNm=${resultInfo.processNm}"><c:out value="${resultInfo.processNm}"/></a>
+ </td>
+ <td>${resultInfo.procsSttus}</td>
+ <td>${resultInfo.mngrNm}</td>
+ <td>${resultInfo.mngrEmailAddr}</td>
+ <td>${resultInfo.creatDt}</td>
+ </tr>
+ </c:forEach>
+ <!-- 데이터가 없을때 화면에 메세지를 출력해준다 -->
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="6">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+
+ <input type="hidden" name="processNm">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+ </form>
+
+ </div>
+
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogList.jsp (revision 7)
@@ -0,0 +1,249 @@
+<%
+/**
+ * @Class Name : EgovComUtlProcessMonLogList.jsp
+ * @Description : EgovComUtlProcessMonLogList 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.09.7 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysPrm.comUtlProcessMonLogList.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>${pageTitle}</title>
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+ <link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+ <script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js'/>" ></script>
+ <script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+ <script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+
+ <script type="text/javascript">
+
+ function fn_egov_init_processMonLog(){
+ document.frm.searchBgnHour.value = '<c:out value="${searchVO.searchBgnHour}"/>';
+ document.frm.searchEndHour.value = '<c:out value="${searchVO.searchEndHour}"/>';
+
+ $("#searchBgnDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDe").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ document.frm.searchKeyword.focus();
+
+
+ }
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_select_processMonLog('1');
+ }
+ }
+
+ function fn_egov_select_processMonLog(pageNo) {
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonLogList.do'/>";
+
+ var bgnDe = document.frm.searchBgnDe.value;
+ var endDe = document.frm.searchEndDe.value;
+
+ if(bgnDe != ""){
+ if(isDate(bgnDe, "검색시작일자") == false) {
+ return;
+ }
+ }
+
+ if(endDe != ""){
+ if(isDate(endDe, "검색종료일자") == false) {
+ return;
+ }
+ }
+
+ var bgnHour = document.frm.searchBgnHour.value;
+ var endHour = document.frm.searchEndHour.value;
+
+ var bgnDeHour = "";
+ var endDeHour = "";
+ if(bgnDe != "" && endDe != ""){
+ if(bgnHour == ""){
+ document.frm.searchBgnHour.value = "00";
+ bgnHour = "00";
+ }
+ if(endHour == ""){
+ document.frm.searchEndHour.value = "00";
+ endHour = "00";
+ }
+ bgnDeHour = bgnDe + bgnHour;
+ endDeHour = endDe + endHour;
+
+ if(bgnDeHour > endDeHour){
+ alert("검색종료일시가 검색시작일시보다 빠를수 없습니다.");
+ return;
+ }
+ }
+ document.frm.submit();
+ }
+
+ function fn_egov_inqire_processMonLog(processNm, logId) {
+ document.frm.processNm.value = processNm;
+ document.frm.logId.value = logId;
+ document.frm.action = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonLog.do'/>";
+ document.frm.submit();
+ }
+
+ /* ********************************************************
+ * 마스터목록조회 함수
+ ******************************************************** */
+ function fnSearch(){
+ location.href = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonList.do'/>";
+ }
+ </script>
+ </head>
+
+ <body onLoad="fn_egov_init_processMonLog()">
+
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <div class="board">
+ <h1>${pageTitle}</h1>
+
+ <form name="frm" method="post" action="<c:url value='/utl/sys/prm/EgovComUtlProcessMonLogList.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="processNm">
+ <input type="hidden" name="logId">
+
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <input type="hidden" name="cal_url" id="cal_url" value="<c:url value='/sym/cal/EgovNormalCalPopup.do'/>" >
+ <input name="searchBgnDe" id="searchBgnDe" type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchBgnDe}"/>" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchBgnDe" />"><!-- 조회시작일자 입력 -->
+ <select name="searchBgnHour" class="select" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchBgnHour" />"><!-- 조회시작 시 선택 -->
+ <c:forEach var="bgnHour" items="${searchBgnHour}" varStatus="status">
+ <option value="<c:out value="${bgnHour.code}"/>"><c:out value="${bgnHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+ ~
+ <input name="searchEndDe" id="searchEndDe"type="text" size="10" maxlength="10" value="<c:out value="${searchVO.searchEndDe}"/>" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchEndDe" />"><!-- 조회종료일자 입력 -->
+ <select name="searchEndHour" class="select" title="<spring:message code="comUtlSysPrm.comUtlProcessMon.searchEndHour" />"><!-- 조회종료 시 선택 -->
+ <c:forEach var="endHour" items="${searchEndHour}" varStatus="status">
+ <option value="<c:out value="${endHour.code}"/>"><c:out value="${endHour.codeNm}"/></option>
+ </c:forEach>
+ </select>
+
+ <select name="searchCondition" class="select" title="<spring:message code="select.searchCondition" />">
+ <option value=''>--<spring:message code="input.select" />--</option><!-- 선택하세요 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /></option><!-- 프로세스명 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysPrm.comUtlProcessMon.status" /></option><!-- 상태 -->
+ </select>
+ <input name="searchKeyword" type="text" size="27" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="35" onkeypress="press(event);" title="검색어 입력">
+
+ <!-- <input class="s_input2 vat" name="searchKeyword" type="text" value="" size="25" onkeypress="press();" title="사용자명검색" /> -->
+ <input class="s_btn" type="submit" value="<spring:message code="button.search" />" title="<spring:message code="button.search" />" onclick="fn_egov_select_processMonLog('1'); return false;" />
+ <input class="s_btn" type="submit" value="<spring:message code="button.list" />" title="<spring:message code="button.list" />" onclick="fnSearch(); return false;" />
+ </li>
+ </ul>
+ </div>
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:30%" />
+ <col style="width:20%" />
+ <col style="width:15%" />
+ <col style="width:25%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.seq" /></th><!-- 순번 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.logID" /></th><!-- 로그ID -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /></th><!-- 프로세스명 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.status" /></th><!-- 상태 -->
+ <th scope="col"><spring:message code="comUtlSysPrm.comUtlProcessMon.createdDateTime" /></th><!-- 생성일시 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${resultList}" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td><c:out value="${result.logId}"/></td>
+ <td>
+ <form name="processMonLogVO" method="post" action="<c:url value='EgovComUtlProcessMonLogList.do'/>">
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input name="searchCondition" type="hidden" value="<c:out value='${searchVO.searchCondition}'/>">
+ <input name="searchKeyword" type="hidden" value="<c:out value='${searchVO.searchKeyword}'/>">
+ <input name="searchBgnDe" type="hidden" value="<c:out value='${searchVO.searchBgnDe}'/>">
+ <input name="searchEndDe" type="hidden" value="<c:out value='${searchVO.searchEndDe}'/>">
+ <input name="searchBgnHour" type="hidden" value="<c:out value='${searchVO.searchBgnHour}'/>">
+ <input name="searchEndHour" type="hidden" value="<c:out value='${searchVO.searchEndHour}'/>">
+ <span class="link"><input type="submit" value="<c:out value="${result.processNm}"/>"
+ onclick="javascript:fn_egov_inqire_processMonLog('<c:out value="${result.processNm}"/>'
+ , '<c:out value="${result.logId}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td><c:out value="${result.procsSttus}"/></td>
+ <td><c:out value="${result.creatDt}"/></td>
+ </tr>
+ </c:forEach>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="5"><spring:message code="common.nodata.msg" /></td>
+ </tr>
+ </c:if>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select_processMonLog"/>
+ </ul>
+ </div>
+ </div>
+
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonDetail.jsp (revision 7)
@@ -0,0 +1,107 @@
+<%
+ /**
+ * @Class Name : EgovComUtlProcessMonDetail.jsp
+ * @Description : EgovComUtlProcessMonDetail 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysPrm.comUtlProcessMonDetail.title"/></c:set>
+
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>${pageTitle}</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fnList(){
+ location.href = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonList.do'/>";
+ }
+ /* ********************************************************
+ * 수정화면으로 바로가기
+ ******************************************************** */
+ function fnModify(){
+ var varForm = document.all["Form"];
+ varForm.action = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonModify.do'/>";
+ varForm.processNm.value = "${result.processNm}";
+ varForm.submit();
+ }
+ /* ********************************************************
+ * 삭제 처리 함수
+ ******************************************************** */
+ function fnDelete(){
+ if (confirm("<spring:message code="common.delete.msg" />")) {
+ var varForm = document.all["Form"];
+ varForm.action = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonRemove.do'/>";
+ varForm.processNm.value = "${result.processNm}";
+ varForm.submit();
+ }
+ }
+ -->
+ </script>
+ </head>
+
+ <body>
+
+ <!-- 자바스크립트 경고 태그 -->
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <div class="wTableFrm">
+ <form name="Form" action="" method="post">
+ <input name="processNm" type="hidden">
+ <h2> ${pageTitle}</h2>
+ <table width="700" border="0" cellpadding="0" cellspacing="1" class="wTable"
+ summary="<spring:message code="comUtlSysPrm.comUtlProcessMonDetail.summary" />">
+ <caption>${pageTitle}</caption>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 프로세스명 -->
+ <td class="left">${result.processNm}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.status" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 상태 -->
+ <td class="left">${result.procsSttus}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.managerName" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자명 -->
+ <td class="left">${result.mngrNm}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.managerEmail" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 관리자이메일 -->
+ <td class="left">${result.mngrEmailAddr}</td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.update" />" onclick="fnModify(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.delete" />" onclick="fnDelete(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fnList(); return false;" />
+ </div>
+
+ </form>
+ </DIV>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogDetail.jsp (revision 7)
@@ -0,0 +1,96 @@
+<%
+ /**
+ * @Class Name : EgovComUtlProcessMonLogDetail.jsp
+ * @Description : EgovComUtlProcessMonLogDetail 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.06.30 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.05.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysPrm.comUtlProcessMonLogDetail.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+ <head>
+ <title>${pageTitle}</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+ <link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+
+ <script type="text/javaScript" language="javascript">
+ <!--
+ /* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+ function fnList(){
+ location.href = "<c:url value='/utl/sys/prm/EgovComUtlProcessMonLogList.do'/>";
+ }
+ -->
+ </script>
+ </head>
+
+ <body>
+
+ <!-- 자바스크립트 경고 태그 -->
+ <noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+ <DIV class="wTableFrm">
+ <form name="Form" action="" method="post">
+ <input name="processNm" type="hidden">
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <table width="700" border="0" cellpadding="0" cellspacing="1" class="wTable"
+ summary="<spring:message code="comUtlSysPrm.comUtlProcessMonLogDetail.summary" />">
+ <caption>${pageTitle}</caption>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.logID" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 로그ID -->
+ <td class="left">${result.logId}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.processID" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 프로세스ID -->
+ <td class="left">${result.processId}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.processName" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 프로세스명 -->
+ <td class="left">${result.processNm}</td>
+ </tr>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.status" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 상태 -->
+ <td class="left">${result.procsSttus}</td>
+ </tr>
+ <c:if test="${result.procsSttus == '오류'}">
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.logInfo" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 로그 -->
+ <td class="left">${result.logInfo}</td>
+ </tr>
+ </c:if>
+ <tr>
+ <th scope="row" width="20%" height="23" class="required_text"><spring:message code="comUtlSysPrm.comUtlProcessMon.lastCreatedDateTime" /><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력표시" width="15" height="15"></th><!-- 마지막 생성일시 -->
+ <td class="left">${result.creatDt}</td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fnList(); return false;" />
+ </div>
+ </form>
+ </DIV>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovComUtlProcessMonLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovProcessMon.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovProcessMon.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovProcessMon.jsp (revision 7)
@@ -0,0 +1,32 @@
+<%@ page language="java" import= "java.io.*,java.util.*" contentType="text/html; charset=euc-kr" session="false" %>
+
+<html lang="ko">
+<%
+
+ String command = "netstat -an"; // <---- ������ ����ɾ�
+ int lineCount = 0;
+ String line="";
+
+ Runtime rt = Runtime.getRuntime();
+ Process ps = null;
+
+ try {
+ ps = rt.exec(command);
+
+ BufferedReader br =
+ new BufferedReader(
+ new InputStreamReader(
+ new SequenceInputStream(ps.getInputStream(), ps.getErrorStream())));
+
+ while((line = br.readLine()) != null){
+%>
+ <%=line%><br> <!-- ��� ȭ�鿡 �Ѹ���... -->
+<%
+ }
+ br.close();
+
+ } catch(IOException e) {
+ throw new RuntimeException(e);
+ }
+%>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/prm/EgovProcessMon.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirect.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirect.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirect.jsp (revision 7)
@@ -0,0 +1,337 @@
+<%--
+ Class Name : EgovWebStandardInspectionUriDirect.jsp
+ Description : 웹표준검사
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2010.10.05 박종선 최초 생성
+ 2020.10.29 신용호 KISA 보안약점 조치 (경로 조작 및 자원 삽입)
+
+ author : 박종선
+ since : 2010.10.05
+--%>
+<%@ page language="java" contentType="text/html; charset=utf-8"
+ buffer="none"%>
+<%@page import="java.util.*"%>
+<%@page import="java.util.regex.*"%>
+<%@page import="java.io.*"%>
+<%@page import="java.net.*"%>
+<%@page import="egovframework.com.utl.fcc.service.EgovNumberCheckUtil"%>
+<%@page import="egovframework.com.cmm.EgovWebUtil"%>
+<%@page import="egovframework.com.cmm.util.EgovResourceCloseHelper"%>
+<%!public class HttpRequestor {
+
+ public static final String CRLF = "\r\n";
+
+ /**
+ * 연결할 URL
+ */
+ private URL targetURL;
+
+ /**
+ * 파라미터 목록을 저장하고 있다.
+ * 파라미터 이름과 값이 차례대로 저장된다.
+ */
+ private ArrayList list;
+
+ public HttpRequestor(URL target) {
+ this(target, 20);
+ }
+
+ /**
+ * 파라미터를 추가한다.
+ * @param parameterName 파라미터 이름
+ * @param parameterValue 파라미터 값
+ * @exception IllegalArgumentException parameterValue가 null일 경우
+ */
+ public void addParameter(String parameterName, String parameterValue) {
+ if (parameterValue == null)
+ throw new IllegalArgumentException("parameterValue can't be null!");
+
+ list.add(parameterName);
+ list.add(parameterValue);
+ }
+
+ public void addParameterBuf(String parameterName, StringBuffer parameterValue) {
+ if (parameterValue == null)
+ throw new IllegalArgumentException("parameterValue can't be null!");
+
+ list.add(parameterName);
+ list.add((StringBuffer) parameterValue);
+ }
+
+ /**
+ * HttpRequest를 생성한다.
+ *
+ * @param target HTTP 메시지를 전송할 대상 URL
+ */
+ public HttpRequestor(URL target, int initialCapicity) {
+ this.targetURL = target;
+ this.list = new ArrayList();
+ }
+
+ private String makeDelimeter() {
+ return "---------------------------7d115d2a20060c";
+ }
+
+ public InputStream sendMultipartPost() throws IOException {
+
+ HttpURLConnection conn = (HttpURLConnection) targetURL.openConnection();
+
+ // Delimeter 생성
+ String delimeter = makeDelimeter();
+ byte[] newLineBytes = CRLF.getBytes("utf-8");
+ byte[] delimeterBytes = delimeter.getBytes("utf-8");
+ byte[] dispositionBytes = "Content-Disposition: form-data; name=".getBytes("utf-8");
+ String dispositionStr = "Content-Disposition: form-data; name=";
+ byte[] quotationBytes = "\"".getBytes("utf-8");
+ byte[] contentTypeBytes = "Content-Type: application/octet-stream".getBytes("utf-8");
+ byte[] fileNameBytes = "; filename=".getBytes("utf-8");
+ byte[] twoDashBytes = "--".getBytes("utf-8");
+
+ conn.setRequestMethod("POST");
+ conn.setRequestProperty("Charset", "utf-8");
+ conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + delimeter);
+ conn.setDoInput(true);
+ conn.setDoOutput(true);
+ conn.setUseCaches(false);
+
+ BufferedOutputStream out = null;
+
+ try {
+ out = new BufferedOutputStream(conn.getOutputStream());
+
+ Object[] obj = new Object[list.size()];
+ list.toArray(obj);
+
+ for (int i = 0; i < obj.length; i += 2) {
+ // Delimeter 전송
+ out.write(twoDashBytes);
+ out.write(delimeterBytes);
+ out.write(newLineBytes);
+
+ // 파라미터 이름 출력
+ out.write(dispositionBytes);
+ out.write(quotationBytes);
+ out.write(((String) obj[i]).getBytes("utf-8"));
+ out.write(quotationBytes);
+
+ if (obj[i + 1] instanceof String) {
+ // String 이라면
+ out.write(newLineBytes);
+ out.write(newLineBytes);
+ // 값 출력
+ out.write(((String) obj[i + 1]).getBytes("utf-8"));
+ out.write(newLineBytes);
+ } else if (obj[i + 1] instanceof StringBuffer) {
+ // StringBuffer 이라면
+ out.write(newLineBytes);
+ out.write(newLineBytes);
+ // 값 출력
+
+ out.write(((StringBuffer) obj[i + 1]).toString().getBytes("utf-8"));
+ out.write(newLineBytes);
+ //System.out.println("HttpRequestor>" + ((StringBuffer)obj[i+1]).toString().replaceAll("\t","").substring(0,130).toString());
+ } else {
+ // 파라미터의 값이 File 이나 NullFile인 경우
+ if (obj[i + 1] instanceof File) {
+ File file = (File) obj[i + 1];
+ // File이 존재하는 지 검사한다.
+ out.write(fileNameBytes);
+ out.write(quotationBytes);
+ out.write(file.getAbsolutePath().getBytes("utf-8"));
+ out.write(quotationBytes);
+ } else {
+ // NullFile 인 경우
+ out.write(fileNameBytes);
+ out.write(quotationBytes);
+ out.write(quotationBytes);
+ }
+ out.write(newLineBytes);
+ out.write(contentTypeBytes);
+ out.write(newLineBytes);
+ out.write(newLineBytes);
+ // File 데이터를 전송한다.
+ if (obj[i + 1] instanceof File) {
+ File file = (File) obj[i + 1];
+ // file에 있는 내용을 전송한다.
+ BufferedInputStream is = null;
+ try {
+ is = new BufferedInputStream(new FileInputStream(file));
+ byte[] fileBuffer = new byte[1024 * 8]; // 8k
+ int len = -1;
+ while ((len = is.read(fileBuffer)) != -1) {
+ out.write(fileBuffer, 0, len);
+ }
+ } finally {
+ if (is != null)
+ try {
+ is.close();
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ }
+ out.write(newLineBytes);
+ } // 파일 데이터의 전송 블럭 끝
+ if (i + 2 == obj.length) {
+ // 마지막 Delimeter 전송
+ out.write(twoDashBytes);
+ out.write(delimeterBytes);
+ out.write(twoDashBytes);
+ out.write(newLineBytes);
+ }
+ } // for 루프의 끝
+
+ out.flush();
+ } finally {
+ if (out != null)
+ out.close();
+ }
+ return conn.getInputStream();
+ }
+ }%>
+<%
+ response.setContentType("text/html;charset=utf-8");
+ request.setCharacterEncoding("utf-8");
+
+ String sUri = request.getParameter("uri") == null ? "" : (String) request.getParameter("uri");
+ String sNum = request.getParameter("num") == null ? "" : (String) request.getParameter("num");
+
+ sUri = EgovWebUtil.clearXSSMinimum(sUri);
+ sNum = EgovWebUtil.clearXSSMinimum(sNum);
+
+ String sMatcherFind = "";
+ int nLine = 0;
+ String[] arrMatcherFind;
+ String str = null;
+
+ StringBuffer strBufInputHtml = new StringBuffer();
+
+ String boundary = "nvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnv";
+ int bufferSize = 16384;
+
+ BufferedReader buffResInput = null;
+ BufferedReader buffResOld = null;
+ try {
+
+ //URL 체크
+ sUri = EgovWebUtil.filePathBlackList(sUri);
+ URL urlCheck = new URL(sUri);
+ urlCheck.openStream();
+
+ URLConnection urlConn = urlCheck.openConnection();
+ urlConn.setRequestProperty("Cookie", "JSESSIONID=" + session.getId());
+
+ buffResOld = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "utf-8"));
+ while ((str = buffResOld.readLine()) != null) {
+ strBufInputHtml.append(str + "\r\n");
+ //out.println(str);
+ }
+
+ HttpRequestor requestor = new HttpRequestor(new URL("http://validator.w3.org/check"));
+ requestor.addParameterBuf("fragment", (StringBuffer) strBufInputHtml);
+ requestor.addParameter("direct_prefill_no", "0");
+ requestor.addParameter("direct-doctype", "Inline");
+ requestor.addParameter("group", "0");
+ requestor.addParameter("direct_prefill_no", "0");
+
+ BufferedReader br = null;
+
+ try {
+ br = new BufferedReader(new InputStreamReader(requestor.sendMultipartPost(), "utf-8"));
+
+ StringBuffer resp = new StringBuffer();
+
+ String line;
+ Pattern pattern;
+ Matcher matcher;
+
+ if (1 == 1) { // 연결이 성공적일때
+ //out.println("<xmp>"); BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ //buffResInput = new BufferedReader(new InputStreamReader(uc.getInputStream(), "utf-8"));
+ while ((str = br.readLine()) != null) {
+ if (str != null) {
+ //1차검색
+ pattern = Pattern.compile("\\sErrors*|\\swarning*|Passed");
+ matcher = pattern.matcher(str);
+
+ if (matcher.find()) {
+ sMatcherFind = str;
+ break;
+ }
+ }
+
+ if (nLine > 100) {
+ break;
+ }
+
+ nLine++;
+ }
+
+ if (buffResInput != null)
+ buffResInput.close();
+ //out.println("</xmp>");
+ }
+ } finally {
+ EgovResourceCloseHelper.close(br);
+ }
+
+ if (sMatcherFind.trim().equals("Passed")) {
+%>
+<script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '0 Errors';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '0 warning(s)';
+ </script>
+
+<%
+ } else if (!sMatcherFind.equals("")) {
+
+ if (sMatcherFind.indexOf(",") > -1) {
+ arrMatcherFind = sMatcherFind.split(",");
+%>
+
+<script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '<%=arrMatcherFind[0].replaceAll("<(/)?([a-zA-Z0-9]*)(\\s[a-zA-Z0-9]*=[^>]*)?(\\s)*(/)?>", "")%>';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '<%=arrMatcherFind[1].replaceAll("<(/)?([a-zA-Z0-9]*)(\\s[a-zA-Z0-9]*=[^>]*)?(\\s)*(/)?>", "")%>';
+ </script>
+
+<%
+ } else if (sMatcherFind.indexOf("E") > -1) {
+%>
+<script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '<%=sMatcherFind.replaceAll("<(/)?([a-zA-Z0-9]*)(\\s[a-zA-Z0-9]*=[^>]*)?(\\s)*(/)?>", "")%>';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '0 warning(s)';
+ </script>
+<%
+ } else if (sMatcherFind.indexOf("s") > -1) {
+%>
+<script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '0 Errors';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '<%=sMatcherFind.replaceAll("<(/)?([a-zA-Z0-9]*)(\\s[a-zA-Z0-9]*=[^>]*)?(\\s)*(/)?>", "")%>';
+ </script>
+<%
+ }
+%>
+<%
+ }
+ } catch (java.net.UnknownHostException ex) {
+%>
+<script type="text/javaScript" language="javascript">
+ alert("입력하신 URL[<%=sUri%>] \n\n잘못 되었습니다!");
+ </script>
+<%
+ } catch (java.net.MalformedURLException ex) {
+%>
+<script type="text/javaScript" language="javascript">
+ alert("입력하신 URL[<%=sUri%>] \n\n잘못 되었습니다!");
+ </script>
+<%
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ } finally {
+ EgovResourceCloseHelper.close(buffResInput, buffResOld);
+ }
+%>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirect.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspection.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspection.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspection.jsp (revision 7)
@@ -0,0 +1,204 @@
+<%
+ /**
+ * @Class Name : EgovWebStandardInspection.jsp
+ * @Description : 웹표준검사
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.10.05 박종선 최초 생성
+ *
+ * @author 공통서비스팀
+ * @since 2010.10.05
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+%>
+<%@ page language="java" contentType="text/html; charset=UTF-8" buffer="none"%>
+<%@page import="java.util.*" %>
+<%@page import="java.util.regex.*" %>
+<%@page import="java.text.*" %>
+<%@page import="java.io.*" %>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>웹표준 검사</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link href="/css/egovframework/com/cmm/utl/com.css" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="/js/egovframework/com/uss/ion/rss/jquery.js"></script>
+<script type="text/javaScript" language="javascript">
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** a*/
+function fn_egov_init_WebStandardInspection(){
+
+
+
+
+}
+/* ********************************************************
+ * 화면 검사
+ ******************************************************** a*/
+function fn_egov_submit_WebStandardInspection(form, nNmm){
+
+ document.getElementById('divErr'+nNmm).innerHTML='';
+ document.getElementById('divWar'+nNmm).innerHTML='';
+
+ //url 검사 모드시
+ /*
+ if(form.rdoUri[1].checked){
+ var name=form.uri.value;
+ var reg_name=/(127\.0\.0\.1|localhost)/g;
+
+ if( reg_name.test(name) ){
+ alert("Url 검사 에서는[localhost/127.0.0.1] 해당 주소를 검사 할수 없습니다.!");
+ return false;
+ }
+
+ }
+ */
+
+ if(form.uri.value == ''){
+ alert('웹표준검사 URL을 입력해주세요!');
+ form.uri.focus();
+ return false;
+ }
+
+ if(form.rdoUri[0].checked == true){
+ form.action='/EgovPageLink.do?link=utl/sys/wsi/EgovWebStandardInspectionUriDirect';
+ }else{
+ form.action='/EgovPageLink.do?link=utl/sys/wsi/EgovWebStandardInspectionUri';
+ }
+
+ return true;
+
+}
+
+/* ********************************************************
+ * 상세보기 스크립트
+ ******************************************************** */
+ function fn_egov_submit_WebStandardInspectionLink(form){
+
+ if(form.uri.value == ''){
+ alert('웹표준검사 URL을 입력해주세요!');
+ form.uri.focus();
+ return;
+ }
+
+ document.formHidden.uri.value = form.uri.value;
+
+ if(form.rdoUri[0].checked == true){
+ document.formHidden.action = "/EgovPageLink.do?link=utl/sys/wsi/EgovWebStandardInspectionUriDirectLink";
+ }else{
+ document.formHidden.action = "http://validator.w3.org/check";
+ }
+
+ document.formHidden.submit();
+}
+
+</script>
+<style type="text/css">
+.btnNew {
+border : 0 solid #000;
+color : #000000;
+background-image : url(/images/egovframework/com/cmm/uss/umt/button/bu2_bg.gif);
+cursor : pointer;
+}
+</style>
+</head>
+<body onLoad="fn_egov_init_WebStandardInspection()">
+<DIV id="content" style="width:712px">
+<!-- noscript 테그 -->
+<noscript class="noScriptTitle">자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript>
+
+<!-- 상단 타이틀 영역 -->
+<table width="100%" cellpadding="8" class="table-search" border="0" summary="상단 타이틀을 제공한다.">
+ <tr>
+ <td width="100%"class="title_left">
+ <h1><img src="/images/egovframework/com/cmm/uss/umt/icon/tit_icon.gif" width="16" height="16" hspace="3" style="vertical-align:middle; display:inline-block;" alt=""> 웹표준 검사</h1></td>
+ </tr>
+</table>
+
+<!-- 줄간격조정 -->
+<table width="100%" cellspacing="0" cellpadding="0" border="0" summary="줄간격을제공한다.">
+<tr>
+ <td height="3px"></td>
+</tr>
+</table>
+
+<!-- 상단 등롬폼 영역 START -->
+<table width="100%" border="1" cellpadding="0" cellspacing="1" class="table-register"
+summary="이 표는 웹표준검사 대상 정보를 제공하며, URL명, Public IP 여부, Warniing, 상세보기 정보로 구성되어 있습니다 .">
+<tr>
+ <th scope="col" height="23" class="required_text"><center>URL명</center></th>
+ <th scope="col" width="170px" height="23" class="required_text" align="center"><center>Public IP 여부</center></th>
+ <th scope="col" width="90px" height="23" class="required_text" align="center"><center>Errors</center></th>
+ <th scope="col" width="90px" height="23" class="required_text" align="center"><center>Warniing</center></th>
+ <th scope="col" width="70px" height="23" class="required_text" align="center"><center>상세보기</center></th>
+
+</tr>
+</table>
+<%
+ for(int i=1 ; i<10; i++){
+%>
+<form name="webInspection" method="post" action="/EgovPageLink.do?link=utl/sys/wsi/EgovWebStandardInspectionUri" target="ifr_hidden">
+<table width="100%" border="1" cellpadding="0" cellspacing="1" class="table-register" summary=" ">
+<tr>
+ <td style="padding:2px 2px 2px 2px;" height="23">
+ <input name="uri" type="text" size="73" value="" maxlength="250" style="width:98%;">
+ </td>
+ <td width="170px" align="center">
+ <div style="float:left;">
+ <input type="radio" name="rdoUri" value="dUri">Private<input type="radio" name="rdoUri" value="uri" checked>Public
+ </div>
+ <div style="float:left;">
+ <table border="0" cellspacing="0" cellpadding="0" align="center" summary="목록/저장버튼을 제공한다.">
+ <tr>
+ <td> </td>
+ <td><img src="/images/egovframework/com/cmm/uss/umt/btn/bu2_left.gif" width="8" height="20"></td>
+ <td class="btnBackground" nowrap><input type="submit" value="검색" name="btnSearch" onClick="if(fn_egov_submit_WebStandardInspection(this.form,'<%=i%>') == false){return false;};" class="btnNew" style="height:20px;width:26px;" >
+ </td>
+ <td><img src="/images/egovframework/com/cmm/uss/umt/btn/bu2_right.gif" width="8" height="20"></td>
+ </tr>
+ </table>
+
+ </div>
+ </td>
+ <td width="90px" align="center"><div id="divErr<%=i%>"> </div></td>
+ <td width="90px" align="center"><div id="divWar<%=i%>"> </div></td>
+ <td width="70px" align="center">
+
+ <table border="0" cellspacing="0" cellpadding="0" align="center" summary="목록/저장버튼을 제공한다.">
+ <tr>
+ <td> </td>
+ <td><img src="/images/egovframework/com/cmm/uss/umt/btn/bu2_left.gif" width="8" height="20"></td>
+ <td class="btnBackground" nowrap><input type="button" value="보기" name="btnSearch" onClick="fn_egov_submit_WebStandardInspectionLink(this.form);" class="btnNew" style="height:20px;width:26px;" ></td>
+ <td><img src="/images/egovframework/com/cmm/uss/umt/btn/bu2_right.gif" width="8" height="20"></td>
+ </tr>
+ </table>
+ <input name="num" type="hidden" value="<%=i%>">
+ </td>
+</tr>
+</table>
+</form>
+<%
+ }
+%>
+
+<!-- 줄간격조정 -->
+<table width="100%" cellspacing="0" cellpadding="0" border="0" summary="화면 줄간격을 조정한다.">
+<tr>
+ <td height="3px"></td>
+</tr>
+
+</table>
+<!-- Hiden frame visibility: hidden; -->
+<iframe name="ifr_hidden" id="ifr_hidden1" src="about:blank;" style="width:100%;height:400px;visibility: hidden;"></iframe>
+<form name="formHidden" id="formHidden" action="http://validator.w3.org/check" method="post" target="_blank" >
+<input name="uri" type="hidden" value="">
+</form>
+</DIV>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspection.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUri.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUri.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUri.jsp (revision 7)
@@ -0,0 +1,130 @@
+<%--
+ Class Name : govWebStandardInspectionUri.jsp
+ Description : 웹표준검사
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- -------- ---------------------------
+ 2010.10.05 박종선 최초 생성
+ 2020.10.29 신용호 KISA 보안약점 조치 (경로 조작 및 자원 삽입)
+
+ author : 박종선
+ since : 2010.10.05
+--%>
+<%@ page language="java" contentType="text/html; charset=UTF-8" buffer="none"%>
+<%@page import="egovframework.com.utl.fcc.service.EgovNumberCheckUtil"%>
+<%@page import="java.util.*" %>
+<%@page import="java.util.regex.*" %>
+<%@page import="java.io.*" %>
+<%@page import="java.net.*" %>
+<%@ page import="egovframework.com.cmm.EgovWebUtil" %>
+<%
+
+String sUri = request.getParameter("uri") == null ? "" : (String)request.getParameter("uri");
+String sNum = request.getParameter("num") == null ? "" : (String)request.getParameter("num");
+
+// 2011.10.25 보안점검 후속조치
+sUri = EgovWebUtil.clearXSSMinimum(sUri);
+sNum = EgovWebUtil.clearXSSMinimum(sNum);
+
+
+BufferedReader buf = null;
+String sMatcherFind = "";
+int nLine = 0;
+String[] arrMatcherFind;
+
+try {
+ sUri = EgovWebUtil.filePathBlackList(sUri);
+ URL urlCheck = new URL(sUri);
+ urlCheck.openStream();
+
+ //URLConnection 객체를 생성하기 위해 URL객체의 openConnection메소드 이용
+ //반환형은 InputStream 1차 스트림 형태이므로 BufferedRead형태 사용 가능
+ URL url = new URL("http://validator.w3.org/check?uri="+sUri);
+
+ URLConnection uc = url.openConnection();
+ uc.setRequestProperty("Cookie","JSESSIONID="+session.getId());
+
+
+ buf = new BufferedReader(new InputStreamReader(uc.getInputStream(), "utf-8"));
+ String str = null;
+
+
+ Pattern pattern;
+ Matcher matcher;
+ if(!sUri.equals("")){
+ while((str = buf.readLine())!=null){
+
+ if(str != null){
+ //1차검색
+ pattern = Pattern.compile("\\sErrors*|\\swarning*|Passed");
+ matcher = pattern.matcher(str);
+
+ if(matcher.find()){sMatcherFind = str;break;}
+ }
+
+ if(nLine > 150){break;}
+
+ nLine++;
+ }
+ }
+
+
+
+ if(sMatcherFind.trim().equals("Passed")){
+
+%>
+<script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '0 Errors';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '0 warning(s)';
+</script>
+
+<%
+
+ }else if(!sMatcherFind.equals("")){
+
+
+ if(sMatcherFind.indexOf(",") > -1 ){
+ arrMatcherFind = sMatcherFind.split(",");
+%>
+
+<script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '<%=arrMatcherFind[0]%>';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '<%=arrMatcherFind[1]%>';
+</script>
+ <%}else if(sMatcherFind.indexOf("E") > -1){ %>
+ <script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '<%=sMatcherFind%>';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '0 warning(s)';
+ </script>
+ <%}else if(sMatcherFind.indexOf("s") > -1){ %>
+ <script type="text/javaScript" language="javascript">
+ parent.document.getElementById("divErr<%=sNum%>").innerHTML = '0 Errors';
+ parent.document.getElementById("divWar<%=sNum%>").innerHTML = '<%=sMatcherFind%>';
+ </script>
+ <%}%>
+<%
+ }
+
+} catch (java.net.UnknownHostException ex){
+%>
+ <script type="text/javaScript" language="javascript">
+ alert("입력하신 URL[<%=sUri%>] \n\n잘못 되었습니다!");
+ </script>
+<%
+} catch (java.net.MalformedURLException ex){
+ %>
+ <script type="text/javaScript" language="javascript">
+ alert("입력하신 URL[<%=sUri%>] \n\n잘못 되었습니다!");
+ </script>
+ <%
+} catch (Exception ex) {
+ //ex.printStackTrace();
+ throw new RuntimeException(ex); // 2011.10.10 보안점검 후속조치
+} finally { // 2012.11 KISA 보안조치
+ if (buf != null) {
+ buf.close();
+ }
+}
+%>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUri.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirectLink.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirectLink.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirectLink.jsp (revision 7)
@@ -0,0 +1,297 @@
+<%--
+ Class Name : EgovWebStandardInspectionUriDirect.jsp
+ Description : 웹표준검사
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ---------- --------- ---------------------------
+ 2010.10.05 박종선 최초 생성
+ 2019.11.29 신용호 KISA 보안약점 조치 (부적절한 자원 해제, 경로조작및 자원 삽입)
+ 2020.10.29 신용호 KISA 보안약점 조치 (크로스사이트 스크립트)
+
+ author : 박종선
+ since : 2010.10.05
+--%>
+<%@ page language="java" contentType="text/html; charset=utf-8" buffer="none"%>
+<%@page import="java.util.*" %>
+<%@page import="java.util.regex.*" %>
+<%@page import="java.io.*" %>
+<%@page import="java.net.*" %>
+<%@page import="egovframework.com.utl.fcc.service.EgovNumberCheckUtil"%>
+<%@page import="egovframework.com.cmm.util.EgovResourceCloseHelper"%>
+<%@page import="egovframework.com.cmm.EgovWebUtil"%>
+<%!public class HttpRequestor {
+
+ public static final String CRLF = "\r\n";
+
+ /**
+ * 연결할 URL
+ */
+ private URL targetURL;
+
+ /**
+ * 파라미터 목록을 저장하고 있다.
+ * 파라미터 이름과 값이 차례대로 저장된다.
+ */
+ private ArrayList list;
+
+ public HttpRequestor(URL target) {
+ this(target, 20);
+ }
+
+ /**
+ * 파라미터를 추가한다.
+ * @param parameterName 파라미터 이름
+ * @param parameterValue 파라미터 값
+ * @exception IllegalArgumentException parameterValue가 null일 경우
+ */
+ public void addParameter(String parameterName, String parameterValue) {
+ if (parameterValue == null)
+ throw new IllegalArgumentException("parameterValue can't be null!");
+
+ list.add(parameterName);
+ list.add(parameterValue);
+ }
+
+ public void addParameterBuf(String parameterName, StringBuffer parameterValue) {
+ if (parameterValue == null)
+ throw new IllegalArgumentException("parameterValue can't be null!");
+
+ list.add(parameterName);
+ list.add((StringBuffer) parameterValue);
+ }
+
+ /**
+ * HttpRequest를 생성한다.
+ *
+ * @param target HTTP 메시지를 전송할 대상 URL
+ */
+ public HttpRequestor(URL target, int initialCapicity) {
+ this.targetURL = target;
+ this.list = new ArrayList();
+ }
+
+ private String makeDelimeter() {
+ return "---------------------------7d115d2a20060c";
+ }
+
+ public InputStream sendMultipartPost() throws IOException {
+
+ HttpURLConnection conn = (HttpURLConnection) targetURL.openConnection();
+
+ // Delimeter 생성
+ String delimeter = makeDelimeter();
+ byte[] newLineBytes = CRLF.getBytes("utf-8");
+ byte[] delimeterBytes = delimeter.getBytes("utf-8");
+ byte[] dispositionBytes = "Content-Disposition: form-data; name=".getBytes("utf-8");
+ String dispositionStr = "Content-Disposition: form-data; name=";
+ byte[] quotationBytes = "\"".getBytes("utf-8");
+ byte[] contentTypeBytes = "Content-Type: application/octet-stream".getBytes("utf-8");
+ byte[] fileNameBytes = "; filename=".getBytes("utf-8");
+ byte[] twoDashBytes = "--".getBytes("utf-8");
+
+ conn.setRequestMethod("POST");
+ conn.setRequestProperty("Charset", "utf-8");
+ conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + delimeter);
+ conn.setDoInput(true);
+ conn.setDoOutput(true);
+ conn.setUseCaches(false);
+
+ BufferedOutputStream out = null;
+
+ try {
+ out = new BufferedOutputStream(conn.getOutputStream());
+
+ Object[] obj = new Object[list.size()];
+ list.toArray(obj);
+
+ for (int i = 0; i < obj.length; i += 2) {
+ // Delimeter 전송
+ out.write(twoDashBytes);
+ out.write(delimeterBytes);
+ out.write(newLineBytes);
+
+ // 파라미터 이름 출력
+ out.write(dispositionBytes);
+ out.write(quotationBytes);
+ out.write(((String) obj[i]).getBytes("utf-8"));
+ out.write(quotationBytes);
+
+ if (obj[i + 1] instanceof String) {
+ // String 이라면
+ out.write(newLineBytes);
+ out.write(newLineBytes);
+ // 값 출력
+ out.write(((String) obj[i + 1]).getBytes("utf-8"));
+ out.write(newLineBytes);
+ } else if (obj[i + 1] instanceof StringBuffer) {
+ // StringBuffer 이라면
+ out.write(newLineBytes);
+ out.write(newLineBytes);
+ // 값 출력
+
+ out.write(((StringBuffer) obj[i + 1]).toString().getBytes("utf-8"));
+ out.write(newLineBytes);
+ //System.out.println("HttpRequestor>" + ((StringBuffer)obj[i+1]).toString().replaceAll("\t","").substring(0,130).toString());
+ } else {
+ // 파라미터의 값이 File 이나 NullFile인 경우
+ if (obj[i + 1] instanceof File) {
+ File file = (File) obj[i + 1];
+ // File이 존재하는 지 검사한다.
+ out.write(fileNameBytes);
+ out.write(quotationBytes);
+ out.write(file.getAbsolutePath().getBytes("utf-8"));
+ out.write(quotationBytes);
+ } else {
+ // NullFile 인 경우
+ out.write(fileNameBytes);
+ out.write(quotationBytes);
+ out.write(quotationBytes);
+ }
+ out.write(newLineBytes);
+ out.write(contentTypeBytes);
+ out.write(newLineBytes);
+ out.write(newLineBytes);
+ // File 데이터를 전송한다.
+ if (obj[i + 1] instanceof File) {
+ File file = (File) obj[i + 1];
+ // file에 있는 내용을 전송한다.
+ BufferedInputStream is = null;
+ try {
+ is = new BufferedInputStream(new FileInputStream(file));
+ byte[] fileBuffer = new byte[1024 * 8]; // 8k
+ int len = -1;
+ while ((len = is.read(fileBuffer)) != -1) {
+ out.write(fileBuffer, 0, len);
+ }
+ } finally {
+ if (is != null)
+ try {
+ is.close();
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ }
+ out.write(newLineBytes);
+ } // 파일 데이터의 전송 블럭 끝
+ if (i + 2 == obj.length) {
+ // 마지막 Delimeter 전송
+ out.write(twoDashBytes);
+ out.write(delimeterBytes);
+ out.write(twoDashBytes);
+ out.write(newLineBytes);
+ }
+ } // for 루프의 끝
+
+ out.flush();
+ } finally {
+ if (out != null)
+ out.close();
+ }
+ return conn.getInputStream();
+ }
+ }%>
+<html lang="ko">
+ <head><title></title></head>
+ <body>
+<%
+ response.setContentType("text/html;charset=utf-8");
+ request.setCharacterEncoding("utf-8");
+
+ String sUri = request.getParameter("uri") == null ? "" : (String) request.getParameter("uri");
+ String sNum = request.getParameter("num") == null ? "" : (String) request.getParameter("num");
+
+ String sMatcherFind = "";
+ int nLine = 0;
+ String[] arrMatcherFind;
+ String str = null;
+
+ StringBuffer strBufInputHtml = new StringBuffer();
+
+ String boundary = "nvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnv";
+ int bufferSize = 16384;
+
+ BufferedReader buffResInput = null;
+ BufferedReader buffResOld = null;
+ try {
+
+ sUri = EgovWebUtil.removeCRLF(sUri);
+ sUri = EgovWebUtil.filePathBlackList(sUri);
+ sUri = EgovWebUtil.clearXSSMinimum(sUri);
+
+ //URL 체크
+ URL urlCheck = new URL(sUri);
+ urlCheck.openStream();
+
+ URLConnection urlConn = urlCheck.openConnection();
+ urlConn.setRequestProperty("Cookie", "JSESSIONID=" + session.getId());
+
+ buffResOld = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "utf-8"));
+ while ((str = buffResOld.readLine()) != null) {
+ strBufInputHtml.append(str + "\r\n");
+ //out.println(str);
+ }
+
+ HttpRequestor requestor = new HttpRequestor(new URL("http://validator.w3.org/check"));
+ requestor.addParameterBuf("fragment", (StringBuffer) strBufInputHtml);
+ requestor.addParameter("direct_prefill_no", "0");
+ requestor.addParameter("direct-doctype", "Inline");
+ requestor.addParameter("group", "0");
+ requestor.addParameter("direct_prefill_no", "0");
+
+ BufferedReader br = null;
+
+ try {
+ br = new BufferedReader(new InputStreamReader(requestor.sendMultipartPost(), "utf-8"));
+
+ StringBuffer resp = new StringBuffer();
+
+ String line;
+ Pattern pattern;
+ Matcher matcher;
+
+ if (1 == 1) { // 연결이 성공적일때
+ //out.println("<xmp>"); BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ //buffResInput = new BufferedReader(new InputStreamReader(uc.getInputStream(), "utf-8"));
+ while ((str = br.readLine()) != null) {
+ str = str.replaceAll("\\./", "http://validator.w3.org/");
+ str = str.replaceAll("\\<form", "<form action=\"http://validator.w3.org/check\"");
+ str = str.replaceAll("\"images/", "\"http://validator.w3.org/images/");
+
+ out.println(str);
+ }
+
+ }
+
+ } finally {
+ if (br != null) {
+ br.close();
+ }
+ if (buffResInput != null)
+ buffResInput.close();
+ }
+%>
+
+
+<%
+ } catch (java.net.UnknownHostException ex) {
+%>
+ <script type="text/javaScript" language="javascript">
+ alert("입력하신 URL[<%=sUri%>] \n\n잘못 되었습니다!");
+ </script>
+<%
+ } catch (java.net.MalformedURLException ex) {
+%>
+ <script type="text/javaScript" language="javascript">
+ alert("입력하신 URL[<%=sUri%>] \n\n잘못 되었습니다!");
+ </script>
+<%
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ } finally {
+ EgovResourceCloseHelper.close(buffResInput, buffResOld);
+ }
+%>
+ </body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/wsi/EgovWebStandardInspectionUriDirectLink.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngDetail.jsp (revision 7)
@@ -0,0 +1,143 @@
+<%--
+/**
+ * @Class Name : EgovServerResrceMntrngDetail.java
+ * @Description : EgovServerResrceMntrngDetail jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ * @ 2018.10.05 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2010.07.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="ultSysScm.mntrngServerDetail.Title"/></c:set>
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.detail" /></title>
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+
+function fncSelectServerResrceMntrngList() {
+ var varFrom = document.getElementById("proxySvc");
+ varFrom.action = "<c:url value='/utl/sys/srm/selectServerResrceMntrngList.do'/>";
+ varFrom.submit();
+}
+
+</script>
+</head>
+
+<body>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle} <spring:message code="title.detail" /></h2>
+
+ <form:form commandName="serverResrceMntrng" method="post" action="${pageContext.request.contextPath}/utl/sys/srm/selectServerResrceMntrngList.do">
+ <!-- 등록폼 -->
+ <table class="wTable" summary="<spring:message code="common.summary.inqire" arguments="${pageTitle}" />">
+ <colgroup>
+ <col style="width:16%" />
+ <col style="" />
+ </colgroup>
+ <!-- 로그ID -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.logId" /></th>
+ <td class="left">
+ <c:out value='${serverResrceMntrng.logId}'/>
+ </td>
+ </tr>
+ <!-- 서버H/W 명 -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.serverName" /></th>
+ <td class="left">
+ <c:out value='${serverResrceMntrng.serverNm}'/>
+ </td>
+ </tr>
+ <!-- 서버H/W IP -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.serverIp" /></th>
+ <td class="left">
+ <c:out value='${serverResrceMntrng.serverEqpmnIp}'/>
+ </td>
+ </tr>
+ <!-- CPU사용률 -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.cpuUse" /></th>
+ <td class="left">
+ <c:out value='${serverResrceMntrng.cpuUseRt}'/>
+ </td>
+ </tr>
+ <!-- 메모리사용률 -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.memoryUse" /></th>
+ <td class="left">
+ <c:out value='${serverResrceMntrng.moryUseRt}'/>
+ </td>
+ </tr>
+ <!-- 서비스상태 -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.serviceStatus" /></th>
+ <td class="left">
+ <c:out value='${serverResrceMntrng.svcSttusNm}'/>
+ </td>
+ </tr>
+ <c:if test="${serverResrceMntrng.svcSttus == '02' }">
+ <!-- 로그정보 -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.logInfo" /></th>
+ <td class="left">
+ <textarea rows="5" cols="80" readOnly><c:out value='${serverResrceMntrng.logInfo}'/></textarea>
+ </td>
+ </tr>
+ </c:if>
+ <!-- 생성일시 -->
+ <tr>
+ <th><spring:message code="ultSysScm.mntrngServerDetail.crateDate" /></th>
+ <td class="left">
+ <c:out value='${serverResrceMntrng.creatDt}'/>
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.list" />' onclick="fncSelectServerResrceMntrngList(); return false;" />
+ </div>
+ <div style="clear:both;"></div>
+
+
+ <input type="hidden" name="logId" value="<c:out value='${serverResrceMntrng.logId}'/>" />
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="strServerNm" value="<c:out value='${serverResrceMntrngVO.strServerNm}'/>" />
+ <input type="hidden" name="pageIndex" value="<c:out value='${serverResrceMntrngVO.pageIndex}'/>" />
+ <input type="hidden" name="strStartDt" value="<c:out value='${pmServerResrceMntrng.strStartDt}'/>" />
+ <input type="hidden" name="strEndDt" value="<c:out value='${pmServerResrceMntrng.strEndDt}'/>" />
+ </form:form>
+</div>
+
+
+
+
+
+</body>
+</html>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovMntrngServerList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovMntrngServerList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovMntrngServerList.jsp (revision 7)
@@ -0,0 +1,122 @@
+<%--
+/**
+ * @Class Name : EgovMntrngServerList.java
+ * @Description : EgovMntrngServerList jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ * @ 2018.10.05 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2010.09.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="ultSysScm.mntrngServer.Title"/></c:set>
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javaScript" language="javascript" defer="defer">
+
+function fncSelectMntrngServerList(pageNo) {
+
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/srm/selectMntrngServerList.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/srm/selectMntrngServerList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+ if (event.keyCode==13) {
+ fncSelectMntrngServerList('1');
+ }
+}
+
+
+</script>
+</head>
+
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="board">
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <form name="listForm" action="<c:url value='/utl/sys/srm/selectMntrngServerList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="ultSysScm.mntrngServerList.ServerName" /> : </label>
+ <input id="strServerNm" class="s_input2 vat" name="strServerNm" type="text" value='<c:out value="${serverResrceMntrngVO.strServerNm}"/>' size="20" onkeypress="press();" title="<spring:message code="ultSysScm.mntrngServerList.ServerName" /> <spring:message code="input.input" />" /><!-- 서버H/W 명 -->
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fncSelectMntrngServerList('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/srm/selectServerResrceMntrngList.do'/>" onclick="" title="<spring:message code="ultSysScm.mntrngServerList.btnLog" /> <spring:message code="input.button" />"><spring:message code="ultSysScm.mntrngServerList.btnLog" /></a></span><!-- 로그 -->
+ </li>
+ </ul>
+ </div>
+ <input type="hidden" name="logId">
+ <input type="hidden" name="pageIndex" value="<c:if test="${empty serverResrceMntrngVO.pageIndex }">1</c:if><c:if test="${!empty serverResrceMntrngVO.pageIndex }"><c:out value='${serverResrceMntrngVO.pageIndex}'/></c:if>">
+ </form>
+
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption></caption>
+ <colgroup>
+ <col style="width:25%" />
+ <col style="width:25%" />
+ <col style="width:25%" />
+ <col style="width:25%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="ultSysScm.mntrngServerList.ServerId" /></th><!-- 서버H/W ID -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngServerList.ServerName" /></th><!-- 서버H/W 명 -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngServerList.ServerIp" /></th><!-- 서버H/W IP -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngServerList.ServerEmail" /></th><!--담당자 E-Mail -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="mntrngServer" items="${mntrngServerList}" varStatus="status">
+ <tr>
+ <td><c:out value="${mntrngServer.serverEqpmnId}"/></td>
+ <td><c:out value="${mntrngServer.serverNm}"/><c:if test="${serverResrceMntrng.cpuUseRt != null}">%</c:if></td>
+ <td><c:out value="${mntrngServer.serverEqpmnIp}"/><c:if test="${serverResrceMntrng.cpuUseRt != null}">%</c:if></td>
+ <td><c:out value="${mntrngServer.mngrEamilAddr}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovMntrngServerList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngList.jsp (revision 7)
@@ -0,0 +1,235 @@
+<%--
+/**
+ * @Class Name : EgovServerResrceMntrngList.java
+ * @Description : EgovServerResrceMntrngList jsp
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ --------- -------- ---------------------------
+ * @ 2010.07.01 lee.m.j 최초 생성
+ * @ 2018.10.05 공통컴포넌트 3.8 개선
+ *
+ * @author lee.m.j
+ * @since 2010.09.01
+ * @version 1.0
+ * @see
+ *
+ * Copyright (C) 2009 by MOPAS All right reserved.
+ */
+--%>
+
+<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<c:set var="pageTitle"><spring:message code="ultSysScm.mntrngResrceServerList.Title"/></c:set>
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle} <spring:message code="title.list" /></title>
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ $("#strStartDt").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#strEndDt").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+}
+
+function fncSelectServerResrceMntrngList(pageNo) {
+
+ var fromDate = document.listForm.strStartDt.value;
+ var endDate = document.listForm.strEndDt.value;
+
+ // var tmpFromDate = fromDate.substring(0,4)+fromDate.substring(5,7)+fromDate.substring(8,10);
+ // var tmpEndDate = endDate.substring(0,4)+endDate.substring(5,7)+endDate.substring(8,10);
+
+ var tmpFromDate = fromDate.split("-");
+ var tmpEndDate = endDate.split("-");
+
+ var strTmpFromDate = "";
+ var strTmpEndDate = "";
+
+ for(var i=0;i<tmpFromDate.length;i++) {
+ strTmpFromDate = strTmpFromDate + tmpFromDate[i];
+ }
+
+ for(var j=0;j<tmpEndDate.length;j++) {
+ strTmpEndDate = strTmpEndDate + tmpEndDate[j];
+ }
+
+ if(strTmpFromDate.length != 8 || strTmpEndDate.length != 8 || !checknum(strTmpFromDate) || !checknum(strTmpEndDate)) {
+ alert("<spring:message code="ultSysScm.mntrngResrceServerList.validate.datatFail" />");
+ return;
+ } else {
+ if(strTmpFromDate > strTmpEndDate) {
+ alert("<spring:message code="ultSysScm.mntrngResrceServerList.validate.datatCheck" />");
+ return;
+ }
+ }
+
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/srm/selectServerResrceMntrngList.do'/>";
+ document.listForm.submit();
+
+}
+
+function fncSelectServerResrceMntrng(logId) {
+ document.listForm.logId.value = logId;
+ document.listForm.action = "<c:url value='/utl/sys/srm/getServerResrceMntrng.do'/>";
+ document.listForm.submit();
+}
+
+function linkPage(pageNo){
+ document.listForm.pageIndex.value = pageNo;
+ document.listForm.action = "<c:url value='/utl/sys/srm/selectServerResrceMntrngList.do'/>";
+ document.listForm.submit();
+}
+
+function press() {
+ if (event.keyCode==13) {
+ fncSelectServerResrceMntrngList('1');
+ }
+}
+
+function checknum(number) {
+
+ var rtnMsg = true;
+ var pattern = /^[0-9]+$/;
+
+ if(!pattern.test(number)) {
+ rtnMsg = false;
+ }
+
+ return rtnMsg;
+}
+
+</script>
+</head>
+
+<body onload="fn_egov_init()">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript><!-- 자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다. -->
+
+<div class="board">
+
+ <h1>${pageTitle} <spring:message code="title.list" /></h1>
+
+ <form name="listForm" action="<c:url value='/utl/sys/srm/selectServerResrceMntrngList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <label for=""><spring:message code="ultSysScm.mntrngResrceServerList.scServerName" /> : </label><!-- 서버H/W 명 -->
+ <input id="strServerNm" class="s_input2 vat" name="strServerNm" type="text" value='<c:out value="${serverResrceMntrngVO.strServerNm}"/>' size="8" onkeypress="press();" title="<spring:message code="ultSysScm.mntrngResrceServerList.scServerName" /> <spring:message code="input.input" />" />
+
+ <label for=""><spring:message code="ultSysScm.mntrngResrceServerList.scBetween" /> : </label><!-- 기간 -->
+ <input type="text" name="strStartDt" id="strStartDt" value="<c:out value='${pmServerResrceMntrng.strStartDt}'/>" size="12" maxlength="10" title="<spring:message code="ultSysScm.mntrngResrceServerList.scFromDate" /> <spring:message code="input.input" />" />
+
+
+ ~ <input type="text" name="strEndDt" id="strEndDt" value="<c:out value='${pmServerResrceMntrng.strEndDt}'/>" size="12" maxlength="10" title="<spring:message code="ultSysScm.mntrngResrceServerList.scToDate" /> <spring:message code="input.input" />" />
+
+ <input type="hidden" name="strServerResrceMntrngDate" value=""/>
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fncSelectServerResrceMntrngList('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/srm/selectMntrngServerList.do'/>" onclick="" title="<spring:message code="button.list" /> <spring:message code="input.button" />"><spring:message code="button.list" /></a></span>
+ </li>
+ </ul>
+ </div>
+ <input type="hidden" name="logId">
+ <input type="hidden" name="pageIndex" value="<c:if test="${empty serverResrceMntrngVO.pageIndex }">1</c:if><c:if test="${!empty serverResrceMntrngVO.pageIndex }"><c:out value='${serverResrceMntrngVO.pageIndex}'/></c:if>">
+ </form>
+
+ <table class="board_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle}" />">
+ <caption></caption>
+ <colgroup>
+ <col style="width:20%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:20%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="ultSysScm.mntrngResrceServerList.listServerName" /></th><!-- 서버H/W 명 -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngResrceServerList.listServerIp" /></th><!-- >서버H/W IP -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngResrceServerList.listCpuUse" /></th><!-- CPU사용률 -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngResrceServerList.lisMemoryUse" /></th><!--메모리사용률 -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngResrceServerList.listServerStatus" /></th><!-- 서비스상태 -->
+ <th scope="col"><spring:message code="ultSysScm.mntrngResrceServerList.listCreateDatetime" /></th><!-- 생성일시 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="serverResrceMntrng" items="${serverResrceMntrngList}" varStatus="status">
+ <tr>
+ <td>
+ <form name="item" method="post" action="<c:url value='/utl/sys/srm/getServerResrceMntrng.do'/>">
+ <input type="hidden" name="logId" value="<c:out value="${serverResrceMntrng.logId}"/>">
+ <input type="hidden" name="pageIndex" value="<c:out value='${serverResrceMntrngVO.pageIndex}'/>">
+ <input type="hidden" name="strServerNm" value="<c:out value="${serverResrceMntrngVO.strServerNm}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${serverResrceMntrng.serverNm}"/>" onclick="fncSelectServerResrceMntrng('<c:out value="${serverResrceMntrng.logId}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td><c:out value="${serverResrceMntrng.serverEqpmnIp}"/></td>
+ <td><c:out value="${serverResrceMntrng.cpuUseRt}"/><c:if test="${serverResrceMntrng.cpuUseRt != null}">%</c:if></td>
+ <td><c:out value="${serverResrceMntrng.moryUseRt}"/><c:if test="${serverResrceMntrng.cpuUseRt != null}">%</c:if></td>
+ <td><c:out value="${serverResrceMntrng.svcSttusNm}"/></td>
+ <td><c:out value="${serverResrceMntrng.creatDt}"/></td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
+ </ul>
+ </div>
+</div>
+
+
+
+
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/srm/EgovServerResrceMntrngList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngUpdt.jsp (revision 7)
@@ -0,0 +1,146 @@
+<%--
+ Class Name : EgovDbMntrngUpdate.jsp
+ Description : DB서비스모니터링 수정 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.07.09 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.07.09
+
+--%>
+<%@ page 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" %>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comUtlSysDbm.dbMntrngModify.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>${pageTitle}</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="dbMntrng" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_list_db_mntrng(){
+ var varForm = document.getElementById("dbMntrng");
+ varForm.action = "<c:url value='/utl/sys/dbm/getDbMntrngList.do'/>";
+ varForm.submit()
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_save_db_mntrng(){
+ var varForm = document.getElementById("dbMntrng");
+
+ if(confirm("<spring:message code='common.save.msg' />")){
+ varForm.action = "<c:url value='/utl/sys/dbm/updateDbMntrng.do'/>";
+
+ if(!validateDbMntrng(varForm)){
+ return;
+ }else{
+ varForm.submit();
+ }
+ }
+}
+
+</script>
+</head>
+<body>
+
+<%-- noscript 태그 --%>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<DIV class="wTableFrm">
+<!-- 상단타이틀 -->
+<form:form commandName="dbMntrng" id="dbMntrng" action="<c:url value='/utl/sys/dbm/updateDbMntrng.do'/>" method="post">
+
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+
+ <input type="hidden" name="mntrngSttus" value="<c:out value='${dbMntrng.mntrngSttus}'/>"/>
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <!-- 등록 폼 영역 -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="wTable" summary="<spring:message code="comUtlSysDbm.dbMntrngModify.summary" />"><!-- DB서비스모니터링 수정기능을 제공한다. -->
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdDataSourcNm" for="dataSourcNm"><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 데이타소스명 -->
+ <td width="80%" nowrap class="left">
+ <form:input path="dataSourcNm" size="60" maxlength="60" readonly="true" cssClass="readOnlyClass"/>
+ <div><form:errors path="dataSourcNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdServerNm" for="serverNm"><spring:message code="comUtlSysDbm.dbMntrng.serverName" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 서버명 -->
+ <td class="left">
+ <form:input path="serverNm" size="60" maxlength="60" />
+ <div><form:errors path="serverNm" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdDbmsKind" for="dbmsKind"><spring:message code="comUtlSysDbm.dbMntrng.dbms" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- DBMS종류 -->
+ <td class="left">
+ <form:select path="dbmsKind">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${dbmsKindList}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <div><form:errors path="dbmsKind" cssClass="error"/></div>
+ </td>
+ </tr>
+
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdCeckSql" for="ceckSql"><spring:message code="comUtlSysDbm.dbMntrng.checkSQL" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 체크SQL -->
+ <td class="left">
+ <form:input path="ceckSql" size="60" maxlength="250" cssStyle="width:95%;" />
+ <div><form:errors path="ceckSql" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdMngrNm" for="mngrNm"><spring:message code="comUtlSysDbm.dbMntrng.managerName" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" size="60" maxlength="60" />
+ <div><form:errors path="mngrNm" cssClass="error" /></div>
+ </td>
+ </tr>
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdMngrEmailAddr" for="mngrEmailAddr"><spring:message code="comUtlSysDbm.dbMntrng.managerEmail" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="50" maxlength="50" />
+ <div><form:errors path="mngrEmailAddr" cssClass="error" /></div>
+ </td>
+ </tr>
+
+ </table>
+
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.save" />" onclick="fn_egov_save_db_mntrng(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_list_db_mntrng(); return false;" />
+ </div>
+
+</form:form>
+</DIV>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngList.jsp (revision 7)
@@ -0,0 +1,168 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysDbm.dbMntrngList.title"/></c:set>
+<%
+/**
+ * @Class Name : EgovDbMntrngList.jsp
+ * @Description : DB서비스모니터링 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.07.05 김진만 최초 생성
+ *
+ * @author 김진만
+ * @since 2010.07.05
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle}</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_get_db_mntrng_list('1');
+ }
+ }
+
+ function fn_egov_get_db_mntrng_list(pageNo) {
+ if (document.frm.searchKeyword.value != "") {
+ if (document.frm.searchCondition.value == "") {
+ alert("검색조건을 선택하세요.");
+ return;
+ }
+ }
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/dbm/getDbMntrngList.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_get_db_mntrng(dataSourcNm) {
+ document.frm.dataSourcNm.value = dataSourcNm;
+ document.frm.action = "<c:url value='/utl/sys/dbm/getDbMntrng.do'/>";
+ document.frm.submit();
+ }
+ /* ********************************************************
+ * 등록 처리 함수
+ ******************************************************** */
+ function fn_egov_regist_db_mntrng(){
+ document.frm.action = "<c:url value='/utl/sys/dbm/getDbMntrngForRegist.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_log_db_mntrng_list(){
+ document.frm.action = "<c:url value='/utl/sys/dbm/getDbMntrngLogList.do'/>";
+ document.frm.submit();
+ }
+</script>
+
+</head>
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle}</h1>
+
+ <form name="frm" id="frm" action="<c:url value='/utl/sys/dbm/getDbMntrngList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" class="select" title="검색조건구분" >
+ <option value=''>--<spring:message code="input.select" />--</option>
+ <option value="0" <c:if test="${searchVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /></option><!-- 데이타소스명 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comUtlSysDbm.dbMntrng.serverName" /></option><!-- 서버명 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysDbm.dbMntrng.managerName" /></option><!-- 관리자명 -->
+ <option value="3" <c:if test="${searchVO.searchCondition == '3'}">selected="selected"</c:if> ><spring:message code="comUtlSysDbm.dbMntrng.status" /></option><!-- 상태 -->
+ </select>
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="35" size="25" onkeypress="press(event);" title="검색키워드" />
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fn_egov_get_db_mntrng_list('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/dbm/getDbMntrngForRegist.do'></c:url>" onclick="fn_egov_regist_db_mntrng(); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span>
+ <span class="btn_b"><a href="<c:url value='/utl/sys/dbm/getDbMntrngLogList.do'/>" onclick="fn_egov_log_db_mntrng_list(); return false;" title="로그">로그</a></span>
+ </li>
+ </ul>
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}' default="1"/>">
+ <input name="dataSourcNm" type="hidden" value="">
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:5%" />
+ <col style="width:17%" />
+ <col style="width:10%" />
+ <col style="width:10%" />
+ <col style="width:10%" />
+ <col style="width:18%" />
+ <col style="width:10%" />
+ <col style="width:20%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.seq" /></th><!-- 순번 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /></th><!-- 데이타소스명 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.serverName" /></th><!-- 서버명 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.dbms" /></th><!-- DBMS종류 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.managerName" /></th><!-- 관리자명 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.status" /></th><!-- 상태 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.monitoringDatetime" /></th><!-- 모니터링시각 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="8">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <%-- 데이터를 화면에 출력해준다 --%>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td><c:out value="${(searchVO.pageIndex-1) * searchVO.pageSize + status.count}"/></td>
+ <td>
+ <form name="item" method="post" action="<c:url value='/utl/sys/dbm/getDbMntrng.do'/>">
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>">
+ <input type="hidden" name="searchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>">
+ <input type="hidden" name="dataSourcNm" value="">
+ <span class="link"><input type="submit" value="<c:out value="${resultInfo.dataSourcNm}"/>" onclick="fn_egov_get_db_mntrng('<c:out value="${resultInfo.dataSourcNm}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td>${resultInfo.serverNm}</td>
+ <td>${resultInfo.dbmsKindNm}</td>
+ <td>${resultInfo.mngrNm}</td>
+ <td>${resultInfo.mngrEmailAddr}</td>
+ <td>${resultInfo.mntrngSttusNm}</td>
+ <td>${resultInfo.creatDt}</td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_get_db_mntrng_list"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngDetail.jsp (revision 7)
@@ -0,0 +1,144 @@
+<%--
+ Class Name : EgovDbMntrngDetail.jsp
+ Description : DB서비스모니터링 상세조회 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.07.07 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.07.07
+
+--%>
+<%@ page 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="spring" uri="http://www.springframework.org/tags"%>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comUtlSysDbm.dbMntrngDetail.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>${pageTitle}</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_list(){
+ var varForm = document.getElementById("dbMntrngForm");
+ varForm.action = "<c:url value='/utl/sys/dbm/getDbMntrngList.do'/>";
+ varForm.submit()
+}
+/* ********************************************************
+ * 수정화면으로 바로가기
+ ******************************************************** */
+function fn_egov_update_view(){
+ var varForm = document.getElementById("dbMntrngForm");
+
+ varForm.action = "<c:url value='/utl/sys/dbm/getDbMntrngForUpdate.do'/>";
+ varForm.submit();
+}
+/* ********************************************************
+ * 삭제 처리
+ ******************************************************** */
+ function fn_egov_delete(){
+ var vForm = document.dbMntrngForm;
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ vForm.action = "<c:url value='/utl/sys/dbm/deleteDbMntrng.do'/>";
+ vForm.submit();
+ }
+}
+</script>
+</head>
+
+<body >
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<DIV class="wTableFrm">
+
+<form name="dbMntrngForm" id="dbMntrngForm" action="<c:url value='/utl/sys/dbm/getDbMntrng.do'/>" method="post">
+ <input name="dataSourcNm" type="hidden" value="<c:out value='${resultInfo.dataSourcNm}'/>"/>
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <!-- 등록 폼 영역 -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="wTable" summary="<spring:message code="comUtlSysDbm.dbMntrngDetail.summary" />">
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap="nowrap" ><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /></th><!-- 데이타소스명 -->
+ <td width="80%" class="left">
+ <c:out value="${resultInfo.dataSourcNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.serverName" /></th><!-- 서버명 -->
+ <td class="left">
+ <c:out value="${resultInfo.serverNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.dbms" /></th><!-- DBMS종류 -->
+ <td class="left">
+ <c:out value="${resultInfo.dbmsKindNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.checkSQL" /></th><!-- 체크SQL -->
+ <td class="left">
+ <c:out value="${resultInfo.ceckSql}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.managerName" /></th><!-- 관리자명 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrEmailAddr}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.status" /></th><!-- 모니터링상태 -->
+ <td class="left">
+ <c:out value="${resultInfo.mntrngSttusNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.monitoringDatetime" /></th><!-- 모니터링시각 -->
+ <td class="left">
+ <c:out value="${resultInfo.lastUpdusrPnttm}" escapeXml="false" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.update" />" onclick="fn_egov_update_view(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.delete" />" onclick="fn_egov_delete(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_list(); return false;" />
+ </div>
+
+</form>
+</DIV>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogList.jsp (revision 7)
@@ -0,0 +1,345 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<c:set var="pageTitle"><spring:message code="comUtlSysDbm.dbMntrngLogList.title"/></c:set>
+<%
+/**
+ * @Class Name : EgovDbMntrngLogList.jsp
+ * @Description : DB서비스모니터링로그 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.07 김진만 최초 생성
+ * @ 2018.08.03 신용호 fn_egov_remove_string을 replace function으로 삭제
+ *
+ * @author 김진만
+ * @since 2010.08.07
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle}</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js'/>" ></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+function fn_egov_init(){
+
+ var vForm = document.frm;
+
+ if (vForm.searchKeywordFrom.value == "") {
+ // 조회일자에 현재날짜 세팅
+ //vForm.searchStartDate.value = fn_egov_getToday();
+ //vForm.searchEndDate.value = fn_egov_getToday();
+ //vForm.searchEndHour.options[23].selected = true;
+ } else {
+ // 조회조건 지정된 것 설정하기.
+ // 조회시작일자
+ vForm.searchStartDate.value = vForm.searchKeywordFrom.value.substring(0,4) + '-' + vForm.searchKeywordFrom.value.substring(4,6) + '-' + vForm.searchKeywordFrom.value.substring(6,8);
+ for(i = 0; i < vForm.searchStartHour.options.length; i++) {
+ if (vForm.searchStartHour.options[i].value == vForm.searchKeywordFrom.value.substring(8,10)) {
+ vForm.searchStartHour.options[i].selected = true;
+ break;
+ }
+ }
+ for(i = 0; i < vForm.searchStartMin.options.length; i++) {
+ if (vForm.searchStartMin.options[i].value == vForm.searchKeywordFrom.value.substring(10,12)) {
+ vForm.searchStartMin.options[i].selected = true;
+ break;
+ }
+ }
+ // 조회종료일자
+ vForm.searchEndDate.value = vForm.searchKeywordTo.value.substring(0,4) + '-' + vForm.searchKeywordTo.value.substring(4,6) + '-' + vForm.searchKeywordTo.value.substring(6,8);
+ for(i = 0; i < vForm.searchEndHour.options.length; i++) {
+ if (vForm.searchEndHour.options[i].value == vForm.searchKeywordTo.value.substring(8,10)) {
+ vForm.searchEndHour.options[i].selected = true;
+ break;
+ }
+ }
+ for(i = 0; i < vForm.searchEndMin.options.length; i++) {
+ if (vForm.searchEndMin.options[i].value == vForm.searchKeywordTo.value.substring(10,12)) {
+ vForm.searchEndMin.options[i].selected = true;
+ break;
+ }
+ }
+ }
+
+ $("#searchStartDate").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDate").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ vForm.searchKeyword.focus();
+
+}
+
+/* ********************************************************
+ * 현재날짜 가져오기
+ ******************************************************** */
+function fn_egov_getToday(){
+
+ var today = new Date();
+ var currentYear = today.getYear();
+ var currentMonth = (today.getMonth()+1).toString();
+ var currentDay = today.getDate().toString();
+
+ var currentToday = currentYear + "-" + fn_egov_getLpad(2,currentMonth) + "-" + fn_egov_getLpad(2,currentDay);
+
+ return currentToday;
+}
+
+/* ********************************************************
+ * LPAD 처리
+ ******************************************************** */
+function fn_egov_getLpad(rtnSize, sourceStr)
+{
+ rtnStr = sourceStr;
+
+ for( i= sourceStr.length; i<parseInt(rtnSize); i++)
+ rtnStr = "0" + rtnStr;
+
+ return rtnStr;
+}
+
+function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_get_db_mntrng_log_list('1');
+ }
+}
+
+function fn_egov_get_db_mntrng_log_list(pageNo) {
+
+ if (document.frm.searchKeyword.value != "") {
+ if (document.frm.searchCondition.value == "") {
+ alert("검색조건을 선택하세요.");
+ return;
+ }
+ }
+ /* 폼전송 데이타 조립. */
+ var startDate = "";
+ var endDate = "";
+ if (document.frm.searchStartDate.value != "") {
+ startDate = document.frm.searchStartDate.value;
+ startDate = startDate.replace(/-/gi,"");
+ }
+ if (document.frm.searchEndDate.value != "") {
+ endDate = document.frm.searchEndDate.value;
+ endDate = endDate.replace(/-/gi,"");
+ }
+ document.frm.searchKeywordFrom.value = startDate + document.frm.searchStartHour.value + document.frm.searchStartMin.value;
+ document.frm.searchKeywordTo.value = endDate + document.frm.searchEndHour.value + document.frm.searchEndMin.value;
+
+ /*
+ 검색조건 체크
+ */
+
+ if (document.frm.searchStartDate.value != "" || document.frm.searchEndDate.value != "") {
+ if (document.frm.searchStartDate.value == "") {
+ alert("검색시작일자를 입력하세요");
+ return ;
+ }
+ if (document.frm.searchEndDate.value == "") {
+ alert("검색종료일자를 입력하세요");
+ return ;
+ }
+ if(isDate(document.frm.searchStartDate.value, "조회시작일자") == false) {
+ return;
+ }
+
+ if(isDate(document.frm.searchEndDate.value, "조회종료일자") == false) {
+ return;
+ }
+ if(document.frm.searchKeywordFrom.value > document.frm.searchKeywordTo.value) {
+ alert("검색종료시각가 검색시작시각보다 빠를수 없습니다.");
+ return ;
+ }
+ }
+
+
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/dbm/getDbMntrngLogList.do'/>";
+ document.frm.submit();
+}
+
+function fn_egov_get_db_mntrng_log(logId) {
+ document.frm.logId.value = logId;
+ document.frm.action = "<c:url value='/utl/sys/dbm/getDbMntrngLog.do'/>";
+ document.frm.submit();
+}
+
+function fn_egov_select_db_mntrng(){
+ document.frm.action = "<c:url value='/utl/sys/dbm/getDbMntrngList.do'/>";
+ document.frm.submit();
+}
+</script>
+
+</head>
+<body onLoad="fn_egov_init();">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle}</h1>
+
+ <form name="frm" id="frm" action="<c:url value='/utl/sys/dbm/getDbMntrngLogList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" class="select" title="검색조건구분">
+ <option value=''>--<spring:message code="input.select" />--</option>
+ <option value="0" <c:if test="${searchVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /></option><!-- 데이타소스명 -->
+ <option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if> ><spring:message code="comUtlSysDbm.dbMntrng.serverName" /></option><!-- 서버명 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysDbm.dbMntrng.managerName" /></option><!-- 관리자명 -->
+ </select>
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' onkeypress="press(event);" title="검색키워드" style="width:60px" />
+
+
+ <label for=""><spring:message code="comUtlSysDbm.dbMntrng.period" /> : </label><!-- 기간 -->
+ <input type="hidden" name="cal_url" id="cal_url" value="<c:url value='/sym/cal/EgovNormalCalPopup.do'/>" >
+ <input type="text" name="searchStartDate" id="searchStartDate" title="<spring:message code="comUtlSysDbm.dbMntrng.searchStartDate" />" style="width:70px; margin-right:-9px"><!-- 검색시작일자 -->
+ <select name="searchStartHour" id="searchStartHour" title="<spring:message code="comUtlSysDbm.dbMntrng.searchStartHour" />"><!-- 검색시작시간 -->
+ <option value=""><spring:message code="input.cSelect" /></option><!-- 선택 -->
+ <c:forEach var="h" begin="1" end="24" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+ :
+ <select name="searchStartMin" id="searchStartMin" title="<spring:message code="comUtlSysDbm.dbMntrng.searchStartMin" />"><!-- 검색시작분 -->
+ <option value=""><spring:message code="input.cSelect" /></option>
+ <c:forEach var="h" begin="0" end="59" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+ ~
+ <input type="text" name="searchEndDate" id="searchEndDate" title="<spring:message code="comUtlSysDbm.dbMntrng.searchEndDate" />" style="width:70px; margin-right:-9px"><!-- 검색종료일자 -->
+ <select name="searchEndHour" id="searchEndHour" title="<spring:message code="comUtlSysDbm.dbMntrng.searchEndHour" />"><!-- 검색종료시간 -->
+ <option value=""><spring:message code="input.cSelect" /></option>
+ <c:forEach var="h" begin="1" end="24" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+ :
+ <select name="searchEndMin" id="searchEndMin" title="<spring:message code="comUtlSysDbm.dbMntrng.searchEndMin" />"><!-- 검색종료분 -->
+ <option value=""><spring:message code="input.cSelect" /></option>
+ <c:forEach var="h" begin="0" end="59" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fn_egov_get_db_mntrng_log_list('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/dbm/getDbMntrngList.do'/>" onclick="fn_egov_select_db_mntrng(); return false;" title="<spring:message code="button.list" />"><spring:message code="button.list" /></a></span>
+ </li>
+ </ul>
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}' default="1"/>">
+ <input name="searchKeywordFrom" type="hidden" value="<c:out value='${searchVO.searchKeywordFrom}'/>">
+ <input name="searchKeywordTo" type="hidden" value="<c:out value='${searchVO.searchKeywordTo}'/>">
+ <input name="logId" type="hidden" value="">
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:20%" />
+ <col style="width:10%" />
+ <col style="width:10%" />
+ <col style="width:10%" />
+ <col style="width:20%" />
+ <col style="width:10%" />
+ <col style="width:20%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /></th><!-- 데이타소스명 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.serverName" /></th><!-- 서버명 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.dbms" /></th><!-- DBMS종류 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.managerName" /></th><!-- 관리자명 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.status" /></th><!-- 상태 -->
+ <th scope="col"><spring:message code="comUtlSysDbm.dbMntrng.monitoringDatetime" /></th><!-- 모니터링시각 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="7">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <%-- 데이터를 화면에 출력해준다 --%>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td>
+ <form name="item" method="post" action="<c:url value='/utl/sys/dbm/getDbMntrngLog.do'/>">
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>">
+ <input type="hidden" name="searchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>">
+ <input type="hidden" name="logId" value="<c:out value="${resultInfo.logId}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${resultInfo.dataSourcNm}"/>" onclick="fn_egov_get_db_mntrng_log('<c:out value="${resultInfo.logId}"/>'); return false;" style="text-align : left;"></span>
+ </form>
+ </td>
+ <td>${resultInfo.serverNm}</td>
+ <td class="lt_text3" nowrap>${resultInfo.dbmsKindNm}</td>
+ <td>${resultInfo.mngrNm}</td>
+ <td>${resultInfo.mngrEmailAddr}</td>
+ <td>${resultInfo.mntrngSttusNm}</td>
+ <td>${resultInfo.creatDt}</td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_get_db_mntrng_log_list"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngRegist.jsp (revision 7)
@@ -0,0 +1,142 @@
+<%--
+ Class Name : EgovDbMntrngRegist.jsp
+ Description : DB서비스모니터링 등록 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.07.07 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.07.07
+
+--%>
+<%@ page 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"><spring:message code="comUtlSysDbm.dbMntrngRegist.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<title>${pageTitle}</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<validator:javascript formName="dbMntrng" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_get_db_mntrng_list(){
+ var varForm = document.getElementById("dbMntrng");
+ varForm.action = "<c:url value='/utl/sys/dbm/getDbMntrngList.do'/>";
+ varForm.submit()
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_save_db_mntrng(){
+ var varForm = document.getElementById("dbMntrng");
+ varForm.action = "<c:url value='/utl/sys/dbm/addDbMntrng.do'/>";
+ if(confirm("<spring:message code='common.save.msg' />")){
+
+ if(!validateDbMntrng(varForm)){
+ return;
+ }else{
+ varForm.submit();
+ }
+ }
+}
+
+</script>
+</head>
+<body>
+
+<%-- noscript 테그 --%>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="dbMntrng" action="<c:url value='/utl/sys/dbm/addDbMntrng.do'/>" method="post">
+
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+<input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle}</h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /> <span class="pilsu">*</span></th><!-- 데이타소스명 -->
+ <td class="left">
+ <form:input path="dataSourcNm" size="60" maxlength="60"/>
+ <form:errors path="dataSourcNm" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysDbm.dbMntrng.serverName" /> <span class="pilsu">*</span></th><!-- 서버명 -->
+ <td class="left">
+ <form:input path="serverNm" size="60" maxlength="60"/>
+ <form:errors path="serverNm" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysDbm.dbMntrng.dbms" /> <span class="pilsu">*</span></th><!-- DBMS종류 -->
+ <td class="left">
+ <form:select path="dbmsKind">
+ <form:option value="" label="--선택하세요--"/>
+ <form:options items="${dbmsKindList}" itemValue="code" itemLabel="codeNm"/>
+ </form:select>
+ <form:errors path="dbmsKind" cssClass="error"/>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysDbm.dbMntrng.checkSQL" /> <span class="pilsu">*</span></th><!-- 체크SQL -->
+ <td class="left">
+ <form:input path="ceckSql" size="60" maxlength="250"/>
+ <form:errors path="ceckSql" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysDbm.dbMntrng.managerName" /> <span class="pilsu">*</span></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" size="60" maxlength="60"/>
+ <form:errors path="mngrNm" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysDbm.dbMntrng.managerEmail" /> <span class="pilsu">*</span></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="50" maxlength="50"/>
+ <form:errors path="mngrEmailAddr" cssClass="error" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fn_egov_save_db_mntrng(); return false;" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/dbm/getDbMntrngList.do'></c:url>" onclick="fn_egov_get_db_mntrng_list(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogDetail.jsp (revision 7)
@@ -0,0 +1,138 @@
+<%--
+ Class Name : EgovDbMntrngLogDetail.jsp
+ Description : DB서비스모니터링로그 상세조회 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.08.07 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.08.07
+
+--%>
+<%@ page 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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comUtlSysDbm.dbMntrngLogDetail.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>${pageTitle}</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_list(){
+ var varForm = document.getElementById("dbMntrngLogForm");
+ varForm.action = "<c:url value='/utl/sys/dbm/getDbMntrngLogList.do'/>";
+ varForm.submit()
+}
+</script>
+</head>
+
+<body >
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<DIV class="wTableFrm">
+
+<form name="dbMntrngLogForm" id="dbMntrngLogForm" action="<c:url value='/utl/sys/dbm/getDbMntrngLog.do'/>" method="post">
+ <input name="logId" type="hidden" value="<c:out value='${resultInfo.logId}'/>"/>
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+ <input type="hidden" name="searchKeywordFrom" value="<c:out value='${searchVO.searchKeywordFrom}'/>">
+ <input type="hidden" name="searchKeywordTo" value="<c:out value='${searchVO.searchKeywordTo}'/>">
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <!-- 등록 폼 영역 -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="wTable" summary="<spring:message code="comUtlSysDbm.dbMntrngLogDetail.summary" />"><!-- 등록된 DB서비스모니터링로그에 대한 상세정보를 제공합니다. -->
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap="nowrap" ><spring:message code="comUtlSysDbm.dbMntrng.logID" /></th><!-- 로그ID -->
+ <td width="80%" class="left">
+ <c:out value="${resultInfo.logId}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap="nowrap" ><spring:message code="comUtlSysDbm.dbMntrng.dataSourceName" /></th><!-- 데이타소스명 -->
+ <td width="80%" class="left">
+ <c:out value="${resultInfo.dataSourcNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.serverName" /></th><!-- 서버명 -->
+ <td class="left">
+ <c:out value="${resultInfo.serverNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.dbms" /></th><!-- DBMS종류 -->
+ <td class="left">
+ <c:out value="${resultInfo.dbmsKindNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.checkSQL" /></th><!-- 체크SQL -->
+ <td class="left">
+ <c:out value="${resultInfo.ceckSql}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.managerName" /></th><!-- 관리자명 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrEmailAddr}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.status" /></th><!-- 모니터링상태 -->
+ <td class="left">
+ <c:out value="${resultInfo.mntrngSttusNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.logInfo" /></th><!-- 로그정보 -->
+ <td class="left">
+ <c:out value="${resultInfo.logInfo}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysDbm.dbMntrng.monitoringDatetime" /></th><!-- 모니터링시각 -->
+ <td class="left">
+ <c:out value="${resultInfo.creatDt}" escapeXml="false" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 목록버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_list(); return false;" />
+ </div>
+</form>
+</DIV>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/dbm/EgovDbMntrngLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngUpdt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngUpdt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngUpdt.jsp (revision 7)
@@ -0,0 +1,159 @@
+<%--
+ Class Name : EgovTrsmrcvMntrngUpdate.jsp
+ Description : 송수신모니터링 수정 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.07.22 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.07.22
+
+--%>
+<%@ page 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" %>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comUtlSysTrm.trsmrcvMntrngUpdt.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>${pageTitle}</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="trsmrcvMntrng" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_get_list(){
+ var varForm = document.getElementById("trsmrcvMntrng");
+ varForm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do'/>";
+ varForm.submit()
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_save(){
+ var varForm = document.getElementById("trsmrcvMntrng");
+
+ if(confirm("<spring:message code='common.save.msg' />")){
+ varForm.action = "<c:url value='/utl/sys/trm/updateTrsmrcvMntrng.do'/>";
+
+ if(!validateTrsmrcvMntrng(varForm)){
+ return;
+ }else{
+ varForm.submit();
+ }
+ }
+}
+
+</script>
+</head>
+<body>
+<%-- noscript 태그 --%>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+<div class="wTableFrm">
+<!-- 상단타이틀 -->
+<form:form commandName="trsmrcvMntrng" id="trsmrcvMntrng" action="<c:url value='/utl/sys/trm/updateTrsmrcvMntrng.do'/>" method="post">
+
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+
+ <input type="hidden" name="cntcId" value="<c:out value='${trsmrcvMntrng.cntcId}'/>"/>
+ <input type="hidden" name="mntrngSttus" value="<c:out value='${trsmrcvMntrng.mntrngSttus}'/>"/>
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <!-- 등록 폼 영역 -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="wTable" summary="<spring:message code="comUtlSysTrm.trsmrcvMntrngUpdt.summary" />"><!-- 송수신모니터링 수정기능을 제공한다. -->
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationID" /></th><!-- 연계ID -->
+ <td width="80%" nowrap class="left">
+ <c:out value="${trsmrcvMntrng.cntcId}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /></th><!-- 연계명 -->
+ <td class="left">
+ <c:out value="${trsmrcvMntrng.cntcNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.provider" /></th><!-- 제공기관 -->
+ <td class="left">
+ <c:out value="${trsmrcvMntrng.provdInsttNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.provideSystem" /></th><!-- 제공시스템 -->
+ <td class="left">
+ <c:out value="${trsmrcvMntrng.provdSysNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.service" /></th><!-- 제공서비스 -->
+ <td class="left">
+ <c:out value="${trsmrcvMntrng.provdSvcNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.requester" /></th><!-- 요청기관 -->
+ <td class="left">
+ <c:out value="${trsmrcvMntrng.requstInsttNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.requestSystem" /></th><!-- 요청시스템 -->
+ <td class="left">
+ <c:out value="${trsmrcvMntrng.requstSysNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="idTestClassNm" for="testClassNm"><spring:message code="comUtlSysTrm.trsmrcvMntrng.testClassName" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 테스트클래스명 -->
+ <td class="left">
+ <form:input path="testClassNm" size="100" maxlength="255" />
+ <form:errors path="testClassNm" cssClass="error" />
+ </td>
+ </tr>
+
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdMngrNm" for="mngrNm"><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" size="60" maxlength="60"/>
+ <form:errors path="mngrNm" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap ><label id="IdMngrEmailAddr" for="mngrEmailAddr"><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerEmail" /></label><img src="<c:url value='/images/egovframework/com/cmm/icon/required.gif'/>" alt="필수입력" title="필수입력" width="15" height="15"></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="50" maxlength="50"/>
+ <form:errors path="mngrEmailAddr" cssClass="error" />
+ </td>
+ </tr>
+ </table>
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.save" />" onclick="fn_egov_save(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_get_list(); return false;" />
+ </div>
+</form:form>
+</DIV>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngUpdt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogDetail.jsp (revision 7)
@@ -0,0 +1,160 @@
+<%--
+ Class Name : EgovTrsmrcvMntrngLogDetail.jsp
+ Description : 송수신모니터링로그 상세조회 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.08.17 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+
+--%>
+<%@ page 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="spring" uri="http://www.springframework.org/tags"%>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comUtlSysTrm.trsmrcvMntrngLogDetail.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>${pageTitle}</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_list(){
+ var varForm = document.getElementById("trsmrcvMntrngLogForm");
+ varForm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngLogList.do'/>";
+ varForm.submit()
+}
+</script>
+</head>
+
+<body >
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<DIV class="wTableFrm">
+
+<form name="trsmrcvMntrngLogForm" id="trsmrcvMntrngLogForm" action="<c:url value='/utl/sys/trm/getTrsmrcvMntrngLogList.do'/>" method="post">
+ <input name="cntcId" type="hidden" value="<c:out value='${resultInfo.cntcId}'/>"/>
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="searchKeywordFrom" value="<c:out value='${searchVO.searchKeywordFrom}'/>">
+ <input type="hidden" name="searchKeywordTo" value="<c:out value='${searchVO.searchKeywordTo}'/>">
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <!-- 등록 폼 영역 -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="1" class="wTable" summary="<spring:message code="comUtlSysTrm.trsmrcvMntrngLogDetail.summary" />">
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap="nowrap" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.logID" /></th><!-- 로그ID -->
+ <td width="80%" class="left">
+ <c:out value="${resultInfo.logId}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th width="20%" height="23" class="required_text" nowrap="nowrap" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationID" /></th><!-- 연계ID -->
+ <td width="80%" class="left">
+ <c:out value="${resultInfo.cntcId}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /></th><!-- 연계명 -->
+ <td class="left">
+ <c:out value="${resultInfo.cntcNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.provider" /></th><!-- 제공기관 -->
+ <td class="left">
+ <c:out value="${resultInfo.provdInsttNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.provideSystem" /></th><!-- 제공시스템 -->
+ <td class="left">
+ <c:out value="${resultInfo.provdSysNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.service" /></th><!-- 제공서비스 -->
+ <td class="left">
+ <c:out value="${resultInfo.provdSvcNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.requester" /></th><!-- 요청기관 -->
+ <td class="left">
+ <c:out value="${resultInfo.requstInsttNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.requestSystem" /></th><!-- 요청시스템 -->
+ <td class="left">
+ <c:out value="${resultInfo.requstSysNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.testClassName" /></th><!-- 테스트클래스명 -->
+ <td class="left">
+ <c:out value="${resultInfo.testClassNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /></th><!-- 관리자명 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrEmailAddr}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.status" /></th><!-- 모니터링상태 -->
+ <td class="left">
+ <c:out value="${resultInfo.mntrngSttusNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.logInfo" /></th><!-- 로그정보 -->
+ <td class="left">
+ <c:out value="${resultInfo.logInfo}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.monitoringDateTime" /></th><!-- 모니터링시각 -->
+ <td class="left">
+ <c:out value="${resultInfo.creatDt}" escapeXml="false" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_list(); return false;" />
+ </div>
+
+</form>
+</DIV>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngList.jsp (revision 7)
@@ -0,0 +1,179 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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="spring" uri="http://www.springframework.org/tags"%>
+<c:set var="pageTitle"><spring:message code="comUtlSysTrm.trsmrcvMntrngList.title"/></c:set>
+<%
+/**
+ * @Class Name : EgovTrsmrcvMntrngList.jsp
+ * @Description : 송수신모니터링 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.07.19 김진만 최초 생성
+ *
+ * @author 김진만
+ * @since 2010.07.19
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle}</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript">
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_get_list('1');
+ }
+ }
+
+ function fn_egov_get_list(pageNo) {
+ if (document.frm.searchKeyword.value != "") {
+ if (document.frm.searchCondition.value == "") {
+ alert("검색조건을 선택하세요.");
+ return;
+ }
+ }
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_get_detail_view(cntcId) {
+ document.frm.cntcId.value = cntcId;
+ document.frm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrng.do'/>";
+ document.frm.submit();
+ }
+ /* ********************************************************
+ * 등록 처리 함수
+ ******************************************************** */
+ function fn_egov_get_regist_view(){
+ document.frm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngForRegist.do'/>";
+ document.frm.submit();
+ }
+
+ function fn_egov_log_mntrng_list(){
+ document.frm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngLogList.do'/>";
+ document.frm.submit();
+ }
+</script>
+
+</head>
+<body>
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle}</h1>
+
+ <form name="frm" id="frm" action="<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" class="select" title="검색조건">
+ <option value=''>--<spring:message code="input.select" />--</option><!-- 선택하세요 -->
+ <option value="0" <c:if test="${searchVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /></option><!-- 연계명 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /></option><!-- 관리자명 -->
+ <option value="3" <c:if test="${searchVO.searchCondition == '3'}">selected="selected"</c:if> ><spring:message code="comUtlSysTrm.trsmrcvMntrng.status" /></option><!-- 상태 -->
+ </select>
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="35" size="25" onkeypress="press(event);" title="검색키워드" />
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fn_egov_get_list('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/trm/getTrsmrcvMntrngForRegist.do'/>" onclick="fn_egov_get_regist_view(); return false;" title='<spring:message code="button.create" />'><spring:message code="button.create" /></a></span>
+ <span class="btn_b"><a href="<c:url value='/utl/sys/trm/getTrsmrcvMntrngLogList.do'/>" onclick="fn_egov_log_mntrng_list(); return false;" title="<spring:message code="button.log" />"><spring:message code="button.log" /></a></span>
+ </li>
+ </ul>
+ </div>
+
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}' default='1' />">
+ <input name="cntcId" type="hidden" value="">
+
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:15%" />
+ <col style="width:27%" />
+ <col style="width:10%" />
+ <col style="width:20%" />
+ <col style="width:18%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationID" /></th><!-- 연계ID -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /></th><!-- 연계명 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.testClassName" /></th><!-- 테스트클래스명 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /></th><!-- 관리자명 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.monitoringDateTime" /></th><!-- 모니터링시각 -->
+ </tr>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.provider" /></th><!-- 제공기관 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.provideSystem" /></th><!-- 제공시스템 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.service" /></th><!-- 제공서비스 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.requester" /></th><!-- 요청기관 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.requestSystem" /></th><!-- 요청시스템 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.status" /></th><!-- 상태 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="6">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <%-- 데이터를 화면에 출력해준다 --%>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td>${resultInfo.cntcId}</td>
+ <td>
+ <form name="item" method="post" action="/utl/sys/trm/getTrsmrcvMntrng.do">
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>">
+ <input type="hidden" name="searchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>">
+ <input type="hidden" name="dataSourcNm" value="">
+ <span class="link"><input type="submit" value="<c:out value="${resultInfo.cntcNm}"/>" onclick="fn_egov_get_detail_view('<c:out value="${resultInfo.cntcId}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td>${resultInfo.testClassNm}</td>
+ <td>${resultInfo.mngrNm}</td>
+ <td>${resultInfo.mngrEmailAddr}</td>
+ <td>${resultInfo.creatDt}</td>
+ </tr>
+ <tr>
+ <td>${resultInfo.provdInsttNm}</td>
+ <td>${resultInfo.provdSysNm}</td>
+ <td>${resultInfo.provdSvcNm}</td>
+ <td>${resultInfo.requstInsttNm}</td>
+ <td>${resultInfo.requstSysNm}</td>
+ <td>${resultInfo.mntrngSttusNm}</td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_get_list"/>
+ </ul>
+ </div>
+
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopup.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopup.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopup.jsp (revision 7)
@@ -0,0 +1,158 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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="spring" uri="http://www.springframework.org/tags"%>
+<%
+/**
+ * @Class Name : EgovCntcListPopup.jsp
+ * @Description : 연계 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ---------- -------- ---------------------------
+ * @ 2010.07.22 김진만 최초 생성
+ * @ 2020.06.30 신용호 화면 오류 수정
+ *
+ * @author 김진만
+ * @since 2010.07.22
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>연계 조회</title>
+<link href="<c:url value="/css/egovframework/com/com.css"/>" rel="stylesheet" type="text/css">
+<link href="<c:url value="/css/egovframework/com/button.css"/>" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/cmm/showModalDialogCallee.js'/>" ></script>
+<script type="text/javascript">
+
+ function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_get_list('1');
+ }
+ }
+
+ function fn_egov_get_list(pageNo) {
+ if (document.frm.searchKeyword.value != "") {
+ if (document.frm.searchCondition.value == "") {
+ alert("검색조건을 선택하세요.");
+ return;
+ }
+ }
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/trm/getCntcList.do'/>";
+ document.frm.submit();
+ }
+
+ // 팝업검색 결과를 호출자에게 리턴하고 화면을 닫는다.
+ function fn_egov_return_cntc(cntcId, cntcNm, provdInsttNm, provdSysNm, provdSvcNm, requstInsttNm, requstSysNm) {
+ getDialogArguments();
+ var opener = parent.window.dialogArguments;
+
+ opener.document.getElementById("cntcId").value = cntcId;
+ opener.document.getElementById("cntcNm").value = cntcNm;
+ opener.document.getElementById("provdInsttNm").innerHTML = provdInsttNm;
+ opener.document.getElementById("provdSysNm").innerHTML = provdSysNm;
+ opener.document.getElementById("provdSvcNm").innerHTML = provdSvcNm;
+ opener.document.getElementById("requstInsttNm").innerHTML = requstInsttNm;
+ opener.document.getElementById("requstSysNm").innerHTML = requstSysNm;
+
+ setReturnValue(true);
+ parent.window.returnValue = true;
+ parent.window.close();
+ }
+
+</script>
+
+</head>
+<body>
+
+<noscript class="noScriptTitle">자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript>
+
+<div class="board">
+ <h1>연계 조회</h1>
+
+ <div class="search_box" title="이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다.">
+ <ul>
+ <li>
+ <select name="searchCondition" class="select" title="검색조건">
+ <option value=''>--선택하세요--</option>
+ <option value="0" <c:if test="${searchVO.searchCondition == '0'}">selected="selected"</c:if> >연계명</option>
+ </select>
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="35" size="35" onkeypress="press(event);" title="검색조건" />
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fn_egov_get_list('1'); return false;" />
+ </li>
+ </ul>
+ </div>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:20%" />
+ <col style="width:15%" />
+ <col style="width:15%" />
+ <col style="width:5%" />
+
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col">연계명</th>
+ <th scope="col">제공기관</th>
+ <th scope="col">제공시스템</th>
+ <th scope="col">제공서비스</th>
+ <th scope="col">요청기관</th>
+ <th scope="col">요청시스템</th>
+ <th scope="col"> </th>
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="7">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <%-- 데이터를 화면에 출력해준다 --%>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td>${resultInfo.cntcNm}</td>
+ <td>${resultInfo.provdInsttNm}</td>
+ <td>${resultInfo.provdSysNm}</td>
+ <td>${resultInfo.provdSvcNm}</td>
+ <td>${resultInfo.requstInsttNm}</td>
+ <td>${resultInfo.requstSysNm}</td>
+ <td>
+ <input class="btn01" type="submit" value="선택"
+ onclick="fn_egov_return_cntc('<c:out value="${resultInfo.cntcId}"/>', '<c:out value="${resultInfo.cntcNm}"/>',
+ '<c:out value="${resultInfo.provdInsttNm}"/>', '<c:out value="${resultInfo.provdSysNm}"/>',
+ '<c:out value="${resultInfo.provdSvcNm}"/>', '<c:out value="${resultInfo.requstInsttNm}"/>',
+ '<c:out value="${resultInfo.requstSysNm}"/>'); return false;">
+ </td>
+
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_get_list"/>
+ </ul>
+ </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopup.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngDetail.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngDetail.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngDetail.jsp (revision 7)
@@ -0,0 +1,171 @@
+<%--
+ Class Name : EgovTrsmrcvMntrngDetail.jsp
+ Description : 송수신모니터링 상세조회 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.07.22 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.07.22
+
+--%>
+<%@ page 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="spring" uri="http://www.springframework.org/tags"%>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<c:set var="pageTitle"><spring:message code="comUtlSysTrm.trsmrcvMntrngDetail.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>${pageTitle}</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_list(){
+ var varForm = document.getElementById("Form");
+ varForm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do'/>";
+ varForm.submit()
+}
+/* ********************************************************
+ * 수정화면으로 바로가기
+ ******************************************************** */
+function fn_egov_update_view(){
+ var varForm = document.getElementById("Form");
+
+ varForm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngForUpdate.do'/>";
+ varForm.submit();
+}
+/* ********************************************************
+ * 삭제 처리
+ ******************************************************** */
+ function fn_egov_delete(){
+ var vForm = document.Form;
+ if(confirm("<spring:message code='common.delete.msg' />")){
+ vForm.action = "<c:url value='/utl/sys/trm/deleteTrsmrcvMntrng.do'/>";
+ vForm.submit();
+ }
+}
+</script>
+</head>
+
+<body >
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<DIV class="wTableFrm">
+
+<form name="Form" id="Form" action="<c:url value='/utl/sys/trm/getTrsmrcvMntrng.do'/>" method="post">
+ <input name="cntcId" type="hidden" value="<c:out value='${resultInfo.cntcId}'/>"/>
+ <!-- 검색조건 유지 -->
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>"/>
+ <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>"/>
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />"/>
+
+ <!-- 상단 타이틀 영역 -->
+ <h2> ${pageTitle}</h2>
+
+ <!-- 등록 폼 영역 -->
+ <table width="700" border="0" cellpadding="0" cellspacing="1" class="wTable"
+ summary="<spring:message code="comUtlSysTrm.trsmrcvMntrngDetail.summary" />"><!-- 등록된 송수신모니터링에 대한 상세정보를 제공합니다. -->
+ <caption>${pageTitle}</caption>
+ <tr>
+ <th height="23" class="required_text" nowrap="nowrap" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationID" /></th><!-- 연계ID -->
+ <td class="left">
+ <c:out value="${resultInfo.cntcId}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /></th><!-- 연계명 -->
+ <td class="left">
+ <c:out value="${resultInfo.cntcNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.provider" /></th><!-- 제공기관 -->
+ <td class="left">
+ <c:out value="${resultInfo.provdInsttNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.provideSystem" /></th><!-- 제공시스템 -->
+ <td class="left">
+ <c:out value="${resultInfo.provdSysNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.service" /></th><!-- 제공서비스 -->
+ <td class="left">
+ <c:out value="${resultInfo.provdSvcNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.requester" /></th><!-- 요청기관 -->
+ <td class="left">
+ <c:out value="${resultInfo.requstInsttNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.requestSystem" /></th><!-- 요청시스템 -->
+ <td class="left">
+ <c:out value="${resultInfo.requstSysNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.testClassName" /></th><!-- 테스트클래스명 -->
+ <td class="left">
+ <c:out value="${resultInfo.testClassNm}" escapeXml="false" />
+ </td>
+ </tr>
+
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /></th><!-- 관리자명 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <c:out value="${resultInfo.mngrEmailAddr}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.status" /></th><!-- 모니터링상태 -->
+ <td class="left">
+ <c:out value="${resultInfo.mntrngSttusNm}" escapeXml="false" />
+ </td>
+ </tr>
+ <tr>
+ <th height="23" class="required_text" ><spring:message code="comUtlSysTrm.trsmrcvMntrng.monitoringDateTime" /></th><!-- 모니터링시각 -->
+ <td class="left">
+ <c:out value="${resultInfo.creatDt}" escapeXml="false" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 목록/저장버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value="<spring:message code="button.update" />" onclick="fn_egov_update_view(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.delete" />" onclick="fn_egov_delete(); return false;" />
+ <input class="s_submit" type="submit" value="<spring:message code="button.list" />" onclick="fn_egov_list(); return false;" />
+ </div>
+
+
+</form>
+</DIV>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngDetail.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopupFrame.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopupFrame.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopupFrame.jsp (revision 7)
@@ -0,0 +1,38 @@
+<%--
+ Class Name : EgovCntcListPopupFrame.jsp
+ Description : 연계정보 목록 조회를 위한 Frame화면
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.07.22 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.07.22
+
+--%>
+<%@ page 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"%>
+<c:set var="imgUrl" value="/images/egovframework/com/cmm/"/>
+<c:set var="cssUrl" value="/css/egovframework/com/"/>
+<html lang="ko">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link type="text/css" rel="stylesheet" href="${cssUrl}com.css" />
+<script type="text/javaScript" language="javascript">
+
+</script>
+</head>
+<body>
+<DIV id="content" style="width:775px">
+<!-- iframe -->
+<iframe title="연계목록" id="cntcPopupFrame" src="<c:url value='/utl/sys/trm/getCntcList.do' />" width="100%" height="475px" frameborder="0" scrolling="no" marginwidth="0" marginheight="0" >
+</iframe>
+</DIV>
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovCntcListPopupFrame.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngRegist.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngRegist.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngRegist.jsp (revision 7)
@@ -0,0 +1,180 @@
+<%--
+ Class Name : EgovTrsmrcvMntrngRegist.jsp
+ Description : 송수신모니터링 등록 페이지
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2010.07.22 김진만 최초 생성
+
+ author : 공통서비스 개발팀 김진만
+ since : 2010.07.22
+
+--%>
+<%@ page 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"><spring:message code="comUtlSysTrm.trsmrcvMntrngRegist.title"/></c:set>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" >
+<title>${pageTitle}</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js' />"></script>
+<validator:javascript formName="trsmrcvMntrng" staticJavascript="false" xhtml="true" cdata="false"/>
+<script type="text/javaScript" language="javascript">
+
+
+/* ********************************************************
+ * 목록 으로 가기
+ ******************************************************** */
+function fn_egov_get_list(){
+ var varForm = document.getElementById("trsmrcvMntrng");
+ varForm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do' />";
+ varForm.submit()
+}
+/* ********************************************************
+ * 저장처리화면
+ ******************************************************** */
+function fn_egov_save(){
+ var varForm = document.getElementById("trsmrcvMntrng");
+ varForm.action = "<c:url value='/utl/sys/trm/addTrsmrcvMntrng.do' />";
+
+ if(!validateTrsmrcvMntrng(varForm)){
+ return;
+ }else{
+ if(confirm("<spring:message code='common.save.msg' />")){
+ varForm.submit();
+ }
+ }
+
+}
+
+/* ********************************************************
+* 연계검색 팝업화면
+******************************************************** */
+function fn_egov_popup_cntc_list(){
+
+ var retVal;
+ var url = "<c:url value='/utl/sys/trm/getCntcListPopup.do' />";
+ var openParam = "dialogWidth: 850px; dialogHeight: 360px; resizable: 0, scroll: 1, center: 1";
+
+ retVal = window.showModalDialog(url,window,openParam);
+
+}
+
+function showModalDialogCallback(retVal) {
+}
+
+</script>
+</head>
+<body>
+
+<%-- noscript 테그 --%>
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<form:form commandName="trsmrcvMntrng" id="trsmrcvMntrng" action="" method="post">
+
+<!-- 검색조건 유지 -->
+<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>">
+<input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword}'/>">
+<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}' default='1' />">
+
+<div class="wTableFrm">
+ <!-- 타이틀 -->
+ <h2>${pageTitle}</h2>
+
+ <!-- 등록폼 -->
+ <table class="wTable">
+ <colgroup>
+ <col style="width:20%" />
+ <col style="" />
+ </colgroup>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationID" /> <span class="pilsu">*</span></th><!-- 연계ID -->
+ <td class="left">
+ <form:input path="cntcId" maxlength="8" readonly="true" cssClass="readOnlyClass" cssStyle="width:128px"/>
+ <form:errors path="cntcId" cssClass="error" />
+ <a href="#LINK" onclick="fn_egov_popup_cntc_list(); return false;"><img src="<c:url value='/images/egovframework/com/cmm/icon/search2.gif' />" alt="<spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationPopup" />"/></a><!-- 연계정보조회팝업 제공 -->
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /> <span class="pilsu">*</span></th><!-- 연계명 -->
+ <td class="left">
+ <form:input path="cntcNm" size="60" maxlength="100" readonly="true" cssClass="readOnlyClass"/>
+ <form:errors path="cntcNm" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.provider" /></th><!-- 제공기관 -->
+ <td class="left">
+ <label id="provdInsttNm"><c:out value="${resultInfo.provdInsttNm}" escapeXml="false" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.provideSystem" /></th><!-- 제공시스템 -->
+ <td class="left">
+ <label id="provdSysNm"><c:out value="${resultInfo.provdSysNm}" escapeXml="false" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.service" /></th><!-- 제공서비스 -->
+ <td class="left">
+ <label id="provdSvcNm"><c:out value="${resultInfo.provdSvcNm}" escapeXml="false" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.requester" /></th><!-- 요청기관 -->
+ <td class="left">
+ <label id="requstInsttNm"><c:out value="${resultInfo.requstInsttNm}" escapeXml="false" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.requestSystem" /></th><!-- 요청시스템 -->
+ <td class="left">
+ <label id="requstSysNm"><c:out value="${resultInfo.requstSysNm}" escapeXml="false" /></label>
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.testClassName" /> <span class="pilsu">*</span></th><!-- 테스트클래스명 -->
+ <td class="left">
+ <form:input path="testClassNm" size="100" maxlength="255"/>
+ <form:errors path="testClassNm" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /> <span class="pilsu">*</span></th><!-- 관리자명 -->
+ <td class="left">
+ <form:input path="mngrNm" size="60" maxlength="60"/>
+ <form:errors path="mngrNm" cssClass="error" />
+ </td>
+ </tr>
+ <tr>
+ <th><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerEmail" /> <span class="pilsu">*</span></th><!-- 관리자이메일주소 -->
+ <td class="left">
+ <form:input path="mngrEmailAddr" size="50" maxlength="50"/>
+ <form:errors path="mngrEmailAddr" cssClass="error" />
+ </td>
+ </tr>
+ </table>
+
+ <!-- 하단 버튼 -->
+ <div class="btn">
+ <input class="s_submit" type="submit" value='<spring:message code="button.save" />' onclick="fn_egov_save(); return false;" />
+ <span class="btn_s"><a href="<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do'/>" onclick="fn_egov_get_list(); return false;"><spring:message code="button.list" /></a></span>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+
+</form:form>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngRegist.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogList.jsp (revision 7)
@@ -0,0 +1,349 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<c:set var="pageTitle"><spring:message code="comUtlSysTrm.trsmrcvMntrngLogList.title"/></c:set>
+<%
+/**
+ * @Class Name : EgovTrsmrcvMntrngLogList.jsp
+ * @Description : 송수신모니터링로그 목록조회
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2010.08.17 김진만 최초 생성
+ * @ 2018.08.03 신용호 fn_egov_remove_string을 replace function으로 삭제
+ *
+ * @author 김진만
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>${pageTitle}</title>
+<link href="<c:url value='/css/egovframework/com/com.css' />" rel="stylesheet" type="text/css">
+<link href="<c:url value='/css/egovframework/com/button.css' />" rel="stylesheet" type="text/css">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script type="text/javascript" src="<c:url value='/js/egovframework/com/sym/cal/EgovCalPopup.js'/>" ></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script type="text/javascript">
+/* ********************************************************
+ * 초기화
+ ******************************************************** */
+ function fn_egov_init(){
+
+ var vForm = document.frm;
+
+ if (vForm.searchKeywordFrom.value == "") {
+ // 조회일자에 현재날짜 세팅
+ //alert("빈문자열입니다. ");
+ //vForm.searchStartDate.value = fn_egov_getToday();
+ //vForm.searchEndDate.value = fn_egov_getToday();
+ //vForm.searchEndHour.options[23].selected = true;
+ } else {
+ // 조회조건 지정된 것 설정하기.
+ // 조회시작일자
+ vForm.searchStartDate.value = vForm.searchKeywordFrom.value.substring(0,4) + '-' + vForm.searchKeywordFrom.value.substring(4,6) + '-' + vForm.searchKeywordFrom.value.substring(6,8);
+ for(i = 0; i < vForm.searchStartHour.options.length; i++) {
+ if (vForm.searchStartHour.options[i].value == vForm.searchKeywordFrom.value.substring(8,10)) {
+ vForm.searchStartHour.options[i].selected = true;
+ break;
+ }
+ }
+ for(i = 0; i < vForm.searchStartMin.options.length; i++) {
+ if (vForm.searchStartMin.options[i].value == vForm.searchKeywordFrom.value.substring(10,12)) {
+ vForm.searchStartMin.options[i].selected = true;
+ break;
+ }
+ }
+ // 조회종료일자
+ vForm.searchEndDate.value = vForm.searchKeywordTo.value.substring(0,4) + '-' + vForm.searchKeywordTo.value.substring(4,6) + '-' + vForm.searchKeywordTo.value.substring(6,8);
+ for(i = 0; i < vForm.searchEndHour.options.length; i++) {
+ if (vForm.searchEndHour.options[i].value == vForm.searchKeywordTo.value.substring(8,10)) {
+ vForm.searchEndHour.options[i].selected = true;
+ break;
+ }
+ }
+ for(i = 0; i < vForm.searchEndMin.options.length; i++) {
+ if (vForm.searchEndMin.options[i].value == vForm.searchKeywordTo.value.substring(10,12)) {
+ vForm.searchEndMin.options[i].selected = true;
+ break;
+ }
+ }
+ }
+
+ $("#searchStartDate").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+
+ $("#searchEndDate").datepicker(
+ {dateFormat:'yy-mm-dd'
+ , showOn: 'button'
+ , buttonImage: '<c:url value='/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif'/>'
+ , buttonImageOnly: true
+
+ , showMonthAfterYear: true
+ , showOtherMonths: true
+ , selectOtherMonths: true
+
+ , changeMonth: true // 월선택 select box 표시 (기본은 false)
+ , changeYear: true // 년선택 selectbox 표시 (기본은 false)
+ , showButtonPanel: true // 하단 today, done 버튼기능 추가 표시 (기본은 false)
+ });
+
+ vForm.searchKeyword.focus();
+
+
+}
+
+/* ********************************************************
+ * 현재날짜 가져오기
+ ******************************************************** */
+function fn_egov_getToday(){
+
+ var today = new Date();
+ var currentYear = today.getYear();
+ var currentMonth = (today.getMonth()+1).toString();
+ var currentDay = today.getDate().toString();
+
+ var currentToday = currentYear + "-" + fn_egov_getLpad(2,currentMonth) + "-" + fn_egov_getLpad(2,currentDay);
+
+ return currentToday;
+}
+
+/* ********************************************************
+ * LPAD 처리
+ ******************************************************** */
+function fn_egov_getLpad(rtnSize, sourceStr)
+{
+ rtnStr = sourceStr;
+
+ for( i= sourceStr.length; i<parseInt(rtnSize); i++)
+ rtnStr = "0" + rtnStr;
+
+ return rtnStr;
+}
+
+function press(event) {
+ if (event.keyCode==13) {
+ fn_egov_get_list('1');
+ }
+}
+
+function fn_egov_get_list(pageNo) {
+
+ if (document.frm.searchKeyword.value != "") {
+ if (document.frm.searchCondition.value == "") {
+ alert("검색조건을 선택하세요.");
+ return;
+ }
+ }
+ /* 폼전송 데이타 조립. */
+ var startDate = "";
+ var endDate = "";
+ if (document.frm.searchStartDate.value != "") {
+ startDate = document.frm.searchStartDate.value;
+ startDate = startDate.replace(/-/gi,"");
+ }
+ if (document.frm.searchEndDate.value != "") {
+ endDate = document.frm.searchEndDate.value;
+ endDate = endDate.replace(/-/gi,"");
+ }
+ document.frm.searchKeywordFrom.value = startDate + document.frm.searchStartHour.value + document.frm.searchStartMin.value;
+ document.frm.searchKeywordTo.value = endDate + document.frm.searchEndHour.value + document.frm.searchEndMin.value;
+ /*
+ 검색조건 체크
+ */
+ if (document.frm.searchKeywordFrom.value != "" || document.frm.searchKeywordTo.value != "") {
+ if (document.frm.searchKeywordFrom.value == "") {
+ alert("검색시작일자를 입력하세요");
+ return ;
+ }
+ if (document.frm.searchKeywordTo.value == "") {
+ alert("검색종료일자를 입력하세요");
+ return ;
+ }
+ if(document.frm.searchKeywordFrom.value > document.frm.searchKeywordTo.value) {
+ alert("검색종료시각이 검색시작시각보다 빠를수 없습니다.");
+ return ;
+ }
+ }
+
+ document.frm.pageIndex.value = pageNo;
+ document.frm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngLogList.do'/>";
+ document.frm.submit();
+}
+
+function fn_egov_get_detail_view(logId) {
+ document.frm.logId.value = logId;
+ document.frm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngLog.do'/>";
+ document.frm.submit();
+}
+
+function fn_egov_select_mntrng(){
+ document.frm.action = "<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do'/>";
+ document.frm.submit();
+}
+</script>
+
+</head>
+<body onLoad="fn_egov_init();">
+
+<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
+
+<div class="board">
+ <h1>${pageTitle}</h1>
+
+ <form name="frm" id="frm" action="<c:url value='/utl/sys/trm/getTrsmrcvMntrngLogList.do'/>" method="post">
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <ul>
+ <li>
+ <select name="searchCondition" class="select" title="검색조건구분">
+ <option value=''>--<spring:message code="input.select" />--</option>
+ <option value="0" <c:if test="${searchVO.searchCondition == '0'}">selected="selected"</c:if> ><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /></option><!-- 연계명 -->
+ <option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if> ><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /></option><!-- 관리자명 -->
+ </select>
+ <input class="s_input2 vat" name="searchKeyword" type="text" value='<c:out value="${searchVO.searchKeyword}"/>' maxlength="35" onkeypress="press(event);" title="검색키워드" style="width:72px"/>
+
+ <label for="">기간 : </label>
+ <input type="hidden" name="cal_url" id="cal_url" value="<c:url value='/sym/cal/EgovNormalCalPopup.do'/>" >
+ <input type="text" name="searchStartDate" id="searchStartDate" title="검색시작일자" style="width:70px" readonly="readonly" />
+ <select name="searchStartHour" id="searchStartHour" title="검색시작시간">
+ <option value="">선택</option>
+ <c:forEach var="h" begin="1" end="24" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+ :
+ <select name="searchStartMin" id="searchStartMin" title="검색시작분">
+ <option value="">선택</option>
+ <c:forEach var="h" begin="0" end="59" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+ ~
+ <input type="text" name="searchEndDate" id="searchEndDate" title="검색종료일자" style="width:70px" readonly="readonly" />
+ <select name="searchEndHour" id="searchEndHour" title="검색종료시간">
+ <option value="">선택</option>
+ <c:forEach var="h" begin="1" end="24" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+ :
+ <select name="searchEndMin" id="searchEndMin" title="검색종료분">
+ <option value="">선택</option>
+ <c:forEach var="h" begin="0" end="59" step="1">
+ <option value="<fmt:formatNumber value="${h}" pattern="00"/>"><fmt:formatNumber value="${h}" pattern="00"/></option>
+ </c:forEach>
+ </select>
+
+ <input class="s_btn" type="submit" value='<spring:message code="button.inquire" />' title='<spring:message code="button.inquire" />' onclick="fn_egov_get_list('1'); return false;" />
+ <span class="btn_b"><a href="<c:url value='/utl/sys/trm/getTrsmrcvMntrngList.do'/>" onclick="fn_egov_select_mntrng(); return false;" title="<spring:message code="button.list" />"><spring:message code="button.list" /></a></span>
+ </li>
+ </ul>
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}' default='1' />">
+ <input name="searchKeywordFrom" type="hidden" value="<c:out value='${searchVO.searchKeywordFrom}'/>">
+ <input name="searchKeywordTo" type="hidden" value="<c:out value='${searchVO.searchKeywordTo}'/>">
+ <input name="logId" type="hidden" value="">
+ </form>
+
+ <table class="board_list">
+ <caption></caption>
+ <colgroup>
+ <col style="width:10%" />
+ <col style="width:15%" />
+ <col style="width:27%" />
+ <col style="width:10%" />
+ <col style="width:20%" />
+ <col style="width:18%" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationID" /></th><!-- 연계ID -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.interOperationName" /></th><!-- 연계명 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.testClassName" /></th><!-- 테스트클래스명 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerName" /></th><!-- 관리자명 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.managerEmail" /></th><!-- 관리자이메일주소 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.monitoringDateTime" /></th><!-- 모니터링시각 -->
+ </tr>
+ <tr>
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.provider" /></th><!-- 제공기관 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.provideSystem" /></th><!-- 제공시스템 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.service" /></th><!-- 제공서비스 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.requester" /></th><!-- 요청기관 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.requestSystem" /></th><!-- 요청시스템 -->
+ <th scope="col"><spring:message code="comUtlSysTrm.trsmrcvMntrng.status" /></th><!-- 상태 -->
+ </tr>
+ </thead>
+ <tbody>
+ <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%>
+ <c:if test="${fn:length(resultList) == 0}">
+ <tr>
+ <td colspan="6">
+ <spring:message code="common.nodata.msg" />
+ </td>
+ </tr>
+ </c:if>
+ <%-- 데이터를 화면에 출력해준다 --%>
+ <c:forEach items="${resultList}" var="resultInfo" varStatus="status">
+ <tr>
+ <td>${resultInfo.cntcId}</td>
+ <td>
+ <form name="item" method="post" action="/utl/sys/trm/getTrsmrcvMntrngLog.do">
+ <input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>">
+ <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition}'/>">
+ <input type="hidden" name="searchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>">
+ <input type="hidden" name="searchKeywordFrom" value="<c:out value='${searchVO.searchKeywordFrom}'/>">
+ <input type="hidden" name="searchKeywordTo" value="<c:out value='${searchVO.searchKeywordTo}'/>">
+ <input type="hidden" name="logid" value="<c:out value="${resultInfo.logId}"/>">
+ <span class="link"><input type="submit" value="<c:out value="${resultInfo.cntcNm}"/>" onclick="fn_egov_get_detail_view('<c:out value="${resultInfo.logId}"/>'); return false;"></span>
+ </form>
+ </td>
+ <td>${resultInfo.testClassNm}</td>
+ <td>${resultInfo.mngrNm}</td>
+ <td>${resultInfo.mngrEmailAddr}</td>
+ <td nowrap="nowrap">${resultInfo.creatDt}</td>
+ </tr>
+ <tr>
+ <td>${resultInfo.provdInsttNm}</td>
+ <td>${resultInfo.provdSysNm}</td>
+ <td>${resultInfo.provdSvcNm}</td>
+ <td>${resultInfo.requstInsttNm}</td>
+ <td>${resultInfo.requstSysNm}</td>
+ <td>${resultInfo.mntrngSttusNm}</td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+
+ <!-- paging navigation -->
+ <div class="pagination">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_get_list"/>
+ </ul>
+ </div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/sys/trm/EgovTrsmrcvMntrngLogList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/cal/EgovCalendar.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/cal/EgovCalendar.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/cal/EgovCalendar.jsp (revision 7)
@@ -0,0 +1,64 @@
+<%
+ /**
+ * @Class Name : EgovCalendar.jsp
+ * @Description : 캘린더 JSP
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2016.07.13 장동한 최초 생성
+ *
+ * @author 2016 표준프레임워크유지보수 장동한
+ * @since 2016.07.13
+ * @version 1.0
+ * @see
+ *
+ */
+%>
+<%@ 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" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>calendar</title>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />">
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/cmm/jqueryui.css' />">
+<script src="<c:url value='/js/egovframework/com/cmm/jquery.js' />"></script>
+<script src="<c:url value='/js/egovframework/com/cmm/jqueryui.js' />"></script>
+<script>
+ $(function() {
+ $( "#datepicker" ).datepicker({
+ showMonthAfterYear: true,
+ showOtherMonths: true,
+ selectOtherMonths: true,
+ dateFormat: "yy-mm-dd"
+ });
+ });
+
+/*
+ $(function() {
+ $( "#datepicker" ).datepicker({
+ showMonthAfterYear: true,
+ //yearSuffix: "년",
+ //monthNames: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
+ //dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
+ showOtherMonths: true,
+ selectOtherMonths: true,
+ dateFormat: "yy-mm-dd"
+ });
+ });
+*/
+</script>
+
+
+</head>
+<body>
+<p>Date: <input type="text" id="datepicker" value="2016-07-16"></p>
+
+</body>
+</html>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/cal/EgovCalendar.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/pao/EgovErncslOutpt.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/pao/EgovErncslOutpt.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/pao/EgovErncslOutpt.jsp (revision 7)
@@ -0,0 +1,134 @@
+<%--
+ Filename : ComUtlPaoErncslOutpt.jsp
+ Description : 전자관인 출력 TEST JSP
+ Modification Information
+
+ 수정일 수정자 수정내용
+ ------- -------- ---------------------------
+ 2008.02.26 이중호 최초 생성
+
+ author : 이중호
+ since : 2009.02.26
+
+--%>
+<%@ page language="java" contentType="text/html; charset=UTF-8" session="false" %>
+<%@page import="egovframework.com.utl.pao.service.EgovPrntngOutpt" %>
+<%@page import="java.util.*" %>
+<%@page import="java.io.*" %>
+<%@page import="javax.imageio.*" %>
+<%@page import="java.awt.*" %>
+<%@page import="java.awt.image.*" %>
+
+<link href="/css/egovframework/com/cmm/utl/com.css" rel="stylesheet" type="text/css">
+
+<%
+// 준비화면, 실행결과 출력화면의 구분
+String execFlag = request.getParameter("execFlag");
+String CmdStr = "ComUtlPaoErncslOutpt";
+if(execFlag==null || execFlag.equals("")) {
+ execFlag="READY";
+}
+%>
+
+<%
+if(!execFlag.equals("EgovPrntngOutpt")){
+%>
+
+<!-- 준비화면 시작-->
+<form name="ready" action ="/utl/pao/EgovPrntngOutpt.do" method="post">
+<input type = "hidden" name="execFlag" value="EgovPrntngOutpt">
+<input type = "hidden" name="cmdStr" value="<%=CmdStr%>">
+<table border="1">
+ <tr>
+ <td>
+ 기능설명:
+ </td>
+ <td>
+ 전자관인 출력<br>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ 테스트:
+ </td>
+ <td>
+ 기관코드:10, 관인구분:1 로 관인이미지 확인
+ </td>
+ </tr>
+ <tr>
+ <td>
+ 기관코드 (10):
+ </td>
+ <td> <input type = "text" name="sOrgCode" size=10>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ 관인구분 (1):
+ </td>
+ <td> <input type = "text" name="sErncslSe" size=2><input type = "button" method="post" value="실행!" onclick="ready.submit()">
+ </td>
+ </tr>
+
+</table>
+</form>
+<!-- 준비화면 끝 -->
+<%
+}
+%>
+
+<%
+if(execFlag.equals("EgovPrntngOutpt")){
+%>
+<%
+//실행결과 출력화면인 경우 결과정보 확인 - util 형태로 바로 확인
+String sOrgCode = request.getParameter("sOrgCode");
+String sErncslSe = request.getParameter("sErncslSe");
+
+%>
+
+<!-- 결과화면 시작 -->
+<form name="result" action ="/utl/pao/EgovPrntngOutpt.do">
+<input type = "hidden" name="execFlag" value="READY">
+<input type = "hidden" name="cmdStr" value="<%=CmdStr%>">
+<table border="1">
+ <tr>
+ <td>기관코드 : (<c:out value="${sOrgCode}"/>)
+ </td>
+ </tr>
+ <tr>
+ <td>관인구분 : (<c:out value="${sErncslSe}"/>)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <img src="/utl/pao/EgovErncsl.do?sOrgCode=<c:out value="${sOrgCode}"/>&sErncslSe=<c:out value="${sErncslSe}"/>">
+ </td>
+ </tr>
+</table>
+<br>
+<input type = "button" method="post" value="테스트로 돌아가기" onclick="result.submit()">
+</form>
+<!-- 결과화면 끝 -->
+<%
+}
+%>
+
+
+<%--
+테스트를 위한 테이블 정보
+
+DROP TABLE IMGTEMP;
+
+CREATE TABLE IMGTEMP (
+ ORG_CODE VARCHAR(7) NULL,
+ ERNCSL_SE VARCHAR(2) NULL,
+ IMG_INFO MEDIUMBLOB NOT NULL,
+ IMG_TYPE VARCHAR(16) NULL
+);
+
+ALTER TABLE IMGTEMP
+ADD PRIMARY KEY (ORG_CODE,ERNCSL_SE)
+;
+
+--%>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/utl/pao/EgovErncslOutpt.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_head.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_head.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_head.jsp (revision 7)
@@ -0,0 +1,66 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<link type="text/css" rel="stylesheet" href="<c:url value='/css/egovframework/com/main_portal.css' />">
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>HeadMenu</title>
+<script type="text/javascript">
+var getContextPath = "${pageContext.request.contextPath}";
+</script>
+<script language="javascript" src="<c:url value='/js/egovframework/com/main.js' />"></script>
+<script type="text/javascript">
+ function fn_main_headPageMove(menuNo, url){
+ document.selectOne.vStartP.value=menuNo;
+ document.selectOne.chkURL.value=url;
+ document.selectOne.action = "<c:url value='/sym/mnu/mpm/EgovMainMenuLeft.do'/>";
+ document.selectOne.target = "main_left";
+ document.selectOne.submit();
+ document.selectOne.action = "<c:url value='/sym/mnu/mpm/EgovMainMenuRight.do'/>";
+ document.selectOne.target = "main_right";
+ document.selectOne.submit();
+ }
+
+ function actionLogout()
+ {
+ document.selectOne.action = "<c:url value='/uat/uia/actionLogout.do'/>";
+ document.selectOne.target = "_top";
+ document.selectOne.submit();
+ //top.document.location.href = "<c:url value='/j_spring_security_logout'/>";
+ }
+</script>
+</head>
+<body leftmargin="0" topmargin="0" marginwidth="0" marginheight= "0">
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/egovframework/com/common.css' />" />
+<link rel="stylesheet" href="<c:url value='/css/egovframework/com/com.css' />" type="text/css" />
+<form name="selectOne">
+<input name="vStartP" type="hidden" />
+<input name="chkURL" type="hidden" />
+</form>
+
+ <div id="gnb">
+ <div id="top_logo"><a href="<c:url value='/sym/mnu/mpm/EgovMainMenuHome.do' />" target=_top><img src="<c:url value='/images/egovframework/com/cmm/main/logo_01.gif' />" alt="egovframe" /></a></div>
+ <div id="use_descri">
+ <ul>
+ <li>공통서비스 테스트 사이트</li>
+ <li><a href="javascript:actionLogout()"><img src="<c:url value='/images/egovframework/com/cmm/main/logout_btn.gif' />" alt="로그아웃" /></a></li>
+ </ul>
+ </div>
+ </div>
+ <div id="new_topnavi">
+ <ul>
+ <li><a href="<c:url value='/sym/mnu/mpm/EgovMainMenuHome.do' />" target="_top">HOME</a></li>
+ <c:forEach var="result" items="${list_headmenu}" varStatus="status">
+ <li class="gap"> l </li>
+ <li><a href="javascript:fn_main_headPageMove('<c:out value="${result.menuNo}"/>','<c:out value="${result.chkURL}"/>')"><c:out value="${result.menuNm}"/></a></li>
+ </c:forEach>
+ </ul>
+ </div>
+
+
+</body>
+</html>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/main_head.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/index.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/index.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/index.jsp (revision 7)
@@ -0,0 +1,4 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%--<jsp:forward page="/sym/mms/EgovMainMenuHome.do"/>--%>
+<%--<jsp:forward page="WEB-INF/jsp/egovframework/com/cmm/EgovUnitMain.jsp"/>--%>
+<jsp:forward page="/EgovContent.do"/>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/index.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/blank.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/blank.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/blank.jsp (revision 7)
@@ -0,0 +1 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/blank.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/tlds/egovc.tld
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tlds/egovc.tld (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/tlds/egovc.tld (revision 7)
@@ -0,0 +1,552 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+
+ <description>Egov CrossSite Tag Replace Special Html Code Convert(JSTL 1.1 core library 기반)</description>
+ <display-name>Egov JSTL core</display-name>
+ <tlib-version>1.1</tlib-version>
+ <short-name>egovc</short-name>
+ <tag>
+ <description>
+ Catches any Throwable that occurs in its body and optionally
+ exposes it.
+ </description>
+ <name>catch</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+exception thrown from a nested action. The type of the
+scoped variable is the type of the exception thrown.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Simple conditional tag that establishes a context for
+ mutually exclusive conditional operations, marked by
+ <when> and <otherwise>
+ </description>
+ <name>choose</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <description>
+ Simple conditional tag, which evalutes its body if the
+ supplied condition is true and optionally exposes a Boolean
+ scripting variable representing the evaluation of this condition
+ </description>
+ <name>if</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The test condition that determines whether or
+not the body content should be processed.
+ </description>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+resulting value of the test condition. The type
+of the scoped variable is Boolean.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Retrieves an absolute or relative URL and exposes its contents
+ to either the page, a String in 'var', or a Reader in 'varReader'.
+ </description>
+ <name>import</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The URL of the resource to import.
+ </description>
+ <name>url</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is String.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is Reader.
+ </description>
+ <name>varReader</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the context when accessing a relative
+URL resource that belongs to a foreign
+context.
+ </description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Character encoding of the content at the input
+resource.
+ </description>
+ <name>charEncoding</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ The basic iteration tag, accepting many different
+ collection types and supporting subsetting and other
+ functionality
+ </description>
+ <name>forEach</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Collection of items to iterate over.
+ </description>
+ <name>items</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.Object</type>
+ </attribute>
+ <attribute>
+ <description>
+If items specified:
+Iteration begins at the item located at the
+specified index. First item of the collection has
+index 0.
+If items not specified:
+Iteration begins with index set at the value
+specified.
+ </description>
+ <name>begin</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+If items specified:
+Iteration ends at the item located at the
+specified index (inclusive).
+If items not specified:
+Iteration ends when index reaches the value
+specified.
+ </description>
+ <name>end</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration will only process every step items of
+the collection, starting with the first one.
+ </description>
+ <name>step</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility. Its type depends
+on the object of the underlying collection.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of type
+javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested
+visibility.
+ </description>
+ <name>varStatus</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Iterates over tokens, separated by the supplied delimeters
+ </description>
+ <name>forTokens</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+String of tokens to iterate over.
+ </description>
+ <name>items</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ <attribute>
+ <description>
+The set of delimiters (the characters that
+separate the tokens in the string).
+ </description>
+ <name>delims</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration begins at the token located at the
+specified index. First token has index 0.
+ </description>
+ <name>begin</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration ends at the token located at the
+specified index (inclusive).
+ </description>
+ <name>end</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Iteration will only process every step tokens
+of the string, starting with the first one.
+ </description>
+ <name>step</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>int</type>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of
+type
+javax.servlet.jsp.jstl.core.LoopTag
+Status. This scoped variable has nested
+visibility.
+ </description>
+ <name>varStatus</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Like <%= ... >, but for expressions.
+ </description>
+ <name>out</name>
+ <tag-class>egovframework.com.cmm.EgovComCrossSiteHndlr</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Expression to be evaluated.
+ </description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Default value if the resulting value is null.
+ </description>
+ <name>default</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Determines whether characters <,>,&,'," in the
+resulting string should be converted to their
+corresponding character entity codes. Default value is
+true.
+ </description>
+ <name>escapeXml</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+
+ <tag>
+ <description>
+ Subtag of <choose> that follows <when> tags
+ and runs only if all of the prior conditions evaluated to
+ 'false'
+ </description>
+ <name>otherwise</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <description>
+ Adds a parameter to a containing 'import' tag's URL.
+ </description>
+ <name>param</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the query string parameter.
+ </description>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Value of the parameter.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Redirects to a new URL.
+ </description>
+ <name>redirect</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.RedirectTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The URL of the resource to redirect to.
+ </description>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the context when redirecting to a relative URL
+resource that belongs to a foreign context.
+ </description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Removes a scoped variable (from a particular scope, if specified).
+ </description>
+ <name>remove</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+Name of the scoped variable to be removed.
+ </description>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Sets the result of an expression evaluation in a 'scope'
+ </description>
+ <name>set</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.SetTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the exported scoped variable to hold the value
+specified in the action. The type of the scoped variable is
+whatever type the value expression evaluates to.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Expression to be evaluated.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Target object whose property will be set. Must evaluate to
+a JavaBeans object with setter property property, or to a
+java.util.Map object.
+ </description>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the property to be set in the target object.
+ </description>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Creates a URL with optional query parameters.
+ </description>
+ <name>url</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.UrlTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+Name of the exported scoped variable for the
+processed url. The type of the scoped variable is
+String.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Scope for var.
+ </description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+URL to be processed.
+ </description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+Name of the context when specifying a relative URL
+resource that belongs to a foreign context.
+ </description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Subtag of <choose> that includes its body if its
+ condition evalutes to 'true'
+ </description>
+ <name>when</name>
+ <tag-class>org.apache.taglibs.standard.tag.rt.core.WhenTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>
+The test condition that determines whether or not the
+body content should be processed.
+ </description>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ </tag>
+
+</taglib>
Property changes on: base3.10/src/main/webapp/WEB-INF/tlds/egovc.tld
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/META-INF/double-submit.tld
===================================================================
--- base3.10/src/main/webapp/WEB-INF/META-INF/double-submit.tld (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/META-INF/double-submit.tld (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE taglib
+ PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+ <tlib-version>1.3</tlib-version>
+ <jsp-version>1.2</jsp-version>
+ <short-name>double-submit</short-name>
+ <uri>http://www.egovframe.go.kr/tags/double-submit/jsp</uri>
+
+ <tag>
+ <name>preventer</name>
+ <tag-class>egovframework.com.cmm.taglibs.DoubleSubmitTag</tag-class>
+ <attribute>
+ <name>tokenKey</name>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+</taglib>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/META-INF/double-submit.tld
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/web.xml
===================================================================
--- base3.10/src/main/webapp/WEB-INF/web.xml (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/web.xml (revision 7)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app id="WebApp_ID" version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
+<!--
+ 수정일 수성자 수정내용
+ ========== ======== =================================================
+ 2011.9.19 이기하 filter 정리
+ 2013.5.31 이기하 미사용 filter 정리(.mdo, .action)
+ 2016.6.34 장동한 WebApplicationInitializer 방식으로 변경
+-->
+
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>egovDevIndex.jsp</welcome-file>
+ </welcome-file-list>
+
+ <login-config>
+ <auth-method>BASIC</auth-method>
+ </login-config>
+
+ <session-config>
+ <session-timeout>60</session-timeout>
+ <!-- <tracking-mode>COOKIE</tracking-mode> -->
+ </session-config>
+
+ <error-page>
+ <error-code>404</error-code>
+ <location>/code404.jsp</location>
+ </error-page>
+
+ <error-page>
+ <error-code>500</error-code>
+ <location>/code500.jsp</location>
+ </error-page>
+
+</web-app>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/web.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/images/custom/icon_login_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_login_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_login_fff.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 29.1 36.7" style="enable-background:new 0 0 29.1 36.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M4.2,8.3c0-3.7,3-6.8,6.8-6.8h9.9c3.7,0,6.8,3,6.8,6.8v20.1c0,3.7-3,6.8-6.8,6.8H11c-3.7,0-6.8-3-6.8-6.8"/>
+ <polyline class="st0" points="12.9,11.4 19.8,18.3 12.9,25.3 "/>
+ <line class="st0" x1="19.8" y1="18.3" x2="1.7" y2="18.3"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/box_body3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_body3.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tos4.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tos4.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tos4.svg (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 33.3 29.3" style="enable-background:new 0 0 33.3 29.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="22.2,13.1 22.2,1 1,1 1,28.3 22.2,28.3 22.2,18 "/>
+ <line class="st0" x1="5.4" y1="7.2" x2="17.8" y2="7.2"/>
+ <line class="st0" x1="5.4" y1="12.4" x2="17.8" y2="12.4"/>
+ <line class="st0" x1="5.4" y1="17.7" x2="16" y2="17.7"/>
+ <line class="st0" x1="10.8" y1="23" x2="17.8" y2="23"/>
+ <polygon class="st0" points="30.6,8.7 17.5,15.9 14.5,19.5 19.2,18.9 32.3,11.7 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_circle.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_circle.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_circle.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 200.1 200.1" style="enable-background:new 0 0 200.1 200.1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4FE179;}
+ .st1{fill:#3BBCFD;}
+</style>
+<g>
+ <path class="st0" d="M29.3,29.3c-39.1,39.1-39.1,102.4,0,141.5c19.5,19.5,45.1,29.3,70.7,29.3l0-200.1C74.4,0,48.8,9.8,29.3,29.3z"
+ />
+ <path class="st1" d="M100.1,200.1c25.6,0,51.2-9.8,70.7-29.3c39.1-39.1,39.1-102.4,0-141.5C151.3,9.8,125.7,0,100.1,0L100.1,200.1z
+ "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_more_navy.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_more_navy.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_more_navy.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 25 16.9" style="enable-background:new 0 0 25 16.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#002F6A;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="16.5,1.5 23.5,8.5 16.5,15.4 "/>
+ <line class="st0" x1="23.5" y1="8.5" x2="1.5" y2="8.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/appchart.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/appchart.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/noimg.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/noimg.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/noimg.svg (revision 7)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 500 500" style="enable-background:new 0 0 500 500;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;}
+ .st1{opacity:0.5;}
+ .st2{fill:url(#XMLID_2_);}
+ .st3{fill:url(#XMLID_3_);}
+ .st4{fill:#A9A9A8;}
+</style>
+<g>
+ <rect class="st0" width="500" height="500"/>
+ <g id="XMLID_6_" class="st1">
+ <g id="XMLID_7_">
+ <g id="XMLID_8_">
+
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="251.9379" y1="988.471" x2="312.5685" y2="1034.3879" gradientTransform="matrix(1 0 0 1 0 -794.0002)">
+ <stop offset="0" style="stop-color:#23ADE0"/>
+ <stop offset="0.1885" style="stop-color:#21A9DD"/>
+ <stop offset="0.4351" style="stop-color:#1E9FD5"/>
+ <stop offset="0.7139" style="stop-color:#178FC8"/>
+ <stop offset="1" style="stop-color:#1479B8"/>
+ </linearGradient>
+ <path id="XMLID_10_" class="st2" d="M295,231.7c4.6,1.9,3.3,7.4-1.9,7.4h-34.8c-0.9,0-1.9,0.9-1.9,2.3v4.6
+ c0,0.9,0.9,2.3,1.9,2.3h40.4c9.3,0,16.7-4.6,16.7-13.9c0-6.5-2.8-11.6-9.8-14.4c-4.2-1.9-29.7-12.5-29.7-12.5
+ c-4.6-1.9-3.7-7.4,1.9-7.4h34.8c0.9,0,1.9-0.9,1.9-1.9v-4.6c0-1.4-0.9-1.9-1.9-1.9h-40.4c-9.3,0-16.7,4.6-16.7,13.9
+ c0,6.5,2.8,11.6,9.8,14.4C269,221,295,231.7,295,231.7z"/>
+
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="194.7408" y1="974.0473" x2="239.5644" y2="1019.9628" gradientTransform="matrix(1 0 0 1 0 -794.0002)">
+ <stop offset="5.618000e-03" style="stop-color:#F5C41E"/>
+ <stop offset="1" style="stop-color:#EA7E26"/>
+ </linearGradient>
+ <path id="XMLID_9_" class="st3" d="M253.3,190.3h-67.3c-0.9,0-1.9,0.9-1.9,1.9v4.6c0,0.9,0.9,1.9,1.9,1.9h24.1v46.4
+ c0,0.9,0.9,2.3,1.9,2.3l0,0h14.9l0,0c0.9,0,1.9-0.9,1.9-2.3v-46.4h24.1c0.9,0,1.9-0.9,1.9-1.9v-4.6
+ C255.1,191.3,254.2,190.3,253.3,190.3z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <path class="st4" d="M145,272.5h6.5l9.3,17.6l3.3,7l0,0c-0.5-3.3-0.9-7.9-0.9-11.6v-13h6V305h-6.5l-9.3-17.6l-3.3-7l0,0
+ c0.5,3.7,0.9,7.9,0.9,11.6v13h-6V272.5z"/>
+ <path class="st4" d="M176.6,288.8c0-10.7,6-16.7,14.9-16.7c8.8,0,14.9,6,14.9,16.7c0,10.7-6,17.2-14.9,17.2
+ C182.7,306,176.6,299.5,176.6,288.8z M198.9,288.8c0-7-3.3-11.1-7.9-11.1c-4.6,0-7.9,4.2-7.9,11.1c0,7,3.3,11.6,7.9,11.6
+ C195.7,300.4,198.9,295.7,198.9,288.8z"/>
+ <path class="st4" d="M222.1,272.5h6.5V305h-6.5V272.5z"/>
+ <path class="st4" d="M237,272.5h7.4l5.6,15.3c0.9,1.9,1.4,4.2,1.9,6.5l0,0c0.9-1.9,1.4-4.2,1.9-6.5l5.6-15.3h7.4V305h-6v-13.5
+ c0-3.3,0.5-7.9,0.9-10.7l0,0l-2.8,7.9l-5.1,13.9H250l-5.1-13.9l-2.8-7.9l0,0c0.5,3.3,0.9,7.9,0.9,10.7V305h-6V272.5L237,272.5z"/>
+ <path class="st4" d="M281.1,272.5h7.9l10.7,33h-7l-2.3-8.4h-10.7l-2.8,7.9h-6.5L281.1,272.5z M280.7,291.6h7.9l-0.9-3.7
+ c-0.9-3.3-1.9-7-2.8-10.7l0,0c-0.9,3.7-1.9,7.4-2.8,10.7L280.7,291.6z"/>
+ <path class="st4" d="M301.1,288.8c0-10.7,7-17.2,15.8-17.2c4.6,0,7.9,1.9,10.2,4.2l-3.3,4.2c-1.4-1.4-3.7-2.8-6.5-2.8
+ c-5.6,0-9.3,4.2-9.3,11.1c0,7,3.3,11.6,9.8,11.6c1.4,0,3.3-0.5,4.2-1.4V292h-5.6v-5.6H328v14.9c-2.3,2.3-6,3.7-10.7,3.7
+ C307.6,306,301.1,299.9,301.1,288.8z"/>
+ <path class="st4" d="M334.5,272.5h20v5.6H341v7.4h11.1v5.6h-11.6v8.8h13.9v5.1h-20.4L334.5,272.5L334.5,272.5z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_m.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_m.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_m.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="0 0 24.166 24.165" enable-background="new 0 0 24.166 24.165" xml:space="preserve">
+<path fill="#FFFFFF" d="M2.097,23.588c-0.84,0-1.523-0.685-1.523-1.521V2.099c0-0.84,0.684-1.522,1.523-1.522h19.966
+ c0.84,0,1.522,0.683,1.522,1.522v19.968c0,0.84-0.685,1.521-1.522,1.521H2.097z"/>
+<path d="M22.063,0H2.096c-1.158,0-2.1,0.941-2.1,2.099v19.968c0,1.156,0.942,2.098,2.1,2.098h19.966
+ c1.159,0,2.102-0.941,2.102-2.098V2.099C24.162,0.942,23.219,0,22.063,0z M22.063,23.01H2.096c-0.522,0-0.947-0.424-0.947-0.945
+ V2.099c0-0.521,0.425-0.946,0.947-0.946l19.966-0.002c0.522,0,0.947,0.425,0.947,0.946v19.968
+ C23.01,22.586,22.585,23.01,22.063,23.01z"/>
+<path d="M19.432,12.083c0,0.742-0.602,1.344-1.344,1.344H6.072c-0.742,0-1.344-0.602-1.344-1.344l0,0
+ c0-0.742,0.602-1.344,1.344-1.344h12.016C18.83,10.739,19.432,11.34,19.432,12.083L19.432,12.083z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_filedown_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_filedown_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_filedown_on.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37 30" style="enable-background:new 0 0 37 30;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#007DC3;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="25.5,13.1 18.5,20.1 11.5,13.1 "/>
+ <polyline class="st0" points="35.5,16.5 35.5,28.5 1.5,28.5 1.5,16.5 "/>
+ <line class="st0" x1="18.5" y1="20.1" x2="18.5" y2="1.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/main_job1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/main_job1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/main_job1.svg (revision 7)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 118 106.4" style="enable-background:new 0 0 118 106.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ABC5E3;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st1{fill:#FFFFFF;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st2{fill:none;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st3{fill:#FFFFFF;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st4{fill:none;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st5{fill:#ABC5E3;stroke:#365587;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st6{fill:#DADAE0;}
+ .st7{fill:#FFFFFF;}
+</style>
+<g>
+ <g>
+ <g>
+ <path class="st3" d="M1.8,61.1V31.2c0-4.6,3.8-8.4,8.4-8.4l22.3,0l28,20.8c2.1,1.6,2.5,4.5,1,6.6l0,0c-1.6,2.1-4.5,2.5-6.6,1
+ l-22.9-17"/>
+ <g>
+ <path class="st4" d="M27.3,10.1c0,4.6-3.8,8.4-8.4,8.4c-4.6,0-8.4-3.8-8.4-8.4c0-4.6,3.8-8.4,8.4-8.4
+ C23.5,1.8,27.3,5.5,27.3,10.1z"/>
+ <polyline class="st3" points="8.9,38.1 8.9,104.6 18.7,104.6 18.7,70.3 18.7,104.6 28.5,104.6 28.5,38.1 "/>
+ </g>
+ </g>
+ <g>
+ <path class="st3" d="M116.2,61.1V31.2c0-4.6-3.8-8.4-8.4-8.4l-22.3,0l-28,20.8c-2.1,1.6-2.5,4.5-1,6.6l0,0c1.6,2.1,4.5,2.5,6.6,1
+ l22.9-17"/>
+ <g>
+ <path class="st4" d="M90.7,10.1c0,4.6,3.8,8.4,8.4,8.4c4.6,0,8.4-3.8,8.4-8.4c0-4.6-3.8-8.4-8.4-8.4
+ C94.5,1.8,90.7,5.5,90.7,10.1z"/>
+ <polyline class="st3" points="109.1,38.1 109.1,104.6 99.3,104.6 99.3,70.3 99.3,104.6 89.5,104.6 89.5,38.1 "/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <polygon class="st0" points="73.9,67 73.9,88 66.3,97.2 66.3,74.2 "/>
+ <rect x="41" y="74" class="st0" width="25.4" height="23.2"/>
+ <polygon class="st0" points="66.3,74.1 41,74.1 48.5,67 73.9,67 "/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/logo_v.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/logo_v.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/logo_v.svg (revision 7)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 141.1 74.8" style="enable-background:new 0 0 141.1 74.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+ .st2{fill:#FFFFFF;}
+</style>
+<g>
+ <g id="XMLID_6_">
+ <g id="XMLID_7_">
+ <g id="XMLID_8_">
+
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="72.0314" y1="414.8975" x2="103.9891" y2="439.0998" gradientTransform="matrix(1 0 0 1 0 -413.01)">
+ <stop offset="0" style="stop-color:#00AFEC"/>
+ <stop offset="0.1679" style="stop-color:#00ADEB"/>
+ <stop offset="0.3876" style="stop-color:#00A4E4"/>
+ <stop offset="0.6361" style="stop-color:#0096D9"/>
+ <stop offset="0.9038" style="stop-color:#0082C9"/>
+ <stop offset="1" style="stop-color:#0079C3"/>
+ </linearGradient>
+ <path id="XMLID_10_" class="st0" d="M94.5,21.7c2.4,1,1.8,3.9-1,3.9H75.1c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.4,1.1,1,1.1h21.4
+ c5,0,8.9-2.4,8.9-7.4c0-3.3-1.5-6-5.1-7.6c-2.1-1-15.7-6.7-15.7-6.7c-2.4-1-1.8-3.9,1-3.9h18.3c0.5,0,1-0.5,1-1.1V1.1
+ c0-0.6-0.4-1.1-1-1.1H82.6c-5,0-8.9,2.4-8.9,7.4c0,3.3,1.5,6,5.1,7.6C80.9,16,94.5,21.7,94.5,21.7z"/>
+
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="41.6288" y1="407.6165" x2="65.255" y2="431.8181" gradientTransform="matrix(1 0 0 1 0 -413.01)">
+ <stop offset="5.618000e-03" style="stop-color:#FDD000"/>
+ <stop offset="1" style="stop-color:#F08300"/>
+ </linearGradient>
+ <path id="XMLID_9_" class="st1" d="M72.5,0H37.1c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.5,1.1,1,1.1h12.8v24.6c0,0.6,0.5,1.1,1,1.1l0,0
+ h7.9l0,0c0.5,0,1-0.5,1-1.1V4.6h12.8c0.5,0,1-0.5,1-1.1V1.1C73.5,0.5,73,0,72.5,0z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <path class="st2" d="M28,61.5v3.5h-6.7v8.9h-4.1v-8.9h-6.4v8.9H6.7v-8.9H0v-3.5H28z M24.4,59.1H3.6V44.7h20.4v3.4H7.8v2.1h16v3.4
+ h-16v2.1h16.6V59.1z"/>
+ <path class="st2" d="M30.1,45.1h4.2v10.3c2.3,0,4.4-0.1,6.5-0.2s4.2-0.3,6.3-0.5l0.4,3.5c-1,0.1-2.1,0.2-3.2,0.3
+ c-1.1,0.1-2.4,0.2-3.7,0.2c-1.4,0.1-2.9,0.1-4.6,0.1c-1.7,0-3.6,0-5.8,0V45.1z M44.2,74.8c-1.4,0-2.6-0.1-3.8-0.4
+ c-1.2-0.3-2.2-0.7-3-1.2c-0.9-0.5-1.5-1.1-2-1.9s-0.7-1.6-0.7-2.5v-1.4c0-0.9,0.2-1.8,0.7-2.5c0.5-0.7,1.2-1.4,2-1.9
+ c0.9-0.5,1.9-0.9,3-1.2c1.2-0.3,2.4-0.4,3.8-0.4c1.4,0,2.6,0.1,3.8,0.4c1.2,0.3,2.2,0.7,3,1.2c0.9,0.5,1.5,1.1,2,1.9
+ c0.5,0.7,0.7,1.6,0.7,2.5v1.4c0,0.9-0.2,1.8-0.7,2.5s-1.2,1.4-2,1.9c-0.9,0.5-1.9,0.9-3,1.2C46.8,74.7,45.6,74.8,44.2,74.8z
+ M44.2,64.8c-0.7,0-1.4,0.1-2.1,0.2c-0.7,0.2-1.2,0.4-1.7,0.6c-0.5,0.3-0.9,0.6-1.2,0.9c-0.3,0.4-0.5,0.7-0.5,1.1v0.9
+ c0,0.4,0.2,0.8,0.5,1.1c0.3,0.4,0.7,0.7,1.2,0.9c0.5,0.3,1.1,0.5,1.7,0.6c0.7,0.2,1.3,0.2,2.1,0.2c0.7,0,1.4-0.1,2.1-0.2
+ s1.2-0.4,1.7-0.6c0.5-0.3,0.9-0.6,1.2-0.9c0.3-0.4,0.5-0.7,0.5-1.1v-0.9c0-0.4-0.2-0.8-0.5-1.1c-0.3-0.3-0.7-0.7-1.2-0.9
+ c-0.5-0.3-1.1-0.5-1.7-0.6S44.9,64.8,44.2,64.8z M53.7,61.3h-4.1v-18h4.1V61.3z"/>
+ <path class="st2" d="M65,58c-1.2,0-2.3-0.2-3.3-0.6c-1-0.4-1.8-0.9-2.4-1.5c-0.7-0.6-1.2-1.3-1.5-2.1c-0.4-0.8-0.5-1.6-0.5-2.4
+ v-1.1c0-0.8,0.2-1.6,0.5-2.4c0.4-0.8,0.9-1.5,1.5-2.1c0.7-0.6,1.5-1.1,2.4-1.5c1-0.4,2.1-0.6,3.3-0.6c1.2,0,2.3,0.2,3.3,0.6
+ c1,0.4,1.8,0.9,2.4,1.5c0.7,0.6,1.2,1.3,1.5,2.1c0.3,0.8,0.5,1.6,0.5,2.4v1.1c0,0.8-0.2,1.6-0.5,2.4c-0.4,0.8-0.9,1.5-1.5,2.1
+ c-0.7,0.6-1.5,1.1-2.4,1.5S66.3,58,65,58z M65,47.3c-0.6,0-1.2,0.1-1.6,0.3s-0.9,0.4-1.2,0.7s-0.6,0.6-0.7,1
+ c-0.2,0.4-0.2,0.8-0.2,1.2v0.9c0,0.4,0.1,0.8,0.2,1.2c0.2,0.4,0.4,0.7,0.7,1s0.7,0.5,1.2,0.7c0.5,0.2,1,0.3,1.6,0.3
+ c0.6,0,1.2-0.1,1.6-0.3c0.5-0.2,0.9-0.4,1.2-0.7c0.3-0.3,0.6-0.6,0.7-1c0.2-0.4,0.2-0.8,0.2-1.2v-0.9c0-0.4-0.1-0.8-0.2-1.2
+ c-0.2-0.4-0.4-0.7-0.7-1c-0.3-0.3-0.7-0.5-1.2-0.7S65.6,47.3,65,47.3z M80.8,59.9v8.7H65.7v2.3h16v3.3h-20v-8.7h15.1v-2.3H61.5
+ v-3.3H80.8z M80.8,49h4v3.6h-4v5.9h-4.1V43.3h4.1V49z"/>
+ <path class="st2" d="M91.1,63.1h3.2c1.5,0,3.1,0,4.7-0.1c1.6-0.1,3.2-0.2,4.7-0.4l0.5,3.5c-1.6,0.2-3.3,0.4-5.1,0.5
+ c-1.8,0.1-3.8,0.1-5.8,0.1H87V54.2h9.9v-5H87v-3.5h14v11.9h-9.9V63.1z M110.6,73.9h-4.2V43.3h4.2V73.9z"/>
+ <path class="st2" d="M122.7,66.6V55.9h4.1v10.7h14.2v3.5h-28v-3.5H122.7z M132,62.8c0.4-2,0.7-3.9,0.8-5.8
+ c0.2-1.8,0.2-3.7,0.2-5.7v-1.9h-16.6v-3.6h20.8v4.4c0,2.6-0.1,4.9-0.3,7c-0.2,2.1-0.4,4.1-0.8,6L132,62.8z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_brand.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_brand.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_list_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_list_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_list_on.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 52.7 34.7" style="enable-background:new 0 0 52.7 34.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <g>
+ <line class="st0" x1="3" y1="3" x2="3" y2="3"/>
+ <line class="st0" x1="3" y1="17.4" x2="3" y2="17.4"/>
+ <line class="st0" x1="3" y1="31.7" x2="3" y2="31.7"/>
+ </g>
+ <g>
+ <line class="st0" x1="49.7" y1="3" x2="14.9" y2="3"/>
+ <line class="st0" x1="49.7" y1="17.4" x2="14.9" y2="17.4"/>
+ <line class="st0" x1="49.7" y1="31.7" x2="14.9" y2="31.7"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_dq.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_dq.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_dq.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 5.1 4.4" style="enable-background:new 0 0 5.1 4.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#16315F;}
+</style>
+<g>
+ <path class="st0" d="M0,2.8C0,1.6,0.7,0.6,1.8,0l0.4,0.7c-0.8,0.4-1.3,1.1-1.3,2l0.2,1L0.4,2.8c0.2-0.2,0.5-0.4,0.8-0.4
+ c0.5,0,0.9,0.4,0.9,0.9c0,0.6-0.4,1-1,1C0.5,4.4,0,3.8,0,2.8z M2.9,2.8c0-1.2,0.7-2.2,1.8-2.8l0.4,0.7c-0.8,0.4-1.3,1.1-1.3,2
+ l0.2,1L3.3,2.8c0.2-0.2,0.5-0.4,0.8-0.4C4.6,2.4,5,2.8,5,3.4c0,0.6-0.4,1-1,1C3.3,4.4,2.9,3.8,2.9,2.8z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/map2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/map2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/box_cover1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_cover1.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/main_job2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/main_job2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/main_job2.svg (revision 7)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 107.8 117.3" style="enable-background:new 0 0 107.8 117.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ABC5E3;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st1{fill:#FFFFFF;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st2{fill:none;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st3{fill:#FFFFFF;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st4{fill:none;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st5{fill:#ABC5E3;stroke:#365587;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st6{fill:#DADAE0;}
+ .st7{fill:#FFFFFF;}
+</style>
+<g>
+ <path class="st4" d="M24.2,19.1V4.3c0-1.4,1.1-2.6,2.6-2.6h26.5c1.4,0,2.6,1.1,2.6,2.6v14.8"/>
+ <g>
+ <path class="st0" d="M68.1,41.6H12C6.4,41.6,1.8,37,1.8,31.3v40.3h76.6V31.3C78.3,37,73.7,41.6,68.1,41.6z"/>
+ <path class="st3" d="M1.8,31.3C1.8,37,6.4,41.6,12,41.6h56.1c5.6,0,10.2-4.6,10.2-10.2V17.6H1.8V31.3z"/>
+ </g>
+ <g>
+ <line class="st4" x1="25.7" y1="30.8" x2="29.8" y2="30.8"/>
+ <line class="st4" x1="33.9" y1="30.8" x2="38" y2="30.8"/>
+ <line class="st4" x1="42.1" y1="30.8" x2="46.2" y2="30.8"/>
+ <line class="st4" x1="50.2" y1="30.8" x2="54.3" y2="30.8"/>
+ </g>
+ <g>
+ <g>
+ <path class="st1" d="M56,48c-4.1,0-7.4,3.3-7.4,7.4v51.8c0-4.1,3.3-7.4,7.4-7.4h50V48H56z"/>
+ <path class="st1" d="M48.6,107.2v0.9c0,4.1,3.3,7.4,7.4,7.4h50V99.8H56C51.9,99.8,48.6,103.1,48.6,107.2z"/>
+ </g>
+ <line class="st1" x1="54.8" y1="108.2" x2="104.9" y2="108.2"/>
+ <line class="st1" x1="60.8" y1="48" x2="60.8" y2="99.2"/>
+ <rect x="70" y="58.7" class="st1" width="28.6" height="11.6"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/chatbot_arrow_bg.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/chatbot_arrow_bg.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/chatbot_arrow_bg.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 11.88 11.88" style="enable-background:new 0 0 11.88 11.88;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#E4E4E4;}
+</style>
+<g>
+ <polygon class="st0" points="11.88,11.18 11.88,0.5 1.21,0.5 "/>
+ <path class="st1" d="M11.88,11.88L0,0h11.88V11.88z M2.41,1l9.47,9.68V1H2.41z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_checkbox_false_disable.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_checkbox_false_disable.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_checkbox_false_disable.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="0 0 24.166 24.165" enable-background="new 0 0 24.166 24.165" xml:space="preserve">
+<path fill="#DDDDDD" d="M2.1,23.588c-0.84,0-1.523-0.685-1.523-1.521V2.099c0-0.839,0.684-1.522,1.523-1.522h19.966
+ c0.84,0,1.522,0.683,1.522,1.522v19.968c0,0.84-0.685,1.521-1.522,1.521H2.1z"/>
+<path fill="#8C8C8C" d="M22.065,0H2.099c-1.158,0-2.1,0.942-2.1,2.099v19.967c0,1.156,0.942,2.098,2.1,2.098h19.966
+ c1.159,0,2.102-0.941,2.102-2.098V2.099C24.165,0.942,23.222,0,22.065,0z M22.065,23.01H2.099c-0.522,0-0.947-0.424-0.947-0.945V2.1
+ c0-0.522,0.425-0.946,0.947-0.946l19.966-0.002c0.522,0,0.947,0.424,0.947,0.946v19.967C23.013,22.586,22.588,23.01,22.065,23.01z"
+ />
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_more.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_more.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_more.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 25 16.9" style="enable-background:new 0 0 25 16.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="16.5,1.5 23.5,8.5 16.5,15.4 "/>
+ <line class="st0" x1="23.5" y1="8.5" x2="1.5" y2="8.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/box_cover2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_cover2.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/main_job3.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/main_job3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/main_job3.svg (revision 7)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 125.9 110.4" style="enable-background:new 0 0 125.9 110.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ABC5E3;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st1{fill:#FFFFFF;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st2{fill:none;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st3{fill:#FFFFFF;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st4{fill:none;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st5{fill:#ABC5E3;stroke:#365587;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st6{fill:#DADAE0;}
+ .st7{fill:#FFFFFF;}
+</style>
+<g>
+ <g>
+ <g>
+ <rect x="1.8" y="36.5" class="st0" width="102.9" height="56.2"/>
+ <g>
+ <g>
+ <path class="st1" d="M97.6,30.9h-36c-4.7,0-8.4,3.8-8.4,8.4v58.1c0-4.7,3.8-8.4,8.4-8.4h36c0.2,0,0.4,0,0.6,0V31
+ C98,30.9,97.8,30.9,97.6,30.9z"/>
+ </g>
+ <g>
+ <path class="st1" d="M8.8,30.9h36c4.7,0,8.4,3.8,8.4,8.4v58.1c0-4.7-3.8-8.4-8.4-8.4h-36c-0.2,0-0.4,0-0.6,0V31
+ C8.4,30.9,8.6,30.9,8.8,30.9z"/>
+ </g>
+ <g>
+ <path class="st1" d="M13.4,23.2l32.2,7.7c4.9,1.9,7.6,3.8,7.6,8.4v58.1c0-4.7-3.1-6.2-7.6-8.4l-32.2-7.7
+ c-0.2,0-0.3-2.8-0.5-2.8V23.2C13.1,23.2,13.3,23.2,13.4,23.2z"/>
+ </g>
+ <g>
+ <path class="st1" d="M19.5,20.4l27.3,10.5c4.1,1.9,6.4,3.8,6.4,8.4v58.1c0-4.7-2.6-6.2-6.4-8.4L19.5,78.5c-0.1,0-0.3,0-0.4,0
+ V20.4C19.3,20.4,19.4,20.4,19.5,20.4z"/>
+ </g>
+ </g>
+ <line class="st2" x1="69.4" y1="44.4" x2="90.2" y2="44.4"/>
+ <line class="st2" x1="69.4" y1="54" x2="90.2" y2="54"/>
+ <line class="st2" x1="69.4" y1="63.5" x2="90.2" y2="63.5"/>
+ <line class="st2" x1="69.4" y1="73.1" x2="90.2" y2="73.1"/>
+ </g>
+ <line class="st1" x1="27.6" y1="35.6" x2="44.7" y2="42.2"/>
+ <line class="st1" x1="27.6" y1="44.6" x2="44.7" y2="51.2"/>
+ <line class="st1" x1="27.6" y1="53.6" x2="44.7" y2="60.2"/>
+ <line class="st1" x1="27.6" y1="62.6" x2="44.7" y2="69.2"/>
+ </g>
+ <g>
+
+ <rect x="87.4" y="72.6" transform="matrix(0.7071 -0.7072 0.7072 0.7071 -28.5897 98.2779)" class="st1" width="33.9" height="22.2"/>
+ <g>
+ <polygon class="st1" points="100.2,103.5 92.3,95.6 84.5,87.8 81.2,101.2 86.8,106.8 "/>
+ <polygon class="st1" points="86.8,106.8 81.2,101.2 79.3,108.7 "/>
+ </g>
+ <g>
+ <line class="st1" x1="95" y1="98.3" x2="119" y2="74.4"/>
+ <line class="st1" x1="89.6" y1="92.9" x2="113.6" y2="69"/>
+ </g>
+ </g>
+ <polygon class="st0" points="57.7,13.3 57.7,1.8 45,1.8 45,13.3 38.2,13.3 51.4,26.5 64.6,13.3 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_left_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_left_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_left_fff.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.8 66.6" style="enable-background:new 0 0 37.8 66.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="33.3,62.1 4.5,33.3 33.3,4.5 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tba1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tba1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tba1.svg (revision 7)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 63.7 52.3" style="enable-background:new 0 0 63.7 52.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#5DA3C0;}
+ .st1{fill:none;stroke:#38383B;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#FFFFFF;}
+ .st3{clip-path:url(#SVGID_2_);fill:#DADAE0;}
+ .st4{clip-path:url(#SVGID_4_);fill:#DADAE0;}
+ .st5{clip-path:url(#SVGID_6_);fill:#DADAE0;}
+ .st6{clip-path:url(#SVGID_8_);fill:#DADAE0;}
+ .st7{fill:#E67677;}
+ .st8{clip-path:url(#SVGID_10_);fill:#DADAE0;}
+ .st9{clip-path:url(#SVGID_12_);fill:#DADAE0;}
+</style>
+<g>
+ <path class="st0" d="M43.8,1C52.6,1,60,6.2,62.1,13.3c0.1,0.4,0.2,0.9,0.3,1.3c0.2,0.9,0.3,1.9,0.3,2.9c0,4.9-2.4,9.2-6.2,12.2
+ c1.4,3.1,3.7,5.4,6.1,6.1c-4.5,0.3-8.6-0.9-11.2-3.3c-2.3,0.9-4.9,1.4-7.6,1.4c-10.4,0-18.9-7.4-18.9-16.5C24.9,8.4,33.4,1,43.8,1"
+ />
+ <path class="st1" d="M43.8,1C52.6,1,60,6.2,62.1,13.3c0.1,0.4,0.2,0.9,0.3,1.3c0.2,0.9,0.3,1.9,0.3,2.9c0,4.9-2.4,9.2-6.2,12.2
+ c1.4,3.1,3.7,5.4,6.1,6.1c-4.5,0.3-8.6-0.9-11.2-3.3c-2.3,0.9-4.9,1.4-7.6,1.4c-10.4,0-18.9-7.4-18.9-16.5C24.9,8.4,33.4,1,43.8,1z
+ "/>
+ <path class="st2" d="M19.9,16.4c-8.8,0-16.2,5.2-18.3,12.3c-0.1,0.4-0.2,0.9-0.3,1.3C1.1,30.9,1,31.9,1,32.9
+ c0,4.9,2.4,9.2,6.2,12.2c-1.4,3.1-3.7,5.4-6.1,6.1c4.5,0.3,8.6-0.9,11.2-3.3c2.3,0.9,4.9,1.4,7.6,1.4c10.4,0,18.9-7.4,18.9-16.5
+ C38.9,23.8,30.4,16.4,19.9,16.4"/>
+ <path class="st1" d="M19.9,16.4c-8.8,0-16.2,5.2-18.3,12.3c-0.1,0.4-0.2,0.9-0.3,1.3C1.1,30.9,1,31.9,1,32.9
+ c0,4.9,2.4,9.2,6.2,12.2c-1.4,3.1-3.7,5.4-6.1,6.1c4.5,0.3,8.6-0.9,11.2-3.3c2.3,0.9,4.9,1.4,7.6,1.4c10.4,0,18.9-7.4,18.9-16.5
+ C38.9,23.8,30.4,16.4,19.9,16.4z"/>
+ <path class="st1" d="M25.4,21.3c1.3,4.6,4.7,8.5,9.4,10.7"/>
+ <line class="st1" x1="15.1" y1="33.8" x2="15.9" y2="33.8"/>
+ <line class="st1" x1="19.3" y1="33.8" x2="20.1" y2="33.8"/>
+ <line class="st1" x1="23.5" y1="33.8" x2="24.3" y2="33.8"/>
+ <line class="st1" x1="39.7" y1="18.4" x2="40.5" y2="18.4"/>
+ <line class="st1" x1="43.9" y1="18.4" x2="44.7" y2="18.4"/>
+ <line class="st1" x1="48.1" y1="18.4" x2="48.9" y2="18.4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_reply.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_reply.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_reply.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 25.2 25.2" style="enable-background:new 0 0 25.2 25.2;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="23.7,23.7 1.5,23.7 1.5,1.5 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="43.738px" height="36.29px" viewBox="0 0 43.738 36.29" enable-background="new 0 0 43.738 36.29" xml:space="preserve">
+<g>
+ <polygon fill="#F8E38F" points="42.839,6.43 42.839,35.39 0.899,35.39 0.899,0.9 15.368,0.9 18.759,6.43 "/>
+
+ <polygon fill="none" stroke="#343340" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 42.839,6.43 42.839,35.39 0.899,35.39 0.899,0.9 15.368,0.9 18.759,6.43 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_filedown_w.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_filedown_w.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_filedown_w.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37 30" style="enable-background:new 0 0 37 30;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="25.5,13.1 18.5,20.1 11.5,13.1 "/>
+ <polyline class="st0" points="35.5,16.5 35.5,28.5 1.5,28.5 1.5,16.5 "/>
+ <line class="st0" x1="18.5" y1="20.1" x2="18.5" y2="1.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/jobkorea.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/jobkorea.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/jobkorea.svg (revision 7)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 249 35.7" style="enable-background:new 0 0 249 35.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+</style>
+<g>
+ <path class="st0" d="M155,17.8c0,3.6-0.1,6.7-0.4,8.2c-0.5,2.7-1.1,4.3-2.9,6c-2.8,2.7-6.5,3.6-10.6,3.6c-4.1,0-7.7-0.9-10.5-3.6
+ c-1.8-1.7-2.4-3.3-2.9-6c-0.3-1.5-0.4-4.6-0.4-8.2c0-3.6,0.1-6.8,0.4-8.3c0.5-2.6,1.1-4.2,2.9-5.9C133.4,0.9,137,0,141.1,0
+ c4,0,7.7,0.9,10.6,3.7c1.8,1.7,2.4,3.3,2.9,5.9C154.8,11,155,14.3,155,17.8 M141.1,7.3c-2.9,0-5.6,1.7-5.6,5.7v4.8v4.5
+ c0,4.9,3.4,5.8,5.6,5.8c2.1,0,5.6-0.9,5.6-5.8v-4.5V13C146.7,9,144,7.3,141.1,7.3"/>
+ <polygon class="st0" points="128.1,35.4 118.7,35.4 110.3,20.7 106.3,25.5 106.3,35.4 98.2,35.4 98.2,0.3 106.3,0.3 106.3,14.1
+ 117.9,0.3 127.4,0.3 115.7,14.4 "/>
+ <path class="st0" d="M187.6,35.4h-8.8l-5.2-13h-5v13h-8.2V0.2h15.9c4.4,0,10.7,2.8,10.7,10.9c0,4.6-2.2,7.6-5.8,9.9L187.6,35.4z
+ M178.7,11.4c0-3.4-2.7-3.9-3.9-3.9h-6.3v7.8h6.3C176,15.3,178.7,14.9,178.7,11.4"/>
+ <polygon class="st0" points="215.8,35.4 191.3,35.4 191.3,0.3 216,0.3 216,7.4 199.4,7.4 199.4,14.1 213.6,14.1 213.6,21.3
+ 199.4,21.3 199.4,28 215.8,28 "/>
+ <path class="st0" d="M249,35.4h-8.6l-2.3-7h-11.1l-2.2,7h-8.7l12.2-35.1h8.5L249,35.4z M236.1,21.7l-3.5-12.3l-3.7,12.3L236.1,21.7
+ z"/>
+ <path class="st0" d="M60.7,17.8c0,3.6-0.1,6.7-0.4,8.2c-0.5,2.7-1.2,4.3-2.9,6c-2.8,2.7-6.5,3.6-10.6,3.6c-4.1,0-7.7-0.9-10.5-3.6
+ c-1.8-1.7-2.4-3.3-2.9-6c-0.3-1.5-0.4-4.6-0.4-8.2c0-3.6,0.1-6.8,0.4-8.3c0.5-2.6,1.2-4.2,2.9-5.9C39.1,0.9,42.8,0,46.9,0
+ c4.1,0,7.7,0.9,10.6,3.7c1.8,1.7,2.5,3.3,2.9,5.9C60.6,11,60.7,14.3,60.7,17.8 M46.9,7.3c-2.9,0-5.6,1.7-5.6,5.7v4.8v4.5
+ c0,4.9,3.4,5.8,5.6,5.8c2.1,0,5.6-0.9,5.6-5.8v-4.5V13C52.4,9,49.8,7.3,46.9,7.3"/>
+ <path class="st0" d="M93.4,25c0,3.3-1.2,6.1-3.3,7.9c-2.1,1.8-4.6,2.4-7.9,2.4H66.3V0.3h15.1c3.7,0,6.4,0.4,8.4,2.2
+ c2,1.8,3,4.2,3,7.3c0,2.9-1.6,5.6-4.2,7C91.6,18.4,93.4,21.7,93.4,25 M84.5,10.5c0-1.8-1.4-3-3.6-3h-6.7v6.2h6.4
+ C83.4,13.7,84.5,12.4,84.5,10.5 M84.8,24.4c0-2.4-1.5-3.7-3.6-3.7h-6.9V28H81C83.7,28,84.8,26.5,84.8,24.4"/>
+ <path class="st0" d="M19.3,0.3v17.4h0v4.5c0,4.2-2.6,5.5-4.7,5.7C14.3,28,14,28,13.7,28c-2.1,0-5.6-0.9-5.6-5.8v-0.9H0
+ c0.1,1.9,0.2,3.5,0.3,4.5c0.5,2.7,1.2,4.3,2.9,6c2.8,2.7,6.4,3.6,10.5,3.6c0.3,0,0.6,0,0.9,0c1.5-0.1,2.8-0.2,4.2-0.6
+ c1.7-0.4,3.2-1.1,4.7-2.2c2.9-2.3,4.1-4.9,4.1-9.4V0.3H19.3z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_say.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_say.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_say.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 39.9 36.9" style="enable-background:new 0 0 39.9 36.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#38383B;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M19.9,1c8.8,0,16.2,5.2,18.3,12.3c0.1,0.4,0.2,0.9,0.3,1.3c0.2,0.9,0.3,1.9,0.3,2.9c0,4.9-2.4,9.2-6.2,12.2
+ c1.4,3.1,3.7,5.4,6.1,6.1c-4.5,0.3-8.6-0.9-11.2-3.3c-2.3,0.9-4.9,1.4-7.6,1.4C9.5,33.9,1,26.6,1,17.5S9.5,1,19.9,1z"/>
+ <line class="st0" x1="21.4" y1="18.4" x2="18.5" y2="18.4"/>
+ <line class="st0" x1="13" y1="18.4" x2="10" y2="18.4"/>
+ <line class="st0" x1="30.2" y1="18.4" x2="27.2" y2="18.4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_gnb.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_gnb.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_gnb.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" viewBox="0 0 51.731 44.75" style="enable-background:new 0 0 51.731 44.75;" xml:space="preserve">
+<g>
+
+ <line style="fill:none;stroke:#343231;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="47.731" y1="4" x2="4" y2="4"/>
+
+ <line style="fill:none;stroke:#343231;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="47.731" y1="22.375" x2="4" y2="22.375"/>
+
+ <line style="fill:none;stroke:#343231;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="47.731" y1="40.75" x2="4" y2="40.75"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_fileup.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_fileup.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_fileup.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37 30" style="enable-background:new 0 0 37 30;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="11.5,8.5 18.5,1.5 25.5,8.5 "/>
+ <polyline class="st0" points="35.5,16.5 35.5,28.5 1.5,28.5 1.5,16.5 "/>
+ <line class="st0" x1="18.5" y1="1.5" x2="18.5" y2="20.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_fileup_w.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_fileup_w.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_fileup_w.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37 30" style="enable-background:new 0 0 37 30;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="11.5,8.5 18.5,1.5 25.5,8.5 "/>
+ <polyline class="st0" points="35.5,16.5 35.5,28.5 1.5,28.5 1.5,16.5 "/>
+ <line class="st0" x1="18.5" y1="1.5" x2="18.5" y2="20.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_car2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_car2.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_home.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_home.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_home.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 29.1 24" style="enable-background:new 0 0 29.1 24;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="0.8,10.4 14.5,0.8 28.3,10.4 "/>
+ <path class="st0" d="M4,12.1v11.1h7.2v-4.7c0-1.9,1.5-3.4,3.4-3.4h0c1.9,0,3.4,1.5,3.4,3.4v4.7h7.2V12.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_arrow_plus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_plus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_plus.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <polygon points="9.308,5.174 14.608,8.701 9.308,12.228 "/>
+ <path d="M1.986,9.451c-0.256,0-0.462-0.335-0.462-0.751c0-0.417,0.206-0.753,0.462-0.753h9.22c0.252,0,0.459,0.336,0.459,0.753
+ c0,0.415-0.207,0.751-0.459,0.751H1.986z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/sad.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/sad.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/sad.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#383838;}
+ .st1{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st0" cx="23.3" cy="12.7" r="2.4"/>
+ <path class="st1" d="M10.6,24.1c0-2.2,2.6-4,5.7-4s5.7,1.8,5.7,4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/itme4.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/itme4.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_map.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_map.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_map.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 21.5 28" style="enable-background:new 0 0 21.5 28;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M20.7,10.7c0,4.4-6.4,12.9-9,15.8c-0.5,0.6-1.5,0.6-2,0c-2.5-3-9-11.4-9-15.8c0-5.5,4.5-10,10-10
+ C16.3,0.8,20.7,5.2,20.7,10.7z"/>
+ <path class="st0" d="M14.5,10.7c0,2.1-1.7,3.8-3.8,3.8c-2.1,0-3.8-1.7-3.8-3.8C7,8.7,8.7,7,10.7,7C12.8,7,14.5,8.7,14.5,10.7z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_plus_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_plus_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_plus_on.svg (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 27 27" style="enable-background:new 0 0 27 27;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#007DC3;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<line class="st0" x1="2.3" y1="13.5" x2="24.7" y2="13.5"/>
+<line class="st0" x1="13.8" y1="2.3" x2="13.8" y2="24.7"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree2.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="21.773px" height="16.693px" viewBox="0 0 21.773 16.693" enable-background="new 0 0 21.773 16.693" xml:space="preserve">
+<g>
+ <path fill="#828282" d="M20.333,11.014h-1.954V8.083c0-0.18-0.146-0.326-0.326-0.326h-6.84V5.15h4.561
+ c0.18,0,0.325-0.146,0.325-0.326V0.916c0-0.18-0.146-0.326-0.325-0.326H6.001c-0.18,0-0.326,0.146-0.326,0.326v3.909
+ c0,0.18,0.146,0.326,0.326,0.326h4.56v2.606h-6.84c-0.18,0-0.326,0.146-0.326,0.326v2.931H1.44c-0.181,0-0.326,0.146-0.326,0.326
+ v3.908c0,0.18,0.146,0.326,0.326,0.326h4.561c0.18,0,0.325-0.146,0.325-0.326V11.34c0-0.18-0.146-0.326-0.325-0.326H4.046V8.408
+ h6.515v2.606H8.606c-0.18,0-0.326,0.146-0.326,0.326v3.908c0,0.18,0.146,0.326,0.326,0.326h4.561c0.18,0,0.326-0.146,0.326-0.326
+ V11.34c0-0.18-0.146-0.326-0.326-0.326h-1.954V8.408h6.515v2.606h-1.954c-0.18,0-0.326,0.146-0.326,0.326v3.908
+ c0,0.18,0.146,0.326,0.326,0.326h4.56c0.181,0,0.326-0.146,0.326-0.326V11.34C20.659,11.16,20.514,11.014,20.333,11.014z
+ M6.326,1.242h9.121v3.257H6.326V1.242z M5.675,14.922H1.766v-3.256h3.909V14.922z M12.842,14.922h-3.91v-3.256h3.91V14.922z
+ M20.008,14.922h-3.909v-3.256h3.909V14.922z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/chrome-logo.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/chrome-logo.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/chrome-logo.svg (revision 7)
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" viewBox="0 0 192 192"><defs><circle id="a" cx="96" cy="96" r="88"/></defs><clipPath id="b"><use xlink:href="#a" overflow="visible"/></clipPath><g clip-path="url(#b)"><path fill="#DB4437" d="M21.97 8v108h39.39L96 56h88V8z"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="29.337" y1="75.021" x2="81.837" y2="44.354"><stop offset="0" stop-color="#a52714" stop-opacity=".6"/><stop offset=".66" stop-color="#a52714" stop-opacity="0"/></linearGradient><path fill="url(#c)" d="M21.97 8v108h39.39L96 56h88V8z"/></g><path clip-path="url(#b)" fill="#3E2723" fill-opacity=".15" d="M62.31 115.65L22.48 47.34l-.58 1 39.54 67.8z"/><g clip-path="url(#b)"><path fill="#0F9D58" d="M8 184h83.77l38.88-38.88V116H61.36L8 24.48z"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="110.872" y1="164.495" x2="52.538" y2="130.329"><stop offset="0" stop-color="#055524" stop-opacity=".4"/><stop offset=".33" stop-color="#055524" stop-opacity="0"/></linearGradient><path fill="url(#d)" d="M8 184h83.77l38.88-38.88V116H61.36L8 24.48z"/></g><path clip-path="url(#b)" fill="#263238" fill-opacity=".15" d="M129.84 117.33l-.83-.48L90.62 184h1.15l38.1-66.64z"/><g clip-path="url(#b)"><defs><path id="e" d="M8 184h83.77l38.88-38.88V116H61.36L8 24.48z"/></defs><clipPath id="f"><use xlink:href="#e" overflow="visible"/></clipPath><g clip-path="url(#f)"><path fill="#FFCD40" d="M96 56l34.65 60-38.88 68H184V56z"/><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="121.858" y1="49.804" x2="136.547" y2="114.13"><stop offset="0" stop-color="#ea6100" stop-opacity=".3"/><stop offset=".66" stop-color="#ea6100" stop-opacity="0"/></linearGradient><path fill="url(#g)" d="M96 56l34.65 60-38.88 68H184V56z"/></g></g><g clip-path="url(#b)"><path fill="#FFCD40" d="M96 56l34.65 60-38.88 68H184V56z"/><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="121.858" y1="49.804" x2="136.547" y2="114.13"><stop offset="0" stop-color="#ea6100" stop-opacity=".3"/><stop offset=".66" stop-color="#ea6100" stop-opacity="0"/></linearGradient><path fill="url(#h)" d="M96 56l34.65 60-38.88 68H184V56z"/></g><g clip-path="url(#b)"><defs><path id="i" d="M96 56l34.65 60-38.88 68H184V56z"/></defs><clipPath id="j"><use xlink:href="#i" overflow="visible"/></clipPath><g clip-path="url(#j)"><path fill="#DB4437" d="M21.97 8v108h39.39L96 56h88V8z"/><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="29.337" y1="75.021" x2="81.837" y2="44.354"><stop offset="0" stop-color="#a52714" stop-opacity=".6"/><stop offset=".66" stop-color="#a52714" stop-opacity="0"/></linearGradient><path fill="url(#k)" d="M21.97 8v108h39.39L96 56h88V8z"/></g></g><radialGradient id="l" cx="668.176" cy="55.948" r="84.078" gradientTransform="translate(-576)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3e2723" stop-opacity=".2"/><stop offset="1" stop-color="#3e2723" stop-opacity="0"/></radialGradient><path clip-path="url(#b)" fill="url(#l)" d="M96 56v20.95L174.4 56z"/><g clip-path="url(#b)"><defs><path id="m" d="M21.97 8v40.34L61.36 116 96 56h88V8z"/></defs><clipPath id="n"><use xlink:href="#m" overflow="visible"/></clipPath><g clip-path="url(#n)"><path fill="#0F9D58" d="M8 184h83.77l38.88-38.88V116H61.36L8 24.48z"/><linearGradient id="o" gradientUnits="userSpaceOnUse" x1="110.872" y1="164.495" x2="52.538" y2="130.329"><stop offset="0" stop-color="#055524" stop-opacity=".4"/><stop offset=".33" stop-color="#055524" stop-opacity="0"/></linearGradient><path fill="url(#o)" d="M8 184h83.77l38.88-38.88V116H61.36L8 24.48z"/></g></g><radialGradient id="p" cx="597.875" cy="48.52" r="78.044" gradientTransform="translate(-576)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3e2723" stop-opacity=".2"/><stop offset="1" stop-color="#3e2723" stop-opacity="0"/></radialGradient><path clip-path="url(#b)" fill="url(#p)" d="M21.97 48.45l57.25 57.24L61.36 116z"/><radialGradient id="q" cx="671.844" cy="96.138" r="87.87" gradientTransform="translate(-576)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#263238" stop-opacity=".2"/><stop offset="1" stop-color="#263238" stop-opacity="0"/></radialGradient><path clip-path="url(#b)" fill="url(#q)" d="M91.83 183.89l20.96-78.2L130.65 116z"/><g clip-path="url(#b)"><circle fill="#F1F1F1" cx="96" cy="96" r="40"/><circle fill="#4285F4" cx="96" cy="96" r="32"/></g><g clip-path="url(#b)"><path fill="#3E2723" fill-opacity=".2" d="M96 55c-22.09 0-40 17.91-40 40v1c0-22.09 17.91-40 40-40h88v-1H96z"/><path fill="#FFF" fill-opacity=".1" d="M130.6 116c-6.92 11.94-19.81 20-34.6 20-14.8 0-27.69-8.06-34.61-20h-.04L8 24.48v1L61.36 117h.04c6.92 11.94 19.81 20 34.61 20 14.79 0 27.68-8.05 34.6-20h.05v-1h-.06z"/><path opacity=".1" fill="#3E2723" d="M97 56c-.17 0-.33.02-.5.03C118.36 56.3 136 74.08 136 96s-17.64 39.7-39.5 39.97c.17 0 .33.03.5.03 22.09 0 40-17.91 40-40s-17.91-40-40-40z"/><path fill="#FFF" fill-opacity=".2" d="M131 117.33c3.4-5.88 5.37-12.68 5.37-19.96 0-4.22-.66-8.28-1.87-12.09.95 3.42 1.5 7.01 1.5 10.73 0 7.28-1.97 14.08-5.37 19.96l.02.04-38.88 68h1.16l38.09-66.64-.02-.04z"/></g><g clip-path="url(#b)"><path fill="#FFF" fill-opacity=".2" d="M96 9c48.43 0 87.72 39.13 87.99 87.5 0-.17.01-.33.01-.5 0-48.6-39.4-88-88-88S8 47.4 8 96c0 .17.01.33.01.5C8.28 48.13 47.57 9 96 9z"/><path fill="#3E2723" fill-opacity=".15" d="M96 183c48.43 0 87.72-39.13 87.99-87.5 0 .17.01.33.01.5 0 48.6-39.4 88-88 88S8 144.6 8 96c0-.17.01-.33.01-.5C8.28 143.87 47.57 183 96 183z"/></g><radialGradient id="r" cx="34.286" cy="32.014" r="176.746" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity=".1"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></radialGradient><circle fill="url(#r)" cx="96" cy="96" r="88"/><path fill="none" d="M0 0h192v192H0z"/></svg>
\ No newline at end of file
Index: base3.10/src/main/webapp/images/custom/satisfaction_fill.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/satisfaction_fill.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/satisfaction_fill.svg (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 205.34 35.73" style="enable-background:new 0 0 205.34 35.73;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F7DB37;}
+</style>
+<g>
+ <path class="st0" d="M20.31,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C17.73-0.34,19.65-0.34,20.31,1.01z"/>
+ <path class="st0" d="M62.3,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C59.72-0.34,61.64-0.34,62.3,1.01z"/>
+ <path class="st0" d="M104.29,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C101.71-0.34,103.63-0.34,104.29,1.01z"/>
+ <path class="st0" d="M146.28,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C143.7-0.34,145.62-0.34,146.28,1.01z"/>
+ <path class="st0" d="M188.27,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C185.69-0.34,187.61-0.34,188.27,1.01z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_top.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_top.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_top.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 27.52 14.61" style="enable-background:new 0 0 27.52 14.61;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#333333;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <line class="st0" x1="1.5" y1="13.11" x2="13.76" y2="1.5"/>
+ <line class="st0" x1="26.02" y1="13.11" x2="13.76" y2="1.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_shrink.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_shrink.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_shrink.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="22.062px" height="22.062px" viewBox="0.54 0.404 22.062 22.062" enable-background="new 0.54 0.404 22.062 22.062"
+ xml:space="preserve">
+<g>
+ <path fill="#221F1F" d="M16.782,12.204H6.359c-0.425,0-0.77-0.345-0.77-0.77s0.345-0.77,0.77-0.77h10.423
+ c0.425,0,0.77,0.345,0.77,0.77S17.207,12.204,16.782,12.204z"/>
+ <path fill="#221F1F" d="M11.571,22.466c-6.083,0-11.031-4.948-11.031-11.031c0-6.083,4.949-11.031,11.031-11.031
+ s11.031,4.948,11.031,11.031C22.602,17.518,17.653,22.466,11.571,22.466z M11.571,1.943c-5.234,0-9.492,4.258-9.492,9.492
+ c0,5.233,4.258,9.492,9.492,9.492s9.492-4.259,9.492-9.492C21.063,6.201,16.805,1.943,11.571,1.943z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_update_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_update_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_update_on.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 39.4 39.2" style="enable-background:new 0 0 39.4 39.2;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#007DC3;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M31.8,21.2V31c0,3.7-3,6.8-6.8,6.8H8.3c-3.7,0-6.8-3-6.8-6.8V14.2c0-3.7,3-6.8,6.8-6.8H18"/>
+ <path class="st0" d="M18.8,25.1l-6.3,1.7l1.7-6.3L32.3,2.4c1.3-1.3,3.3-1.3,4.6,0s1.3,3.3,0,4.6L18.8,25.1z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/tech_img.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/tech_img.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_mouse.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_mouse.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_mouse.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 76.4 110" style="enable-background:new 0 0 76.4 110;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;stroke:#333333;stroke-width:9;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#333333;stroke-width:9;stroke-linejoin:bevel;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M43.9,105H32.5C17.4,105,5,92.6,5,77.5V32.5C5,17.4,17.4,5,32.5,5h11.4C59,5,71.4,17.4,71.4,32.5v44.9
+ C71.4,92.6,59.3,105,43.9,105"/>
+ <line class="st1" x1="38.3" y1="5" x2="38.3" y2="39.8"/>
+ <line class="st1" x1="5" y1="39.8" x2="71.4" y2="39.8"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/drop1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/drop1.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tree_checkbox_true_full.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_checkbox_true_full.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_checkbox_true_full.svg (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="33.75 0 24.166 24.165" enable-background="new 33.75 0 24.166 24.165"
+ xml:space="preserve">
+<path fill="#FFFFFF" d="M35.85,23.588c-0.84,0-1.523-0.684-1.523-1.521V2.099c0-0.839,0.684-1.522,1.523-1.522h19.967
+ c0.84,0,1.523,0.683,1.523,1.522v19.968c0,0.84-0.684,1.521-1.523,1.521H35.85z"/>
+<path fill="#338200" d="M55.816,0H35.85c-1.158,0-2.101,0.942-2.101,2.099v19.968c0,1.156,0.942,2.098,2.101,2.098h19.967
+ c1.159,0,2.102-0.941,2.102-2.098V2.098C57.916,0.941,56.973,0,55.816,0z M55.816,23.01H35.85c-0.522,0-0.947-0.424-0.947-0.945
+ V2.099c0-0.522,0.425-0.946,0.947-0.946h19.967V1.151c0.522,0,0.947,0.424,0.947,0.946v19.968
+ C56.764,22.586,56.339,23.01,55.816,23.01z"/>
+<path fill="#338200" d="M43.988,17.477c-0.264,0-0.531-0.102-0.734-0.305l-4.193-4.191c-0.406-0.406-0.406-1.063,0-1.469
+ c0.404-0.404,1.061-0.407,1.467,0l3.461,3.457l7.15-7.149c0.406-0.405,1.063-0.405,1.469,0c0.406,0.406,0.406,1.063,0,1.469
+ l-7.885,7.884C44.52,17.375,44.256,17.477,43.988,17.477z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_checkbox_disable.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_checkbox_disable.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_checkbox_disable.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="0 0 24.166 24.165" enable-background="new 0 0 24.166 24.165" xml:space="preserve">
+<path fill="#DDDDDD" d="M2.1,23.588c-0.84,0-1.523-0.685-1.523-1.521V2.099c0-0.839,0.684-1.522,1.523-1.522h19.966
+ c0.84,0,1.522,0.683,1.522,1.522v19.968c0,0.84-0.685,1.521-1.522,1.521H2.1z"/>
+<path fill="#8C8C8C" d="M22.065,0H2.099c-1.158,0-2.1,0.942-2.1,2.099v19.967c0,1.156,0.942,2.098,2.1,2.098h19.966
+ c1.159,0,2.102-0.941,2.102-2.098V2.099C24.165,0.942,23.222,0,22.065,0z M22.065,23.01H2.099c-0.522,0-0.947-0.424-0.947-0.945V2.1
+ c0-0.522,0.425-0.946,0.947-0.946l19.966-0.002c0.522,0,0.947,0.424,0.947,0.946v19.967C23.013,22.586,22.588,23.01,22.065,23.01z"
+ />
+<path fill="#8C8C8C" d="M10.235,17.063c-0.264,0-0.53-0.102-0.733-0.305L5.31,12.567c-0.406-0.406-0.406-1.063,0-1.469
+ c0.403-0.404,1.061-0.407,1.467,0l3.461,3.457l7.15-7.149c0.405-0.405,1.063-0.405,1.469,0c0.406,0.406,0.406,1.063,0,1.469
+ l-7.885,7.883C10.769,16.961,10.504,17.063,10.235,17.063z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cloud2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_cloud2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_cloud2.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 179.1 124.6" style="enable-background:new 0 0 179.1 124.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#6E8CFD;}
+ .st1{fill:#3BBCFD;}
+</style>
+<g>
+ <path class="st0" d="M64.2,107.2c-0.4,0-0.8,0-1.3,0.1c-2-3.9-6-6.7-10.7-6.7c-0.1,0-0.3,0-0.4,0c-1.9-9-9.9-15.7-19.4-15.7
+ c-9.5,0-17.5,6.7-19.4,15.7c-0.3,0-0.7,0-1,0c-6.6,0-12,5.4-12,12s5.4,12,12,12h52.2c4.8,0,8.7-3.9,8.7-8.7
+ C72.9,111.1,69,107.2,64.2,107.2z"/>
+ <path class="st1" d="M165,36c-0.7,0-1.4,0.1-2,0.1c-3.2-6.4-9.8-10.8-17.4-10.8c-0.2,0-0.5,0-0.7,0C141.9,10.9,129,0,113.6,0
+ C98.1,0,85.3,10.9,82.2,25.4c-0.5,0-1.1-0.1-1.6-0.1c-10.7,0-19.4,8.7-19.4,19.4c0,10.7,8.7,19.4,19.4,19.4H165
+ c7.8,0,14.1-6.3,14.1-14.1C179.1,42.3,172.8,36,165,36z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_blank_w_focus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_blank_w_focus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_blank_w_focus.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.3 37.3" style="enable-background:new 0 0 37.3 37.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="25.8,1.5 35.8,1.5 35.8,11.5 "/>
+ <line class="st0" x1="35.8" y1="1.5" x2="18.2" y2="19.1"/>
+</g>
+<path class="st0" d="M35.8,17.1v11c0,4.2-3.4,7.7-7.7,7.7h-19c-4.2,0-7.7-3.4-7.7-7.7v-19c0-4.2,3.4-7.7,7.7-7.7h11"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tos1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tos1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tos1.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 28.7 29" style="enable-background:new 0 0 28.7 29;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:1.2209;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <line class="st0" x1="9.9" y1="16.9" x2="18.8" y2="21.4"/>
+ <path class="st0" d="M9.9,14.5c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6C7.8,9.9,9.9,12,9.9,14.5z"/>
+ <path class="st0" d="M28.1,5.2c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6C26,0.6,28.1,2.7,28.1,5.2z"/>
+ <path class="st0" d="M28.1,23.8c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6C26,19.1,28.1,21.2,28.1,23.8z"/>
+ <line class="st0" x1="10.1" y1="12" x2="18.8" y2="7.6"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/chatbot_arrow_bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/chatbot_arrow_bg.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/item.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/item.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/drop2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/drop2.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/symbol.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/symbol.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/symbol.svg (revision 7)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="58px" height="58px" viewBox="0 0 58 58" enable-background="new 0 0 58 58" xml:space="preserve">
+<g>
+ <g>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4.1538" y1="5.4268" x2="47.8462" y2="47.4268">
+ <stop offset="0" style="stop-color:#0089CC"/>
+ <stop offset="1" style="stop-color:#37308F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M31.729,57.867c13.733-1.281,24.686-12.138,26.111-25.828
+ C44.127,33.326,33.16,44.197,31.729,57.867z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-2.583" y1="3.4819" x2="49.417" y2="45.4819">
+ <stop offset="0" style="stop-color:#0089CC"/>
+ <stop offset="1" style="stop-color:#37308F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M38.771,8.106c4.61,0,8.98,1.026,12.916,2.841C46.375,4.278,38.189,0,29,0C12.984,0,0,12.982,0,29
+ c0,8.822,3.945,16.719,10.161,22.037C8.622,47.362,7.77,43.334,7.77,39.106C7.771,22.014,21.677,8.106,38.771,8.106z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-3.6348" y1="4.7837" x2="48.3652" y2="46.7837">
+ <stop offset="0" style="stop-color:#0089CC"/>
+ <stop offset="1" style="stop-color:#37308F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M20.563,49.899c0,2.451,0.318,4.828,0.896,7.104C23.864,57.647,26.391,58,29,58
+ c0.238,0,0.475-0.015,0.711-0.019c1.398-14.873,13.348-26.715,28.264-27.959C57.986,29.684,58,29.344,58,29
+ c0-2.449-0.307-4.825-0.878-7.097c-2.41-0.653-4.944-1.004-7.56-1.004C33.572,20.899,20.563,33.91,20.563,49.899z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-3.1323" y1="4.1621" x2="48.8677" y2="46.1621">
+ <stop offset="0" style="stop-color:#0089CC"/>
+ <stop offset="1" style="stop-color:#37308F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M9.771,39.106c0,5.285,1.426,10.242,3.908,14.513c1.738,1.084,3.597,1.989,5.555,2.688
+ c-0.438-2.067-0.67-4.211-0.67-6.408c0-17.094,13.907-31,31-31c2.371,0,4.679,0.277,6.898,0.785
+ c-0.611-1.803-1.395-3.524-2.331-5.149c-4.457-2.8-9.719-4.429-15.36-4.429C22.78,10.106,9.771,23.117,9.771,39.106z"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/box_body1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_body1.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_plus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_plus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_plus.svg (revision 7)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="27px" height="27px" viewBox="0 0 27 27" enable-background="new 0 0 27 27" xml:space="preserve">
+<line fill="none" stroke="#282828" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.333" y1="13.5" x2="24.668" y2="13.5"/>
+<line fill="none" stroke="#282828" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="13.775" y1="2.333" x2="13.775" y2="24.666"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/logo.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/logo.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tos2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tos2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tos2.svg (revision 7)
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 31.8 31.5" style="enable-background:new 0 0 31.8 31.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <g>
+ <g>
+ <path class="st0" d="M13.1,6.4C13.1,6.4,13.1,6.4,13.1,6.4C13.1,6.4,13.1,6.4,13.1,6.4C13.1,6.4,13.1,6.4,13.1,6.4z"/>
+ <path class="st0" d="M13.3,6.4c0,0-0.1,0-0.1,0C13.2,6.4,13.3,6.4,13.3,6.4C13.3,6.4,13.3,6.4,13.3,6.4z"/>
+ <path class="st0" d="M16.2,8c-0.1,0-0.1-0.1-0.2-0.1C16.1,7.9,16.1,7.9,16.2,8C16.1,8,16.2,8,16.2,8z"/>
+ <path class="st0" d="M15.8,7.7c-0.1,0-0.1-0.1-0.1-0.1C15.7,7.7,15.7,7.7,15.8,7.7C15.8,7.7,15.8,7.7,15.8,7.7z"/>
+ <path class="st0" d="M15.9,7.8C15.9,7.8,15.9,7.8,15.9,7.8C15.9,7.8,15.9,7.8,15.9,7.8C15.9,7.8,15.9,7.8,15.9,7.8z"/>
+ <path class="st0" d="M12.6,6.3c0,0,0.1,0,0.1,0C12.6,6.3,12.6,6.3,12.6,6.3z"/>
+ <path class="st0" d="M13,6.4C13,6.4,13,6.3,13,6.4C13,6.3,13,6.4,13,6.4L13,6.4z"/>
+ <path class="st0" d="M13.6,6.6L13.6,6.6L13.6,6.6z"/>
+ <path class="st0" d="M12.8,6.3C12.8,6.3,12.7,6.3,12.8,6.3C12.7,6.3,12.7,6.3,12.8,6.3C12.8,6.3,12.8,6.3,12.8,6.3z"/>
+ <path class="st0" d="M12.9,6.3c-0.1,0-0.1,0-0.1,0c0,0,0,0,0,0C12.9,6.3,12.9,6.3,12.9,6.3z"/>
+ <path class="st0" d="M15.3,7.4c-0.1,0-0.1-0.1-0.2-0.1c0,0,0,0,0,0C15.2,7.4,15.2,7.4,15.3,7.4z"/>
+ <path class="st0" d="M14.7,7.1C14.6,7,14.5,7,14.5,6.9C14.5,7,14.6,7,14.7,7.1C14.7,7.1,14.7,7.1,14.7,7.1z"/>
+ <polygon class="st0" points="14.4,6.9 14.4,6.9 14.4,6.9 "/>
+ <path class="st0" d="M13.4,6.5c0.1,0,0.1,0.1,0.2,0.1C13.5,6.5,13.5,6.5,13.4,6.5z"/>
+ <path class="st0" d="M14.3,6.9c0,0-0.1,0-0.1-0.1C14.2,6.8,14.3,6.8,14.3,6.9C14.3,6.9,14.3,6.9,14.3,6.9z"/>
+ <path class="st0" d="M12.5,6.3c0,0-0.1,0-0.1,0C12.4,6.3,12.4,6.3,12.5,6.3L12.5,6.3z"/>
+ <path class="st0" d="M14.7,7.1L14.7,7.1L14.7,7.1z"/>
+ <polygon class="st0" points="13.9,6.7 13.9,6.7 13.9,6.7 "/>
+ <path class="st0" d="M13.9,6.7c-0.1,0-0.1-0.1-0.2-0.1c0,0,0,0,0,0C13.8,6.6,13.8,6.6,13.9,6.7z"/>
+ <path class="st0" d="M15.6,7.6C15.6,7.6,15.6,7.6,15.6,7.6C15.5,7.6,15.5,7.6,15.6,7.6C15.6,7.6,15.6,7.6,15.6,7.6z"/>
+ <path class="st0" d="M14.1,6.8c0,0-0.1,0-0.1-0.1C14,6.7,14,6.7,14.1,6.8C14.1,6.8,14.1,6.8,14.1,6.8z"/>
+ <path class="st0" d="M14.8,7.1c0.1,0,0.1,0.1,0.2,0.1C14.9,7.2,14.8,7.1,14.8,7.1z"/>
+ <path class="st0" d="M15.5,7.5c0,0-0.1,0-0.1-0.1C15.4,7.5,15.4,7.5,15.5,7.5C15.4,7.5,15.4,7.5,15.5,7.5z"/>
+ <path class="st0" d="M12,6.3C12,6.3,11.9,6.3,12,6.3C11.9,6.3,11.9,6.3,12,6.3C11.9,6.3,12,6.3,12,6.3z"/>
+ <path class="st0" d="M16.6,8.3c-0.1-0.1-0.1-0.1-0.2-0.1C16.4,8.2,16.5,8.2,16.6,8.3C16.5,8.2,16.5,8.3,16.6,8.3z"/>
+ <path class="st0" d="M11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4z"/>
+ <path class="st0" d="M12.1,6.3C12.1,6.3,12,6.3,12.1,6.3C12,6.3,12,6.3,12.1,6.3C12.1,6.3,12.1,6.3,12.1,6.3z"/>
+ <path class="st0" d="M11.5,6.5C11.5,6.6,11.5,6.6,11.5,6.5C11.5,6.6,11.5,6.6,11.5,6.5C11.5,6.6,11.5,6.5,11.5,6.5z"/>
+ <path class="st0" d="M16.7,8.4c0.1,0.1,0.2,0.2,0.3,0.2C16.9,8.5,16.8,8.4,16.7,8.4z"/>
+ <path class="st0" d="M11.6,6.4C11.6,6.4,11.6,6.5,11.6,6.4C11.6,6.5,11.6,6.5,11.6,6.4C11.6,6.5,11.6,6.4,11.6,6.4z"/>
+ <path class="st0" d="M11.4,6.7C11.4,6.7,11.4,6.7,11.4,6.7C11.4,6.7,11.4,6.7,11.4,6.7z"/>
+ <path class="st0" d="M11.8,6.4C11.8,6.3,11.8,6.3,11.8,6.4C11.8,6.3,11.8,6.3,11.8,6.4z"/>
+ <path class="st0" d="M9.7,10.5L10,9.9C9.9,10.1,9.8,10.3,9.7,10.5z"/>
+ <path class="st0" d="M11.6,6.5L11.6,6.5C11.6,6.5,11.6,6.5,11.6,6.5C11.6,6.5,11.6,6.5,11.6,6.5z"/>
+ <path class="st0" d="M10.4,9l1-2.3C11.1,7.5,10.7,8.3,10.4,9z"/>
+ <path class="st0" d="M12.3,6.3C12.3,6.3,12.3,6.3,12.3,6.3C12.3,6.3,12.3,6.3,12.3,6.3C12.3,6.3,12.3,6.3,12.3,6.3z"/>
+ <path class="st0" d="M11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4z"/>
+ <path class="st0" d="M12.2,6.3C12.1,6.3,12.1,6.3,12.2,6.3C12.1,6.3,12.1,6.3,12.2,6.3C12.1,6.3,12.1,6.3,12.2,6.3z"/>
+ <path class="st0" d="M12.3,6.3C12.2,6.3,12.2,6.3,12.3,6.3C12.2,6.3,12.2,6.3,12.3,6.3C12.2,6.3,12.3,6.3,12.3,6.3z"/>
+ <polygon class="st0" points="11.4,6.7 11.4,6.7 11.4,6.7 "/>
+ <path class="st0" d="M23.6,15.4c0.1,0.1,0.1,0.2,0.2,0.3C23.7,15.6,23.6,15.5,23.6,15.4z"/>
+ <path class="st0" d="M18.8,10.1c0.3,0.2,0.5,0.5,0.8,0.8C19.4,10.6,19.1,10.4,18.8,10.1z"/>
+ <path class="st0" d="M23.9,15.9c0.1,0.1,0.1,0.2,0.2,0.3C24,16.1,23.9,16,23.9,15.9z"/>
+ <path class="st0" d="M18,9.4c0.3,0.2,0.6,0.5,0.9,0.7C18.5,9.8,18.2,9.6,18,9.4z"/>
+ <path class="st0" d="M21.8,13.2c0.1,0.1,0.2,0.2,0.3,0.3C22,13.4,21.9,13.3,21.8,13.2z"/>
+ <path class="st0" d="M20.6,11.8c0.1,0.1,0.2,0.2,0.3,0.3C20.8,12,20.7,11.9,20.6,11.8z"/>
+ <path class="st0" d="M21.4,12.7c0.1,0.1,0.2,0.2,0.3,0.4C21.6,13,21.5,12.8,21.4,12.7z"/>
+ <path class="st0" d="M21,12.3c0.1,0.1,0.2,0.3,0.4,0.4C21.2,12.5,21.1,12.4,21,12.3z"/>
+ <path class="st0" d="M22.6,14.1c0.1,0.1,0.2,0.2,0.3,0.3C22.8,14.3,22.7,14.2,22.6,14.1z"/>
+ <path class="st0" d="M22.2,13.6c0.1,0.1,0.2,0.3,0.3,0.4C22.4,13.9,22.3,13.8,22.2,13.6z"/>
+ <path class="st0" d="M22.9,14.5c0.1,0.1,0.2,0.2,0.2,0.3C23.1,14.8,23,14.7,22.9,14.5z"/>
+ <path class="st0" d="M19.7,10.9c0.3,0.3,0.5,0.5,0.8,0.8C20.2,11.5,20,11.2,19.7,10.9z"/>
+ <path class="st0" d="M23.2,15c0.1,0.1,0.2,0.3,0.3,0.4C23.4,15.2,23.3,15.1,23.2,15z"/>
+ <path class="st0" d="M24.9,20.1C24.9,20.1,24.9,20.1,24.9,20.1C24.9,20.1,24.9,20.1,24.9,20.1z"/>
+ <path class="st0" d="M25,20C25,20,25,20,25,20C25,20,25,20,25,20z"/>
+ <path class="st0" d="M25.2,19.6C25.2,19.6,25.2,19.6,25.2,19.6C25.2,19.6,25.2,19.6,25.2,19.6z"/>
+ <path class="st0" d="M24.8,20.1C24.8,20.1,24.8,20.1,24.8,20.1C24.8,20.1,24.8,20.1,24.8,20.1z"/>
+ <path class="st0" d="M25.1,19.9C25.1,19.9,25.1,19.9,25.1,19.9C25.1,19.9,25.1,19.9,25.1,19.9z"/>
+ <path class="st0" d="M25.2,19.7C25.2,19.8,25.2,19.8,25.2,19.7C25.2,19.8,25.2,19.8,25.2,19.7z"/>
+ <path class="st0" d="M11.4,6.7C11.4,6.7,11.4,6.7,11.4,6.7C11.4,6.7,11.4,6.7,11.4,6.7z"/>
+ <path class="st0" d="M11.6,6.5C11.6,6.5,11.6,6.5,11.6,6.5C11.5,6.5,11.5,6.5,11.6,6.5C11.5,6.5,11.5,6.6,11.6,6.5
+ C11.5,6.5,11.6,6.5,11.6,6.5z"/>
+ <path class="st0" d="M11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6C11.4,6.7,11.4,6.7,11.5,6.6c-0.1,0.1-0.1,0.1-0.1,0.1l0,0
+ C11.4,6.7,11.4,6.6,11.5,6.6z"/>
+ <path class="st0" d="M11.5,6.5C11.5,6.5,11.6,6.5,11.5,6.5C11.5,6.5,11.5,6.5,11.5,6.5z"/>
+ <path class="st0" d="M24.1,16.2c0.1,0.1,0.1,0.2,0.2,0.4C24.2,16.5,24.2,16.4,24.1,16.2z"/>
+ <path class="st0" d="M24.7,17.4c0,0.1,0.1,0.2,0.1,0.3C24.8,17.7,24.8,17.5,24.7,17.4z"/>
+ <path class="st0" d="M25,18.2c0,0.1,0.1,0.2,0.1,0.3C25.1,18.4,25.1,18.3,25,18.2z"/>
+ <path class="st0" d="M24.9,17.9c0,0.1,0.1,0.2,0.1,0.2C25,18,25,17.9,24.9,17.9z"/>
+ <path class="st0" d="M24.4,16.7c0,0.1,0.1,0.2,0.1,0.3C24.5,16.9,24.4,16.8,24.4,16.7z"/>
+ <path class="st0" d="M25.2,19.5L25.2,19.5L25.2,19.5z"/>
+ <path class="st0" d="M24.6,17.1c0,0.1,0.1,0.2,0.1,0.3C24.7,17.3,24.6,17.2,24.6,17.1z"/>
+ <path class="st0" d="M25.3,19.1C25.3,19.1,25.3,19.2,25.3,19.1C25.3,19.1,25.3,19.1,25.3,19.1z"/>
+ <path class="st0" d="M25.3,19.3C25.3,19.3,25.3,19.3,25.3,19.3C25.3,19.3,25.3,19.3,25.3,19.3z"/>
+ <path class="st0" d="M25.2,18.9C25.2,18.9,25.2,18.9,25.2,18.9C25.2,18.9,25.2,18.9,25.2,18.9z"/>
+ <path class="st0" d="M25.2,18.7C25.2,18.7,25.2,18.7,25.2,18.7C25.2,18.7,25.2,18.7,25.2,18.7z"/>
+ <path class="st0" d="M12.2,6.3C12.2,6.3,12.2,6.3,12.2,6.3L12.2,6.3c-0.1,0-0.1,0-0.1,0C12.1,6.3,12.2,6.3,12.2,6.3z"/>
+ <path class="st0" d="M13.1,6.4C13.1,6.4,13.2,6.4,13.1,6.4C13.2,6.4,13.1,6.4,13.1,6.4z"/>
+ <path class="st0" d="M13.4,6.5C13.4,6.5,13.4,6.5,13.4,6.5C13.4,6.4,13.4,6.5,13.4,6.5C13.4,6.5,13.4,6.5,13.4,6.5z"/>
+ <path class="st0" d="M12,6.3C12,6.3,12,6.3,12,6.3C12,6.3,12,6.3,12,6.3z"/>
+ <path class="st0" d="M13.3,6.4C13.2,6.4,13.2,6.4,13.3,6.4c-0.1,0-0.1,0-0.2-0.1c0,0,0,0,0,0C13.1,6.4,13.2,6.4,13.3,6.4z"/>
+ <path class="st0" d="M11.9,6.3C11.9,6.3,11.9,6.3,11.9,6.3L11.9,6.3C11.9,6.3,11.9,6.3,11.9,6.3z"/>
+ <path class="st0" d="M11.9,6.3L11.9,6.3C11.8,6.3,11.8,6.3,11.9,6.3c-0.1,0-0.1,0-0.1,0h0C11.8,6.3,11.8,6.3,11.9,6.3z"/>
+ <path class="st0" d="M11.7,6.4C11.8,6.4,11.8,6.4,11.7,6.4C11.8,6.4,11.8,6.4,11.7,6.4z"/>
+ <path class="st0" d="M13.9,6.7L13.9,6.7C13.9,6.7,13.9,6.7,13.9,6.7c-0.1-0.1-0.2-0.1-0.3-0.1C13.8,6.6,13.9,6.7,13.9,6.7z"/>
+ <path class="st0" d="M11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4C11.6,6.4,11.6,6.4,11.7,6.4c-0.1,0.1-0.1,0.1-0.1,0.1
+ C11.6,6.4,11.7,6.4,11.7,6.4z"/>
+ <path class="st0" d="M13.6,6.6L13.6,6.6C13.6,6.6,13.6,6.6,13.6,6.6c-0.1,0-0.2-0.1-0.2-0.1c0,0,0,0,0,0
+ C13.5,6.5,13.6,6.5,13.6,6.6z"/>
+ <path class="st0" d="M12.9,6.3C12.9,6.3,12.9,6.3,12.9,6.3C12.9,6.3,12.9,6.3,12.9,6.3z"/>
+ <path class="st0" d="M11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6z"/>
+ <path class="st0" d="M11.6,6.4C11.6,6.4,11.6,6.4,11.6,6.4C11.6,6.4,11.6,6.4,11.6,6.4z"/>
+ <path class="st0" d="M12.6,6.3C12.5,6.3,12.5,6.3,12.6,6.3C12.5,6.3,12.5,6.3,12.6,6.3C12.5,6.3,12.6,6.3,12.6,6.3z"/>
+ <path class="st0" d="M12.5,6.3c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0s0,0,0,0C12.4,6.3,12.4,6.3,12.5,6.3z"/>
+ <path class="st0" d="M12.8,6.3C12.8,6.3,12.7,6.3,12.8,6.3C12.7,6.3,12.7,6.3,12.8,6.3c-0.1,0-0.2,0-0.2,0c0,0,0,0,0,0
+ C12.6,6.3,12.7,6.3,12.8,6.3z"/>
+ <path class="st0" d="M13,6.4C13,6.4,13,6.3,13,6.4C12.9,6.3,12.9,6.3,13,6.4c-0.1,0-0.1,0-0.2,0C12.9,6.3,12.9,6.3,13,6.4z"/>
+ <path class="st0" d="M12.1,6.3C12,6.3,12,6.3,12.1,6.3C12,6.3,12,6.3,12.1,6.3c-0.1,0-0.1,0-0.1,0C11.9,6.3,12,6.3,12.1,6.3z"/>
+ <path class="st0" d="M12.7,6.3C12.7,6.3,12.7,6.3,12.7,6.3C12.7,6.3,12.7,6.3,12.7,6.3z"/>
+ <path class="st0" d="M12.2,6.3L12.2,6.3C12.2,6.3,12.2,6.3,12.2,6.3z"/>
+ <path class="st0" d="M16.7,8.4c0,0-0.1-0.1-0.1-0.1C16.6,8.3,16.6,8.3,16.7,8.4C16.7,8.3,16.7,8.4,16.7,8.4z"/>
+ <path class="st0" d="M15.6,7.6C15.6,7.6,15.6,7.6,15.6,7.6C15.6,7.6,15.6,7.6,15.6,7.6z"/>
+ <path class="st0" d="M13.6,6.6C13.6,6.6,13.6,6.6,13.6,6.6C13.6,6.6,13.6,6.6,13.6,6.6z"/>
+ <path class="st0" d="M16.1,8C16.1,7.9,16.1,7.9,16.1,8C16,7.9,16,7.9,16,7.8c0,0,0,0-0.1,0C16,7.9,16,7.9,16.1,8z"/>
+ <path class="st0" d="M15.3,7.4c0,0,0.1,0,0.1,0.1C15.3,7.4,15.3,7.4,15.3,7.4z"/>
+ <path class="st0" d="M15.8,7.7c0,0-0.1-0.1-0.1-0.1c0,0,0,0-0.1,0c0,0,0,0,0,0C15.6,7.6,15.7,7.7,15.8,7.7z"/>
+ <path class="st0" d="M17,8.6c-0.1-0.1-0.2-0.2-0.3-0.2c0,0,0,0,0,0C16.8,8.4,16.9,8.5,17,8.6z"/>
+ <path class="st0" d="M14.7,7.1C14.7,7.1,14.7,7.1,14.7,7.1C14.7,7.1,14.7,7.1,14.7,7.1z"/>
+ <path class="st0" d="M16.4,8.1c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0C16.3,8.1,16.3,8.1,16.4,8.1z"/>
+ <path class="st0" d="M12.3,6.3C12.3,6.3,12.4,6.3,12.3,6.3C12.4,6.3,12.3,6.3,12.3,6.3z"/>
+ <path class="st0" d="M16.5,8.2c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1C16.4,8.1,16.4,8.2,16.5,8.2z"/>
+ <path class="st0" d="M15.9,7.8C16,7.9,16,7.9,15.9,7.8C16,7.9,16,7.9,15.9,7.8z"/>
+ <path class="st0" d="M13.9,6.7C13.9,6.7,13.9,6.7,13.9,6.7C13.9,6.7,13.9,6.7,13.9,6.7z"/>
+ <path class="st0" d="M14.3,6.8C14.2,6.8,14.2,6.8,14.3,6.8c-0.1-0.1-0.1-0.1-0.2-0.1c0,0-0.1,0-0.1,0C14.1,6.8,14.2,6.8,14.3,6.8
+ z"/>
+ <path class="st0" d="M17,8.6c0.3,0.2,0.6,0.5,0.9,0.7C17.6,9.1,17.3,8.8,17,8.6z"/>
+ <path class="st0" d="M14.7,7.1c-0.1,0-0.1-0.1-0.2-0.1c0,0-0.1,0-0.1,0l0,0C14.5,6.9,14.6,7,14.7,7.1z"/>
+ <path class="st0" d="M14.1,6.8C14.1,6.8,14.2,6.8,14.1,6.8C14.2,6.8,14.1,6.8,14.1,6.8z"/>
+ <path class="st0" d="M14.4,6.9C14.4,6.9,14.4,6.9,14.4,6.9C14.4,6.9,14.4,6.9,14.4,6.9z"/>
+ <path class="st0" d="M15.1,7.3C15.1,7.3,15,7.2,15.1,7.3C15,7.2,15,7.3,15.1,7.3C15.1,7.3,15.1,7.3,15.1,7.3z"/>
+ <path class="st0" d="M15.4,7.5C15.4,7.5,15.4,7.5,15.4,7.5c-0.1-0.1-0.1-0.1-0.2-0.1s-0.1-0.1-0.1-0.1
+ C15.2,7.4,15.3,7.4,15.4,7.5z"/>
+ <path class="st0" d="M15.1,7.3C15,7.3,15,7.3,15.1,7.3c-0.1-0.1-0.2-0.1-0.3-0.2c0,0,0,0-0.1,0l0,0C14.8,7.1,14.9,7.2,15.1,7.3z"
+ />
+ <path class="st0" d="M25.1,18.5c0,0.1,0,0.1,0,0.2C25.2,18.6,25.2,18.6,25.1,18.5z"/>
+ <path class="st0" d="M25,20C25,20,25,20,25,20C25,20,25,20,25,20z"/>
+ <path class="st0" d="M25.3,19.2c0,0,0,0.1,0,0.1C25.3,19.2,25.3,19.2,25.3,19.2z"/>
+ <path class="st0" d="M25.2,18.8c0,0,0,0.1,0,0.1C25.2,18.9,25.2,18.8,25.2,18.8z"/>
+ <path class="st0" d="M25.3,19.3c0,0,0,0.1,0,0.1C25.3,19.4,25.3,19.4,25.3,19.3z"/>
+ <path class="st0" d="M25.2,18.9c0,0.1,0,0.1,0,0.2C25.3,19.1,25.2,19,25.2,18.9z"/>
+ <path class="st0" d="M25.1,19.9C25.1,19.9,25,20,25.1,19.9C25,19.9,25.1,19.9,25.1,19.9z"/>
+ <path class="st0" d="M25.2,19.5c0,0,0,0.1,0,0.1C25.2,19.6,25.2,19.5,25.2,19.5z"/>
+ <path class="st0" d="M25.2,19.8c0,0,0,0.1-0.1,0.1C25.1,19.8,25.1,19.8,25.2,19.8z"/>
+ <path class="st0" d="M25.2,19.7c0,0,0,0.1,0,0.1C25.2,19.7,25.2,19.7,25.2,19.7z"/>
+ <path class="st0" d="M24.9,20.1C24.9,20.1,24.9,20.1,24.9,20.1C24.9,20.1,24.9,20.1,24.9,20.1z"/>
+ <path class="st0" d="M22,19.5c0,0,0.1,0,0.1,0.1C22,19.5,22,19.5,22,19.5z"/>
+ <path class="st0" d="M22.4,19.7C22.4,19.7,22.4,19.7,22.4,19.7C22.4,19.7,22.4,19.7,22.4,19.7z"/>
+ <path class="st0" d="M23,20C23.1,20,23.1,20,23,20C23.1,20,23.1,20,23,20z"/>
+ <path class="st0" d="M22.7,19.9C22.8,19.9,22.8,19.9,22.7,19.9C22.8,19.9,22.8,19.9,22.7,19.9z"/>
+ <path class="st0" d="M20.4,18.5c0,0,0.1,0.1,0.1,0.1C20.5,18.6,20.4,18.5,20.4,18.5z"/>
+ <path class="st0" d="M21.3,19.1C21.3,19.1,21.3,19.1,21.3,19.1C21.3,19.1,21.3,19.1,21.3,19.1z"/>
+ <path class="st0" d="M20.8,18.8C20.8,18.8,20.9,18.8,20.8,18.8C20.9,18.8,20.8,18.8,20.8,18.8z"/>
+ <path class="st0" d="M23.3,20.1C23.4,20.1,23.4,20.1,23.3,20.1C23.4,20.1,23.4,20.1,23.3,20.1z"/>
+ <path class="st0" d="M24.2,20.3C24.2,20.3,24.1,20.3,24.2,20.3C24.1,20.2,24.2,20.3,24.2,20.3z"/>
+ <path class="st0" d="M24.6,20.2C24.6,20.2,24.6,20.2,24.6,20.2C24.6,20.2,24.6,20.2,24.6,20.2z"/>
+ <path class="st0" d="M24.8,20.2C24.8,20.2,24.8,20.2,24.8,20.2C24.8,20.2,24.8,20.2,24.8,20.2C24.8,20.2,24.8,20.2,24.8,20.2z"/>
+ <path class="st0" d="M23.6,20.2C23.7,20.2,23.7,20.2,23.6,20.2C23.7,20.2,23.7,20.2,23.6,20.2z"/>
+ <path class="st0" d="M20,18.2c0,0,0.1,0.1,0.1,0.1C20,18.3,20,18.2,20,18.2z"/>
+ <path class="st0" d="M23.9,20.2C23.9,20.2,23.9,20.2,23.9,20.2C24,20.2,23.9,20.2,23.9,20.2z"/>
+ <path class="st0" d="M24.4,20.2L24.4,20.2C24.4,20.2,24.4,20.2,24.4,20.2z"/>
+ <path class="st0" d="M21.6,19.3c0,0,0.1,0,0.1,0.1C21.7,19.3,21.7,19.3,21.6,19.3z"/>
+ <path class="st0" d="M24.6,20.2c0,0,0.1,0,0.1,0C24.7,20.2,24.7,20.2,24.6,20.2z"/>
+ <path class="st0" d="M22.1,19.6c0.1,0.1,0.2,0.1,0.3,0.2C22.3,19.7,22.2,19.6,22.1,19.6z"/>
+ <path class="st0" d="M22.4,19.7c0.1,0,0.2,0.1,0.3,0.1C22.6,19.8,22.5,19.8,22.4,19.7z"/>
+ <path class="st0" d="M23.1,20c0.1,0,0.1,0,0.2,0.1C23.3,20.1,23.2,20,23.1,20z"/>
+ <path class="st0" d="M24.4,20.2c0.1,0,0.1,0,0.2,0C24.5,20.2,24.5,20.2,24.4,20.2z"/>
+ <path class="st0" d="M23.4,20.1c0.1,0,0.2,0,0.3,0.1C23.6,20.2,23.5,20.1,23.4,20.1z"/>
+ <path class="st0" d="M23.7,20.2c0.1,0,0.1,0,0.2,0C23.8,20.2,23.8,20.2,23.7,20.2z"/>
+ <path class="st0" d="M22.8,19.9c0.1,0,0.1,0.1,0.2,0.1C23,20,22.9,19.9,22.8,19.9z"/>
+ <path class="st0" d="M24,20.2c0,0,0.1,0,0.2,0C24.1,20.2,24,20.2,24,20.2z"/>
+ <path class="st0" d="M24.4,20.2c-0.1,0-0.1,0-0.2,0C24.3,20.3,24.3,20.3,24.4,20.2z"/>
+ <path class="st0" d="M19.6,17.9c0.1,0.1,0.3,0.2,0.4,0.3C19.8,18.1,19.7,18,19.6,17.9z"/>
+ <path class="st0" d="M20.5,18.6c0.1,0.1,0.2,0.1,0.3,0.2C20.7,18.7,20.6,18.7,20.5,18.6z"/>
+ <path class="st0" d="M20.1,18.3c0.1,0.1,0.2,0.1,0.3,0.2C20.3,18.4,20.2,18.4,20.1,18.3z"/>
+ <path class="st0" d="M21.7,19.4c0.1,0,0.2,0.1,0.2,0.1C21.9,19.5,21.8,19.4,21.7,19.4z"/>
+ <path class="st0" d="M21.4,19.1c0.1,0.1,0.2,0.1,0.3,0.2C21.5,19.2,21.4,19.2,21.4,19.1z"/>
+ <path class="st0" d="M20.9,18.8c0.1,0.1,0.2,0.2,0.4,0.2C21.1,19,21,18.9,20.9,18.8z"/>
+ <path class="st0" d="M15.6,7.6C15.5,7.6,15.5,7.6,15.6,7.6C15.5,7.6,15.5,7.6,15.6,7.6L15.6,7.6C15.5,7.6,15.5,7.6,15.6,7.6z"/>
+ <path class="st0" d="M16.3,8.1C16.2,8,16.2,8,16.3,8.1C16.2,8,16.1,8,16.1,8C16.2,8,16.2,8,16.3,8.1z"/>
+ <path class="st0" d="M16.6,8.3C16.6,8.3,16.6,8.3,16.6,8.3C16.5,8.3,16.5,8.2,16.6,8.3C16.5,8.3,16.6,8.3,16.6,8.3z"/>
+ <path class="st0" d="M15.9,7.8C15.9,7.8,15.9,7.8,15.9,7.8c-0.1,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0C15.8,7.8,15.9,7.8,15.9,7.8z"/>
+ <path class="st0" d="M14,6.7C14,6.7,14,6.7,14,6.7c-0.1,0-0.1,0-0.1,0l0,0C14,6.7,14,6.7,14,6.7z"/>
+ <path class="st0" d="M14.4,6.9L14.4,6.9C14.3,6.9,14.3,6.9,14.4,6.9c-0.1,0-0.1,0-0.1-0.1C14.3,6.9,14.3,6.9,14.4,6.9z"/>
+ <path class="st0" d="M13.7,6.6C13.7,6.6,13.7,6.6,13.7,6.6C13.7,6.6,13.7,6.6,13.7,6.6L13.7,6.6C13.7,6.6,13.7,6.6,13.7,6.6z"/>
+ <path class="st0" d="M15.1,7.3C15.1,7.3,15.1,7.3,15.1,7.3C15.1,7.3,15.1,7.3,15.1,7.3C15.1,7.3,15.1,7.3,15.1,7.3z"/>
+ <path class="st0" d="M13.3,6.5C13.3,6.5,13.3,6.4,13.3,6.5C13.3,6.4,13.3,6.4,13.3,6.5C13.3,6.4,13.3,6.4,13.3,6.5z"/>
+ <path class="st0" d="M14.7,7.1C14.7,7.1,14.7,7.1,14.7,7.1C14.7,7.1,14.7,7.1,14.7,7.1C14.7,7.1,14.7,7.1,14.7,7.1
+ C14.7,7.1,14.7,7.1,14.7,7.1z"/>
+ <path class="st0" d="M15.5,7.5L15.5,7.5C15.5,7.5,15.5,7.5,15.5,7.5C15.5,7.5,15.4,7.5,15.5,7.5C15.4,7.5,15.5,7.5,15.5,7.5z"/>
+ <path class="st0" d="M12.8,6.3C12.8,6.3,12.8,6.3,12.8,6.3C12.8,6.3,12.8,6.3,12.8,6.3L12.8,6.3C12.8,6.3,12.8,6.3,12.8,6.3z"/>
+ <path class="st0" d="M11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4C11.7,6.4,11.7,6.4,11.7,6.4
+ C11.7,6.4,11.7,6.4,11.7,6.4z"/>
+ <path class="st0" d="M11.6,6.5C11.6,6.5,11.6,6.5,11.6,6.5C11.6,6.5,11.6,6.5,11.6,6.5L11.6,6.5C11.6,6.5,11.6,6.5,11.6,6.5z"/>
+ <polygon class="st0" points="11.9,6.3 11.9,6.3 11.9,6.3 "/>
+ <path class="st0" d="M12.5,6.3L12.5,6.3L12.5,6.3z"/>
+ <path class="st0" d="M12.3,6.3C12.3,6.3,12.3,6.3,12.3,6.3C12.3,6.3,12.3,6.3,12.3,6.3C12.3,6.3,12.3,6.3,12.3,6.3
+ C12.3,6.3,12.3,6.3,12.3,6.3z"/>
+ <path class="st0" d="M12.1,6.3C12.1,6.3,12.1,6.3,12.1,6.3C12.1,6.3,12.1,6.3,12.1,6.3L12.1,6.3C12.1,6.3,12.1,6.3,12.1,6.3z"/>
+ <path class="st0" d="M13.1,6.4C13.1,6.4,13.1,6.4,13.1,6.4C13,6.4,13,6.4,13.1,6.4L13.1,6.4C13,6.4,13.1,6.4,13.1,6.4z"/>
+ <path class="st0" d="M11.3,7.6c0,0,0,0.1,0,0.1C11.3,7.7,11.3,7.6,11.3,7.6z"/>
+ <path class="st0" d="M11.3,6.9C11.3,6.9,11.3,7,11.3,6.9C11.3,7,11.3,6.9,11.3,6.9z"/>
+ <path class="st0" d="M11.5,6.6L11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6z"/>
+ <path class="st0" d="M11.3,7.1C11.3,7.1,11.3,7.1,11.3,7.1C11.3,7.1,11.3,7.1,11.3,7.1z"/>
+ <path class="st0" d="M11.3,7.4c0,0,0,0.1,0,0.1C11.3,7.5,11.3,7.4,11.3,7.4z"/>
+ <path class="st0" d="M11.4,7.8c0,0.1,0,0.1,0.1,0.2C11.4,7.9,11.4,7.9,11.4,7.8z"/>
+ <path class="st0" d="M11.3,7.3C11.3,7.3,11.3,7.3,11.3,7.3C11.3,7.3,11.3,7.3,11.3,7.3z"/>
+ <path class="st0" d="M11.4,6.7L11.4,6.7c0,0,0,0.1,0,0.1C11.4,6.8,11.4,6.8,11.4,6.7z"/>
+ <path class="st0" d="M10.4,9c-0.1,0.3-0.2,0.6-0.4,0.9l-0.3,0.6c-0.1,0.3-0.3,0.6-0.4,0.9c-2.2,5.1-4.7,10.8-6.9,15.8l-1,2.3
+ c-0.1,0.3-0.2,0.5-0.4,0.8c7.9-3.4,15.8-6.9,23.8-10.3c0,0,0,0,0,0c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.2,0c0,0,0,0,0,0
+ c-0.1,0-0.1,0-0.2,0c0,0,0,0-0.1,0c0,0-0.1,0-0.2,0c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.2,0c0,0,0,0-0.1,0c-0.1,0-0.2,0-0.3-0.1
+ c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.2-0.1c0,0-0.1,0-0.1,0c-0.1,0-0.1,0-0.2-0.1c0,0-0.1,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1c0,0,0,0,0,0
+ c-0.1,0-0.2-0.1-0.3-0.2c0,0-0.1,0-0.1-0.1c-0.1,0-0.2-0.1-0.2-0.1c0,0-0.1,0-0.1-0.1c-0.1,0-0.2-0.1-0.3-0.2c0,0-0.1,0-0.1,0
+ c-0.1-0.1-0.2-0.1-0.4-0.2c0,0-0.1,0-0.1-0.1c-0.1-0.1-0.2-0.1-0.3-0.2c0,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.2-0.1-0.3-0.2
+ c0,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.3-0.2-0.4-0.3c-1-0.7-1.9-1.6-2.9-2.5c-1.4-1.4-2.6-2.8-3.6-4.2C12.3,10,11.7,8.9,11.4,8
+ c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.1c0-0.1,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1
+ c0,0,0,0,0-0.1s0-0.1,0-0.1c0,0,0,0,0-0.1c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0-0.1,0-0.1L10.4,9z"/>
+ <path class="st0" d="M11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6C11.5,6.6,11.5,6.6,11.5,6.6c-0.1,0.1-0.1,0.1-0.1,0.2c0,0,0,0.1,0,0.1
+ c0,0,0,0,0,0c0,0,0,0.1,0,0.1c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0,0,0.1s0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1
+ c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0,0,0.1c0,0.1,0,0.1,0.1,0.2c0.2,0.9,0.9,2,1.7,3.2c0.9,1.4,2.2,2.8,3.6,4.2
+ c0.9,0.9,1.9,1.7,2.9,2.5c0.1,0.1,0.3,0.2,0.4,0.3c0,0,0.1,0.1,0.1,0.1c0.1,0.1,0.2,0.1,0.3,0.2c0,0,0.1,0.1,0.1,0.1
+ c0.1,0.1,0.2,0.1,0.3,0.2c0,0,0.1,0,0.1,0.1c0.1,0.1,0.2,0.2,0.4,0.2c0,0,0.1,0,0.1,0c0.1,0.1,0.2,0.1,0.3,0.2c0,0,0.1,0,0.1,0.1
+ c0.1,0,0.2,0.1,0.2,0.1c0,0,0.1,0,0.1,0.1c0.1,0.1,0.2,0.1,0.3,0.2c0,0,0,0,0,0c0.1,0,0.2,0.1,0.3,0.1c0,0,0.1,0,0.1,0
+ c0.1,0,0.1,0.1,0.2,0.1c0,0,0.1,0,0.1,0c0.1,0,0.1,0,0.2,0.1c0,0,0,0,0.1,0c0.1,0,0.2,0,0.3,0.1c0,0,0,0,0.1,0c0.1,0,0.1,0,0.2,0
+ c0,0,0,0,0.1,0c0,0,0.1,0,0.2,0c0,0,0,0,0.1,0c0.1,0,0.1,0,0.2,0h0c0.1,0,0.1,0,0.2,0c0,0,0,0,0,0c0,0,0.1,0,0.1,0c0,0,0,0,0.1,0
+ c0,0,0,0,0,0c0,0,0.1,0,0.1,0c0,0,0,0,0,0c0,0,0.1,0,0.1-0.1c0,0,0,0,0,0c0,0,0,0,0.1-0.1c0,0,0,0,0,0c0,0,0-0.1,0.1-0.1
+ c0,0,0,0,0,0c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0-0.1,0-0.1v0c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0-0.1,0-0.1c0,0,0,0,0,0
+ c0-0.1,0-0.1,0-0.2c0,0,0,0,0,0c0,0,0-0.1,0-0.1c0,0,0,0,0-0.1c0-0.1,0-0.1,0-0.2c0-0.1-0.1-0.2-0.1-0.3c0,0,0-0.1,0-0.1
+ c0-0.1-0.1-0.2-0.1-0.2c0,0,0-0.1,0-0.1c0-0.1-0.1-0.2-0.1-0.3c0,0,0,0,0,0c0-0.1-0.1-0.2-0.1-0.3c0,0,0-0.1,0-0.1
+ c0-0.1-0.1-0.2-0.1-0.3c0,0,0-0.1,0-0.1c-0.1-0.1-0.1-0.2-0.2-0.4c0,0,0,0,0-0.1c-0.1-0.1-0.1-0.2-0.2-0.3c0,0,0-0.1-0.1-0.1
+ c-0.1-0.1-0.1-0.2-0.2-0.3c0,0,0-0.1-0.1-0.1c-0.1-0.1-0.2-0.3-0.3-0.4c0,0,0-0.1-0.1-0.1c-0.1-0.1-0.2-0.2-0.2-0.3
+ c0,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.2-0.2-0.3-0.3c0,0,0-0.1-0.1-0.1c-0.1-0.1-0.2-0.3-0.3-0.4c0,0-0.1-0.1-0.1-0.1
+ c-0.1-0.1-0.2-0.2-0.3-0.3c0,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.2-0.2-0.3-0.4c0,0,0,0,0-0.1c-0.1-0.1-0.2-0.3-0.4-0.4
+ c0,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.2-0.2-0.3-0.3c0,0,0-0.1-0.1-0.1c0,0,0,0,0,0c-0.3-0.3-0.5-0.5-0.8-0.8c0,0,0,0,0-0.1
+ c-0.3-0.3-0.5-0.5-0.8-0.8c0,0,0,0,0,0c-0.3-0.2-0.6-0.5-0.9-0.7c0,0,0,0-0.1-0.1C17.6,9,17.3,8.8,17,8.6
+ c-0.1-0.1-0.2-0.2-0.4-0.3c0,0,0,0-0.1-0.1c0,0,0,0-0.1-0.1c-0.1-0.1-0.2-0.1-0.2-0.2c0,0,0,0,0,0c0,0-0.1-0.1-0.1-0.1
+ C16,7.9,16,7.8,15.9,7.8c-0.1,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.1-0.1-0.2-0.1c0,0,0,0-0.1,0c0,0,0,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1
+ c0,0-0.1,0-0.1,0c0,0,0,0,0,0c-0.1-0.1-0.2-0.1-0.3-0.2c0,0,0,0,0,0C14.6,7,14.5,7,14.4,6.9c0,0-0.1,0-0.1-0.1
+ c-0.1,0-0.1-0.1-0.2-0.1c0,0-0.1,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1c0,0,0,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1c0,0,0,0,0,0
+ c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.2-0.1c0,0-0.1,0-0.1,0c-0.1,0-0.1,0-0.2,0c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.2,0c0,0,0,0,0,0l0,0
+ c-0.1,0-0.1,0-0.2,0c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.1,0c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.1,0h0c0,0,0,0,0,0c-0.1,0-0.1,0-0.1,0.1
+ c0,0,0,0,0,0c0,0-0.1,0-0.1,0.1C11.6,6.5,11.6,6.5,11.5,6.6C11.6,6.5,11.5,6.5,11.5,6.6z"/>
+ <path class="st0" d="M11.3,7.5C11.3,7.5,11.3,7.6,11.3,7.5C11.3,7.6,11.3,7.5,11.3,7.5z"/>
+ <path class="st0" d="M11.3,7.2C11.3,7.2,11.3,7.2,11.3,7.2C11.3,7.2,11.3,7.2,11.3,7.2z"/>
+ <path class="st0" d="M11.3,7C11.3,7,11.3,7,11.3,7C11.3,7,11.3,7,11.3,7z"/>
+ <path class="st0" d="M11.3,7.3C11.3,7.4,11.3,7.4,11.3,7.3C11.3,7.4,11.3,7.4,11.3,7.3z"/>
+ <path class="st0" d="M11.4,7.7C11.4,7.7,11.4,7.8,11.4,7.7C11.4,7.8,11.4,7.8,11.4,7.7z"/>
+ <path class="st0" d="M11.4,6.9C11.4,6.9,11.3,6.9,11.4,6.9C11.3,6.9,11.4,6.9,11.4,6.9z"/>
+ </g>
+ <line class="st0" x1="22.5" y1="6.9" x2="23.1" y2="1"/>
+ <line class="st0" x1="27.9" y1="11" x2="30.8" y2="9.8"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/imgalt1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/imgalt1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_map_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_map_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_map_on.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 21.5 28" style="enable-background:new 0 0 21.5 28;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#143B84;}
+</style>
+<path class="st0" d="M10.7,0.7c-5.5,0-10,4.5-10,10c0,4.4,6.5,12.8,9,15.8c0.5,0.6,1.5,0.6,2,0c2.6-2.9,9-11.4,9-15.8
+ C20.7,5.2,16.3,0.8,10.7,0.7z M10.7,14.5c-2.1,0-3.8-1.7-3.8-3.8C7,8.7,8.7,7,10.7,7c2.1,0,3.8,1.7,3.8,3.7
+ C14.5,12.8,12.8,14.5,10.7,14.5z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_down_blue.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_down_blue.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_down_blue.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 66.6 37.8" style="enable-background:new 0 0 66.6 37.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#0A52AD;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="62.1,4.5 33.3,33.3 4.5,4.5 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/map.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/map.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/drop3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/drop3.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/box_body2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_body2.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_besttc.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_besttc.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_besttc.svg (revision 7)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 26.5 36" style="enable-background:new 0 0 26.5 36;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F8CB0C;}
+ .st1{fill:none;stroke:#38383B;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#FFFFFF;}
+</style>
+<g>
+ <g>
+ <polygon class="st0" points="1.2,32.1 5.6,31.2 7.4,35.3 13.6,23 7.4,19.9 "/>
+ <polygon class="st1" points="1.2,32.1 5.6,31.2 7.4,35.3 13.6,23 7.4,19.9 "/>
+ <polygon class="st0" points="25.4,32.1 21,31.2 19.1,35.3 12.9,23 19.2,19.9 "/>
+ <polygon class="st1" points="25.4,32.1 21,31.2 19.1,35.3 12.9,23 19.2,19.9 "/>
+ <path class="st2" d="M15.7,1.9L15.7,1.9c0.7,0.9,1.9,1.4,3.1,1.1c2-0.4,3.8,1.1,3.7,3.1c-0.1,1.2,0.6,2.3,1.6,2.9
+ c1.8,0.9,2.2,3.3,0.8,4.8c-0.8,0.9-1,2.1-0.6,3.2c0.8,1.9-0.4,3.9-2.4,4.2c-1.2,0.2-2.2,1-2.5,2.1c-0.6,1.9-2.9,2.7-4.6,1.7
+ c-1-0.6-2.3-0.6-3.3,0c-1.7,1.1-4,0.3-4.6-1.7c-0.4-1.1-1.3-2-2.5-2.1c-2-0.3-3.2-2.3-2.4-4.2c0.5-1.1,0.2-2.4-0.6-3.2
+ C0.2,12.3,0.6,10,2.4,9C3.5,8.5,4.1,7.4,4,6.2C4,4.2,5.8,2.6,7.8,3.1c1.2,0.3,2.4-0.2,3.1-1.1C12.1,0.4,14.5,0.4,15.7,1.9"/>
+ <path class="st1" d="M15.7,1.9L15.7,1.9c0.7,0.9,1.9,1.4,3.1,1.1c2-0.4,3.8,1.1,3.7,3.1c-0.1,1.2,0.6,2.3,1.6,2.9
+ c1.8,0.9,2.2,3.3,0.8,4.8c-0.8,0.9-1,2.1-0.6,3.2c0.8,1.9-0.4,3.9-2.4,4.2c-1.2,0.2-2.2,1-2.5,2.1c-0.6,1.9-2.9,2.7-4.6,1.7
+ c-1-0.6-2.3-0.6-3.3,0c-1.7,1.1-4,0.3-4.6-1.7c-0.4-1.1-1.3-2-2.5-2.1c-2-0.3-3.2-2.3-2.4-4.2c0.5-1.1,0.2-2.4-0.6-3.2
+ C0.2,12.3,0.6,10,2.4,9C3.5,8.5,4.1,7.4,4,6.2C4,4.2,5.8,2.6,7.8,3.1c1.2,0.3,2.4-0.2,3.1-1.1C12.1,0.4,14.5,0.4,15.7,1.9z"/>
+ </g>
+ <circle class="st0" cx="13" cy="13.3" r="7.2"/>
+ <circle class="st1" cx="13.2" cy="13.3" r="7.2"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tos3.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tos3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tos3.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 34 28.8" style="enable-background:new 0 0 34 28.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="11.7,16.9 11.7,21.1 24.8,21.1 29,27.8 29,21.1 33,21.1 33,5.3 26.6,5.3 "/>
+ <polygon class="st0" points="1,1 1,16.9 5,16.9 5,23.5 9.2,16.9 26.6,16.9 26.6,1 "/>
+ <line class="st0" x1="7.1" y1="8.9" x2="9.8" y2="8.9"/>
+ <line class="st0" x1="12.8" y1="8.9" x2="15.4" y2="8.9"/>
+ <line class="st0" x1="18.4" y1="8.9" x2="21.1" y2="8.9"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/imgalt2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/imgalt2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_yes.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_yes.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_yes.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Isolation_Mode" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" width="17.168px" height="17.168px" viewBox="0 0 17.168 17.168" enable-background="new 0 0 17.168 17.168"
+ xml:space="preserve">
+<g>
+ <path fill="#FFFFFF" d="M8.587,16.701c-4.474,0-8.114-3.641-8.114-8.114s3.64-8.114,8.114-8.114c4.474,0,8.114,3.641,8.114,8.114
+ S13.061,16.701,8.587,16.701z M8.587,2.363c-3.431,0-6.224,2.793-6.224,6.224c0,3.433,2.792,6.224,6.224,6.224
+ c3.433,0,6.224-2.791,6.224-6.224C14.811,5.156,12.02,2.363,8.587,2.363z"/>
+ <path fill="#FFFFFF" d="M8.587,17.174C3.852,17.174,0,13.321,0,8.587C0,3.852,3.852,0,8.587,0c4.734,0,8.587,3.852,8.587,8.587
+ C17.174,13.321,13.321,17.174,8.587,17.174z M8.587,0.945c-4.214,0-7.641,3.428-7.641,7.642s3.427,7.642,7.641,7.642
+ s7.642-3.428,7.642-7.642S12.801,0.945,8.587,0.945z M8.587,15.283c-3.693,0-6.697-3.004-6.697-6.696
+ c0-3.693,3.004-6.697,6.697-6.697c3.692,0,6.696,3.004,6.696,6.697C15.283,12.279,12.279,15.283,8.587,15.283z M8.587,2.836
+ c-3.17,0-5.751,2.58-5.751,5.751s2.581,5.751,5.751,5.751c3.171,0,5.751-2.58,5.751-5.751S11.758,2.836,8.587,2.836z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/smile1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/smile1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/smile1.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st2" cx="16.3" cy="16.3" r="16.3"/>
+ <path class="st1" d="M10.5,25.8c0-1.4,0.6-2.7,1.5-3.6l0.1-0.1c0.9-0.9,2.2-1.5,3.7-1.5h1.1c1.5,0,2.8,0.6,3.8,1.6
+ c0.9,0.9,1.5,2.2,1.5,3.6H10.5z"/>
+ <circle class="st1" cx="10.6" cy="14.3" r="2.9"/>
+ <line class="st3" x1="13.9" y1="12.5" x2="8.1" y2="9.1"/>
+ <circle class="st1" cx="22" cy="14.3" r="2.9"/>
+ <line class="st3" x1="18.7" y1="12.5" x2="24.5" y2="9.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_entrps.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_entrps.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/sns2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/sns2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/sns2.svg (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 25 22.8" style="enable-background:new 0 0 25 22.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#1A1A1C;}
+</style>
+<path class="st0" d="M12.5,0C5.6,0,0,4.1,0,9.3c0,3.4,2.5,6.4,6.1,8l-1.3,5.5l5.8-4.3c0.6,0.1,1.2,0.1,1.8,0.1
+ c6.9,0,12.5-4.1,12.5-9.3S19.4,0,12.5,0z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_check.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_check.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_check.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 110 110" style="enable-background:new 0 0 110 110;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#333333;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="12.3,60.8 36.6,85.6 97.7,24.4 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/imgalt3.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/imgalt3.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_sucess.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_sucess.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_sucess.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 110 110" style="enable-background:new 0 0 110 110;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#3C9303;stroke-width:10;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#3C9303;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="55" cy="55" r="50"/>
+ <polyline class="st1" points="31,58.3 44.6,72.2 79,37.8 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/smile2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/smile2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/smile2.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.3" cy="12.7" r="2.4"/>
+ <path class="st3" d="M10.6,24.1c0-2.2,2.6-4,5.7-4s5.7,1.8,5.7,4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/banner1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/banner1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/webacc.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/webacc.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_main_section3.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_main_section3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_main_section3.svg (revision 7)
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 2228.5 276.9" style="enable-background:new 0 0 2228.5 276.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#1984FD;}
+ .st1{fill:#4953D3;}
+ .st2{fill:#4FE179;}
+ .st3{fill:#3BBCFD;}
+ .st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+ .st5{fill:#6E8CFD;}
+</style>
+<g>
+ <g>
+ <g>
+ <circle class="st0" cx="629.1" cy="94.4" r="47.5"/>
+ <path class="st1" d="M631.9,164.4h-5.5v-48.1c0-1.5,1.2-2.8,2.8-2.8l0,0c1.5,0,2.8,1.2,2.8,2.8V164.4z"/>
+ </g>
+ <g>
+ <path class="st2" d="M719.9,141.9L719.9,141.9c-15.1,0-27.4-12.3-27.4-27.4V74.3c0-15.1,12.3-27.4,27.4-27.4l0,0
+ c15.1,0,27.4,12.3,27.4,27.4v40.2C747.2,129.6,735,141.9,719.9,141.9z"/>
+ <path class="st1" d="M722.6,164.4h-5.5v-48.1c0-1.5,1.2-2.8,2.8-2.8l0,0c1.5,0,2.8,1.2,2.8,2.8V164.4z"/>
+ </g>
+ <path class="st3" d="M853.7,325.8L853.7,325.8c0-95.6-77.5-173.1-173.1-173.1h0c-95.6,0-173.1,77.5-173.1,173.1v0H853.7z"/>
+ <path class="st3" d="M507.5,325.8L507.5,325.8c0-95.6-77.5-173.1-173.1-173.1h0c-95.6,0-173.1,77.5-173.1,173.1v0H507.5z"/>
+ <g>
+ <path class="st4" d="M164.5,313.4c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.3,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.7-2.9
+ C161.6,314.5,163,313.3,164.5,313.4z"/>
+ <path class="st4" d="M166.1,298.7c1.5,0.2,2.5,1.6,2.3,3.1c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.6-1.6-2.4-3.2
+ C163.2,299.5,164.6,298.4,166.1,298.7z"/>
+ <path class="st4" d="M169.1,284.1c1.5,0.4,2.4,1.9,2.1,3.3c-0.3,1.5-1.8,2.4-3.3,2.1c-1.5-0.3-2.4-1.8-2.1-3.3
+ C166.2,284.7,167.7,283.7,169.1,284.1z"/>
+ <path class="st4" d="M173.4,269.9c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2.1,2.2-3.5,1.8c-1.5-0.5-2.2-2-1.7-3.5
+ C170.4,270.2,172,269.4,173.4,269.9z"/>
+ <path class="st4" d="M178.9,256.1c1.4,0.6,2,2.3,1.4,3.6c-0.6,1.4-2.2,2.1-3.6,1.5c-1.4-0.6-2.1-2.2-1.5-3.7
+ C175.9,256.1,177.5,255.4,178.9,256.1z"/>
+ <path class="st4" d="M185.6,242.8c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.4,1.9-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C182.5,242.5,184.3,242,185.6,242.8z"/>
+ <path class="st4" d="M193.4,230.1c1.2,0.9,1.6,2.6,0.8,3.9c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.5-0.8-3.9
+ C190.4,229.6,192.1,229.2,193.4,230.1z"/>
+ <path class="st4" d="M202.3,218.2c1.2,1,1.4,2.7,0.5,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C199.3,217.4,201.1,217.2,202.3,218.2z"/>
+ <path class="st4" d="M212.2,207.1c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C209.3,206.1,211.1,206,212.2,207.1z"/>
+ <path class="st4" d="M223,196.9c1,1.2,0.9,2.9-0.3,3.9c-1.2,1-2.9,0.9-3.9-0.2c-1-1.1-1-2.9,0.2-3.9
+ C220.2,195.6,222,195.7,223,196.9z"/>
+ <path class="st4" d="M234.6,187.7c0.9,1.2,0.6,3-0.6,3.8c-1.2,0.9-2.9,0.7-3.9-0.5c-0.9-1.2-0.7-3,0.5-3.9
+ C232,186.1,233.7,186.4,234.6,187.7z"/>
+ <path class="st4" d="M247,179.4c0.8,1.3,0.3,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C244.5,177.7,246.2,178.1,247,179.4z"/>
+ <path class="st4" d="M260.1,172.4c0.7,1.4,0.1,3.1-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.3-0.2-3,1.2-3.7
+ C257.8,170.5,259.4,171,260.1,172.4z"/>
+ <path class="st4" d="M273.8,166.5c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.6-3-0.1-3.6-1.5c-0.6-1.4,0.1-3,1.6-3.6
+ C271.6,164.4,273.2,165.1,273.8,166.5z"/>
+ <path class="st4" d="M287.9,161.8c0.4,1.5-0.4,3-1.9,3.4c-1.5,0.4-3-0.4-3.5-1.8c-0.5-1.4,0.3-3.1,1.9-3.5
+ C285.9,159.5,287.5,160.4,287.9,161.8z"/>
+ <path class="st4" d="M302.3,158.4c0.3,1.5-0.7,2.9-2.2,3.2c-1.5,0.3-2.9-0.6-3.3-2.1c-0.3-1.5,0.6-3,2.2-3.3
+ C300.6,155.9,302.1,156.9,302.3,158.4z"/>
+ <path class="st4" d="M317.1,156.2c0.1,1.5-0.9,2.9-2.4,3.1c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1
+ C315.5,153.6,316.9,154.7,317.1,156.2z"/>
+ <path class="st4" d="M331.9,155.4c0,1.5-1.2,2.8-2.7,2.8c-1.5,0-2.8-1.2-2.9-2.7c-0.1-1.5,1.1-2.8,2.7-2.8
+ C330.6,152.7,331.9,153.9,331.9,155.4z"/>
+ <path class="st4" d="M346.8,155.8c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.7-1.3-2.6-2.9c0.1-1.5,1.4-2.8,2.9-2.7
+ C345.7,153,346.9,154.3,346.8,155.8z"/>
+ <path class="st4" d="M361.5,157.5c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.1c0.2-1.5,1.6-2.6,3.2-2.4
+ C360.7,154.5,361.8,156,361.5,157.5z"/>
+ <path class="st4" d="M376.1,160.5c-0.4,1.5-1.9,2.4-3.3,2.1c-1.5-0.3-2.4-1.8-2.1-3.3c0.3-1.5,1.8-2.4,3.3-2.1
+ C375.5,157.5,376.5,159,376.1,160.5z"/>
+ <path class="st4" d="M390.3,164.8c-0.5,1.4-2.1,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.8-3.5c0.4-1.5,2-2.2,3.5-1.7
+ C390.1,161.8,390.8,163.3,390.3,164.8z"/>
+ <path class="st4" d="M404.2,170.3c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C404.1,167.2,404.8,168.9,404.2,170.3z"/>
+ <path class="st4" d="M417.4,176.9c-0.8,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.4-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C417.7,173.9,418.2,175.6,417.4,176.9z"/>
+ <path class="st4" d="M430.1,184.7c-0.9,1.2-2.6,1.6-3.9,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C430.6,181.7,431,183.4,430.1,184.7z"/>
+ <path class="st4" d="M442,193.6c-1,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9c0.9-1.2,2.7-1.4,3.9-0.5
+ C442.8,190.7,443,192.4,442,193.6z"/>
+ <path class="st4" d="M453.1,203.5c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.2,3.9-0.1
+ C454.1,200.7,454.2,202.4,453.1,203.5z"/>
+ <path class="st4" d="M463.3,214.3c-1.2,1-2.9,0.9-3.9-0.3c-1-1.2-0.9-2.9,0.2-3.9c1.1-1,2.9-1,3.9,0.2
+ C464.6,211.6,464.5,213.3,463.3,214.3z"/>
+ <path class="st4" d="M472.6,226c-1.2,0.9-3,0.6-3.8-0.6c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-0.9,3-0.7,3.9,0.5
+ C474.1,223.3,473.8,225.1,472.6,226z"/>
+ <path class="st4" d="M480.8,238.4c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.8,3-0.4,3.9,0.9
+ C482.5,235.9,482.1,237.6,480.8,238.4z"/>
+ <path class="st4" d="M487.8,251.5c-1.4,0.7-3.1,0.1-3.7-1.2c-0.7-1.3-0.1-3,1.2-3.7c1.3-0.7,3-0.2,3.7,1.2
+ C489.8,249.1,489.2,250.8,487.8,251.5z"/>
+ <path class="st4" d="M493.7,265.1c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.5-3.6c1.4-0.6,3,0.1,3.6,1.6
+ C495.8,263,495.1,264.6,493.7,265.1z"/>
+ <path class="st4" d="M498.4,279.2c-1.5,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.8-3.5c1.4-0.5,3.1,0.3,3.5,1.9
+ C500.7,277.3,499.9,278.8,498.4,279.2z"/>
+ <path class="st4" d="M501.8,293.7c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.3,3,0.6,3.3,2.2
+ C504.3,291.9,503.3,293.4,501.8,293.7z"/>
+ <path class="st4" d="M504,308.4c-1.5,0.1-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.9,3.1,2.4
+ C506.6,306.9,505.5,308.3,504,308.4z"/>
+ <path class="st4" d="M504.8,323.3c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C507.5,322,506.3,323.2,504.8,323.3z"/>
+ <path class="st4" d="M179.6,313.5c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.6-2.9
+ C176.8,314.6,178.1,313.4,179.6,313.5z"/>
+ <path class="st4" d="M181.5,298.9c1.5,0.3,2.5,1.7,2.2,3.2c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.2
+ C178.5,299.6,180,298.6,181.5,298.9z"/>
+ <path class="st4" d="M184.7,284.4c1.5,0.4,2.3,1.9,1.9,3.4c-0.3,1.5-1.8,2.4-3.3,2c-1.5-0.3-2.4-1.9-2.1-3.4
+ C181.7,284.9,183.2,284,184.7,284.4z"/>
+ <path class="st4" d="M189.3,270.4c1.4,0.6,2.1,2.1,1.6,3.5c-0.5,1.4-2,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.7-3.6
+ C186.2,270.6,187.9,269.8,189.3,270.4z"/>
+ <path class="st4" d="M195.2,256.8c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.6,1.3c-1.4-0.6-2-2.3-1.4-3.7
+ C192.1,256.7,193.9,256.2,195.2,256.8z"/>
+ <path class="st4" d="M202.4,243.9c1.3,0.8,1.7,2.5,0.9,3.8c-0.7,1.3-2.4,1.7-3.8,1c-1.3-0.8-1.8-2.5-1-3.8
+ C199.3,243.5,201.1,243.1,202.4,243.9z"/>
+ <path class="st4" d="M210.8,231.8c1.2,0.9,1.4,2.6,0.6,3.9c-0.9,1.2-2.6,1.5-3.8,0.6c-1.2-0.9-1.5-2.6-0.6-3.9
+ C207.8,231.1,209.6,230.8,210.8,231.8z"/>
+ <path class="st4" d="M220.3,220.4c1.1,1,1.2,2.7,0.2,3.9c-1,1.1-2.7,1.2-3.9,0.3c-1.2-1-1.3-2.8-0.3-3.9
+ C217.4,219.5,219.2,219.4,220.3,220.4z"/>
+ <path class="st4" d="M230.8,210.1c1,1.1,0.9,2.9-0.2,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1-2.9,0.1-3.9
+ C228,208.8,229.8,208.9,230.8,210.1z"/>
+ <path class="st4" d="M242.3,200.7c0.9,1.2,0.6,2.9-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.7-2.9,0.5-3.9
+ C239.6,199.2,241.4,199.5,242.3,200.7z"/>
+ <path class="st4" d="M254.6,192.5c0.8,1.3,0.4,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.9-3.8
+ C252.1,190.8,253.8,191.2,254.6,192.5z"/>
+ <path class="st4" d="M267.6,185.5c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C265.3,183.6,267,184.1,267.6,185.5z"/>
+ <path class="st4" d="M281.2,179.8c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.6
+ C279.1,177.6,280.7,178.3,281.2,179.8z"/>
+ <path class="st4" d="M295.4,175.4c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.9-3.4
+ C293.5,173.1,295,173.9,295.4,175.4z"/>
+ <path class="st4" d="M309.8,172.4c0.2,1.5-0.8,3-2.2,3.2c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.7-2.9,2.2-3.2
+ C308.2,169.9,309.6,170.9,309.8,172.4z"/>
+ <path class="st4" d="M324.5,170.8c0.1,1.5-1,2.9-2.5,3c-1.5,0.1-2.8-1-3-2.6c-0.2-1.5,1-2.9,2.5-3
+ C323.1,168.1,324.4,169.3,324.5,170.8z"/>
+ <path class="st4" d="M339.3,170.6c-0.1,1.5-1.3,2.7-2.8,2.7c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.5,1.2-2.8,2.8-2.7
+ C338.1,167.8,339.4,169,339.3,170.6z"/>
+ <path class="st4" d="M354,171.7c-0.2,1.5-1.6,2.6-3,2.4c-1.5-0.2-2.6-1.5-2.5-3c0.1-1.5,1.5-2.7,3.1-2.5
+ C353.1,168.8,354.2,170.2,354,171.7z"/>
+ <path class="st4" d="M368.6,174.3c-0.3,1.5-1.8,2.4-3.3,2.1c-1.5-0.3-2.4-1.7-2.2-3.2c0.3-1.5,1.7-2.5,3.3-2.2
+ C368,171.3,368.9,172.8,368.6,174.3z"/>
+ <path class="st4" d="M382.9,178.2c-0.5,1.5-2,2.2-3.4,1.8c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,2-2.3,3.5-1.9
+ C382.5,175.1,383.3,176.7,382.9,178.2z"/>
+ <path class="st4" d="M396.7,183.5c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.6-1.5
+ C396.6,180.4,397.3,182.1,396.7,183.5z"/>
+ <path class="st4" d="M409.9,190c-0.8,1.4-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C410.2,186.9,410.6,188.7,409.9,190z"/>
+ <path class="st4" d="M422.5,197.8c-0.9,1.3-2.5,1.5-3.8,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C423,194.8,423.3,196.6,422.5,197.8z"/>
+ <path class="st4" d="M434.2,206.8c-1,1.2-2.7,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C435.1,203.8,435.2,205.6,434.2,206.8z"/>
+ <path class="st4" d="M445.1,216.8c-1.1,1.1-2.8,1-3.9,0c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.1,3.9-0.1
+ C446.2,213.9,446.2,215.7,445.1,216.8z"/>
+ <path class="st4" d="M455,227.8c-1.2,1-2.9,0.8-3.9-0.3c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C456.3,225.1,456.1,226.8,455,227.8z"/>
+ <path class="st4" d="M463.7,239.7c-1.3,0.8-3,0.5-3.8-0.7c-0.9-1.2-0.6-2.9,0.7-3.8c1.2-0.9,3-0.6,3.9,0.7
+ C465.4,237.1,465,238.9,463.7,239.7z"/>
+ <path class="st4" d="M471.3,252.4c-1.3,0.7-3,0.2-3.8-1.1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C473.2,250,472.7,251.7,471.3,252.4z"/>
+ <path class="st4" d="M477.7,265.7c-1.4,0.6-3-0.1-3.7-1.4c-0.6-1.4,0-3,1.4-3.6c1.4-0.6,3,0,3.7,1.4
+ C479.8,263.5,479.1,265.1,477.7,265.7z"/>
+ <path class="st4" d="M482.8,279.6c-1.5,0.4-3-0.3-3.5-1.8c-0.5-1.4,0.3-3,1.7-3.5c1.4-0.5,3,0.3,3.5,1.8
+ C485,277.6,484.2,279.2,482.8,279.6z"/>
+ <path class="st4" d="M486.5,293.9c-1.5,0.3-3-0.6-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C488.9,292.1,488,293.6,486.5,293.9z"/>
+ <path class="st4" d="M488.8,308.5c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.8,3.1,2.4
+ C491.4,307,490.3,308.4,488.8,308.5z"/>
+ <path class="st4" d="M489.7,323.3c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C492.4,322,491.2,323.3,489.7,323.3z"/>
+ <path class="st4" d="M194.8,313.6c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5-0.1-2.7-1.4-2.6-2.9
+ C191.9,314.6,193.2,313.5,194.8,313.6z"/>
+ <path class="st4" d="M196.8,299.1c1.5,0.3,2.5,1.7,2.2,3.2c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.2-2.5-1.6-2.2-3.2
+ C193.8,299.8,195.3,298.8,196.8,299.1z"/>
+ <path class="st4" d="M200.3,284.8c1.5,0.5,2.3,2,1.9,3.4c-0.4,1.4-1.9,2.3-3.4,1.9c-1.5-0.4-2.3-1.9-1.9-3.4
+ C197.3,285.2,198.8,284.4,200.3,284.8z"/>
+ <path class="st4" d="M205.3,271c1.4,0.6,2.1,2.2,1.6,3.6c-0.5,1.4-2.1,2.1-3.6,1.5c-1.4-0.5-2.1-2.1-1.6-3.6
+ C202.3,271.1,203.9,270.4,205.3,271z"/>
+ <path class="st4" d="M211.8,257.8c1.3,0.7,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.7
+ C208.7,257.6,210.4,257.1,211.8,257.8z"/>
+ <path class="st4" d="M219.5,245.4c1.3,0.9,1.6,2.6,0.7,3.8c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.6-0.8-3.9
+ C216.5,244.8,218.3,244.5,219.5,245.4z"/>
+ <path class="st4" d="M228.6,233.8c1.1,1,1.3,2.7,0.3,3.9c-1,1.1-2.6,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9
+ C225.7,233,227.4,232.8,228.6,233.8z"/>
+ <path class="st4" d="M238.8,223.3c1,1.1,1,2.9-0.1,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1.1-2.8,0-3.9
+ C236,222.1,237.7,222.2,238.8,223.3z"/>
+ <path class="st4" d="M250,213.8c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C247.3,212.4,249.1,212.6,250,213.8z"/>
+ <path class="st4" d="M262.2,205.6c0.8,1.3,0.4,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.8-3.8
+ C259.7,203.9,261.4,204.3,262.2,205.6z"/>
+ <path class="st4" d="M275.1,198.7c0.7,1.4,0,3-1.3,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C272.8,196.7,274.5,197.3,275.1,198.7z"/>
+ <path class="st4" d="M288.7,193.2c0.5,1.4-0.2,3-1.7,3.5c-1.4,0.5-3-0.2-3.5-1.6c-0.6-1.4,0.2-3,1.6-3.6
+ C286.6,191,288.2,191.8,288.7,193.2z"/>
+ <path class="st4" d="M302.8,189.2c0.3,1.5-0.6,3-2,3.3c-1.4,0.3-2.9-0.5-3.3-2c-0.4-1.5,0.5-3.1,2-3.4
+ C301,186.8,302.5,187.7,302.8,189.2z"/>
+ <path class="st4" d="M317.3,186.6c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.2-1.5,0.8-3,2.3-3.2
+ C315.7,184,317.1,185.1,317.3,186.6z"/>
+ <path class="st4" d="M331.9,185.6c0,1.5-1.2,2.8-2.7,2.8c-1.5,0-2.8-1.1-2.8-2.7c-0.1-1.5,1.1-2.9,2.6-2.9
+ C330.6,182.9,331.9,184.1,331.9,185.6z"/>
+ <path class="st4" d="M346.6,186.1c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.6-1.4-2.6-2.9c0.1-1.5,1.4-2.7,2.9-2.6
+ C345.6,183.3,346.7,184.6,346.6,186.1z"/>
+ <path class="st4" d="M361.1,188.1c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.2c0.2-1.5,1.7-2.5,3.2-2.2
+ C360.4,185.2,361.4,186.6,361.1,188.1z"/>
+ <path class="st4" d="M375.4,191.6c-0.5,1.5-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C375,188.7,375.8,190.2,375.4,191.6z"/>
+ <path class="st4" d="M389.2,196.7c-0.6,1.4-2.2,2.1-3.6,1.6c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C389.1,193.6,389.8,195.2,389.2,196.7z"/>
+ <path class="st4" d="M402.4,203.1c-0.7,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.8-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.7-1.2
+ C402.6,200,403.1,201.8,402.4,203.1z"/>
+ <path class="st4" d="M414.8,210.9c-0.9,1.3-2.6,1.6-3.8,0.7c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.6-1.7,3.9-0.8
+ C415.4,207.9,415.7,209.7,414.8,210.9z"/>
+ <path class="st4" d="M426.4,219.9c-1,1.1-2.7,1.3-3.9,0.3c-1.1-1-1.3-2.6-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C427.2,217,427.4,218.8,426.4,219.9z"/>
+ <path class="st4" d="M436.9,230.1c-1.1,1-2.9,1-3.9-0.1c-1-1.1-1-2.8,0.1-3.9c1.1-1.1,2.8-1.1,3.9,0
+ C438.1,227.3,438.1,229.1,436.9,230.1z"/>
+ <path class="st4" d="M446.4,241.4c-1.2,0.9-3,0.7-3.9-0.5c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-1,2.9-0.8,3.9,0.5
+ C447.8,238.7,447.6,240.4,446.4,241.4z"/>
+ <path class="st4" d="M454.6,253.5c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.2-0.4-2.9,0.9-3.8c1.3-0.8,3-0.5,3.8,0.8
+ C456.3,251,455.9,252.7,454.6,253.5z"/>
+ <path class="st4" d="M461.5,266.5c-1.4,0.7-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.2
+ C463.5,264.1,462.9,265.8,461.5,266.5z"/>
+ <path class="st4" d="M467,280.1c-1.4,0.5-3-0.2-3.5-1.7c-0.5-1.4,0.2-3,1.6-3.5c1.4-0.6,3,0.2,3.6,1.6
+ C469.2,278,468.4,279.6,467,280.1z"/>
+ <path class="st4" d="M471,294.2c-1.5,0.3-3-0.6-3.3-2c-0.3-1.4,0.5-2.9,2-3.3c1.5-0.4,3.1,0.5,3.4,2
+ C473.5,292.4,472.5,293.9,471,294.2z"/>
+ <path class="st4" d="M473.6,308.7c-1.5,0.2-2.9-0.9-3.1-2.3c-0.2-1.5,0.8-2.9,2.3-3.1c1.5-0.2,3,0.8,3.2,2.3
+ C476.2,307.1,475.1,308.5,473.6,308.7z"/>
+ <path class="st4" d="M474.6,323.3c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.1-2.8,2.7-2.9c1.5-0.1,2.9,1.1,2.9,2.6
+ C477.3,322,476.1,323.3,474.6,323.3z"/>
+ <path class="st4" d="M209.9,313.5c1.5,0.2,2.7,1.5,2.6,3c-0.1,1.5-1.4,2.6-3,2.6c-1.5-0.1-2.7-1.4-2.6-3
+ C207.1,314.5,208.4,313.3,209.9,313.5z"/>
+ <path class="st4" d="M212.2,298.8c1.5,0.3,2.4,1.8,2.1,3.3c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.3
+ C209.2,299.5,210.8,298.5,212.2,298.8z"/>
+ <path class="st4" d="M216.3,284.6c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2,2.2-3.5,1.8c-1.5-0.4-2.3-2-1.8-3.5
+ C213.3,284.9,214.8,284.1,216.3,284.6z"/>
+ <path class="st4" d="M222,270.9c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.7,1.4c-1.4-0.6-2-2.3-1.4-3.7
+ C218.9,270.8,220.6,270.2,222,270.9z"/>
+ <path class="st4" d="M229.3,258c1.3,0.8,1.7,2.5,0.9,3.8c-0.8,1.3-2.4,1.7-3.8,0.9c-1.3-0.8-1.8-2.5-0.9-3.8
+ C226.3,257.6,228,257.2,229.3,258z"/>
+ <path class="st4" d="M238,246c1.2,1,1.4,2.7,0.4,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C235.1,245.3,236.8,245,238,246z"/>
+ <path class="st4" d="M248.2,235.2c1.1,1.1,1,2.9-0.1,3.9c-1,1.1-2.8,1.1-3.9,0c-1.1-1-1.1-2.8,0-4
+ C245.3,234.1,247.1,234.1,248.2,235.2z"/>
+ <path class="st4" d="M259.4,225.6c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C256.8,224.2,258.5,224.4,259.4,225.6z"/>
+ <path class="st4" d="M271.8,217.5c0.8,1.3,0.3,3-1,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C269.3,215.7,271.1,216.1,271.8,217.5z"/>
+ <path class="st4" d="M285.1,210.8c0.6,1.4,0,3.1-1.4,3.7c-1.4,0.6-3,0-3.7-1.4c-0.7-1.4-0.1-3,1.4-3.7
+ C282.8,208.8,284.5,209.4,285.1,210.8z"/>
+ <path class="st4" d="M299,205.8c0.4,1.5-0.4,2.9-1.8,3.4c-1.4,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.3-3,1.8-3.5
+ C297,203.4,298.6,204.3,299,205.8z"/>
+ <path class="st4" d="M313.5,202.4c0.2,1.5-0.7,2.9-2.2,3.2c-1.5,0.2-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-3,2.2-3.3
+ C311.8,199.9,313.2,200.9,313.5,202.4z"/>
+ <path class="st4" d="M328.2,200.8c0.1,1.5-1.1,2.9-2.6,3c-1.5,0.1-2.8-1-3-2.6c-0.1-1.5,1-2.9,2.6-3
+ C326.8,198.1,328.1,199.3,328.2,200.8z"/>
+ <path class="st4" d="M343,201c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5,0-2.7-1.3-2.7-2.8c0-1.5,1.3-2.7,2.9-2.7
+ C342,198.1,343.1,199.5,343,201z"/>
+ <path class="st4" d="M357.7,202.9c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.6-2.3-3.2c0.2-1.5,1.7-2.6,3.2-2.3
+ C357,199.9,358,201.4,357.7,202.9z"/>
+ <path class="st4" d="M372.1,206.4c-0.5,1.4-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C371.7,203.4,372.6,205,372.1,206.4z"/>
+ <path class="st4" d="M386,211.8c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C385.9,208.7,386.6,210.4,386,211.8z"/>
+ <path class="st4" d="M399.1,218.6c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.8-2.4-1-3.8c0.7-1.3,2.4-1.8,3.8-1
+ C399.4,215.6,399.9,217.3,399.1,218.6z"/>
+ <path class="st4" d="M411.3,227.1c-0.9,1.2-2.7,1.4-3.8,0.5c-1.2-0.9-1.5-2.6-0.6-3.8c0.9-1.2,2.6-1.5,3.9-0.6
+ C412,224.1,412.2,225.9,411.3,227.1z"/>
+ <path class="st4" d="M422.4,236.8c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.2,2.8-1.2,3.9-0.1
+ C423.5,234,423.5,235.8,422.4,236.8z"/>
+ <path class="st4" d="M432.3,247.9c-1.2,1-2.9,0.7-3.9-0.4c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C433.7,245.2,433.5,247,432.3,247.9z"/>
+ <path class="st4" d="M440.9,260c-1.3,0.8-3,0.4-3.8-0.8c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.9,3-0.5,3.8,0.8
+ C442.5,257.5,442.2,259.2,440.9,260z"/>
+ <path class="st4" d="M447.9,273.1c-1.4,0.6-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.3
+ C449.9,270.7,449.3,272.4,447.9,273.1z"/>
+ <path class="st4" d="M453.3,286.8c-1.5,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.2-3,1.7-3.5c1.4-0.5,3.1,0.2,3.6,1.7
+ C455.6,284.8,454.8,286.4,453.3,286.8z"/>
+ <path class="st4" d="M457.1,301.2c-1.5,0.3-3-0.7-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C459.6,299.4,458.6,300.9,457.1,301.2z"/>
+ <path class="st4" d="M459.1,315.9c-1.5,0.1-2.9-1-3-2.5c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.5
+ C461.8,314.4,460.6,315.7,459.1,315.9z"/>
+ <path class="st4" d="M225.1,313.6c1.5,0.2,2.6,1.5,2.5,3c-0.1,1.5-1.4,2.6-3,2.5c-1.5-0.1-2.7-1.4-2.5-3
+ C222.2,314.5,223.6,313.4,225.1,313.6z"/>
+ <path class="st4" d="M227.7,299.1c1.5,0.4,2.4,1.8,2.1,3.3c-0.4,1.4-1.8,2.4-3.3,2.1c-1.5-0.3-2.5-1.8-2.1-3.3
+ C224.7,299.7,226.2,298.8,227.7,299.1z"/>
+ <path class="st4" d="M232.2,285.1c1.4,0.6,2.1,2.2,1.6,3.5c-0.5,1.4-2,2.1-3.5,1.6c-1.4-0.5-2.2-2.1-1.7-3.6
+ C229.2,285.3,230.8,284.6,232.2,285.1z"/>
+ <path class="st4" d="M238.5,271.9c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C235.4,271.6,237.2,271.1,238.5,271.9z"/>
+ <path class="st4" d="M246.6,259.6c1.2,0.9,1.5,2.6,0.6,3.8c-0.9,1.2-2.6,1.5-3.8,0.6c-1.3-0.9-1.6-2.6-0.7-3.9
+ C243.6,258.9,245.3,258.6,246.6,259.6z"/>
+ <path class="st4" d="M256.2,248.5c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C253.3,247.4,255.1,247.4,256.2,248.5z"/>
+ <path class="st4" d="M267.2,238.7c0.9,1.2,0.7,2.9-0.4,3.9c-1.2,0.9-2.8,0.8-3.9-0.4c-1-1.1-0.9-3,0.4-3.9
+ C264.5,237.3,266.3,237.5,267.2,238.7z"/>
+ <path class="st4" d="M279.4,230.5c0.8,1.3,0.3,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.8
+ C276.9,228.7,278.6,229.2,279.4,230.5z"/>
+ <path class="st4" d="M292.6,224c0.6,1.4-0.1,3-1.4,3.6c-1.3,0.6-3,0-3.6-1.4c-0.7-1.4,0-3,1.4-3.7
+ C290.3,221.9,292,222.6,292.6,224z"/>
+ <path class="st4" d="M306.5,219.3c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-2.9-0.4-3.4-1.9c-0.5-1.5,0.4-3,1.9-3.4
+ C304.6,217,306.1,217.9,306.5,219.3z"/>
+ <path class="st4" d="M320.9,216.6c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.3-1.5,0.8-3,2.3-3.2
+ C319.3,214,320.8,215.1,320.9,216.6z"/>
+ <path class="st4" d="M335.6,215.8c0,1.5-1.2,2.7-2.7,2.8c-1.5,0-2.7-1.2-2.8-2.7c-0.1-1.5,1.2-2.8,2.7-2.8
+ C334.4,213,335.6,214.3,335.6,215.8z"/>
+ <path class="st4" d="M350.3,216.9c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.5-1.5-2.4-3.1c0.1-1.5,1.5-2.7,3.1-2.4
+ C349.4,214,350.5,215.4,350.3,216.9z"/>
+ <path class="st4" d="M364.6,220c-0.4,1.5-1.9,2.3-3.3,1.9c-1.4-0.3-2.3-1.8-2-3.3c0.3-1.5,1.8-2.4,3.4-2.1
+ C364.2,217,365.1,218.5,364.6,220z"/>
+ <path class="st4" d="M378.5,225c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C378.4,221.9,379.1,223.6,378.5,225z"/>
+ <path class="st4" d="M391.5,231.7c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.7-2.4-1-3.8c0.7-1.4,2.4-1.8,3.8-1
+ C391.9,228.7,392.3,230.4,391.5,231.7z"/>
+ <path class="st4" d="M403.5,240.2c-1,1.2-2.7,1.4-3.9,0.5c-1.1-0.9-1.4-2.6-0.5-3.8c0.9-1.2,2.7-1.5,3.9-0.5
+ C404.3,237.3,404.5,239,403.5,240.2z"/>
+ <path class="st4" d="M414.3,250.2c-1.1,1-2.8,1-3.9,0c-1.1-1-1.1-2.8,0-3.9c1-1.1,2.8-1.1,3.9,0
+ C415.4,247.4,415.4,249.1,414.3,250.2z"/>
+ <path class="st4" d="M423.7,261.5c-1.3,0.9-2.9,0.6-3.8-0.5c-0.9-1.2-0.7-2.9,0.5-3.8c1.2-1,2.9-0.7,3.9,0.5
+ C425.2,258.8,424.9,260.6,423.7,261.5z"/>
+ <path class="st4" d="M431.5,273.9c-1.3,0.7-3,0.2-3.8-1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C433.3,271.5,432.8,273.2,431.5,273.9z"/>
+ <path class="st4" d="M437.5,287.3c-1.4,0.5-3-0.2-3.6-1.5c-0.5-1.4,0.1-3,1.5-3.6c1.4-0.6,3.1,0,3.6,1.5
+ C439.7,285.2,439,286.8,437.5,287.3z"/>
+ <path class="st4" d="M441.7,301.4c-1.5,0.3-3-0.6-3.3-2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.5,3.4,2
+ C444.1,299.6,443.2,301.1,441.7,301.4z"/>
+ <path class="st4" d="M444,315.9c-1.5,0.1-2.8-1-3-2.4c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.4
+ C446.7,314.4,445.5,315.8,444,315.9z"/>
+ <path class="st4" d="M240.4,313.5c1.5,0.2,2.5,1.6,2.3,3c-0.1,1.5-1.4,2.6-2.9,2.5c-1.5-0.1-2.7-1.5-2.6-3.1
+ C237.5,314.4,238.9,313.2,240.4,313.5z"/>
+ <path class="st4" d="M243.4,298.9c1.5,0.4,2.4,2,2,3.4c-0.4,1.4-1.9,2.3-3.4,2c-1.5-0.3-2.4-1.9-2-3.4
+ C240.5,299.3,242,298.4,243.4,298.9z"/>
+ <path class="st4" d="M248.8,285c1.4,0.7,2,2.3,1.3,3.6c-0.7,1.3-2.2,2-3.6,1.4c-1.4-0.6-2.2-2.3-1.4-3.7
+ C245.8,285,247.4,284.3,248.8,285z"/>
+ <path class="st4" d="M256.2,272.1c0.6,0.4,1,1.1,1.1,1.8c0.2,0.7,0.1,1.5-0.3,2.1c-0.8,1.3-2.5,1.7-3.8,0.9
+ c-1.3-0.8-1.7-2.5-0.9-3.9c0.4-0.7,1-1.1,1.7-1.3C254.8,271.5,255.6,271.6,256.2,272.1z"/>
+ <path class="st4" d="M265.6,260.5c1.1,1.1,1.2,2.8,0.2,3.9c-1,1.1-2.8,1.2-3.9,0.2c-1.2-1-1.3-2.7-0.2-3.9
+ C262.7,259.6,264.5,259.5,265.6,260.5z"/>
+ <path class="st4" d="M276.7,250.6c0.9,1.2,0.7,2.9-0.5,3.8c-1.2,0.9-2.8,0.9-3.8-0.3c-1-1.1-0.9-3,0.3-4
+ C274,249.2,275.7,249.4,276.7,250.6z"/>
+ <path class="st4" d="M289.1,242.4c0.7,1.3,0.3,3.1-1,3.8c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,1-3.8
+ C286.7,240.6,288.4,241,289.1,242.4z"/>
+ <path class="st4" d="M302.7,236.4c0.5,1.4-0.2,3-1.6,3.5c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.5
+ C300.6,234.2,302.2,235,302.7,236.4z"/>
+ <path class="st4" d="M317.1,232.5c0.3,1.5-0.7,2.8-2.2,3.2c-1.4,0.4-2.9-0.5-3.3-2c-0.4-1.5,0.6-3,2.1-3.4
+ C315.3,229.9,316.8,231.1,317.1,232.5z"/>
+ <path class="st4" d="M331.9,231c0,1.5-1.1,2.8-2.6,2.9c-1.5,0.1-2.8-1.1-2.9-2.6c-0.1-1.5,1-2.8,2.6-2.9
+ C330.5,228.3,331.9,229.5,331.9,231z"/>
+ <path class="st4" d="M346.8,231.8c-0.2,1.5-1.6,2.5-3,2.3c-1.5-0.1-2.6-1.4-2.5-2.9c0.1-1.5,1.5-2.7,3.1-2.6
+ C345.9,228.8,347,230.3,346.8,231.8z"/>
+ <path class="st4" d="M361.3,234.8c-0.4,1.5-2,2.4-3.4,2c-1.4-0.4-2.3-1.9-2-3.4c0.3-1.5,1.9-2.4,3.4-2
+ C360.9,231.8,361.8,233.3,361.3,234.8z"/>
+ <path class="st4" d="M375.2,240.2c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.7-2-2.2-1.4-3.6c0.6-1.4,2.3-2.2,3.7-1.4
+ C375.2,237.1,375.9,238.8,375.2,240.2z"/>
+ <path class="st4" d="M388.1,247.6c-0.4,0.6-1.1,1-1.8,1.1c-0.7,0.2-1.5,0.1-2.1-0.3c-1.3-0.8-1.7-2.5-0.9-3.8
+ c0.8-1.3,2.5-1.7,3.9-0.9c0.7,0.4,1.1,1,1.3,1.7C388.7,246.2,388.6,246.9,388.1,247.6z"/>
+ <path class="st4" d="M399.7,257c-1.1,1.1-2.8,1.2-3.9,0.2c-1.1-1-1.2-2.8-0.2-3.9c1-1.2,2.7-1.3,3.9-0.2
+ C400.6,254.1,400.7,255.9,399.7,257z"/>
+ <path class="st4" d="M409.6,268c-1.2,0.9-2.9,0.7-3.8-0.5c-0.9-1.2-0.9-2.8,0.3-3.8c1.1-1,3-0.9,4,0.3
+ C411.1,265.3,410.8,267.1,409.6,268z"/>
+ <path class="st4" d="M417.8,280.4c-1.3,0.7-3.1,0.3-3.8-1c-0.8-1.3-0.3-3,0.9-3.8s3-0.4,3.8,1C419.6,278,419.2,279.7,417.8,280.4
+ z"/>
+ <path class="st4" d="M423.8,294.1c-1.4,0.5-3-0.2-3.5-1.6c-0.5-1.4,0.2-3,1.6-3.6c1.4-0.6,3,0.1,3.5,1.6
+ C426,292,425.2,293.6,423.8,294.1z"/>
+ <path class="st4" d="M427.7,308.5c-1.5,0.3-2.8-0.7-3.2-2.2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.6,3.4,2.1
+ C430.3,306.7,429.1,308.2,427.7,308.5z"/>
+ <path class="st4" d="M429.2,323.3c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.1,2.8,1,2.9,2.6
+ C431.9,321.9,430.7,323.2,429.2,323.3z"/>
+ <path class="st4" d="M255.6,313.6c1.5,0.2,2.6,1.6,2.3,3.1c-0.3,1.4-1.5,2.5-3,2.4c-1.5-0.1-2.8-1.5-2.5-3.1
+ C252.7,314.4,254.1,313.4,255.6,313.6z"/>
+ <path class="st4" d="M259.2,299.3c1.4,0.5,2.2,2.1,1.7,3.4c-0.4,1.4-1.9,2.2-3.3,1.8c-1.5-0.4-2.4-2-1.9-3.5
+ C256.2,299.6,257.8,298.8,259.2,299.3z"/>
+ <path class="st4" d="M265.3,286c1.3,0.8,1.7,2.4,1.1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C262.2,285.6,264,285.2,265.3,286z"/>
+ <path class="st4" d="M273.8,273.9c1.2,1,1.2,2.6,0.4,3.9c-0.9,1.2-2.6,1.4-3.8,0.5c-1.2-0.9-1.5-2.7-0.5-3.9
+ C270.8,273,272.7,272.9,273.8,273.9z"/>
+ <path class="st4" d="M284.4,263.7c0.5,0.6,0.7,1.3,0.6,2c-0.1,0.7-0.3,1.4-0.9,1.9c-1.1,1-2.8,0.9-3.9-0.2c-1-1.1-0.9-2.9,0.2-4
+ c0.6-0.5,1.3-0.8,2-0.7C283.2,262.7,283.9,263.1,284.4,263.7z"/>
+ <path class="st4" d="M296.6,255.5c0.7,1.3,0.3,3-1,3.8c-1.3,0.8-2.9,0.3-3.8-1c-0.8-1.3-0.4-3,1-3.8
+ C294.2,253.7,295.9,254.1,296.6,255.5z"/>
+ <path class="st4" d="M310.2,249.7c0.5,1.5-0.3,3.1-1.7,3.6c-1.4,0.5-3-0.2-3.5-1.7s0.2-3,1.7-3.6
+ C308.2,247.5,309.7,248.3,310.2,249.7z"/>
+ <path class="st4" d="M324.6,246.6c0.2,1.5-0.9,2.9-2.3,3.2c-1.4,0.2-2.9-0.8-3.2-2.3c-0.3-1.5,0.7-2.9,2.3-3.1
+ C323,244.1,324.4,245.1,324.6,246.6z"/>
+ <path class="st4" d="M339.3,246.2c-0.1,1.5-1.4,2.7-2.8,2.6c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.6,1.2-2.8,2.8-2.7
+ C338.2,243.4,339.4,244.7,339.3,246.2z"/>
+ <path class="st4" d="M353.8,248.4c-0.4,1.5-1.8,2.4-3.3,2c-1.4-0.3-2.4-1.7-2.1-3.2c0.3-1.5,1.8-2.6,3.3-2.2
+ C353.3,245.4,354.2,247,353.8,248.4z"/>
+ <path class="st4" d="M367.7,253.3c-0.7,1.4-2.2,2-3.6,1.4c-1.4-0.5-2.1-2.1-1.5-3.5c0.5-1.4,2.2-2.2,3.7-1.6
+ C367.7,250.2,368.4,251.9,367.7,253.3z"/>
+ <path class="st4" d="M380.5,260.7c-0.9,1.3-2.5,1.5-3.8,0.7c-1.3-0.8-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C381.1,257.6,381.3,259.5,380.5,260.7z"/>
+ <path class="st4" d="M391.7,270.2c-1.1,1.1-2.8,1-3.9,0.1c-1.1-1-1.1-2.7-0.1-3.9c1-1.1,2.8-1.2,4-0.1
+ C392.8,267.3,392.8,269.2,391.7,270.2z"/>
+ <path class="st4" d="M400.9,281.7c-1.3,0.8-3,0.5-3.9-0.6c-0.9-1.2-0.6-2.9,0.6-3.8c1.2-0.9,3-0.7,3.9,0.6
+ C402.5,279.1,402.2,280.8,400.9,281.7z"/>
+ <path class="st4" d="M407.9,294.6c-1.4,0.6-3.1,0-3.7-1.3c-0.6-1.3,0-3,1.3-3.7c1.4-0.7,3-0.1,3.7,1.3
+ C409.9,292.4,409.3,294,407.9,294.6z"/>
+ <path class="st4" d="M412.4,308.7c-1.5,0.3-3-0.6-3.4-2c-0.4-1.4,0.5-2.9,2-3.4c1.5-0.4,3,0.5,3.4,2
+ C414.7,306.9,413.8,308.4,412.4,308.7z"/>
+ <path class="st4" d="M414.1,323.3c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.2,2.8,1,2.9,2.6
+ C416.8,321.9,415.6,323.2,414.1,323.3z"/>
+ <path class="st4" d="M270.9,313.8c1.5,0.3,2.5,1.7,2.3,3.1c-0.2,1.4-1.6,2.4-3.2,2.3c-1.5-0.1-2.6-1.5-2.3-3.1
+ C268,314.5,269.4,313.5,270.9,313.8z"/>
+ <path class="st4" d="M275.1,300c0.7,0.3,1.2,0.9,1.5,1.5c0.3,0.6,0.4,1.4,0.1,2c-0.5,1.3-2.1,2-3.5,1.6c-1.4-0.5-2.2-2.1-1.6-3.6
+ c0.3-0.7,0.8-1.3,1.4-1.6C273.6,299.6,274.4,299.7,275.1,300z"/>
+ <path class="st4" d="M282.4,287.4c1.2,0.9,1.5,2.6,0.7,3.7c-0.7,1.2-2.4,1.6-3.7,0.8c-1.3-0.8-1.7-2.5-0.9-3.9
+ C279.4,286.8,281.2,286.5,282.4,287.4z"/>
+ <path class="st4" d="M292.2,276.8c1,1.2,0.9,2.9-0.1,3.9c-1.1,0.9-2.8,0.9-3.9-0.1c-1.1-1.1-1.1-2.8,0.1-3.9
+ C289.5,275.6,291.2,275.6,292.2,276.8z"/>
+ <path class="st4" d="M304.2,268.6c0.7,1.3,0.3,3-1,3.7c-1.2,0.7-2.9,0.3-3.7-1c-0.8-1.3-0.4-3,0.9-3.8
+ C301.7,266.7,303.4,267.2,304.2,268.6z"/>
+ <path class="st4" d="M317.6,263.4c0.4,1.5-0.4,3-1.8,3.3c-1.3,0.5-2.9-0.3-3.4-1.7c-0.5-1.4,0.2-3,1.7-3.6
+ C315.7,261,317.3,261.9,317.6,263.4z"/>
+ <path class="st4" d="M332,261.2c0,1.5-1.1,2.8-2.5,2.9c-1.4,0-2.7-1-2.9-2.5c-0.2-1.5,0.9-3,2.5-3
+ C330.6,258.5,331.9,259.7,332,261.2z"/>
+ <path class="st4" d="M346.4,262.2c-0.3,1.5-1.7,2.5-3.1,2.3c-1.4-0.2-2.4-1.6-2.3-3.2c0.1-1.5,1.5-2.6,3.1-2.3
+ C345.7,259.3,346.7,260.7,346.4,262.2z"/>
+ <path class="st4" d="M360.3,266.5c-0.3,0.7-0.9,1.2-1.5,1.5c-0.6,0.3-1.4,0.4-2,0.1c-1.3-0.5-2-2.1-1.6-3.5
+ c0.5-1.4,2.1-2.2,3.6-1.6c0.7,0.3,1.3,0.8,1.6,1.4C360.6,265,360.6,265.8,360.3,266.5z"/>
+ <path class="st4" d="M372.8,273.8c-0.9,1.2-2.6,1.5-3.7,0.7c-1.2-0.7-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C373.4,270.8,373.7,272.5,372.8,273.8z"/>
+ <path class="st4" d="M383.4,283.6c-1.2,1-2.9,0.9-3.9-0.1c-0.9-1.1-0.9-2.8,0.1-3.9c1.1-1.1,2.8-1.1,3.9,0.1
+ C384.7,280.8,384.6,282.6,383.4,283.6z"/>
+ <path class="st4" d="M391.6,295.5c-1.3,0.7-3,0.3-3.7-1c-0.7-1.2-0.3-2.9,1-3.7c1.3-0.8,3-0.4,3.8,0.9
+ C393.5,293.1,393,294.8,391.6,295.5z"/>
+ <path class="st4" d="M396.9,309c-1.5,0.4-3-0.4-3.3-1.8c-0.5-1.3,0.3-2.9,1.7-3.4c1.4-0.5,3,0.2,3.6,1.7
+ C399.2,307.1,398.3,308.6,396.9,309z"/>
+ <path class="st4" d="M399,323.3c-1.5,0-2.8-1.1-2.9-2.5c0-1.4,1-2.7,2.5-2.9c1.5-0.2,3,0.9,3,2.5
+ C401.7,322,400.5,323.3,399,323.3z"/>
+ <path class="st4" d="M286.4,313.6c1.5,0.4,2.3,1.8,2.1,3.2c-0.2,1.4-1.6,2.4-3.1,2.2c-1.5-0.2-2.5-1.7-2.3-3.3
+ C283.3,314.2,284.9,313.2,286.4,313.6z"/>
+ <path class="st4" d="M292.1,300c1.3,0.8,1.7,2.4,1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.6-1.9-2.3-1.2-3.8
+ C289.1,299.6,290.8,299.2,292.1,300z"/>
+ <path class="st4" d="M301.6,288.7c1,1.2,1,2.9-0.1,3.8c-1,1-2.7,1.1-3.8,0.1c-1.1-1-1.2-2.8-0.1-4
+ C298.8,287.5,300.6,287.5,301.6,288.7z"/>
+ <path class="st4" d="M314,280.6c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.6-2.9,0.3-3.7-1.1c-0.8-1.3-0.3-3.1,1.1-3.8
+ C311.7,278.7,313.4,279.2,314,280.6z"/>
+ <path class="st4" d="M328.2,276.6c0.2,1.5-0.8,2.9-2.3,3.1c-1.4,0.2-2.8-0.6-3.2-2.1c-0.4-1.4,0.6-3.1,2.2-3.3
+ C326.6,274.1,328,275.1,328.2,276.6z"/>
+ <path class="st4" d="M343,277c-0.3,1.5-1.7,2.6-3.1,2.3c-1.4-0.2-2.5-1.4-2.4-3c0.1-1.5,1.5-2.8,3.1-2.5
+ C342.2,274,343.3,275.5,343,277z"/>
+ <path class="st4" d="M357,281.7c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.6-2-2.1-1.5-3.6c0.5-1.4,2.2-2.2,3.7-1.5
+ C357.1,278.6,357.7,280.3,357,281.7z"/>
+ <path class="st4" d="M369,290.3c-1.1,1.1-2.8,1.2-3.9,0.2c-1-1-1.3-2.6-0.3-3.9c0.9-1.2,2.8-1.5,4-0.3
+ C370,287.4,370.1,289.2,369,290.3z"/>
+ <path class="st4" d="M378,302c-1.3,0.7-3.1,0.3-3.8-0.9c-0.4-0.6-0.4-1.4-0.3-2c0.1-0.7,0.5-1.3,1.1-1.8c0.6-0.4,1.4-0.6,2.1-0.4
+ c0.7,0.2,1.3,0.6,1.8,1.3C379.7,299.6,379.3,301.3,378,302z"/>
+ <path class="st4" d="M383,315.9c-1.5,0.3-3-0.6-3.4-2c-0.3-1.4,0.5-2.9,1.9-3.4c1.5-0.5,3,0.4,3.4,2
+ C385.4,314.1,384.6,315.6,383,315.9z"/>
+ <path class="st4" d="M302,314c1.5,0.6,2.1,2,1.8,3.3c-0.3,1.3-1.8,2.2-3.3,1.9c-1.5-0.3-2.5-1.8-2-3.4
+ C298.9,314.3,300.6,313.5,302,314z"/>
+ <path class="st4" d="M309.6,301.9c1.1,1.1,1.2,2.8,0.3,3.8c-0.8,1.1-2.5,1.3-3.8,0.4c-1.3-0.9-1.5-2.6-0.5-3.9
+ C306.7,300.9,308.5,300.8,309.6,301.9z"/>
+ <path class="st4" d="M321.5,293.8c0.5,1.4,0,3-1.2,3.6c-1.2,0.5-2.8,0.2-3.6-1.2c-0.8-1.3-0.4-3.1,1.1-3.8
+ C319.2,291.8,320.9,292.4,321.5,293.8z"/>
+ <path class="st4" d="M335.6,291.3c-0.1,1.5-1.2,2.7-2.6,2.8c-0.7,0-1.3-0.2-1.8-0.7c-0.5-0.4-0.9-1.1-1-1.8
+ c-0.1-0.8,0.1-1.5,0.6-2.1c0.5-0.5,1.2-0.9,2-0.9C334.4,288.5,335.7,289.8,335.6,291.3z"/>
+ <path class="st4" d="M349.5,294.8c-0.7,1.4-2.2,1.9-3.5,1.5c-1.3-0.5-1.9-2.1-1.5-3.5c0.4-1.5,2-2.2,3.6-1.7
+ C349.6,291.7,350.2,293.5,349.5,294.8z"/>
+ <path class="st4" d="M360.8,303.6c-1.2,1-2.9,0.9-3.8-0.1c-1-0.9-1-2.6,0-3.8c1-1.2,2.8-1.2,4-0.1
+ C362.1,300.8,362,302.6,360.8,303.6z"/>
+ <path class="st4" d="M367.6,316.2c-0.7,0.2-1.5,0.1-2.1-0.2c-0.6-0.3-1.1-0.8-1.4-1.4c-0.4-1.3,0.2-2.8,1.5-3.5
+ c1.4-0.7,3.1,0,3.6,1.5c0.3,0.8,0.2,1.6-0.1,2.2C368.9,315.5,368.3,316,367.6,316.2z"/>
+ <path class="st4" d="M319,314c1.2,1,1.5,2.6,0.9,3.7c-0.3,0.6-0.8,1-1.5,1.2c-0.6,0.2-1.4,0.3-2.1,0c-0.7-0.3-1.3-0.8-1.5-1.5
+ c-0.2-0.7-0.2-1.6,0.3-2.4C315.9,313.5,317.8,313.1,319,314z"/>
+ <path class="st4" d="M331.9,306.6c0.2,1.5-0.8,2.9-2,3.2c-1.3,0.4-2.8-0.3-3.4-1.7c-0.7-1.4,0.1-3.1,1.9-3.7
+ C330.1,304,331.7,305.1,331.9,306.6z"/>
+ <path class="st4" d="M346.2,310.4c-1,1.2-2.6,1.5-3.7,0.9c-0.6-0.3-1-0.8-1.2-1.5c-0.2-0.6-0.3-1.4,0-2.1
+ c0.3-0.7,0.8-1.3,1.5-1.5c0.7-0.2,1.6-0.2,2.4,0.3C346.7,307.3,347.1,309.2,346.2,310.4z"/>
+ <path class="st4" d="M353.6,323.2c-1.5,0.2-2.9-0.8-3.2-2c-0.4-1.3,0.3-2.8,1.7-3.4c1.4-0.7,3.1,0.1,3.7,1.9
+ C356.2,321.4,355.1,323.1,353.6,323.2z"/>
+ </g>
+ </g>
+</g>
+<g>
+ <g>
+ <circle class="st3" cx="1993.3" cy="201.9" r="54"/>
+ <path class="st1" d="M1990.2,281.6h6.3v-54.7c0-1.7-1.4-3.1-3.1-3.1l0,0c-1.7,0-3.1,1.4-3.1,3.1V281.6z"/>
+ </g>
+ <g>
+ <path class="st2" d="M1890,255.9L1890,255.9c17.2,0,31.1-13.9,31.1-31.1V179c0-17.2-13.9-31.1-31.1-31.1l0,0
+ c-17.2,0-31.1,13.9-31.1,31.1v45.8C1858.9,242,1872.8,255.9,1890,255.9z"/>
+ <path class="st1" d="M1886.9,281.6h6.3v-54.7c0-1.7-1.4-3.1-3.1-3.1l0,0c-1.7,0-3.1,1.4-3.1,3.1V281.6z"/>
+ </g>
+ <g>
+ <path class="st5" d="M1773,255.9L1773,255.9c17.2,0,31.1-13.9,31.1-31.1v0c0-17.2-13.9-31.1-31.1-31.1l0,0
+ c-17.2,0-31.1,13.9-31.1,31.1v0C1741.9,242,1755.8,255.9,1773,255.9z"/>
+ <path class="st5" d="M1773,204.1L1773,204.1c17.2,0,31.1-13.9,31.1-31.1v0c0-17.2-13.9-31.1-31.1-31.1l0,0
+ c-17.2,0-31.1,13.9-31.1,31.1v0C1741.9,190.2,1755.8,204.1,1773,204.1z"/>
+ <path class="st1" d="M1769.9,281.6h6.3v-54.7c0-1.7-1.4-3.1-3.1-3.1l0,0c-1.7,0-3.1,1.4-3.1,3.1V281.6z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_play.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_play.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_play.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 30.5 34.5" style="enable-background:new 0 0 30.5 34.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#221E1F;stroke:#221E1F;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polygon class="st0" points="28,17.2 2.5,2.5 2.5,32 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/smile3.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/smile3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/smile3.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.4" cy="12.7" r="2.4"/>
+ <line class="st3" x1="11.6" y1="24.9" x2="21" y2="24.9"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_turn_left.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_turn_left.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_turn_left.svg (revision 7)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="19.222px" height="20.192px" viewBox="6.665 -2.284 19.222 20.192" enable-background="new 6.665 -2.284 19.222 20.192"
+ xml:space="preserve">
+<g>
+ <path fill="#221F1F" d="M25.285,7.039c-0.332,0-0.602-0.27-0.602-0.602c0-2.819-2.293-5.113-5.111-5.113
+ c-0.332,0-0.602-0.27-0.602-0.602s0.27-0.602,0.602-0.602c3.482,0,6.314,2.834,6.314,6.317C25.887,6.769,25.617,7.039,25.285,7.039
+ z"/>
+ <g>
+ <polygon fill="#221F1F" points="17.531,-1.936 12.926,0.723 17.531,3.381 "/>
+ <path fill="#221F1F" d="M17.531,3.729c-0.061,0-0.121-0.016-0.174-0.047l-4.605-2.658c-0.107-0.062-0.174-0.177-0.174-0.301
+ s0.066-0.239,0.174-0.301l4.605-2.659c0.107-0.063,0.24-0.063,0.348,0c0.107,0.062,0.174,0.177,0.174,0.301v5.316
+ c0,0.125-0.066,0.239-0.174,0.301C17.651,3.713,17.591,3.729,17.531,3.729z M13.623,0.723l3.56,2.055v-4.111L13.623,0.723z"/>
+ </g>
+ <path fill="#221F1F" d="M19.966,17.909H8.494c-1.009,0-1.829-0.821-1.829-1.829V7.845c0-1.008,0.82-1.828,1.829-1.828h11.472
+ c1.008,0,1.827,0.82,1.827,1.828v8.234C21.793,17.087,20.974,17.909,19.966,17.909z M8.494,7.556c-0.16,0-0.29,0.13-0.29,0.289
+ v8.234c0,0.16,0.13,0.29,0.29,0.29h11.472c0.159,0,0.288-0.13,0.288-0.29V7.845c0-0.162-0.127-0.289-0.288-0.289H8.494z"/>
+ <path fill="#221F1F" d="M19.18,1.325h-1.953c-0.333,0-0.603-0.27-0.603-0.602s0.27-0.602,0.603-0.602h1.953
+ c0.332,0,0.602,0.27,0.602,0.602S19.512,1.325,19.18,1.325z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/banner2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/banner2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_sitemap.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_sitemap.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_sitemap.svg (revision 7)
@@ -0,0 +1,467 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 692.3 278.9" style="enable-background:new 0 0 692.3 278.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#1984FD;}
+ .st1{fill:#4953D3;}
+ .st2{fill:#4FE179;}
+ .st3{fill:#3BBCFD;}
+ .st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+</style>
+<g>
+ <g>
+ <circle class="st0" cx="467.7" cy="47.5" r="47.5"/>
+ <path class="st1" d="M470.5,117.5H465V69.4c0-1.5,1.2-2.8,2.8-2.8l0,0c1.5,0,2.8,1.2,2.8,2.8V117.5z"/>
+ </g>
+ <g>
+ <path class="st2" d="M558.5,95L558.5,95c-15.1,0-27.4-12.3-27.4-27.4V27.4c0-15.1,12.3-27.4,27.4-27.4l0,0
+ c15.1,0,27.4,12.3,27.4,27.4v40.2C585.9,82.7,573.6,95,558.5,95z"/>
+ <path class="st1" d="M561.3,117.5h-5.5V69.4c0-1.5,1.2-2.8,2.8-2.8l0,0c1.5,0,2.8,1.2,2.8,2.8V117.5z"/>
+ </g>
+ <path class="st3" d="M692.3,278.9L692.3,278.9c0-95.6-77.5-173.1-173.1-173.1h0c-95.6,0-173.1,77.5-173.1,173.1v0H692.3z"/>
+ <path class="st3" d="M346.2,278.9L346.2,278.9c0-95.6-77.5-173.1-173.1-173.1h0C77.5,105.8,0,183.3,0,278.9v0H346.2z"/>
+ <g>
+ <path class="st4" d="M3.1,266.6c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.3,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.7-2.9
+ C0.3,267.6,1.6,266.4,3.1,266.6z"/>
+ <path class="st4" d="M4.8,251.8c1.5,0.2,2.5,1.6,2.3,3.1c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.6-1.6-2.4-3.2
+ C1.8,252.6,3.3,251.5,4.8,251.8z"/>
+ <path class="st4" d="M7.8,237.2c1.5,0.4,2.4,1.9,2.1,3.3C9.5,242,8,243,6.5,242.6c-1.5-0.3-2.4-1.8-2.1-3.3
+ C4.8,237.8,6.3,236.8,7.8,237.2z"/>
+ <path class="st4" d="M12.1,223c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2.1,2.2-3.5,1.8c-1.5-0.5-2.2-2-1.7-3.5
+ C9,223.3,10.6,222.5,12.1,223z"/>
+ <path class="st4" d="M17.6,209.2c1.4,0.6,2,2.3,1.4,3.6c-0.6,1.4-2.2,2.1-3.6,1.5c-1.4-0.6-2.1-2.2-1.5-3.7
+ C14.5,209.2,16.2,208.5,17.6,209.2z"/>
+ <path class="st4" d="M24.2,195.9c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.4,1.9-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C21.1,195.6,22.9,195.1,24.2,195.9z"/>
+ <path class="st4" d="M32,183.2c1.2,0.9,1.6,2.6,0.8,3.9c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.5-0.8-3.9
+ C29,182.7,30.7,182.3,32,183.2z"/>
+ <path class="st4" d="M40.9,171.3c1.2,1,1.4,2.7,0.5,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C38,170.5,39.7,170.3,40.9,171.3z"/>
+ <path class="st4" d="M50.8,160.2c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C48,159.2,49.7,159.1,50.8,160.2z"/>
+ <path class="st4" d="M61.6,150c1,1.2,0.9,2.9-0.3,3.9c-1.2,1-2.9,0.9-3.9-0.2c-1-1.1-1-2.9,0.2-3.9
+ C58.9,148.7,60.6,148.8,61.6,150z"/>
+ <path class="st4" d="M73.3,140.8c0.9,1.2,0.6,3-0.6,3.8c-1.2,0.9-2.9,0.7-3.9-0.5c-0.9-1.2-0.7-3,0.5-3.9
+ C70.6,139.2,72.4,139.5,73.3,140.8z"/>
+ <path class="st4" d="M85.7,132.6c0.8,1.3,0.3,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C83.2,130.8,84.9,131.2,85.7,132.6z"/>
+ <path class="st4" d="M98.8,125.5c0.7,1.4,0.1,3.1-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.3-0.2-3,1.2-3.7
+ C96.4,123.6,98.1,124.1,98.8,125.5z"/>
+ <path class="st4" d="M112.4,119.6c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.6-3-0.1-3.6-1.5c-0.6-1.4,0.1-3,1.6-3.6
+ C110.3,117.5,111.9,118.2,112.4,119.6z"/>
+ <path class="st4" d="M126.5,114.9c0.4,1.5-0.4,3-1.9,3.4c-1.5,0.4-3-0.4-3.5-1.8c-0.5-1.4,0.3-3.1,1.9-3.5
+ C124.6,112.6,126.1,113.5,126.5,114.9z"/>
+ <path class="st4" d="M141,111.5c0.3,1.5-0.7,2.9-2.2,3.2c-1.5,0.3-2.9-0.6-3.3-2.1c-0.3-1.5,0.6-3,2.2-3.3
+ C139.2,109,140.7,110,141,111.5z"/>
+ <path class="st4" d="M155.7,109.3c0.1,1.5-0.9,2.9-2.4,3.1c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1
+ C154.2,106.7,155.6,107.8,155.7,109.3z"/>
+ <path class="st4" d="M170.6,108.5c0,1.5-1.2,2.8-2.7,2.8c-1.5,0-2.8-1.2-2.9-2.7c-0.1-1.5,1.1-2.8,2.7-2.8
+ C169.2,105.8,170.5,107,170.6,108.5z"/>
+ <path class="st4" d="M185.4,108.9c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.7-1.3-2.6-2.9c0.1-1.5,1.4-2.8,2.9-2.7
+ C184.3,106.1,185.5,107.4,185.4,108.9z"/>
+ <path class="st4" d="M200.2,110.6c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.1c0.2-1.5,1.6-2.6,3.2-2.4
+ C199.4,107.6,200.4,109.1,200.2,110.6z"/>
+ <path class="st4" d="M214.8,113.6c-0.4,1.5-1.9,2.4-3.3,2.1c-1.5-0.3-2.4-1.8-2.1-3.3c0.3-1.5,1.8-2.4,3.3-2.1
+ C214.2,110.6,215.1,112.1,214.8,113.6z"/>
+ <path class="st4" d="M229,117.9c-0.5,1.4-2.1,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.8-3.5c0.4-1.5,2-2.2,3.5-1.7
+ C228.7,114.9,229.5,116.4,229,117.9z"/>
+ <path class="st4" d="M242.8,123.4c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C242.8,120.3,243.4,122,242.8,123.4z"/>
+ <path class="st4" d="M256.1,130c-0.8,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.4-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C256.4,127,256.8,128.7,256.1,130z"/>
+ <path class="st4" d="M268.8,137.8c-0.9,1.2-2.6,1.6-3.9,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C269.3,134.8,269.6,136.6,268.8,137.8z"/>
+ <path class="st4" d="M280.7,146.7c-1,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9c0.9-1.2,2.7-1.4,3.9-0.5
+ C281.4,143.8,281.6,145.5,280.7,146.7z"/>
+ <path class="st4" d="M291.8,156.6c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.2,3.9-0.1
+ C292.8,153.8,292.8,155.5,291.8,156.6z"/>
+ <path class="st4" d="M302,167.4c-1.2,1-2.9,0.9-3.9-0.3c-1-1.2-0.9-2.9,0.2-3.9c1.1-1,2.9-1,3.9,0.2
+ C303.2,164.7,303.1,166.4,302,167.4z"/>
+ <path class="st4" d="M311.2,179.1c-1.2,0.9-3,0.6-3.8-0.6c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-0.9,3-0.7,3.9,0.5
+ C312.7,176.4,312.4,178.2,311.2,179.1z"/>
+ <path class="st4" d="M319.4,191.5c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.8,3-0.4,3.9,0.9
+ C321.2,189,320.7,190.7,319.4,191.5z"/>
+ <path class="st4" d="M326.5,204.6c-1.4,0.7-3.1,0.1-3.7-1.2c-0.7-1.3-0.1-3,1.2-3.7c1.3-0.7,3-0.2,3.7,1.2
+ C328.4,202.2,327.9,203.9,326.5,204.6z"/>
+ <path class="st4" d="M332.4,218.2c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.5-3.6c1.4-0.6,3,0.1,3.6,1.6
+ C334.5,216.1,333.8,217.7,332.4,218.2z"/>
+ <path class="st4" d="M337,232.3c-1.5,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.8-3.5c1.4-0.5,3.1,0.3,3.5,1.9
+ C339.4,230.4,338.5,231.9,337,232.3z"/>
+ <path class="st4" d="M340.5,246.8c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.3,3,0.6,3.3,2.2
+ C343,245,342,246.5,340.5,246.8z"/>
+ <path class="st4" d="M342.6,261.5c-1.5,0.1-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.9,3.1,2.4
+ C345.2,260,344.2,261.4,342.6,261.5z"/>
+ <path class="st4" d="M343.5,276.4c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C346.2,275.1,345,276.3,343.5,276.4z"/>
+ <path class="st4" d="M18.3,266.6c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.6-2.9
+ C15.4,267.7,16.7,266.5,18.3,266.6z"/>
+ <path class="st4" d="M20.1,252c1.5,0.3,2.5,1.7,2.2,3.2c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.2
+ C17.2,252.7,18.6,251.7,20.1,252z"/>
+ <path class="st4" d="M23.3,237.5c1.5,0.4,2.3,1.9,1.9,3.4c-0.3,1.5-1.8,2.4-3.3,2c-1.5-0.3-2.4-1.9-2.1-3.4
+ C20.3,238,21.9,237.1,23.3,237.5z"/>
+ <path class="st4" d="M27.9,223.5c1.4,0.6,2.1,2.1,1.6,3.5c-0.5,1.4-2,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.7-3.6
+ C24.9,223.7,26.5,222.9,27.9,223.5z"/>
+ <path class="st4" d="M33.9,210c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.6,1.3c-1.4-0.6-2-2.3-1.4-3.7
+ C30.8,209.8,32.5,209.3,33.9,210z"/>
+ <path class="st4" d="M41.1,197c1.3,0.8,1.7,2.5,0.9,3.8c-0.7,1.3-2.4,1.7-3.8,1c-1.3-0.8-1.8-2.5-1-3.8
+ C38,196.6,39.8,196.2,41.1,197z"/>
+ <path class="st4" d="M49.4,184.9c1.2,0.9,1.4,2.6,0.6,3.9c-0.9,1.2-2.6,1.5-3.8,0.6c-1.2-0.9-1.5-2.6-0.6-3.9
+ C46.4,184.2,48.2,183.9,49.4,184.9z"/>
+ <path class="st4" d="M59,173.5c1.1,1,1.2,2.7,0.2,3.9c-1,1.1-2.7,1.2-3.9,0.3c-1.2-1-1.3-2.8-0.3-3.9
+ C56,172.6,57.8,172.5,59,173.5z"/>
+ <path class="st4" d="M69.5,163.2c1,1.1,0.9,2.9-0.2,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1-2.9,0.1-3.9
+ C66.7,161.9,68.5,162,69.5,163.2z"/>
+ <path class="st4" d="M80.9,153.8c0.9,1.2,0.6,2.9-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.7-2.9,0.5-3.9
+ C78.3,152.3,80,152.6,80.9,153.8z"/>
+ <path class="st4" d="M93.2,145.6c0.8,1.3,0.4,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.9-3.8
+ C90.7,143.9,92.5,144.3,93.2,145.6z"/>
+ <path class="st4" d="M106.3,138.6c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C103.9,136.7,105.6,137.2,106.3,138.6z"/>
+ <path class="st4" d="M119.9,132.9c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.6
+ C117.8,130.8,119.4,131.4,119.9,132.9z"/>
+ <path class="st4" d="M134,128.5c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.9-3.4
+ C132.1,126.2,133.6,127,134,128.5z"/>
+ <path class="st4" d="M148.5,125.5c0.2,1.5-0.8,3-2.2,3.2c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.7-2.9,2.2-3.2
+ C146.8,123,148.2,124,148.5,125.5z"/>
+ <path class="st4" d="M163.2,123.9c0.1,1.5-1,2.9-2.5,3c-1.5,0.1-2.8-1-3-2.6c-0.2-1.5,1-2.8,2.5-3
+ C161.8,121.2,163.1,122.4,163.2,123.9z"/>
+ <path class="st4" d="M178,123.7c-0.1,1.5-1.3,2.7-2.8,2.7c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.5,1.2-2.8,2.8-2.7
+ C176.8,120.9,178,122.1,178,123.7z"/>
+ <path class="st4" d="M192.7,124.8c-0.2,1.5-1.6,2.6-3,2.4c-1.5-0.2-2.6-1.5-2.5-3c0.1-1.5,1.5-2.7,3.1-2.5
+ C191.8,121.9,192.9,123.3,192.7,124.8z"/>
+ <path class="st4" d="M207.3,127.4c-0.3,1.5-1.8,2.4-3.3,2.1c-1.5-0.3-2.4-1.7-2.2-3.2c0.3-1.5,1.7-2.5,3.3-2.2
+ C206.6,124.4,207.6,125.9,207.3,127.4z"/>
+ <path class="st4" d="M221.5,131.3c-0.5,1.5-2,2.2-3.4,1.8c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,2-2.3,3.5-1.9
+ C221.2,128.2,222,129.9,221.5,131.3z"/>
+ <path class="st4" d="M235.3,136.6c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.6-1.5
+ C235.3,133.5,235.9,135.2,235.3,136.6z"/>
+ <path class="st4" d="M248.6,143.1c-0.8,1.4-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C248.8,140,249.3,141.8,248.6,143.1z"/>
+ <path class="st4" d="M261.1,150.9c-0.9,1.3-2.5,1.5-3.8,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C261.7,147.9,262,149.7,261.1,150.9z"/>
+ <path class="st4" d="M272.9,159.9c-1,1.2-2.7,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C273.7,156.9,273.9,158.7,272.9,159.9z"/>
+ <path class="st4" d="M283.7,169.9c-1.1,1.1-2.8,1-3.9,0c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.1,3.9-0.1
+ C284.9,167,284.8,168.8,283.7,169.9z"/>
+ <path class="st4" d="M293.6,180.9c-1.2,1-2.9,0.8-3.9-0.3c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C295,178.2,294.8,180,293.6,180.9z"/>
+ <path class="st4" d="M302.4,192.8c-1.3,0.8-3,0.5-3.8-0.7c-0.9-1.2-0.6-2.9,0.7-3.8c1.2-0.9,3-0.6,3.9,0.7
+ C304,190.2,303.7,192,302.4,192.8z"/>
+ <path class="st4" d="M310,205.5c-1.3,0.7-3,0.2-3.8-1.1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C311.9,203.1,311.4,204.8,310,205.5z"/>
+ <path class="st4" d="M316.4,218.8c-1.4,0.6-3-0.1-3.7-1.4c-0.6-1.4,0-3,1.4-3.6c1.4-0.6,3,0,3.7,1.4
+ C318.4,216.6,317.8,218.2,316.4,218.8z"/>
+ <path class="st4" d="M321.4,232.7c-1.5,0.4-3-0.3-3.5-1.8c-0.5-1.4,0.3-3,1.7-3.5c1.4-0.5,3,0.3,3.5,1.8
+ C323.7,230.7,322.9,232.3,321.4,232.7z"/>
+ <path class="st4" d="M325.1,247c-1.5,0.3-3-0.6-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C327.6,245.2,326.6,246.7,325.1,247z"/>
+ <path class="st4" d="M327.4,261.6c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.8,3.1,2.4
+ C330,260.1,329,261.5,327.4,261.6z"/>
+ <path class="st4" d="M328.4,276.4c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C331.1,275.1,329.9,276.4,328.4,276.4z"/>
+ <path class="st4" d="M33.4,266.7c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5-0.1-2.7-1.4-2.6-2.9
+ C30.5,267.7,31.9,266.6,33.4,266.7z"/>
+ <path class="st4" d="M35.4,252.2c1.5,0.3,2.5,1.7,2.2,3.2c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.2-2.5-1.6-2.2-3.2
+ C32.5,252.9,33.9,251.9,35.4,252.2z"/>
+ <path class="st4" d="M38.9,237.9c1.5,0.5,2.3,2,1.9,3.4c-0.4,1.4-1.9,2.3-3.4,1.9c-1.5-0.4-2.3-1.9-1.9-3.4
+ C35.9,238.3,37.5,237.5,38.9,237.9z"/>
+ <path class="st4" d="M43.9,224.1c1.4,0.6,2.1,2.2,1.6,3.6c-0.5,1.4-2.1,2.1-3.6,1.5c-1.4-0.5-2.1-2.1-1.6-3.6
+ C40.9,224.2,42.5,223.5,43.9,224.1z"/>
+ <path class="st4" d="M50.4,210.9c1.3,0.7,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.7
+ C47.3,210.7,49.1,210.2,50.4,210.9z"/>
+ <path class="st4" d="M58.2,198.5c1.3,0.9,1.6,2.6,0.7,3.8c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.6-0.8-3.9
+ C55.2,197.9,57,197.6,58.2,198.5z"/>
+ <path class="st4" d="M67.2,186.9c1.1,1,1.3,2.7,0.3,3.9c-1,1.1-2.6,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9
+ C64.3,186.1,66.1,185.9,67.2,186.9z"/>
+ <path class="st4" d="M77.4,176.4c1,1.1,1,2.9-0.1,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1.1-2.8,0-3.9
+ C74.6,175.2,76.4,175.3,77.4,176.4z"/>
+ <path class="st4" d="M88.7,166.9c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C86,165.5,87.7,165.7,88.7,166.9z"/>
+ <path class="st4" d="M100.8,158.7c0.8,1.3,0.4,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.8-3.8
+ C98.3,157,100,157.4,100.8,158.7z"/>
+ <path class="st4" d="M113.8,151.8c0.7,1.4,0,3-1.3,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C111.4,149.8,113.1,150.4,113.8,151.8z"/>
+ <path class="st4" d="M127.4,146.3c0.5,1.4-0.2,3-1.7,3.5c-1.4,0.5-3-0.2-3.5-1.6c-0.6-1.4,0.2-3,1.6-3.6
+ C125.3,144.1,126.9,144.9,127.4,146.3z"/>
+ <path class="st4" d="M141.5,142.3c0.3,1.5-0.6,3-2,3.3c-1.4,0.3-2.9-0.5-3.3-2c-0.4-1.5,0.5-3.1,2-3.4
+ C139.6,139.9,141.1,140.8,141.5,142.3z"/>
+ <path class="st4" d="M155.9,139.7c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.2-1.5,0.8-3,2.3-3.2
+ C154.4,137.1,155.8,138.2,155.9,139.7z"/>
+ <path class="st4" d="M170.6,138.7c0,1.5-1.2,2.8-2.7,2.8c-1.5,0-2.8-1.1-2.8-2.7c-0.1-1.5,1.1-2.9,2.6-2.9
+ C169.3,136,170.6,137.2,170.6,138.7z"/>
+ <path class="st4" d="M185.3,139.2c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.6-1.4-2.6-2.9c0.1-1.5,1.4-2.7,2.9-2.6
+ C184.2,136.4,185.4,137.7,185.3,139.2z"/>
+ <path class="st4" d="M199.8,141.2c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.2c0.2-1.5,1.7-2.5,3.2-2.2
+ C199.1,138.3,200.1,139.7,199.8,141.2z"/>
+ <path class="st4" d="M214,144.8c-0.5,1.5-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C213.6,141.8,214.5,143.3,214,144.8z"/>
+ <path class="st4" d="M227.8,149.8c-0.6,1.4-2.2,2.1-3.6,1.6c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C227.8,146.7,228.4,148.3,227.8,149.8z"/>
+ <path class="st4" d="M241,156.2c-0.7,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.8-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.7-1.2
+ C241.3,153.1,241.8,154.9,241,156.2z"/>
+ <path class="st4" d="M253.5,164c-0.9,1.3-2.6,1.6-3.8,0.7c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.6-1.7,3.9-0.8
+ C254,161,254.3,162.8,253.5,164z"/>
+ <path class="st4" d="M265,173.1c-1,1.1-2.7,1.3-3.9,0.3c-1.1-1-1.3-2.6-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C265.9,170.1,266,171.9,265,173.1z"/>
+ <path class="st4" d="M275.6,183.2c-1.1,1-2.9,1-3.9-0.1c-1-1.1-1-2.8,0.1-3.9c1.1-1.1,2.8-1.1,3.9,0
+ C276.7,180.4,276.7,182.2,275.6,183.2z"/>
+ <path class="st4" d="M285,194.5c-1.2,0.9-3,0.7-3.9-0.5c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-1,2.9-0.8,3.9,0.5
+ C286.5,191.8,286.3,193.6,285,194.5z"/>
+ <path class="st4" d="M293.3,206.6c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.2-0.4-2.9,0.9-3.8c1.3-0.8,3-0.5,3.8,0.8
+ C295,204.1,294.6,205.8,293.3,206.6z"/>
+ <path class="st4" d="M300.2,219.6c-1.4,0.7-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.2
+ C302.2,217.2,301.5,219,300.2,219.6z"/>
+ <path class="st4" d="M305.7,233.2c-1.4,0.5-3-0.2-3.5-1.7c-0.5-1.4,0.2-3,1.6-3.5c1.4-0.6,3,0.2,3.6,1.6
+ C307.9,231.1,307.1,232.7,305.7,233.2z"/>
+ <path class="st4" d="M309.7,247.3c-1.5,0.3-3-0.6-3.3-2c-0.3-1.4,0.5-2.9,2-3.3c1.5-0.4,3.1,0.5,3.4,2
+ C312.1,245.5,311.2,247,309.7,247.3z"/>
+ <path class="st4" d="M312.2,261.8c-1.5,0.2-2.9-0.9-3.1-2.3c-0.2-1.5,0.8-2.9,2.3-3.1c1.5-0.2,3,0.8,3.2,2.3
+ C314.8,260.2,313.7,261.6,312.2,261.8z"/>
+ <path class="st4" d="M313.2,276.4c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.1-2.8,2.7-2.9c1.5-0.1,2.9,1.1,2.9,2.6
+ C316,275.1,314.8,276.4,313.2,276.4z"/>
+ <path class="st4" d="M48.6,266.6c1.5,0.2,2.7,1.5,2.6,3c-0.1,1.5-1.4,2.6-3,2.6c-1.5-0.1-2.7-1.4-2.6-3
+ C45.7,267.6,47,266.4,48.6,266.6z"/>
+ <path class="st4" d="M50.9,252c1.5,0.3,2.4,1.8,2.1,3.3c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.3
+ C47.8,252.6,49.4,251.6,50.9,252z"/>
+ <path class="st4" d="M54.9,237.7c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2,2.2-3.5,1.8c-1.5-0.4-2.3-2-1.8-3.5
+ C51.9,238,53.5,237.2,54.9,237.7z"/>
+ <path class="st4" d="M60.6,224c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.7,1.4c-1.4-0.6-2-2.3-1.4-3.7
+ C57.6,223.9,59.2,223.3,60.6,224z"/>
+ <path class="st4" d="M67.9,211.1c1.3,0.8,1.7,2.5,0.9,3.8c-0.8,1.3-2.4,1.7-3.8,0.9c-1.3-0.8-1.8-2.5-0.9-3.8
+ C64.9,210.7,66.6,210.3,67.9,211.1z"/>
+ <path class="st4" d="M76.7,199.1c1.2,1,1.4,2.7,0.4,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C73.7,198.4,75.5,198.1,76.7,199.1z"/>
+ <path class="st4" d="M86.8,188.3c1.1,1.1,1,2.9-0.1,3.9c-1,1.1-2.8,1.1-3.9,0c-1.1-1-1.1-2.8,0-4C84,187.2,85.8,187.2,86.8,188.3z
+ "/>
+ <path class="st4" d="M98.1,178.7c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C95.4,177.3,97.2,177.5,98.1,178.7z"/>
+ <path class="st4" d="M110.5,170.6c0.8,1.3,0.3,3-1,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C108,168.8,109.7,169.2,110.5,170.6z"/>
+ <path class="st4" d="M123.7,163.9c0.6,1.4,0,3.1-1.4,3.7c-1.4,0.6-3,0-3.7-1.4c-0.7-1.4-0.1-3,1.4-3.7
+ C121.5,161.9,123.1,162.5,123.7,163.9z"/>
+ <path class="st4" d="M137.7,158.9c0.4,1.5-0.4,2.9-1.8,3.4c-1.4,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.3-3,1.8-3.5
+ C135.7,156.5,137.3,157.4,137.7,158.9z"/>
+ <path class="st4" d="M152.1,155.5c0.2,1.5-0.7,2.9-2.2,3.2c-1.5,0.2-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-3,2.2-3.3
+ C150.4,153,151.9,154,152.1,155.5z"/>
+ <path class="st4" d="M166.9,153.9c0.1,1.5-1.1,2.9-2.6,3c-1.5,0.1-2.8-1-3-2.6c-0.1-1.5,1-2.9,2.6-3
+ C165.5,151.2,166.8,152.4,166.9,153.9z"/>
+ <path class="st4" d="M181.7,154.1c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5,0-2.7-1.3-2.7-2.8c0-1.5,1.3-2.7,2.9-2.7
+ C180.6,151.2,181.8,152.6,181.7,154.1z"/>
+ <path class="st4" d="M196.4,156c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.6-2.3-3.2c0.2-1.5,1.7-2.6,3.2-2.3
+ C195.6,153,196.7,154.5,196.4,156z"/>
+ <path class="st4" d="M210.8,159.6c-0.5,1.4-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C210.4,156.5,211.2,158.1,210.8,159.6z"/>
+ <path class="st4" d="M224.6,164.9c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C224.6,161.8,225.2,163.5,224.6,164.9z"/>
+ <path class="st4" d="M237.7,171.7c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.8-2.4-1-3.8c0.7-1.3,2.4-1.8,3.8-1
+ C238.1,168.7,238.5,170.4,237.7,171.7z"/>
+ <path class="st4" d="M249.9,180.2c-0.9,1.2-2.7,1.4-3.8,0.5c-1.2-0.9-1.5-2.6-0.6-3.8c0.9-1.2,2.6-1.5,3.9-0.6
+ C250.6,177.2,250.9,179,249.9,180.2z"/>
+ <path class="st4" d="M261.1,190c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.2,2.8-1.2,3.9-0.1
+ C262.1,187.1,262.2,188.9,261.1,190z"/>
+ <path class="st4" d="M271,201c-1.2,1-2.9,0.7-3.9-0.4c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C272.4,198.3,272.2,200.1,271,201z"/>
+ <path class="st4" d="M279.5,213.1c-1.3,0.8-3,0.4-3.8-0.8c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.9,3-0.5,3.8,0.8
+ C281.2,210.6,280.8,212.3,279.5,213.1z"/>
+ <path class="st4" d="M286.5,226.2c-1.4,0.6-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.3
+ C288.6,223.8,287.9,225.5,286.5,226.2z"/>
+ <path class="st4" d="M292,239.9c-1.5,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.2-3,1.7-3.5c1.4-0.5,3.1,0.2,3.6,1.7
+ C294.2,237.9,293.4,239.5,292,239.9z"/>
+ <path class="st4" d="M295.8,254.3c-1.5,0.3-3-0.7-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C298.2,252.5,297.3,254,295.8,254.3z"/>
+ <path class="st4" d="M297.8,269c-1.5,0.1-2.9-1-3-2.5c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.5
+ C300.4,267.5,299.3,268.9,297.8,269z"/>
+ <path class="st4" d="M63.7,266.7c1.5,0.2,2.6,1.5,2.5,3c-0.1,1.5-1.4,2.6-3,2.5c-1.5-0.1-2.7-1.4-2.5-3
+ C60.8,267.6,62.2,266.5,63.7,266.7z"/>
+ <path class="st4" d="M66.3,252.2c1.5,0.4,2.4,1.8,2.1,3.3c-0.4,1.4-1.8,2.4-3.3,2.1c-1.5-0.3-2.5-1.8-2.1-3.3
+ C63.4,252.8,64.8,251.9,66.3,252.2z"/>
+ <path class="st4" d="M70.8,238.2c1.4,0.6,2.1,2.2,1.6,3.5c-0.5,1.4-2,2.1-3.5,1.6c-1.4-0.5-2.2-2.1-1.7-3.6
+ C67.8,238.4,69.4,237.7,70.8,238.2z"/>
+ <path class="st4" d="M77.2,225c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C74.1,224.7,75.9,224.2,77.2,225z"/>
+ <path class="st4" d="M85.2,212.7c1.2,0.9,1.5,2.6,0.6,3.8c-0.9,1.2-2.6,1.5-3.8,0.6c-1.3-0.9-1.6-2.6-0.7-3.9
+ C82.2,212,84,211.7,85.2,212.7z"/>
+ <path class="st4" d="M94.8,201.6c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C92,200.5,93.7,200.5,94.8,201.6z"/>
+ <path class="st4" d="M105.8,191.8c0.9,1.2,0.7,2.9-0.4,3.9c-1.2,0.9-2.8,0.8-3.9-0.4c-1-1.1-0.9-3,0.4-3.9
+ C103.2,190.4,104.9,190.6,105.8,191.8z"/>
+ <path class="st4" d="M118,183.6c0.8,1.3,0.3,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.8
+ C115.5,181.9,117.3,182.3,118,183.6z"/>
+ <path class="st4" d="M131.2,177.1c0.6,1.4-0.1,3-1.4,3.6c-1.3,0.6-3,0-3.6-1.4c-0.7-1.4,0-3,1.4-3.7
+ C129,175,130.6,175.7,131.2,177.1z"/>
+ <path class="st4" d="M145.1,172.5c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-2.9-0.4-3.4-1.9c-0.5-1.5,0.4-3,1.9-3.4
+ C143.2,170.1,144.8,171,145.1,172.5z"/>
+ <path class="st4" d="M159.6,169.7c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.3-1.5,0.8-3,2.3-3.2
+ C158,167.1,159.4,168.2,159.6,169.7z"/>
+ <path class="st4" d="M174.3,168.9c0,1.5-1.2,2.7-2.7,2.8c-1.5,0-2.7-1.2-2.8-2.7c-0.1-1.5,1.2-2.8,2.7-2.8
+ C173,166.1,174.3,167.4,174.3,168.9z"/>
+ <path class="st4" d="M188.9,170c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.5-1.5-2.4-3.1c0.1-1.5,1.5-2.7,3.1-2.4
+ C188.1,167.1,189.1,168.5,188.9,170z"/>
+ <path class="st4" d="M203.3,173.1c-0.4,1.5-1.9,2.3-3.3,1.9c-1.4-0.3-2.3-1.8-2-3.3c0.3-1.5,1.8-2.4,3.4-2.1
+ C202.8,170.1,203.7,171.6,203.3,173.1z"/>
+ <path class="st4" d="M217.1,178.1c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C217.1,175,217.7,176.7,217.1,178.1z"/>
+ <path class="st4" d="M230.2,184.8c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.7-2.4-1-3.8c0.7-1.4,2.4-1.8,3.8-1
+ C230.5,181.8,231,183.5,230.2,184.8z"/>
+ <path class="st4" d="M242.2,193.3c-1,1.2-2.7,1.4-3.9,0.5c-1.1-0.9-1.4-2.6-0.5-3.8c0.9-1.2,2.7-1.5,3.9-0.5
+ C242.9,190.4,243.1,192.1,242.2,193.3z"/>
+ <path class="st4" d="M253,203.3c-1.1,1-2.8,1-3.9,0c-1.1-1-1.1-2.8,0-3.9c1-1.1,2.8-1.1,3.9,0C254.1,200.5,254.1,202.2,253,203.3z
+ "/>
+ <path class="st4" d="M262.3,214.6c-1.3,0.9-2.9,0.6-3.8-0.5c-0.9-1.2-0.7-2.9,0.5-3.8c1.2-1,2.9-0.7,3.9,0.5
+ C263.9,211.9,263.6,213.7,262.3,214.6z"/>
+ <path class="st4" d="M270.1,227.1c-1.3,0.7-3,0.2-3.8-1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C272,224.6,271.5,226.3,270.1,227.1z"/>
+ <path class="st4" d="M276.2,240.4c-1.4,0.5-3-0.2-3.6-1.5c-0.5-1.4,0.1-3,1.5-3.6c1.4-0.6,3.1,0,3.6,1.5
+ C278.3,238.3,277.6,239.9,276.2,240.4z"/>
+ <path class="st4" d="M280.4,254.5c-1.5,0.3-3-0.6-3.3-2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.5,3.4,2
+ C282.8,252.7,281.8,254.2,280.4,254.5z"/>
+ <path class="st4" d="M282.6,269.1c-1.5,0.1-2.8-1-3-2.4c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.4
+ C285.3,267.5,284.1,268.9,282.6,269.1z"/>
+ <path class="st4" d="M79.1,266.6c1.5,0.2,2.5,1.6,2.3,3c-0.1,1.5-1.4,2.6-2.9,2.5c-1.5-0.1-2.7-1.5-2.6-3.1
+ C76.1,267.5,77.5,266.4,79.1,266.6z"/>
+ <path class="st4" d="M82.1,252c1.5,0.4,2.4,2,2,3.4c-0.4,1.4-1.9,2.3-3.4,2c-1.5-0.3-2.4-1.9-2-3.4
+ C79.1,252.4,80.6,251.5,82.1,252z"/>
+ <path class="st4" d="M87.5,238.1c1.4,0.7,2,2.3,1.3,3.6c-0.7,1.3-2.2,2-3.6,1.4c-1.4-0.6-2.2-2.3-1.4-3.7
+ C84.4,238.1,86.1,237.4,87.5,238.1z"/>
+ <path class="st4" d="M94.8,225.2c0.6,0.4,1,1.1,1.1,1.8c0.2,0.7,0.1,1.5-0.3,2.1c-0.8,1.3-2.5,1.7-3.8,0.9
+ c-1.3-0.8-1.7-2.5-0.9-3.9c0.4-0.7,1-1.1,1.7-1.3C93.5,224.6,94.2,224.8,94.8,225.2z"/>
+ <path class="st4" d="M104.3,213.6c1.1,1.1,1.2,2.8,0.2,3.9c-1,1.1-2.8,1.2-3.9,0.2c-1.2-1-1.3-2.7-0.2-3.9
+ C101.4,212.7,103.2,212.6,104.3,213.6z"/>
+ <path class="st4" d="M115.3,203.7c0.9,1.2,0.7,2.9-0.5,3.8c-1.2,0.9-2.8,0.9-3.8-0.3c-1-1.1-0.9-3,0.3-4
+ C112.6,202.3,114.4,202.5,115.3,203.7z"/>
+ <path class="st4" d="M127.7,195.5c0.7,1.3,0.3,3.1-1,3.8c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,1-3.8
+ C125.3,193.7,127,194.1,127.7,195.5z"/>
+ <path class="st4" d="M141.4,189.5c0.5,1.4-0.2,3-1.6,3.5c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.5
+ C139.2,187.3,140.9,188.1,141.4,189.5z"/>
+ <path class="st4" d="M155.7,185.6c0.3,1.5-0.7,2.8-2.2,3.2c-1.4,0.4-2.9-0.5-3.3-2c-0.4-1.5,0.6-3,2.1-3.4
+ C154,183,155.5,184.2,155.7,185.6z"/>
+ <path class="st4" d="M170.5,184.1c0,1.5-1.1,2.8-2.6,2.9c-1.5,0.1-2.8-1.1-2.9-2.6c-0.1-1.5,1-2.8,2.6-2.9
+ C169.2,181.4,170.5,182.6,170.5,184.1z"/>
+ <path class="st4" d="M185.4,184.9c-0.2,1.5-1.6,2.5-3,2.3c-1.5-0.1-2.6-1.4-2.5-2.9c0.1-1.5,1.5-2.7,3.1-2.6
+ C184.5,181.9,185.6,183.4,185.4,184.9z"/>
+ <path class="st4" d="M200,187.9c-0.4,1.5-2,2.4-3.4,2c-1.4-0.4-2.3-1.9-2-3.4c0.3-1.5,1.9-2.4,3.4-2
+ C199.5,184.9,200.4,186.4,200,187.9z"/>
+ <path class="st4" d="M213.9,193.3c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.7-2-2.2-1.4-3.6c0.6-1.4,2.3-2.2,3.7-1.4
+ C213.9,190.2,214.5,191.9,213.9,193.3z"/>
+ <path class="st4" d="M226.8,200.7c-0.4,0.6-1.1,1-1.8,1.1c-0.7,0.2-1.5,0.1-2.1-0.3c-1.3-0.8-1.7-2.5-0.9-3.8
+ c0.8-1.3,2.5-1.7,3.9-0.9c0.7,0.4,1.1,1,1.3,1.7C227.4,199.3,227.2,200,226.8,200.7z"/>
+ <path class="st4" d="M238.3,210.1c-1.1,1.1-2.8,1.2-3.9,0.2c-1.1-1-1.2-2.8-0.2-3.9c1-1.2,2.7-1.3,3.9-0.2
+ C239.3,207.2,239.4,209,238.3,210.1z"/>
+ <path class="st4" d="M248.3,221.1c-1.2,0.9-2.9,0.7-3.8-0.5c-0.9-1.2-0.9-2.8,0.3-3.8c1.1-1,3-0.9,4,0.3
+ C249.7,218.4,249.5,220.2,248.3,221.1z"/>
+ <path class="st4" d="M256.5,233.6c-1.3,0.7-3.1,0.3-3.8-1c-0.8-1.3-0.3-3,0.9-3.8s3-0.4,3.8,1
+ C258.2,231.1,257.8,232.8,256.5,233.6z"/>
+ <path class="st4" d="M262.5,247.2c-1.4,0.5-3-0.2-3.5-1.6c-0.5-1.4,0.2-3,1.6-3.6c1.4-0.6,3,0.1,3.5,1.6
+ C264.6,245.1,263.9,246.7,262.5,247.2z"/>
+ <path class="st4" d="M266.3,261.6c-1.5,0.3-2.8-0.7-3.2-2.2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.6,3.4,2.1
+ C269,259.8,267.8,261.3,266.3,261.6z"/>
+ <path class="st4" d="M267.9,276.4c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.1,2.8,1,2.9,2.6
+ C270.6,275,269.4,276.3,267.9,276.4z"/>
+ <path class="st4" d="M94.3,266.7c1.5,0.2,2.6,1.6,2.3,3.1c-0.3,1.4-1.5,2.5-3,2.4c-1.5-0.1-2.8-1.5-2.5-3.1
+ C91.4,267.5,92.8,266.5,94.3,266.7z"/>
+ <path class="st4" d="M97.9,252.4c1.4,0.5,2.2,2.1,1.7,3.4c-0.4,1.4-1.9,2.2-3.3,1.8c-1.5-0.4-2.4-2-1.9-3.5
+ C94.8,252.7,96.4,251.9,97.9,252.4z"/>
+ <path class="st4" d="M104,239.1c1.3,0.8,1.7,2.4,1.1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C100.9,238.7,102.7,238.3,104,239.1z"/>
+ <path class="st4" d="M112.5,227c1.2,1,1.2,2.6,0.4,3.9c-0.9,1.2-2.6,1.4-3.8,0.5c-1.2-0.9-1.5-2.7-0.5-3.9
+ C109.5,226.1,111.3,226.1,112.5,227z"/>
+ <path class="st4" d="M123,216.8c0.5,0.6,0.7,1.3,0.6,2c-0.1,0.7-0.3,1.4-0.9,1.9c-1.1,1-2.8,0.9-3.9-0.2c-1-1.1-0.9-2.9,0.2-4
+ c0.6-0.5,1.3-0.8,2-0.7C121.9,215.8,122.5,216.2,123,216.8z"/>
+ <path class="st4" d="M135.3,208.6c0.7,1.3,0.3,3-1,3.8c-1.3,0.8-2.9,0.3-3.8-1c-0.8-1.3-0.4-3,1-3.8
+ C132.9,206.8,134.5,207.2,135.3,208.6z"/>
+ <path class="st4" d="M148.8,202.9c0.5,1.5-0.3,3.1-1.7,3.6c-1.4,0.5-3-0.2-3.5-1.7c-0.6-1.4,0.2-3,1.7-3.6
+ C146.8,200.6,148.4,201.4,148.8,202.9z"/>
+ <path class="st4" d="M163.2,199.7c0.2,1.5-0.9,2.9-2.3,3.2c-1.4,0.2-2.9-0.8-3.2-2.3c-0.3-1.5,0.7-2.9,2.3-3.1
+ C161.6,197.2,163.1,198.2,163.2,199.7z"/>
+ <path class="st4" d="M177.9,199.3c-0.1,1.5-1.4,2.7-2.8,2.6c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.6,1.2-2.8,2.8-2.7
+ C176.8,196.5,178,197.8,177.9,199.3z"/>
+ <path class="st4" d="M192.5,201.6c-0.4,1.5-1.8,2.4-3.3,2c-1.4-0.3-2.4-1.7-2.1-3.2c0.3-1.5,1.8-2.6,3.3-2.2
+ C191.9,198.6,192.9,200.1,192.5,201.6z"/>
+ <path class="st4" d="M206.4,206.4c-0.7,1.4-2.2,2-3.6,1.4c-1.4-0.5-2.1-2.1-1.5-3.5c0.5-1.4,2.2-2.2,3.7-1.6
+ C206.4,203.3,207,205.1,206.4,206.4z"/>
+ <path class="st4" d="M219.1,213.8c-0.9,1.3-2.5,1.5-3.8,0.7c-1.3-0.8-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C219.7,210.7,220,212.6,219.1,213.8z"/>
+ <path class="st4" d="M230.3,223.3c-1.1,1.1-2.8,1-3.9,0.1c-1.1-1-1.1-2.7-0.1-3.9c1-1.1,2.8-1.2,4-0.1
+ C231.5,220.4,231.4,222.3,230.3,223.3z"/>
+ <path class="st4" d="M239.6,234.8c-1.3,0.8-3,0.5-3.9-0.6c-0.9-1.2-0.6-2.9,0.6-3.8c1.2-0.9,3-0.7,3.9,0.6
+ C241.2,232.2,240.9,233.9,239.6,234.8z"/>
+ <path class="st4" d="M246.6,247.7c-1.4,0.6-3.1,0-3.7-1.3c-0.6-1.3,0-3,1.3-3.7c1.4-0.7,3-0.1,3.7,1.3
+ C248.6,245.5,248,247.1,246.6,247.7z"/>
+ <path class="st4" d="M251,261.8c-1.5,0.3-3-0.6-3.4-2c-0.4-1.4,0.5-2.9,2-3.4c1.5-0.4,3,0.5,3.4,2
+ C253.4,260,252.5,261.5,251,261.8z"/>
+ <path class="st4" d="M252.8,276.4c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.2,2.8,1,2.9,2.6
+ C255.5,275,254.3,276.4,252.8,276.4z"/>
+ <path class="st4" d="M109.5,266.9c1.5,0.3,2.5,1.7,2.3,3.1c-0.2,1.4-1.6,2.4-3.2,2.3c-1.5-0.1-2.6-1.5-2.3-3.1
+ C106.6,267.6,108,266.6,109.5,266.9z"/>
+ <path class="st4" d="M113.8,253.1c0.7,0.3,1.2,0.9,1.5,1.5c0.3,0.6,0.4,1.4,0.1,2c-0.5,1.3-2.1,2-3.5,1.6
+ c-1.4-0.5-2.2-2.1-1.6-3.6c0.3-0.7,0.8-1.3,1.4-1.6C112.3,252.8,113.1,252.8,113.8,253.1z"/>
+ <path class="st4" d="M121,240.5c1.2,0.9,1.5,2.6,0.7,3.7c-0.7,1.2-2.4,1.6-3.7,0.8c-1.3-0.8-1.7-2.5-0.9-3.9
+ C118.1,239.9,119.8,239.6,121,240.5z"/>
+ <path class="st4" d="M130.9,229.9c1,1.2,0.9,2.9-0.1,3.9c-1.1,0.9-2.8,0.9-3.9-0.1c-1.1-1.1-1.1-2.8,0.1-3.9
+ C128.1,228.7,129.9,228.7,130.9,229.9z"/>
+ <path class="st4" d="M142.8,221.7c0.7,1.3,0.3,3-1,3.7c-1.2,0.7-2.9,0.3-3.7-1c-0.8-1.3-0.4-3,0.9-3.8
+ C140.4,219.8,142.1,220.3,142.8,221.7z"/>
+ <path class="st4" d="M156.3,216.5c0.4,1.5-0.4,3-1.8,3.3c-1.3,0.5-2.9-0.3-3.4-1.7c-0.5-1.4,0.2-3,1.7-3.6
+ C154.4,214.1,155.9,215,156.3,216.5z"/>
+ <path class="st4" d="M170.6,214.3c0,1.5-1.1,2.8-2.5,2.9c-1.4,0-2.7-1-2.9-2.5c-0.2-1.5,0.9-3,2.5-3
+ C169.3,211.6,170.6,212.8,170.6,214.3z"/>
+ <path class="st4" d="M185.1,215.3c-0.3,1.5-1.7,2.5-3.1,2.3c-1.4-0.2-2.4-1.6-2.3-3.2c0.1-1.5,1.5-2.6,3.1-2.3
+ C184.3,212.4,185.4,213.8,185.1,215.3z"/>
+ <path class="st4" d="M198.9,219.6c-0.3,0.7-0.9,1.2-1.5,1.5c-0.6,0.3-1.4,0.4-2,0.1c-1.3-0.5-2-2.1-1.6-3.5
+ c0.5-1.4,2.1-2.2,3.6-1.6c0.7,0.3,1.3,0.8,1.6,1.4C199.2,218.1,199.2,218.9,198.9,219.6z"/>
+ <path class="st4" d="M211.4,226.9c-0.9,1.2-2.6,1.5-3.7,0.7c-1.2-0.7-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C212.1,223.9,212.3,225.6,211.4,226.9z"/>
+ <path class="st4" d="M222.1,236.7c-1.2,1-2.9,0.9-3.9-0.1c-0.9-1.1-0.9-2.8,0.1-3.9c1.1-1.1,2.8-1.1,3.9,0.1
+ C223.3,233.9,223.2,235.7,222.1,236.7z"/>
+ <path class="st4" d="M230.2,248.6c-1.3,0.7-3,0.3-3.7-1c-0.7-1.2-0.3-2.9,1-3.7c1.3-0.8,3-0.4,3.8,0.9
+ C232.1,246.2,231.6,247.9,230.2,248.6z"/>
+ <path class="st4" d="M235.5,262.1c-1.5,0.4-3-0.4-3.3-1.8c-0.5-1.3,0.3-2.9,1.7-3.4c1.4-0.5,3,0.2,3.6,1.7
+ C237.9,260.2,237,261.7,235.5,262.1z"/>
+ <path class="st4" d="M237.7,276.4c-1.5,0-2.8-1.1-2.9-2.5c0-1.4,1-2.7,2.5-2.9c1.5-0.2,3,0.9,3,2.5
+ C240.4,275.1,239.2,276.4,237.7,276.4z"/>
+ <path class="st4" d="M125,266.7c1.5,0.4,2.3,1.8,2.1,3.2c-0.2,1.4-1.6,2.4-3.1,2.2c-1.5-0.2-2.5-1.7-2.3-3.3
+ C122,267.3,123.6,266.3,125,266.7z"/>
+ <path class="st4" d="M130.8,253.1c1.3,0.8,1.7,2.4,1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.6-1.9-2.3-1.2-3.8
+ C127.7,252.7,129.5,252.3,130.8,253.1z"/>
+ <path class="st4" d="M140.3,241.8c1,1.2,1,2.9-0.1,3.8c-1,1-2.7,1.1-3.8,0.1c-1.1-1-1.2-2.8-0.1-4
+ C137.5,240.6,139.3,240.6,140.3,241.8z"/>
+ <path class="st4" d="M152.6,233.7c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.6-2.9,0.3-3.7-1.1c-0.8-1.3-0.3-3.1,1.1-3.8
+ C150.3,231.8,152,232.3,152.6,233.7z"/>
+ <path class="st4" d="M166.9,229.7c0.2,1.5-0.8,2.9-2.3,3.1c-1.4,0.2-2.8-0.6-3.2-2.1c-0.4-1.4,0.6-3.1,2.2-3.3
+ C165.2,227.2,166.7,228.2,166.9,229.7z"/>
+ <path class="st4" d="M181.6,230.1c-0.3,1.5-1.7,2.6-3.1,2.3c-1.4-0.2-2.5-1.4-2.4-3c0.1-1.5,1.5-2.8,3.1-2.5
+ C180.8,227.2,181.9,228.6,181.6,230.1z"/>
+ <path class="st4" d="M195.6,234.8c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.6-2-2.1-1.5-3.6c0.5-1.4,2.2-2.2,3.7-1.5
+ C195.7,231.7,196.4,233.4,195.6,234.8z"/>
+ <path class="st4" d="M207.7,243.4c-1.1,1.1-2.8,1.2-3.9,0.2c-1-1-1.3-2.6-0.3-3.9c0.9-1.2,2.8-1.5,4-0.3
+ C208.6,240.5,208.7,242.3,207.7,243.4z"/>
+ <path class="st4" d="M216.6,255.1c-1.3,0.7-3.1,0.3-3.8-0.9c-0.4-0.6-0.4-1.4-0.3-2c0.1-0.7,0.5-1.3,1.1-1.8
+ c0.6-0.4,1.4-0.6,2.1-0.4c0.7,0.2,1.3,0.6,1.8,1.3C218.4,252.7,218,254.4,216.6,255.1z"/>
+ <path class="st4" d="M221.7,269c-1.5,0.3-3-0.6-3.4-2c-0.3-1.4,0.5-2.9,1.9-3.4c1.5-0.5,3,0.4,3.4,2
+ C224.1,267.2,223.2,268.7,221.7,269z"/>
+ <path class="st4" d="M140.7,267.1c1.5,0.6,2.1,2,1.8,3.3c-0.3,1.3-1.8,2.2-3.3,1.9c-1.5-0.3-2.5-1.8-2-3.4
+ C137.5,267.4,139.3,266.6,140.7,267.1z"/>
+ <path class="st4" d="M148.2,255c1.1,1.1,1.2,2.8,0.3,3.8c-0.8,1.1-2.5,1.3-3.8,0.4c-1.3-0.9-1.5-2.6-0.5-3.9
+ C145.4,254,147.2,253.9,148.2,255z"/>
+ <path class="st4" d="M160.1,246.9c0.5,1.4,0,3-1.2,3.6c-1.2,0.5-2.8,0.2-3.6-1.2c-0.8-1.3-0.4-3.1,1.1-3.8
+ C157.9,244.9,159.5,245.5,160.1,246.9z"/>
+ <path class="st4" d="M174.2,244.5c-0.1,1.5-1.2,2.7-2.6,2.8c-0.7,0-1.3-0.2-1.8-0.7c-0.5-0.4-0.9-1.1-1-1.8
+ c-0.1-0.8,0.1-1.5,0.6-2.1c0.5-0.5,1.2-0.9,2-0.9C173,241.6,174.3,242.9,174.2,244.5z"/>
+ <path class="st4" d="M188.1,247.9c-0.7,1.4-2.2,1.9-3.5,1.5c-1.3-0.5-1.9-2.1-1.5-3.5c0.4-1.5,2-2.2,3.6-1.7
+ C188.2,244.8,188.8,246.6,188.1,247.9z"/>
+ <path class="st4" d="M199.5,256.7c-1.2,1-2.9,0.9-3.8-0.1c-1-0.9-1-2.6,0-3.8c1-1.2,2.8-1.2,4-0.1
+ C200.7,254,200.6,255.7,199.5,256.7z"/>
+ <path class="st4" d="M206.2,269.3c-0.7,0.2-1.5,0.1-2.1-0.2c-0.6-0.3-1.1-0.8-1.4-1.4c-0.4-1.3,0.2-2.8,1.5-3.5
+ c1.4-0.7,3.1,0,3.6,1.5c0.3,0.8,0.2,1.6-0.1,2.2C207.5,268.6,206.9,269.1,206.2,269.3z"/>
+ <path class="st4" d="M157.7,267.1c1.2,1,1.5,2.6,0.9,3.7c-0.3,0.6-0.8,1-1.5,1.2c-0.6,0.2-1.4,0.3-2.1,0c-0.7-0.3-1.3-0.8-1.5-1.5
+ c-0.2-0.7-0.2-1.6,0.3-2.4C154.6,266.6,156.5,266.2,157.7,267.1z"/>
+ <path class="st4" d="M170.5,259.7c0.2,1.5-0.8,2.9-2,3.2c-1.3,0.4-2.8-0.3-3.4-1.7c-0.7-1.4,0.1-3.1,1.9-3.7
+ C168.7,257.1,170.3,258.2,170.5,259.7z"/>
+ <path class="st4" d="M184.8,263.5c-1,1.2-2.6,1.5-3.7,0.9c-0.6-0.3-1-0.8-1.2-1.5c-0.2-0.6-0.3-1.4,0-2.1c0.3-0.7,0.8-1.3,1.5-1.5
+ c0.7-0.2,1.6-0.2,2.4,0.3C185.4,260.4,185.8,262.3,184.8,263.5z"/>
+ <path class="st4" d="M192.3,276.3c-1.5,0.2-2.9-0.8-3.2-2c-0.4-1.3,0.3-2.8,1.7-3.4c1.4-0.7,3.1,0.1,3.7,1.9
+ C194.9,274.5,193.8,276.2,192.3,276.3z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/kia.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/kia.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/kia.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 224.8 52.9" style="enable-background:new 0 0 224.8 52.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#05141F;}
+</style>
+<g>
+ <g>
+ <path class="st0" d="M130.5,46.8c0,0.4,0.1,0.7,0.4,0.7c0.2,0,0.3-0.1,0.5-0.2l70.1-45.5c1.2-0.8,2.4-1.2,4-1.2h15.4
+ c2.4,0,4,1.6,4,4v29.4c0,3.6-0.8,5.6-3.9,7.5l-18.7,11.2c-0.2,0.2-0.4,0.2-0.6,0.2c-0.2,0-0.4-0.2-0.4-0.8l0-34.3
+ c0-0.4-0.1-0.7-0.4-0.7c-0.2,0-0.3,0.1-0.5,0.2L149,50.6c-1.4,0.9-2.6,1.2-3.9,1.2h-34c-2.4,0-3.9-1.6-3.9-4l0-42.4
+ c0-0.3-0.1-0.6-0.4-0.6c-0.2,0-0.3,0.1-0.6,0.2L72.4,25.3c-0.3,0.2-0.4,0.4-0.4,0.5c0,0.1,0.1,0.3,0.3,0.5l24.1,24.1
+ c0.3,0.3,0.5,0.6,0.5,0.8c0,0.3-0.4,0.4-0.8,0.4H74.4c-1.7,0-3-0.3-4-1.2L55.8,35.9c-0.1-0.1-0.3-0.2-0.4-0.2
+ c-0.1,0-0.3,0.1-0.5,0.2L30.4,50.6c-1.5,0.9-2.5,1.2-4,1.2H3.9c-2.4,0-3.9-1.6-3.9-4V18.9c0-3.6,0.8-5.6,4-7.5L22.7,0.2
+ C22.9,0,23.1,0,23.3,0c0.3,0,0.4,0.3,0.4,0.9v38.6c0,0.4,0.1,0.6,0.4,0.6c0.2,0,0.3-0.1,0.6-0.2L88.1,1.7c1.5-0.9,2.4-1.2,4.2-1.2
+ h34.2c2.4,0,4,1.6,4,4V46.8z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_checkbox_true_part.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_checkbox_true_part.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_checkbox_true_part.svg (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="33.75 0 24.166 24.165" enable-background="new 33.75 0 24.166 24.165"
+ xml:space="preserve">
+<g>
+ <path fill="none" d="M35.85,23.588c-0.84,0-1.523-0.684-1.523-1.521V2.099c0-0.839,0.684-1.522,1.523-1.522h19.967
+ c0.84,0,1.523,0.683,1.523,1.522v19.968c0,0.84-0.684,1.521-1.523,1.521H35.85z"/>
+ <path fill="#828282" d="M55.815,0H35.849c-1.158,0-2.101,0.942-2.101,2.099v19.968c0,1.156,0.942,2.098,2.101,2.098h19.967
+ c1.159,0,2.102-0.941,2.102-2.098V2.098C57.915,0.941,56.972,0,55.815,0z M55.815,23.01H35.849c-0.522,0-0.947-0.424-0.947-0.945
+ V2.099c0-0.522,0.425-0.946,0.947-0.946h19.967V1.151c0.522,0,0.947,0.424,0.947,0.946v19.968
+ C56.763,22.586,56.338,23.01,55.815,23.01z"/>
+</g>
+<path fill="#828282" d="M43.985,17.061c-0.264,0-0.53-0.102-0.733-0.305l-4.192-4.191c-0.406-0.404-0.406-1.062,0-1.468
+ c0.403-0.404,1.061-0.406,1.467,0l3.461,3.456l7.15-7.147C51.543,7,52.2,7,52.606,7.406c0.406,0.406,0.406,1.063,0,1.469
+ l-7.885,7.882C44.519,16.959,44.254,17.061,43.985,17.061z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/ts_chatting_view_bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/ts_chatting_view_bg.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_main_section4.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_main_section4.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_main_section4.svg (revision 7)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 2228.5 745.8" style="enable-background:new 0 0 2228.5 745.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#1984FD;}
+ .st1{fill:#4953D3;}
+ .st2{fill:#6E8CFD;}
+ .st3{fill:#4FE179;}
+ .st4{fill:#3BBCFD;}
+</style>
+<g>
+ <path class="st0" d="M1878.6,571.5v175h0.2c193.2-0.1,349.7-156.7,349.7-349.9v0v0l-175,0C2053.5,493.1,1975.2,571.5,1878.6,571.5"
+ />
+ <path class="st1" d="M1528.7,571.2l0-175h-0.2c-193.2,0.1-349.7,156.7-349.7,349.9v0v0l175,0
+ C1353.8,649.6,1432.1,571.2,1528.7,571.2"/>
+ <path class="st2" d="M1878.6,571.5L1878.6,571.5c0-24.2-19.6-43.7-43.7-43.7l0,0c-24.2,0-43.7,19.6-43.7,43.7l0,0H1878.6z"/>
+ <path class="st2" d="M1703.7,571.5L1703.7,571.5c0,24.2,19.6,43.7,43.7,43.7l0,0c24.2,0,43.7-19.6,43.7-43.7l0,0L1703.7,571.5z"/>
+ <path class="st2" d="M1703.7,571.5L1703.7,571.5c0-24.2-19.6-43.7-43.7-43.7h0c-24.2,0-43.7,19.6-43.7,43.7l0,0H1703.7z"/>
+ <path class="st2" d="M1528.7,571.5L1528.7,571.5c0,24.2,19.6,43.7,43.7,43.7h0c24.2,0,43.7-19.6,43.7-43.7l0,0L1528.7,571.5z"/>
+ <path class="st2" d="M1878.6,658.9L1878.6,658.9c0-24.2-19.6-43.7-43.7-43.7l0,0c-24.2,0-43.7,19.6-43.7,43.7v0H1878.6z"/>
+ <path class="st2" d="M1703.7,658.9L1703.7,658.9c0,24.2,19.6,43.7,43.7,43.7l0,0c24.2,0,43.7-19.6,43.7-43.7l0,0L1703.7,658.9z"/>
+ <path class="st2" d="M1703.7,658.9L1703.7,658.9c0-24.2-19.6-43.7-43.7-43.7h0c-24.2,0-43.7,19.6-43.7,43.7v0H1703.7z"/>
+ <path class="st2" d="M1528.7,658.9L1528.7,658.9c0,24.2,19.6,43.7,43.7,43.7h0c24.2,0,43.7-19.6,43.7-43.7l0,0L1528.7,658.9z"/>
+ <path class="st2" d="M1878.6,746.4L1878.6,746.4c0-24.2-19.6-43.7-43.7-43.7l0,0c-24.2,0-43.7,19.6-43.7,43.7l0,0H1878.6z"/>
+ <path class="st2" d="M1703.7,746.4L1703.7,746.4c0-24.2-19.6-43.7-43.7-43.7h0c-24.2,0-43.7,19.6-43.7,43.7l0,0H1703.7z"/>
+ <g>
+ <path class="st3" d="M1491.3,376.8L1491.3,376.8c-15.3,0-27.7-12.4-27.7-27.7v0c0-15.3,12.4-27.7,27.7-27.7l0,0
+ c15.3,0,27.7,12.4,27.7,27.7v0C1518.9,364.4,1506.6,376.8,1491.3,376.8z"/>
+ <path class="st3" d="M1491.3,330.7L1491.3,330.7c-15.3,0-27.7-12.4-27.7-27.7v0c0-15.3,12.4-27.7,27.7-27.7l0,0
+ c15.3,0,27.7,12.4,27.7,27.7v0C1518.9,318.3,1506.6,330.7,1491.3,330.7z"/>
+ <path class="st1" d="M1494.1,399.5h-5.6v-48.6c0-1.5,1.3-2.8,2.8-2.8l0,0c1.5,0,2.8,1.3,2.8,2.8V399.5z"/>
+ </g>
+ <g>
+ <circle class="st3" cx="2097.5" cy="325.7" r="48"/>
+ <path class="st1" d="M2100.3,396.5h-5.6v-48.6c0-1.5,1.3-2.8,2.8-2.8l0,0c1.5,0,2.8,1.3,2.8,2.8V396.5z"/>
+ </g>
+ <g>
+ <path class="st4" d="M2189.3,373.7L2189.3,373.7c-15.3,0-27.7-12.4-27.7-27.7v-40.7c0-15.3,12.4-27.7,27.7-27.7l0,0
+ c15.3,0,27.7,12.4,27.7,27.7v40.7C2216.9,361.3,2204.5,373.7,2189.3,373.7z"/>
+ <path class="st1" d="M2192,396.5h-5.6v-48.6c0-1.5,1.3-2.8,2.8-2.8l0,0c1.5,0,2.8,1.3,2.8,2.8V396.5z"/>
+ </g>
+</g>
+<path class="st2" d="M173.1,400.6L0,400.6v0.2c0.1,191.1,155,346,346.2,346h0h0l0-173.1C250.6,573.7,173.1,496.2,173.1,400.6"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_arrow_allminus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_allminus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_allminus.svg (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <polygon points="15.23,15.702 6.624,15.702 6.624,14.802 14.33,14.802 14.33,2.601 4.503,2.601 4.503,15.251 3.602,15.251
+ 3.602,1.702 15.23,1.702 "/>
+ <rect x="7.083" y="4.689" width="4.976" height="0.9"/>
+ <rect x="7.083" y="6.94" width="4.976" height="0.9"/>
+ <rect x="7.232" y="9.191" width="4.976" height="0.902"/>
+ <rect x="7.083" y="11.477" width="4.976" height="0.9"/>
+ <g>
+ <g>
+
+ <polygon fill="none" stroke="#FFFFFF" stroke-width="1.4679" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 5.409,13.12 0.532,9.875 5.409,6.631 "/>
+
+ <path fill="none" stroke="#FFFFFF" stroke-width="1.4679" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M12.151,9.186c0.235,0,0.424,0.307,0.424,0.688c0,0.386-0.191,0.693-0.427,0.693H3.662c-0.234,0-0.424-0.31-0.424-0.693
+ c0-0.382,0.19-0.688,0.424-0.688H12.151z"/>
+ </g>
+ <g>
+ <polygon fill="#3CA123" points="5.409,13.12 0.532,9.875 5.409,6.631 "/>
+ <path fill="#3CA123" d="M12.151,9.186c0.235,0,0.424,0.307,0.424,0.688c0,0.386-0.191,0.693-0.427,0.693H3.662
+ c-0.234,0-0.424-0.31-0.424-0.693c0-0.382,0.19-0.688,0.424-0.688H12.151z"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_copy.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_copy.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_copy.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 23.3 26.3" style="enable-background:new 0 0 23.3 26.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#000000;stroke-width:1.5;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="18.2,0.9 0.8,0.9 0.8,21.3 "/>
+ <rect x="5" y="5.2" class="st0" width="17.5" height="20.4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_line_width.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/icon_tree_line_width.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/item1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/item1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tree_logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/icon_tree_logo.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/tooltip.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/tooltip.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/tooltip.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 10 7" style="enable-background:new 0 0 10 7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#CCCCCC;}
+</style>
+<g>
+ <polygon class="st0" points="2.6,7 7.4,7 5,2.2 "/>
+ <polygon class="st1" points="5,1.7 7.8,7 8.5,7 5,0 1.5,7 2.3,7 "/>
+ <polygon class="st1" points="2.3,7 2.6,7 5,2.2 7.4,7 7.8,7 5,1.7 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/techbanner1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/techbanner1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_main_section5.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_main_section5.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_main_section5.svg (revision 7)
@@ -0,0 +1,916 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 2228.5 276.9" style="enable-background:new 0 0 2228.5 276.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#4FE179;}
+ .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+ .st2{fill:#1984FD;}
+ .st3{fill:#4953D3;}
+ .st4{fill:#3BBCFD;}
+</style>
+<g>
+ <g>
+ <path class="st0" d="M681.3,346.2L681.3,346.2c0-95.6-77.5-173.1-173.1-173.1h0c-95.6,0-173.1,77.5-173.1,173.1v0H681.3z"/>
+ <path class="st0" d="M335.2,346.2L335.2,346.2c0-95.6-77.5-173.1-173.1-173.1h0C66.5,173.1-11,250.6-11,346.2v0H335.2z"/>
+ <g>
+ <path class="st1" d="M338.3,333.8c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.3,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.7-2.9
+ C335.4,334.9,336.8,333.7,338.3,333.8z"/>
+ <path class="st1" d="M340,319c1.5,0.2,2.5,1.6,2.3,3.1c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.6-1.6-2.4-3.2
+ C337,319.9,338.4,318.8,340,319z"/>
+ <path class="st1" d="M342.9,304.5c1.5,0.4,2.4,1.9,2.1,3.3c-0.3,1.5-1.8,2.4-3.3,2.1c-1.5-0.3-2.4-1.8-2.1-3.3
+ C340,305,341.5,304.1,342.9,304.5z"/>
+ <path class="st1" d="M347.2,290.2c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2.1,2.2-3.5,1.8c-1.5-0.5-2.2-2-1.7-3.5
+ C344.2,290.5,345.8,289.7,347.2,290.2z"/>
+ <path class="st1" d="M352.7,276.4c1.4,0.6,2,2.3,1.4,3.6c-0.6,1.4-2.2,2.1-3.6,1.5c-1.4-0.6-2.1-2.2-1.5-3.7
+ C349.7,276.4,351.3,275.8,352.7,276.4z"/>
+ <path class="st1" d="M359.4,263.1c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.4,1.9-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C356.3,262.9,358.1,262.4,359.4,263.1z"/>
+ <path class="st1" d="M367.2,250.5c1.2,0.9,1.6,2.6,0.8,3.9c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.5-0.8-3.9
+ C364.2,250,365.9,249.6,367.2,250.5z"/>
+ <path class="st1" d="M376.1,238.6c1.2,1,1.4,2.7,0.5,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C373.1,237.8,374.9,237.6,376.1,238.6z"/>
+ <path class="st1" d="M386,227.5c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C383.1,226.4,384.9,226.4,386,227.5z"/>
+ <path class="st1" d="M396.8,217.3c1,1.2,0.9,2.9-0.3,3.9c-1.2,1-2.9,0.9-3.9-0.2c-1-1.1-1-2.9,0.2-3.9
+ C394,216,395.8,216.1,396.8,217.3z"/>
+ <path class="st1" d="M408.4,208c0.9,1.2,0.6,3-0.6,3.8c-1.2,0.9-2.9,0.7-3.9-0.5c-0.9-1.2-0.7-3,0.5-3.9
+ C405.8,206.5,407.5,206.8,408.4,208z"/>
+ <path class="st1" d="M420.8,199.8c0.8,1.3,0.3,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C418.3,198.1,420.1,198.5,420.8,199.8z"/>
+ <path class="st1" d="M433.9,192.7c0.7,1.4,0.1,3.1-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.3-0.2-3,1.2-3.7
+ C431.6,190.8,433.2,191.4,433.9,192.7z"/>
+ <path class="st1" d="M447.6,186.9c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.6-3-0.1-3.6-1.5c-0.6-1.4,0.1-3,1.6-3.6
+ C445.4,184.7,447,185.4,447.6,186.9z"/>
+ <path class="st1" d="M461.7,182.2c0.4,1.5-0.4,3-1.9,3.4c-1.5,0.4-3-0.4-3.5-1.8c-0.5-1.4,0.3-3.1,1.9-3.5
+ C459.7,179.9,461.3,180.7,461.7,182.2z"/>
+ <path class="st1" d="M476.2,178.8c0.3,1.5-0.7,2.9-2.2,3.2c-1.5,0.3-2.9-0.6-3.3-2.1c-0.3-1.5,0.6-3,2.2-3.3
+ C474.4,176.2,475.9,177.3,476.2,178.8z"/>
+ <path class="st1" d="M490.9,176.6c0.1,1.5-0.9,2.9-2.4,3.1c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1
+ C489.3,174,490.7,175.1,490.9,176.6z"/>
+ <path class="st1" d="M505.7,175.8c0,1.5-1.2,2.8-2.7,2.8c-1.5,0-2.8-1.2-2.9-2.7c-0.1-1.5,1.1-2.8,2.7-2.8
+ C504.4,173,505.7,174.2,505.7,175.8z"/>
+ <path class="st1" d="M520.6,176.2c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.7-1.3-2.6-2.9c0.1-1.5,1.4-2.8,2.9-2.7
+ C519.5,173.3,520.7,174.7,520.6,176.2z"/>
+ <path class="st1" d="M535.3,177.9c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.1c0.2-1.5,1.6-2.6,3.2-2.4
+ C534.5,174.9,535.6,176.4,535.3,177.9z"/>
+ <path class="st1" d="M549.9,180.9c-0.4,1.5-1.9,2.4-3.3,2.1c-1.5-0.3-2.4-1.8-2.1-3.3c0.3-1.5,1.8-2.4,3.3-2.1
+ C549.4,177.9,550.3,179.4,549.9,180.9z"/>
+ <path class="st1" d="M564.1,185.1c-0.5,1.4-2.1,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.8-3.5c0.4-1.5,2-2.2,3.5-1.7
+ C563.9,182.1,564.7,183.7,564.1,185.1z"/>
+ <path class="st1" d="M578,190.6c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C577.9,187.6,578.6,189.2,578,190.6z"/>
+ <path class="st1" d="M591.3,197.3c-0.8,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.4-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C591.5,194.2,592,196,591.3,197.3z"/>
+ <path class="st1" d="M603.9,205.1c-0.9,1.2-2.6,1.6-3.9,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C604.4,202.1,604.8,203.8,603.9,205.1z"/>
+ <path class="st1" d="M615.8,214c-1,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9c0.9-1.2,2.7-1.4,3.9-0.5
+ C616.6,211.1,616.8,212.8,615.8,214z"/>
+ <path class="st1" d="M626.9,223.9c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.2,3.9-0.1
+ C627.9,221,628,222.8,626.9,223.9z"/>
+ <path class="st1" d="M637.1,234.7c-1.2,1-2.9,0.9-3.9-0.3c-1-1.2-0.9-2.9,0.2-3.9c1.1-1,2.9-1,3.9,0.2
+ C638.4,231.9,638.3,233.7,637.1,234.7z"/>
+ <path class="st1" d="M646.4,246.4c-1.2,0.9-3,0.6-3.8-0.6c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-0.9,3-0.7,3.9,0.5
+ C647.9,243.7,647.6,245.5,646.4,246.4z"/>
+ <path class="st1" d="M654.6,258.8c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.8,3-0.4,3.9,0.9
+ C656.3,256.2,655.9,258,654.6,258.8z"/>
+ <path class="st1" d="M661.6,271.8c-1.4,0.7-3.1,0.1-3.7-1.2c-0.7-1.3-0.1-3,1.2-3.7c1.3-0.7,3-0.2,3.7,1.2
+ C663.6,269.5,663,271.2,661.6,271.8z"/>
+ <path class="st1" d="M667.5,285.5c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.5-3.6c1.4-0.6,3,0.1,3.6,1.6
+ C669.6,283.3,669,285,667.5,285.5z"/>
+ <path class="st1" d="M672.2,299.6c-1.5,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.8-3.5c1.4-0.5,3.1,0.3,3.5,1.9
+ C674.5,297.6,673.7,299.2,672.2,299.6z"/>
+ <path class="st1" d="M675.6,314.1c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.3,3,0.6,3.3,2.2
+ C678.1,312.3,677.1,313.8,675.6,314.1z"/>
+ <path class="st1" d="M677.8,328.8c-1.5,0.1-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.9,3.1,2.4
+ C680.4,327.2,679.3,328.6,677.8,328.8z"/>
+ <path class="st1" d="M678.6,343.6c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C681.3,342.3,680.1,343.6,678.6,343.6z"/>
+ <path class="st1" d="M353.4,333.9c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.6-2.9
+ C350.6,334.9,351.9,333.8,353.4,333.9z"/>
+ <path class="st1" d="M355.3,319.2c1.5,0.3,2.5,1.7,2.2,3.2c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.2
+ C352.3,320,353.8,319,355.3,319.2z"/>
+ <path class="st1" d="M358.5,304.8c1.5,0.4,2.3,1.9,1.9,3.4c-0.3,1.5-1.8,2.4-3.3,2c-1.5-0.3-2.4-1.9-2.1-3.4
+ C355.5,305.3,357,304.4,358.5,304.8z"/>
+ <path class="st1" d="M363.1,290.8c1.4,0.6,2.1,2.1,1.6,3.5c-0.5,1.4-2,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.7-3.6
+ C360,290.9,361.7,290.2,363.1,290.8z"/>
+ <path class="st1" d="M369,277.2c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.6,1.3c-1.4-0.6-2-2.3-1.4-3.7
+ C365.9,277.1,367.7,276.5,369,277.2z"/>
+ <path class="st1" d="M376.2,264.3c1.3,0.8,1.7,2.5,0.9,3.8c-0.7,1.3-2.4,1.7-3.8,1c-1.3-0.8-1.8-2.5-1-3.8
+ C373.1,263.9,374.9,263.5,376.2,264.3z"/>
+ <path class="st1" d="M384.6,252.1c1.2,0.9,1.4,2.6,0.6,3.9c-0.9,1.2-2.6,1.5-3.8,0.6c-1.2-0.9-1.5-2.6-0.6-3.9
+ C381.6,251.4,383.4,251.2,384.6,252.1z"/>
+ <path class="st1" d="M394.1,240.8c1.1,1,1.2,2.7,0.2,3.9c-1,1.1-2.7,1.2-3.9,0.3c-1.2-1-1.3-2.8-0.3-3.9
+ C391.2,239.8,393,239.8,394.1,240.8z"/>
+ <path class="st1" d="M404.6,230.4c1,1.1,0.9,2.9-0.2,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1-2.9,0.1-3.9
+ C401.8,229.2,403.6,229.3,404.6,230.4z"/>
+ <path class="st1" d="M416.1,221.1c0.9,1.2,0.6,2.9-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.7-2.9,0.5-3.9
+ C413.4,219.6,415.2,219.9,416.1,221.1z"/>
+ <path class="st1" d="M428.4,212.9c0.8,1.3,0.4,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.9-3.8
+ C425.9,211.1,427.6,211.6,428.4,212.9z"/>
+ <path class="st1" d="M441.4,205.9c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C439.1,203.9,440.8,204.5,441.4,205.9z"/>
+ <path class="st1" d="M455,200.2c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.6
+ C452.9,198,454.5,198.7,455,200.2z"/>
+ <path class="st1" d="M469.2,195.8c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.9-3.4
+ C467.3,193.4,468.8,194.3,469.2,195.8z"/>
+ <path class="st1" d="M483.6,192.8c0.2,1.5-0.8,3-2.2,3.2c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.7-2.9,2.2-3.2
+ C482,190.3,483.4,191.3,483.6,192.8z"/>
+ <path class="st1" d="M498.3,191.2c0.1,1.5-1,2.9-2.5,3c-1.5,0.1-2.8-1-3-2.6c-0.2-1.5,1-2.8,2.5-3
+ C496.9,188.5,498.2,189.6,498.3,191.2z"/>
+ <path class="st1" d="M513.1,190.9c-0.1,1.5-1.3,2.7-2.8,2.7c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.5,1.2-2.8,2.8-2.7
+ C511.9,188.1,513.2,189.4,513.1,190.9z"/>
+ <path class="st1" d="M527.8,192.1c-0.2,1.5-1.6,2.6-3,2.4c-1.5-0.2-2.6-1.5-2.5-3c0.1-1.5,1.5-2.7,3.1-2.5
+ C526.9,189.2,528,190.6,527.8,192.1z"/>
+ <path class="st1" d="M542.4,194.6c-0.3,1.5-1.8,2.4-3.3,2.1c-1.5-0.3-2.4-1.7-2.2-3.2c0.3-1.5,1.7-2.5,3.3-2.2
+ C541.8,191.6,542.7,193.1,542.4,194.6z"/>
+ <path class="st1" d="M556.7,198.6c-0.5,1.5-2,2.2-3.4,1.8c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,2-2.3,3.5-1.9
+ C556.3,195.5,557.1,197.1,556.7,198.6z"/>
+ <path class="st1" d="M570.5,203.8c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.6-1.5
+ C570.4,200.7,571.1,202.4,570.5,203.8z"/>
+ <path class="st1" d="M583.7,210.4c-0.8,1.4-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C584,207.3,584.5,209.1,583.7,210.4z"/>
+ <path class="st1" d="M596.3,218.2c-0.9,1.3-2.5,1.5-3.8,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C596.8,215.2,597.1,216.9,596.3,218.2z"/>
+ <path class="st1" d="M608,227.1c-1,1.2-2.7,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C608.9,224.2,609,226,608,227.1z"/>
+ <path class="st1" d="M618.9,237.2c-1.1,1.1-2.8,1-3.9,0c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.1,3.9-0.1
+ C620,234.3,620,236.1,618.9,237.2z"/>
+ <path class="st1" d="M628.8,248.2c-1.2,1-2.9,0.8-3.9-0.3c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C630.1,245.4,629.9,247.2,628.8,248.2z"/>
+ <path class="st1" d="M637.5,260.1c-1.3,0.8-3,0.5-3.8-0.7c-0.9-1.2-0.6-2.9,0.7-3.8c1.2-0.9,3-0.6,3.9,0.7
+ C639.2,257.5,638.8,259.2,637.5,260.1z"/>
+ <path class="st1" d="M645.1,272.7c-1.3,0.7-3,0.2-3.8-1.1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C647,270.3,646.5,272,645.1,272.7z"/>
+ <path class="st1" d="M651.5,286.1c-1.4,0.6-3-0.1-3.7-1.4c-0.6-1.4,0-3,1.4-3.6c1.4-0.6,3,0,3.7,1.4
+ C653.6,283.9,652.9,285.5,651.5,286.1z"/>
+ <path class="st1" d="M656.6,300c-1.5,0.4-3-0.3-3.5-1.8c-0.5-1.4,0.3-3,1.7-3.5c1.4-0.5,3,0.3,3.5,1.8
+ C658.8,298,658.1,299.5,656.6,300z"/>
+ <path class="st1" d="M660.3,314.3c-1.5,0.3-3-0.6-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C662.7,312.5,661.8,314,660.3,314.3z"/>
+ <path class="st1" d="M662.6,328.9c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.8,3.1,2.4
+ C665.2,327.3,664.1,328.7,662.6,328.9z"/>
+ <path class="st1" d="M663.5,343.6c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C666.2,342.3,665,343.6,663.5,343.6z"/>
+ <path class="st1" d="M368.6,334c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5-0.1-2.7-1.4-2.6-2.9
+ C365.7,335,367,333.8,368.6,334z"/>
+ <path class="st1" d="M370.6,319.4c1.5,0.3,2.5,1.7,2.2,3.2c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.2-2.5-1.6-2.2-3.2
+ C367.6,320.1,369.1,319.1,370.6,319.4z"/>
+ <path class="st1" d="M374.1,305.2c1.5,0.5,2.3,2,1.9,3.4c-0.4,1.4-1.9,2.3-3.4,1.9c-1.5-0.4-2.3-1.9-1.9-3.4
+ C371.1,305.6,372.6,304.7,374.1,305.2z"/>
+ <path class="st1" d="M379.1,291.4c1.4,0.6,2.1,2.2,1.6,3.6c-0.5,1.4-2.1,2.1-3.6,1.5c-1.4-0.5-2.1-2.1-1.6-3.6
+ C376.1,291.5,377.7,290.8,379.1,291.4z"/>
+ <path class="st1" d="M385.6,278.2c1.3,0.7,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.7
+ C382.5,277.9,384.2,277.5,385.6,278.2z"/>
+ <path class="st1" d="M393.4,265.8c1.3,0.9,1.6,2.6,0.7,3.8c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.6-0.8-3.9
+ C390.3,265.2,392.1,264.9,393.4,265.8z"/>
+ <path class="st1" d="M402.4,254.2c1.1,1,1.3,2.7,0.3,3.9c-1,1.1-2.7,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9
+ C399.5,253.3,401.2,253.2,402.4,254.2z"/>
+ <path class="st1" d="M412.6,243.6c1,1.1,1,2.9-0.1,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1.1-2.8,0-3.9
+ C409.8,242.5,411.5,242.5,412.6,243.6z"/>
+ <path class="st1" d="M423.8,234.2c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C421.2,232.8,422.9,233,423.8,234.2z"/>
+ <path class="st1" d="M436,226c0.8,1.3,0.4,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.8-3.8
+ C433.5,224.2,435.2,224.6,436,226z"/>
+ <path class="st1" d="M448.9,219.1c0.7,1.4,0,3-1.3,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C446.6,217,448.3,217.7,448.9,219.1z"/>
+ <path class="st1" d="M462.5,213.6c0.5,1.4-0.2,3-1.7,3.5c-1.4,0.5-3-0.2-3.5-1.6c-0.6-1.4,0.2-3,1.6-3.6
+ C460.4,211.4,462,212.1,462.5,213.6z"/>
+ <path class="st1" d="M476.6,209.5c0.3,1.5-0.6,3-2,3.3c-1.4,0.3-2.9-0.5-3.3-2c-0.4-1.5,0.5-3,2-3.4
+ C474.8,207.1,476.3,208,476.6,209.5z"/>
+ <path class="st1" d="M491.1,207c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.2-1.5,0.8-3,2.3-3.2
+ C489.5,204.4,490.9,205.5,491.1,207z"/>
+ <path class="st1" d="M505.7,206c0,1.5-1.2,2.8-2.6,2.8c-1.5,0-2.8-1.1-2.8-2.7c-0.1-1.5,1.1-2.9,2.6-2.9
+ C504.4,203.2,505.7,204.5,505.7,206z"/>
+ <path class="st1" d="M520.4,206.5c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.6-1.4-2.6-2.9c0.1-1.5,1.4-2.7,2.9-2.6
+ C519.4,203.6,520.5,205,520.4,206.5z"/>
+ <path class="st1" d="M534.9,208.5c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.2c0.2-1.5,1.7-2.5,3.2-2.2
+ C534.2,205.6,535.2,207,534.9,208.5z"/>
+ <path class="st1" d="M549.2,212c-0.5,1.5-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C548.8,209,549.6,210.6,549.2,212z"/>
+ <path class="st1" d="M563,217c-0.6,1.4-2.2,2.1-3.6,1.6c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C562.9,214,563.6,215.6,563,217z"/>
+ <path class="st1" d="M576.2,223.5c-0.7,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.8-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.7-1.2
+ C576.4,220.4,576.9,222.2,576.2,223.5z"/>
+ <path class="st1" d="M588.6,231.3c-0.9,1.3-2.6,1.6-3.8,0.7c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.6-1.7,3.9-0.8
+ C589.2,228.3,589.5,230,588.6,231.3z"/>
+ <path class="st1" d="M600.2,240.3c-1,1.1-2.7,1.3-3.9,0.3c-1.1-1-1.3-2.6-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C601,237.4,601.2,239.2,600.2,240.3z"/>
+ <path class="st1" d="M610.7,250.5c-1.1,1-2.9,1-3.9-0.1c-1-1.1-1-2.8,0.1-3.9c1.1-1.1,2.8-1.1,3.9,0
+ C611.9,247.7,611.9,249.5,610.7,250.5z"/>
+ <path class="st1" d="M620.2,261.7c-1.2,0.9-3,0.7-3.9-0.5c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-1,2.9-0.8,3.9,0.5
+ C621.6,259.1,621.4,260.8,620.2,261.7z"/>
+ <path class="st1" d="M628.4,273.9c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.2-0.4-2.9,0.9-3.8c1.3-0.8,3-0.5,3.8,0.8
+ C630.1,271.4,629.7,273.1,628.4,273.9z"/>
+ <path class="st1" d="M635.3,286.8c-1.4,0.7-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.2
+ C637.3,284.5,636.7,286.2,635.3,286.8z"/>
+ <path class="st1" d="M640.8,300.5c-1.4,0.5-3-0.2-3.5-1.7c-0.5-1.4,0.2-3,1.6-3.5c1.4-0.6,3,0.2,3.6,1.6
+ C643,298.4,642.3,300,640.8,300.5z"/>
+ <path class="st1" d="M644.8,314.6c-1.5,0.3-3-0.6-3.3-2c-0.3-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.5,3.4,2
+ C647.3,312.7,646.3,314.2,644.8,314.6z"/>
+ <path class="st1" d="M647.4,329c-1.5,0.2-2.9-0.9-3.1-2.3c-0.2-1.5,0.8-2.9,2.3-3.1c1.5-0.2,3,0.8,3.2,2.3
+ C650,327.4,648.9,328.8,647.4,329z"/>
+ <path class="st1" d="M648.4,343.7c-1.5,0-2.8-1.2-2.8-2.6c0-1.5,1.1-2.8,2.7-2.9c1.5-0.1,2.9,1.1,2.9,2.6
+ C651.1,342.4,649.9,343.6,648.4,343.7z"/>
+ <path class="st1" d="M383.7,333.9c1.5,0.2,2.7,1.5,2.6,3c-0.1,1.5-1.4,2.6-3,2.6c-1.5-0.1-2.7-1.4-2.6-3
+ C380.9,334.9,382.2,333.7,383.7,333.9z"/>
+ <path class="st1" d="M386,319.2c1.5,0.3,2.4,1.8,2.1,3.3c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.3
+ C383,319.8,384.6,318.9,386,319.2z"/>
+ <path class="st1" d="M390.1,305c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2,2.2-3.5,1.8c-1.5-0.4-2.3-2-1.8-3.5
+ C387.1,305.2,388.6,304.4,390.1,305z"/>
+ <path class="st1" d="M395.8,291.3c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.7,1.4c-1.4-0.6-2-2.3-1.4-3.7
+ C392.7,291.2,394.4,290.6,395.8,291.3z"/>
+ <path class="st1" d="M403.1,278.4c1.3,0.8,1.7,2.5,0.9,3.8c-0.8,1.3-2.4,1.7-3.8,0.9c-1.3-0.8-1.8-2.5-0.9-3.8
+ C400.1,277.9,401.8,277.5,403.1,278.4z"/>
+ <path class="st1" d="M411.8,266.4c1.2,1,1.4,2.7,0.4,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C408.9,265.6,410.6,265.4,411.8,266.4z"/>
+ <path class="st1" d="M422,255.6c1.1,1.1,1,2.9-0.1,3.9c-1,1.1-2.8,1.1-3.9,0c-1.1-1-1.1-2.8,0-4
+ C419.1,254.4,420.9,254.5,422,255.6z"/>
+ <path class="st1" d="M433.3,246c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C430.6,244.5,432.3,244.7,433.3,246z"/>
+ <path class="st1" d="M445.6,237.8c0.8,1.3,0.3,3-1,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C443.1,236.1,444.9,236.5,445.6,237.8z"/>
+ <path class="st1" d="M458.9,231.2c0.6,1.4,0,3.1-1.4,3.7c-1.4,0.6-3,0-3.7-1.4c-0.7-1.4-0.1-3,1.4-3.7
+ C456.6,229.1,458.3,229.7,458.9,231.2z"/>
+ <path class="st1" d="M472.8,226.1c0.4,1.5-0.4,2.9-1.8,3.4c-1.4,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.3-3,1.8-3.5
+ C470.8,223.8,472.4,224.7,472.8,226.1z"/>
+ <path class="st1" d="M487.3,222.8c0.2,1.5-0.7,2.9-2.2,3.2c-1.5,0.2-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-3,2.2-3.3
+ C485.6,220.3,487,221.3,487.3,222.8z"/>
+ <path class="st1" d="M502,221.2c0.1,1.5-1.1,2.9-2.6,3c-1.5,0.1-2.8-1-3-2.6c-0.1-1.5,1-2.9,2.6-3
+ C500.6,218.5,501.9,219.6,502,221.2z"/>
+ <path class="st1" d="M516.8,221.4c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5,0-2.7-1.3-2.7-2.8c0-1.5,1.3-2.7,2.9-2.7
+ C515.8,218.5,516.9,219.8,516.8,221.4z"/>
+ <path class="st1" d="M531.5,223.2c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.6-2.3-3.2c0.2-1.5,1.7-2.6,3.2-2.3
+ C530.8,220.3,531.8,221.7,531.5,223.2z"/>
+ <path class="st1" d="M545.9,226.8c-0.5,1.4-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C545.5,223.8,546.4,225.3,545.9,226.8z"/>
+ <path class="st1" d="M559.8,232.1c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C559.7,229.1,560.4,230.7,559.8,232.1z"/>
+ <path class="st1" d="M572.9,239c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.8-2.4-1-3.8c0.7-1.3,2.4-1.8,3.8-1
+ C573.2,236,573.7,237.7,572.9,239z"/>
+ <path class="st1" d="M585.1,247.4c-0.9,1.2-2.7,1.4-3.8,0.5c-1.2-0.9-1.5-2.6-0.6-3.8c0.9-1.2,2.6-1.5,3.9-0.6
+ C585.8,244.5,586,246.2,585.1,247.4z"/>
+ <path class="st1" d="M596.2,257.2c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.2,2.8-1.2,3.9-0.1
+ C597.3,254.4,597.3,256.1,596.2,257.2z"/>
+ <path class="st1" d="M606.1,268.3c-1.2,1-2.9,0.7-3.9-0.4c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C607.5,265.5,607.3,267.3,606.1,268.3z"/>
+ <path class="st1" d="M614.7,280.4c-1.3,0.8-3,0.4-3.8-0.8c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.9,3-0.5,3.8,0.8
+ C616.3,277.8,616,279.6,614.7,280.4z"/>
+ <path class="st1" d="M621.7,293.4c-1.4,0.6-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.3
+ C623.7,291.1,623.1,292.8,621.7,293.4z"/>
+ <path class="st1" d="M627.1,307.2c-1.5,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.2-3,1.7-3.5c1.4-0.5,3.1,0.2,3.6,1.7
+ C629.4,305.1,628.6,306.7,627.1,307.2z"/>
+ <path class="st1" d="M630.9,321.5c-1.5,0.3-3-0.7-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C633.4,319.8,632.4,321.2,630.9,321.5z"/>
+ <path class="st1" d="M632.9,336.2c-1.5,0.1-2.9-1-3-2.5c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.5
+ C635.6,334.8,634.5,336.1,632.9,336.2z"/>
+ <path class="st1" d="M398.9,334c1.5,0.2,2.6,1.5,2.5,3c-0.1,1.5-1.4,2.6-3,2.5c-1.5-0.1-2.7-1.4-2.5-3
+ C396,334.9,397.4,333.8,398.9,334z"/>
+ <path class="st1" d="M401.5,319.5c1.5,0.4,2.4,1.8,2.1,3.3c-0.4,1.4-1.8,2.4-3.3,2.1c-1.5-0.3-2.5-1.8-2.1-3.3
+ C398.5,320.1,400,319.1,401.5,319.5z"/>
+ <path class="st1" d="M406,305.5c1.4,0.6,2.1,2.2,1.6,3.5c-0.5,1.4-2,2.1-3.5,1.6c-1.4-0.5-2.2-2.1-1.7-3.6
+ C403,305.7,404.6,304.9,406,305.5z"/>
+ <path class="st1" d="M412.3,292.3c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C409.2,292,411,291.5,412.3,292.3z"/>
+ <path class="st1" d="M420.4,279.9c1.2,0.9,1.5,2.6,0.6,3.8c-0.9,1.2-2.6,1.5-3.8,0.6c-1.3-0.9-1.6-2.6-0.7-3.9
+ C417.4,279.3,419.1,279,420.4,279.9z"/>
+ <path class="st1" d="M430,268.8c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C427.1,267.8,428.9,267.8,430,268.8z"/>
+ <path class="st1" d="M441,259.1c0.9,1.2,0.7,2.9-0.4,3.9c-1.2,0.9-2.8,0.8-3.9-0.4c-1-1.1-0.9-3,0.4-3.9
+ C438.3,257.7,440.1,257.9,441,259.1z"/>
+ <path class="st1" d="M453.2,250.9c0.8,1.3,0.3,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.8
+ C450.7,249.1,452.4,249.6,453.2,250.9z"/>
+ <path class="st1" d="M466.4,244.4c0.6,1.4-0.1,3-1.4,3.6c-1.3,0.6-3,0-3.6-1.4c-0.7-1.4,0-3,1.4-3.7
+ C464.1,242.3,465.8,243,466.4,244.4z"/>
+ <path class="st1" d="M480.3,239.7c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-2.9-0.4-3.4-1.9c-0.5-1.5,0.4-3,1.9-3.4
+ C478.4,237.4,479.9,238.2,480.3,239.7z"/>
+ <path class="st1" d="M494.7,237c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.3-1.5,0.8-3,2.3-3.2
+ C493.2,234.4,494.6,235.5,494.7,237z"/>
+ <path class="st1" d="M509.4,236.2c0,1.5-1.2,2.7-2.7,2.8c-1.5,0-2.7-1.2-2.8-2.7c-0.1-1.5,1.2-2.8,2.7-2.8
+ C508.2,233.3,509.4,234.6,509.4,236.2z"/>
+ <path class="st1" d="M524.1,237.3c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.5-1.5-2.4-3.1c0.1-1.5,1.5-2.7,3.1-2.4
+ C523.2,234.4,524.3,235.8,524.1,237.3z"/>
+ <path class="st1" d="M538.4,240.4c-0.4,1.5-1.9,2.3-3.3,1.9c-1.4-0.3-2.3-1.8-2-3.3c0.3-1.5,1.8-2.4,3.4-2.1
+ C538,237.4,538.9,238.9,538.4,240.4z"/>
+ <path class="st1" d="M552.3,245.3c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C552.2,242.2,552.9,243.9,552.3,245.3z"/>
+ <path class="st1" d="M565.3,252.1c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.7-2.4-1-3.8c0.7-1.4,2.4-1.8,3.8-1
+ C565.7,249.1,566.1,250.8,565.3,252.1z"/>
+ <path class="st1" d="M577.3,260.6c-1,1.2-2.7,1.4-3.9,0.5c-1.1-0.9-1.4-2.6-0.5-3.8c0.9-1.2,2.7-1.5,3.9-0.5
+ C578.1,257.6,578.3,259.4,577.3,260.6z"/>
+ <path class="st1" d="M588.1,270.5c-1.1,1-2.8,1-3.9,0c-1.1-1-1.1-2.8,0-3.9c1-1.1,2.8-1.1,3.9,0
+ C589.3,267.7,589.2,269.5,588.1,270.5z"/>
+ <path class="st1" d="M597.5,281.9c-1.3,0.9-2.9,0.6-3.8-0.5c-0.9-1.2-0.7-2.9,0.5-3.8c1.2-1,2.9-0.7,3.9,0.5
+ C599,279.2,598.7,281,597.5,281.9z"/>
+ <path class="st1" d="M605.3,294.3c-1.3,0.7-3,0.2-3.8-1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C607.1,291.9,606.6,293.6,605.3,294.3z"/>
+ <path class="st1" d="M611.3,307.7c-1.4,0.5-3-0.2-3.6-1.5c-0.5-1.4,0.1-3,1.5-3.6c1.4-0.6,3.1,0,3.6,1.5
+ C613.5,305.6,612.8,307.2,611.3,307.7z"/>
+ <path class="st1" d="M615.5,321.8c-1.5,0.3-3-0.6-3.3-2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.5,3.4,2
+ C617.9,320,617,321.5,615.5,321.8z"/>
+ <path class="st1" d="M617.8,336.3c-1.5,0.1-2.8-1-3-2.4c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.4
+ C620.5,334.8,619.3,336.2,617.8,336.3z"/>
+ <path class="st1" d="M414.2,333.8c1.5,0.2,2.5,1.6,2.3,3c-0.1,1.5-1.4,2.6-2.9,2.5c-1.5-0.1-2.7-1.5-2.6-3.1
+ C411.3,334.7,412.7,333.6,414.2,333.8z"/>
+ <path class="st1" d="M417.2,319.2c1.5,0.4,2.4,2,2,3.4c-0.4,1.4-1.9,2.3-3.4,2c-1.5-0.3-2.4-1.9-2-3.4
+ C414.3,319.7,415.8,318.8,417.2,319.2z"/>
+ <path class="st1" d="M422.6,305.4c1.4,0.7,2,2.3,1.3,3.6c-0.7,1.3-2.2,2-3.6,1.4c-1.4-0.6-2.2-2.3-1.4-3.7
+ C419.6,305.3,421.2,304.7,422.6,305.4z"/>
+ <path class="st1" d="M430,292.4c0.6,0.4,1,1.1,1.1,1.8c0.2,0.7,0.1,1.5-0.3,2.1c-0.8,1.3-2.5,1.7-3.8,0.9
+ c-1.3-0.8-1.7-2.5-0.9-3.9c0.4-0.7,1-1.1,1.7-1.3C428.6,291.9,429.4,292,430,292.4z"/>
+ <path class="st1" d="M439.4,280.9c1.1,1.1,1.2,2.8,0.2,3.9c-1,1.1-2.8,1.2-3.9,0.2c-1.2-1-1.3-2.7-0.2-3.9
+ C436.5,280,438.3,279.9,439.4,280.9z"/>
+ <path class="st1" d="M450.5,271c0.9,1.2,0.7,2.9-0.5,3.8c-1.2,0.9-2.8,0.9-3.8-0.3c-1-1.1-0.9-3,0.3-4
+ C447.8,269.5,449.5,269.7,450.5,271z"/>
+ <path class="st1" d="M462.9,262.7c0.7,1.3,0.3,3.1-1,3.8c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,1-3.8
+ C460.5,261,462.2,261.4,462.9,262.7z"/>
+ <path class="st1" d="M476.5,256.8c0.5,1.4-0.2,3-1.6,3.5c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.5S476,255.3,476.5,256.8z"
+ />
+ <path class="st1" d="M490.9,252.9c0.3,1.5-0.7,2.8-2.2,3.2c-1.4,0.4-2.9-0.5-3.3-2c-0.4-1.5,0.6-3,2.1-3.4
+ C489.1,250.3,490.6,251.4,490.9,252.9z"/>
+ <path class="st1" d="M505.7,251.4c0,1.5-1.1,2.8-2.6,2.9c-1.5,0.1-2.8-1.1-2.9-2.6c-0.1-1.5,1-2.8,2.6-2.9
+ C504.4,248.7,505.7,249.8,505.7,251.4z"/>
+ <path class="st1" d="M520.6,252.1c-0.2,1.5-1.6,2.5-3,2.3c-1.5-0.1-2.6-1.4-2.5-2.9c0.1-1.5,1.5-2.7,3.1-2.6
+ C519.7,249.2,520.8,250.6,520.6,252.1z"/>
+ <path class="st1" d="M535.1,255.2c-0.4,1.5-2,2.4-3.4,2c-1.4-0.4-2.3-1.9-2-3.4c0.3-1.5,1.9-2.4,3.4-2
+ C534.7,252.2,535.6,253.7,535.1,255.2z"/>
+ <path class="st1" d="M549,260.5c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.7-2-2.2-1.4-3.6c0.6-1.4,2.3-2.2,3.7-1.4
+ C549.1,257.5,549.7,259.2,549,260.5z"/>
+ <path class="st1" d="M561.9,267.9c-0.4,0.6-1.1,1-1.8,1.1c-0.7,0.2-1.5,0.1-2.1-0.3c-1.3-0.8-1.7-2.5-0.9-3.8
+ c0.8-1.3,2.5-1.7,3.9-0.9c0.7,0.4,1.1,1,1.3,1.7C562.5,266.5,562.4,267.3,561.9,267.9z"/>
+ <path class="st1" d="M573.5,277.3c-1.1,1.1-2.8,1.2-3.9,0.2c-1.1-1-1.2-2.8-0.2-3.9c1-1.2,2.7-1.3,3.9-0.2
+ C574.4,274.5,574.5,276.2,573.5,277.3z"/>
+ <path class="st1" d="M583.4,288.4c-1.2,0.9-2.9,0.7-3.8-0.5c-0.9-1.2-0.9-2.8,0.3-3.9c1.1-1,3-0.9,4,0.3
+ C584.9,285.7,584.6,287.5,583.4,288.4z"/>
+ <path class="st1" d="M591.6,300.8c-1.3,0.7-3.1,0.3-3.8-1c-0.8-1.3-0.3-3,0.9-3.8c1.3-0.8,3-0.4,3.8,1
+ C593.4,298.4,593,300.1,591.6,300.8z"/>
+ <path class="st1" d="M597.6,314.5c-1.4,0.5-3-0.2-3.5-1.6c-0.5-1.4,0.2-3,1.6-3.6c1.4-0.6,3,0.1,3.5,1.6
+ C599.8,312.3,599.1,314,597.6,314.5z"/>
+ <path class="st1" d="M601.5,328.8c-1.5,0.3-2.8-0.7-3.2-2.2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.6,3.4,2.1
+ C604.1,327,603,328.6,601.5,328.8z"/>
+ <path class="st1" d="M603,343.6c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.1,2.8,1,2.9,2.6
+ C605.7,342.3,604.5,343.6,603,343.6z"/>
+ <path class="st1" d="M429.4,334c1.5,0.2,2.6,1.6,2.3,3.1c-0.3,1.4-1.5,2.5-3,2.4c-1.5-0.1-2.8-1.5-2.5-3.1
+ C426.5,334.8,427.9,333.7,429.4,334z"/>
+ <path class="st1" d="M433,319.7c1.4,0.5,2.2,2,1.7,3.4c-0.4,1.4-1.9,2.2-3.3,1.8c-1.5-0.4-2.4-2-1.9-3.5
+ C430,320,431.6,319.2,433,319.7z"/>
+ <path class="st1" d="M439.1,306.3c1.3,0.8,1.7,2.4,1.1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C436,306,437.8,305.6,439.1,306.3z"/>
+ <path class="st1" d="M447.6,294.3c1.2,1,1.2,2.6,0.4,3.9c-0.9,1.2-2.6,1.4-3.8,0.5c-1.2-0.9-1.5-2.7-0.5-3.9
+ C444.6,293.4,446.5,293.3,447.6,294.3z"/>
+ <path class="st1" d="M458.2,284c0.5,0.6,0.7,1.3,0.6,2c-0.1,0.7-0.3,1.4-0.9,1.9c-1.1,1-2.8,0.9-3.9-0.2c-1-1.1-0.9-2.9,0.2-4
+ c0.6-0.5,1.3-0.8,2-0.7C457,283.1,457.7,283.4,458.2,284z"/>
+ <path class="st1" d="M470.4,275.9c0.7,1.3,0.3,3-1,3.8c-1.3,0.8-2.9,0.3-3.8-1c-0.8-1.3-0.4-3,1-3.8
+ C468,274.1,469.7,274.5,470.4,275.9z"/>
+ <path class="st1" d="M484,270.1c0.5,1.5-0.3,3.1-1.7,3.6c-1.4,0.5-3-0.2-3.5-1.7c-0.6-1.4,0.2-3,1.7-3.6
+ C482,267.9,483.5,268.7,484,270.1z"/>
+ <path class="st1" d="M498.4,267c0.2,1.5-0.9,2.9-2.3,3.2c-1.4,0.2-2.9-0.8-3.2-2.3c-0.3-1.5,0.7-2.9,2.3-3.1
+ C496.8,264.5,498.2,265.5,498.4,267z"/>
+ <path class="st1" d="M513.1,266.6c-0.1,1.5-1.4,2.7-2.8,2.6c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.6,1.2-2.8,2.8-2.7
+ C512,263.8,513.2,265.1,513.1,266.6z"/>
+ <path class="st1" d="M527.6,268.8c-0.4,1.5-1.8,2.4-3.3,2c-1.4-0.3-2.4-1.7-2.1-3.2c0.3-1.5,1.8-2.6,3.3-2.2
+ C527.1,265.8,528,267.3,527.6,268.8z"/>
+ <path class="st1" d="M541.5,273.7c-0.7,1.4-2.2,2-3.6,1.4c-1.4-0.5-2.1-2.1-1.5-3.5c0.5-1.4,2.2-2.2,3.7-1.6
+ C541.5,270.6,542.2,272.3,541.5,273.7z"/>
+ <path class="st1" d="M554.3,281c-0.9,1.3-2.5,1.5-3.8,0.7c-1.3-0.8-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C554.9,277.9,555.1,279.8,554.3,281z"/>
+ <path class="st1" d="M565.5,290.6c-1.1,1.1-2.8,1-3.9,0.1c-1.1-1-1.1-2.7-0.1-3.9c1-1.1,2.8-1.2,4-0.1
+ C566.6,287.7,566.6,289.5,565.5,290.6z"/>
+ <path class="st1" d="M574.7,302c-1.3,0.8-3,0.5-3.9-0.6c-0.9-1.2-0.6-2.9,0.6-3.8c1.2-0.9,3-0.7,3.9,0.6
+ C576.3,299.4,576,301.2,574.7,302z"/>
+ <path class="st1" d="M581.7,315c-1.4,0.6-3.1,0-3.7-1.3c-0.6-1.3,0-3,1.3-3.7c1.4-0.7,3-0.1,3.7,1.3
+ C583.7,312.8,583.1,314.4,581.7,315z"/>
+ <path class="st1" d="M586.2,329c-1.5,0.3-3-0.6-3.4-2c-0.4-1.4,0.5-2.9,2-3.4c1.5-0.4,3,0.5,3.4,2
+ C588.5,327.2,587.6,328.7,586.2,329z"/>
+ <path class="st1" d="M587.9,343.7c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.2,2.8,1,2.9,2.6
+ C590.6,342.3,589.4,343.6,587.9,343.7z"/>
+ <path class="st1" d="M444.7,334.2c1.5,0.3,2.5,1.7,2.3,3.1c-0.2,1.4-1.6,2.4-3.2,2.3c-1.5-0.1-2.6-1.5-2.3-3.1
+ C441.8,334.9,443.2,333.9,444.7,334.2z"/>
+ <path class="st1" d="M448.9,320.3c0.7,0.3,1.2,0.9,1.5,1.5c0.3,0.6,0.4,1.4,0.1,2c-0.5,1.3-2.1,2-3.5,1.6
+ c-1.4-0.5-2.2-2.1-1.6-3.6c0.3-0.7,0.8-1.3,1.4-1.6C447.4,320,448.2,320,448.9,320.3z"/>
+ <path class="st1" d="M456.2,307.8c1.2,0.9,1.5,2.6,0.7,3.7c-0.7,1.2-2.4,1.6-3.7,0.8c-1.3-0.8-1.7-2.5-0.9-3.9
+ C453.2,307.2,455,306.9,456.2,307.8z"/>
+ <path class="st1" d="M466,297.2c1,1.2,0.9,2.9-0.1,3.9c-1.1,0.9-2.8,0.9-3.9-0.1c-1.1-1.1-1.1-2.9,0.1-3.9
+ C463.3,295.9,465,296,466,297.2z"/>
+ <path class="st1" d="M478,289c0.7,1.3,0.3,3-1,3.7c-1.2,0.7-2.9,0.3-3.7-1c-0.8-1.3-0.4-3,0.9-3.8
+ C475.5,287.1,477.2,287.6,478,289z"/>
+ <path class="st1" d="M491.5,283.7c0.4,1.5-0.4,3-1.8,3.3c-1.3,0.5-2.9-0.3-3.4-1.7c-0.5-1.4,0.2-3,1.7-3.6
+ C489.5,281.3,491.1,282.3,491.5,283.7z"/>
+ <path class="st1" d="M505.8,281.6c0,1.5-1.1,2.8-2.5,2.9c-1.4,0-2.7-1-2.9-2.5c-0.2-1.5,0.9-3,2.5-3
+ C504.4,278.9,505.7,280,505.8,281.6z"/>
+ <path class="st1" d="M520.2,282.6c-0.3,1.5-1.7,2.5-3.1,2.3c-1.4-0.2-2.4-1.6-2.3-3.2c0.1-1.5,1.5-2.6,3.1-2.3
+ C519.5,279.7,520.5,281.1,520.2,282.6z"/>
+ <path class="st1" d="M534.1,286.8c-0.3,0.7-0.9,1.2-1.5,1.5c-0.6,0.3-1.4,0.4-2,0.1c-1.3-0.5-2-2.1-1.6-3.5
+ c0.5-1.4,2.1-2.2,3.6-1.6c0.7,0.3,1.3,0.8,1.6,1.4C534.4,285.4,534.4,286.1,534.1,286.8z"/>
+ <path class="st1" d="M546.6,294.1c-0.9,1.2-2.6,1.5-3.7,0.7c-1.2-0.7-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C547.2,291.1,547.5,292.9,546.6,294.1z"/>
+ <path class="st1" d="M557.2,303.9c-1.2,1-2.9,0.9-3.9-0.1c-0.9-1.1-0.9-2.8,0.1-3.9c1.1-1.1,2.9-1.1,3.9,0.1
+ C558.5,301.2,558.4,303,557.2,303.9z"/>
+ <path class="st1" d="M565.4,315.9c-1.3,0.7-3,0.3-3.7-1c-0.7-1.2-0.3-2.9,1-3.7c1.3-0.8,3-0.4,3.8,0.9
+ C567.3,313.5,566.8,315.2,565.4,315.9z"/>
+ <path class="st1" d="M570.7,329.4c-1.5,0.4-3-0.4-3.3-1.8c-0.5-1.3,0.3-2.9,1.7-3.4c1.4-0.5,3,0.2,3.6,1.7
+ C573,327.4,572.1,329,570.7,329.4z"/>
+ <path class="st1" d="M572.8,343.7c-1.5,0-2.8-1.1-2.9-2.5c0-1.4,1-2.7,2.5-2.9c1.5-0.2,3,0.9,3,2.5
+ C575.5,342.3,574.3,343.6,572.8,343.7z"/>
+ <path class="st1" d="M460.2,334c1.5,0.4,2.3,1.8,2.1,3.2c-0.2,1.4-1.6,2.4-3.1,2.2c-1.5-0.2-2.5-1.7-2.3-3.3
+ C457.1,334.5,458.7,333.6,460.2,334z"/>
+ <path class="st1" d="M465.9,320.4c1.3,0.8,1.7,2.4,1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.6-1.9-2.3-1.2-3.8
+ C462.9,320,464.6,319.6,465.9,320.4z"/>
+ <path class="st1" d="M475.4,309c1,1.2,1,2.9-0.1,3.8c-1,1-2.7,1.1-3.8,0.1c-1.1-1-1.2-2.8-0.1-4
+ C472.6,307.8,474.4,307.9,475.4,309z"/>
+ <path class="st1" d="M487.8,301c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.6-2.9,0.3-3.7-1.1c-0.8-1.3-0.3-3.1,1.1-3.8
+ C485.5,299,487.2,299.6,487.8,301z"/>
+ <path class="st1" d="M502,297c0.2,1.5-0.8,2.9-2.3,3.1c-1.4,0.2-2.8-0.6-3.2-2.1c-0.4-1.4,0.6-3.1,2.2-3.3
+ C500.4,294.4,501.8,295.5,502,297z"/>
+ <path class="st1" d="M516.8,297.3c-0.3,1.5-1.7,2.6-3.1,2.3c-1.4-0.2-2.5-1.4-2.4-3c0.1-1.5,1.5-2.8,3.1-2.5
+ C516,294.4,517.1,295.8,516.8,297.3z"/>
+ <path class="st1" d="M530.8,302c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.6-2-2.1-1.5-3.6c0.5-1.4,2.2-2.2,3.7-1.5
+ C530.9,299,531.5,300.7,530.8,302z"/>
+ <path class="st1" d="M542.8,310.6c-1.1,1.1-2.8,1.2-3.9,0.2c-1-1-1.3-2.6-0.3-3.9c0.9-1.2,2.8-1.5,4-0.3
+ C543.8,307.8,543.9,309.6,542.8,310.6z"/>
+ <path class="st1" d="M551.8,322.4c-1.3,0.7-3.1,0.3-3.8-0.9c-0.4-0.6-0.4-1.4-0.3-2c0.1-0.7,0.5-1.3,1.1-1.8
+ c0.6-0.4,1.4-0.6,2.1-0.4c0.7,0.2,1.3,0.6,1.8,1.3C553.5,320,553.1,321.7,551.8,322.4z"/>
+ <path class="st1" d="M556.8,336.3c-1.5,0.3-3-0.6-3.4-2c-0.3-1.4,0.5-2.9,1.9-3.4c1.5-0.5,3,0.4,3.4,2
+ C559.2,334.5,558.4,336,556.8,336.3z"/>
+ <path class="st1" d="M475.8,334.4c1.5,0.6,2.1,2,1.8,3.3c-0.3,1.3-1.8,2.2-3.3,1.9c-1.5-0.3-2.5-1.8-2-3.4
+ C472.7,334.6,474.4,333.9,475.8,334.4z"/>
+ <path class="st1" d="M483.4,322.2c1.1,1.1,1.2,2.8,0.3,3.8c-0.8,1.1-2.5,1.3-3.8,0.4c-1.3-0.9-1.5-2.6-0.5-3.9
+ C480.5,321.3,482.3,321.2,483.4,322.2z"/>
+ <path class="st1" d="M495.3,314.2c0.5,1.4,0,3-1.2,3.6c-1.2,0.5-2.8,0.2-3.6-1.2c-0.8-1.3-0.4-3.1,1.1-3.8
+ C493,312.1,494.7,312.7,495.3,314.2z"/>
+ <path class="st1" d="M509.4,311.7c-0.1,1.5-1.2,2.7-2.6,2.8c-0.7,0-1.3-0.2-1.8-0.7c-0.5-0.4-0.9-1.1-1-1.8
+ c-0.1-0.8,0.1-1.5,0.6-2.1c0.5-0.5,1.2-0.9,2-0.9C508.2,308.8,509.5,310.2,509.4,311.7z"/>
+ <path class="st1" d="M523.3,315.2c-0.7,1.4-2.2,1.9-3.5,1.5c-1.3-0.5-1.9-2.1-1.5-3.5c0.4-1.5,2-2.2,3.6-1.7
+ C523.4,312,524,313.8,523.3,315.2z"/>
+ <path class="st1" d="M534.6,324c-1.2,1-2.9,0.9-3.8-0.1c-1-0.9-1-2.6,0-3.8c1-1.2,2.8-1.2,4-0.1C535.9,321.2,535.8,323,534.6,324
+ z"/>
+ <path class="st1" d="M541.4,336.6c-0.7,0.2-1.5,0.1-2.1-0.2c-0.6-0.3-1.1-0.8-1.4-1.4c-0.4-1.3,0.2-2.8,1.5-3.5
+ c1.4-0.7,3.1,0,3.6,1.5c0.3,0.8,0.2,1.6-0.1,2.2C542.7,335.9,542.1,336.4,541.4,336.6z"/>
+ <path class="st1" d="M492.8,334.4c1.2,1,1.5,2.6,0.9,3.7c-0.3,0.6-0.8,1-1.5,1.2c-0.6,0.2-1.4,0.3-2.1,0
+ c-0.7-0.3-1.3-0.8-1.5-1.5c-0.2-0.7-0.2-1.6,0.3-2.4C489.8,333.8,491.6,333.4,492.8,334.4z"/>
+ <path class="st1" d="M505.7,327c0.2,1.5-0.8,2.9-2,3.2c-1.3,0.4-2.8-0.3-3.4-1.7c-0.7-1.4,0.1-3.1,1.9-3.7
+ C503.9,324.4,505.5,325.5,505.7,327z"/>
+ <path class="st1" d="M520,330.8c-1,1.2-2.6,1.5-3.7,0.9c-0.6-0.3-1-0.8-1.2-1.5c-0.2-0.6-0.3-1.4,0-2.1c0.3-0.7,0.8-1.3,1.5-1.5
+ c0.7-0.2,1.6-0.2,2.4,0.3C520.6,327.7,520.9,329.6,520,330.8z"/>
+ <path class="st1" d="M527.4,343.6c-1.5,0.2-2.9-0.8-3.2-2c-0.4-1.3,0.3-2.8,1.7-3.4c1.4-0.7,3.1,0.1,3.7,1.9
+ C530,341.8,528.9,343.4,527.4,343.6z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle class="st2" cx="1749.4" cy="114.7" r="47.5"/>
+ <path class="st3" d="M1752.1,184.8h-5.5v-48.1c0-1.5,1.2-2.8,2.8-2.8l0,0c1.5,0,2.8,1.2,2.8,2.8V184.8z"/>
+ </g>
+ <g>
+ <path class="st0" d="M1840.1,162.2L1840.1,162.2c-15.1,0-27.4-12.3-27.4-27.4V94.6c0-15.1,12.3-27.4,27.4-27.4l0,0
+ c15.1,0,27.4,12.3,27.4,27.4v40.2C1867.5,150,1855.3,162.2,1840.1,162.2z"/>
+ <path class="st3" d="M1842.9,184.8h-5.5v-48.1c0-1.5,1.2-2.8,2.8-2.8l0,0c1.5,0,2.8,1.2,2.8,2.8V184.8z"/>
+ </g>
+ <path class="st4" d="M1973.9,346.2L1973.9,346.2c0-95.6-77.5-173.1-173.1-173.1h0c-95.6,0-173.1,77.5-173.1,173.1v0H1973.9z"/>
+ <path class="st4" d="M1627.8,346.2L1627.8,346.2c0-95.6-77.5-173.1-173.1-173.1h0c-95.6,0-173.1,77.5-173.1,173.1v0H1627.8z"/>
+ <polygon class="st3" points="2320.1,0 2320.1,346.2 1973.9,346.2 "/>
+ <g>
+ <path class="st1" d="M1284.7,333.8c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.3,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.7-2.9
+ C1281.9,334.9,1283.2,333.7,1284.7,333.8z"/>
+ <path class="st1" d="M1286.4,319c1.5,0.2,2.5,1.6,2.3,3.1c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.6-1.6-2.4-3.2
+ C1283.4,319.9,1284.9,318.8,1286.4,319z"/>
+ <path class="st1" d="M1289.4,304.5c1.5,0.4,2.4,1.9,2.1,3.3c-0.3,1.5-1.8,2.4-3.3,2.1c-1.5-0.3-2.4-1.8-2.1-3.3
+ C1286.4,305,1287.9,304.1,1289.4,304.5z"/>
+ <path class="st1" d="M1293.7,290.2c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2.1,2.2-3.5,1.8c-1.5-0.5-2.2-2-1.7-3.5
+ C1290.7,290.5,1292.2,289.7,1293.7,290.2z"/>
+ <path class="st1" d="M1299.2,276.4c1.4,0.6,2,2.3,1.4,3.6c-0.6,1.4-2.2,2.1-3.6,1.5c-1.4-0.6-2.1-2.2-1.5-3.7
+ C1296.1,276.4,1297.8,275.8,1299.2,276.4z"/>
+ <path class="st1" d="M1305.8,263.1c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.4,1.9-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C1302.8,262.9,1304.5,262.4,1305.8,263.1z"/>
+ <path class="st1" d="M1313.6,250.5c1.2,0.9,1.6,2.6,0.8,3.9c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.5-0.8-3.9
+ C1310.6,250,1312.4,249.6,1313.6,250.5z"/>
+ <path class="st1" d="M1322.5,238.6c1.2,1,1.4,2.7,0.5,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C1319.6,237.8,1321.3,237.6,1322.5,238.6z"/>
+ <path class="st1" d="M1332.4,227.5c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C1329.6,226.4,1331.3,226.4,1332.4,227.5z"/>
+ <path class="st1" d="M1343.2,217.3c1,1.2,0.9,2.9-0.3,3.9c-1.2,1-2.9,0.9-3.9-0.2c-1-1.1-1-2.9,0.2-3.9
+ C1340.5,216,1342.2,216.1,1343.2,217.3z"/>
+ <path class="st1" d="M1354.9,208c0.9,1.2,0.6,3-0.6,3.8c-1.2,0.9-2.9,0.7-3.9-0.5c-0.9-1.2-0.7-3,0.5-3.9
+ C1352.2,206.5,1354,206.8,1354.9,208z"/>
+ <path class="st1" d="M1367.3,199.8c0.8,1.3,0.3,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C1364.8,198.1,1366.5,198.5,1367.3,199.8z"/>
+ <path class="st1" d="M1380.4,192.7c0.7,1.4,0.1,3.1-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.3-0.2-3,1.2-3.7
+ C1378,190.8,1379.7,191.4,1380.4,192.7z"/>
+ <path class="st1" d="M1394,186.9c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.6-3-0.1-3.6-1.5c-0.6-1.4,0.1-3,1.6-3.6
+ C1391.9,184.7,1393.5,185.4,1394,186.9z"/>
+ <path class="st1" d="M1408.1,182.2c0.4,1.5-0.4,3-1.9,3.4c-1.5,0.4-3-0.4-3.5-1.8c-0.5-1.4,0.3-3.1,1.9-3.5
+ C1406.2,179.9,1407.7,180.7,1408.1,182.2z"/>
+ <path class="st1" d="M1422.6,178.8c0.3,1.5-0.7,2.9-2.2,3.2c-1.5,0.3-2.9-0.6-3.3-2.1c-0.3-1.5,0.6-3,2.2-3.3
+ C1420.8,176.2,1422.3,177.3,1422.6,178.8z"/>
+ <path class="st1" d="M1437.3,176.6c0.1,1.5-0.9,2.9-2.4,3.1c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1
+ C1435.8,174,1437.2,175.1,1437.3,176.6z"/>
+ <path class="st1" d="M1452.2,175.8c0,1.5-1.2,2.8-2.7,2.8c-1.5,0-2.8-1.2-2.9-2.7c-0.1-1.5,1.1-2.8,2.7-2.8
+ C1450.9,173,1452.1,174.2,1452.2,175.8z"/>
+ <path class="st1" d="M1467,176.2c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.7-1.3-2.6-2.9c0.1-1.5,1.4-2.8,2.9-2.7
+ C1466,173.3,1467.1,174.7,1467,176.2z"/>
+ <path class="st1" d="M1481.8,177.9c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.1c0.2-1.5,1.6-2.6,3.2-2.4
+ C1481,174.9,1482,176.4,1481.8,177.9z"/>
+ <path class="st1" d="M1496.4,180.9c-0.4,1.5-1.9,2.4-3.3,2.1c-1.5-0.3-2.4-1.8-2.1-3.3c0.3-1.5,1.8-2.4,3.3-2.1
+ C1495.8,177.9,1496.7,179.4,1496.4,180.9z"/>
+ <path class="st1" d="M1510.6,185.1c-0.5,1.4-2.1,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.8-3.5c0.4-1.5,2-2.2,3.5-1.7
+ C1510.3,182.1,1511.1,183.7,1510.6,185.1z"/>
+ <path class="st1" d="M1524.4,190.6c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C1524.4,187.6,1525.1,189.2,1524.4,190.6z"/>
+ <path class="st1" d="M1537.7,197.3c-0.8,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.4-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C1538,194.2,1538.5,196,1537.7,197.3z"/>
+ <path class="st1" d="M1550.4,205.1c-0.9,1.2-2.6,1.6-3.9,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C1550.9,202.1,1551.2,203.8,1550.4,205.1z"/>
+ <path class="st1" d="M1562.3,214c-1,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9c0.9-1.2,2.7-1.4,3.9-0.5
+ C1563,211.1,1563.3,212.8,1562.3,214z"/>
+ <path class="st1" d="M1573.4,223.9c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.2,3.9-0.1
+ C1574.4,221,1574.5,222.8,1573.4,223.9z"/>
+ <path class="st1" d="M1583.6,234.7c-1.2,1-2.9,0.9-3.9-0.3c-1-1.2-0.9-2.9,0.2-3.9c1.1-1,2.9-1,3.9,0.2
+ C1584.9,231.9,1584.7,233.7,1583.6,234.7z"/>
+ <path class="st1" d="M1592.8,246.4c-1.2,0.9-3,0.6-3.8-0.6c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-0.9,3-0.7,3.9,0.5
+ C1594.3,243.7,1594.1,245.5,1592.8,246.4z"/>
+ <path class="st1" d="M1601,258.8c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.8,3-0.4,3.9,0.9
+ C1602.8,256.2,1602.3,258,1601,258.8z"/>
+ <path class="st1" d="M1608.1,271.8c-1.4,0.7-3.1,0.1-3.7-1.2c-0.7-1.3-0.1-3,1.2-3.7c1.3-0.7,3-0.2,3.7,1.2
+ C1610,269.5,1609.5,271.2,1608.1,271.8z"/>
+ <path class="st1" d="M1614,285.5c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.5-3.6c1.4-0.6,3,0.1,3.6,1.6
+ C1616.1,283.3,1615.4,285,1614,285.5z"/>
+ <path class="st1" d="M1618.6,299.6c-1.5,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.8-3.5c1.4-0.5,3.1,0.3,3.5,1.9
+ C1621,297.6,1620.1,299.2,1618.6,299.6z"/>
+ <path class="st1" d="M1622.1,314.1c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.3,3,0.6,3.3,2.2
+ C1624.6,312.3,1623.6,313.8,1622.1,314.1z"/>
+ <path class="st1" d="M1624.3,328.8c-1.5,0.1-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.9,3.1,2.4
+ C1626.9,327.2,1625.8,328.6,1624.3,328.8z"/>
+ <path class="st1" d="M1625.1,343.6c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C1627.8,342.3,1626.6,343.6,1625.1,343.6z"/>
+ <path class="st1" d="M1299.9,333.9c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.8-1.4-2.6-2.9
+ C1297,334.9,1298.4,333.8,1299.9,333.9z"/>
+ <path class="st1" d="M1301.7,319.2c1.5,0.3,2.5,1.7,2.2,3.2c-0.2,1.5-1.6,2.5-3.1,2.3c-1.5-0.2-2.6-1.6-2.4-3.2
+ C1298.8,320,1300.2,319,1301.7,319.2z"/>
+ <path class="st1" d="M1305,304.8c1.5,0.4,2.3,1.9,1.9,3.4c-0.3,1.5-1.8,2.4-3.3,2c-1.5-0.3-2.4-1.9-2.1-3.4
+ C1301.9,305.3,1303.5,304.4,1305,304.8z"/>
+ <path class="st1" d="M1309.6,290.8c1.4,0.6,2.1,2.1,1.6,3.5c-0.5,1.4-2,2.2-3.5,1.7c-1.4-0.5-2.2-2.1-1.7-3.6
+ C1306.5,290.9,1308.1,290.2,1309.6,290.8z"/>
+ <path class="st1" d="M1315.5,277.2c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.6,1.3c-1.4-0.6-2-2.3-1.4-3.7
+ C1312.4,277.1,1314.1,276.5,1315.5,277.2z"/>
+ <path class="st1" d="M1322.7,264.3c1.3,0.8,1.7,2.5,0.9,3.8c-0.7,1.3-2.4,1.7-3.8,1c-1.3-0.8-1.8-2.5-1-3.8
+ C1319.6,263.9,1321.4,263.5,1322.7,264.3z"/>
+ <path class="st1" d="M1331.1,252.1c1.2,0.9,1.4,2.6,0.6,3.9c-0.9,1.2-2.6,1.5-3.8,0.6c-1.2-0.9-1.5-2.6-0.6-3.9
+ C1328.1,251.4,1329.9,251.2,1331.1,252.1z"/>
+ <path class="st1" d="M1340.6,240.8c1.1,1,1.2,2.7,0.2,3.9c-1,1.1-2.7,1.2-3.9,0.3c-1.2-1-1.3-2.8-0.3-3.9
+ C1337.6,239.8,1339.5,239.8,1340.6,240.8z"/>
+ <path class="st1" d="M1351.1,230.4c1,1.1,0.9,2.9-0.2,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1-2.9,0.1-3.9
+ C1348.3,229.2,1350.1,229.3,1351.1,230.4z"/>
+ <path class="st1" d="M1362.6,221.1c0.9,1.2,0.6,2.9-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.7-2.9,0.5-3.9
+ C1359.9,219.6,1361.7,219.9,1362.6,221.1z"/>
+ <path class="st1" d="M1374.9,212.9c0.8,1.3,0.4,3-0.9,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.9-3.8
+ C1372.3,211.1,1374.1,211.6,1374.9,212.9z"/>
+ <path class="st1" d="M1387.9,205.9c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C1385.5,203.9,1387.2,204.5,1387.9,205.9z"/>
+ <path class="st1" d="M1401.5,200.2c0.5,1.4-0.2,3-1.6,3.6c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.6
+ C1399.4,198,1401,198.7,1401.5,200.2z"/>
+ <path class="st1" d="M1415.6,195.8c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-3-0.4-3.4-1.9c-0.4-1.5,0.4-3,1.9-3.4
+ C1413.7,193.4,1415.2,194.3,1415.6,195.8z"/>
+ <path class="st1" d="M1430.1,192.8c0.2,1.5-0.8,3-2.2,3.2c-1.5,0.3-2.9-0.7-3.2-2.2c-0.3-1.5,0.7-2.9,2.2-3.2
+ C1428.4,190.3,1429.9,191.3,1430.1,192.8z"/>
+ <path class="st1" d="M1444.8,191.2c0.1,1.5-1,2.9-2.5,3c-1.5,0.1-2.8-1-3-2.6c-0.2-1.5,1-2.8,2.5-3
+ C1443.4,188.5,1444.7,189.6,1444.8,191.2z"/>
+ <path class="st1" d="M1459.6,190.9c-0.1,1.5-1.3,2.7-2.8,2.7c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.5,1.2-2.8,2.8-2.7
+ C1458.4,188.1,1459.6,189.4,1459.6,190.9z"/>
+ <path class="st1" d="M1474.3,192.1c-0.2,1.5-1.6,2.6-3,2.4c-1.5-0.2-2.6-1.5-2.5-3c0.1-1.5,1.5-2.7,3.1-2.5
+ C1473.4,189.2,1474.5,190.6,1474.3,192.1z"/>
+ <path class="st1" d="M1488.9,194.6c-0.3,1.5-1.8,2.4-3.3,2.1c-1.5-0.3-2.4-1.7-2.2-3.2c0.3-1.5,1.7-2.5,3.3-2.2
+ C1488.2,191.6,1489.2,193.1,1488.9,194.6z"/>
+ <path class="st1" d="M1503.1,198.6c-0.5,1.5-2,2.2-3.4,1.8c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,2-2.3,3.5-1.9
+ C1502.8,195.5,1503.6,197.1,1503.1,198.6z"/>
+ <path class="st1" d="M1516.9,203.8c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.6-1.5
+ C1516.9,200.7,1517.5,202.4,1516.9,203.8z"/>
+ <path class="st1" d="M1530.2,210.4c-0.8,1.4-2.4,1.8-3.7,1.1c-1.3-0.7-1.9-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.8-1.2
+ C1530.5,207.3,1530.9,209.1,1530.2,210.4z"/>
+ <path class="st1" d="M1542.7,218.2c-0.9,1.3-2.5,1.5-3.8,0.8c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.5-1.7,3.9-0.8
+ C1543.3,215.1,1543.6,216.9,1542.7,218.2z"/>
+ <path class="st1" d="M1554.5,227.1c-1,1.2-2.7,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C1555.3,224.2,1555.5,226,1554.5,227.1z"/>
+ <path class="st1" d="M1565.4,237.2c-1.1,1.1-2.8,1-3.9,0c-1.1-1-1.1-2.8-0.1-3.9c1-1.1,2.8-1.1,3.9-0.1
+ C1566.5,234.3,1566.4,236.1,1565.4,237.2z"/>
+ <path class="st1" d="M1575.2,248.2c-1.2,1-2.9,0.8-3.9-0.3c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C1576.6,245.4,1576.4,247.2,1575.2,248.2z"/>
+ <path class="st1" d="M1584,260.1c-1.3,0.8-3,0.5-3.8-0.7c-0.9-1.2-0.6-2.9,0.7-3.8c1.2-0.9,3-0.6,3.9,0.7
+ C1585.6,257.5,1585.3,259.2,1584,260.1z"/>
+ <path class="st1" d="M1591.6,272.7c-1.3,0.7-3,0.2-3.8-1.1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C1593.5,270.3,1593,272,1591.6,272.7z"/>
+ <path class="st1" d="M1598,286.1c-1.4,0.6-3-0.1-3.7-1.4c-0.6-1.4,0-3,1.4-3.6c1.4-0.6,3,0,3.7,1.4
+ C1600,283.9,1599.4,285.5,1598,286.1z"/>
+ <path class="st1" d="M1603,300c-1.5,0.4-3-0.3-3.5-1.8c-0.5-1.4,0.3-3,1.7-3.5c1.4-0.5,3,0.3,3.5,1.8
+ C1605.3,298,1604.5,299.5,1603,300z"/>
+ <path class="st1" d="M1606.7,314.3c-1.5,0.3-3-0.6-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C1609.2,312.5,1608.2,314,1606.7,314.3z"/>
+ <path class="st1" d="M1609.1,328.9c-1.5,0.2-2.9-0.9-3.1-2.4c-0.2-1.5,0.9-2.9,2.4-3.1c1.5-0.2,2.9,0.8,3.1,2.4
+ C1611.6,327.3,1610.6,328.7,1609.1,328.9z"/>
+ <path class="st1" d="M1610,343.6c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.2-2.8,2.7-2.9c1.5-0.1,2.8,1.1,2.8,2.7
+ C1612.7,342.3,1611.5,343.6,1610,343.6z"/>
+ <path class="st1" d="M1315,334c1.5,0.1,2.7,1.4,2.6,2.9c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5-0.1-2.7-1.4-2.6-2.9
+ C1312.2,335,1313.5,333.8,1315,334z"/>
+ <path class="st1" d="M1317,319.4c1.5,0.3,2.5,1.7,2.2,3.2c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.2-2.5-1.6-2.2-3.2
+ C1314.1,320.1,1315.5,319.1,1317,319.4z"/>
+ <path class="st1" d="M1320.6,305.2c1.5,0.5,2.3,2,1.9,3.4c-0.4,1.4-1.9,2.3-3.4,1.9c-1.5-0.4-2.3-1.9-1.9-3.4
+ C1317.6,305.6,1319.1,304.7,1320.6,305.2z"/>
+ <path class="st1" d="M1325.6,291.4c1.4,0.6,2.1,2.2,1.6,3.6c-0.5,1.4-2.1,2.1-3.6,1.5c-1.4-0.5-2.1-2.1-1.6-3.6
+ C1322.5,291.5,1324.1,290.8,1325.6,291.4z"/>
+ <path class="st1" d="M1332,278.2c1.3,0.7,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.7
+ C1328.9,277.9,1330.7,277.5,1332,278.2z"/>
+ <path class="st1" d="M1339.8,265.8c1.3,0.9,1.6,2.6,0.7,3.8c-0.8,1.3-2.5,1.6-3.8,0.8c-1.3-0.8-1.7-2.6-0.8-3.9
+ C1336.8,265.2,1338.6,264.9,1339.8,265.8z"/>
+ <path class="st1" d="M1348.9,254.2c1.1,1,1.3,2.7,0.3,3.9c-1,1.1-2.6,1.3-3.9,0.4c-1.2-0.9-1.4-2.7-0.4-3.9
+ C1345.9,253.3,1347.7,253.2,1348.9,254.2z"/>
+ <path class="st1" d="M1359,243.6c1,1.1,1,2.9-0.1,3.9c-1.1,1-2.8,1-3.9-0.1c-1.1-1.1-1.1-2.8,0-3.9
+ C1356.2,242.5,1358,242.5,1359,243.6z"/>
+ <path class="st1" d="M1370.3,234.2c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C1367.6,232.8,1369.4,233,1370.3,234.2z"/>
+ <path class="st1" d="M1382.4,226c0.8,1.3,0.4,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.5-3,0.8-3.8
+ C1379.9,224.2,1381.6,224.6,1382.4,226z"/>
+ <path class="st1" d="M1395.4,219.1c0.7,1.4,0,3-1.3,3.7c-1.3,0.7-3,0.1-3.7-1.2c-0.7-1.4-0.2-3,1.2-3.7
+ C1393.1,217,1394.8,217.7,1395.4,219.1z"/>
+ <path class="st1" d="M1409,213.6c0.5,1.4-0.2,3-1.7,3.5c-1.4,0.5-3-0.2-3.5-1.6c-0.6-1.4,0.2-3,1.6-3.6
+ C1406.9,211.4,1408.5,212.1,1409,213.6z"/>
+ <path class="st1" d="M1423.1,209.5c0.3,1.5-0.6,3-2,3.3c-1.4,0.3-2.9-0.5-3.3-2c-0.4-1.5,0.5-3.1,2-3.4
+ C1421.3,207.1,1422.8,208,1423.1,209.5z"/>
+ <path class="st1" d="M1437.6,207c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.2-1.5,0.8-3,2.3-3.2
+ C1436,204.4,1437.4,205.5,1437.6,207z"/>
+ <path class="st1" d="M1452.2,206c0,1.5-1.2,2.8-2.7,2.8c-1.5,0-2.8-1.1-2.8-2.7c-0.1-1.5,1.1-2.9,2.6-2.9
+ C1450.9,203.2,1452.2,204.5,1452.2,206z"/>
+ <path class="st1" d="M1466.9,206.5c-0.1,1.5-1.4,2.7-2.9,2.6c-1.5-0.1-2.6-1.4-2.6-2.9c0.1-1.5,1.4-2.7,2.9-2.6
+ C1465.9,203.6,1467,205,1466.9,206.5z"/>
+ <path class="st1" d="M1481.4,208.5c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.2c0.2-1.5,1.7-2.5,3.2-2.2
+ C1480.7,205.6,1481.7,207,1481.4,208.5z"/>
+ <path class="st1" d="M1495.7,212c-0.5,1.5-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C1495.3,209,1496.1,210.6,1495.7,212z"/>
+ <path class="st1" d="M1509.5,217c-0.6,1.4-2.2,2.1-3.6,1.6c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C1509.4,214,1510.1,215.6,1509.5,217z"/>
+ <path class="st1" d="M1522.6,223.5c-0.7,1.3-2.4,1.8-3.7,1.1c-1.3-0.7-1.8-2.3-1.2-3.7c0.7-1.4,2.4-1.9,3.7-1.2
+ C1522.9,220.4,1523.4,222.2,1522.6,223.5z"/>
+ <path class="st1" d="M1535.1,231.3c-0.9,1.3-2.6,1.6-3.8,0.7c-1.3-0.8-1.6-2.5-0.8-3.8c0.8-1.3,2.6-1.7,3.9-0.8
+ C1535.6,228.3,1535.9,230,1535.1,231.3z"/>
+ <path class="st1" d="M1546.6,240.3c-1,1.1-2.7,1.3-3.9,0.3c-1.1-1-1.3-2.6-0.4-3.9c0.9-1.2,2.7-1.4,3.9-0.4
+ C1547.5,237.4,1547.6,239.2,1546.6,240.3z"/>
+ <path class="st1" d="M1557.2,250.5c-1.1,1-2.9,1-3.9-0.1c-1-1.1-1-2.8,0.1-3.9c1.1-1.1,2.8-1.1,3.9,0
+ C1558.4,247.7,1558.3,249.5,1557.2,250.5z"/>
+ <path class="st1" d="M1566.7,261.7c-1.2,0.9-3,0.7-3.9-0.5c-0.9-1.2-0.7-2.9,0.5-3.9c1.2-1,2.9-0.8,3.9,0.5
+ C1568.1,259.1,1567.9,260.8,1566.7,261.7z"/>
+ <path class="st1" d="M1574.9,273.9c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.2-0.4-2.9,0.9-3.8c1.3-0.8,3-0.5,3.8,0.8
+ C1576.6,271.4,1576.2,273.1,1574.9,273.9z"/>
+ <path class="st1" d="M1581.8,286.8c-1.4,0.7-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.2
+ C1583.8,284.5,1583.1,286.2,1581.8,286.8z"/>
+ <path class="st1" d="M1587.3,300.5c-1.4,0.5-3-0.2-3.5-1.7c-0.5-1.4,0.2-3,1.6-3.5c1.4-0.6,3,0.2,3.6,1.6
+ C1589.5,298.4,1588.7,300,1587.3,300.5z"/>
+ <path class="st1" d="M1591.3,314.6c-1.5,0.3-3-0.6-3.3-2c-0.3-1.4,0.5-2.9,2-3.3c1.5-0.4,3.1,0.5,3.4,2
+ C1593.7,312.7,1592.8,314.2,1591.3,314.6z"/>
+ <path class="st1" d="M1593.8,329c-1.5,0.2-2.9-0.9-3.1-2.3c-0.2-1.5,0.8-2.9,2.3-3.1c1.5-0.2,3,0.8,3.2,2.3
+ C1596.4,327.4,1595.4,328.8,1593.8,329z"/>
+ <path class="st1" d="M1594.9,343.7c-1.5,0-2.8-1.2-2.8-2.7c0-1.5,1.1-2.8,2.7-2.9c1.5-0.1,2.9,1.1,2.9,2.6
+ C1597.6,342.4,1596.4,343.6,1594.9,343.7z"/>
+ <path class="st1" d="M1330.2,333.9c1.5,0.2,2.7,1.5,2.6,3c-0.1,1.5-1.4,2.6-3,2.6c-1.5-0.1-2.7-1.4-2.6-3
+ C1327.3,334.9,1328.7,333.7,1330.2,333.9z"/>
+ <path class="st1" d="M1332.5,319.2c1.5,0.3,2.4,1.8,2.1,3.3c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.7-2.2-3.3
+ C1329.5,319.8,1331,318.9,1332.5,319.2z"/>
+ <path class="st1" d="M1336.5,305c1.4,0.5,2.2,2.1,1.7,3.5c-0.5,1.4-2,2.2-3.5,1.8c-1.5-0.4-2.3-2-1.8-3.5
+ C1333.5,305.2,1335.1,304.4,1336.5,305z"/>
+ <path class="st1" d="M1342.2,291.3c1.4,0.7,1.9,2.3,1.3,3.7c-0.6,1.4-2.3,2-3.7,1.4c-1.4-0.6-2-2.3-1.4-3.7
+ C1339.2,291.2,1340.8,290.6,1342.2,291.3z"/>
+ <path class="st1" d="M1349.5,278.4c1.3,0.8,1.7,2.5,0.9,3.8c-0.8,1.3-2.4,1.7-3.8,0.9c-1.3-0.8-1.8-2.5-0.9-3.8
+ C1346.5,277.9,1348.3,277.5,1349.5,278.4z"/>
+ <path class="st1" d="M1358.3,266.4c1.2,1,1.4,2.7,0.4,3.9c-0.9,1.2-2.7,1.4-3.9,0.5c-1.2-0.9-1.4-2.7-0.5-3.9
+ C1355.4,265.6,1357.1,265.4,1358.3,266.4z"/>
+ <path class="st1" d="M1368.4,255.6c1.1,1.1,1,2.9-0.1,3.9c-1,1.1-2.8,1.1-3.9,0c-1.1-1-1.1-2.8,0-4
+ C1365.6,254.4,1367.4,254.5,1368.4,255.6z"/>
+ <path class="st1" d="M1379.7,246c0.9,1.2,0.7,3-0.5,3.9c-1.2,0.9-2.9,0.7-3.9-0.5c-1-1.2-0.8-2.9,0.5-3.9
+ C1377.1,244.5,1378.8,244.7,1379.7,246z"/>
+ <path class="st1" d="M1392.1,237.8c0.8,1.3,0.3,3-1,3.8c-1.3,0.8-3,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.9
+ C1389.6,236.1,1391.3,236.5,1392.1,237.8z"/>
+ <path class="st1" d="M1405.3,231.2c0.6,1.4,0,3.1-1.4,3.7c-1.4,0.6-3,0-3.7-1.4c-0.7-1.4-0.1-3,1.4-3.7
+ C1403.1,229.1,1404.7,229.7,1405.3,231.2z"/>
+ <path class="st1" d="M1419.3,226.1c0.4,1.5-0.4,2.9-1.8,3.4c-1.4,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.3-3,1.8-3.5
+ C1417.3,223.8,1418.9,224.7,1419.3,226.1z"/>
+ <path class="st1" d="M1433.7,222.8c0.2,1.5-0.7,2.9-2.2,3.2c-1.5,0.2-2.9-0.7-3.2-2.2c-0.3-1.5,0.6-3,2.2-3.3
+ C1432,220.3,1433.5,221.3,1433.7,222.8z"/>
+ <path class="st1" d="M1448.5,221.2c0.1,1.5-1.1,2.9-2.6,3c-1.5,0.1-2.8-1-3-2.6c-0.1-1.5,1-2.9,2.6-3
+ C1447.1,218.5,1448.4,219.6,1448.5,221.2z"/>
+ <path class="st1" d="M1463.3,221.4c-0.1,1.5-1.4,2.6-2.9,2.6c-1.5,0-2.7-1.3-2.7-2.8c0-1.5,1.3-2.7,2.9-2.7
+ C1462.2,218.5,1463.4,219.8,1463.3,221.4z"/>
+ <path class="st1" d="M1478,223.2c-0.3,1.5-1.7,2.5-3.2,2.2c-1.5-0.3-2.5-1.6-2.3-3.2c0.2-1.5,1.7-2.6,3.2-2.3
+ C1477.3,220.3,1478.3,221.7,1478,223.2z"/>
+ <path class="st1" d="M1492.4,226.8c-0.5,1.4-2,2.3-3.4,1.9c-1.4-0.4-2.3-1.9-1.9-3.4c0.4-1.5,1.9-2.3,3.4-1.9
+ C1492,223.8,1492.8,225.3,1492.4,226.8z"/>
+ <path class="st1" d="M1506.2,232.1c-0.6,1.4-2.3,2-3.6,1.4c-1.4-0.6-2.1-2.2-1.5-3.6c0.6-1.4,2.2-2.1,3.7-1.5
+ C1506.2,229.1,1506.9,230.7,1506.2,232.1z"/>
+ <path class="st1" d="M1519.3,239c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.8-2.4-1-3.8c0.7-1.3,2.4-1.8,3.8-1
+ C1519.7,236,1520.1,237.7,1519.3,239z"/>
+ <path class="st1" d="M1531.5,247.4c-0.9,1.2-2.7,1.4-3.8,0.5c-1.2-0.9-1.5-2.6-0.6-3.8c0.9-1.2,2.6-1.5,3.9-0.6
+ C1532.3,244.5,1532.5,246.2,1531.5,247.4z"/>
+ <path class="st1" d="M1542.7,257.2c-1.1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.1-2.8-0.1-3.9c1-1.2,2.8-1.2,3.9-0.1
+ C1543.7,254.4,1543.8,256.1,1542.7,257.2z"/>
+ <path class="st1" d="M1552.6,268.3c-1.2,1-2.9,0.7-3.9-0.4c-1-1.1-0.8-2.9,0.3-3.9c1.1-1,2.9-0.9,3.9,0.3
+ C1554,265.5,1553.8,267.3,1552.6,268.3z"/>
+ <path class="st1" d="M1561.1,280.4c-1.3,0.8-3,0.4-3.8-0.8c-0.8-1.3-0.4-3,0.8-3.8c1.3-0.9,3-0.5,3.8,0.8
+ C1562.8,277.8,1562.4,279.6,1561.1,280.4z"/>
+ <path class="st1" d="M1568.2,293.4c-1.4,0.6-3,0-3.7-1.3c-0.7-1.3-0.1-3,1.2-3.7c1.4-0.7,3-0.2,3.7,1.3
+ C1570.2,291.1,1569.5,292.8,1568.2,293.4z"/>
+ <path class="st1" d="M1573.6,307.2c-1.5,0.5-3-0.3-3.5-1.7c-0.5-1.4,0.2-3,1.7-3.5c1.4-0.5,3.1,0.2,3.6,1.7
+ C1575.8,305.1,1575.1,306.7,1573.6,307.2z"/>
+ <path class="st1" d="M1577.4,321.5c-1.5,0.3-3-0.7-3.3-2.1c-0.3-1.5,0.6-2.9,2.1-3.3c1.5-0.4,3,0.6,3.3,2.1
+ C1579.9,319.8,1578.9,321.2,1577.4,321.5z"/>
+ <path class="st1" d="M1579.4,336.2c-1.5,0.1-2.9-1-3-2.5c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.5
+ C1582.1,334.8,1580.9,336.1,1579.4,336.2z"/>
+ <path class="st1" d="M1345.4,334c1.5,0.2,2.6,1.5,2.5,3c-0.1,1.5-1.4,2.6-3,2.5c-1.5-0.1-2.7-1.4-2.5-3
+ C1342.4,334.9,1343.8,333.8,1345.4,334z"/>
+ <path class="st1" d="M1347.9,319.5c1.5,0.4,2.4,1.8,2.1,3.3c-0.4,1.4-1.8,2.4-3.3,2.1c-1.5-0.3-2.5-1.8-2.1-3.3
+ C1345,320.1,1346.5,319.1,1347.9,319.5z"/>
+ <path class="st1" d="M1352.5,305.5c1.4,0.6,2.1,2.2,1.6,3.5c-0.5,1.4-2,2.1-3.5,1.6c-1.4-0.5-2.2-2.1-1.7-3.6
+ C1349.4,305.7,1351,304.9,1352.5,305.5z"/>
+ <path class="st1" d="M1358.8,292.3c1.3,0.8,1.8,2.4,1.1,3.7c-0.7,1.3-2.3,1.8-3.7,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C1355.7,292,1357.5,291.5,1358.8,292.3z"/>
+ <path class="st1" d="M1366.8,279.9c1.2,0.9,1.5,2.6,0.6,3.8c-0.9,1.2-2.6,1.5-3.8,0.6c-1.3-0.9-1.6-2.6-0.7-3.9
+ C1363.9,279.3,1365.6,279,1366.8,279.9z"/>
+ <path class="st1" d="M1376.4,268.8c1.1,1.1,1.1,2.8,0.1,3.9c-1,1.1-2.8,1.1-3.9,0.1c-1.1-1-1.2-2.8-0.1-3.9
+ C1373.6,267.8,1375.4,267.8,1376.4,268.8z"/>
+ <path class="st1" d="M1387.4,259.1c0.9,1.2,0.7,2.9-0.4,3.9c-1.2,0.9-2.8,0.8-3.9-0.4c-1-1.1-0.9-3,0.4-3.9
+ C1384.8,257.7,1386.5,257.9,1387.4,259.1z"/>
+ <path class="st1" d="M1399.6,250.9c0.8,1.3,0.3,3-0.9,3.8c-1.2,0.8-2.9,0.4-3.8-0.9c-0.8-1.3-0.4-3,0.9-3.8
+ C1397.2,249.1,1398.9,249.6,1399.6,250.9z"/>
+ <path class="st1" d="M1412.8,244.4c0.6,1.4-0.1,3-1.4,3.6c-1.3,0.6-3,0-3.6-1.4c-0.7-1.4,0-3,1.4-3.7
+ C1410.6,242.3,1412.2,243,1412.8,244.4z"/>
+ <path class="st1" d="M1426.8,239.7c0.4,1.5-0.5,3-1.9,3.4c-1.4,0.4-2.9-0.4-3.4-1.9c-0.5-1.5,0.4-3,1.9-3.4
+ C1424.8,237.4,1426.4,238.2,1426.8,239.7z"/>
+ <path class="st1" d="M1441.2,237c0.2,1.5-0.9,2.9-2.3,3.1c-1.5,0.2-2.9-0.8-3.1-2.3c-0.3-1.5,0.8-3,2.3-3.2
+ C1439.6,234.4,1441,235.5,1441.2,237z"/>
+ <path class="st1" d="M1455.9,236.2c0,1.5-1.2,2.7-2.7,2.8c-1.5,0-2.7-1.2-2.8-2.7c-0.1-1.5,1.2-2.8,2.7-2.8
+ C1454.6,233.3,1455.9,234.6,1455.9,236.2z"/>
+ <path class="st1" d="M1470.5,237.3c-0.2,1.5-1.6,2.6-3.1,2.4c-1.5-0.2-2.5-1.5-2.4-3.1c0.1-1.5,1.5-2.7,3.1-2.4
+ C1469.7,234.4,1470.7,235.8,1470.5,237.3z"/>
+ <path class="st1" d="M1484.9,240.4c-0.4,1.5-1.9,2.3-3.3,1.9c-1.4-0.3-2.3-1.8-2-3.3c0.3-1.5,1.8-2.4,3.4-2.1
+ C1484.4,237.4,1485.3,238.9,1484.9,240.4z"/>
+ <path class="st1" d="M1498.7,245.3c-0.6,1.4-2.2,2-3.6,1.5c-1.4-0.5-2.1-2.1-1.5-3.6c0.5-1.4,2.1-2.1,3.6-1.6
+ C1498.7,242.2,1499.3,243.9,1498.7,245.3z"/>
+ <path class="st1" d="M1511.8,252.1c-0.8,1.3-2.5,1.8-3.8,1c-1.3-0.7-1.7-2.4-1-3.8c0.7-1.4,2.4-1.8,3.8-1
+ C1512.1,249.1,1512.6,250.8,1511.8,252.1z"/>
+ <path class="st1" d="M1523.8,260.6c-1,1.2-2.7,1.4-3.9,0.5c-1.1-0.9-1.4-2.6-0.5-3.8c0.9-1.2,2.7-1.5,3.9-0.5
+ C1524.5,257.6,1524.8,259.4,1523.8,260.6z"/>
+ <path class="st1" d="M1534.6,270.5c-1.1,1-2.8,1-3.9,0c-1.1-1-1.1-2.8,0-3.9c1-1.1,2.8-1.1,3.9,0
+ C1535.7,267.7,1535.7,269.5,1534.6,270.5z"/>
+ <path class="st1" d="M1543.9,281.9c-1.3,0.9-2.9,0.6-3.8-0.5c-0.9-1.2-0.7-2.9,0.5-3.8c1.2-1,2.9-0.7,3.9,0.5
+ C1545.5,279.2,1545.2,281,1543.9,281.9z"/>
+ <path class="st1" d="M1551.7,294.3c-1.3,0.7-3,0.2-3.8-1c-0.7-1.3-0.3-3,1-3.8c1.3-0.8,3-0.3,3.8,1
+ C1553.6,291.9,1553.1,293.6,1551.7,294.3z"/>
+ <path class="st1" d="M1557.8,307.7c-1.4,0.5-3-0.2-3.6-1.5c-0.5-1.4,0.1-3,1.5-3.6c1.4-0.6,3.1,0,3.6,1.5
+ C1559.9,305.6,1559.2,307.2,1557.8,307.7z"/>
+ <path class="st1" d="M1562,321.8c-1.5,0.3-3-0.6-3.3-2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.5,3.4,2
+ C1564.4,320,1563.5,321.5,1562,321.8z"/>
+ <path class="st1" d="M1564.3,336.3c-1.5,0.1-2.8-1-3-2.4c-0.2-1.5,0.9-2.8,2.4-3c1.5-0.2,2.9,0.9,3.1,2.4
+ C1567,334.8,1565.8,336.2,1564.3,336.3z"/>
+ <path class="st1" d="M1360.7,333.8c1.5,0.2,2.5,1.6,2.3,3c-0.1,1.5-1.4,2.6-2.9,2.5c-1.5-0.1-2.7-1.5-2.6-3.1
+ C1357.7,334.7,1359.2,333.6,1360.7,333.8z"/>
+ <path class="st1" d="M1363.7,319.2c1.5,0.4,2.4,2,2,3.4c-0.4,1.4-1.9,2.3-3.4,2c-1.5-0.3-2.4-1.9-2-3.4
+ C1360.7,319.7,1362.2,318.8,1363.7,319.2z"/>
+ <path class="st1" d="M1369.1,305.4c1.4,0.7,2,2.3,1.3,3.6c-0.7,1.3-2.2,2-3.6,1.4c-1.4-0.6-2.2-2.3-1.4-3.7
+ C1366,305.3,1367.7,304.7,1369.1,305.4z"/>
+ <path class="st1" d="M1376.5,292.4c0.6,0.4,1,1.1,1.1,1.8c0.2,0.7,0.1,1.5-0.3,2.1c-0.8,1.3-2.5,1.7-3.8,0.9
+ c-1.3-0.8-1.7-2.5-0.9-3.9c0.4-0.7,1-1.1,1.7-1.3C1375.1,291.9,1375.8,292,1376.5,292.4z"/>
+ <path class="st1" d="M1385.9,280.9c1.1,1.1,1.2,2.8,0.2,3.9c-1,1.1-2.8,1.2-3.9,0.2c-1.2-1-1.3-2.7-0.2-3.9
+ C1383,280,1384.8,279.9,1385.9,280.9z"/>
+ <path class="st1" d="M1396.9,271c0.9,1.2,0.7,2.9-0.5,3.8c-1.2,0.9-2.8,0.9-3.8-0.3c-1-1.1-0.9-3,0.3-4
+ C1394.2,269.5,1396,269.7,1396.9,271z"/>
+ <path class="st1" d="M1409.4,262.7c0.7,1.3,0.3,3.1-1,3.8c-1.3,0.8-3,0.3-3.8-0.9c-0.8-1.3-0.4-3,1-3.8
+ C1406.9,261,1408.6,261.4,1409.4,262.7z"/>
+ <path class="st1" d="M1423,256.8c0.5,1.4-0.2,3-1.6,3.5c-1.4,0.5-3-0.2-3.6-1.6c-0.6-1.4,0.1-3,1.6-3.5
+ C1420.9,254.6,1422.5,255.3,1423,256.8z"/>
+ <path class="st1" d="M1437.4,252.9c0.3,1.5-0.7,2.8-2.2,3.2c-1.4,0.4-2.9-0.5-3.3-2c-0.4-1.5,0.6-3,2.1-3.4
+ C1435.6,250.3,1437.1,251.4,1437.4,252.9z"/>
+ <path class="st1" d="M1452.2,251.4c0,1.5-1.1,2.8-2.6,2.9c-1.5,0.1-2.8-1.1-2.9-2.6c-0.1-1.5,1-2.8,2.6-2.9
+ C1450.8,248.7,1452.1,249.8,1452.2,251.4z"/>
+ <path class="st1" d="M1467,252.1c-0.2,1.5-1.6,2.5-3,2.3c-1.5-0.1-2.6-1.4-2.5-2.9c0.1-1.5,1.5-2.7,3.1-2.6
+ C1466.1,249.2,1467.2,250.6,1467,252.1z"/>
+ <path class="st1" d="M1481.6,255.2c-0.4,1.5-2,2.4-3.4,2c-1.4-0.4-2.3-1.9-2-3.4c0.3-1.5,1.9-2.4,3.4-2
+ C1481.1,252.2,1482,253.7,1481.6,255.2z"/>
+ <path class="st1" d="M1495.5,260.5c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.7-2-2.2-1.4-3.6c0.6-1.4,2.3-2.2,3.7-1.4
+ C1495.5,257.5,1496.1,259.2,1495.5,260.5z"/>
+ <path class="st1" d="M1508.4,267.9c-0.4,0.6-1.1,1-1.8,1.1c-0.7,0.2-1.5,0.1-2.1-0.3c-1.3-0.8-1.7-2.5-0.9-3.8
+ c0.8-1.3,2.5-1.7,3.9-0.9c0.7,0.4,1.1,1,1.3,1.7C1509,266.5,1508.8,267.3,1508.4,267.9z"/>
+ <path class="st1" d="M1519.9,277.3c-1.1,1.1-2.8,1.2-3.9,0.2c-1.1-1-1.2-2.8-0.2-3.9c1-1.2,2.7-1.3,3.9-0.2
+ C1520.9,274.5,1521,276.2,1519.9,277.3z"/>
+ <path class="st1" d="M1529.9,288.4c-1.2,0.9-2.9,0.7-3.8-0.5c-0.9-1.2-0.9-2.8,0.3-3.8c1.1-1,3-0.9,4,0.3
+ C1531.3,285.7,1531.1,287.5,1529.9,288.4z"/>
+ <path class="st1" d="M1538.1,300.8c-1.3,0.7-3.1,0.3-3.8-1c-0.8-1.3-0.3-3,0.9-3.8s3-0.4,3.8,1
+ C1539.9,298.4,1539.4,300.1,1538.1,300.8z"/>
+ <path class="st1" d="M1544.1,314.5c-1.4,0.5-3-0.2-3.5-1.6c-0.5-1.4,0.2-3,1.6-3.6c1.4-0.6,3,0.1,3.5,1.6
+ C1546.2,312.3,1545.5,314,1544.1,314.5z"/>
+ <path class="st1" d="M1548,328.8c-1.5,0.3-2.8-0.7-3.2-2.2c-0.4-1.4,0.5-2.9,2-3.3c1.5-0.4,3,0.6,3.4,2.1
+ C1550.6,327,1549.4,328.6,1548,328.8z"/>
+ <path class="st1" d="M1549.5,343.6c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.1,2.8,1,2.9,2.6
+ C1552.2,342.3,1551,343.6,1549.5,343.6z"/>
+ <path class="st1" d="M1375.9,334c1.5,0.2,2.6,1.6,2.3,3.1c-0.3,1.4-1.5,2.5-3,2.4c-1.5-0.1-2.8-1.5-2.5-3.1
+ C1373,334.8,1374.4,333.7,1375.9,334z"/>
+ <path class="st1" d="M1379.5,319.7c1.4,0.5,2.2,2.1,1.7,3.4c-0.4,1.4-1.9,2.2-3.3,1.8c-1.5-0.4-2.4-2-1.9-3.5
+ C1376.4,320,1378,319.2,1379.5,319.7z"/>
+ <path class="st1" d="M1385.6,306.3c1.3,0.8,1.7,2.4,1.1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.7-1.9-2.4-1.2-3.8
+ C1382.5,306,1384.3,305.6,1385.6,306.3z"/>
+ <path class="st1" d="M1394.1,294.3c1.2,1,1.2,2.6,0.4,3.9c-0.9,1.2-2.6,1.4-3.8,0.5c-1.2-0.9-1.5-2.7-0.5-3.9
+ C1391.1,293.4,1393,293.3,1394.1,294.3z"/>
+ <path class="st1" d="M1404.6,284c0.5,0.6,0.7,1.3,0.6,2c-0.1,0.7-0.3,1.4-0.9,1.9c-1.1,1-2.8,0.9-3.9-0.2c-1-1.1-0.9-2.9,0.2-4
+ c0.6-0.5,1.3-0.8,2-0.7C1403.5,283.1,1404.2,283.4,1404.6,284z"/>
+ <path class="st1" d="M1416.9,275.9c0.7,1.3,0.3,3-1,3.8c-1.3,0.8-2.9,0.3-3.8-1c-0.8-1.3-0.4-3,1-3.8
+ C1414.5,274.1,1416.2,274.5,1416.9,275.9z"/>
+ <path class="st1" d="M1430.5,270.1c0.5,1.5-0.3,3.1-1.7,3.6c-1.4,0.5-3-0.2-3.5-1.7c-0.6-1.4,0.2-3,1.7-3.6
+ C1428.4,267.9,1430,268.7,1430.5,270.1z"/>
+ <path class="st1" d="M1444.8,267c0.2,1.5-0.9,2.9-2.3,3.2c-1.4,0.2-2.9-0.8-3.2-2.3c-0.3-1.5,0.7-2.9,2.3-3.1
+ C1443.2,264.5,1444.7,265.5,1444.8,267z"/>
+ <path class="st1" d="M1459.6,266.6c-0.1,1.5-1.4,2.7-2.8,2.6c-1.5-0.1-2.7-1.3-2.7-2.8c0-1.6,1.2-2.8,2.8-2.7
+ C1458.5,263.8,1459.7,265.1,1459.6,266.6z"/>
+ <path class="st1" d="M1474.1,268.8c-0.4,1.5-1.8,2.4-3.3,2c-1.4-0.3-2.4-1.7-2.1-3.2c0.3-1.5,1.8-2.6,3.3-2.2
+ C1473.5,265.8,1474.5,267.3,1474.1,268.8z"/>
+ <path class="st1" d="M1488,273.7c-0.7,1.4-2.2,2-3.6,1.4c-1.4-0.5-2.1-2.1-1.5-3.5c0.5-1.4,2.2-2.2,3.7-1.6
+ C1488,270.6,1488.6,272.3,1488,273.7z"/>
+ <path class="st1" d="M1500.7,281c-0.9,1.3-2.5,1.5-3.8,0.7c-1.3-0.8-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C1501.4,277.9,1501.6,279.8,1500.7,281z"/>
+ <path class="st1" d="M1511.9,290.6c-1.1,1.1-2.8,1-3.9,0.1c-1.1-1-1.1-2.7-0.1-3.9c1-1.1,2.8-1.2,4-0.1
+ C1513.1,287.7,1513,289.5,1511.9,290.6z"/>
+ <path class="st1" d="M1521.2,302c-1.3,0.8-3,0.5-3.9-0.6c-0.9-1.2-0.6-2.9,0.6-3.8c1.2-0.9,3-0.7,3.9,0.6
+ C1522.8,299.4,1522.5,301.2,1521.2,302z"/>
+ <path class="st1" d="M1528.2,315c-1.4,0.6-3.1,0-3.7-1.3c-0.6-1.3,0-3,1.3-3.7c1.4-0.7,3-0.1,3.7,1.3
+ C1530.2,312.8,1529.6,314.4,1528.2,315z"/>
+ <path class="st1" d="M1532.6,329c-1.5,0.3-3-0.6-3.4-2c-0.4-1.4,0.5-2.9,2-3.4c1.5-0.4,3,0.5,3.4,2
+ C1535,327.2,1534.1,328.7,1532.6,329z"/>
+ <path class="st1" d="M1534.4,343.7c-1.5,0-2.8-1.1-2.9-2.6c-0.1-1.5,1.1-2.8,2.6-2.9c1.5-0.2,2.8,1,2.9,2.6
+ C1537.1,342.3,1535.9,343.6,1534.4,343.7z"/>
+ <path class="st1" d="M1391.1,334.2c1.5,0.3,2.5,1.7,2.3,3.1c-0.2,1.4-1.6,2.4-3.2,2.3c-1.5-0.1-2.6-1.5-2.3-3.1
+ C1388.2,334.9,1389.6,333.9,1391.1,334.2z"/>
+ <path class="st1" d="M1395.4,320.3c0.7,0.3,1.2,0.9,1.5,1.5c0.3,0.6,0.4,1.4,0.1,2c-0.5,1.3-2.1,2-3.5,1.6
+ c-1.4-0.5-2.2-2.1-1.6-3.6c0.3-0.7,0.8-1.3,1.4-1.6C1393.9,320,1394.7,320,1395.4,320.3z"/>
+ <path class="st1" d="M1402.7,307.8c1.2,0.9,1.5,2.6,0.7,3.7c-0.7,1.2-2.4,1.6-3.7,0.8c-1.3-0.8-1.7-2.5-0.9-3.9
+ C1399.7,307.2,1401.4,306.9,1402.7,307.8z"/>
+ <path class="st1" d="M1412.5,297.2c1,1.2,0.9,2.9-0.1,3.9c-1.1,0.9-2.8,0.9-3.9-0.1c-1.1-1.1-1.1-2.8,0.1-3.9
+ C1409.7,295.9,1411.5,296,1412.5,297.2z"/>
+ <path class="st1" d="M1424.4,289c0.7,1.3,0.3,3-1,3.7c-1.2,0.7-2.9,0.3-3.7-1c-0.8-1.3-0.4-3,0.9-3.8
+ C1422,287.1,1423.7,287.6,1424.4,289z"/>
+ <path class="st1" d="M1437.9,283.7c0.4,1.5-0.4,3-1.8,3.3c-1.3,0.5-2.9-0.3-3.4-1.7c-0.5-1.4,0.2-3,1.7-3.6
+ C1436,281.3,1437.5,282.3,1437.9,283.7z"/>
+ <path class="st1" d="M1452.2,281.6c0,1.5-1.1,2.8-2.5,2.9c-1.4,0-2.7-1-2.9-2.5c-0.2-1.5,0.9-3,2.5-3
+ C1450.9,278.9,1452.2,280,1452.2,281.6z"/>
+ <path class="st1" d="M1466.7,282.6c-0.3,1.5-1.7,2.5-3.1,2.3c-1.4-0.2-2.4-1.6-2.3-3.2c0.1-1.5,1.5-2.6,3.1-2.3
+ C1465.9,279.7,1467,281.1,1466.7,282.6z"/>
+ <path class="st1" d="M1480.5,286.8c-0.3,0.7-0.9,1.2-1.5,1.5c-0.6,0.3-1.4,0.4-2,0.1c-1.3-0.5-2-2.1-1.6-3.5
+ c0.5-1.4,2.1-2.2,3.6-1.6c0.7,0.3,1.3,0.8,1.6,1.4C1480.8,285.4,1480.8,286.1,1480.5,286.8z"/>
+ <path class="st1" d="M1493,294.1c-0.9,1.2-2.6,1.5-3.7,0.7c-1.2-0.7-1.6-2.4-0.8-3.7c0.8-1.3,2.5-1.7,3.9-0.9
+ C1493.7,291.1,1494,292.9,1493,294.1z"/>
+ <path class="st1" d="M1503.7,303.9c-1.2,1-2.9,0.9-3.9-0.1c-0.9-1.1-0.9-2.8,0.1-3.9c1.1-1.1,2.8-1.1,3.9,0.1
+ C1504.9,301.2,1504.8,303,1503.7,303.9z"/>
+ <path class="st1" d="M1511.9,315.9c-1.3,0.7-3,0.3-3.7-1c-0.7-1.2-0.3-2.9,1-3.7c1.3-0.8,3-0.4,3.8,0.9
+ C1513.7,313.5,1513.2,315.2,1511.9,315.9z"/>
+ <path class="st1" d="M1517.1,329.4c-1.5,0.4-3-0.4-3.3-1.8c-0.5-1.3,0.3-2.9,1.7-3.4c1.4-0.5,3,0.2,3.6,1.7
+ C1519.5,327.4,1518.6,329,1517.1,329.4z"/>
+ <path class="st1" d="M1519.3,343.7c-1.5,0-2.8-1.1-2.9-2.5c0-1.4,1-2.7,2.5-2.9c1.5-0.2,3,0.9,3,2.5
+ C1522,342.3,1520.8,343.6,1519.3,343.7z"/>
+ <path class="st1" d="M1406.7,334c1.5,0.4,2.3,1.8,2.1,3.2c-0.2,1.4-1.6,2.4-3.1,2.2c-1.5-0.2-2.5-1.7-2.3-3.3
+ C1403.6,334.5,1405.2,333.6,1406.7,334z"/>
+ <path class="st1" d="M1412.4,320.4c1.3,0.8,1.7,2.4,1,3.7c-0.6,1.3-2.3,1.8-3.6,1.2c-1.4-0.6-1.9-2.3-1.2-3.8
+ C1409.3,320,1411.1,319.6,1412.4,320.4z"/>
+ <path class="st1" d="M1421.9,309c1,1.2,1,2.9-0.1,3.8c-1,1-2.7,1.1-3.8,0.1c-1.1-1-1.2-2.8-0.1-4
+ C1419.1,307.8,1420.9,307.9,1421.9,309z"/>
+ <path class="st1" d="M1434.3,301c0.6,1.4,0.1,3-1.2,3.7c-1.3,0.6-2.9,0.3-3.7-1.1c-0.8-1.3-0.3-3.1,1.1-3.8
+ C1431.9,299,1433.6,299.6,1434.3,301z"/>
+ <path class="st1" d="M1448.5,297c0.2,1.5-0.8,2.9-2.3,3.1c-1.4,0.2-2.8-0.6-3.2-2.1c-0.4-1.4,0.6-3.1,2.2-3.3
+ C1446.9,294.4,1448.3,295.5,1448.5,297z"/>
+ <path class="st1" d="M1463.3,297.3c-0.3,1.5-1.7,2.6-3.1,2.3c-1.4-0.2-2.5-1.4-2.4-3c0.1-1.5,1.5-2.8,3.1-2.5
+ C1462.4,294.4,1463.5,295.8,1463.3,297.3z"/>
+ <path class="st1" d="M1477.3,302c-0.7,1.4-2.3,2-3.6,1.3c-1.3-0.6-2-2.1-1.5-3.6c0.5-1.4,2.2-2.2,3.7-1.5
+ C1477.4,299,1478,300.7,1477.3,302z"/>
+ <path class="st1" d="M1489.3,310.6c-1.1,1.1-2.8,1.2-3.9,0.2c-1-1-1.3-2.6-0.3-3.9c0.9-1.2,2.8-1.5,4-0.3
+ C1490.2,307.8,1490.3,309.6,1489.3,310.6z"/>
+ <path class="st1" d="M1498.2,322.4c-1.3,0.7-3.1,0.3-3.8-0.9c-0.4-0.6-0.4-1.4-0.3-2c0.1-0.7,0.5-1.3,1.1-1.8
+ c0.6-0.4,1.4-0.6,2.1-0.4c0.7,0.2,1.3,0.6,1.8,1.3C1500,320,1499.6,321.7,1498.2,322.4z"/>
+ <path class="st1" d="M1503.3,336.3c-1.5,0.3-3-0.6-3.4-2c-0.3-1.4,0.5-2.9,1.9-3.4c1.5-0.5,3,0.4,3.4,2
+ C1505.7,334.5,1504.8,336,1503.3,336.3z"/>
+ <path class="st1" d="M1422.3,334.4c1.5,0.6,2.1,2,1.8,3.3c-0.3,1.3-1.8,2.2-3.3,1.9c-1.5-0.3-2.5-1.8-2-3.4
+ C1419.2,334.6,1420.9,333.9,1422.3,334.4z"/>
+ <path class="st1" d="M1429.9,322.2c1.1,1.1,1.2,2.8,0.3,3.8c-0.8,1.1-2.5,1.3-3.8,0.4c-1.3-0.9-1.5-2.6-0.5-3.9
+ C1427,321.3,1428.8,321.2,1429.9,322.2z"/>
+ <path class="st1" d="M1441.7,314.2c0.5,1.4,0,3-1.2,3.6c-1.2,0.5-2.8,0.2-3.6-1.2c-0.8-1.3-0.4-3.1,1.1-3.8
+ C1439.5,312.1,1441.2,312.7,1441.7,314.2z"/>
+ <path class="st1" d="M1455.8,311.7c-0.1,1.5-1.2,2.7-2.6,2.8c-0.7,0-1.3-0.2-1.8-0.7c-0.5-0.4-0.9-1.1-1-1.8
+ c-0.1-0.8,0.1-1.5,0.6-2.1c0.5-0.5,1.2-0.9,2-0.9C1454.7,308.8,1455.9,310.2,1455.8,311.7z"/>
+ <path class="st1" d="M1469.8,315.2c-0.7,1.4-2.2,1.9-3.5,1.5c-1.3-0.5-1.9-2.1-1.5-3.5c0.4-1.5,2-2.2,3.6-1.7
+ C1469.8,312,1470.4,313.8,1469.8,315.2z"/>
+ <path class="st1" d="M1481.1,324c-1.2,1-2.9,0.9-3.8-0.1c-1-0.9-1-2.6,0-3.8c1-1.2,2.8-1.2,4-0.1
+ C1482.3,321.2,1482.3,323,1481.1,324z"/>
+ <path class="st1" d="M1487.8,336.6c-0.7,0.2-1.5,0.1-2.1-0.2c-0.6-0.3-1.1-0.8-1.4-1.4c-0.4-1.3,0.2-2.8,1.5-3.5
+ c1.4-0.7,3.1,0,3.6,1.5c0.3,0.8,0.2,1.6-0.1,2.2C1489.1,335.9,1488.5,336.4,1487.8,336.6z"/>
+ <path class="st1" d="M1439.3,334.4c1.2,1,1.5,2.6,0.9,3.7c-0.3,0.6-0.8,1-1.5,1.2c-0.6,0.2-1.4,0.3-2.1,0
+ c-0.7-0.3-1.3-0.8-1.5-1.5c-0.2-0.7-0.2-1.6,0.3-2.4C1436.2,333.8,1438.1,333.4,1439.3,334.4z"/>
+ <path class="st1" d="M1452.1,327c0.2,1.5-0.8,2.9-2,3.2c-1.3,0.4-2.8-0.3-3.4-1.7c-0.7-1.4,0.1-3.1,1.9-3.7
+ C1450.3,324.4,1452,325.5,1452.1,327z"/>
+ <path class="st1" d="M1466.4,330.8c-1,1.2-2.6,1.5-3.7,0.9c-0.6-0.3-1-0.8-1.2-1.5c-0.2-0.6-0.3-1.4,0-2.1
+ c0.3-0.7,0.8-1.3,1.5-1.5c0.7-0.2,1.6-0.2,2.4,0.3C1467,327.7,1467.4,329.6,1466.4,330.8z"/>
+ <path class="st1" d="M1473.9,343.6c-1.5,0.2-2.9-0.8-3.2-2c-0.4-1.3,0.3-2.8,1.7-3.4c1.4-0.7,3.1,0.1,3.7,1.9
+ C1476.5,341.8,1475.4,343.4,1473.9,343.6z"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/item2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/item2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_calendar.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_calendar.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_calendar.svg (revision 7)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="20.924px" height="22.231px" viewBox="249.647 262.968 20.924 22.231"
+ enable-background="new 249.647 262.968 20.924 22.231" xml:space="preserve">
+<g>
+ <path fill="#221F1F" d="M268.098,285.199H252.12c-1.363,0-2.473-1.109-2.473-2.473v-13.841c0-1.363,1.109-2.473,2.473-2.473h15.979
+ c1.363,0,2.473,1.109,2.473,2.473v13.841C270.571,284.09,269.462,285.199,268.098,285.199z M252.12,268.523
+ c-0.199,0-0.361,0.163-0.361,0.362v13.841c0,0.199,0.162,0.362,0.361,0.362h15.979c0.199,0,0.361-0.163,0.361-0.362v-13.841
+ c0-0.2-0.162-0.362-0.361-0.362H252.12z"/>
+ <g>
+ <path fill="#221F1F" d="M256.969,266.559c0,0.157-0.127,0.284-0.283,0.284h-2.184c-0.156,0-0.283-0.127-0.283-0.284v-3.308
+ c0-0.157,0.127-0.284,0.283-0.284h2.184c0.156,0,0.283,0.127,0.283,0.284V266.559z"/>
+ <path fill="#221F1F" d="M266,266.559c0,0.157-0.127,0.284-0.283,0.284h-2.184c-0.156,0-0.283-0.127-0.283-0.284v-3.308
+ c0-0.157,0.127-0.284,0.283-0.284h2.184c0.156,0,0.283,0.127,0.283,0.284V266.559z"/>
+ </g>
+ <g>
+ <path fill="#221F1F" d="M256.89,274.411c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.616
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V274.411z"/>
+ <path fill="#221F1F" d="M261.484,274.411c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.616
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V274.411z"/>
+ <path fill="#221F1F" d="M266.078,274.411c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.616
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V274.411z"/>
+ <path fill="#221F1F" d="M256.89,278.816c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.615
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V278.816z"/>
+ <path fill="#221F1F" d="M261.484,278.816c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.615
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V278.816z"/>
+ <path fill="#221F1F" d="M266.078,278.816c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.615
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V278.816z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/techbanner2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/techbanner2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/item3.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/item3.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/file_word.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_word.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_word.svg (revision 7)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="446.461px" height="595.397px" viewBox="197.715 -0.116 446.461 595.397"
+ enable-background="new 197.715 -0.116 446.461 595.397" xml:space="preserve">
+<path fill="#424242" d="M627.782,113.824l-97.547-97.547C519.771,5.813,505.587-0.116,490.821-0.116H253.522
+ C222.712,0,197.715,24.997,197.715,55.808v483.665c0,30.811,24.997,55.809,55.808,55.809h334.846
+ c30.811,0,55.808-24.998,55.808-55.809V153.354C644.176,138.589,638.246,124.288,627.782,113.824z M583.834,148.82h-88.479V60.342
+ L583.834,148.82z M253.522,539.472V55.808h186.025v120.916c0,15.463,12.44,27.904,27.903,27.904h120.917v334.845H253.522z
+ M509.424,280.64c-6.628,0-12.324,4.65-13.604,11.045c-23.95,113.592-23.718,110.918-24.416,120.336
+ c-0.232-1.396-0.465-3.023-0.813-5c-0.931-5.93,0.349,0.232-27.438-115.684c-1.512-6.279-7.093-10.697-13.604-10.697h-15.464
+ c-6.395,0-11.975,4.418-13.603,10.58c-28.369,115.104-27.904,111.848-28.834,120.568c-0.116-1.279-0.232-2.908-0.581-4.885
+ c-0.814-6.045-16.394-85.223-22.207-115.102c-1.279-6.512-6.976-11.278-13.72-11.278h-19.532c-9.068,0-15.696,8.487-13.604,17.208
+ c9.302,37.902,31.043,127.311,38.601,158.121c1.512,6.277,7.092,10.58,13.604,10.58h29.299c6.395,0,11.975-4.303,13.486-10.58
+ l20.812-83.014c1.744-7.209,2.907-13.953,3.488-20.115l3.372,20.115c0.116,0.465,14.649,58.713,20.812,83.014
+ c1.511,6.162,7.092,10.58,13.486,10.58h28.718c6.395,0,11.976-4.303,13.487-10.58c24.183-95.223,35.112-138.357,40.111-158.121
+ c2.209-8.838-4.418-17.324-13.487-17.324h-18.369V280.64z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/item_l.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/item_l.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/webacc.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/webacc.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/webacc.svg (revision 7)
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 242.8 172.2" style="enable-background:new 0 0 242.8 172.2;" xml:space="preserve">
+<style type="text/css">
+ .st0{clip-path:url(#SVGID_2_);fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+ .st1{clip-path:url(#SVGID_2_);fill:none;stroke:#89BF44;stroke-width:2;}
+ .st2{clip-path:url(#SVGID_2_);fill-rule:evenodd;clip-rule:evenodd;fill:#8DC63F;}
+ .st3{clip-path:url(#SVGID_2_);fill-rule:evenodd;clip-rule:evenodd;fill:#89BF44;}
+ .st4{clip-path:url(#SVGID_2_);fill-rule:evenodd;clip-rule:evenodd;fill:#388841;}
+ .st5{clip-path:url(#SVGID_4_);fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
+ .st6{clip-path:url(#SVGID_6_);fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
+ .st7{clip-path:url(#SVGID_8_);fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
+ .st8{clip-path:url(#SVGID_10_);fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
+ .st9{clip-path:url(#SVGID_12_);fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
+ .st10{fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
+ .st11{fill:#398841;}
+ .st12{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+ .st13{fill:none;}
+ .st14{fill:#FFFFFF;}
+</style>
+<g id="레이어_1">
+</g>
+<g id="나눔바른고딕_1_">
+</g>
+<g id="나눔바른고딕_outline">
+</g>
+<g id="Layer_4">
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_1_" width="242.8" height="171.3"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" style="overflow:visible;"/>
+ </clipPath>
+ <path class="st0" d="M238,78.4c0,42-52.2,76-116.5,76c-64.4,0-116.5-34-116.5-76c0-42,52.2-76,116.5-76
+ C185.8,2.4,238,36.4,238,78.4"/>
+ <ellipse class="st1" cx="121.4" cy="78.4" rx="116.5" ry="76"/>
+ <path class="st2" d="M162.1,62.2c2.9,0,5.3-2.3,5.3-5.2c0-2.9-2.4-5.2-5.3-5.2c-2.9,0-5.3,2.3-5.3,5.2
+ C156.8,59.8,159.2,62.2,162.1,62.2"/>
+ <path class="st2" d="M179,72.5c1.1,1.7,2.2,3.3,3.1,4.6c4.7,2.2,7.9,7,7.9,12.5c0,7.7-6.2,13.9-13.9,13.9
+ c-7.7,0-13.9-6.2-13.9-13.9c0-0.3,0-0.6,0-0.9h-0.7c-0.1,0.2-1.2,1.9-2.5,4c1.5,8.1,8.6,14.2,17,14.2c9.6,0,17.3-7.8,17.3-17.3
+ C193.5,81,187.2,73.9,179,72.5"/>
+ <path class="st2" d="M153,101.4l8.2-13.3H179c2.1,0,7.1-3.5,4.5-7.5c0,0-11.2-16.8-12.1-17.7c-0.9-0.9-3.9-1.8-6.4-0.1
+ c-2,1.3-6.2,10.9-6.2,10.9s-4.8,0.1-6.3,0c-1.4-0.1-1.9,4.9-0.1,4.9h8.7l3.3-5.6l6.8,10.3h-13.8l-10.8,18.2
+ c-0.6,1.1-0.5,2.7,1.6,2.7C150.3,104.1,151.6,103.2,153,101.4"/>
+ <rect x="146.5" y="75.8" class="st2" width="15.5" height="4.3"/>
+ <polygon class="st2" points="148.3,76 146.6,77.2 137.6,64.3 139.2,63.1 "/>
+ <path class="st3" d="M74.1,118.4c13.7,5.1,30.4,8.1,48.4,8.1c47.2,0,85.6-20.8,85.6-46.6c0-13.2-12.2-30.3-43.1-30.3
+ c-22.4,0-42,9.9-42,22.1c0,2.1,1.3,4.5,2.9,6.1c2.5,2.9,3.3,6.4,3.3,9.6c0,14.9-22.2,26.9-49.5,26.9c-18,0-34.6-5-42.7-13.2
+ c-6.5-6.5-8.6-13.9-8.6-21.3c0-28.4,42.2-51.5,94.2-51.5c52.1,0,94.3,23.1,94.3,51.5c0,28.4-42.2,51.5-94.3,51.5
+ c-20.5,0-39.6-3.6-55-9.6L74.1,118.4z"/>
+ <path class="st4" d="M73.4,114.2c13.7,5.1,30.4,8.1,48.4,8.1c47.2,0,85.6-20.8,85.6-46.6c0-13.2-12.2-30.3-43.1-30.3
+ c-22.4,0-42,9.9-42,22.1c0,2.1,1.3,4.5,2.9,6.1c2.5,2.9,3.3,6.4,3.3,9.6c0,14.9-22.2,26.9-49.5,26.9c-18,0-34.6-5-42.7-13.2
+ c-6.5-6.5-8.6-13.9-8.6-21.3c0-28.4,42.2-51.5,94.2-51.5c52.1,0,94.3,23.1,94.3,51.5c0,28.4-42.2,51.5-94.3,51.5
+ c-20.5,0-39.6-3.6-55-9.6L73.4,114.2z"/>
+ </g>
+ <g>
+ <path d="M81.3,132.1l-6.6,11.3l-1.9-0.5l0.5-15.5l1.7,0.5L74.4,141l6.7-11.4l1.7,0.5l-0.5,13.4l6.6-11.6l1.6,0.5l-7.8,13.4
+ l-1.9-0.6L81.3,132.1z"/>
+ </g>
+ <g>
+ <defs>
+ <rect id="SVGID_3_" width="242.8" height="171.3"/>
+ </defs>
+ <clipPath id="SVGID_4_">
+ <use xlink:href="#SVGID_3_" style="overflow:visible;"/>
+ </clipPath>
+ <polygon class="st5" points="80.9,145.2 82.8,145.7 90.6,132.3 89,131.9 82.4,143.5 82.9,130.1 81.1,129.6 74.4,141 74.9,127.8
+ 73.3,127.3 72.8,142.8 74.7,143.4 81.3,132.1 "/>
+ </g>
+ <g>
+ <path d="M98.9,148.9l-9.2-1.6l2.6-14.9l9.2,1.6l-0.3,1.5l-7.5-1.3l-0.8,4.5l6.9,1.2l-0.2,1.5l-6.9-1.2l-1,5.9l7.5,1.3L98.9,148.9
+ z"/>
+ </g>
+ <g>
+ <defs>
+ <rect id="SVGID_5_" width="242.8" height="171.3"/>
+ </defs>
+ <clipPath id="SVGID_6_">
+ <use xlink:href="#SVGID_5_" style="overflow:visible;"/>
+ </clipPath>
+ <polygon class="st6" points="99.2,147.4 91.7,146.1 92.7,140.2 99.6,141.4 99.9,139.9 93,138.7 93.7,134.2 101.2,135.5
+ 101.5,134 92.3,132.4 89.7,147.3 98.9,148.9 "/>
+ </g>
+ <g>
+ <path d="M107.2,149.7l-5.1-0.5l1.3-15l5,0.4c0.7,0.1,1.3,0.2,1.8,0.4c0.5,0.2,0.9,0.5,1.3,0.8c0.3,0.3,0.6,0.7,0.7,1.1
+ c0.1,0.4,0.2,0.9,0.2,1.3c-0.1,0.8-0.4,1.5-0.9,2.1c-0.5,0.6-1.2,0.9-2.1,1.1l0,0c0.5,0.1,1,0.3,1.4,0.5c0.4,0.2,0.7,0.5,1,0.9
+ c0.3,0.4,0.5,0.8,0.6,1.2c0.1,0.5,0.2,0.9,0.1,1.4c0,0.5-0.2,1.1-0.4,1.6c-0.2,0.5-0.6,1-1,1.3c-0.5,0.4-1,0.7-1.7,0.9
+ C108.8,149.7,108.1,149.8,107.2,149.7z M107.3,142.2l-2.8-0.2l-0.5,5.9l3.1,0.3c1.1,0.1,1.9-0.1,2.5-0.6c0.6-0.5,1-1.2,1-2.1
+ c0.1-1-0.1-1.7-0.7-2.3C109.4,142.7,108.6,142.3,107.3,142.2z M107.9,136.1l-2.8-0.3l-0.4,4.7l2.6,0.2c1,0.1,1.7,0,2.3-0.3
+ c0.6-0.3,0.9-0.9,1-1.8c0.1-0.8-0.1-1.4-0.6-1.8C109.6,136.4,108.9,136.2,107.9,136.1z"/>
+ </g>
+ <g>
+ <defs>
+ <rect id="SVGID_7_" width="242.8" height="171.3"/>
+ </defs>
+ <clipPath id="SVGID_8_">
+ <use xlink:href="#SVGID_7_" style="overflow:visible;"/>
+ </clipPath>
+ <path class="st7" d="M109.5,149.5c0.6-0.2,1.2-0.5,1.7-0.9c0.5-0.4,0.8-0.8,1-1.3c0.2-0.5,0.4-1,0.4-1.6c0-0.5,0-1-0.1-1.4
+ c-0.1-0.5-0.3-0.9-0.6-1.2c-0.3-0.3-0.6-0.6-1-0.9c-0.4-0.2-0.9-0.4-1.4-0.5l0,0c0.9-0.2,1.5-0.5,2.1-1.1
+ c0.5-0.6,0.8-1.3,0.9-2.1c0-0.5,0-0.9-0.2-1.3c-0.1-0.4-0.4-0.8-0.7-1.1c-0.3-0.3-0.8-0.6-1.3-0.8c-0.5-0.2-1.1-0.4-1.8-0.4
+ l-5-0.4l-1.3,15l5.1,0.5C108.1,149.8,108.8,149.7,109.5,149.5z M110,143.3c0.5,0.6,0.8,1.3,0.7,2.3c-0.1,0.9-0.4,1.6-1,2.1
+ c-0.6,0.5-1.4,0.7-2.5,0.6l-3.1-0.3l0.5-5.9l2.8,0.2C108.6,142.4,109.4,142.7,110,143.3z M110.1,136.8c0.5,0.4,0.7,1,0.6,1.8
+ c-0.1,0.9-0.4,1.5-1,1.8c-0.6,0.3-1.4,0.4-2.3,0.4l-2.6-0.2l0.4-4.7l2.8,0.3C108.9,136.2,109.6,136.4,110.1,136.8z"/>
+ </g>
+ <g>
+ <path d="M125.3,140.4c0.2,0.3,0.5,0.5,0.8,0.8c0.3,0.3,0.6,0.5,1,0.7c0.3,0.2,0.7,0.4,1,0.6c0.3,0.2,0.7,0.3,1,0.5l-0.9,1.2
+ c-0.7-0.3-1.4-0.7-2-1.2c-0.7-0.5-1.3-1-1.8-1.5c-0.7,0.8-1.5,1.5-2.4,2c-0.9,0.6-1.7,1-2.4,1.3l-1.1-1.1
+ c0.8-0.3,1.5-0.7,2.3-1.1c0.7-0.5,1.4-1,1.9-1.5c0.6-0.6,1.1-1.1,1.5-1.7c0.4-0.6,0.7-1.2,0.8-1.8c-0.6,0-1.3,0.1-1.9,0.1
+ c-0.6,0-1.3,0-1.9,0.1l-1.6,0l0-1.3l2.8-0.1c0.8,0,1.5,0,2.3-0.1c0.8,0,1.6-0.1,2.4-0.1c-0.1,0.8-0.2,1.5-0.5,2.3
+ C126.1,139.1,125.8,139.8,125.3,140.4z M132.5,151.5l-10.3,0.3l-0.2-6.3l1.5,0l0,1.4l7.2-0.2l0-1.5l1.5,0L132.5,151.5z
+ M130.9,150.2l-0.1-2.2l-7.2,0.2l0.1,2.2L130.9,150.2z M127.7,140.5l0-1.4l2.9-0.1l-0.1-3.7l1.5,0l0.3,8.9l-1.5,0l-0.1-3.8
+ L127.7,140.5z"/>
+ </g>
+ <g>
+ <defs>
+ <rect id="SVGID_9_" width="242.8" height="171.3"/>
+ </defs>
+ <clipPath id="SVGID_10_">
+ <use xlink:href="#SVGID_9_" style="overflow:visible;"/>
+ </clipPath>
+ <path class="st8" d="M123.7,150.4l-0.1-2.2l7.2-0.2l0.1,2.2L123.7,150.4z M132.3,145.1l-1.5,0l0,1.5l-7.2,0.2l0-1.4l-1.5,0
+ l0.2,6.3l10.3-0.3L132.3,145.1z M130.6,140.4l0.1,3.8l1.5,0l-0.3-8.9l-1.5,0l0.1,3.7l-2.9,0.1l0,1.4L130.6,140.4z M126.4,138.4
+ c0.3-0.7,0.5-1.5,0.5-2.3c-0.8,0-1.6,0.1-2.4,0.1c-0.8,0-1.5,0-2.3,0.1l-2.8,0.1l0,1.3l1.6,0c0.6,0,1.3,0,1.9-0.1
+ c0.6,0,1.3-0.1,1.9-0.1c-0.1,0.6-0.4,1.2-0.8,1.8c-0.4,0.6-0.9,1.2-1.5,1.7c-0.6,0.6-1.2,1.1-1.9,1.5c-0.7,0.5-1.5,0.8-2.3,1.1
+ l1.1,1.1c0.7-0.3,1.6-0.7,2.4-1.3c0.9-0.6,1.7-1.3,2.4-2c0.5,0.6,1.1,1.1,1.8,1.5c0.7,0.5,1.3,0.9,2,1.2l0.9-1.2
+ c-0.3-0.1-0.7-0.3-1-0.5c-0.3-0.2-0.7-0.4-1-0.6c-0.3-0.2-0.7-0.5-1-0.7c-0.3-0.3-0.6-0.5-0.8-0.8
+ C125.7,139.8,126.1,139.1,126.4,138.4z"/>
+ </g>
+ <g>
+ <path d="M145.7,141.1c0-0.9,0-1.8-0.1-2.8c0-1-0.1-1.9-0.2-2.8l-9.1,1.2l-0.2-1.3l10.6-1.4c0.1,0.6,0.1,1.3,0.2,1.9
+ c0.1,0.6,0.1,1.3,0.1,1.8c0,0.6,0.1,1.2,0.1,1.7c0,0.5,0,1,0,1.5l3-0.4l0.2,1.3l-15.6,2.1l-0.2-1.3L145.7,141.1z M149.2,149.5
+ l-10.8,1.5l-0.7-5.4l1.5-0.2l0.6,4.1l9.3-1.3L149.2,149.5z"/>
+ </g>
+ <g>
+ <defs>
+ <rect id="SVGID_11_" width="242.8" height="171.3"/>
+ </defs>
+ <clipPath id="SVGID_12_">
+ <use xlink:href="#SVGID_11_" style="overflow:visible;"/>
+ </clipPath>
+ <path class="st9" d="M149,148.2l-9.3,1.3l-0.6-4.1l-1.5,0.2l0.7,5.4l10.8-1.5L149,148.2z M134.6,142.6l0.2,1.3l15.6-2.1l-0.2-1.3
+ l-3,0.4c0-0.4,0-0.9,0-1.5c0-0.5-0.1-1.1-0.1-1.7c0-0.6-0.1-1.2-0.1-1.8c-0.1-0.6-0.1-1.3-0.2-1.9l-10.6,1.4l0.2,1.3l9.1-1.2
+ c0.1,0.9,0.2,1.8,0.2,2.8c0,1,0.1,1.9,0.1,2.8L134.6,142.6z"/>
+ </g>
+ <g>
+ <path d="M155.2,132c0.1,0.5,0.2,1,0.3,1.5c0.1,0.5,0.1,1,0.1,1.5c0.7,0.8,1.5,1.4,2.4,1.9c0.9,0.5,1.8,0.9,2.9,1.1l-0.7,1.3
+ c-0.9-0.2-1.8-0.6-2.6-1c-0.8-0.5-1.5-1-2.2-1.6c-0.2,1-0.5,1.9-1,2.8c-0.5,0.9-1.1,1.6-1.9,2.3l-1.3-0.7c1.3-1.2,2.1-2.5,2.6-4
+ c0.4-1.4,0.4-3-0.2-4.7L155.2,132z M165.8,142.8c0.1,0.4,0.1,0.9,0,1.3c-0.1,0.4-0.4,0.8-0.7,1.2s-0.9,0.7-1.5,1.1
+ c-0.6,0.3-1.4,0.6-2.2,0.8c-0.9,0.2-1.7,0.3-2.4,0.3c-0.7,0-1.3-0.1-1.8-0.2c-0.5-0.2-0.9-0.4-1.2-0.7c-0.3-0.3-0.5-0.7-0.6-1.1
+ c-0.1-0.4-0.1-0.9,0-1.3c0.1-0.4,0.4-0.8,0.7-1.2c0.4-0.4,0.9-0.7,1.5-1.1c0.6-0.3,1.4-0.6,2.2-0.8c0.9-0.2,1.7-0.3,2.4-0.3
+ c0.7,0,1.3,0.1,1.8,0.2s0.9,0.4,1.2,0.7C165.5,142,165.7,142.3,165.8,142.8z M164.3,143.2c-0.1-0.2-0.2-0.5-0.4-0.6
+ c-0.2-0.2-0.5-0.3-0.8-0.4c-0.4-0.1-0.8-0.1-1.3-0.1c-0.5,0-1.1,0.1-1.7,0.3c-0.6,0.2-1.2,0.3-1.6,0.6c-0.4,0.2-0.8,0.5-1.1,0.7
+ c-0.3,0.3-0.4,0.5-0.5,0.8c-0.1,0.3-0.1,0.5,0,0.8c0.1,0.2,0.2,0.4,0.4,0.6c0.2,0.2,0.5,0.3,0.8,0.4c0.4,0.1,0.8,0.1,1.3,0.1
+ c0.5,0,1.1-0.1,1.7-0.3c0.6-0.2,1.2-0.4,1.6-0.6c0.4-0.2,0.8-0.4,1.1-0.7c0.3-0.2,0.4-0.5,0.5-0.8
+ C164.3,143.7,164.3,143.4,164.3,143.2z M158.9,135.7l-0.3-1.3l3.2-0.8l-0.9-3.4l1.5-0.4l2.4,9.6l-1.5,0.4l-1.2-4.8L158.9,135.7z"
+ />
+ </g>
+ <path class="st10" d="M164.2,143.9c-0.1,0.3-0.3,0.5-0.5,0.8c-0.3,0.2-0.6,0.5-1.1,0.7c-0.4,0.2-1,0.4-1.6,0.6
+ c-0.6,0.2-1.2,0.2-1.7,0.3c-0.5,0-0.9,0-1.3-0.1c-0.4-0.1-0.6-0.2-0.8-0.4s-0.3-0.4-0.4-0.6c-0.1-0.2,0-0.5,0-0.8
+ c0.1-0.3,0.3-0.5,0.5-0.8c0.3-0.3,0.6-0.5,1.1-0.7c0.4-0.2,1-0.4,1.6-0.6c0.6-0.2,1.2-0.2,1.7-0.3c0.5,0,0.9,0,1.3,0.1
+ c0.4,0.1,0.6,0.2,0.8,0.4c0.2,0.2,0.3,0.4,0.4,0.6C164.3,143.4,164.3,143.7,164.2,143.9z M165.2,141.6c-0.3-0.3-0.7-0.6-1.2-0.7
+ c-0.5-0.2-1.1-0.2-1.8-0.2c-0.7,0-1.5,0.1-2.4,0.3c-0.9,0.2-1.6,0.5-2.2,0.8c-0.6,0.3-1.1,0.7-1.5,1.1c-0.4,0.4-0.6,0.8-0.7,1.2
+ c-0.1,0.4-0.1,0.9,0,1.3c0.1,0.4,0.3,0.8,0.6,1.1c0.3,0.3,0.7,0.6,1.2,0.7c0.5,0.2,1.1,0.2,1.8,0.2c0.7,0,1.5-0.1,2.4-0.3
+ c0.9-0.2,1.6-0.5,2.2-0.8c0.6-0.3,1.1-0.7,1.5-1.1c0.4-0.4,0.6-0.8,0.7-1.2c0.1-0.4,0.1-0.9,0-1.3
+ C165.7,142.3,165.5,141.9,165.2,141.6z M162.1,134.9l1.2,4.8l1.5-0.4l-2.4-9.6l-1.5,0.4l0.9,3.4l-3.2,0.8l0.3,1.3L162.1,134.9z
+ M153.7,132.4c0.5,1.7,0.6,3.3,0.2,4.7c-0.4,1.4-1.3,2.7-2.6,4l1.3,0.7c0.8-0.7,1.4-1.5,1.9-2.3c0.5-0.9,0.8-1.8,1-2.8
+ c0.6,0.6,1.4,1.2,2.2,1.6c0.8,0.5,1.7,0.8,2.6,1l0.7-1.3c-1.1-0.2-2.1-0.6-2.9-1.1c-0.9-0.5-1.6-1.1-2.4-1.9c0-0.5,0-1-0.1-1.5
+ c-0.1-0.5-0.2-1-0.3-1.5L153.7,132.4z"/>
+ <path class="st11" d="M46.7,33.5c-0.9-2.2-1.7-3.7-2.4-4.9l-5.2,3.1l-0.9-1.6l7.1-4.3L46,27c0.8,1.3,1.8,3,2.8,5.5L46.7,33.5z
+ M46.7,35.9c1.3-0.8,2.6-1.7,3.8-2.6l1,1.4c-2.5,2.2-5.6,4.1-8,5.5l-1.2-1.5c0.8-0.5,1.6-1,2.5-1.5L42.3,33l1.9-1.2L46.7,35.9z
+ M53.8,28.7L52,29.8l4,6.6l-2,1.2l-8.3-13.9l2-1.2l3.3,5.6l1.9-1.1L53.8,28.7z"/>
+ <path class="st11" d="M65,18.5l-8.8,3.4l-0.7-1.7l3.3-1.3l-0.5-1.4l2.2-0.8l0.5,1.4l3.3-1.3L65,18.5z M62.9,26.3
+ c-2.2,0.8-4.1,0.3-4.8-1.4c-0.6-1.6,0.5-3.4,2.6-4.2c2.2-0.8,4.1-0.3,4.7,1.3C66.1,23.7,65.1,25.4,62.9,26.3 M62.3,24.6
+ c1-0.4,1.5-1,1.2-1.8c-0.3-0.8-1.1-0.9-2.1-0.5c-1,0.4-1.5,1-1.2,1.8C60.5,24.9,61.3,25,62.3,24.6 M60.7,28.3l10-3.8l1.9,5
+ l-2.2,0.8L69.2,27l-7.9,3L60.7,28.3z M71,19.3L69,20l1.5,3.8l-2.2,0.8l-3.6-9.4l2.2-0.8l1.5,3.9l2-0.8L71,19.3z"/>
+ <path class="st11" d="M83,11.6c1.1,4.8,0.4,9.1-4.5,13.1l-1.6-1.5c3.5-2.9,4.7-5.7,4.2-9.3l-5.2,1.2l-0.4-1.8L83,11.6z M87.3,8.9
+ L91,24.6l-2.3,0.5L85,9.4L87.3,8.9z"/>
+ <path class="st11" d="M103.3,14.8l0.1,1l4.3-0.5l0.5,4.2l-8.8,1l0.1,0.9l9.2-1l0.2,1.7l-11.4,1.3L97,19.2l8.8-1l-0.1-0.9l-8.8,1
+ l-0.2-1.7l4.4-0.5l-0.1-1l-6.1,0.7L94.7,14l14.4-1.6l0.2,1.8L103.3,14.8z M107.6,11.8c-2.8,0-4.9-0.8-6.1-2.1
+ c-0.8,1.6-2.7,2.9-5.4,3.5l-0.9-1.6c3.6-0.8,5.1-2.6,4.9-4.1l0-0.3l2.4-0.3l0,0.3c0.2,1.5,2.1,3,5.7,2.9L107.6,11.8z"/>
+ <path class="st11" d="M122.7,14.8c-1.8-0.6-3-1.7-3.7-3.1c-0.7,1.6-1.9,3-3.8,3.6l-1.2-1.8c2.5-0.9,3.7-3,3.7-5l-3.2,0l0-1.9
+ l8.6-0.1l0,1.9l-3.1,0c0.1,1.8,1.2,3.7,3.7,4.5L122.7,14.8z M127.6,18.7c0,2-2.1,3.1-5.5,3.2c-3.4,0-5.5-1.1-5.5-3.1
+ c0-2,2.1-3.1,5.5-3.2C125.5,15.6,127.6,16.7,127.6,18.7 M125.3,18.7c0-0.9-1.1-1.3-3.2-1.3c-2.1,0-3.2,0.5-3.2,1.4
+ c0,0.9,1.1,1.3,3.2,1.3C124.2,20.1,125.3,19.6,125.3,18.7 M125.2,9.5l0-3.9l2.3,0l0.1,9.6l-2.3,0l0-3.8l-2.4,0l0-1.9L125.2,9.5z"
+ />
+ <path class="st11" d="M147.4,19.7l-0.2,1.9l-14.5-1.5l0.2-1.9l6.1,0.6l0.3-2.9l-4.6-0.5l0.8-8.4l2.3,0.2l-0.3,2.5l6.8,0.7l0.3-2.5
+ l2.3,0.2l-0.8,8.4l-4.5-0.5l-0.3,2.9L147.4,19.7z M137.2,13.8l6.9,0.7l0.2-2.2l-6.8-0.7L137.2,13.8z"/>
+ <path class="st11" d="M166.6,19.5l-0.4,1.8L152,18.1l0.4-1.8l6,1.3l0.2-1l-4.2-0.9l1.5-6.7l10.8,2.4l-0.4,1.7l-8.6-1.9l-0.2,0.8
+ l8.2,1.8l-0.4,1.6l-8.2-1.8l-0.2,0.9l8.7,1.9l-0.4,1.7l-4.5-1l-0.2,1L166.6,19.5z M163.8,24.2c-0.4,1.7-2.6,2.1-6,1.4
+ c-3.4-0.8-5.2-2.1-4.9-3.8c0.4-1.7,2.6-2.1,6-1.4C162.4,21.1,164.2,22.5,163.8,24.2 M161.6,23.7c0.1-0.7-0.8-1.1-3-1.6
+ c-2.2-0.5-3.2-0.4-3.4,0.2c-0.1,0.7,0.8,1.2,3,1.6C160.3,24.4,161.4,24.3,161.6,23.7"/>
+ <path class="st11" d="M182.2,30.8l-0.6,1.7l-10.4-3.8l1.8-4.9l2.2,0.8l-1.2,3.2L182.2,30.8z M179,24.7c-1.5-1.2-2.2-2.7-2.3-4.4
+ c-1.2,1.3-2.9,2.1-4.9,2.1l-0.5-2.1c2.8,0.1,4.7-1.7,5.4-3.7l0.5-1.5l2.2,0.8l-0.5,1.5c-0.7,2-0.4,4.3,1.8,6L179,24.7z
+ M182.6,28.6l-2.2-0.8l4-11l2.2,0.8L182.6,28.6z"/>
+ <path class="st11" d="M200.7,37.4l-5.4-3.1l-2.5,4.4l-2-1.1l2.5-4.4l-5.3-3l0.9-1.6l12.7,7.2L200.7,37.4z M200.8,33.6l-9.7-5.5
+ l3.5-6.2l2,1.1l-0.9,1.6l5.8,3.3l0.9-1.6l2,1.1L200.8,33.6z M200.6,29.4l-5.8-3.3l-0.8,1.4l5.8,3.3L200.6,29.4z"/>
+ <polygon class="st12" points="77.1,93.1 69.5,93.1 68.4,67.9 52.2,93.1 44.5,93.1 44.4,51.7 54,51.7 53.4,77.8 69.8,51.7
+ 76.7,51.7 77.4,77.8 92.6,51.7 102.2,51.7 "/>
+ <path class="st12" d="M108.4,93.4l0.1-7.3H97L93,93.4H81.9l25-41.5h10.9l1.8,41.5H108.4z M109.1,64.1l-8.5,15.1h8.3L109.1,64.1z"
+ />
+ <rect class="st13" width="242.8" height="171.3"/>
+ <g>
+ <path class="st14" d="M22.4,136.9c0,0,0-0.1-0.1-0.1l-1.3-1.1c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0.1l-0.5,0.6l-3.7-3.2l0.4-0.5
+ c0.1-0.1,0-0.2,0-0.2l-1.3-1.1c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0.1l-2.9,3.4c-0.1,0.1,0,0.2,0,0.2l6.6,5.7c0,0,0.1,0,0.1,0
+ c0,0,0,0,0,0c0,0,0.1,0,0.1-0.1l3-3.5C22.4,136.9,22.4,136.9,22.4,136.9z M15,134.8l0.4-0.5l3.8,3.2l-0.4,0.5L15,134.8z"/>
+ <path class="st14" d="M19.1,131.3c-0.1-0.1-0.2,0-0.2,0l-0.8,0.9c-0.1,0.1,0,0.2,0,0.2l1.3,1.1l-0.3,0.4c-0.1,0.1,0,0.2,0,0.2
+ l1.2,1c0,0,0.1,0,0.1,0c0,0,0,0,0,0c0,0,0.1,0,0.1-0.1l5.6-6.6c0.1-0.1,0-0.2,0-0.2l-1.2-1c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0.1
+ l-4.3,5L19.1,131.3z"/>
+ <path class="st14" d="M18.2,127.8c0.2,0.3,0.5,0.6,0.8,0.9c0.3,0.3,0.7,0.5,1,0.6c0.3,0.1,0.7,0.2,1,0.2c0,0,0,0,0.1,0
+ c0.3,0,0.6-0.1,0.9-0.2c0.3-0.1,0.6-0.3,0.8-0.6c0.2-0.3,0.4-0.6,0.5-0.9c0.1-0.3,0.1-0.7,0-1c-0.1-0.3-0.2-0.7-0.4-1
+ c-0.2-0.3-0.4-0.6-0.8-0.9c-0.3-0.3-0.6-0.5-1-0.6c-0.3-0.1-0.7-0.2-1-0.2c0,0,0,0,0,0c-0.3,0-0.7,0.1-1,0.2
+ c-0.3,0.1-0.6,0.3-0.8,0.6c-0.2,0.3-0.4,0.6-0.5,0.9c-0.1,0.3-0.1,0.6,0,1C17.9,127.2,18,127.5,18.2,127.8z M19.6,126.9
+ c0-0.2,0-0.4,0.2-0.6c0.2-0.2,0.3-0.3,0.6-0.3c0.2,0,0.5,0.1,0.7,0.3c0.2,0.2,0.4,0.4,0.4,0.7c0,0.2,0,0.4-0.2,0.6
+ c-0.2,0.2-0.3,0.3-0.6,0.3c-0.2,0-0.5-0.1-0.7-0.3C19.7,127.3,19.6,127.1,19.6,126.9z"/>
+ <path class="st14" d="M16.7,129.2c0.1,0.1,0.3,0.2,0.4,0.3l-1.3,1.5c0,0,0,0.1,0,0.1c0,0,0,0.1,0.1,0.1l1.2,1c0,0,0.1,0,0.1,0
+ c0,0,0.1,0,0.1-0.1l1.4-1.6c0.3,0.2,0.6,0.4,0.9,0.6c0.3,0.2,0.7,0.4,1,0.7c0.1,0,0.1,0,0.2,0l0.9-1c0,0,0-0.1,0-0.1
+ c0,0,0-0.1-0.1-0.1c-0.4-0.2-0.7-0.5-1.1-0.8c-0.4-0.3-0.7-0.5-1.1-0.8c-0.4-0.3-0.7-0.5-1.1-0.8c-0.3-0.3-0.7-0.5-0.9-0.8
+ l-1.1-0.9c-0.1-0.1-0.2,0-0.2,0l-0.9,1c-0.1,0.1,0,0.2,0,0.2L16.7,129.2z"/>
+ <path class="st14" d="M21.2,135.5c0,0,0,0.1,0.1,0.1l1.2,1.1c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1-0.1l5.5-6.5c0,0,0-0.1,0-0.1
+ c0,0,0-0.1-0.1-0.1l-1.2-1.1c-0.1-0.1-0.2,0-0.2,0l-5.5,6.5C21.2,135.4,21.2,135.4,21.2,135.5z"/>
+ <path class="st14" d="M34,142.6c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1-0.1l0.9-1.3c0-0.1,0-0.2,0-0.2l-1.5-1l2.9-4.2c0,0,0-0.1,0-0.1
+ c0,0,0-0.1-0.1-0.1l-1.4-1c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0.1L27,146.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0.1,0.1l1.4,1c0,0,0.1,0,0.1,0
+ c0,0,0.1,0,0.1-0.1l3.9-5.6L34,142.6z"/>
+ <path class="st14" d="M28.5,143.5C28.6,143.5,28.6,143.5,28.5,143.5c0.1,0,0.2,0,0.2-0.1l0.9-1.2c0,0,0-0.1,0-0.1
+ c0,0,0-0.1-0.1-0.1c-0.5-0.2-0.9-0.5-1.4-0.8c-0.4-0.2-0.9-0.5-1.3-0.8l0.9-1.4c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.8,0,1.1-0.2
+ c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.6-0.5,0.8-0.9c0.3-0.4,0.5-0.9,0.6-1.3c0.1-0.5,0.1-0.9,0-1.4c-0.1-0.4-0.3-0.9-0.5-1.3
+ c-0.3-0.4-0.6-0.7-1-1c-0.4-0.3-0.9-0.5-1.3-0.6c-0.5-0.1-0.9-0.1-1.4,0c-0.4,0.1-0.9,0.2-1.3,0.5c-0.4,0.3-0.7,0.6-1,1
+ c-0.2,0.4-0.4,0.7-0.5,1.1c-0.1,0.4-0.1,0.8-0.1,1.2c0,0.4,0.1,0.8,0.3,1.1c0.1,0.3,0.3,0.6,0.6,0.9l-1,1.4
+ c-0.2-0.1-0.4-0.3-0.6-0.4l-2.1-1.5c-0.1,0-0.2,0-0.2,0l-0.9,1.3c0,0.1,0,0.2,0,0.2l1.5,1c0.4,0.3,0.9,0.6,1.4,0.9
+ c0.5,0.3,1,0.6,1.5,0.9c0.5,0.3,1,0.6,1.5,0.9C27.6,143,28.1,143.3,28.5,143.5z M27.5,134.8c0.3-0.5,0.7-0.7,1.1-0.8
+ c0.1,0,0.2,0,0.3,0c0.3,0,0.6,0.1,0.9,0.3c0.4,0.3,0.6,0.6,0.7,1c0.1,0.4-0.1,0.9-0.4,1.3c-0.3,0.5-0.7,0.7-1.1,0.8
+ c-0.4,0.1-0.8,0-1.2-0.3c-0.4-0.3-0.6-0.6-0.7-1C27.1,135.7,27.2,135.3,27.5,134.8z"/>
+ <path class="st14" d="M41.1,141.1C41.2,141.1,41.2,141.1,41.1,141.1c0.1,0,0.1,0,0.1,0c0,0,0.1,0,0.1-0.1l0.8-1.4
+ c0-0.1,0-0.2-0.1-0.2l-3.8-2.1c-0.1,0-0.2,0-0.2,0.1l-0.8,1.4c0,0,0,0.1,0,0.1c0,0,0,0.1,0.1,0.1L41.1,141.1z"/>
+ <path class="st14" d="M46.5,141.3l-1.5-0.9c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0.1l-6.8,12.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0.1,0.1
+ l1.5,0.9c0,0,0.1,0,0.1,0c0.1,0,0.1,0,0.1-0.1l6.8-12.1C46.6,141.5,46.5,141.4,46.5,141.3z"/>
+ <path class="st14" d="M38,149.6l1.7-0.6c0,0,0.1,0,0.1-0.1c0,0,0-0.1,0-0.1c-0.3-0.7-0.5-1.3-0.7-1.9c-0.2-0.6-0.3-1.2-0.4-1.9
+ c0.6-0.3,1.1-0.7,1.6-1.2c0.5-0.5,1-1,1.4-1.6c0,0,0-0.1,0-0.1c0,0,0-0.1-0.1-0.1c-0.7-0.4-1.3-0.7-1.9-1l-3.6-2
+ c-0.1,0-0.2,0-0.2,0.1l-0.8,1.4c0,0,0,0.1,0,0.1c0,0,0,0.1,0.1,0.1l2.6,1.5c0.3,0.2,0.6,0.3,0.9,0.5c-0.3,0.3-0.6,0.6-1,0.8
+ c-0.5,0.3-1.1,0.6-1.7,0.8c-0.6,0.2-1.3,0.4-2,0.5c-0.7,0.1-1.4,0.2-2.2,0.1c0,0-0.1,0-0.1,0.1c0,0,0,0.1,0,0.1l0.4,1.6
+ c0,0.1,0.1,0.1,0.2,0.1c0,0,0,0,0,0c0.8,0,1.6-0.1,2.4-0.2c0.7-0.1,1.5-0.3,2.2-0.6c0.1,0.6,0.2,1.2,0.3,1.7
+ c0.2,0.6,0.4,1.2,0.7,1.9C37.8,149.6,37.9,149.6,38,149.6C38,149.6,38,149.6,38,149.6z"/>
+ <path class="st14" d="M62.8,149.5c0,0,0-0.1-0.1-0.1l-1.7-0.7c-0.1,0-0.1,0-0.2,0.1l-4.6,6.8l-0.1,0.2l1.5-8.4
+ c0-0.1,0-0.1-0.1-0.2l-1.9-0.8c-0.1,0-0.1,0-0.2,0.1l-4.7,6.8l-0.1,0.2l1.6-8.4c0-0.1,0-0.1-0.1-0.2l-0.8-0.3
+ c0.3-0.2,0.5-0.3,0.8-0.5c0.1,0,0.1-0.1,0.1-0.1c0-0.1,0-0.1-0.1-0.1l-1.3-0.6c0,0-0.1,0-0.1,0c-0.6,0.3-1.2,0.6-1.8,0.9
+ c-0.6,0.3-1.1,0.7-1.6,1.2c-0.5,0.4-1,0.9-1.4,1.4c-0.4,0.5-0.8,1.1-1,1.7c-0.3,0.6-0.5,1.2-0.6,1.8c-0.1,0.7-0.2,1.3-0.3,2
+ c0,0.7,0,1.3,0.1,2c0.1,0.7,0.2,1.3,0.4,1.9c0,0,0,0.1,0.1,0.1l1.3,0.6c0.1,0,0.1,0,0.2,0c0,0,0.1-0.1,0.1-0.1
+ c-0.2-1.6-0.3-2.9-0.1-4.1c0.2-1.2,0.5-2.3,0.9-3.2c0.2-0.5,0.5-0.9,0.8-1.4c0.3-0.5,0.7-0.9,1.1-1.3c0.4-0.4,0.8-0.8,1.3-1.1
+ l-1.6,10.6c0,0.1,0,0.1,0.1,0.2l1.8,0.7c0.1,0,0.1,0,0.2-0.1l4.8-6.9l0.1-0.2l-1.5,8.6c0,0.1,0,0.1,0.1,0.2l1.8,0.7
+ c0,0,0,0,0.1,0c0,0,0.1,0,0.1-0.1l6.9-9.6C62.8,149.6,62.8,149.5,62.8,149.5z"/>
+ <path class="st14" d="M72.5,155.7c-0.3-0.3-0.7-0.5-1.1-0.6c-0.4-0.1-0.9-0.2-1.3-0.1c-0.3,0-0.6,0.1-0.9,0.3l1.2-4.2
+ c0,0,0-0.1,0-0.1c0,0-0.1-0.1-0.1-0.1l-1.7-0.5c-0.1,0-0.2,0-0.2,0.1l-1.6,5.3c0-0.3-0.1-0.6-0.2-0.9c-0.3-0.9-1.1-1.6-2.2-2
+ c-0.6-0.2-1.1-0.3-1.7-0.2c-0.5,0.1-1,0.2-1.5,0.5c-0.5,0.3-0.9,0.6-1.2,1.1c-0.4,0.5-0.7,1-0.9,1.7c-0.2,0.7-0.3,1.3-0.3,1.9
+ c0,0.6,0.1,1.1,0.3,1.6c0.2,0.5,0.5,0.9,0.9,1.3c0.4,0.4,0.9,0.6,1.4,0.8c0.6,0.2,1.3,0.3,1.9,0.3c0.6,0,1.1-0.1,1.5-0.4
+ c0,0,0.1,0,0.1-0.1l0.5-1.4c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.4,0.2-0.9,0.3-1.4,0.4c-0.5,0.1-0.9,0-1.4-0.2
+ c-0.6-0.2-1-0.5-1.3-1c-0.2-0.5-0.3-1-0.1-1.7l5,1.7l-1,3.5c0,0,0,0.1,0,0.1c0,0,0.1,0.1,0.1,0.1l1.6,0.5c0.1,0,0.2,0,0.2-0.1
+ l0.2-0.5c0.1,0.3,0.3,0.5,0.5,0.7c0.3,0.3,0.7,0.5,1.1,0.6c0.3,0.1,0.7,0.1,1,0.1c0.1,0,0.3,0,0.4,0c0.5-0.1,0.9-0.2,1.4-0.5
+ c0.4-0.3,0.8-0.7,1.1-1.2c0.3-0.5,0.6-1.1,0.8-1.9c0.2-0.7,0.3-1.3,0.3-1.9c0-0.6-0.1-1.1-0.3-1.5
+ C73.1,156.3,72.8,155.9,72.5,155.7z M71.2,159.6c-0.3,0.9-0.6,1.6-1.1,2c-0.4,0.4-0.9,0.5-1.4,0.3c-0.5-0.1-0.8-0.4-1-0.8
+ c-0.2-0.4-0.2-0.9,0-1.5l0.4-1.3c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.4,0.6-0.6c0.2-0.1,0.4-0.2,0.7-0.3c0.1,0,0.2,0,0.3,0
+ c0.1,0,0.3,0,0.4,0.1c0.4,0.1,0.7,0.4,0.9,0.9C71.5,158.1,71.5,158.7,71.2,159.6z M61.5,155.5c0.3-0.4,0.6-0.8,1-1
+ c0.4-0.2,0.8-0.2,1.3-0.1c0.5,0.2,0.8,0.4,0.9,0.8c0.1,0.4,0.1,0.8,0,1.3L61.5,155.5z"/>
+ <path class="st14" d="M87.1,156c0,0-0.1-0.1-0.1-0.1l-1.8-0.4c-0.1,0-0.1,0-0.2,0.1l-3.4,7.5l-0.1,0.3l0.1-8.5
+ c0-0.1,0-0.1-0.1-0.2l-2-0.5c-0.1,0-0.1,0-0.2,0.1l-3.5,7.5l-0.1,0.3l0.2-8.5c0-0.1,0-0.1-0.1-0.2l-1.8-0.4c0,0-0.1,0-0.1,0
+ c0,0-0.1,0.1-0.1,0.1l0.1,11.9c0,0.1,0.1,0.1,0.1,0.1l1.9,0.4c0.1,0,0.1,0,0.2-0.1l3.6-7.6l0.1-0.3l-0.1,8.7c0,0.1,0,0.1,0.1,0.2
+ l1.9,0.4c0,0,0,0,0,0c0.1,0,0.1,0,0.1-0.1l5.3-10.6C87.2,156.1,87.2,156.1,87.1,156z"/>
+ <path class="st14" d="M107.4,170.5c0.1,0,0.1-0.1,0.2-0.1l0.5-5.2c0.1-1.2-0.1-2.1-0.5-2.7c-0.4-0.6-1.1-1-2.1-1.1
+ c-0.5,0-1,0-1.4,0.3c-0.3,0.1-0.6,0.3-0.8,0.5l0.4-4.5c0,0,0-0.1,0-0.1c0,0-0.1-0.1-0.1-0.1l-1.8-0.2c-0.1,0-0.2,0.1-0.2,0.1
+ l-0.4,4.1c-0.2-0.2-0.5-0.3-0.7-0.5c-0.4-0.2-0.9-0.3-1.3-0.4c-0.6-0.1-1.2,0-1.8,0.1c-0.5,0.1-1,0.4-1.4,0.7l0.1-0.8
+ c0,0,0-0.1,0-0.1s-0.1-0.1-0.1-0.1l-1.8-0.3l0.3-1.8c0,0,0-0.1,0-0.1c0,0-0.1-0.1-0.1-0.1l-1.7-0.3c-0.1,0-0.2,0-0.2,0.1
+ l-0.3,1.8l-1.1-0.2c0,0-0.1,0-0.1,0c0,0-0.1,0.1-0.1,0.1l0,0.1c-0.4-0.5-1-0.8-1.9-0.9c-0.6-0.1-1.2-0.1-1.8,0
+ c-0.5,0.1-1.1,0.3-1.6,0.5c0,0-0.1,0.1-0.1,0.1l-0.3,1.6c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.1,0.3,0c0.5-0.3,1-0.5,1.5-0.6
+ c0.4-0.1,0.9-0.1,1.3,0c0.4,0.1,0.7,0.2,0.8,0.4c0.1,0.2,0.1,0.6,0.1,1l-2.1,0c-0.9,0-1.7,0.2-2.3,0.6c-0.6,0.4-1,1.1-1.1,1.9
+ c-0.1,0.8,0,1.5,0.4,2.1c0.4,0.5,1,0.9,1.9,1.1c0.5,0.1,1,0.1,1.5-0.1c0.3-0.1,0.6-0.3,0.9-0.5l-0.1,0.7c0,0.1,0,0.2,0.1,0.2
+ l1.5,0.3c0.1,0,0.2,0,0.2-0.1l1-5.6c0.1-0.4,0.1-0.8,0.1-1.2l0.5,0.1l-0.7,4.8c-0.1,0.8,0,1.4,0.3,1.8c0.3,0.4,0.8,0.7,1.6,0.8
+ c0.3,0,0.7,0.1,1,0c0.3,0,0.6-0.1,0.9-0.3c0,0,0.1-0.1,0.1-0.1l0.1-0.5c0,0,0.1,0.1,0.1,0.1c0.3,0.4,0.7,0.8,1.2,1
+ c0.5,0.3,1.1,0.4,1.7,0.5c0.5,0.1,1,0.1,1.4,0c0.3-0.1,0.7-0.2,1-0.4l0,0.4c0,0.1,0.1,0.2,0.1,0.2l1.8,0.2c0.1,0,0.2-0.1,0.2-0.1
+ l0.4-4.6c0-0.4,0.1-0.7,0.2-1c0.1-0.3,0.3-0.5,0.4-0.7c0.2-0.2,0.4-0.3,0.6-0.4c0.2-0.1,0.4-0.1,0.7-0.1c0.4,0,0.7,0.2,0.9,0.4
+ c0.2,0.3,0.3,0.7,0.2,1.4l-0.5,5.3c0,0,0,0.1,0,0.1s0.1,0.1,0.1,0.1L107.4,170.5C107.4,170.5,107.4,170.5,107.4,170.5z
+ M98.4,167.9c-0.7-0.1-1.3-0.4-1.5-0.9c-0.3-0.5-0.4-1.2-0.3-2.1c0-0.4,0.1-0.8,0.3-1.1c0.1-0.3,0.3-0.6,0.5-0.8
+ c0.2-0.2,0.4-0.4,0.7-0.5c0.2-0.1,0.4-0.1,0.6-0.1c0.1,0,0.2,0,0.3,0c0.4,0.1,0.8,0.2,1.1,0.4c0.3,0.2,0.6,0.5,0.8,0.8
+ c0,0,0,0,0,0.1l-0.3,3.3c0,0-0.1,0-0.1,0.1c-0.3,0.3-0.7,0.6-1,0.7C99.2,168,98.8,168,98.4,167.9z M94.5,166.7
+ c0,0.2,0.1,0.3,0.1,0.4c-0.1,0.1-0.2,0.1-0.3,0.1c-0.2,0-0.4,0-0.6,0c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.3,0-0.5l0.7-4.6
+ l1.4,0.2c-0.2,0.2-0.4,0.5-0.5,0.8c-0.3,0.5-0.4,1.2-0.5,1.9C94.3,165.5,94.4,166.1,94.5,166.7z M86,165c0.1-0.4,0.2-0.7,0.5-0.9
+ c0.3-0.2,0.6-0.3,1-0.3c0,0,0.1,0,0.1,0l1.6,0l-0.1,0.7c0,0.2-0.1,0.4-0.3,0.6c-0.1,0.2-0.3,0.4-0.5,0.5
+ c-0.2,0.1-0.4,0.3-0.7,0.3c-0.2,0.1-0.5,0.1-0.7,0c-0.3-0.1-0.6-0.2-0.7-0.4C85.9,165.6,85.9,165.3,86,165z"/>
+ <path class="st14" d="M111.4,161.3C111.4,161.3,111.4,161.3,111.4,161.3c-0.2-0.6-0.5-1.2-0.8-1.8c-0.3-0.6-0.7-1.1-1.1-1.7
+ c0,0-0.1-0.1-0.1-0.1l-1.4-0.1c-0.1,0-0.1,0-0.1,0.1s0,0.1,0,0.2c0.4,0.7,0.8,1.3,1.1,2c0.3,0.6,0.5,1.2,0.7,1.8
+ c0.2,0.6,0.3,1.2,0.3,1.7c0,0.6,0.1,1.1,0,1.6c-0.1,1-0.3,2.1-0.7,3.3c-0.4,1.1-1.1,2.3-2.1,3.6c0,0,0,0.1,0,0.2
+ c0,0.1,0.1,0.1,0.1,0.1l1.4,0.1c0,0,0,0,0,0c0,0,0.1,0,0.1,0c0.4-0.4,0.8-0.9,1.2-1.5c0.4-0.5,0.7-1.1,1-1.7
+ c0.3-0.6,0.5-1.2,0.7-1.9c0.2-0.6,0.3-1.3,0.3-1.9c0-0.7,0-1.3-0.1-2C111.8,162.5,111.7,161.9,111.4,161.3z"/>
+ <path class="st14" d="M129.6,164.9c0-2.1-0.4-3.7-1.1-4.6c-0.7-1-1.6-1.5-2.9-1.4c-1.2,0-2.2,0.5-2.8,1.6
+ c-0.2,0.4-0.4,0.8-0.6,1.3c-0.1-0.8-0.4-1.5-0.9-2c-0.6-0.5-1.5-0.8-2.6-0.8c-0.6,0-1.2,0.1-1.8,0.3c-0.6,0.2-1.1,0.6-1.5,0.9
+ c0,0,0,0.1-0.1,0.1l0,1.5c0,0.2,0.1,0.2,0.1,0.3c0,0,0.2,0.1,0.3-0.1c0.5-0.4,0.9-0.8,1.4-1c0.5-0.2,0.9-0.3,1.4-0.3
+ c0.5,0,0.9,0.2,1.1,0.4c0.2,0.3,0.4,0.6,0.3,1.1c0,0.2,0,0.4-0.1,0.7c0,0.2-0.1,0.5-0.3,0.7c-0.1,0.3-0.3,0.5-0.5,0.9
+ c-0.2,0.3-0.5,0.7-0.8,1l-3.4,3.8c0,0,0,0.1,0,0.1l0,1.4c0,0.1,0.1,0.2,0.2,0.2l7,0.1c0,0,0,0,0,0c0,0,0.1,0,0.1,0
+ c0,0,0-0.1,0-0.1l0-1.5c0-0.1-0.1-0.2-0.2-0.2l-4.6-0.1l2.5-2.7c0.3-0.3,0.6-0.6,0.8-1c0.3-0.3,0.5-0.7,0.7-1
+ c0.1-0.2,0.2-0.4,0.3-0.7c0,0.4,0,0.9,0,1.4c0,2.1,0.4,3.7,1.1,4.6c0.7,1,1.6,1.4,2.8,1.4c0,0,0.1,0,0.1,0c1.2,0,2.2-0.5,2.8-1.6
+ C129.3,168.6,129.6,167,129.6,164.9z M124.5,168.4c-0.3-0.7-0.5-1.8-0.6-3.4c0-1.6,0.1-2.7,0.4-3.4c0.3-0.7,0.7-1,1.2-1
+ c0,0,0,0,0,0c0.5,0,0.9,0.3,1.3,1c0.3,0.7,0.5,1.8,0.6,3.4c0,1.6-0.1,2.7-0.4,3.4c-0.3,0.7-0.7,1-1.2,1
+ C125.3,169.3,124.8,169,124.5,168.4z"/>
+ <path class="st14" d="M136.7,168.6c0,0-0.1,0-0.1,0l-4.6,0.3l2.3-2.9c0.3-0.3,0.5-0.7,0.8-1c0.2-0.3,0.5-0.7,0.6-1.1
+ c0.2-0.4,0.3-0.7,0.4-1.1c0.1-0.4,0.1-0.7,0.1-1.1c-0.1-1.1-0.4-1.9-1.1-2.4c-0.6-0.5-1.5-0.7-2.6-0.7c-0.6,0-1.2,0.2-1.8,0.5
+ c-0.5,0.3-1,0.6-1.4,1.1c0,0,0,0.1,0,0.1l0.1,1.5c0,0.2,0.1,0.2,0.2,0.2c0,0,0.2,0.1,0.3-0.1c0.4-0.5,0.9-0.8,1.3-1.1
+ c0.4-0.2,0.9-0.4,1.4-0.4c0.5,0,0.9,0.1,1.1,0.3c0.3,0.3,0.4,0.6,0.4,1.1c0,0.2,0,0.4,0,0.7c0,0.2-0.1,0.5-0.2,0.7
+ c-0.1,0.3-0.3,0.6-0.5,0.9c-0.2,0.3-0.5,0.7-0.8,1.1l-3.1,4c0,0,0,0.1,0,0.1l0.1,1.4c0,0.1,0.1,0.1,0.2,0.1c0,0,0,0,0,0l7-0.4
+ c0.1,0,0.2-0.1,0.1-0.2l-0.1-1.5C136.7,168.7,136.7,168.7,136.7,168.6z"/>
+ <path class="st14" d="M140.6,158.1l-1.8,0.2c0,0-0.1,0-0.1,0.1c-0.2,0.4-0.5,0.7-0.8,1c-0.3,0.3-0.6,0.6-1,0.8
+ c-0.1,0-0.1,0.1-0.1,0.1l0.1,1.1c0,0.1,0.1,0.2,0.1,0.2c0.1,0,0.1,0,0.3,0c0.3-0.1,0.6-0.3,0.9-0.5c0.2-0.2,0.4-0.3,0.6-0.5
+ l0.9,9.4c0,0.1,0.1,0.1,0.2,0.1c0,0,0,0,0,0l1.8-0.2c0,0,0.1,0,0.1-0.1c0,0,0-0.1,0-0.1l-1.1-11.5
+ C140.8,158.2,140.7,158.1,140.6,158.1z"/>
+ <path class="st14" d="M146.3,167.3C146.3,167.3,146.3,167.3,146.3,167.3c-0.3-0.2-0.6-0.3-1-0.3c-0.4,0-0.7,0.2-0.9,0.5
+ c-0.2,0.3-0.3,0.6-0.3,1c0,0.4,0.2,0.7,0.5,0.9c0.2,0.2,0.5,0.3,0.8,0.3c0.1,0,0.1,0,0.2,0c0.4,0,0.7-0.2,0.9-0.5
+ c0.2-0.3,0.3-0.6,0.3-1C146.7,167.8,146.5,167.5,146.3,167.3z"/>
+ <path class="st14" d="M150.3,156.9l-1.8,0.3c0,0-0.1,0-0.1,0.1c-0.2,0.4-0.5,0.7-0.8,1c-0.3,0.3-0.6,0.6-1,0.8
+ c-0.1,0-0.1,0.1-0.1,0.2l0.2,1.1c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.1,0,0.3,0c0.3-0.2,0.6-0.4,0.9-0.6c0.2-0.2,0.4-0.3,0.6-0.5
+ l1.4,9.3c0,0,0,0.1,0.1,0.1c0,0,0.1,0,0.1,0c0,0,0,0,0,0l1.8-0.3c0.1,0,0.1-0.1,0.1-0.2l-1.7-11.4
+ C150.5,156.9,150.4,156.8,150.3,156.9z"/>
+ <path class="st14" d="M161.2,165.1l-4.6,0.9l1.9-3.2c0.2-0.4,0.4-0.7,0.6-1.1c0.2-0.4,0.4-0.8,0.5-1.1c0.1-0.4,0.2-0.8,0.3-1.1
+ c0-0.4,0-0.8,0-1.1c-0.2-1.1-0.7-1.8-1.4-2.2c-0.7-0.4-1.6-0.5-2.7-0.3c-0.6,0.1-1.2,0.4-1.7,0.7c-0.5,0.3-0.9,0.8-1.3,1.2
+ c0,0,0,0.1,0,0.1l0.3,1.4c0,0.2,0.1,0.2,0.2,0.2c0,0,0.2,0,0.3-0.1c0.4-0.5,0.8-1,1.2-1.2c0.4-0.3,0.8-0.5,1.3-0.6
+ c0.5-0.1,0.9,0,1.2,0.2c0.3,0.2,0.5,0.6,0.6,1c0,0.2,0.1,0.4,0.1,0.7c0,0.2,0,0.5-0.1,0.8c-0.1,0.3-0.2,0.6-0.3,0.9
+ c-0.2,0.3-0.4,0.7-0.6,1.2l-2.6,4.4c0,0,0,0.1,0,0.1l0.3,1.4c0,0,0,0.1,0.1,0.1c0,0,0.1,0,0.1,0c0,0,0,0,0,0l6.9-1.3
+ c0,0,0.1,0,0.1-0.1s0-0.1,0-0.1l-0.3-1.5C161.4,165.1,161.3,165.1,161.2,165.1z"/>
+ <path class="st14" d="M163.6,164.2C163.6,164.2,163.6,164.2,163.6,164.2c-0.3-0.2-0.7-0.3-1.1-0.2c-0.4,0.1-0.7,0.3-0.9,0.6
+ c-0.2,0.3-0.3,0.7-0.2,1c0.1,0.4,0.3,0.6,0.6,0.9c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.2,0,0.3,0c0.4-0.1,0.7-0.3,0.9-0.6
+ c0.2-0.3,0.3-0.7,0.2-1C164.1,164.7,163.9,164.5,163.6,164.2z"/>
+ <path class="st14" d="M170.5,158.9L170.5,158.9c-0.3-0.4-0.6-0.8-1-1.1c-0.4-0.3-0.8-0.5-1.2-0.5c-0.5-0.1-0.9-0.1-1.4,0.1
+ c-0.5,0.1-0.9,0.3-1.3,0.7c-0.3,0.2-0.5,0.5-0.6,0.8c0-0.4,0-0.7,0-1c0.1-0.5,0.2-0.9,0.3-1.3c0.2-0.4,0.4-0.7,0.6-0.9
+ c0.3-0.2,0.5-0.4,0.9-0.5c0.4-0.1,0.8-0.1,1.1-0.1c0.3,0,0.6,0.1,0.9,0.2c0.1,0.1,0.2,0,0.3,0c0.1-0.1,0.1-0.2,0.1-0.3l-0.3-1.4
+ c0-0.1-0.1-0.1-0.1-0.1c-0.3-0.1-0.7-0.2-1.1-0.2c-0.4,0-0.9,0-1.3,0.2c-0.7,0.2-1.3,0.5-1.7,0.9c-0.5,0.5-0.8,1-1.1,1.7
+ c-0.2,0.7-0.4,1.4-0.4,2.3c0,0.9,0.1,1.8,0.4,2.8c0.2,0.8,0.4,1.5,0.7,2c0.3,0.6,0.7,1.1,1.1,1.5c0.4,0.4,0.9,0.7,1.4,0.8
+ c0.2,0.1,0.5,0.1,0.8,0.1c0.3,0,0.7,0,1-0.1c0.5-0.1,1-0.4,1.4-0.7c0.4-0.3,0.7-0.7,0.9-1.1c0.2-0.4,0.4-0.9,0.4-1.5
+ c0.1-0.5,0-1.1-0.1-1.7C170.9,159.8,170.7,159.3,170.5,158.9z M169.2,161.9c0,0.3-0.1,0.6-0.2,0.8c-0.1,0.2-0.2,0.4-0.4,0.6
+ c-0.2,0.2-0.4,0.3-0.7,0.3c-0.2,0.1-0.5,0.1-0.7,0c-0.2-0.1-0.5-0.2-0.7-0.3c-0.2-0.2-0.4-0.4-0.6-0.6c-0.2-0.2-0.3-0.5-0.4-0.8
+ c-0.1-0.7-0.1-1.3,0.1-1.8c0.2-0.5,0.5-0.8,1.1-0.9c0.2,0,0.3-0.1,0.5-0.1c0.3,0,0.6,0.1,0.8,0.3c0.4,0.3,0.7,0.8,0.8,1.6
+ C169.2,161.3,169.2,161.6,169.2,161.9z"/>
+ <path class="st14" d="M177.1,155c0-0.2-0.2-0.2-0.3-0.2c-0.1,0-0.2,0-0.3,0.3c-0.1,0.3-0.2,0.6-0.3,0.9c-0.2,0.2-0.4,0.4-0.7,0.5
+ c-0.2,0.1-0.4,0.1-0.5,0c-0.2,0-0.4-0.1-0.7-0.2c-0.6-0.3-1.2-0.3-1.9-0.1c-0.4,0.1-0.7,0.3-1,0.6c-0.3,0.3-0.5,0.7-0.6,1.1
+ c0,0,0,0.1,0,0.1l0.4,1.5c0,0.1,0.1,0.2,0.3,0.2c0,0,0,0,0,0c0.1,0,0.2,0,0.3-0.3c0-0.3,0.2-0.6,0.3-0.9c0.2-0.3,0.4-0.4,0.7-0.5
+ c0.2-0.1,0.4-0.1,0.5,0c0.2,0,0.4,0.1,0.7,0.3c0.3,0.1,0.6,0.2,0.9,0.2c0.3,0,0.6,0,1-0.1c0.4-0.1,0.7-0.3,1-0.6
+ c0.3-0.3,0.5-0.7,0.6-1.1c0,0,0-0.1,0-0.1L177.1,155z"/>
+ <path class="st14" d="M189.3,147.2C189.3,147.2,189.3,147.2,189.3,147.2c-1-0.7-2.1-0.8-3.2-0.3c-1.1,0.5-1.8,1.3-2.1,2.5
+ c-0.1,0.5-0.1,1,0,1.6c-0.4-0.8-0.9-1.4-1.6-1.7c-0.8-0.3-1.7-0.3-2.7,0.1c-0.6,0.2-1.1,0.5-1.6,0.9c-0.4,0.4-0.8,0.9-1.1,1.4
+ c0,0,0,0.1,0,0.1l0.5,1.4c0.1,0.2,0.2,0.2,0.2,0.2c0,0,0.2,0,0.3-0.2c0.3-0.6,0.6-1.1,1-1.4c0.4-0.4,0.8-0.6,1.2-0.8
+ c0.5-0.2,0.9-0.2,1.2,0c0.3,0.2,0.6,0.5,0.7,0.9c0.1,0.2,0.1,0.4,0.2,0.7c0,0.2,0,0.5,0,0.8c0,0.3-0.1,0.6-0.2,1
+ c-0.1,0.4-0.2,0.8-0.4,1.3l-1.9,4.7c0,0,0,0.1,0,0.1l0.5,1.3c0,0.1,0.1,0.1,0.1,0.1c0,0,0,0,0.1,0l6.6-2.3c0,0,0.1,0,0.1-0.1
+ c0,0,0-0.1,0-0.1l-0.5-1.4c0-0.1-0.1-0.1-0.2-0.1l-4.4,1.5l1.4-3.4c0.2-0.4,0.3-0.8,0.4-1.2c0.1-0.4,0.2-0.8,0.3-1.2
+ c0.1-0.3,0.1-0.7,0.1-1c0.1,0.5,0.3,1,0.5,1.5c0.8,2,1.7,3.3,2.7,3.9c0.6,0.4,1.2,0.6,1.8,0.6c0.4,0,0.9-0.1,1.4-0.3
+ c1.1-0.5,1.8-1.3,2.1-2.5c0.2-1.1,0-2.7-0.8-4.7C191.1,149.2,190.2,147.9,189.3,147.2z M190.8,155.2c0,0.7-0.3,1.2-0.8,1.4
+ c-0.5,0.2-1,0.1-1.5-0.4c-0.6-0.5-1.1-1.5-1.7-2.9c-0.6-1.4-0.9-2.6-0.8-3.3c0-0.7,0.3-1.2,0.8-1.4c0.1-0.1,0.3-0.1,0.4-0.1
+ c0.4,0,0.7,0.2,1.1,0.5c0.6,0.5,1.1,1.5,1.7,2.9C190.6,153.4,190.9,154.5,190.8,155.2z"/>
+ <path class="st14" d="M200,152.1C200,152,200,152,200,152.1c-0.1-0.1-0.2-0.1-0.2-0.1l-4.2,1.9l1.1-3.6c0.1-0.4,0.2-0.8,0.3-1.2
+ c0.1-0.4,0.2-0.8,0.2-1.2c0-0.4,0-0.8,0-1.2c-0.1-0.4-0.2-0.7-0.3-1.1c-0.5-1-1.1-1.6-1.9-1.9c-0.8-0.2-1.7-0.1-2.7,0.3
+ c-0.6,0.3-1.1,0.6-1.5,1.1c-0.4,0.5-0.7,1-0.9,1.5c0,0,0,0.1,0,0.1l0.6,1.3c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0,0.2,0,0.3-0.2
+ c0.2-0.6,0.5-1.1,0.8-1.5c0.3-0.4,0.7-0.7,1.1-0.9c0.5-0.2,0.9-0.2,1.2-0.1c0.3,0.2,0.6,0.4,0.8,0.8c0.1,0.2,0.2,0.4,0.2,0.6
+ c0.1,0.2,0.1,0.5,0.1,0.8c0,0.3,0,0.6-0.1,1c-0.1,0.4-0.2,0.8-0.3,1.3l-1.4,4.9c0,0,0,0.1,0,0.1l0.6,1.3c0,0,0,0.1,0.1,0.1
+ c0,0,0,0,0.1,0c0,0,0,0,0.1,0l6.3-2.9c0.1,0,0.1-0.1,0.1-0.2L200,152.1z"/>
+ <path class="st14" d="M206.6,148.6c0-0.1-0.1-0.1-0.2-0.1l-4.1,2.2l0.9-3.6c0.1-0.4,0.2-0.8,0.3-1.3c0.1-0.4,0.1-0.8,0.1-1.2
+ c0-0.4,0-0.8-0.1-1.2c-0.1-0.4-0.2-0.7-0.4-1.1c-0.5-1-1.2-1.6-2-1.8c-0.8-0.2-1.7,0-2.7,0.5c-0.6,0.3-1,0.7-1.4,1.2
+ c-0.4,0.5-0.7,1-0.9,1.5c0,0,0,0.1,0,0.1l0.7,1.3c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0,0.2,0,0.2-0.2c0.2-0.6,0.5-1.1,0.8-1.5
+ c0.3-0.4,0.7-0.7,1.1-0.9c0.5-0.2,0.9-0.3,1.2-0.2c0.3,0.1,0.6,0.4,0.8,0.8c0.1,0.2,0.2,0.4,0.3,0.6c0.1,0.2,0.1,0.5,0.1,0.8
+ c0,0.3,0,0.6-0.1,1c0,0.4-0.1,0.8-0.3,1.3l-1.2,4.9c0,0,0,0.1,0,0.1l0.7,1.2c0,0,0.1,0.1,0.1,0.1c0,0,0,0,0,0c0,0,0,0,0.1,0
+ l6.2-3.3c0,0,0.1-0.1,0.1-0.1c0,0,0-0.1,0-0.1L206.6,148.6z"/>
+ <path class="st14" d="M208.4,147c-0.4-0.1-0.7-0.1-1.1,0.1c-0.3,0.2-0.5,0.5-0.6,0.8c-0.1,0.4,0,0.7,0.1,1
+ c0.2,0.3,0.5,0.5,0.8,0.6c0.1,0,0.2,0.1,0.4,0.1c0.2,0,0.5-0.1,0.7-0.2c0.3-0.2,0.6-0.5,0.7-0.8c0.1-0.4,0-0.7-0.1-1
+ C209,147.3,208.7,147.1,208.4,147z"/>
+ <path class="st14" d="M208.2,135.9c0-0.1-0.1-0.1-0.2,0l-1.5,0.9c0,0-0.1,0.1-0.1,0.1c0,0.4-0.1,0.9-0.3,1.3
+ c-0.1,0.4-0.3,0.8-0.6,1.1c0,0.1,0,0.1,0,0.2l0.6,0.9c0.1,0.1,0.1,0.2,0.2,0.2c0,0,0,0,0,0c0.1,0,0.1,0,0.2-0.1
+ c0.2-0.3,0.4-0.6,0.6-0.9c0.1-0.2,0.3-0.5,0.4-0.7l5,8c0,0,0.1,0.1,0.1,0.1c0,0,0,0,0,0c0,0,0.1,0,0.1,0l1.5-0.9
+ c0.1,0,0.1-0.1,0-0.2L208.2,135.9z"/>
+ <path class="st14" d="M221.5,138.8c0,0-0.1-0.1-0.1-0.1c0,0-0.1,0-0.1,0l-3.8,2.7l0.4-3.7c0-0.4,0.1-0.9,0.1-1.3
+ c0-0.4,0-0.8,0-1.2c0-0.4-0.1-0.8-0.2-1.1c-0.1-0.4-0.3-0.7-0.5-1c-0.6-0.9-1.4-1.4-2.2-1.5c-0.8-0.1-1.7,0.2-2.6,0.8
+ c-0.5,0.4-0.9,0.8-1.2,1.3c-0.3,0.5-0.5,1.1-0.6,1.6c0,0,0,0.1,0,0.1l0.9,1.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.2-0.2
+ c0.1-0.6,0.3-1.2,0.5-1.6c0.2-0.4,0.6-0.8,0.9-1.1c0.4-0.3,0.8-0.4,1.2-0.3c0.4,0.1,0.7,0.3,0.9,0.7c0.1,0.2,0.2,0.4,0.3,0.6
+ c0.1,0.2,0.2,0.5,0.2,0.7c0,0.3,0.1,0.6,0.1,1c0,0.4,0,0.8-0.1,1.3l-0.5,5c0,0,0,0.1,0,0.1l0.8,1.1c0,0,0.1,0.1,0.1,0.1
+ c0,0,0.1,0,0.1,0l5.7-4.1c0.1,0,0.1-0.1,0-0.2L221.5,138.8z"/>
+ <path class="st14" d="M223.1,137C223.1,137,223.1,137,223.1,137c-0.4-0.1-0.7,0-1,0.3c-0.3,0.2-0.5,0.6-0.5,0.9
+ c0,0.4,0.1,0.7,0.3,1c0.2,0.3,0.5,0.5,0.9,0.5c0.1,0,0.1,0,0.2,0c0.3,0,0.6-0.1,0.8-0.3c0.3-0.2,0.5-0.6,0.5-0.9
+ c0-0.4-0.1-0.7-0.3-1C223.8,137.2,223.5,137,223.1,137z"/>
+ <path class="st14" d="M229,131.6c-0.2-0.5-0.5-1-0.8-1.4c-0.3-0.4-0.7-0.7-1.2-0.9c-0.4-0.2-0.9-0.3-1.3-0.3
+ c-0.5,0-0.9,0.1-1.4,0.3c-0.5,0.2-0.9,0.5-1.4,0.9c-0.2,0.2-0.4,0.3-0.5,0.5c-0.1,0.1-0.2,0.2-0.3,0.4l-1.6-2l3.2-2.8
+ c0,0,0.1-0.1,0.1-0.1c0,0,0-0.1,0-0.1l-1-1.1c-0.1-0.1-0.2-0.1-0.2,0l-4.5,3.9c-0.1,0.1-0.1,0.1,0,0.2l3.7,4.8
+ c0,0,0.1,0.1,0.1,0.1c0,0,0,0,0,0c0.1,0,0.1,0,0.1-0.1c0.5-0.7,1-1.3,1.6-1.8c0.6-0.5,1.2-0.8,1.7-0.8c0.6,0,1,0.2,1.4,0.7
+ c0.2,0.2,0.4,0.5,0.5,0.8c0.1,0.3,0.1,0.5,0.1,0.8c0,0.3-0.1,0.5-0.2,0.8c-0.1,0.2-0.3,0.5-0.5,0.7c-0.4,0.4-0.9,0.7-1.3,0.9
+ c-0.4,0.2-1,0.3-1.5,0.3c-0.1,0-0.2,0.1-0.3,0.2c0,0.1,0,0.2,0.1,0.3l0.9,1c0,0,0.1,0.1,0.1,0.1c0,0,0,0,0,0
+ c0.6,0,1.2-0.2,1.7-0.4c0.5-0.2,1-0.6,1.5-1c0.5-0.4,0.8-0.9,1.1-1.4c0.2-0.5,0.4-1,0.4-1.5C229.3,132.6,229.2,132.1,229,131.6z"
+ />
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/chatbot_menu01.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/chatbot_menu01.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_arrow_ascend.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_ascend.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_ascend.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <text transform="matrix(1 0 0 1 1.7466 7.2292)" font-family="'KoPubDotumBold'" font-size="8.3945">A</text>
+ <text transform="matrix(1 0 0 1 2.1191 15.7908)" fill="#3CA123" font-family="'KoPubDotumBold'" font-size="8.3945">Z</text>
+</g>
+<g>
+ <polygon points="15.119,9.943 11.592,15.243 8.065,9.943 "/>
+ <path d="M10.843,2.621c0-0.256,0.336-0.462,0.749-0.462c0.417,0,0.755,0.206,0.755,0.462v9.221c0,0.254-0.338,0.459-0.755,0.459
+ c-0.413,0-0.749-0.205-0.749-0.459V2.621z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/file_hwp.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_hwp.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_hwp.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" viewBox="0 0 446.5 595.4" style="enable-background:new 0 0 446.5 595.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#424242;}
+ .st1{fill:#424242;stroke:#424242;stroke-width:11;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<path class="st0" d="M430.1,113.9l-97.5-97.5C322.1,5.9,307.9,0,293.1,0H55.8C25,0.1,0,25.1,0,55.9v483.7c0,30.8,25,55.8,55.8,55.8
+ h334.8c30.8,0,55.8-25,55.8-55.8V153.5C446.5,138.7,440.5,124.4,430.1,113.9z M386.1,148.9h-88.5V60.5L386.1,148.9z M55.8,539.6
+ V55.9h186v120.9c0,15.5,12.4,27.9,27.9,27.9h120.9v334.8L55.8,539.6L55.8,539.6z M311.7,280.5"/>
+<g>
+ <path class="st1" d="M160.1,273.4h33.7v66.5h63.8v-66.5h33.5v168.9h-33.5v-72.9h-63.8v72.9h-33.7V273.4z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_search.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_search.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_search.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 100.67 104.57" style="enable-background:new 0 0 100.67 104.57;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#343231;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#343231;stroke-width:7;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+
+ <ellipse transform="matrix(0.7071 -0.7071 0.7071 0.7071 -17.1727 41.4582)" class="st0" cx="41.46" cy="41.46" rx="36.46" ry="36.46"/>
+ <line class="st0" x1="65.21" y1="69.11" x2="95.67" y2="99.57"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/check_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/check_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/check_on.svg (revision 7)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 8.8 8.8" style="enable-background:new 0 0 8.8 8.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#333333;}
+ .st1{fill:#FFFFFF;}
+</style>
+<g>
+ <g>
+ <g>
+ <path class="st0" d="M3.6,7.3C3.4,7.3,3.2,7.2,3,7L0.8,5c-0.2-0.3-0.2-0.7,0-1.1V3.8l0.6-0.6C1.5,3.1,1.7,3,1.9,3s0.3,0,0.5,0.1
+ h0.1l1.1,1.1l2.7-2.7c0.1-0.1,0.3-0.2,0.6-0.2c0.2,0,0.3,0,0.5,0.1h0.1L8.1,2c0.3,0.3,0.3,0.7,0.1,1.1v0.1L4.2,7
+ C4.1,7.2,3.8,7.3,3.6,7.3z"/>
+ <path class="st1" d="M6.9,1.8c0.1,0,0.2,0,0.3,0.1l0.5,0.5c0.1,0.1,0.1,0.3,0,0.5L3.8,6.7c-0.3,0.2-0.5,0-0.5,0L1.2,4.6
+ c-0.1-0.1-0.3-0.3,0-0.5l0.5-0.5c0.1-0.1,0.2-0.1,0.2-0.1c0.1,0,0.2,0,0.3,0.1L3.6,5l3.1-3.1C6.8,1.8,6.8,1.8,6.9,1.8 M6.9,0.8
+ C6.6,0.8,6.2,1,6,1.2L3.6,3.6L2.9,2.9L2.8,2.8L2.6,2.7C2.4,2.6,2.2,2.5,1.9,2.5S1.2,2.7,1,2.9L0.5,3.4L0.4,3.5L0.3,3.7
+ C0,4.2,0.1,4.9,0.5,5.3l2.1,2.1c0.4,0.4,0.7,0.4,1,0.4c0.4,0,0.8-0.2,1-0.5l3.8-3.7l0.1-0.1l0.1-0.2c0.3-0.6,0.2-1.2-0.2-1.7
+ L7.9,1.2L7.8,1.1L7.6,1C7.4,0.9,7.2,0.8,6.9,0.8L6.9,0.8z"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/chatbot_menu02.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/chatbot_menu02.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/E8C64609.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/E8C64609.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_arrow_descend.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_descend.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_descend.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <text transform="matrix(1 0 0 1 1.7461 7.2292)" fill="#3CA123" font-family="'KoPubDotumBold'" font-size="8.3945">A</text>
+ <text transform="matrix(1 0 0 1 2.1294 15.7908)" font-family="'KoPubDotumBold'" font-size="8.3945">Z</text>
+</g>
+<g>
+ <polygon points="15.119,9.943 11.592,15.243 8.065,9.943 "/>
+ <path d="M10.843,2.621c0-0.256,0.335-0.462,0.749-0.462c0.417,0,0.754,0.206,0.754,0.462v9.221c0,0.253-0.337,0.459-0.754,0.459
+ c-0.414,0-0.749-0.206-0.749-0.459V2.621z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_market.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_market.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_market.svg (revision 7)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 297.9 55.5" style="enable-background:new 0 0 297.9 55.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ECECEB;}
+</style>
+<g>
+ <path class="st0" d="M28.7,23.8L28.7,23.8c-0.5,1.6-1,3.1-1.4,4.8c-0.3,1-0.6,2-0.9,3c-0.1-0.5-0.3-1-0.4-1.4
+ c-0.6-2.1-1.2-4.3-1.9-6.3L15.4,0H0v55.5h13.2V36.2c0-3.4-0.4-7.8-0.8-11.9l2.1,6.4L22,51h8.3l7.4-20.3L40,24
+ c-0.5,4.2-0.9,8.8-0.9,12.2v19.3h13.5V0H37.2L28.7,23.8z"/>
+ <path class="st0" d="M73.3,0L56.1,55.5h14.9l3.1-12.4h14.5l3.1,12.4h15.4L90,0H73.3z M85.8,31.5h-8.8L78,28
+ c1.1-4.5,2.4-9.7,3.5-14.5c0.4,1.8,0.9,3.6,1.3,5.4c0.7,3.1,1.5,6.3,2.2,9.1L85.8,31.5z"/>
+ <path class="st0" d="M153.2,17.8c0-6.3-2.2-11.1-6.6-14.1C143,1.3,137.9,0,131.4,0h-20.5v55.5h14.6v-19h4.8l9.9,19h16.4l-12.2-21.8
+ C148.5,31.5,153.2,26.9,153.2,17.8z M125.4,11.9h4.9c6.1,0,8.5,1.6,8.5,5.9c0,4.6-2.9,6.9-8.5,6.9h-4.9V11.9z"/>
+ <polygon class="st0" points="206.9,0 190.6,0 176.5,19.8 176.5,0 161.9,0 161.9,55.5 176.5,55.5 176.5,40.8 181.4,34.2 193.6,55.5
+ 209.7,55.5 190,22.5 "/>
+ <polygon class="st0" points="227.5,33.2 245.5,33.2 245.5,20.7 227.5,20.7 227.5,12.4 248.6,12.4 248.6,0 212.9,0 212.9,55.5
+ 249.4,55.5 249.4,43 227.5,43 "/>
+ <polygon class="st0" points="254.2,0 254.2,12.4 268.7,12.4 268.7,55.5 283.3,55.5 283.3,12.4 297.9,12.4 297.9,0 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_add.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_add.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_add.svg (revision 7)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="36.771px" height="37.685px" viewBox="0 0 36.771 37.685" enable-background="new 0 0 36.771 37.685" xml:space="preserve">
+<g>
+ <rect x="0.714" y="6.165" fill="#E9EFEE" width="26.518" height="30.807"/>
+
+ <rect x="0.714" y="6.165" fill="none" stroke="#343340" stroke-width="1.4272" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="26.518" height="30.807"/>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_3_" x="8.928" y="8.788" width="18.304" height="19.051"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_3_" overflow="visible"/>
+ </clipPath>
+ <polygon clip-path="url(#SVGID_2_)" fill="#C4CCCE" points="30.602,8.788 30.602,16.19 16.79,25.972 8.928,27.837 13.301,21.04
+ "/>
+ </g>
+ </g>
+
+ <rect x="21.053" y="-1.229" transform="matrix(0.7073 0.7069 -0.7069 0.7073 16.0225 -13.3031)" fill="#B7DFCD" width="6.044" height="27.848"/>
+
+ <rect x="21.053" y="-1.229" transform="matrix(0.7073 0.7069 -0.7069 0.7073 16.0225 -13.3031)" fill="none" stroke="#343340" stroke-width="1.4272" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="6.044" height="27.848"/>
+ <polygon fill="#E9EFEE" points="16.364,24.679 12.092,20.405 10.76,23.534 13.235,26.009 "/>
+
+ <polygon fill="none" stroke="#343340" stroke-width="1.4272" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 16.364,24.679 12.092,20.405 10.76,23.534 13.235,26.009 "/>
+ <polygon fill="#8F9999" points="13.235,26.009 10.761,23.534 8.928,27.843 "/>
+
+ <polygon fill="none" stroke="#343340" stroke-width="1.4272" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 13.235,26.009 10.761,23.534 8.928,27.843 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_double_left.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_double_left.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_double_left.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 61 66.6" style="enable-background:new 0 0 61 66.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#3C3C3C;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="56.5,62.1 27.7,33.3 56.5,4.5 "/>
+ <polyline class="st0" points="33.3,62.1 4.5,33.3 33.3,4.5 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_main_section3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_main_section3.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/arrow_right_navy.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_right_navy.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_right_navy.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.8 66.6" style="enable-background:new 0 0 37.8 66.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#093B80;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="4.5,4.5 33.3,33.3 4.5,62.1 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_down_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_down_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_down_fff.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="66.609px" height="37.805px" viewBox="-14.402 14.403 66.609 37.805" enable-background="new -14.402 14.403 66.609 37.805"
+ xml:space="preserve">
+<polyline fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 47.707,18.903 18.903,47.707 -9.902,18.903 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_clock.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_clock.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_clock.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 110 110" style="enable-background:new 0 0 110 110;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#333333;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M105,55c0,27.6-22.4,50-50,50C27.4,105,5,82.6,5,55C5,27.4,27.4,5,55,5C82.6,5,105,27.4,105,55"/>
+ <path class="st0" d="M105,55"/>
+ <polyline class="st0" points="36,55 55,55 55,25.5 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_del.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_del.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_del.svg (revision 7)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="29.215px" height="37.497px" viewBox="0 0 29.215 37.497" enable-background="new 0 0 29.215 37.497" xml:space="preserve">
+<g>
+ <path fill="#9AA9A9" d="M22.4,36.815H6.816c-2.027,0-3.674-1.643-3.674-3.672V9.692h22.93v23.451
+ C26.072,35.172,24.43,36.815,22.4,36.815"/>
+
+ <path fill="none" stroke="#343340" stroke-width="1.3618" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M22.4,36.815H6.816c-2.027,0-3.674-1.643-3.674-3.672V9.692h22.93v23.451C26.072,35.172,24.43,36.815,22.4,36.815z"/>
+ <rect x="0.68" y="5.235" fill="#9AA9A9" width="27.855" height="4.457"/>
+
+ <rect x="0.68" y="5.235" fill="none" stroke="#343340" stroke-width="1.3618" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="27.855" height="4.457"/>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_1_" x="3.145" y="9.692" width="22.93" height="3.207"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" overflow="visible"/>
+ </clipPath>
+ <rect x="3.143" y="9.692" clip-path="url(#SVGID_2_)" fill="#8F9999" width="22.93" height="3.207"/>
+ </g>
+ </g>
+
+ <rect x="8.709" y="0.681" fill="none" stroke="#343340" stroke-width="1.3618" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="11.799" height="4.554"/>
+
+ <path fill="none" stroke="#343340" stroke-width="1.3618" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M14.609,14.776v16.955V14.776z"/>
+
+ <path fill="none" stroke="#343340" stroke-width="1.3618" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M9.389,14.776v16.955V14.776z"/>
+
+ <path fill="none" stroke="#343340" stroke-width="1.3618" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M19.828,14.776v16.955V14.776z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/chatbot_img.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/chatbot_img.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_main_section4.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_main_section4.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/triangle.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/triangle.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/triangle.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 7 7" style="enable-background:new 0 0 7 7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+</style>
+<g>
+ <polygon class="st0" points="0,0 3.5,7 7,0 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_gd3.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_gd3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_gd3.svg (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 29.5 22.4" style="enable-background:new 0 0 29.5 22.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#666666;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:#666666;stroke:#666666;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="10.7,7.7 7.8,6.4 1,9.4 1,21.4 7.8,18.4 14.7,21.4 21.6,18.4 28.5,21.4 28.5,9.4 21.6,6.4 "/>
+ <line class="st0" x1="7.8" y1="6.4" x2="7.8" y2="18.4"/>
+ <line class="st0" x1="14.7" y1="13.2" x2="14.7" y2="21.4"/>
+ <polyline class="st0" points="18.2,7.7 21.6,6.4 21.6,18.4 "/>
+ <path class="st0" d="M19,5.3c0,2.3-4.3,7.9-4.3,7.9s-4.2-5.5-4.2-7.9C10.5,3,12.3,1,14.8,1C17.1,1.1,19,3,19,5.3"/>
+ <path class="st0" d="M19,5.3c0,2.3-4.3,7.9-4.3,7.9s-4.2-5.5-4.2-7.9C10.5,3,12.3,1,14.8,1C17.1,1.1,19,3,19,5.3z"/>
+ <path class="st1" d="M15.9,5.3c0,0.6-0.6,1.2-1.2,1.2s-1.2-0.6-1.2-1.2s0.6-1.2,1.2-1.2C15.4,4.2,15.9,4.7,15.9,5.3z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_4_1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_4_1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_question_mark.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_question_mark.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_question_mark.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" enable-background="new 0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <path d="M4.484,6.318c0-0.454,0.146-0.914,0.438-1.38C5.214,4.471,5.639,4.085,6.198,3.78C6.757,3.473,7.41,3.321,8.156,3.321
+ c0.692,0,1.304,0.128,1.835,0.384c0.53,0.256,0.94,0.604,1.229,1.043s0.434,0.918,0.434,1.435c0,0.406-0.082,0.763-0.247,1.068
+ s-0.361,0.569-0.588,0.792s-0.635,0.597-1.223,1.122c-0.162,0.148-0.293,0.279-0.391,0.39C9.108,9.668,9.035,9.771,8.987,9.863
+ c-0.048,0.094-0.085,0.188-0.111,0.279C8.85,10.236,8.81,10.4,8.758,10.635c-0.091,0.496-0.376,0.746-0.854,0.746
+ c-0.248,0-0.458-0.082-0.627-0.244c-0.17-0.162-0.255-0.404-0.255-0.725c0-0.402,0.063-0.748,0.187-1.043
+ c0.124-0.294,0.289-0.552,0.495-0.775c0.205-0.222,0.482-0.485,0.831-0.792c0.306-0.268,0.527-0.47,0.664-0.606
+ c0.136-0.136,0.25-0.287,0.344-0.454c0.094-0.168,0.14-0.35,0.14-0.546c0-0.382-0.142-0.705-0.427-0.968
+ c-0.284-0.263-0.651-0.395-1.1-0.395c-0.526,0-0.914,0.133-1.162,0.398C6.745,5.496,6.535,5.888,6.363,6.404
+ C6.2,6.945,5.892,7.214,5.438,7.214c-0.269,0-0.494-0.095-0.678-0.283C4.576,6.742,4.484,6.537,4.484,6.318z M7.983,14.176
+ c-0.292,0-0.546-0.094-0.764-0.281c-0.218-0.189-0.326-0.453-0.326-0.793c0-0.301,0.105-0.555,0.315-0.76
+ c0.21-0.207,0.469-0.309,0.774-0.309c0.301,0,0.555,0.102,0.76,0.309c0.206,0.205,0.309,0.459,0.309,0.76
+ c0,0.334-0.107,0.598-0.322,0.789C8.514,14.082,8.266,14.176,7.983,14.176z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_3_2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_3_2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/file_img.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_img.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_img.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="446.461px" height="595.397px" viewBox="197.715 -0.116 446.461 595.397"
+ enable-background="new 197.715 -0.116 446.461 595.397" xml:space="preserve">
+<path fill="#333333" d="M627.782,113.824l-97.547-97.547C519.771,5.813,505.587-0.116,490.821-0.116H253.522
+ C222.712,0,197.715,24.997,197.715,55.808v483.665c0,30.811,24.997,55.809,55.808,55.809h334.846
+ c30.811,0,55.808-24.998,55.808-55.809V153.354C644.176,138.589,638.246,124.288,627.782,113.824z M583.834,148.82h-88.479V60.342
+ L583.834,148.82z M253.522,539.472V55.808h186.025v120.916c0,15.463,12.44,27.904,27.903,27.904h120.917v334.845H253.522z
+ M290.727,483.666h260.436v-148.82l-27.322-27.322c-5.465-5.465-14.301-5.465-19.766,0L402.343,409.255l-45.925-45.926
+ c-5.465-5.463-14.301-5.463-19.766,0l-45.925,45.926V483.666z M346.535,204.627c-30.811,0-55.808,24.997-55.808,55.808
+ s24.997,55.807,55.808,55.807s55.808-24.996,55.808-55.807S377.345,204.627,346.535,204.627z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/file_ppt.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_ppt.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_ppt.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="446.461px" height="595.397px" viewBox="197.715 -0.116 446.461 595.397"
+ enable-background="new 197.715 -0.116 446.461 595.397" xml:space="preserve">
+<path fill="#333333" d="M627.782,113.824l-97.547-97.547C519.771,5.813,505.587-0.116,490.821-0.116H253.522
+ C222.712,0,197.715,24.997,197.715,55.808v483.665c0,30.811,24.997,55.809,55.808,55.809h334.846
+ c30.811,0,55.808-24.998,55.808-55.809V153.354C644.176,138.589,638.246,124.288,627.782,113.824z M583.834,148.82h-88.479V60.342
+ L583.834,148.82z M253.522,539.472V55.808h186.025v120.916c0,15.463,12.44,27.904,27.903,27.904h120.917v334.845H253.522z
+ M337.233,469.712V274.387c0-7.674,6.278-13.952,13.952-13.952h80.456c42.67,0,73.015,31.392,73.015,77.084
+ c0,86.385-79.874,77.316-111.033,77.316v54.877c0,7.674-6.278,13.953-13.952,13.953h-28.485
+ C343.511,483.666,337.233,477.386,337.233,469.712z M393.623,368.097h26.74c9.186,0,16.162-2.791,21.045-8.371
+ c9.883-11.395,9.767-33.137,0.116-43.949c-4.767-5.348-11.511-8.139-20.23-8.139h-27.787v60.459H393.623z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_lock.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_lock.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_lock.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 24.1 28.8" style="enable-background:new 0 0 24.1 28.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:none;stroke:#333333;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#D5D6D5;}
+</style>
+<g>
+ <rect x="0.8" y="10.2" class="st0" width="22.6" height="17.9"/>
+ <rect x="0.8" y="10.2" class="st1" width="22.6" height="17.9"/>
+ <path class="st2" d="M14.1,17.3c0,1.1-0.9,2-2,2c-1.1,0-2-0.9-2-2c0-1.1,0.9-2,2-2C13.2,15.3,14.1,16.2,14.1,17.3"/>
+ <path class="st1" d="M14.1,17.3c0,1.1-0.9,2-2,2c-1.1,0-2-0.9-2-2c0-1.1,0.9-2,2-2C13.2,15.3,14.1,16.2,14.1,17.3z"/>
+ <line class="st0" x1="12.1" y1="19.4" x2="12.1" y2="24"/>
+ <line class="st1" x1="12.1" y1="19.4" x2="12.1" y2="24"/>
+ <path class="st0" d="M18.4,10.2H5.7V4.6c0-2.1,1.7-3.8,3.8-3.8h5c2.1,0,3.8,1.7,3.8,3.8V10.2z"/>
+ <path class="st1" d="M18.4,10.2H5.7V4.6c0-2.1,1.7-3.8,3.8-3.8h5c2.1,0,3.8,1.7,3.8,3.8V10.2z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_say_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_say_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_say_on.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 39.9 36.9" style="enable-background:new 0 0 39.9 36.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M19.9,1c8.8,0,16.2,5.2,18.3,12.3c0.1,0.4,0.2,0.9,0.3,1.3c0.2,0.9,0.3,1.9,0.3,2.9c0,4.9-2.4,9.2-6.2,12.2
+ c1.4,3.1,3.7,5.4,6.1,6.1c-4.5,0.3-8.6-0.9-11.2-3.3c-2.3,0.9-4.9,1.4-7.6,1.4C9.5,33.9,1,26.6,1,17.5S9.5,1,19.9,1z"/>
+ <line class="st0" x1="21.4" y1="18.4" x2="18.5" y2="18.4"/>
+ <line class="st0" x1="13" y1="18.4" x2="10" y2="18.4"/>
+ <line class="st0" x1="30.2" y1="18.4" x2="27.2" y2="18.4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_main_section5.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_main_section5.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_mic.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_mic.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_mic.svg (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 22.4 22.4" style="enable-background:new 0 0 22.4 22.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:none;stroke:#D0301A;stroke-width:2;stroke-linejoin:round;}
+</style>
+<g>
+ <g>
+ <path class="st0" d="M17.3,11.1L17,11.3c1-0.2,2.1-0.6,2.9-1.5c2-2,2-5.3,0-7.4c-2-2-5.3-2-7.4,0c-0.8,0.8-1.3,1.8-1.5,2.9
+ l0.2-0.3L17.3,11.1z"/>
+ <polygon class="st0" points="11.3,5.1 11,5.4 9.5,7.3 8,9.4 2.5,16.8 5.6,19.9 13,14.3 15,12.8 17,11.3 17.3,11.1 "/>
+ </g>
+ <line class="st0" x1="4.1" y1="18.3" x2="0.7" y2="21.6"/>
+</g>
+<g>
+ <g>
+ <path class="st1" d="M17.3,11.1L17,11.3c1-0.2,2.1-0.6,2.9-1.5c2-2,2-5.3,0-7.4c-2-2-5.3-2-7.4,0c-0.8,0.8-1.3,1.8-1.5,2.9
+ l0.2-0.3L17.3,11.1z"/>
+ <polygon class="st1" points="11.3,5.1 11,5.4 9.5,7.3 8,9.4 2.5,16.8 5.6,19.9 13,14.3 15,12.8 17,11.3 17.3,11.1 "/>
+ </g>
+ <line class="st1" x1="4.1" y1="18.3" x2="0.7" y2="21.6"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/sns1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/sns1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/sns1.svg (revision 7)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="83.963px" height="76.928px" viewBox="0 0 83.963 76.928" enable-background="new 0 0 83.963 76.928" xml:space="preserve">
+<polyline fill="#FFFFFF" points="45.788,63.141 55.231,76.928 83.963,76.928 83.963,0 55.325,0 55.325,38.815 28.742,0 0,0
+ 0,76.928 28.644,76.928 28.644,38.114 45.788,63.141 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_fileup_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_fileup_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_fileup_on.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37 30" style="enable-background:new 0 0 37 30;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#007DC3;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="11.5,8.5 18.5,1.5 25.5,8.5 "/>
+ <polyline class="st0" points="35.5,16.5 35.5,28.5 1.5,28.5 1.5,16.5 "/>
+ <line class="st0" x1="18.5" y1="1.5" x2="18.5" y2="20.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_4_2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_4_2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/hyundai.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/hyundai.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/hyundai.svg (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 85.9 57.3" style="enable-background:new 0 0 85.9 57.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#003B83;}
+</style>
+<g>
+ <polygon class="st0" points="11.6,43.5 11.6,57.3 8.9,57.3 8.9,51.6 2.8,51.6 2.8,57.3 0,57.3 0,43.5 2.8,43.5 2.8,49 8.9,49
+ 8.9,43.5 11.6,43.5 "/>
+ <polygon class="st0" points="83.1,57.3 85.9,57.3 85.9,43.5 83.1,43.5 83.1,57.3 "/>
+ <path class="st0" d="M36,53.6c0,0.9-0.1,1.1-0.9,1.1c-0.8,0-5,0-5,0V43.5h-2.7v13.8h9c0,0,2.3-0.2,2.3-3.1c0-3,0-10.8,0-10.8H36
+ C36,43.5,36,52.9,36,53.6L36,53.6z"/>
+ <path class="st0" d="M49.8,57.3h2.8c0,0,0-7.8,0-10.8c0-2.9-2.4-3.1-2.4-3.1h-9v13.8h2.8V46.2c0,0,4.1,0,4.9,0
+ c0.7,0,0.9,0.2,0.9,1.1C49.8,47.9,49.8,57.3,49.8,57.3L49.8,57.3z"/>
+ <polygon class="st0" points="26.3,43.5 22.8,43.5 19.5,49.4 16.2,43.5 12.8,43.5 18.2,52.4 18.2,57.3 20.9,57.3 20.9,52.3
+ 26.3,43.5 "/>
+ <path class="st0" d="M55.1,57.3c0,0,6.5,0,8.9,0c2.4,0,2.6-2.7,2.6-2.7v-8.3c0,0-0.2-2.7-2.6-2.7c-2.4,0-8.9,0-8.9,0V57.3
+ L55.1,57.3z M63.8,53.6c0,0,0,1.1-0.9,1.1c-0.7,0-5.1,0-5.1,0v-8.5c0,0,4.4,0,5.1,0c0.9,0,0.9,1.1,0.9,1.1V53.6L63.8,53.6z"/>
+ <path class="st0" d="M80.8,43.5v13.8h-2.8v-4h-6.2v4H69V47.1c0-3.7,3-3.5,3-3.5H80.8L80.8,43.5z M77.9,50.7v-4.6h-5.3
+ c0,0-0.9,0-0.9,1.3c0,1.1,0,3.3,0,3.3H77.9L77.9,50.7z"/>
+ <path class="st0" d="M74.8,17.9c0,9.8-14.3,17.8-31.9,17.8c-17.6,0-31.9-8-31.9-17.8C11.1,8,25.4,0,43,0C60.5,0,74.8,8,74.8,17.9
+ L74.8,17.9z M41.5,15.4c2.7-0.6,5.4-1.6,7.5-2.5c6.8-2.6,10-5.4,10.6-6C60.5,6,59.8,5.7,59,5.4C54.4,3.9,47.4,2.7,42.9,3
+ c-3.3,0.1-5.1,4-5.8,5.7C33.7,16.6,39.8,15.8,41.5,15.4L41.5,15.4z M20.7,26.7c0.1-0.3,5.5-14.2,11.8-21.8c0.8-0.8-0.1-1-1.1-0.7
+ c-10.4,2.2-17.6,7.5-17.6,13.6c0,3.4,2.2,6.5,5.8,9C20,27.1,20.5,26.9,20.7,26.7L20.7,26.7z M44.4,20.3c-2.7,0.6-5.4,1.6-7.5,2.5
+ c-6.8,2.6-10,5.5-10.6,6.1c-0.9,0.8-0.2,1.2,0.6,1.4c4.6,1.5,11.6,2.7,16.1,2.5c3.2-0.2,5.1-4.1,5.9-5.8
+ C52.2,19.1,46.1,20,44.4,20.3L44.4,20.3z M72.2,17.9c0-3.4-2.1-6.4-5.8-8.9c-0.5-0.4-0.9-0.2-1.2,0.2c-0.1,0.2-5.5,14.1-11.8,21.7
+ c-0.7,0.9,0.1,1,1.1,0.8C64.9,29.3,72.2,24,72.2,17.9L72.2,17.9z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/ts_logo_v.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/ts_logo_v.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/ts_logo_v.svg (revision 7)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 144.1 60.6" style="enable-background:new 0 0 144.1 60.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+ .st2{fill:#898989;}
+</style>
+<g id="XMLID_5131_">
+ <g id="XMLID_5164_">
+
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="73.137" y1="24.3083" x2="100.1552" y2="3.8466" gradientTransform="matrix(1 0 0 -1 0 25.89)">
+ <stop offset="0" style="stop-color:#23ADE0"/>
+ <stop offset="0.1885" style="stop-color:#21A9DD"/>
+ <stop offset="0.4351" style="stop-color:#1E9FD5"/>
+ <stop offset="0.7139" style="stop-color:#178FC8"/>
+ <stop offset="1" style="stop-color:#1479B8"/>
+ </linearGradient>
+ <path id="XMLID_5166_" class="st0" d="M92.2,18.4c2,0.8,1.5,3.3-0.9,3.3H75.8c-0.4,0-0.8,0.4-0.8,0.9v2c0,0.5,0.4,0.9,0.8,0.9
+ h18.1c4.2,0,7.5-2.1,7.5-6.3c0-2.8-1.2-5.1-4.3-6.5C95.2,12,83.8,7.2,83.8,7.2c-2.1-0.8-1.6-3.3,0.9-3.3h15.5
+ c0.4,0,0.8-0.4,0.8-0.9V1c0-0.5-0.4-0.9-0.8-0.9H82.1c-4.2,0-7.5,2-7.5,6.3c0,2.8,1.2,5.1,4.3,6.5C80.7,13.6,92.2,18.4,92.2,18.4z
+ "/>
+
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="47.4322" y1="30.4603" x2="67.4074" y2="9.9984" gradientTransform="matrix(1 0 0 -1 0 25.89)">
+ <stop offset="5.618000e-03" style="stop-color:#F5C41E"/>
+ <stop offset="1" style="stop-color:#EA7E26"/>
+ </linearGradient>
+ <path id="XMLID_5165_" class="st1" d="M73.6,0h-30c-0.4,0-0.8,0.4-0.8,0.9v2c0,0.5,0.4,0.9,0.8,0.9h10.8v20.8
+ c0,0.5,0.4,0.9,0.8,0.9l0,0h6.7l0,0c0.5,0,0.8-0.4,0.8-0.9V3.9h10.8c0.4,0,0.8-0.4,0.8-0.9V1C74.4,0.4,74,0,73.6,0z"/>
+ </g>
+ <g id="XMLID_5132_">
+ <path id="XMLID_5161_" class="st2" d="M49,44H37.9v-1.5h13.8v13.8H49C49,56.3,49,44,49,44z M46.7,49.4H44v8.5h-2.3v-8.5H39v8.5
+ h-2.4v1.5h16.5v-1.5h-6.5L46.7,49.4L46.7,49.4z"/>
+ <path id="XMLID_5158_" class="st2" d="M144.1,46v1.5h-2.4V55H139v-4c-1.1,0.2-3,0.4-4.9,0.4c-2.8,0-4.6-0.3-5.3-0.5l0,0l0,0l0,0
+ c-0.9-0.2-1.4-0.8-1.4-1.5v-6.9h8.9V44h-6.2v5.5c0.4,0.1,1.4,0.3,4,0.3c1.9,0,3.9-0.2,5-0.4V42h2.7v3.9L144.1,46L144.1,46z
+ M131.9,58.2v-4.9h-2.7v4.6c0,0-0.1,1.2,1.5,1.5c0.7,0.2,2.4,0.5,5.3,0.5c2.9,0,5.8-0.6,5.8-0.6v-1.5c-0.2,0.1-3.1,0.5-5.9,0.5
+ C133.2,58.4,132.2,58.3,131.9,58.2z"/>
+ <path id="XMLID_5153_" class="st2" d="M88.2,45.9h2.6v1.5h-2.6v7.5h-2.7V42h2.7V45.9z M78.4,58.2v-4.9h-2.7v4.6
+ c0,0-0.1,1.2,1.5,1.5c0.7,0.2,2.4,0.5,5.3,0.5c2.9,0,5.8-0.6,5.8-0.6v-1.5c-0.2,0.1-3.1,0.5-5.9,0.5
+ C79.8,58.4,78.8,58.3,78.4,58.2z M78.1,52.2c-2.8,0-5-2.3-5-5.1c0-2.8,2.2-5.1,5-5.1s5,2.3,5,5.1C83.1,49.9,80.9,52.2,78.1,52.2z
+ M78.1,50.7c1.3,0,2.3-1.6,2.3-3.6s-1-3.6-2.3-3.6s-2.3,1.6-2.3,3.6C75.8,49.1,76.8,50.7,78.1,50.7z"/>
+ <path id="XMLID_5149_" class="st2" d="M63.1,52.2c-3.7,0-6.7,1.9-6.7,4.2c0,2.3,3,4.2,6.7,4.2s6.7-1.9,6.7-4.2
+ C69.8,54.1,66.8,52.2,63.1,52.2z M63.1,59.1c-2.1,0-3.8-1.2-3.8-2.7s1.7-2.7,3.8-2.7s3.8,1.2,3.8,2.7
+ C66.9,57.8,65.2,59.1,63.1,59.1z M64.5,50.1h7v1.5H54.8v-1.5h7v-0.8c-2.2-0.1-3.5-0.3-4.2-0.4c-1.8-0.4-1.7-1.5-1.7-1.5v-4.9h14.3
+ V44H58.6v1.1h11.6v1.5H58.6v1c0.8,0.1,1.9,0.3,4.9,0.3c3.2,0,6.5-0.4,6.8-0.5v1.5c0,0-2.8,0.5-5.8,0.5L64.5,50.1L64.5,50.1z"/>
+ <path id="XMLID_5145_" class="st2" d="M123.6,49.6h1.9v1.5h-16.7v-1.5h5.7v-2.9h2.7v2.9h3.8V44h-10.5v-1.5h13.2L123.6,49.6
+ L123.6,49.6z M123.8,56.4c0,2.3-3,4.2-6.7,4.2s-6.7-1.9-6.7-4.2c0-2.3,3-4.2,6.7-4.2C120.9,52.2,123.8,54,123.8,56.4z M121,56.4
+ c0-1.5-1.7-2.7-3.8-2.7s-3.8,1.2-3.8,2.7s1.7,2.7,3.8,2.7C119.3,59,121,57.8,121,56.4z"/>
+ <path id="XMLID_5141_" class="st2" d="M104,47.4h-2.5v-1.5h2.5V42h2.7v12.9H104V47.4z M96.8,58.2v-4.9h-2.7v4.6
+ c0,0-0.1,1.2,1.5,1.5c0.7,0.2,2.4,0.5,5.3,0.5c2.9,0,5.8-0.6,5.8-0.6v-1.5c-0.2,0.1-3.1,0.5-5.9,0.5
+ C98.2,58.4,97.2,58.3,96.8,58.2z M96.6,48.5c1,1.5,2.8,2.7,4.2,3.5l1.1-1.3c-2.4-1.6-3.8-3.5-3.8-6.2V44h3.3v-1.5H92V44h3.3v0.4
+ c0,2.8-1.4,4.6-3.8,6.2l1.1,1.3C93.8,51.2,95.6,49.9,96.6,48.5z"/>
+ <path id="XMLID_5135_" class="st2" d="M14.9,45.9h2.6v1.5h-2.6v7.5h-2.7V42h2.7V45.9z M5.1,58.2v-4.9H2.4v4.6c0,0-0.1,1.2,1.5,1.5
+ c0.7,0.2,2.4,0.5,5.3,0.5s5.8-0.6,5.8-0.6v-1.5c-0.2,0.1-3.1,0.5-5.9,0.5C6.5,58.4,5.5,58.3,5.1,58.2z M9.5,47.9
+ c0-1.2-0.5-2.2-1.4-3h1.4v-1.5H6.3V42h-3v1.4H0v1.5h1.4c-0.8,0.8-1.4,1.8-1.4,3c0,2.3,2.1,4.2,4.7,4.2C7.4,52.1,9.5,50.2,9.5,47.9
+ z M2.6,47.8c0-1.6,1-2.8,2.2-2.8S7,46.3,7,47.8c0,1.6-1,2.8-2.2,2.8S2.6,49.3,2.6,47.8z"/>
+ <path id="XMLID_5133_" class="st2" d="M34.6,51.1h-7.2v2.2h5.4v7.2h-2.7v-5.7H19.2v-1.5h5.4v-2.2h-7.2v-1.5h12.5V44H19.5v-1.5
+ h13.2v7h2L34.6,51.1L34.6,51.1z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_prog2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_prog2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_prog2.svg (revision 7)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 70.5 61.3" style="enable-background:new 0 0 70.5 61.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:none;stroke:#38383B;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#DADBE1;}
+ .st3{fill:#0E8DCC;}
+ .st4{fill:#FF7F79;}
+ .st5{clip-path:url(#SVGID_4_);fill:#DADBE1;}
+ .st6{clip-path:url(#SVGID_6_);fill:#DADBE1;}
+</style>
+<g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_1_" x="13.8" y="3.7" width="42.9" height="42.9"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" style="overflow:visible;"/>
+ </clipPath>
+ </g>
+ </g>
+ <polygon class="st0" points="45.7,17.8 69.5,24.2 59,29.9 35.2,23.6 "/>
+ <polygon class="st1" points="45.7,17.8 69.5,24.2 59,29.9 35.2,23.6 "/>
+ <polygon class="st0" points="24.7,17.8 1,24.2 11.5,29.9 35.2,23.6 "/>
+ <polygon class="st1" points="24.7,17.8 1,24.2 11.5,29.9 35.2,23.6 "/>
+ <polygon class="st2" points="35.2,23.6 59,29.9 59,53.9 35.2,45.6 "/>
+ <polygon class="st1" points="35.2,23.6 59,29.9 59,53.9 35.2,45.6 "/>
+ <polygon class="st2" points="35.2,23.6 11.5,29.9 11.5,53.9 35.2,45.6 "/>
+ <polygon class="st1" points="35.2,23.6 11.5,29.9 11.5,53.9 35.2,45.6 "/>
+ <polygon class="st3" points="35.2,38.1 20.2,34.1 20.2,15.8 35.2,19.8 "/>
+ <polygon class="st1" points="35.2,38.1 20.2,34.1 20.2,15.8 35.2,19.8 "/>
+ <polygon class="st3" points="35.2,38.1 50.2,34.1 50.2,15.8 35.2,19.8 "/>
+ <polygon class="st1" points="35.2,38.1 50.2,34.1 50.2,15.8 35.2,19.8 "/>
+ <polygon class="st3" points="20.2,15.8 35.2,19.8 50.2,15.8 35.2,11.7 "/>
+ <polygon class="st1" points="20.2,15.8 35.2,19.8 50.2,15.8 35.2,11.7 "/>
+ <polygon class="st0" points="35.2,60.3 11.5,53.9 11.5,29.9 35.2,36.3 "/>
+ <polygon class="st1" points="35.2,60.3 11.5,53.9 11.5,29.9 35.2,36.3 "/>
+ <polygon class="st0" points="59,29.9 59,53.9 35.2,60.3 35.2,36.3 "/>
+ <polygon class="st1" points="59,29.9 59,53.9 35.2,60.3 35.2,36.3 "/>
+ <line class="st4" x1="35.2" y1="7.3" x2="35.2" y2="1"/>
+ <line class="st1" x1="35.2" y1="7.3" x2="35.2" y2="1"/>
+ <line class="st4" x1="27.8" y1="8.7" x2="25.4" y2="2.9"/>
+ <line class="st1" x1="27.8" y1="8.7" x2="25.4" y2="2.9"/>
+ <line class="st4" x1="42.6" y1="8.7" x2="45.1" y2="2.9"/>
+ <line class="st1" x1="42.6" y1="8.7" x2="45.1" y2="2.9"/>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_3_" x="35.2" y="29.9" width="23.7" height="17.8"/>
+ </defs>
+ <clipPath id="SVGID_4_">
+ <use xlink:href="#SVGID_3_" style="overflow:visible;"/>
+ </clipPath>
+ <polygon class="st5" points="59,29.9 59,43.3 42.1,47.8 35.2,36.3 "/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_5_" x="11.5" y="29.9" width="23.7" height="17.8"/>
+ </defs>
+ <clipPath id="SVGID_6_">
+ <use xlink:href="#SVGID_5_" style="overflow:visible;"/>
+ </clipPath>
+ <polygon class="st6" points="11.5,29.9 11.5,43.3 28.4,47.8 35.2,36.3 "/>
+ </g>
+ </g>
+ <polygon class="st0" points="45.7,42.1 69.5,35.7 59,29.9 35.2,36.3 "/>
+ <polygon class="st1" points="45.7,42.1 69.5,35.7 59,29.9 35.2,36.3 "/>
+ <polygon class="st0" points="24.7,42.1 1,35.7 11.5,29.9 35.2,36.3 "/>
+ <polygon class="st1" points="24.7,42.1 1,35.7 11.5,29.9 35.2,36.3 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_star2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_star2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_star2.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37.38 35.83" style="enable-background:new 0 0 37.38 35.83;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ECECEB;}
+</style>
+<path class="st0" d="M20.31,1.06l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C17.73-0.28,19.65-0.28,20.31,1.06z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/text_arrow_blue.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/text_arrow_blue.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/text_arrow_blue.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 11.9 11.9" style="enable-background:new 0 0 11.9 11.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#7AAAC5;}
+ .st1{fill:#68A4C5;}
+</style>
+<g>
+ <polygon class="st0" points="0,11.2 0,0.5 10.7,0.5 "/>
+ <path class="st1" d="M0,11.9L11.9,0H0V11.9z M9.5,1L0,10.7V1H9.5z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_login.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_login.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_login.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 29.1 36.7" style="enable-background:new 0 0 29.1 36.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M4.2,8.3c0-3.7,3-6.8,6.8-6.8h9.9c3.7,0,6.8,3,6.8,6.8v20.1c0,3.7-3,6.8-6.8,6.8h-9.9c-3.7,0-6.8-3-6.8-6.8"/>
+ <polyline class="st0" points="12.9,11.4 19.8,18.3 12.9,25.3 "/>
+ <line class="st0" x1="19.8" y1="18.3" x2="1.7" y2="18.3"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/radio_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/radio_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/radio_on.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 8.8 8.8" style="enable-background:new 0 0 8.8 8.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#333333;}
+</style>
+<g>
+ <g>
+ <g>
+ <circle class="st0" cx="4.4" cy="4.4" r="4.4"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_lock_bold.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_lock_bold.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_lock_bold.svg (revision 7)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 24.1 28.8" style="enable-background:new 0 0 24.1 28.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:none;stroke:#333333;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#D5D6D5;}
+ .st3{fill:none;}
+</style>
+<rect x="1.3" y="10.4" class="st0" width="21.5" height="17"/>
+<rect x="1.3" y="10.4" class="st1" width="21.5" height="17"/>
+<path class="st2" d="M14,17.2c0,1-0.9,1.9-1.9,1.9s-1.9-0.9-1.9-1.9c0-1,0.9-1.9,1.9-1.9C13.1,15.3,14,16.1,14,17.2"/>
+<path class="st1" d="M14,17.2c0,1-0.9,1.9-1.9,1.9s-1.9-0.9-1.9-1.9c0-1,0.9-1.9,1.9-1.9C13.1,15.3,14,16.1,14,17.2z"/>
+<line class="st3" x1="12.1" y1="19.2" x2="12.1" y2="23.5"/>
+<line class="st1" x1="12.1" y1="19.2" x2="12.1" y2="23.5"/>
+<path class="st0" d="M18.1,10.4H6V5.1c0-2,1.6-3.6,3.6-3.6h4.8c2,0,3.6,1.6,3.6,3.6L18.1,10.4L18.1,10.4z"/>
+<path class="st1" d="M18.1,10.4H6V5.1c0-2,1.6-3.6,3.6-3.6h4.8c2,0,3.6,1.6,3.6,3.6L18.1,10.4L18.1,10.4z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/box_body4.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_body4.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/youtube_link.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/youtube_link.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tos5.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tos5.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tos5.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 30.8 30.8" style="enable-background:new 0 0 30.8 30.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:9.9998;}
+ .st1{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <rect x="13.8" y="7.7" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -2.9117 16.8528)" class="st0" width="10.1" height="8.4"/>
+ <rect x="22" y="0.2" transform="matrix(0.7072 -0.707 0.707 0.7072 1.8634 18.8243)" class="st0" width="3.4" height="14"/>
+ <line class="st1" x1="11.4" y1="19.4" x2="1" y2="29.8"/>
+ <path class="st1" d="M17.8,25.7L5.1,13l0.3-0.3c2-2,5.2-2,7.1,0l5.6,5.6c2,2,2,5.2,0,7.1L17.8,25.7z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/satisfaction.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/satisfaction.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/satisfaction.svg (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 205.34 35.73" style="enable-background:new 0 0 205.34 35.73;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ECECEB;}
+</style>
+<g>
+ <path class="st0" d="M20.31,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C17.73-0.34,19.65-0.34,20.31,1.01z"/>
+ <path class="st0" d="M62.3,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C59.72-0.34,61.64-0.34,62.3,1.01z"/>
+ <path class="st0" d="M104.29,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C101.71-0.34,103.63-0.34,104.29,1.01z"/>
+ <path class="st0" d="M146.28,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C143.7-0.34,145.62-0.34,146.28,1.01z"/>
+ <path class="st0" d="M188.27,1.01l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C185.69-0.34,187.61-0.34,188.27,1.01z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_double_right.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_double_right.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_double_right.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 61 66.6" style="enable-background:new 0 0 61 66.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#3C3C3C;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="4.5,4.5 33.3,33.3 4.5,62.1 "/>
+ <polyline class="st0" points="27.7,4.5 56.5,33.3 27.7,62.1 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_list.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_list.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_list.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 52.7 34.7" style="enable-background:new 0 0 52.7 34.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <g>
+ <line class="st0" x1="3" y1="3" x2="3" y2="3"/>
+ <line class="st0" x1="3" y1="17.4" x2="3" y2="17.4"/>
+ <line class="st0" x1="3" y1="31.7" x2="3" y2="31.7"/>
+ </g>
+ <g>
+ <line class="st0" x1="49.7" y1="3" x2="14.9" y2="3"/>
+ <line class="st0" x1="49.7" y1="17.4" x2="14.9" y2="17.4"/>
+ <line class="st0" x1="49.7" y1="31.7" x2="14.9" y2="31.7"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_minus_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_minus_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_minus_on.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 27 27" style="enable-background:new 0 0 27 27;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#007DC3;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<line class="st0" x1="2.3" y1="13.5" x2="24.7" y2="13.5"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_filedown.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_filedown.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_filedown.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37 30" style="enable-background:new 0 0 37 30;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="25.5,13.1 18.5,20.1 11.5,13.1 "/>
+ <polyline class="st0" points="35.5,16.5 35.5,28.5 1.5,28.5 1.5,16.5 "/>
+ <line class="st0" x1="18.5" y1="20.1" x2="18.5" y2="1.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_home_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_home_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_home_fff.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 29.1 24" style="enable-background:new 0 0 29.1 24;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="0.8,10.4 14.5,0.8 28.3,10.4 "/>
+ <path class="st0" d="M4,12.1v11.1h7.2v-4.7c0-1.9,1.5-3.4,3.4-3.4l0,0c1.9,0,3.4,1.5,3.4,3.4v4.7h7.2V12.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_trash_on.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_trash_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_trash_on.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" focusable="false"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 448 512"
+ style="enable-background:new 0 0 448 512;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#007DC3;}
+</style>
+<path class="st0" d="M268,416h24c6.6,0,12-5.4,12-12V188c0-6.6-5.4-12-12-12h-24c-6.6,0-12,5.4-12,12v216
+ C256,410.6,261.4,416,268,416z M432,80h-82.4l-34-56.7C306.9,8.8,291.3,0,274.4,0H173.6c-16.9,0-32.5,8.8-41.2,23.3L98.4,80H16
+ C7.2,80,0,87.2,0,96v16c0,8.8,7.2,16,16,16h16v336c0,26.5,21.5,48,48,48l0,0h288c26.5,0,48-21.5,48-48l0,0V128h16
+ c8.8,0,16-7.2,16-16V96C448,87.2,440.8,80,432,80z M171.8,50.9c1.1-1.8,3-2.9,5.2-2.9h94c2.1,0,4.1,1.1,5.1,2.9L293.6,80H154.4
+ L171.8,50.9z M368,464H80V128h288V464z M156,416h24c6.6,0,12-5.4,12-12V188c0-6.6-5.4-12-12-12h-24c-6.6,0-12,5.4-12,12v216
+ C144,410.6,149.4,416,156,416z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/item_ex.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/item_ex.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tos6.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tos6.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tos6.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 23.1 31" style="enable-background:new 0 0 23.1 31;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <line class="st0" x1="1" y1="30" x2="10.6" y2="30"/>
+ <polygon class="st0" points="22.1,14.6 5.8,14.6 5.8,4.4 22.1,4.4 17.6,9.5 "/>
+ <line class="st0" x1="5.8" y1="1" x2="5.8" y2="30"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree1.svg (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12.13px" height="15.643px" viewBox="0 0 12.13 15.643" enable-background="new 0 0 12.13 15.643" xml:space="preserve">
+<g>
+ <g>
+ <g>
+ <rect x="2.284" y="2.933" fill="#828282" width="1.495" height="0.81"/>
+ <rect x="4.922" y="2.933" fill="#828282" width="2.285" height="0.81"/>
+ <rect x="8.349" y="2.933" fill="#828282" width="1.496" height="0.81"/>
+ </g>
+ <g>
+ <rect x="2.284" y="5.454" fill="#828282" width="1.495" height="0.81"/>
+ <rect x="4.922" y="5.454" fill="#828282" width="2.285" height="0.81"/>
+ <rect x="8.349" y="5.454" fill="#828282" width="1.496" height="0.81"/>
+ </g>
+ <g>
+ <rect x="2.284" y="7.974" fill="#828282" width="1.495" height="0.81"/>
+ <rect x="4.922" y="7.974" fill="#828282" width="2.285" height="0.81"/>
+ <rect x="8.349" y="7.974" fill="#828282" width="1.496" height="0.81"/>
+ </g>
+ </g>
+ <path fill="#828282" d="M4.922,15.076h2.285v-3.001H4.922V15.076z"/>
+ <g>
+ <path fill="#828282" d="M6.533,15.643h5.233c0.2,0,0.363-0.162,0.363-0.362V0.363C12.13,0.163,11.967,0,11.767,0H0.363
+ C0.163,0,0,0.163,0,0.363V15.28c0,0.2,0.163,0.362,0.363,0.362h5.443 M0.727,0.726h10.677v14.191H0.727V0.726z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_people.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_people.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_people.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 106.45 110.07" style="enable-background:new 0 0 106.45 110.07;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#343231;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#343231;stroke-width:7;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M78.87,30.64c0,14.16-11.48,25.64-25.64,25.64c-14.16,0-25.64-11.48-25.64-25.64C27.59,16.48,39.07,5,53.23,5
+ C67.39,5,78.87,16.48,78.87,30.64z"/>
+ <path class="st0" d="M5,105.07L5,105.07c0-17.28,14.01-31.29,31.29-31.29h33.88c17.28,0,31.29,14.01,31.29,31.29l0,0"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tos7.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tos7.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tos7.svg (revision 7)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 145.4 112.4" style="enable-background:new 0 0 145.4 112.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polygon class="st0" points="125.8,81 40.2,81 26.5,19.1 139.5,19.1 "/>
+ <polygon class="st0" points="125.8,81 40.2,81 26.5,19.1 139.5,19.1 "/>
+ <polyline class="st0" points="40.2,81 23.5,5.3 5.9,5.3 "/>
+ <polyline class="st0" points="40.2,81 23.5,5.3 5.9,5.3 "/>
+ <path class="st0" d="M56,99.2c0,4.4-3.5,7.9-7.9,7.9c-4.3,0-7.9-3.5-7.9-7.9c0-4.4,3.5-7.9,7.9-7.9C52.5,91.3,56,94.9,56,99.2"/>
+ <path class="st0" d="M56,99.2c0,4.4-3.5,7.9-7.9,7.9c-4.3,0-7.9-3.5-7.9-7.9c0-4.4,3.5-7.9,7.9-7.9C52.5,91.3,56,94.9,56,99.2z"/>
+ <path class="st0" d="M110.4,99.2c0,4.4,3.5,7.9,7.9,7.9s7.9-3.5,7.9-7.9c0-4.4-3.5-7.9-7.9-7.9C114,91.3,110.4,94.9,110.4,99.2"/>
+ <path class="st0" d="M110.4,99.2c0,4.4,3.5,7.9,7.9,7.9s7.9-3.5,7.9-7.9c0-4.4-3.5-7.9-7.9-7.9C114,91.3,110.4,94.9,110.4,99.2z"/>
+ <line class="st0" x1="83" y1="35.4" x2="83" y2="65.3"/>
+ <line class="st0" x1="83" y1="35.4" x2="83" y2="65.3"/>
+ <line class="st0" x1="58" y1="35.4" x2="61.6" y2="65.3"/>
+ <line class="st0" x1="58" y1="35.4" x2="61.6" y2="65.3"/>
+ <line class="st0" x1="108" y1="35.4" x2="104.4" y2="65.3"/>
+ <line class="st0" x1="108" y1="35.4" x2="104.4" y2="65.3"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_radio_true_part.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_radio_true_part.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_radio_true_part.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.038px" height="24.039px" viewBox="0 0 24.038 24.039" enable-background="new 0 0 24.038 24.039" xml:space="preserve">
+<circle fill="#FFFFFF" cx="12.02" cy="12.02" r="11.33"/>
+<path fill="#838383" d="M12.02,24.039C5.393,24.039,0,18.648,0,12.02C0,5.393,5.393,0,12.02,0c6.626,0,12.019,5.392,12.019,12.02
+ C24.039,18.648,18.646,24.039,12.02,24.039z M12.02,1.379c-5.867,0-10.641,4.773-10.641,10.641S6.153,22.66,12.02,22.66
+ c5.867,0,10.64-4.772,10.64-10.64S17.887,1.379,12.02,1.379z"/>
+<circle fill="#838383" cx="12.019" cy="12.021" r="6.078"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_right_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_right_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_right_fff.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.8 66.6" style="enable-background:new 0 0 37.8 66.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="4.5,4.5 33.3,33.3 4.5,62.1 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/box_cover3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_cover3.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_full.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_full.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_full.svg (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="17.352px" height="17.352px" viewBox="-1.679 18.564 17.352 17.352" enable-background="new -1.679 18.564 17.352 17.352"
+ xml:space="preserve">
+<g>
+ <path fill="#221F1F" d="M14.923,24.746c-0.414,0-0.75-0.336-0.75-0.75v-3.874h-3.9c-0.414,0-0.75-0.336-0.75-0.75
+ s0.336-0.75,0.75-0.75h4.65c0.414,0,0.75,0.336,0.75,0.75v4.624C15.673,24.41,15.337,24.746,14.923,24.746z"/>
+ <path fill="#221F1F" d="M10.413,24.632c-0.191,0-0.383-0.074-0.529-0.221c-0.293-0.293-0.293-0.768,0-1.061l3.977-3.977
+ c0.293-0.293,0.768-0.293,1.061,0s0.293,0.768,0,1.061l-3.977,3.977C10.798,24.558,10.606,24.632,10.413,24.632z"/>
+ <path fill="#221F1F" d="M-0.872,24.715c-0.414,0-0.75-0.336-0.75-0.75v-4.651c0-0.414,0.336-0.75,0.75-0.75h4.623
+ c0.414,0,0.75,0.336,0.75,0.75s-0.336,0.75-0.75,0.75h-3.873v3.901C-0.122,24.379-0.458,24.715-0.872,24.715z"/>
+ <path fill="#221F1F" d="M3.64,24.573c-0.191,0-0.384-0.073-0.53-0.22l-3.979-3.977c-0.293-0.293-0.293-0.768,0-1.061
+ c0.292-0.293,0.768-0.295,1.061,0l3.979,3.977c0.293,0.293,0.293,0.768,0,1.061C4.024,24.5,3.833,24.573,3.64,24.573z"/>
+ <path fill="#221F1F" d="M3.721,35.859h-4.65c-0.414,0-0.75-0.336-0.75-0.75v-4.625c0-0.414,0.336-0.75,0.75-0.75
+ s0.75,0.336,0.75,0.75v3.875h3.9c0.414,0,0.75,0.336,0.75,0.75S4.135,35.859,3.721,35.859z"/>
+ <path fill="#221F1F" d="M-0.398,35.326c-0.192,0-0.384-0.073-0.53-0.22c-0.293-0.293-0.293-0.768,0-1.061l3.978-3.978
+ c0.293-0.293,0.768-0.293,1.061,0s0.293,0.768,0,1.061l-3.978,3.978C-0.014,35.252-0.206,35.326-0.398,35.326z"/>
+ <path fill="#221F1F" d="M14.864,35.916h-4.623c-0.414,0-0.75-0.336-0.75-0.75s0.336-0.75,0.75-0.75h3.873v-3.9
+ c0-0.414,0.336-0.75,0.75-0.75s0.75,0.336,0.75,0.75v4.65C15.614,35.58,15.278,35.916,14.864,35.916z"/>
+ <path fill="#221F1F" d="M14.333,35.384c-0.191,0-0.385-0.072-0.531-0.219l-3.979-3.978c-0.293-0.292-0.293-0.768,0-1.061
+ c0.293-0.292,0.768-0.294,1.061,0l3.979,3.978c0.293,0.292,0.293,0.768,0,1.061C14.716,35.312,14.524,35.384,14.333,35.384z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_p.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_p.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_p.svg (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="0 0 24.166 24.165" enable-background="new 0 0 24.166 24.165" xml:space="preserve">
+<path fill="#FFFFFF" d="M2.097,23.588c-0.84,0-1.523-0.685-1.523-1.521V2.099c0-0.84,0.684-1.522,1.523-1.522h19.966
+ c0.84,0,1.522,0.683,1.522,1.522v19.968c0,0.84-0.685,1.521-1.522,1.521H2.097z"/>
+<path d="M22.063,0H2.096c-1.158,0-2.1,0.941-2.1,2.099v19.968c0,1.156,0.942,2.098,2.1,2.098h19.966
+ c1.159,0,2.102-0.941,2.102-2.098V2.099C24.162,0.942,23.219,0,22.063,0z M22.063,23.01H2.096c-0.522,0-0.947-0.424-0.947-0.945
+ V2.099c0-0.521,0.425-0.946,0.947-0.946l19.966-0.002c0.522,0,0.947,0.425,0.947,0.946v19.968
+ C23.01,22.586,22.585,23.01,22.063,23.01z"/>
+<path d="M12.08,19.434c-0.742,0-1.344-0.602-1.344-1.344V6.075c0-0.742,0.602-1.344,1.344-1.344l0,0
+ c0.742,0,1.344,0.602,1.344,1.344V18.09C13.424,18.833,12.822,19.434,12.08,19.434L12.08,19.434z"/>
+<path d="M19.433,12.083c0,0.743-0.602,1.344-1.344,1.344H6.073c-0.742,0-1.344-0.602-1.344-1.344l0,0
+ c0-0.742,0.602-1.344,1.344-1.344h12.016C18.831,10.739,19.433,11.341,19.433,12.083L19.433,12.083z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/main_job4.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/main_job4.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/main_job4.svg (revision 7)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 109.5 83" style="enable-background:new 0 0 109.5 83;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ABC5E3;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st1{fill:#FFFFFF;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st2{fill:none;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st3{fill:#FFFFFF;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st4{fill:none;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st5{fill:#ABC5E3;stroke:#365587;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st6{fill:#DADAE0;}
+ .st7{fill:#FFFFFF;}
+</style>
+<g>
+ <g>
+ <path class="st0" d="M27.9,7.9c0,3.4-2.8,6.2-6.2,6.2s-6.2-2.8-6.2-6.2c0-3.4,2.8-6.2,6.2-6.2S27.9,4.5,27.9,7.9z"/>
+ <path class="st3" d="M9,42.4v-19c0-3.4,2.8-6.2,6.2-6.2h12.9c3.4,0,6.2,2.8,6.2,6.2v19"/>
+ <polyline class="st3" points="14.3,28.6 14.3,77.6 21.5,77.6 21.5,52.3 21.5,77.6 28.8,77.6 28.8,28.6 "/>
+ <path class="st0" d="M62.2,7.9c0,3.4-2.8,6.2-6.2,6.2c-3.4,0-6.2-2.8-6.2-6.2c0-3.4,2.8-6.2,6.2-6.2C59.4,1.8,62.2,4.5,62.2,7.9z"
+ />
+ <path class="st3" d="M43.3,42.4v-19c0-3.4,2.8-6.2,6.2-6.2h12.9c3.4,0,6.2,2.8,6.2,6.2v19"/>
+ <polyline class="st3" points="48.6,28.6 48.6,77.6 55.8,77.6 55.8,52.3 55.8,77.6 63.1,77.6 63.1,28.6 "/>
+ <path class="st0" d="M96.5,7.9c0,3.4-2.8,6.2-6.2,6.2c-3.4,0-6.2-2.8-6.2-6.2c0-3.4,2.8-6.2,6.2-6.2C93.7,1.8,96.5,4.5,96.5,7.9z"
+ />
+ <path class="st3" d="M77.6,42.4v-19c0-3.4,2.8-6.2,6.2-6.2h12.9c3.4,0,6.2,2.8,6.2,6.2v19"/>
+ <polyline class="st3" points="82.9,28.6 82.9,77.6 90.1,77.6 90.1,52.3 90.1,77.6 97.4,77.6 97.4,28.6 "/>
+ </g>
+ <rect x="1.8" y="38.3" class="st3" width="106" height="43"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tba2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tba2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tba2.svg (revision 7)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 58 48" style="enable-background:new 0 0 58 48;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#5DA3C0;}
+ .st1{fill:none;stroke:#38383B;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#FFFFFF;}
+ .st3{clip-path:url(#SVGID_2_);fill:#DADAE0;}
+ .st4{clip-path:url(#SVGID_4_);fill:#DADAE0;}
+ .st5{clip-path:url(#SVGID_6_);fill:#DADAE0;}
+ .st6{clip-path:url(#SVGID_8_);fill:#DADAE0;}
+ .st7{fill:#E67677;}
+ .st8{clip-path:url(#SVGID_10_);fill:#DADAE0;}
+ .st9{clip-path:url(#SVGID_12_);fill:#DADAE0;}
+</style>
+<g>
+ <path class="st2" d="M49.7,4.6C49.7,4.7,49.7,4.7,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st1" d="M49.7,4.6C49.7,4.7,49.7,4.7,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st2" d="M49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st1" d="M49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st2" d="M57,4.6c0-2-1.6-3.6-3.6-3.6c0,0,0,0,0,0c-2,0-3.6,1.6-3.6,3.6v0v0v3.6H57V4.6L57,4.6C57,4.6,57,4.6,57,4.6"/>
+ <path class="st1" d="M57,4.6c0-2-1.6-3.6-3.6-3.6c0,0,0,0,0,0c-2,0-3.6,1.6-3.6,3.6v0v0v3.6H57V4.6L57,4.6C57,4.6,57,4.6,57,4.6z"
+ />
+ <path class="st2" d="M49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.3,49.7,43.3,49.7,43.4"/>
+ <path class="st1" d="M49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.3,49.7,43.3,49.7,43.4z"/>
+ <path class="st2" d="M49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4"/>
+ <path class="st1" d="M49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4z"/>
+ <path class="st2" d="M49.7,43.5c0,0,0-0.1,0-0.1v0v0C49.7,43.4,49.7,43.5,49.7,43.5"/>
+ <path class="st1" d="M49.7,43.5c0,0,0-0.1,0-0.1v0v0C49.7,43.4,49.7,43.5,49.7,43.5z"/>
+ <path class="st2" d="M49.7,1H18.1c-2,0-3.6,1.6-3.6,3.6v19.1h0v15.9h28v3.6c0,0,0,0,0,0c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0
+ c1.9,0,3.5-1.5,3.6-3.5c0,0,0-0.1,0-0.1v0v0v-3.6V24.2h0V8.3V4.7c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0-2,1.6-3.6,3.6-3.6
+ c0,0,0,0,0,0v0H49.7z"/>
+ <path class="st1" d="M49.7,1H18.1c-2,0-3.6,1.6-3.6,3.6v19.1h0v15.9h28v3.6c0,0,0,0,0,0c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0
+ c1.9,0,3.5-1.5,3.6-3.5c0,0,0-0.1,0-0.1v0v0v-3.6V24.2h0V8.3V4.7c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0-2,1.6-3.6,3.6-3.6
+ c0,0,0,0,0,0v0H49.7z"/>
+ <path class="st2" d="M46.1,47C46.1,47,46.1,47,46.1,47c-2,0-3.6-1.6-3.6-3.6c0,0,0,0,0,0h0v-3.6h-28h0H7.2v3.6l0,0c0,0,0,0,0,0
+ c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0H46.1c2,0,3.5-1.5,3.6-3.5C49.6,45.4,48.1,47,46.1,47"/>
+ <path class="st1" d="M46.1,47C46.1,47,46.1,47,46.1,47c-2,0-3.6-1.6-3.6-3.6c0,0,0,0,0,0h0v-3.6h-28h0H7.2v3.6l0,0c0,0,0,0,0,0
+ c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0H46.1c2,0,3.5-1.5,3.6-3.5C49.6,45.4,48.1,47,46.1,47z"/>
+ <polygon class="st2" points="24.2,25.1 26.8,29.9 29.5,34.8 24.6,32.1 19.9,29.5 "/>
+ <polygon class="st1" points="24.2,25.1 26.8,29.9 29.5,34.8 24.6,32.1 19.9,29.5 "/>
+ <path class="st0" d="M1.2,10.9l18.6,18.6c0.6,0.6,2,0.1,3.2-1.1c1.2-1.2,1.7-2.7,1.1-3.2L5.6,6.5L1.2,10.9z"/>
+ <path class="st1" d="M1.2,10.9l18.6,18.6c0.6,0.6,2,0.1,3.2-1.1c1.2-1.2,1.7-2.7,1.1-3.2L5.6,6.5L1.2,10.9z"/>
+ <path class="st2" d="M5.6,6.5c0.6,0.6,0.1,2-1.1,3.2c-1.2,1.2-2.7,1.7-3.2,1.1c-0.6-0.6-0.1-2,1.1-3.2C3.6,6.4,5,5.9,5.6,6.5"/>
+ <path class="st1" d="M5.6,6.5c0.6,0.6,0.1,2-1.1,3.2c-1.2,1.2-2.7,1.7-3.2,1.1c-0.6-0.6-0.1-2,1.1-3.2C3.6,6.4,5,5.9,5.6,6.5z"/>
+ <polygon class="st7" points="26.8,29.9 29.5,34.8 24.6,32.1 "/>
+ <polygon class="st1" points="26.8,29.9 29.5,34.8 24.6,32.1 "/>
+ <line class="st1" x1="21.7" y1="8.7" x2="42.2" y2="8.7"/>
+ <line class="st1" x1="21.7" y1="15" x2="42.2" y2="15"/>
+ <line class="st1" x1="27.1" y1="21.3" x2="42.2" y2="21.3"/>
+ <line class="st1" x1="30.8" y1="27.6" x2="42.2" y2="27.6"/>
+ <line class="st1" x1="34.9" y1="33.9" x2="42.2" y2="33.9"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/chatbot_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/chatbot_icon.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_cloud1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_cloud1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_cloud1.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 66.1 36" style="enable-background:new 0 0 66.1 36;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#3BBCFD;}
+</style>
+<path class="st0" d="M58.2,20.2c-0.4,0-0.8,0-1.1,0.1c-1.8-3.6-5.5-6-9.7-6c-0.1,0-0.3,0-0.4,0C45.2,6.1,38,0,29.4,0
+ c-8.7,0-15.9,6.1-17.6,14.3c-0.3,0-0.6,0-0.9,0C4.9,14.2,0,19.1,0,25.1C0,31.1,4.9,36,10.9,36h47.4c4.4,0,7.9-3.5,7.9-7.9
+ C66.1,23.7,62.6,20.2,58.2,20.2z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/file_zip.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_zip.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_zip.svg (revision 7)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="446.461px" height="595.396px" viewBox="0 0 446.461 595.396" enable-background="new 0 0 446.461 595.396"
+ xml:space="preserve">
+<path fill="#333333" d="M430.066,113.824l-97.547-97.547C322.055,5.813,307.871-0.116,293.105-0.116H55.806
+ C24.997,0,0,24.997,0,55.808v483.665c0,30.813,24.997,55.811,55.808,55.811h334.845c30.813,0,55.81-24.998,55.81-55.811V153.354
+ C446.46,138.589,440.53,124.288,430.066,113.824z M386.117,148.82h-88.479V60.342L386.117,148.82z M55.806,539.472V55.808h186.025
+ v120.916c0,15.463,12.438,27.904,27.901,27.904H390.65v334.845L55.806,539.472L55.806,539.472z"/>
+<g>
+ <path fill="#333333" d="M121.884,404.763l45.889-70.229h-41.5v-16.36h65.574v11.705l-45.756,70.229h46.288v16.493h-70.496V404.763z
+ "/>
+ <path fill="#333333" d="M209.799,318.173h19.686v98.428h-19.686V318.173z"/>
+ <path fill="#333333" d="M253.688,318.173h32.322c21.814,0,38.574,7.581,38.574,30.858c0,22.479-16.893,32.588-38.041,32.588
+ h-13.168v34.981h-19.688V318.173z M285.213,366.057c13.566,0,20.084-5.72,20.084-17.025c0-11.439-7.184-15.297-20.75-15.297
+ h-11.172v32.322H285.213z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_blank.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_blank.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_blank.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.3 37.3" style="enable-background:new 0 0 37.3 37.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="17.3,10 27.3,10 27.3,20 "/>
+ <line class="st0" x1="27.3" y1="10" x2="9.7" y2="27.6"/>
+</g>
+<path class="st0" d="M35.8,17.1v11c0,4.2-3.4,7.7-7.7,7.7h-19c-4.2,0-7.7-3.4-7.7-7.7v-19c0-4.2,3.4-7.7,7.7-7.7h11"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_right.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_right.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_right.svg (revision 7)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="37.805px" height="66.61px" viewBox="0 0 37.805 66.61" enable-background="new 0 0 37.805 66.61" xml:space="preserve">
+<polyline fill="none" stroke="#3C3C3C" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 4.5,4.5 33.305,33.305 4.5,62.11 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/box_cover4.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_cover4.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_arrow_down.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_down.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_down.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <polygon points="11.593,9.943 8.065,15.243 4.539,9.943 "/>
+ <path d="M7.316,2.621c0-0.256,0.334-0.462,0.75-0.462c0.417,0,0.753,0.206,0.753,0.462v9.22c0,0.253-0.336,0.459-0.753,0.459
+ c-0.415,0-0.75-0.206-0.75-0.459V2.621z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/logo_b.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/logo_b.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/logo_b.svg (revision 7)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 219.8 34.5" style="enable-background:new 0 0 219.8 34.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+ .st2{fill:#373838;}
+</style>
+<g>
+ <g id="XMLID_6_">
+ <g id="XMLID_7_">
+ <g id="XMLID_8_">
+
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="35.956" y1="29.9652" x2="67.9137" y2="5.7629" gradientTransform="matrix(1 0 0 -1 0 33.89)">
+ <stop offset="0" style="stop-color:#00AFEC"/>
+ <stop offset="0.1679" style="stop-color:#00ADEB"/>
+ <stop offset="0.3876" style="stop-color:#00A4E4"/>
+ <stop offset="0.6361" style="stop-color:#0096D9"/>
+ <stop offset="0.9038" style="stop-color:#0082C9"/>
+ <stop offset="1" style="stop-color:#0079C3"/>
+ </linearGradient>
+ <path id="XMLID_10_" class="st0" d="M58.4,23.8c2.4,1,1.8,3.9-1,3.9H39c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.4,1.1,1,1.1h21.4
+ c5,0,8.9-2.4,8.9-7.4c0-3.3-1.5-6-5.1-7.6c-2.1-1-15.7-6.7-15.7-6.7c-2.4-1-1.8-3.9,1-3.9h18.3c0.5,0,1-0.5,1-1.1V3.2
+ c0-0.6-0.4-1.1-1-1.1H46.5c-5,0-8.9,2.4-8.9,7.4c0,3.3,1.5,6,5.1,7.6C44.8,18.1,58.4,23.8,58.4,23.8z"/>
+
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="5.5248" y1="37.2072" x2="29.151" y2="13.0055" gradientTransform="matrix(1 0 0 -1 0 33.89)">
+ <stop offset="5.618000e-03" style="stop-color:#FDD000"/>
+ <stop offset="1" style="stop-color:#F08300"/>
+ </linearGradient>
+ <path id="XMLID_9_" class="st1" d="M36.4,2.1H1c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.4,1.1,1,1.1h12.8v24.6c0,0.6,0.5,1.1,1,1.1l0,0
+ h7.9l0,0c0.5,0,1-0.5,1-1.1V6.6h12.8c0.5,0,1-0.5,1-1.1V3.2C37.4,2.6,36.9,2.1,36.4,2.1z"/>
+ </g>
+ </g>
+ </g>
+</g>
+<g>
+ <path class="st2" d="M106.7,19.6v3.5H100V32h-4.1v-8.9h-6.4V32h-4.1v-8.9h-6.7v-3.5H106.7z M103.1,17.2H82.3V2.8h20.4v3.4H86.4v2.1
+ h16v3.4h-16v2.1h16.6V17.2z"/>
+ <path class="st2" d="M108.8,3.2h4.2v10.3c2.3,0,4.4-0.1,6.5-0.2c2.1-0.1,4.2-0.3,6.3-0.5l0.4,3.5c-1,0.1-2.1,0.2-3.2,0.3
+ c-1.1,0.1-2.4,0.2-3.7,0.2c-1.4,0.1-2.9,0.1-4.6,0.1c-1.7,0-3.6,0-5.8,0V3.2z M122.9,33c-1.4,0-2.6-0.1-3.8-0.4
+ c-1.2-0.3-2.2-0.7-3-1.2c-0.9-0.5-1.5-1.1-2-1.9s-0.7-1.6-0.7-2.5v-1.4c0-0.9,0.2-1.8,0.7-2.5c0.5-0.7,1.2-1.4,2-1.9
+ c0.9-0.5,1.9-0.9,3-1.2c1.2-0.3,2.4-0.4,3.8-0.4c1.4,0,2.6,0.1,3.8,0.4c1.2,0.3,2.2,0.7,3,1.2c0.9,0.5,1.5,1.1,2,1.9
+ c0.5,0.7,0.7,1.6,0.7,2.5V27c0,0.9-0.2,1.8-0.7,2.5s-1.2,1.4-2,1.9c-0.9,0.5-1.9,0.9-3,1.2C125.5,32.8,124.2,33,122.9,33z
+ M122.9,22.9c-0.7,0-1.4,0.1-2.1,0.2c-0.7,0.2-1.2,0.4-1.7,0.6c-0.5,0.3-0.9,0.6-1.2,0.9c-0.3,0.4-0.5,0.7-0.5,1.1v0.9
+ c0,0.4,0.2,0.8,0.5,1.1c0.3,0.4,0.7,0.7,1.2,0.9c0.5,0.3,1.1,0.5,1.7,0.6c0.7,0.2,1.3,0.2,2.1,0.2c0.7,0,1.4-0.1,2.1-0.2
+ s1.2-0.4,1.7-0.6c0.5-0.3,0.9-0.6,1.2-0.9c0.3-0.4,0.5-0.7,0.5-1.1v-0.9c0-0.4-0.2-0.8-0.5-1.1c-0.3-0.3-0.7-0.7-1.2-0.9
+ c-0.5-0.3-1.1-0.5-1.7-0.6S123.6,22.9,122.9,22.9z M132.4,19.4h-4.1v-18h4.1V19.4z"/>
+ <path class="st2" d="M143.7,16.2c-1.2,0-2.3-0.2-3.3-0.6c-1-0.4-1.8-0.9-2.4-1.5c-0.7-0.6-1.2-1.3-1.5-2.1
+ c-0.4-0.8-0.5-1.6-0.5-2.4V8.5c0-0.8,0.2-1.6,0.5-2.4c0.4-0.8,0.9-1.5,1.5-2.1c0.7-0.6,1.5-1.1,2.4-1.5c1-0.4,2.1-0.6,3.3-0.6
+ c1.2,0,2.3,0.2,3.3,0.6c1,0.4,1.8,0.9,2.4,1.5c0.7,0.6,1.2,1.3,1.5,2.1c0.3,0.8,0.5,1.6,0.5,2.4v1.1c0,0.8-0.2,1.6-0.5,2.4
+ c-0.4,0.8-0.9,1.5-1.5,2.1c-0.7,0.6-1.5,1.1-2.4,1.5C146,16,144.9,16.2,143.7,16.2z M143.7,5.4c-0.6,0-1.2,0.1-1.6,0.3
+ c-0.5,0.2-0.9,0.4-1.2,0.7s-0.6,0.6-0.7,1c-0.2,0.4-0.2,0.8-0.2,1.2v0.9c0,0.4,0.1,0.8,0.2,1.2c0.2,0.4,0.4,0.7,0.7,1
+ s0.7,0.5,1.2,0.7c0.5,0.2,1,0.3,1.6,0.3c0.6,0,1.2-0.1,1.6-0.3c0.5-0.2,0.9-0.4,1.2-0.7c0.3-0.3,0.6-0.6,0.7-1s0.2-0.8,0.2-1.2V8.6
+ c0-0.4-0.1-0.8-0.2-1.2c-0.2-0.4-0.4-0.7-0.7-1c-0.3-0.3-0.7-0.5-1.2-0.7C144.9,5.5,144.3,5.4,143.7,5.4z M159.5,18v8.7h-15.1V29
+ h16v3.3h-20v-8.7h15.1v-2.3h-15.3V18H159.5z M159.5,7.1h4v3.6h-4v5.9h-4.1V1.5h4.1V7.1z"/>
+ <path class="st2" d="M169.7,21.3h3.2c1.5,0,3.1,0,4.7-0.1c1.6-0.1,3.2-0.2,4.7-0.4l0.5,3.5c-1.6,0.2-3.3,0.4-5.1,0.5
+ c-1.8,0.1-3.8,0.1-5.8,0.1h-6.3V12.3h9.9v-5h-9.9V3.8h14v11.9h-9.9V21.3z M189.2,32h-4.2V1.5h4.2V32z"/>
+ <path class="st2" d="M201.4,24.7V14h4.1v10.7h14.2v3.5h-28v-3.5H201.4z M210.7,21c0.4-2,0.7-3.9,0.8-5.8c0.2-1.8,0.2-3.7,0.2-5.7
+ V7.6h-16.6V4.1h20.8v4.4c0,2.6-0.1,4.9-0.3,7s-0.4,4.1-0.8,6L210.7,21z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/main_job5.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/main_job5.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/main_job5.svg (revision 7)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 107.7 69.3" style="enable-background:new 0 0 107.7 69.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ABC5E3;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st1{fill:#FFFFFF;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st2{fill:none;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st3{fill:#FFFFFF;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st4{fill:none;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st5{fill:#ABC5E3;stroke:#365587;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st6{fill:#DADAE0;}
+ .st7{fill:#FFFFFF;}
+</style>
+<g>
+ <path class="st3" d="M94.1,3.8L81,9L62.1,1.8L40.5,4.1L29.4,14c0,0-2.5,2.3-1.3,6.7c1.2,4.4,7.4,2.2,9.2,1.2c1.8-1,9-4.9,9-4.9
+ L85,38.8L106,27.6"/>
+ <path class="st3" d="M1.8,30.1l11.7,4.7l6,9.6l22.1,9.4l0.5-0.7l20.4,13.1c2,1.3,4.8,0.7,6.1-1.3c1.3-2,0.7-4.8-1.3-6.1l-6.7-4.3
+ l9,5.8c2,1.3,4.8,0.7,6.1-1.3c1.3-2,0.7-4.8-1.3-6.1l2.9,1.9c2,1.3,4.8,0.7,6.1-1.3c1.3-2,0.7-4.8-1.3-6.1l-26.3-17l0.1-0.2
+ l29.6,19c2.5,1.6,5.8,0.9,7.4-1.6c1.6-2.5,0.9-5.8-1.6-7.4L54,16.3c-1.8-1.2-4-1.1-5.7,0l-8.5-6.7L27.9,8.8L12.3,2.4"/>
+ <g>
+ <path class="st3" d="M36.2,54.7c-1.3,2.8-4.6,3.9-7.4,2.6l0,0c-2.8-1.3-3.9-4.6-2.6-7.4l3.4-7.1c1.3-2.8,4.6-3.9,7.4-2.6l0,0
+ c2.8,1.3,3.9,4.6,2.6,7.4L36.2,54.7z"/>
+ <path class="st3" d="M46.2,59.8c-1.3,2.8-4.7,4-7.5,2.7l0,0c-2.8-1.3-4-4.7-2.7-7.5l3.4-7.2c1.3-2.8,4.7-4,7.5-2.7l0,0
+ c2.8,1.3,4,4.7,2.7,7.5L46.2,59.8z"/>
+ <path class="st3" d="M54.4,65c-1.1,2.2-3.8,3.2-6,2.1l0,0c-2.2-1.1-3.2-3.8-2.1-6l2.8-5.8c1.1-2.2,3.8-3.2,6-2.1l0,0
+ c2.2,1.1,3.2,3.8,2.1,6L54.4,65z"/>
+ <path class="st3" d="M25.9,49.6c-1.1,2.2-3.8,3.2-6,2.1l0,0c-2.2-1.1-3.2-3.8-2.1-6l2.8-5.8c1.1-2.2,3.8-3.2,6-2.1l0,0
+ c2.2,1.1,3.2,3.8,2.1,6L25.9,49.6z"/>
+ </g>
+ <line class="st3" x1="74.4" y1="52.8" x2="51.9" y2="38.9"/>
+ <line class="st3" x1="60.6" y1="54.4" x2="50.5" y2="48.8"/>
+ <path class="st3" d="M55.2,17.1c-5.7-1.3-8.9-0.1-8.9-0.1s-7.2,3.9-9,4.9c-1.8,1-8,3.2-9.2-1.2c-1.2-4.4,1.3-6.7,1.3-6.7l11.1-9.9
+ l21.6-2.3"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tba3.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tba3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tba3.svg (revision 7)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 65.7 44" style="enable-background:new 0 0 65.7 44;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#5DA3C0;}
+ .st1{fill:none;stroke:#38383B;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#FFFFFF;}
+ .st3{clip-path:url(#SVGID_2_);fill:#DADAE0;}
+ .st4{clip-path:url(#SVGID_4_);fill:#DADAE0;}
+ .st5{clip-path:url(#SVGID_6_);fill:#DADAE0;}
+ .st6{clip-path:url(#SVGID_8_);fill:#DADAE0;}
+ .st7{fill:#E67677;}
+ .st8{clip-path:url(#SVGID_10_);fill:#DADAE0;}
+ .st9{clip-path:url(#SVGID_12_);fill:#DADAE0;}
+</style>
+<g>
+ <rect x="1" y="6.7" class="st0" width="63.7" height="21.6"/>
+ <rect x="1" y="6.7" class="st1" width="63.7" height="21.6"/>
+ <polygon class="st0" points="64.7,6.7 1,6.7 5.3,2.3 60.4,2.3 "/>
+ <polygon class="st1" points="64.7,6.7 1,6.7 5.3,2.3 60.4,2.3 "/>
+ <rect x="6.3" y="11.9" class="st2" width="53.2" height="11.1"/>
+ <rect x="6.3" y="11.9" class="st1" width="53.2" height="11.1"/>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_1_" x="6.3" y="11.9" width="4" height="11.1"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" style="overflow:visible;"/>
+ </clipPath>
+ <rect x="6.3" y="11.9" class="st3" width="4" height="11.1"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_3_" x="10.3" y="11.9" width="49.1" height="4"/>
+ </defs>
+ <clipPath id="SVGID_4_">
+ <use xlink:href="#SVGID_3_" style="overflow:visible;"/>
+ </clipPath>
+ <rect x="10.3" y="11.9" class="st4" width="49.1" height="4"/>
+ </g>
+ </g>
+
+ <rect x="40.8" y="21.5" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -6.3561 38.5699)" class="st2" width="5.2" height="10.9"/>
+
+ <rect x="40.8" y="21.5" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -6.3561 38.5699)" class="st1" width="5.2" height="10.9"/>
+ <rect x="48.6" y="28.8" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -9.9672 47.2876)" class="st0" width="7" height="13.8"/>
+ <rect x="48.6" y="28.8" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -9.9672 47.2876)" class="st1" width="7" height="13.8"/>
+ <path class="st2" d="M43.3,5.4c5.9,5.9,5.9,15.5,0,21.4c-5.9,5.9-15.5,5.9-21.4,0c-5.9-5.9-5.9-15.5,0-21.4
+ C27.8-0.5,37.4-0.5,43.3,5.4"/>
+ <path class="st1" d="M43.3,5.4c5.9,5.9,5.9,15.5,0,21.4c-5.9,5.9-15.5,5.9-21.4,0c-5.9-5.9-5.9-15.5,0-21.4
+ C27.8-0.5,37.4-0.5,43.3,5.4z"/>
+ <path class="st2" d="M39.5,9.2c3.8,3.8,3.8,10.1,0,13.9c-3.8,3.8-10.1,3.8-13.9,0c-3.8-3.8-3.8-10.1,0-13.9
+ C29.5,5.3,35.7,5.3,39.5,9.2"/>
+ <path class="st1" d="M39.5,9.2c3.8,3.8,3.8,10.1,0,13.9c-3.8,3.8-10.1,3.8-13.9,0c-3.8-3.8-3.8-10.1,0-13.9
+ C29.5,5.3,35.7,5.3,39.5,9.2z"/>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_5_" x="22.7" y="6.3" width="12.3" height="19.7"/>
+ </defs>
+ <clipPath id="SVGID_6_">
+ <use xlink:href="#SVGID_5_" style="overflow:visible;"/>
+ </clipPath>
+ <path class="st5" d="M35,6.6c-1.7,0.4-3.2,1.3-4.5,2.6c-3.8,3.8-3.8,10.1,0,13.9c1.3,1.3,2.9,2.2,4.5,2.6
+ c-3.2,0.8-6.8-0.1-9.4-2.6c-3.8-3.8-3.8-10.1,0-13.9C28.1,6.6,31.7,5.8,35,6.6"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_sharing.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_sharing.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_sharing.svg (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 30 30.3" style="enable-background:new 0 0 30 30.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#373737;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <line class="st0" x1="10.5" y1="17.5" x2="19.5" y2="22.1"/>
+ <path class="st1" d="M10.5,15.1c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6C8.4,10.5,10.5,12.6,10.5,15.1z"/>
+ <path class="st1" d="M28.7,5.9c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6C26.6,1.2,28.7,3.3,28.7,5.9z"/>
+ <path class="st1" d="M28.7,24.4c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6C26.6,19.8,28.7,21.9,28.7,24.4z"/>
+ <line class="st0" x1="10.7" y1="12.7" x2="19.5" y2="8.2"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_cart.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_cart.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_cart.svg (revision 7)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 145.37 112.45" style="enable-background:new 0 0 145.37 112.45;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#343231;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polygon class="st0" points="125.77,81.05 40.25,81.05 26.53,19.09 139.49,19.09 "/>
+ <polygon class="st0" points="125.77,81.05 40.25,81.05 26.53,19.09 139.49,19.09 "/>
+ <polyline class="st0" points="40.25,81.05 23.48,5.32 5.88,5.32 "/>
+ <polyline class="st0" points="40.25,81.05 23.48,5.32 5.88,5.32 "/>
+ <path class="st0" d="M56.03,99.25c0,4.36-3.53,7.9-7.9,7.9c-4.35,0-7.89-3.53-7.89-7.9c0-4.36,3.53-7.9,7.89-7.9
+ C52.5,91.35,56.03,94.88,56.03,99.25"/>
+ <path class="st0" d="M56.03,99.25c0,4.36-3.53,7.9-7.9,7.9c-4.35,0-7.89-3.53-7.89-7.9c0-4.36,3.53-7.9,7.89-7.9
+ C52.5,91.35,56.03,94.88,56.03,99.25z"/>
+ <path class="st0" d="M110.43,99.25c0,4.36,3.53,7.9,7.89,7.9s7.9-3.53,7.9-7.9c0-4.36-3.53-7.9-7.9-7.9
+ C113.96,91.35,110.43,94.88,110.43,99.25"/>
+ <path class="st0" d="M110.43,99.25c0,4.36,3.53,7.9,7.89,7.9s7.9-3.53,7.9-7.9c0-4.36-3.53-7.9-7.9-7.9
+ C113.96,91.35,110.43,94.88,110.43,99.25z"/>
+ <line class="st0" x1="83" y1="35.43" x2="83" y2="65.32"/>
+ <line class="st0" x1="83" y1="35.43" x2="83" y2="65.32"/>
+ <line class="st0" x1="58.04" y1="35.43" x2="61.62" y2="65.32"/>
+ <line class="st0" x1="58.04" y1="35.43" x2="61.62" y2="65.32"/>
+ <line class="st0" x1="107.97" y1="35.43" x2="104.39" y2="65.32"/>
+ <line class="st0" x1="107.97" y1="35.43" x2="104.39" y2="65.32"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_5.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_5.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/main_job6.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/main_job6.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/main_job6.svg (revision 7)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 88.9 102.4" style="enable-background:new 0 0 88.9 102.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#ABC5E3;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st1{fill:#FFFFFF;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st2{fill:none;stroke:#38393A;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st3{fill:#FFFFFF;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st4{fill:none;stroke:#38383B;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st5{fill:#ABC5E3;stroke:#365587;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;}
+ .st6{fill:#DADAE0;}
+ .st7{fill:#FFFFFF;}
+</style>
+<g>
+ <path class="st5" d="M49.2,88.5c-2.2,5.2-8.3,7.7-13.5,5.4c-5.2-2.2-7.7-8.3-5.5-13.5c2.2-5.2,8.3-7.7,13.5-5.5
+ C49,77.2,51.5,83.3,49.2,88.5z"/>
+ <g>
+ <g>
+ <path class="st6" d="M64.5,95L15,73.9c3-7.1,8.7-11.8,13.7-11.9l15.4-32.6c5.8-13.7,17.8-21.7,26.7-17.9
+ c8.9,3.8,11.4,18,5.6,31.6L63.6,76.8C67,80.6,67.6,87.9,64.5,95"/>
+ </g>
+ </g>
+ <path class="st4" d="M49.2,88.5c-2.2,5.2-8.3,7.7-13.5,5.4c-5.2-2.2-7.7-8.3-5.5-13.5c2.2-5.2,8.3-7.7,13.5-5.5
+ C49,77.2,51.5,83.3,49.2,88.5"/>
+ <path class="st7" d="M73.1,16.9l-7.7-3.3l4-9.3c0.9-2.1,3.4-3.1,5.5-2.2C77,3,77.9,5.4,77,7.6L73.1,16.9z"/>
+ <path class="st4" d="M73.1,16.9l-7.7-3.3l4-9.3c0.9-2.1,3.4-3.1,5.5-2.2C77,3,77.9,5.4,77,7.6L73.1,16.9z"/>
+ <path class="st7" d="M70.8,11.5C57.1,5.7,41.3,12,35.5,25.7L18.6,59.6l53.8,22.9L85,46.8C90.9,33.1,84.5,17.3,70.8,11.5"/>
+ <path class="st4" d="M70.8,11.5C57.1,5.7,41.3,12,35.5,25.7L18.6,59.6l53.8,22.9L85,46.8C90.9,33.1,84.5,17.3,70.8,11.5z"/>
+ <path class="st7" d="M77.7,100.6l-76-32.4c3.7-8.7,13.7-12.7,22.4-9l44.5,19C77.4,81.9,81.4,91.9,77.7,100.6"/>
+ <path class="st4" d="M77.7,100.6l-76-32.4c3.7-8.7,13.7-12.7,22.4-9l44.5,19C77.4,81.9,81.4,91.9,77.7,100.6z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tba4.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tba4.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tba4.svg (revision 7)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 57.7 60.9" style="enable-background:new 0 0 57.7 60.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#5DA3C0;}
+ .st1{fill:none;stroke:#38383B;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#FFFFFF;}
+ .st3{clip-path:url(#SVGID_2_);fill:#DADAE0;}
+ .st4{clip-path:url(#SVGID_4_);fill:#DADAE0;}
+ .st5{clip-path:url(#SVGID_6_);fill:#DADAE0;}
+ .st6{clip-path:url(#SVGID_8_);fill:#DADAE0;}
+ .st7{fill:#E67677;}
+ .st8{clip-path:url(#SVGID_10_);fill:#DADAE0;}
+ .st9{clip-path:url(#SVGID_12_);fill:#DADAE0;}
+</style>
+<g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_9_" x="14.2" y="49" width="33.6" height="12"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_9_" style="overflow:visible;"/>
+ </clipPath>
+ <path class="st3" d="M47.8,54.9c0,3.3-7.5,6-16.8,6c-9.3,0-16.8-2.7-16.8-6c0-3.3,7.5-6,16.8-6C40.3,49,47.8,51.6,47.8,54.9"/>
+ </g>
+ </g>
+ <path class="st1" d="M14.7,11.3c-1.3-1.9-3.1-3.7-5.4-4.2c-3.2-0.7-6.6,1.4-7.8,4.5c-1.2,3.1-0.3,6.7,1.7,9.2c2,2.6,5.1,4.2,8.2,5
+ c1.6,0.4,3.3,0.7,4.4,2c1,1.1,1.2,2.8,0.4,4.1c-0.7,1.3-2.3,2-3.7,1.8c-1-0.2-2.1-1-2.1-2c-0.1-1.1,1.2-2,2.1-1.4"/>
+ <path class="st1" d="M43,11.3c1.3-1.9,3.1-3.7,5.4-4.2c3.2-0.7,6.6,1.4,7.8,4.5c1.2,3.1,0.3,6.7-1.7,9.2c-2,2.6-5.1,4.2-8.2,5
+ c-1.6,0.4-3.3,0.7-4.4,2c-1,1.1-1.2,2.8-0.4,4.1c0.7,1.3,2.3,2,3.7,1.8c1-0.2,2.1-1,2.1-2c0.1-1.1-1.2-2-2.1-1.4"/>
+ <path class="st2" d="M36.1,33.6c3.7-2.1,6.3-5.8,7.1-10.2l3.2-19.1h-35l3.2,19.1c0.7,4.4,3.4,8.1,7.1,10.2c2.2,1.3,3.6,3.6,3.6,6.1
+ c0,2.5-1.3,4.9-3.6,6.1c-1.5,0.8-2.7,2-3.5,3.5L16,53.2c-0.3,0.3-0.4,0.5-0.4,0.8c0,1.8,5.9,3.2,13.3,3.2c7.3,0,13.3-1.5,13.3-3.2
+ c0-0.3-0.2-0.5-0.4-0.8l-2.1-3.9c-0.8-1.5-2.1-2.8-3.5-3.5c-2.2-1.2-3.6-3.6-3.6-6.1C32.5,37.1,33.9,34.9,36.1,33.6"/>
+ <path class="st1" d="M36.1,33.6c3.7-2.1,6.3-5.8,7.1-10.2l3.2-19.1h-35l3.2,19.1c0.7,4.4,3.4,8.1,7.1,10.2c2.2,1.3,3.6,3.6,3.6,6.1
+ c0,2.5-1.3,4.9-3.6,6.1c-1.5,0.8-2.7,2-3.5,3.5L16,53.2c-0.3,0.3-0.4,0.5-0.4,0.8c0,1.8,5.9,3.2,13.3,3.2c7.3,0,13.3-1.5,13.3-3.2
+ c0-0.3-0.2-0.5-0.4-0.8l-2.1-3.9c-0.8-1.5-2.1-2.8-3.5-3.5c-2.2-1.2-3.6-3.6-3.6-6.1C32.5,37.1,33.9,34.9,36.1,33.6z"/>
+ <polygon class="st0" points="28.9,13.4 31,17.8 35.8,18.5 32.3,21.9 33.2,26.7 28.9,24.4 24.5,26.7 25.4,21.9 21.9,18.5 26.7,17.8
+ "/>
+ <polygon class="st1" points="28.9,13.4 31,17.8 35.8,18.5 32.3,21.9 33.2,26.7 28.9,24.4 24.5,26.7 25.4,21.9 21.9,18.5 26.7,17.8
+ "/>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_11_" x="28.9" y="4.2" width="17.5" height="53"/>
+ </defs>
+ <clipPath id="SVGID_4_">
+ <use xlink:href="#SVGID_11_" style="overflow:visible;"/>
+ </clipPath>
+ <path class="st4" d="M32.5,39.7c0,2.5,1.3,4.9,3.6,6.1c1.5,0.8,2.7,2,3.5,3.5l2.1,3.9c0.3,0.3,0.4,0.5,0.4,0.8
+ c0,1.8-5.9,3.2-13.3,3.2c4.5,0,8.2-1.5,8.2-3.2c0-0.3-0.1-0.5-0.3-0.8l-1.3-3.9c-0.5-1.5-1.3-2.8-2.2-3.5
+ c-1.4-1.2-2.2-3.6-2.2-6.1s0.9-4.8,2.2-6.1c2.3-2.1,3.9-5.8,4.4-10.2l1.9-19.1h6.7l-3.2,19.1c-0.7,4.4-3.4,8.1-7.1,10.2
+ C33.9,34.9,32.5,37.1,32.5,39.7"/>
+ </g>
+ </g>
+ <path class="st2" d="M46.3,4.2c0,1.8-7.8,3.2-17.5,3.2c-9.7,0-17.5-1.5-17.5-3.2c0-1.8,7.8-3.2,17.5-3.2C38.5,1,46.3,2.5,46.3,4.2"
+ />
+ <path class="st1" d="M46.3,4.2c0,1.8-7.8,3.2-17.5,3.2c-9.7,0-17.5-1.5-17.5-3.2c0-1.8,7.8-3.2,17.5-3.2C38.5,1,46.3,2.5,46.3,4.2z
+ "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_car.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_car.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_update.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_update.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_update.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 39.36 39.25" style="enable-background:new 0 0 39.36 39.25;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M31.8,21.23v9.75c0,3.74-3.03,6.77-6.77,6.77H8.27c-3.74,0-6.77-3.03-6.77-6.77V14.23
+ c0-3.74,3.03-6.77,6.77-6.77h9.75"/>
+ <path class="st0" d="M18.82,25.14l-6.28,1.68l1.68-6.28L32.31,2.45c1.27-1.27,3.33-1.27,4.6,0c1.27,1.27,1.27,3.33,0,4.6
+ L18.82,25.14z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_blank_focus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_blank_focus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_blank_focus.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.3 37.3" style="enable-background:new 0 0 37.3 37.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="25.8,1.5 35.8,1.5 35.8,11.5 "/>
+ <line class="st0" x1="35.8" y1="1.5" x2="18.2" y2="19.1"/>
+</g>
+<path class="st0" d="M35.8,17.1v11c0,4.2-3.4,7.7-7.7,7.7h-19c-4.2,0-7.7-3.4-7.7-7.7v-19c0-4.2,3.4-7.7,7.7-7.7h11"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_print.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_print.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_print.svg (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 23.9 22.7" style="enable-background:new 0 0 23.9 22.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#000000;stroke-width:1.5;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st1" d="M18.2,21.9H5.7c-0.8,0-1.5-0.7-1.5-1.5v-5.9c0-0.8,0.7-1.5,1.5-1.5h12.4c0.8,0,1.5,0.7,1.5,1.5v5.9
+ C19.7,21.3,19,21.9,18.2,21.9z"/>
+ <path class="st1" d="M4.2,6.9V2.4c0-0.9,0.7-1.6,1.6-1.6h12.2c0.9,0,1.6,0.7,1.6,1.6v4.5"/>
+ <path class="st1" d="M4.2,17.5H2.4c-0.9,0-1.6-0.7-1.6-1.6V8.5c0-0.9,0.7-1.6,1.6-1.6h19.1c0.9,0,1.6,0.7,1.6,1.6v7.3
+ c0,0.9-0.7,1.6-1.6,1.6h-1.8"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/triangle_a_blue.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/triangle_a_blue.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/triangle_a_blue.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 10 10" style="enable-background:new 0 0 10 10;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#7AAAC5;}
+ .st1{fill:#68A4C5;}
+</style>
+<g>
+ <polygon class="st0" points="5,10 10,0 0,0 "/>
+ <path class="st1" d="M8.9,0L5,7.8L1.1,0H8.9 M10,0H0l5,10L10,0L10,0z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_arrow_up.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_up.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_up.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <polygon points="4.539,7.459 8.066,2.159 11.593,7.459 "/>
+ <path d="M8.815,14.781c0,0.256-0.334,0.462-0.75,0.462c-0.417,0-0.753-0.206-0.753-0.462v-9.22c0-0.253,0.336-0.459,0.753-0.459
+ c0.415,0,0.75,0.206,0.75,0.459V14.781z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_move.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_move.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_move.svg (revision 7)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="16.913px" height="21.707px" viewBox="2.94 -1.844 16.913 21.707" enable-background="new 2.94 -1.844 16.913 21.707"
+ xml:space="preserve">
+<g>
+ <polygon fill="#221F1F" points="12.273,9.042 15.14,11.244 12.273,13.447 "/>
+ <path fill="#221F1F" d="M12.273,13.857c-0.062,0-0.124-0.014-0.182-0.043c-0.14-0.068-0.229-0.211-0.229-0.367V9.042
+ c0-0.156,0.089-0.3,0.229-0.368c0.142-0.068,0.308-0.052,0.432,0.043l2.866,2.202c0.102,0.078,0.16,0.198,0.16,0.325
+ c0,0.128-0.059,0.248-0.16,0.326l-2.866,2.202C12.45,13.828,12.362,13.857,12.273,13.857z M12.684,9.875v2.738l1.782-1.369
+ L12.684,9.875z"/>
+</g>
+<path fill="#221F1F" d="M12.604,11.994h-4.61c-0.414,0-0.75-0.336-0.75-0.75s0.336-0.75,0.75-0.75h4.61
+ c0.414,0,0.75,0.336,0.75,0.75S13.019,11.994,12.604,11.994z"/>
+<path fill="#221F1F" d="M18.098,6.306h-4.136c-0.706,0-1.281-0.578-1.281-1.288V0.89c0-0.303,0.183-0.577,0.463-0.693
+ c0.28-0.117,0.604-0.052,0.817,0.163l4.667,4.666c0.215,0.214,0.278,0.537,0.163,0.817C18.675,6.123,18.401,6.306,18.098,6.306z
+ M14.181,4.806h2.105L14.181,2.7V4.806z"/>
+<path fill="#221F1F" d="M17.8,17.735H5.416c-0.706,0-1.28-0.578-1.28-1.289V1.428c0-0.71,0.574-1.288,1.28-1.288h8.248
+ c0.199,0,0.39,0.079,0.53,0.22l4.667,4.666c0.141,0.141,0.22,0.332,0.22,0.53v10.89C19.081,17.157,18.506,17.735,17.8,17.735z
+ M5.636,16.235h11.945V5.866L13.354,1.64H5.636V16.235z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/text_arrow_lightblue.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/text_arrow_lightblue.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/text_arrow_lightblue.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 11.9 11.9" style="enable-background:new 0 0 11.9 11.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#EBF0F7;}
+ .st1{fill:#DBE0E6;}
+</style>
+<g>
+ <polygon class="st0" points="0,11.2 0,0.5 10.7,0.5 "/>
+ <path class="st1" d="M0,11.9L11.9,0H0V11.9z M9.5,1L0,10.7V1H9.5z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_down.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_down.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_down.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="66.609px" height="37.805px" viewBox="-14.402 14.403 66.609 37.805" enable-background="new -14.402 14.403 66.609 37.805"
+ xml:space="preserve">
+<polyline fill="none" stroke="#3C3C3C" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 47.707,18.903 18.903,47.707 -9.902,18.903 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_turn_right.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_turn_right.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_turn_right.svg (revision 7)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="19.261px" height="20.193px" viewBox="-3.673 1.313 19.261 20.193" enable-background="new -3.673 1.313 19.261 20.193"
+ xml:space="preserve">
+<g>
+ <path fill="#221F1F" d="M-3.07,10.636c-0.333,0-0.603-0.27-0.603-0.603c0-3.483,2.838-6.317,6.327-6.317
+ c0.333,0,0.603,0.27,0.603,0.603s-0.27,0.603-0.603,0.603c-2.824,0-5.122,2.293-5.122,5.112
+ C-2.468,10.366-2.737,10.636-3.07,10.636z"/>
+ <g>
+ <polygon fill="#221F1F" points="4.7,1.661 9.315,4.32 4.7,6.978 "/>
+ <path fill="#221F1F" d="M4.7,7.326c-0.06,0-0.121-0.016-0.174-0.047C4.418,7.217,4.352,7.102,4.352,6.978V1.661
+ c0-0.125,0.066-0.239,0.174-0.302c0.107-0.063,0.241-0.063,0.348,0l4.615,2.659C9.597,4.08,9.664,4.195,9.664,4.32
+ S9.597,4.56,9.489,4.622L4.874,7.279C4.821,7.311,4.76,7.326,4.7,7.326z M5.049,2.264v4.111L8.617,4.32L5.049,2.264z"/>
+ </g>
+ <path fill="#221F1F" d="M13.758,21.506H2.26c-1.009,0-1.83-0.822-1.83-1.83v-8.234c0-1.008,0.821-1.828,1.83-1.828h11.498
+ c1.01,0,1.83,0.82,1.83,1.828v8.234C15.588,20.684,14.768,21.506,13.758,21.506z M2.26,11.153c-0.163,0-0.291,0.127-0.291,0.289
+ v8.234c0,0.16,0.13,0.291,0.291,0.291h11.498c0.16,0,0.291-0.131,0.291-0.291v-8.234c0-0.159-0.131-0.289-0.291-0.289H2.26z"/>
+ <path fill="#221F1F" d="M5.006,4.922H3.048c-0.333,0-0.603-0.27-0.603-0.603s0.27-0.603,0.603-0.603h1.958
+ c0.333,0,0.603,0.27,0.603,0.603S5.339,4.922,5.006,4.922z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_radio.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_radio.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_radio.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.038px" height="24.039px" viewBox="0 0 24.038 24.039" enable-background="new 0 0 24.038 24.039" xml:space="preserve">
+<path fill="#22211F" d="M12.02,24.039C5.393,24.039,0,18.647,0,12.02S5.393,0,12.02,0s12.019,5.392,12.019,12.02
+ S18.646,24.039,12.02,24.039z M12.02,1.379c-5.867,0-10.641,4.773-10.641,10.641c0,5.867,4.773,10.64,10.641,10.64
+ c5.866,0,10.64-4.773,10.64-10.64C22.659,6.152,17.886,1.379,12.02,1.379z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_logout.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_logout.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_logout.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 38.88 36.68" style="enable-background:new 0 0 38.88 36.68;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M24.92,28.41c0,3.74-3.03,6.77-6.77,6.77H8.27c-3.74,0-6.77-3.03-6.77-6.77V8.27c0-3.74,3.03-6.77,6.77-6.77
+ l9.87,0c3.74,0,6.77,3.03,6.77,6.77"/>
+ <polyline class="st0" points="30.43,11.39 37.38,18.34 30.43,25.29 "/>
+ <line class="st0" x1="37.38" y1="18.34" x2="14.33" y2="18.34"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/file_reg.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_reg.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_reg.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="446.461px" height="595.397px" viewBox="197.715 -0.116 446.461 595.397"
+ enable-background="new 197.715 -0.116 446.461 595.397" xml:space="preserve">
+<path fill="#333333" d="M627.782,113.824l-97.547-97.547C519.771,5.813,505.587-0.116,490.821-0.116H253.522
+ C222.712,0,197.715,24.997,197.715,55.808v483.665c0,30.811,24.997,55.809,55.808,55.809h334.846
+ c30.811,0,55.808-24.998,55.808-55.809V153.354C644.176,138.589,638.246,124.288,627.782,113.824z M583.834,148.82h-88.479V60.342
+ L583.834,148.82z M253.522,539.472V55.808h186.025v120.916c0,15.463,12.44,27.904,27.903,27.904h120.917v334.845H253.522z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/car.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/car.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/text_arrow_white.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/text_arrow_white.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/text_arrow_white.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 11.9 11.9" style="enable-background:new 0 0 11.9 11.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#C4D9E4;}
+</style>
+<g>
+ <polygon class="st0" points="11.9,11.2 11.9,0.5 1.2,0.5 "/>
+ <path class="st1" d="M11.9,11.9L0,0h11.9V11.9z M2.4,1l9.5,9.7V1H2.4z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_write.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_write.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_write.svg (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 48.6 47" style="enable-background:new 0 0 48.6 47;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#333333;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="33.9,25 33.9,1.5 1.5,1.5 1.5,45.5 33.9,45.5 33.9,31.4 "/>
+ <line class="st0" x1="7.3" y1="9.6" x2="28.1" y2="9.6"/>
+ <line class="st0" x1="7.3" y1="16.5" x2="28.1" y2="16.5"/>
+ <line class="st0" x1="7.3" y1="23.5" x2="28.1" y2="23.5"/>
+ <line class="st0" x1="18.9" y1="38.5" x2="28.1" y2="38.5"/>
+ <polygon class="st0" points="44.9,19.7 27.7,29.2 23.7,34 29.9,33.2 47.1,23.8 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/popup.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/popup.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_prog1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_prog1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_prog1.svg (revision 7)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 58 48" style="enable-background:new 0 0 58 48;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:none;stroke:#38383B;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#FFAF10;}
+</style>
+<g>
+ <path class="st0" d="M49.7,4.6C49.7,4.7,49.7,4.7,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st1" d="M49.7,4.6C49.7,4.7,49.7,4.7,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st0" d="M49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st1" d="M49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6C49.7,4.6,49.7,4.6,49.7,4.6L49.7,4.6L49.7,4.6z"/>
+ <path class="st0" d="M57,4.6c0-2-1.6-3.6-3.6-3.6c0,0,0,0,0,0c-2,0-3.6,1.6-3.6,3.6v0v0v3.6H57V4.6L57,4.6C57,4.6,57,4.6,57,4.6"/>
+ <path class="st1" d="M57,4.6c0-2-1.6-3.6-3.6-3.6c0,0,0,0,0,0c-2,0-3.6,1.6-3.6,3.6v0v0v3.6H57V4.6L57,4.6C57,4.6,57,4.6,57,4.6z"
+ />
+ <path class="st0" d="M49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.3,49.7,43.3,49.7,43.4"/>
+ <path class="st1" d="M49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.3,49.7,43.3,49.7,43.4z"/>
+ <path class="st0" d="M49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4"/>
+ <path class="st1" d="M49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4L49.7,43.4L49.7,43.4C49.7,43.4,49.7,43.4,49.7,43.4z"/>
+ <path class="st0" d="M49.7,43.5c0,0,0-0.1,0-0.1v0v0C49.7,43.4,49.7,43.5,49.7,43.5"/>
+ <path class="st1" d="M49.7,43.5c0,0,0-0.1,0-0.1v0v0C49.7,43.4,49.7,43.5,49.7,43.5z"/>
+ <path class="st0" d="M49.7,1H18.1c-2,0-3.6,1.6-3.6,3.6v19.1h0v15.9h28v3.6c0,0,0,0,0,0c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0
+ c1.9,0,3.5-1.5,3.6-3.5c0,0,0-0.1,0-0.1v0v0v-3.6V24.2h0V8.3V4.7c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0-2,1.6-3.6,3.6-3.6
+ c0,0,0,0,0,0v0H49.7z"/>
+ <path class="st1" d="M49.7,1H18.1c-2,0-3.6,1.6-3.6,3.6v19.1h0v15.9h28v3.6c0,0,0,0,0,0c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0
+ c1.9,0,3.5-1.5,3.6-3.5c0,0,0-0.1,0-0.1v0v0v-3.6V24.2h0V8.3V4.7c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0-2,1.6-3.6,3.6-3.6
+ c0,0,0,0,0,0v0H49.7z"/>
+ <path class="st0" d="M46.1,47C46.1,47,46.1,47,46.1,47c-2,0-3.6-1.6-3.6-3.6c0,0,0,0,0,0h0v-3.6h-28h0H7.2v3.6l0,0c0,0,0,0,0,0
+ c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0H46.1c2,0,3.5-1.5,3.6-3.5C49.6,45.4,48.1,47,46.1,47"/>
+ <path class="st1" d="M46.1,47C46.1,47,46.1,47,46.1,47c-2,0-3.6-1.6-3.6-3.6c0,0,0,0,0,0h0v-3.6h-28h0H7.2v3.6l0,0c0,0,0,0,0,0
+ c0,2,1.6,3.6,3.6,3.6c0,0,0,0,0,0H46.1c2,0,3.5-1.5,3.6-3.5C49.6,45.4,48.1,47,46.1,47z"/>
+ <polygon class="st0" points="24.2,25.1 26.8,29.9 29.5,34.8 24.6,32.1 19.9,29.5 "/>
+ <polygon class="st1" points="24.2,25.1 26.8,29.9 29.5,34.8 24.6,32.1 19.9,29.5 "/>
+ <path class="st2" d="M1.2,10.9l18.6,18.6c0.6,0.6,2,0.1,3.2-1.1c1.2-1.2,1.7-2.7,1.1-3.2L5.6,6.5L1.2,10.9z"/>
+ <path class="st1" d="M1.2,10.9l18.6,18.6c0.6,0.6,2,0.1,3.2-1.1c1.2-1.2,1.7-2.7,1.1-3.2L5.6,6.5L1.2,10.9z"/>
+ <path class="st0" d="M5.6,6.5c0.6,0.6,0.1,2-1.1,3.2c-1.2,1.2-2.6,1.7-3.2,1.1c-0.6-0.6-0.1-2,1.1-3.2C3.6,6.4,5,5.9,5.6,6.5"/>
+ <path class="st1" d="M5.6,6.5c0.6,0.6,0.1,2-1.1,3.2c-1.2,1.2-2.6,1.7-3.2,1.1c-0.6-0.6-0.1-2,1.1-3.2C3.6,6.4,5,5.9,5.6,6.5z"/>
+ <polygon class="st2" points="26.8,29.9 29.5,34.8 24.6,32.1 "/>
+ <polygon class="st1" points="26.8,29.9 29.5,34.8 24.6,32.1 "/>
+ <line class="st1" x1="21.7" y1="8.7" x2="42.2" y2="8.7"/>
+ <line class="st1" x1="21.7" y1="15" x2="42.2" y2="15"/>
+ <line class="st1" x1="27.1" y1="21.3" x2="42.2" y2="21.3"/>
+ <line class="st1" x1="30.8" y1="27.6" x2="42.2" y2="27.6"/>
+ <line class="st1" x1="34.9" y1="33.9" x2="42.2" y2="33.9"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_star1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_star1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_star1.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37.38 35.83" style="enable-background:new 0 0 37.38 35.83;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F7DB37;}
+</style>
+<path class="st0" d="M20.31,1.06l4.38,8.87c0.26,0.53,0.77,0.9,1.36,0.99l9.79,1.42c1.48,0.22,2.07,2.03,1,3.08l-7.08,6.9
+ c-0.43,0.41-0.62,1.01-0.52,1.6l1.67,9.75c0.25,1.47-1.3,2.6-2.62,1.9l-8.75-4.6c-0.53-0.28-1.15-0.28-1.68,0l-8.75,4.6
+ c-1.32,0.7-2.87-0.43-2.62-1.9l1.67-9.75c0.1-0.59-0.09-1.18-0.52-1.6l-7.08-6.9c-1.07-1.04-0.48-2.86,1-3.08l9.79-1.42
+ c0.59-0.09,1.1-0.45,1.36-0.99l4.38-8.87C17.73-0.28,19.65-0.28,20.31,1.06z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_trash.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_trash.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_trash.svg (revision 7)
@@ -0,0 +1 @@
+<svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="trash-alt" class="svg-inline--fa fa-trash-alt fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z"></path></svg>
\ No newline at end of file
Index: base3.10/src/main/webapp/images/custom/bg_balloon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_balloon.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/arrow_left.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/arrow_left.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_more_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_more_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_more_fff.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 25 16.9" style="enable-background:new 0 0 25 16.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="16.5,1.5 23.5,8.5 16.5,15.4 "/>
+ <line class="st0" x1="23.5" y1="8.5" x2="1.5" y2="8.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_minus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_minus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_minus.svg (revision 7)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="27px" height="27px" viewBox="0 0 27 27" enable-background="new 0 0 27 27" xml:space="preserve">
+<line fill="none" stroke="#282828" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.334" y1="13.5" x2="24.668" y2="13.5"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_line_center.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/icon_tree_line_center.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/editor.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/editor.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_file.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_file.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_file.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 41.8 42.5" style="enable-background:new 0 0 41.8 42.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#373737;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M7.6,27.5l17.3-17.3L26,9.1c1.9-1.9,4.9-1.9,6.7,0l0,0c1.9,1.9,1.9,4.9,0,6.7l-7.3,7.3l-9.3,9.3l-1.8,1.8
+ c-3,3-7.8,3-10.8,0l0,0c-3-3-3-7.8,0-10.8L8.9,18l8.8-8.8l4.8-4.8c4.1-4.1,10.8-4.1,14.9,0l0,0c4.1,4.1,4.1,10.8,0,14.9l-22,22"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_search_detail.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_search_detail.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_search_detail.svg (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 41.7 41.2" style="enable-background:new 0 0 41.7 41.2;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#373737;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M16.9,5.9c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6c0-2.6,2.1-4.6,4.6-4.6C14.8,1.2,16.9,3.3,16.9,5.9z"
+ />
+ <path class="st0" d="M34.6,20.6c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6S27.4,16,30,16C32.6,16,34.6,18,34.6,20.6z"/>
+ <path class="st0" d="M16.9,35.3c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6c0-2.6,2.1-4.6,4.6-4.6
+ C14.8,30.7,16.9,32.8,16.9,35.3z"/>
+ <line class="st0" x1="1.2" y1="5.9" x2="7.6" y2="5.9"/>
+ <line class="st0" x1="1.2" y1="20.6" x2="25.4" y2="20.6"/>
+ <line class="st0" x1="18.1" y1="5.9" x2="40.5" y2="5.9"/>
+ <line class="st0" x1="1.2" y1="35.3" x2="7.6" y2="35.3"/>
+ <line class="st0" x1="18.1" y1="35.3" x2="40.5" y2="35.3"/>
+ <line class="st0" x1="35" y1="20.6" x2="40.5" y2="20.6"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_right.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/arrow_right.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/E8C6460F.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/E8C6460F.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_camera.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_camera.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_camera.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 41.9 32.1" style="enable-background:new 0 0 41.9 32.1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="10.6,6.3 14.1,0.8 27.8,0.8 31.3,6.3 "/>
+ <rect x="0.8" y="6.3" class="st0" width="40.4" height="25"/>
+ <circle class="st0" cx="20.9" cy="18.8" r="7.8"/>
+ <line class="st0" x1="33.6" y1="11.6" x2="35.5" y2="11.6"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/logo.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/logo.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/logo.svg (revision 7)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 219.8 34.5" style="enable-background:new 0 0 219.8 34.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+ .st2{fill:#FFFFFF;}
+</style>
+<g>
+ <g id="XMLID_6_">
+ <g id="XMLID_7_">
+ <g id="XMLID_8_">
+
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="35.956" y1="29.9652" x2="67.9137" y2="5.7629" gradientTransform="matrix(1 0 0 -1 0 33.89)">
+ <stop offset="0" style="stop-color:#00AFEC"/>
+ <stop offset="0.1679" style="stop-color:#00ADEB"/>
+ <stop offset="0.3876" style="stop-color:#00A4E4"/>
+ <stop offset="0.6361" style="stop-color:#0096D9"/>
+ <stop offset="0.9038" style="stop-color:#0082C9"/>
+ <stop offset="1" style="stop-color:#0079C3"/>
+ </linearGradient>
+ <path id="XMLID_10_" class="st0" d="M58.4,23.8c2.4,1,1.8,3.9-1,3.9H39c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.4,1.1,1,1.1h21.4
+ c5,0,8.9-2.4,8.9-7.4c0-3.3-1.5-6-5.1-7.6c-2.1-1-15.7-6.7-15.7-6.7c-2.4-1-1.8-3.9,1-3.9h18.3c0.5,0,1-0.5,1-1.1V3.2
+ c0-0.6-0.4-1.1-1-1.1H46.5c-5,0-8.9,2.4-8.9,7.4c0,3.3,1.5,6,5.1,7.6C44.8,18.1,58.4,23.8,58.4,23.8z"/>
+
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="5.5248" y1="37.2072" x2="29.151" y2="13.0055" gradientTransform="matrix(1 0 0 -1 0 33.89)">
+ <stop offset="5.618000e-03" style="stop-color:#FDD000"/>
+ <stop offset="1" style="stop-color:#F08300"/>
+ </linearGradient>
+ <path id="XMLID_9_" class="st1" d="M36.4,2.1H1c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.4,1.1,1,1.1h12.8v24.6c0,0.6,0.5,1.1,1,1.1l0,0
+ h7.9l0,0c0.5,0,1-0.5,1-1.1V6.6h12.8c0.5,0,1-0.5,1-1.1V3.2C37.4,2.6,36.9,2.1,36.4,2.1z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <path class="st2" d="M106.7,19.6v3.5H100V32h-4.1v-8.9h-6.4V32h-4.1v-8.9h-6.7v-3.5H106.7z M103.1,17.2H82.3V2.8h20.4v3.4H86.4
+ v2.1h16v3.4h-16v2.1h16.6V17.2z"/>
+ <path class="st2" d="M108.8,3.2h4.2v10.3c2.3,0,4.4-0.1,6.5-0.2c2.1-0.1,4.2-0.3,6.3-0.5l0.4,3.5c-1,0.1-2.1,0.2-3.2,0.3
+ c-1.1,0.1-2.4,0.2-3.7,0.2c-1.4,0.1-2.9,0.1-4.6,0.1c-1.7,0-3.6,0-5.8,0V3.2z M122.9,33c-1.4,0-2.6-0.1-3.8-0.4
+ c-1.2-0.3-2.2-0.7-3-1.2c-0.9-0.5-1.5-1.1-2-1.9s-0.7-1.6-0.7-2.5v-1.4c0-0.9,0.2-1.8,0.7-2.5c0.5-0.7,1.2-1.4,2-1.9
+ c0.9-0.5,1.9-0.9,3-1.2c1.2-0.3,2.4-0.4,3.8-0.4c1.4,0,2.6,0.1,3.8,0.4c1.2,0.3,2.2,0.7,3,1.2c0.9,0.5,1.5,1.1,2,1.9
+ c0.5,0.7,0.7,1.6,0.7,2.5V27c0,0.9-0.2,1.8-0.7,2.5s-1.2,1.4-2,1.9c-0.9,0.5-1.9,0.9-3,1.2C125.5,32.8,124.2,33,122.9,33z
+ M122.9,22.9c-0.7,0-1.4,0.1-2.1,0.2c-0.7,0.2-1.2,0.4-1.7,0.6c-0.5,0.3-0.9,0.6-1.2,0.9c-0.3,0.4-0.5,0.7-0.5,1.1v0.9
+ c0,0.4,0.2,0.8,0.5,1.1c0.3,0.4,0.7,0.7,1.2,0.9c0.5,0.3,1.1,0.5,1.7,0.6c0.7,0.2,1.3,0.2,2.1,0.2c0.7,0,1.4-0.1,2.1-0.2
+ s1.2-0.4,1.7-0.6c0.5-0.3,0.9-0.6,1.2-0.9c0.3-0.4,0.5-0.7,0.5-1.1v-0.9c0-0.4-0.2-0.8-0.5-1.1c-0.3-0.3-0.7-0.7-1.2-0.9
+ c-0.5-0.3-1.1-0.5-1.7-0.6S123.6,22.9,122.9,22.9z M132.4,19.4h-4.1v-18h4.1V19.4z"/>
+ <path class="st2" d="M143.7,16.2c-1.2,0-2.3-0.2-3.3-0.6c-1-0.4-1.8-0.9-2.4-1.5c-0.7-0.6-1.2-1.3-1.5-2.1
+ c-0.4-0.8-0.5-1.6-0.5-2.4V8.5c0-0.8,0.2-1.6,0.5-2.4c0.4-0.8,0.9-1.5,1.5-2.1c0.7-0.6,1.5-1.1,2.4-1.5c1-0.4,2.1-0.6,3.3-0.6
+ c1.2,0,2.3,0.2,3.3,0.6c1,0.4,1.8,0.9,2.4,1.5c0.7,0.6,1.2,1.3,1.5,2.1c0.3,0.8,0.5,1.6,0.5,2.4v1.1c0,0.8-0.2,1.6-0.5,2.4
+ c-0.4,0.8-0.9,1.5-1.5,2.1c-0.7,0.6-1.5,1.1-2.4,1.5C146,16,144.9,16.2,143.7,16.2z M143.7,5.4c-0.6,0-1.2,0.1-1.6,0.3
+ c-0.5,0.2-0.9,0.4-1.2,0.7s-0.6,0.6-0.7,1c-0.2,0.4-0.2,0.8-0.2,1.2v0.9c0,0.4,0.1,0.8,0.2,1.2c0.2,0.4,0.4,0.7,0.7,1
+ s0.7,0.5,1.2,0.7c0.5,0.2,1,0.3,1.6,0.3c0.6,0,1.2-0.1,1.6-0.3c0.5-0.2,0.9-0.4,1.2-0.7c0.3-0.3,0.6-0.6,0.7-1s0.2-0.8,0.2-1.2
+ V8.6c0-0.4-0.1-0.8-0.2-1.2c-0.2-0.4-0.4-0.7-0.7-1c-0.3-0.3-0.7-0.5-1.2-0.7C144.9,5.5,144.3,5.4,143.7,5.4z M159.5,18v8.7h-15.1
+ V29h16v3.3h-20v-8.7h15.1v-2.3h-15.3V18H159.5z M159.5,7.1h4v3.6h-4v5.9h-4.1V1.5h4.1V7.1z"/>
+ <path class="st2" d="M169.7,21.3h3.2c1.5,0,3.1,0,4.7-0.1c1.6-0.1,3.2-0.2,4.7-0.4l0.5,3.5c-1.6,0.2-3.3,0.4-5.1,0.5
+ c-1.8,0.1-3.8,0.1-5.8,0.1h-6.3V12.3h9.9v-5h-9.9V3.8h14v11.9h-9.9V21.3z M189.2,32h-4.2V1.5h4.2V32z"/>
+ <path class="st2" d="M201.4,24.7V14h4.1v10.7h14.2v3.5h-28v-3.5H201.4z M210.7,21c0.4-2,0.7-3.9,0.8-5.8c0.2-1.8,0.2-3.7,0.2-5.7
+ V7.6h-16.6V4.1h20.8v4.4c0,2.6-0.1,4.9-0.3,7s-0.4,4.1-0.8,6L210.7,21z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/sns3.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/sns3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/sns3.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="75.39px" height="76.928px" viewBox="0 0 75.39 76.928" enable-background="new 0 0 75.39 76.928" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M74.691,31.471H38.465V46.35h20.701
+ c-0.893,4.809-3.603,8.882-7.676,11.609l0,0l0,0c-3.445,2.308-7.852,3.672-13.025,3.672c-10.019,0-18.498-6.767-21.523-15.858l0,0
+ l0,0c-0.77-2.308-1.206-4.772-1.206-7.308s0.437-5,1.206-7.308v0c3.025-9.092,11.505-15.858,21.523-15.858
+ c5.646,0,10.717,1.941,14.703,5.752l11.033-11.033C57.539,3.812,48.832,0,38.465,0C23.428,0,10.42,8.62,4.092,21.191l0,0l0,0
+ C1.486,26.383,0,32.258,0,38.465c0,6.206,1.486,12.081,4.092,17.274l0,0c6.328,12.57,19.336,21.189,34.373,21.189
+ c10.385,0,19.092-3.443,25.456-9.318c7.273-6.695,11.47-16.557,11.47-28.271C75.391,36.611,75.145,33.989,74.691,31.471z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/map_position.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/map_position.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/map_position.svg (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="64px" height="64px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
+<circle cx="50" cy="50" r="0" fill="none" stroke="#ce0f30" stroke-width="25">
+ <animate attributeName="r" repeatCount="indefinite" dur="1.2195121951219512s" values="0;40" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline" begin="0s"></animate>
+ <animate attributeName="opacity" repeatCount="indefinite" dur="1.2195121951219512s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline" begin="0s"></animate>
+</circle><circle cx="50" cy="50" r="0" fill="none" stroke="#e795a6" stroke-width="25">
+ <animate attributeName="r" repeatCount="indefinite" dur="1.2195121951219512s" values="0;40" keyTimes="0;1" keySplines="0 0.2 0.8 1" calcMode="spline" begin="-0.6097560975609756s"></animate>
+ <animate attributeName="opacity" repeatCount="indefinite" dur="1.2195121951219512s" values="1;0" keyTimes="0;1" keySplines="0.2 0 0.8 1" calcMode="spline" begin="-0.6097560975609756s"></animate>
+</circle>
+<!-- [ldio] generated by https://loading.io/ --></svg>
\ No newline at end of file
Index: base3.10/src/main/webapp/images/custom/icon_cardlist.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_cardlist.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_cardlist.svg (revision 7)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 35 33.6" style="enable-background:new 0 0 35 33.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#323232;}
+</style>
+<g>
+ <path class="st0" d="M7.8,8.9H1.1C0.5,8.9,0,8.4,0,7.8V1.1C0,0.5,0.5,0,1.1,0h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7
+ C8.9,8.4,8.4,8.9,7.8,8.9z"/>
+ <path class="st0" d="M20.9,8.9h-6.7c-0.6,0-1.1-0.5-1.1-1.1V1.1C13,0.5,13.5,0,14.1,0h6.7C21.5,0,22,0.5,22,1.1v6.7
+ C22,8.4,21.5,8.9,20.9,8.9z"/>
+ <path class="st0" d="M33.9,8.9h-6.7c-0.6,0-1.1-0.5-1.1-1.1V1.1c0-0.6,0.5-1.1,1.1-1.1h6.7C34.5,0,35,0.5,35,1.1v6.7
+ C35,8.4,34.5,8.9,33.9,8.9z"/>
+ <path class="st0" d="M7.8,21.2H1.1c-0.6,0-1.1-0.5-1.1-1.1v-6.7c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7
+ C8.9,20.8,8.4,21.2,7.8,21.2z"/>
+ <path class="st0" d="M20.9,21.2h-6.7c-0.6,0-1.1-0.5-1.1-1.1v-6.7c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7
+ C22,20.8,21.5,21.2,20.9,21.2z"/>
+ <path class="st0" d="M33.9,21.2h-6.7c-0.6,0-1.1-0.5-1.1-1.1v-6.7c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7
+ C35,20.8,34.5,21.2,33.9,21.2z"/>
+ <path class="st0" d="M7.8,33.6H1.1c-0.6,0-1.1-0.5-1.1-1.1v-6.7c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7
+ C8.9,33.1,8.4,33.6,7.8,33.6z"/>
+ <path class="st0" d="M20.9,33.6h-6.7c-0.6,0-1.1-0.5-1.1-1.1v-6.7c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7
+ C22,33.1,21.5,33.6,20.9,33.6z"/>
+ <path class="st0" d="M33.9,33.6h-6.7c-0.6,0-1.1-0.5-1.1-1.1v-6.7c0-0.6,0.5-1.1,1.1-1.1h6.7c0.6,0,1.1,0.5,1.1,1.1v6.7
+ C35,33.1,34.5,33.6,33.9,33.6z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_say_blue.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_say_blue.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_say_blue.svg (revision 7)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 24.1 22.4" style="enable-background:new 0 0 24.1 22.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:none;stroke:#124A92;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st2{fill:#FFFFFF;stroke:#124A92;stroke-width:0;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M12.1,1C6.9,1,2.6,4,1.4,8.2C1.3,8.4,1.2,8.7,1.2,8.9C1.1,9.5,1,10.1,1,10.6c0,2.8,1.4,5.4,3.7,7.2
+ c-0.8,1.8-2.2,3.2-3.6,3.6c2.6,0.2,5-0.5,6.5-1.9c1.4,0.5,2.9,0.8,4.5,0.8c6.1,0,11.1-4.3,11.1-9.6C23.1,5.3,18.2,1,12.1,1z"/>
+ <path class="st1" d="M12.1,1C6.9,1,2.6,4,1.4,8.2C1.3,8.4,1.2,8.7,1.2,8.9C1.1,9.5,1,10.1,1,10.6c0,2.8,1.4,5.4,3.7,7.2
+ c-0.8,1.8-2.2,3.2-3.6,3.6c2.6,0.2,5-0.5,6.5-1.9c1.4,0.5,2.9,0.8,4.5,0.8c6.1,0,11.1-4.3,11.1-9.6C23.1,5.3,18.2,1,12.1,1z"/>
+ <line class="st2" x1="7.2" y1="11.2" x2="8" y2="11.2"/>
+ <line class="st1" x1="7.2" y1="11.2" x2="8" y2="11.2"/>
+ <line class="st2" x1="11.4" y1="11.2" x2="12.3" y2="11.2"/>
+ <line class="st1" x1="11.4" y1="11.2" x2="12.3" y2="11.2"/>
+ <line class="st2" x1="15.6" y1="11.2" x2="16.5" y2="11.2"/>
+ <line class="st1" x1="15.6" y1="11.2" x2="16.5" y2="11.2"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/loading.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/loading.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/loading.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="237px" height="237px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
+<circle cx="50" cy="50" r="32" stroke-width="8" stroke="#e84a5f" stroke-dasharray="50.26548245743669 50.26548245743669" fill="none" stroke-linecap="round">
+ <animateTransform attributeName="transform" type="rotate" dur="1s" repeatCount="indefinite" keyTimes="0;1" values="0 50 50;360 50 50"></animateTransform>
+</circle>
+<circle cx="50" cy="50" r="23" stroke-width="8" stroke="#a08dff" stroke-dasharray="36.12831551628262 36.12831551628262" stroke-dashoffset="36.12831551628262" fill="none" stroke-linecap="round">
+ <animateTransform attributeName="transform" type="rotate" dur="1s" repeatCount="indefinite" keyTimes="0;1" values="0 50 50;-360 50 50"></animateTransform>
+</circle>
+<!-- [ldio] generated by https://loading.io/ --></svg>
\ No newline at end of file
Index: base3.10/src/main/webapp/images/custom/file.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file.svg (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="122.775px" height="141px" viewBox="236.254 350.445 122.775 141"
+ enable-background="new 236.254 350.445 122.775 141" xml:space="preserve">
+<g>
+ <path fill="#333333" d="M348.056,419.52c-0.935-0.915-2.523-0.877-3.425,0.042l-48.805,49.926
+ c-5.063,5.179-11.786,8.033-18.925,8.033c-7.186,0-13.937-2.888-19.017-8.124c-10.462-10.797-10.309-28.452,0.348-39.349
+ l59.502-60.867c6.081-6.205,16.58-6.193,22.645,0c6.362,6.515,6.362,17.105,0,23.612l-51.866,52.999
+ c-2.039,2.077-5.51,2.044-7.504-0.065c-2.093-2.227-2.002-5.866,0.207-8.125l40.771-41.648c0.935-0.956,0.918-2.49-0.033-3.429
+ l-6.486-6.341c-0.918-0.91-2.523-0.894-3.425,0.033l-40.771,41.648c-7.368,7.537-7.542,19.823-0.389,27.402
+ c3.678,3.896,8.617,6.039,13.92,6.039c5.162,0,10.011-2.052,13.655-5.774l51.866-53.008c11.607-11.873,11.607-31.195,0-43.067
+ c-5.676-5.808-13.229-9.01-21.271-9.01s-15.596,3.202-21.271,9.01l-59.502,60.863c-15.881,16.24-16.055,42.6-0.385,58.766
+ c7.728,7.968,18.032,12.361,29.023,12.361c10.9,0,21.151-4.344,28.861-12.236l48.805-49.922c0.455-0.464,0.695-1.067,0.688-1.713
+ c0-0.653-0.266-1.258-0.729-1.704L348.056,419.52z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_arrow_minus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_minus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_minus.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <polygon points="6.823,12.227 1.522,8.701 6.823,5.174 "/>
+ <path d="M14.145,7.951c0.256,0,0.462,0.335,0.462,0.751c0,0.417-0.206,0.753-0.462,0.753h-9.22c-0.252,0-0.459-0.336-0.459-0.753
+ c0-0.415,0.207-0.751,0.459-0.751H14.145z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_line.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/icon_tree_line.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/smile4.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/smile4.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/smile4.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.3" cy="12.7" r="2.4"/>
+ <path class="st3" d="M22,20c0,2.2-2.6,4-5.7,4s-5.7-1.8-5.7-4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/file_excel.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_excel.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_excel.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="446.461px" height="595.396px" viewBox="0 0 446.461 595.396" enable-background="new 0 0 446.461 595.396"
+ xml:space="preserve">
+<path fill="#333333" d="M430.067,113.824L332.52,16.277C322.056,5.813,307.872-0.116,293.106-0.116H55.807
+ C24.997,0,0,24.997,0,55.808v483.665c0,30.812,24.997,55.81,55.808,55.81h334.846c30.812,0,55.809-24.998,55.809-55.81V153.354
+ C446.461,138.589,440.531,124.288,430.067,113.824z M386.118,148.82H297.64V60.342L386.118,148.82z M55.807,539.472V55.808h186.025
+ v120.916c0,15.463,12.439,27.904,27.902,27.904h120.917v334.845L55.807,539.472L55.807,539.472z"/>
+<polygon fill="#333333" points="244.78,360.992 305.906,270.969 262.334,270.969 222.994,328.907 183.653,270.969 140.082,270.969
+ 201.208,360.992 140.453,450.469 184.024,450.469 222.993,393.076 261.963,450.469 305.534,450.469 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/banner3.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/banner3.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tree_radio_false_disable.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_radio_false_disable.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_radio_false_disable.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.038px" height="24.039px" viewBox="0 0 24.038 24.039" enable-background="new 0 0 24.038 24.039" xml:space="preserve">
+<circle fill="#EAEAEA" cx="12.018" cy="12.02" r="11.329"/>
+<circle fill="#C9C9C9" cx="12.02" cy="12.02" r="11.33"/>
+<path fill="#838383" d="M12.02,24.039C5.393,24.039,0,18.648,0,12.02C0,5.393,5.393,0,12.02,0c6.626,0,12.019,5.392,12.019,12.02
+ C24.039,18.648,18.646,24.039,12.02,24.039z M12.02,1.379c-5.867,0-10.641,4.773-10.641,10.641S6.153,22.66,12.02,22.66
+ c5.867,0,10.64-4.772,10.64-10.64S17.887,1.379,12.02,1.379z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/box_in1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/box_in1.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_love_active.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_love_active.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_love_active.svg (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 45.8 46.5" style="enable-background:new 0 0 45.8 46.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#D11818;stroke:#D11818;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<path class="st0" d="M33.7,2c-5.9-0.2-10.8,4.6-10.8,10.4C22.9,6.6,18,1.8,12.1,2C6.4,2.2,2,7.2,2,12.9c0,5.9,2.2,11.5,6.2,15.8
+ l14.7,15.8l14.7-15.8c4-4.3,6.2-9.9,6.2-15.8C43.8,7.2,39.4,2.2,33.7,2z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_modify.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_modify.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_modify.svg (revision 7)
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="37.18px" height="37.179px" viewBox="0 0 37.18 37.179" enable-background="new 0 0 37.18 37.179" xml:space="preserve">
+<g>
+ <path fill="#A1C6D1" d="M36.448,20.655v-4.131l-3.987-0.892c-0.365-1.723-1.047-3.325-1.976-4.754l2.193-3.456l-2.922-2.922
+ l-3.455,2.193c-1.429-0.928-3.032-1.61-4.756-1.976l-0.891-3.987h-4.131l-0.891,3.987c-1.723,0.365-3.325,1.048-4.755,1.976
+ L7.423,4.501l-2.92,2.922l2.193,3.456c-0.93,1.429-1.611,3.031-1.977,4.754l-3.988,0.892v4.131l3.988,0.891
+ c0.365,1.722,1.047,3.326,1.977,4.755l-2.193,3.455l2.92,2.923l3.456-2.195c1.43,0.93,3.032,1.611,4.755,1.977l0.891,3.987h4.131
+ l0.891-3.987c1.724-0.365,3.327-1.047,4.756-1.977l3.455,2.195l2.922-2.923l-2.193-3.455c0.929-1.429,1.61-3.033,1.976-4.755
+ L36.448,20.655z M18.591,22.557c-2.192,0-3.968-1.775-3.968-3.968c0-2.191,1.775-3.968,3.968-3.968
+ c2.191,0,3.968,1.776,3.968,3.968C22.559,20.781,20.782,22.557,18.591,22.557"/>
+
+ <path fill="none" stroke="#343340" stroke-width="1.4628" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M36.448,20.655v-4.131l-3.987-0.892c-0.365-1.723-1.047-3.325-1.976-4.754l2.193-3.456l-2.922-2.922l-3.455,2.193
+ c-1.429-0.928-3.032-1.61-4.756-1.976l-0.891-3.987h-4.131l-0.891,3.987c-1.723,0.365-3.325,1.048-4.755,1.976L7.423,4.501
+ l-2.92,2.922l2.193,3.456c-0.93,1.429-1.611,3.031-1.977,4.754l-3.988,0.892v4.131l3.988,0.891
+ c0.365,1.722,1.047,3.326,1.977,4.755l-2.193,3.455l2.92,2.923l3.456-2.195c1.43,0.93,3.032,1.611,4.755,1.977l0.891,3.987h4.131
+ l0.891-3.987c1.724-0.365,3.327-1.047,4.756-1.977l3.455,2.195l2.922-2.923l-2.193-3.455c0.929-1.429,1.61-3.033,1.976-4.755
+ L36.448,20.655z M18.591,22.557c-2.192,0-3.968-1.775-3.968-3.968c0-2.191,1.775-3.968,3.968-3.968
+ c2.191,0,3.968,1.776,3.968,3.968C22.559,20.781,20.782,22.557,18.591,22.557z"/>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_5_" x="13.029" y="13.028" width="7.442" height="7.442"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_5_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_2_)" fill="#7EAFB7" d="M18.591,14.621c0.684,0,1.318,0.189,1.881,0.494
+ c-0.673-1.236-1.967-2.086-3.475-2.086c-2.191,0-3.968,1.776-3.968,3.967c0,1.508,0.851,2.803,2.087,3.474
+ c-0.305-0.562-0.493-1.195-0.493-1.88C14.623,16.398,16.398,14.621,18.591,14.621"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_7_" x="5.831" y="28.892" width="8.487" height="3.786"/>
+ </defs>
+ <clipPath id="SVGID_4_">
+ <use xlink:href="#SVGID_7_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_4_)" fill="#7EAFB7" d="M9.286,28.892l-3.455,2.193l1.592,1.594l3.456-2.195
+ c1.059,0.688,2.212,1.238,3.44,1.627l-0.279-1.243C12.318,30.502,10.715,29.82,9.286,28.892"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_9_" x="0.731" y="19.418" width="2.744" height="1.851"/>
+ </defs>
+ <clipPath id="SVGID_6_">
+ <use xlink:href="#SVGID_9_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_6_)" fill="#7EAFB7" d="M0.731,19.418v1.236l2.744,0.614c-0.137-0.431-0.254-0.868-0.349-1.316
+ L0.731,19.418z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_11_" x="19.419" y="0.731" width="1.851" height="2.744"/>
+ </defs>
+ <clipPath id="SVGID_8_">
+ <use xlink:href="#SVGID_11_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_8_)" fill="#7EAFB7" d="M21.27,3.476l-0.614-2.744h-1.236l0.535,2.394
+ C20.401,3.221,20.84,3.34,21.27,3.476"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_13_" x="16.169" y="16.167" width="20.279" height="20.281"/>
+ </defs>
+ <clipPath id="SVGID_10_">
+ <use xlink:href="#SVGID_13_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_10_)" fill="#7EAFB7" d="M36.448,20.655v-4.131l-1.592-0.356v2.895l-3.988,0.891
+ c-0.365,1.723-1.048,3.325-1.977,4.755l2.195,3.455l-2.922,2.922l-3.457-2.193c-1.429,0.929-3.032,1.611-4.754,1.976
+ l-0.891,3.987h-2.895l0.355,1.593h4.131l0.893-3.987c1.722-0.365,3.325-1.046,4.754-1.976l3.455,2.192l2.922-2.92l-2.193-3.456
+ c0.929-1.43,1.61-3.032,1.976-4.755L36.448,20.655z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_15_" x="28.892" y="5.83" width="3.787" height="8.488"/>
+ </defs>
+ <clipPath id="SVGID_12_">
+ <use xlink:href="#SVGID_15_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_12_)" fill="#7EAFB7" d="M30.868,14.04l1.244,0.278c-0.389-1.228-0.939-2.381-1.627-3.44l2.193-3.455
+ L31.085,5.83l-2.193,3.455C29.82,10.715,30.503,12.316,30.868,14.04"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/main_news1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/main_news1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_copylink.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_copylink.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_copylink.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 15.4 15.4" style="enable-background:new 0 0 15.4 15.4;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M7.8,3.1l1.4-1.4c1.3-1.3,3.3-1.3,4.6,0l0,0C15,2.9,15,5,13.7,6.2l-2.5,2.5C10,10,7.9,10,6.7,8.8l0,0"/>
+ <path class="st0" d="M7.6,12.3l-1.4,1.4C5,15,2.9,15,1.7,13.7l0,0c-1.3-1.3-1.3-3.3,0-4.6l2.5-2.5c1.3-1.3,3.3-1.3,4.6,0l0,0"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_open.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_open.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_open.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="50.12px" height="36.29px" viewBox="0 0 50.12 36.29" enable-background="new 0 0 50.12 36.29" xml:space="preserve">
+<g>
+ <polygon fill="#F8E38F" points="42.838,6.43 42.838,35.39 0.9,35.39 0.9,0.9 15.369,0.9 18.759,6.43 "/>
+ <g>
+ <polygon fill="#F8D290" points="45.168,12.109 42.838,20.629 39.649,32.27 0.899,32.27 0.899,20.629 4.088,8.989 42.838,8.989
+ 42.838,12.109 "/>
+ </g>
+
+ <polygon fill="none" stroke="#343340" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 42.838,6.43 42.838,35.39 0.9,35.39 0.9,0.9 15.369,0.9 18.759,6.43 "/>
+ <polygon fill="#F8E38F" points="49.219,12.109 42.838,35.39 0.9,35.39 1.749,32.27 7.27,12.109 "/>
+
+ <polygon fill="none" stroke="#343340" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 49.219,12.109 42.838,35.39 0.9,35.39 1.749,32.27 7.27,12.109 "/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/smile5.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/smile5.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/smile5.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <path class="st1" d="M25.3,18.9c0,2.2-0.9,4.2-2.3,5.6l-0.1,0.1c-1.5,1.5-3.5,2.4-5.7,2.4h-1.7c-2.3,0-4.4-1-5.9-2.5
+ C8.2,23,7.3,21,7.3,18.9H25.3z"/>
+ <path class="st2" d="M23,24.5l-0.1,0.1c-1.5,1.5-3.5,2.4-5.7,2.4h-1.7c-2.3,0-4.4-1-5.9-2.5c0,0,0.1-0.1,0.1-0.1
+ c1.5-1.5,3.5-2.4,5.7-2.4h1.7C19.5,22,21.5,22.9,23,24.5z"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.3" cy="12.7" r="2.4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_balloon.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/bg_balloon.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/bg_balloon.svg (revision 7)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 123.7 168.9" style="enable-background:new 0 0 123.7 168.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#D7D7D7;}
+ .st1{fill:#4FE179;}
+ .st2{fill:#FFFFFF;}
+ .st3{fill:#4953D3;}
+ .st4{fill:#3BBCFD;}
+</style>
+<g>
+ <g>
+ <g>
+
+ <rect x="46.1" y="118.9" transform="matrix(6.703938e-03 -1 1 6.703938e-03 -59.7436 181.4303)" class="st0" width="30.8" height="3.8"/>
+ <g>
+
+ <rect x="68" y="124.7" transform="matrix(0.2131 -0.977 0.977 0.2131 -58.0644 181.0889)" class="st0" width="30.9" height="3.8"/>
+ <rect x="37.6" y="110.9" transform="matrix(0.9798 -0.2 0.2 0.9798 -24.4621 10.4406)" class="st0" width="3.8" height="30.9"/>
+ </g>
+ </g>
+ <g>
+ <path class="st1" d="M0,61.4c-0.2,34.2,27.3,62,61.4,62.3c34.2,0.2,62-27.3,62.3-61.4c0.2-34.2-27.3-62-61.4-62.3
+ C28.1-0.2,0.2,27.3,0,61.4z"/>
+ <path class="st2" d="M19.8,61.6c-0.2,34.1,18.4,61.9,41.6,62.1c23.2,0.2,42.2-27.4,42.5-61.5C104.1,28,85.5,0.2,62.3,0.1
+ C39-0.1,20,27.5,19.8,61.6z"/>
+ <path class="st1" d="M46.4,61.8c-0.2,34.1,6.5,61.9,15.1,61.9C70,123.7,77.1,96.1,77.3,62c0.2-34.1-6.5-61.9-15.1-61.9
+ C53.7,0,46.6,27.6,46.4,61.8z"/>
+ </g>
+ <g>
+
+ <rect x="55.7" y="112.6" transform="matrix(6.679417e-03 -1 1 6.679417e-03 -80.9245 202.1947)" class="st3" width="11.3" height="58.5"/>
+ <polygon class="st3" points="38.4,168.6 83.8,168.9 86.8,147.6 35.7,147.3 "/>
+ <polygon class="st4" points="36.4,152.5 35.7,147.3 86.8,147.6 86.1,152.8 "/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_recomm.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_recomm.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_recomm.svg (revision 7)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 27.5 25.9" style="enable-background:new 0 0 27.5 25.9;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#000000;stroke-width:1.5;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M18.3,21.7c-0.9,2.1-3,3.5-5.5,3.5H3.9c-1.5,0-2.7-1.2-2.7-2.6c0-0.6,0.2-1.2,0.6-1.6
+ c-0.5-0.5-0.9-1.1-0.9-1.9c0-0.7,0.3-1.2,0.7-1.7c-0.5-0.5-0.8-1.1-0.8-1.8c0-0.7,0.3-1.4,0.8-1.8c-0.4-0.5-0.7-1-0.7-1.7
+ c0-1.4,1.2-2.6,2.7-2.6h4.7C8.2,8.9,8.1,8.5,8,8C8,7.7,7.9,7.4,7.8,7c-0.3-1.4-0.3-5.5,2.6-6.2c0.7-0.2,1.4-0.1,1.9,0.3
+ c0.9,0.7,1,1.9,1.1,3.1c0,0.4,0.1,0.9,0.2,1.2c0.6,2.2,1.2,3.5,3.1,5.4c0.2,0.2,0.4,0.3,0.5,0.5l0,0c0.2,0.2,0.4,0.4,0.5,0.6
+ c0.2,0.3,0.4,0.6,0.5,0.9"/>
+ <path class="st0" d="M25.8,25.1h-6.5c-0.5,0-1-0.4-1-1V9.9c0-0.5,0.4-1,1-1h6.5c0.5,0,1,0.4,1,1v14.3
+ C26.7,24.7,26.3,25.1,25.8,25.1z"/>
+</g>
+<line class="st0" x1="1.6" y1="13.6" x2="5.5" y2="13.6"/>
+<line class="st0" x1="1.6" y1="17.3" x2="5.5" y2="17.3"/>
+<line class="st0" x1="1.8" y1="21" x2="5.5" y2="21"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_left.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_left.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_left.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.8 66.6" style="enable-background:new 0 0 37.8 66.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#3C3C3C;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="33.3,62.1 4.5,33.3 33.3,4.5 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/banner4.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/banner4.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_noting.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_noting.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_noting.svg (revision 7)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" width="674.005px" height="674.003px" viewBox="-62.005 52.381 674.005 674.003"
+ enable-background="new -62.005 52.381 674.005 674.003" xml:space="preserve">
+<g>
+ <path fill="#A5A5A5" d="M274.997,726.385c-45.487,0-89.624-8.912-131.182-26.49c-40.132-16.975-76.17-41.271-107.115-72.215
+ s-55.241-66.982-72.215-107.115c-17.578-41.558-26.49-85.693-26.49-131.181c0-45.488,8.913-89.624,26.49-131.182
+ c16.974-40.132,41.271-76.17,72.215-107.115s66.983-55.241,107.115-72.215c41.558-17.578,85.694-26.49,131.182-26.49
+ s89.624,8.913,131.182,26.49c40.132,16.974,76.171,41.271,107.115,72.215s55.241,66.983,72.216,107.115
+ C603.087,299.76,612,343.896,612,389.384c0,45.487-8.913,89.623-26.49,131.181c-16.975,40.133-41.271,76.172-72.217,107.115
+ c-30.943,30.943-66.982,55.24-107.114,72.215C364.621,717.473,320.485,726.385,274.997,726.385z M274.997,86.381
+ c-167.076,0-303.002,135.926-303.002,303.002c0,167.075,135.926,303.001,303.002,303.001C442.073,692.385,578,556.459,578,389.384
+ C578,222.308,442.073,86.381,274.997,86.381z"/>
+ <g>
+ <circle fill="#A5A5A5" cx="274.997" cy="555.982" r="34.499"/>
+ <path fill="#A5A5A5" d="M309.496,222.783c0-19.053-15.446-34.499-34.499-34.499l0,0c-19.053,0-34.499,15.446-34.499,34.499
+ v227.986c0,19.053,15.446,34.498,34.499,34.498l0,0c19.053,0,34.499-15.445,34.499-34.498V222.783z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/favicon.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/favicon.ico
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_sharing_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_sharing_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_sharing_fff.svg (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 30 30.3" style="enable-background:new 0 0 30 30.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:none;stroke:#FFFFFF;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <line class="st0" x1="10.5" y1="17.5" x2="19.5" y2="22.1"/>
+ <path class="st1" d="M10.5,14.4c0.4,2.9-1.9,5.3-4.6,5.3c-2.6,0-4.6-2.1-4.6-4.6c0-3.1,3.2-5.6,6.4-4.2
+ C9.2,11.5,10.2,12.9,10.5,14.4z"/>
+ <path class="st1" d="M28.7,5.9c0,2.6-2.1,4.6-4.6,4.6c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6C26.6,1.2,28.7,3.3,28.7,5.9z"/>
+ <path class="st1" d="M28.7,23.7c0.4,2.9-1.9,5.3-4.6,5.3c-2.6,0-4.6-2.1-4.6-4.6c0-3.1,3.2-5.6,6.4-4.2
+ C27.4,20.8,28.4,22.2,28.7,23.7z"/>
+ <line class="st0" x1="10.7" y1="12.7" x2="19.5" y2="8.2"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_checkbox.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_checkbox.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_checkbox.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="0 0 24.166 24.165" enable-background="new 0 0 24.166 24.165" xml:space="preserve">
+<path fill="#FFFFFF" d="M2.099,23.588c-0.84,0-1.523-0.685-1.523-1.521V2.099c0-0.839,0.684-1.522,1.523-1.522h19.966
+ c0.84,0,1.522,0.683,1.522,1.522v19.968c0,0.84-0.685,1.521-1.522,1.521H2.099z"/>
+<path d="M22.065,0H2.099c-1.158,0-2.1,0.942-2.1,2.099v19.968c0,1.156,0.942,2.098,2.1,2.098h19.966
+ c1.159,0,2.102-0.941,2.102-2.098V2.099C24.165,0.941,23.222,0,22.065,0z M22.065,23.01H2.099c-0.522,0-0.947-0.424-0.947-0.945
+ V2.099c0-0.522,0.425-0.946,0.947-0.946l19.966-0.002c0.522,0,0.947,0.424,0.947,0.946v19.968
+ C23.013,22.586,22.588,23.01,22.065,23.01z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_gd1.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_gd1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_gd1.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 18 25.1" style="enable-background:new 0 0 18 25.1;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#666666;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:#666666;stroke:#666666;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M17,9.1c0,4.4-8.1,15-8.1,15S1,13.7,1,9.1C1,4.7,4.5,1,9.1,1C13.5,1.2,17,4.7,17,9.1"/>
+ <path class="st0" d="M17,9.1c0,4.4-8.1,15-8.1,15S1,13.7,1,9.1C1,4.7,4.5,1,9.1,1C13.5,1.2,17,4.7,17,9.1z"/>
+ <path class="st0" d="M12,9.1c0,1.7-1.5,3.1-3.1,3.1s-3.1-1.5-3.1-3.1S7.2,6,8.9,6C10.8,6.2,12,7.4,12,9.1"/>
+ <path class="st0" d="M12,9.1c0,1.7-1.5,3.1-3.1,3.1s-3.1-1.5-3.1-3.1S7.2,6,8.9,6C10.8,6.2,12,7.4,12,9.1z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_map_off.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_map_off.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_map_off.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 21.5 28" style="enable-background:new 0 0 21.5 28;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#7F7F7F;}
+</style>
+<path class="st0" d="M10.7,0.7c-5.5,0-10,4.5-10,10c0,4.4,6.5,12.8,9,15.8c0.5,0.6,1.5,0.6,2,0c2.6-2.9,9-11.4,9-15.8
+ C20.7,5.2,16.3,0.8,10.7,0.7z M10.7,14.5c-2.1,0-3.8-1.7-3.8-3.8C7,8.7,8.7,7,10.7,7c2.1,0,3.8,1.7,3.8,3.7
+ C14.5,12.8,12.8,14.5,10.7,14.5z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_blank_w.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_blank_w.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_blank_w.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.3 37.3" style="enable-background:new 0 0 37.3 37.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="17.3,10 27.3,10 27.3,20 "/>
+ <line class="st0" x1="27.3" y1="10" x2="9.7" y2="27.6"/>
+</g>
+<path class="st0" d="M35.8,17.1v11c0,4.2-3.4,7.7-7.7,7.7h-19c-4.2,0-7.7-3.4-7.7-7.7v-19c0-4.2,3.4-7.7,7.7-7.7h11"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_2_1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_2_1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/techbanner3.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/techbanner3.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/bg_joboffer.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_joboffer.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tree_radio_true_disable.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_radio_true_disable.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_radio_true_disable.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.038px" height="24.039px" viewBox="0 0 24.038 24.039" enable-background="new 0 0 24.038 24.039" xml:space="preserve">
+<circle fill="#EAEAEA" cx="12.018" cy="12.02" r="11.329"/>
+<circle fill="#C9C9C9" cx="12.02" cy="12.02" r="11.33"/>
+<path fill="#838383" d="M12.02,24.039C5.393,24.039,0,18.648,0,12.02C0,5.393,5.393,0,12.02,0c6.626,0,12.019,5.392,12.019,12.02
+ C24.039,18.648,18.646,24.039,12.02,24.039z M12.02,1.379c-5.867,0-10.641,4.773-10.641,10.641S6.153,22.66,12.02,22.66
+ c5.867,0,10.64-4.772,10.64-10.64S17.887,1.379,12.02,1.379z"/>
+<circle fill="#A3A2A2" cx="12.019" cy="12.021" r="6.078"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/arrow_top_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/arrow_top_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/arrow_top_fff.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 27.5 14.6" style="enable-background:new 0 0 27.5 14.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <line class="st0" x1="1.5" y1="13.1" x2="13.8" y2="1.5"/>
+ <line class="st0" x1="26" y1="13.1" x2="13.8" y2="1.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_gd2.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_gd2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_gd2.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 27 27" style="enable-background:new 0 0 27 27;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#666666;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:#666666;stroke:#666666;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M8.7,10.1l2.7-2.7L4.9,1L3.7,2.2l-1,1C0.8,5.1,0.5,8,1.9,10.3c1.8,2.8,4,5.6,6.6,8.2s5.4,4.8,8.2,6.6
+ c2.3,1.4,5.2,1.1,7.1-0.8l1-1l1.2-1.2l-6.5-6.5l-2.7,2.7c-1.5-1.2-2.9-2.5-4.3-3.9C11.2,13,9.9,11.6,8.7,10.1z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_3_1.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_3_1.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/ts.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/ts.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/ts.svg (revision 7)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 58.6 25.5" style="enable-background:new 0 0 58.6 25.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+</style>
+<g id="XMLID_5164_">
+
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="30.387" y1="817.4723" x2="57.4052" y2="837.934" gradientTransform="matrix(1 0 0 1 0 -815.8906)">
+ <stop offset="0" style="stop-color:#2EA3D1"/>
+ <stop offset="0.1885" style="stop-color:#2E9FCE"/>
+ <stop offset="0.4351" style="stop-color:#2896C7"/>
+ <stop offset="0.7139" style="stop-color:#2287BB"/>
+ <stop offset="1" style="stop-color:#1D73AC"/>
+ </linearGradient>
+ <path id="XMLID_5166_" class="st0" d="M49.4,18.4c2,0.8,1.5,3.3-0.9,3.3H33c-0.4,0-0.8,0.4-0.8,0.9v2c0,0.5,0.4,0.9,0.8,0.9h18.1
+ c4.2,0,7.5-2.1,7.5-6.3c0-2.8-1.2-5.1-4.3-6.5C52.5,12,41,7.2,41,7.2c-2.1-0.8-1.6-3.3,0.9-3.3h15.5c0.4,0,0.8-0.4,0.8-0.9V1
+ c0-0.5-0.4-0.9-0.8-0.9H39.3c-4.2,0-7.5,2-7.5,6.3c0,2.8,1.2,5.1,4.3,6.5C37.9,13.6,49.4,18.4,49.4,18.4z"/>
+
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="4.6822" y1="811.3204" x2="24.6574" y2="831.7823" gradientTransform="matrix(1 0 0 1 0 -815.8906)">
+ <stop offset="5.618000e-03" style="stop-color:#ECBE2A"/>
+ <stop offset="1" style="stop-color:#E17B2B"/>
+ </linearGradient>
+ <path id="XMLID_5165_" class="st1" d="M30.8,0h-30C0.4,0,0,0.4,0,0.9v2c0,0.5,0.4,0.9,0.8,0.9h10.8v20.8c0,0.5,0.4,0.9,0.8,0.9l0,0
+ h6.7l0,0c0.5,0,0.8-0.4,0.8-0.9V3.9h10.8c0.4,0,0.8-0.4,0.8-0.9V1C31.6,0.4,31.2,0,30.8,0z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_cmtintro_2_2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_cmtintro_2_2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_logout_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_logout_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_logout_fff.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 38.9 36.7" style="enable-background:new 0 0 38.9 36.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M24.9,28.4c0,3.7-3,6.8-6.8,6.8H8.3c-3.7,0-6.8-3-6.8-6.8V8.3c0-3.7,3-6.8,6.8-6.8h9.9c3.7,0,6.8,3,6.8,6.8"/>
+ <polyline class="st0" points="30.4,11.4 37.4,18.3 30.4,25.3 "/>
+ <line class="st0" x1="37.4" y1="18.3" x2="14.3" y2="18.3"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/techbanner4.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/techbanner4.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_arrow_allplus.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_arrow_allplus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_arrow_allplus.svg (revision 7)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="16.131px" height="17.402px" viewBox="0 0 16.131 17.402" xml:space="preserve">
+<g>
+ <polygon points="12.575,15.702 3.969,15.702 3.969,14.802 11.675,14.802 11.675,2.601 1.848,2.601 1.848,15.251 0.946,15.251
+ 0.946,1.702 12.575,1.702 "/>
+ <rect x="4.428" y="4.689" width="4.976" height="0.9"/>
+ <rect x="4.428" y="6.94" width="4.976" height="0.9"/>
+ <rect x="4.577" y="9.191" width="4.976" height="0.902"/>
+ <rect x="4.428" y="11.477" width="4.976" height="0.9"/>
+ <g>
+ <g>
+
+ <polygon fill="none" stroke="#FFFFFF" stroke-width="1.4679" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 11.015,6.631 15.892,9.876 11.015,13.12 "/>
+
+ <path fill="none" stroke="#FFFFFF" stroke-width="1.4679" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M4.272,10.564c-0.235,0-0.424-0.307-0.424-0.688c0-0.386,0.191-0.693,0.427-0.693h8.487c0.234,0,0.424,0.31,0.424,0.693
+ c0,0.382-0.189,0.688-0.424,0.688H4.272z"/>
+ </g>
+ <g>
+ <polygon fill="#3CA123" points="11.015,6.631 15.892,9.876 11.015,13.12 "/>
+ <path fill="#3CA123" d="M4.272,10.564c-0.235,0-0.424-0.307-0.424-0.688c0-0.386,0.191-0.693,0.427-0.693h8.487
+ c0.234,0,0.424,0.31,0.424,0.693c0,0.382-0.189,0.688-0.424,0.688H4.272z"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_help.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_help.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_help.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 110.7 110.7" style="enable-background:new 0 0 110.7 110.7;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#343231;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+ .st1{fill:#343231;}
+</style>
+<g>
+ <circle class="st0" cx="55.3" cy="55.3" r="50.3"/>
+ <path class="st1" d="M60,42.1c0-3.4-2.3-5.6-5.8-5.6c-2,0-3.8,0.7-5.4,1.9c-1.5,1-3.4,0.9-4.8-0.3l0,0c-1.7-1.6-1.7-4.4,0.2-5.8
+ c3.1-2.3,6.8-3.8,11.1-3.8c8.2,0,14.3,4.2,14.3,13c0,8.7-9.4,12.2-10.8,19.7c-0.3,1.8-1.9,3-3.7,3h-1.3c-2.4,0-4.2-2.2-3.8-4.6
+ C51.6,51.7,60,47.7,60,42.1z M61.3,77.5c0,3.8-3.1,6.9-6.9,6.9s-6.9-3.1-6.9-6.9c0-3.8,3.1-6.9,6.9-6.9S61.3,73.7,61.3,77.5z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/onepass.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/onepass.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/onepass.svg (revision 7)
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 97.2 14.6" style="enable-background:new 0 0 97.2 14.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#848380;}
+ .st1{fill:none;stroke:#848380;stroke-width:1.025;stroke-linecap:round;stroke-miterlimit:10;}
+ .st2{fill:none;stroke:#848380;stroke-width:0.293;stroke-miterlimit:10;}
+</style>
+<g>
+ <polygon class="st0" points="27,3.9 28.3,3.9 28.3,1.3 30.9,1.3 30.9,0 27,0 "/>
+ <polygon class="st0" points="43.1,0 39.2,0 39.2,1.3 41.8,1.3 41.8,3.9 43.1,5.3 "/>
+ <polygon class="st0" points="28.3,10.7 27,10.7 27,14.6 30.9,14.6 30.9,13.3 28.3,13.3 "/>
+ <path class="st0" d="M39.2,10.3c-0.2-0.3-0.7-0.4-1-0.1c-0.3,0.2-0.4,0.7-0.1,1c0.3,0.4,1.2,1.5,2.3,2.5c0.4,0.3,0.8,0.7,1.2,1h1.5
+ v-0.6c-0.1,0-0.2-0.1-0.2-0.1C41.4,12.9,39.6,10.8,39.2,10.3 M37.8,4.6c-0.4,0-0.8,0.1-1.2,0.2c-0.4,0.1-0.6,0.5-0.5,0.8
+ C36.2,6,36.6,6.2,37,6.1C37.3,6,37.5,6,37.8,6c1,0,2,0.6,3.1,1.4c0.8,0.6,1.5,1.4,2.3,2.1V7.6c-0.4-0.4-0.9-0.8-1.4-1.2
+ C40.6,5.4,39.3,4.6,37.8,4.6 M34.5,9.4c0-0.8,0.2-1.6,0.9-2.5c0.2-0.3,0.2-0.7-0.1-1c-0.3-0.2-0.7-0.2-1,0.1h0
+ c-1,1.1-1.2,2.3-1.2,3.3c0,0.9,0.2,1.8,0.2,2.3c0,0.4-0.1,0.6-0.2,0.8c-0.1,0.2-0.4,0.5-1,0.7c-0.4,0.1-0.5,0.5-0.4,0.9
+ c0.1,0.3,0.4,0.4,0.6,0.4c0.1,0,0.2,0,0.3,0c0.8-0.3,1.3-0.7,1.7-1.2c0.4-0.5,0.4-1.1,0.4-1.6C34.7,10.9,34.5,10.1,34.5,9.4
+ M40.8,8.6c-0.7-0.6-1.1-1.1-1.6-1.3C38.7,7.1,38.3,7,37.9,7c-0.8,0-1.4,0.4-1.8,0.9c-0.4,0.5-0.6,1.2-0.6,1.9c0,0.4,0,0.7,0.1,1.1
+ c0.3,1,1.1,2.3,2.3,3.6h1.9c-0.1-0.1-0.1-0.1-0.2-0.2c-1.4-1.3-2.5-3-2.7-3.8c-0.1-0.3-0.1-0.5-0.1-0.8c0-0.5,0.1-0.9,0.3-1.1
+ c0.2-0.2,0.4-0.3,0.7-0.4c0.2,0,0.4,0,0.7,0.2c0.1,0,0.7,0.5,1.3,1.1c0.6,0.6,1.3,1.3,2.1,2c0.4,0.4,0.8,0.7,1.2,1v-1.8
+ c-0.1-0.1-0.2-0.2-0.3-0.3C42.1,9.9,41.4,9.2,40.8,8.6 M43.1,4.4c-1.5-1.3-3.4-2.1-5.4-2.1c-1.3,0-2.7,0.4-4,1.3
+ c-2.3,1.6-3.1,3.9-3,6.2c0,0.7,0.1,1.4,0.2,2.1c0.1,0.4,0.4,0.6,0.8,0.6c0.4-0.1,0.6-0.4,0.6-0.8c-0.1-0.6-0.1-1.3-0.1-1.9
+ c0-2,0.5-3.7,2.5-5c1-0.7,2.1-1,3.2-1c1.6,0,3.2,0.7,4.5,1.8c0.3,0.3,0.6,0.5,0.9,0.8L43.1,4.4C43.1,4.4,43.1,4.4,43.1,4.4
+ M35.7,12.9c-0.4,0-0.7,0.2-0.8,0.6c0,0.1-0.1,0.5-0.4,1c0,0-0.1,0.1-0.1,0.1H36c0.2-0.5,0.3-0.9,0.3-1
+ C36.3,13.2,36,12.9,35.7,12.9"/>
+ <line class="st1" x1="10.8" y1="4.2" x2="10.8" y2="5.5"/>
+ <line class="st1" x1="5.3" y1="4.2" x2="5.3" y2="5.5"/>
+ <path class="st1" d="M12,8c0,2-1.8,3.5-4,3.5c-2.2,0-4-1.6-4-3.5"/>
+ <polygon class="st0" points="0,3.9 1.3,3.9 1.3,1.3 3.9,1.3 3.9,0 0,0 "/>
+ <polygon class="st0" points="16.1,10.7 14.8,10.7 14.8,13.3 12.2,13.3 12.2,14.6 16.1,14.6 "/>
+ <polygon class="st0" points="0,14.6 3.9,14.6 3.9,13.3 1.3,13.3 1.3,10.7 0,10.7 "/>
+ <polygon class="st0" points="12.2,0 12.2,1.3 14.8,1.3 14.8,3.9 16.1,3.9 16.1,0 "/>
+ <polygon class="st0" points="54,3.9 55.4,3.9 55.4,1.3 58,1.3 58,0 54,0 "/>
+ <polygon class="st0" points="70.1,10.7 68.8,10.7 68.8,13.3 66.2,13.3 66.2,14.6 70.1,14.6 "/>
+ <polygon class="st0" points="54,14.6 58,14.6 58,13.3 55.4,13.3 55.4,10.7 54,10.7 "/>
+ <polygon class="st0" points="66.2,0 66.2,1.3 68.8,1.3 68.8,3.9 70.1,3.9 70.1,0 "/>
+ <polygon class="st0" points="81.1,3.9 82.4,3.9 82.4,1.3 85,1.3 85,0 81.1,0 "/>
+ <polygon class="st0" points="97.2,10.7 95.8,10.7 95.8,13.3 93.2,13.3 93.2,14.6 97.2,14.6 "/>
+ <polygon class="st0" points="81.1,14.6 85,14.6 85,13.3 82.4,13.3 82.4,10.7 81.1,10.7 "/>
+ <polygon class="st0" points="93.2,0 93.2,1.3 95.8,1.3 95.8,3.9 97.2,3.9 97.2,0 "/>
+ <polygon class="st0" points="85.7,7.5 84.9,7.9 84.8,7.8 85.6,7.3 84.8,6.8 84.9,6.6 85.7,7.1 85.7,6.2 85.9,6.2 85.9,7.1
+ 86.7,6.6 86.8,6.8 86.1,7.3 86.8,7.8 86.7,7.9 85.9,7.5 85.9,8.4 85.7,8.4 "/>
+ <polygon class="st2" points="85.7,7.5 84.9,7.9 84.8,7.8 85.6,7.3 84.8,6.8 84.9,6.6 85.7,7.1 85.7,6.2 85.9,6.2 85.9,7.1
+ 86.7,6.6 86.8,6.8 86.1,7.3 86.8,7.8 86.7,7.9 85.9,7.5 85.9,8.4 85.7,8.4 "/>
+ <polygon class="st0" points="89.5,7.5 88.7,7.9 88.6,7.8 89.4,7.3 88.6,6.8 88.7,6.6 89.5,7.1 89.5,6.2 89.7,6.2 89.7,7.1
+ 90.6,6.6 90.7,6.8 89.9,7.3 90.7,7.8 90.6,7.9 89.7,7.5 89.7,8.4 89.5,8.4 "/>
+ <polygon class="st2" points="89.5,7.5 88.7,7.9 88.6,7.8 89.4,7.3 88.6,6.8 88.7,6.6 89.5,7.1 89.5,6.2 89.7,6.2 89.7,7.1
+ 90.6,6.6 90.7,6.8 89.9,7.3 90.7,7.8 90.6,7.9 89.7,7.5 89.7,8.4 89.5,8.4 "/>
+ <polygon class="st0" points="93.3,7.5 92.5,7.9 92.4,7.8 93.2,7.3 92.4,6.8 92.5,6.6 93.3,7.1 93.3,6.2 93.5,6.2 93.6,7.1
+ 94.4,6.6 94.5,6.8 93.7,7.3 94.5,7.8 94.4,7.9 93.6,7.5 93.5,8.4 93.3,8.4 "/>
+ <polygon class="st2" points="93.3,7.5 92.5,7.9 92.4,7.8 93.2,7.3 92.4,6.8 92.5,6.6 93.3,7.1 93.3,6.2 93.5,6.2 93.6,7.1
+ 94.4,6.6 94.5,6.8 93.7,7.3 94.5,7.8 94.4,7.9 93.6,7.5 93.5,8.4 93.3,8.4 "/>
+ <path class="st0" d="M62.4,9.7c-0.3,0-0.5,0.1-0.7,0.2l-2.1-2.1c0.1-0.2,0.2-0.5,0.2-0.7c0-0.3-0.1-0.5-0.2-0.8L61,4.7
+ c0.2,0.1,0.4,0.2,0.6,0.2c0.8,0,1.4-0.6,1.4-1.4c0-0.8-0.6-1.4-1.4-1.4c-0.8,0-1.4,0.6-1.4,1.4c0,0.2,0.1,0.5,0.2,0.7l-1.5,1.7
+ c-0.2-0.1-0.4-0.1-0.6-0.1c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.2,0,0.4-0.1,0.6-0.1l2.2,2.2c-0.1,0.2-0.1,0.4-0.1,0.6
+ c0,0.8,0.6,1.4,1.4,1.4c0.8,0,1.4-0.6,1.4-1.4C63.8,10.3,63.2,9.7,62.4,9.7 M61.6,2.8c0.4,0,0.7,0.3,0.7,0.7c0,0.4-0.3,0.7-0.7,0.7
+ c-0.4,0-0.7-0.3-0.7-0.7C61,3.1,61.3,2.8,61.6,2.8 M58.4,7.8c-0.4,0-0.7-0.3-0.7-0.7s0.3-0.7,0.7-0.7c0.4,0,0.7,0.3,0.7,0.7
+ S58.7,7.8,58.4,7.8 M62.4,11.8c-0.4,0-0.7-0.3-0.7-0.7s0.3-0.7,0.7-0.7c0.4,0,0.7,0.3,0.7,0.7S62.8,11.8,62.4,11.8"/>
+ <path class="st0" d="M65.9,6.3c-0.8,0-1.4,0.6-1.4,1.3c0,0.2,0,0.5,0.1,0.7L63,9.9l0.6,0.5l1.5-1.6c0.2,0.1,0.4,0.2,0.6,0.2
+ c0.8,0,1.4-0.6,1.4-1.3C67.2,7,66.7,6.4,65.9,6.3 M65.8,8.4c-0.4,0-0.7-0.3-0.6-0.7c0-0.4,0.3-0.7,0.7-0.6c0.4,0,0.7,0.3,0.6,0.7
+ C66.5,8.1,66.2,8.4,65.8,8.4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/E8C6460B.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/E8C6460B.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/file_pdf.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/file_pdf.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/file_pdf.svg (revision 7)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="446.461px" height="595.397px" viewBox="197.715 -0.116 446.461 595.397"
+ enable-background="new 197.715 -0.116 446.461 595.397" xml:space="preserve">
+<path fill="#333333" d="M627.782,113.824l-97.547-97.547C519.771,5.813,505.587-0.116,490.821-0.116H253.522
+ C222.712,0,197.715,24.997,197.715,55.808v483.665c0,30.811,24.997,55.809,55.808,55.809h334.846
+ c30.811,0,55.808-24.998,55.808-55.809V153.354C644.176,138.589,638.246,124.288,627.782,113.824z M583.834,148.82h-88.479V60.342
+ L583.834,148.82z M253.522,539.472V55.808h186.025v120.916c0,15.463,12.44,27.904,27.903,27.904h120.917v334.845H253.522z
+ M544.42,372.4c-14.185-13.953-54.646-10.115-74.876-7.559c-19.997-12.207-33.368-29.066-42.785-53.83
+ c4.534-18.719,11.743-47.205,6.278-65.109c-4.883-30.461-43.949-27.438-49.529-6.86c-5.116,18.719-0.465,44.763,8.139,78.014
+ c-11.627,27.787-28.95,65.109-41.158,86.502c-23.253,11.975-54.646,30.461-59.296,53.715c-3.837,18.369,30.229,64.178,88.479-36.275
+ c26.043-8.604,54.412-19.184,79.525-23.369c21.975,11.859,47.669,19.766,64.877,19.766C553.72,417.394,556.627,384.607,544.42,372.4
+ z M314.096,462.853c5.93-15.928,28.485-34.297,35.345-40.693C327.351,457.388,314.096,463.667,314.096,462.853z M408.969,241.251
+ c8.604,0,7.79,37.321,2.093,47.436C405.947,272.527,406.063,241.251,408.969,241.251z M380.6,400.07
+ c11.278-19.648,20.928-43.018,28.718-63.598c9.65,17.557,21.975,31.625,34.996,41.275C420.131,382.746,399.087,392.978,380.6,400.07
+ z M533.606,394.257c0,0-5.813,6.975-43.367-9.068C531.049,382.166,537.792,391.466,533.606,394.257z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_pause.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_pause.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_pause.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 21.3 36.5" style="enable-background:new 0 0 21.3 36.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#221E1F;stroke-width:7;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <line class="st0" x1="3.5" y1="3.5" x2="3.5" y2="33"/>
+ <line class="st0" x1="17.8" y1="3.5" x2="17.8" y2="33"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_line_bottom.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/icon_tree_line_bottom.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/smile.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/smile.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/smile.svg (revision 7)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#383838;}
+ .st1{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st0" cx="23.3" cy="12.7" r="2.4"/>
+ <path class="st1" d="M22,20c0,2.2-2.6,4-5.7,4s-5.7-1.8-5.7-4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_love.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_love.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_love.svg (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 45.8 46.5" style="enable-background:new 0 0 45.8 46.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<path class="st0" d="M33.7,2c-5.9-0.2-10.8,4.6-10.8,10.4C22.9,6.6,18,1.8,12.1,2C6.4,2.2,2,7.2,2,12.9c0,5.9,2.2,11.5,6.2,15.8
+ l14.7,15.8l14.7-15.8c4-4.3,6.2-9.9,6.2-15.8C43.8,7.2,39.4,2.2,33.7,2z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_textbox.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_textbox.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_textbox.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 10 10" style="enable-background:new 0 0 10 10;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F6F7FC;}
+ .st1{fill:#E6EAF6;}
+</style>
+<g>
+ <polygon class="st0" points="5,10 10,0 0,0 "/>
+ <path class="st1" d="M8.88,0L5,7.76L1.12,0L8.88,0 M10,0H0l5,10L10,0L10,0z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/bg_sub05.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/custom/bg_sub05.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/custom/icon_tree_checkbox_full.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_checkbox_full.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_checkbox_full.svg (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.166px" height="24.165px" viewBox="33.75 0 24.166 24.165" enable-background="new 33.75 0 24.166 24.165"
+ xml:space="preserve">
+<g>
+ <path fill="#FFFFFF" stroke="#000000" stroke-miterlimit="10" d="M35.85,23.588c-0.84,0-1.523-0.684-1.523-1.521V2.099
+ c0-0.839,0.684-1.522,1.523-1.522h19.967c0.84,0,1.523,0.683,1.523,1.522v19.968c0,0.84-0.684,1.521-1.523,1.521H35.85z"/>
+ <path stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" d="M55.816,0.901c0.66,0,1.197,0.537,1.197,1.196v19.968
+ c0,0.66-0.537,1.195-1.197,1.195H35.85c-0.66,0-1.197-0.535-1.197-1.195V2.099c0-0.659,0.537-1.196,1.197-1.196L55.816,0.901
+ M55.816,0.25H35.85c-1.021,0-1.851,0.828-1.851,1.849v19.968c0,1.02,0.828,1.848,1.851,1.848h19.967
+ c1.021,0,1.852-0.828,1.852-1.848V2.099C57.666,1.077,56.838,0.25,55.816,0.25L55.816,0.25z"/>
+</g>
+<path d="M43.988,17.477c-0.264,0-0.531-0.102-0.734-0.305l-4.193-4.191c-0.406-0.406-0.406-1.063,0-1.469
+ c0.404-0.404,1.061-0.407,1.467,0l3.461,3.457l7.15-7.149c0.406-0.405,1.063-0.405,1.469,0c0.406,0.406,0.406,1.063,0,1.469
+ l-7.885,7.884C44.52,17.375,44.256,17.477,43.988,17.477z"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/x.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/x.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/x.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="70.473px" height="70.473px" viewBox="0 0 70.473 70.473" enable-background="new 0 0 70.473 70.473" xml:space="preserve">
+<g>
+
+ <line fill="none" stroke="#3C3C3C" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="4.5" y1="4.5" x2="65.973" y2="65.973"/>
+
+ <line fill="none" stroke="#3C3C3C" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="65.973" y1="4.5" x2="4.5" y2="65.973"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_excel.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_excel.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_excel.svg (revision 7)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="30px" height="30px" viewBox="266.5 266.5 30 30" enable-background="new 266.5 266.5 30 30" xml:space="preserve">
+<g id="_48">
+ <rect x="281.499" y="270.786" fill="#FFFFFF" width="13.574" height="20.714"/>
+ <path fill="#237447" d="M295.073,270.786V291.5h-13.574v-20.714H295.073 M295.073,269.357h-13.574
+ c-0.789,0-1.427,0.639-1.427,1.428V291.5c0,0.79,0.638,1.43,1.427,1.43h13.574c0.788,0,1.427-0.639,1.427-1.43v-20.714
+ C296.499,269.997,295.861,269.357,295.073,269.357z"/>
+ <rect x="287.927" y="272.928" fill="#237447" width="5" height="2.144"/>
+ <rect x="287.927" y="276.5" fill="#237447" width="5" height="2.143"/>
+ <rect x="287.927" y="280.073" fill="#237447" width="5" height="2.144"/>
+ <rect x="287.927" y="283.642" fill="#237447" width="5" height="2.145"/>
+ <rect x="287.927" y="287.216" fill="#237447" width="5" height="2.141"/>
+ <rect x="281.499" y="272.928" fill="#237447" width="5" height="2.144"/>
+ <rect x="281.499" y="276.5" fill="#237447" width="5" height="2.143"/>
+ <rect x="281.499" y="280.073" fill="#237447" width="5" height="2.144"/>
+ <rect x="281.499" y="283.642" fill="#237447" width="5" height="2.145"/>
+ <rect x="281.499" y="287.216" fill="#237447" width="5" height="2.141"/>
+ <path fill="#237447" d="M284.357,266.5L266.5,269.63v23.743l17.857,3.128V266.5z"/>
+ <path fill="#FFFFFF" d="M279.257,275.072l-2.492,0.149l-1.522,3.571l-0.1,0.323l-0.072,0.242l-0.065,0.235l-0.051,0.193l0,0
+ c0-0.095-0.021-0.186-0.064-0.271l-0.065-0.25l-0.073-0.235l-0.078-0.215l-1.306-3.393l-2.406,0.15l2.564,5.558l-2.835,5.557
+ l2.349,0.144l1.579-3.644l0.072-0.251l0.058-0.222l0.049-0.185v-0.15l0,0l0.05,0.264l0.051,0.223l0.043,0.172l0.043,0.122
+ l1.644,3.885l2.729,0.173l-3.072-6.123L279.257,275.072"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_admin.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_admin.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_admin.svg (revision 7)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.3 32.3" style="enable-background:new 0 0 32.3 32.3;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#333333;stroke-width:2;stroke-linejoin:bevel;stroke-miterlimit:10;}
+</style>
+<g>
+ <path class="st0" d="M31.3,18.7v-5L27.6,13c-0.3-0.9-0.6-1.8-1.1-2.6l2.2-3.1l-3.6-3.6L22,5.8c-0.8-0.5-1.7-0.8-2.6-1.1L18.7,1h-5
+ L13,4.7C12,5,11.2,5.4,10.3,5.8L7.2,3.7L3.7,7.2l2.2,3.1C5.4,11.2,5,12,4.7,13L1,13.7v5l3.7,0.7C5,20.3,5.4,21.2,5.8,22l-2.2,3.1
+ l3.6,3.6l3.1-2.2c0.8,0.5,1.7,0.8,2.6,1.1l0.7,3.7h5l0.7-3.7c0.9-0.3,1.8-0.6,2.6-1.1l3.1,2.2l3.6-3.6L26.5,22
+ c0.5-0.8,0.8-1.7,1.1-2.6L31.3,18.7z"/>
+ <path class="st0" d="M19.5,16.2c0,1.9-1.5,3.4-3.4,3.4c-1.9,0-3.4-1.5-3.4-3.4s1.5-3.4,3.4-3.4C18,12.8,19.5,14.3,19.5,16.2z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/triangle_blue.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/triangle_blue.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/triangle_blue.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 10 10" style="enable-background:new 0 0 10 10;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{fill:#C4D9E4;}
+</style>
+<g>
+ <polygon class="st0" points="5,10 10,0 0,0 "/>
+ <path class="st1" d="M8.9,0L5,7.8L1.1,0H8.9 M10,0H0l5,10L10,0L10,0z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_expansion.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_expansion.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_expansion.svg (revision 7)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="22.062px" height="22.062px" viewBox="-25.63 0.47 22.062 22.062" enable-background="new -25.63 0.47 22.062 22.062"
+ xml:space="preserve">
+<g>
+ <path fill="#221F1F" d="M-14.599,17.096c-0.425,0-0.77-0.344-0.77-0.77V6.674c0-0.425,0.345-0.77,0.77-0.77s0.77,0.345,0.77,0.77
+ v9.652C-13.83,16.752-14.174,17.096-14.599,17.096z"/>
+ <path fill="#221F1F" d="M-9.772,12.27h-9.653c-0.425,0-0.77-0.344-0.77-0.769s0.345-0.77,0.77-0.77h9.653
+ c0.424,0,0.77,0.345,0.77,0.77S-9.348,12.27-9.772,12.27z"/>
+ <path fill="#221F1F" d="M-14.599,22.531c-6.083,0-11.031-4.947-11.031-11.03c0-6.083,4.948-11.031,11.031-11.031
+ c6.083,0,11.031,4.949,11.031,11.031C-3.568,17.584-8.516,22.531-14.599,22.531z M-14.599,2.009c-5.234,0-9.492,4.258-9.492,9.492
+ c0,5.233,4.258,9.491,9.492,9.491c5.233,0,9.492-4.258,9.492-9.491C-5.107,6.267-9.366,2.009-14.599,2.009z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_cart_none.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_cart_none.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_cart_none.svg (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 247 190" style="enable-background:new 0 0 247 190;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#343231;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polygon class="st0" points="174.4,123.3 88.9,123.3 75.2,61.3 188.1,61.3 "/>
+ <polyline class="st0" points="88.9,123.3 72.1,47.6 54.5,47.6 "/>
+ <path class="st0" d="M104.7,141.5c0,4.4-3.5,7.9-7.9,7.9c-4.3,0-7.9-3.5-7.9-7.9c0-4.4,3.5-7.9,7.9-7.9
+ C101.2,133.6,104.7,137.1,104.7,141.5"/>
+ <path class="st0" d="M159.1,141.5c0,4.4,3.5,7.9,7.9,7.9s7.9-3.5,7.9-7.9c0-4.4-3.5-7.9-7.9-7.9
+ C162.6,133.6,159.1,137.1,159.1,141.5"/>
+</g>
+<line class="st0" x1="145.2" y1="81.7" x2="122" y2="104.9"/>
+<line class="st0" x1="122" y1="81.7" x2="145.2" y2="104.9"/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_child.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_child.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_child.svg (revision 7)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="31.764px" height="38.035px" viewBox="0 0 31.764 38.035" enable-background="new 0 0 31.764 38.035" xml:space="preserve">
+<polygon fill="#FFFFFF" points="30.823,37.093 0.94,37.093 0.94,1.205 18.913,1.205 25.757,8.08 30.823,12.852 "/>
+<g>
+ <g>
+ <g>
+ <defs>
+ <rect id="SVGID_1_" x="18.913" y="12.852" width="11.912" height="3.607"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" overflow="visible"/>
+ </clipPath>
+ <rect x="18.913" y="12.852" clip-path="url(#SVGID_2_)" fill="#E9EFEE" width="11.912" height="3.607"/>
+ </g>
+ </g>
+</g>
+<polygon fill="none" stroke="#343340" stroke-width="1.8808" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 30.823,12.852 30.823,37.093 0.94,37.093 0.94,0.941 18.913,0.941 "/>
+<polygon fill="#FFFFFF" points="30.823,12.852 18.913,12.852 18.913,0.941 "/>
+<polygon fill="none" stroke="#343340" stroke-width="1.8808" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 30.823,12.852 18.913,12.852 18.913,0.941 "/>
+</svg>
Index: base3.10/src/main/webapp/images/custom/icon_tree_radio_true_full.svg
===================================================================
--- base3.10/src/main/webapp/images/custom/icon_tree_radio_true_full.svg (nonexistent)
+++ base3.10/src/main/webapp/images/custom/icon_tree_radio_true_full.svg (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24.038px" height="24.039px" viewBox="0 0 24.038 24.039" enable-background="new 0 0 24.038 24.039" xml:space="preserve">
+<path fill="#838383" d="M12.02,24.039C5.393,24.039,0,18.647,0,12.02S5.393,0,12.02,0s12.019,5.392,12.019,12.02
+ S18.646,24.039,12.02,24.039z M12.02,1.379c-5.867,0-10.641,4.773-10.641,10.641c0,5.867,4.773,10.64,10.641,10.64
+ c5.866,0,10.64-4.773,10.64-10.64C22.659,6.152,17.886,1.379,12.02,1.379z"/>
+<circle fill="#838383" cx="12.019" cy="12.02" r="6.078"/>
+</svg>
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/bg_bar01.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/bg_bar01.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/er_logo.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/er_logo.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/bg_tab01.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/bg_tab01.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/left_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/left_bg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/index_login.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/index_login.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/menu_bg.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/menu_bg.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/logo.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/logo.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_menu_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_menu_bg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_menu_top.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_menu_top.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_menu_btm.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_menu_btm.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/bg_list_th.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/bg_list_th.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/left_bg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/login_btn.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/login_btn.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/contents.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/contents.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/btn_kne.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/btn_kne.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/join_btn.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/join_btn.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/bu2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/bu2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/login_bg01.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/login_bg01.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/login_id_save.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/login_id_save.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/btn_logout.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/btn_logout.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/bg_list_thEnd.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/bg_list_thEnd.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/page_title.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/page_title.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/index_login.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/uss/umt/index_login.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/bg_tab01_on.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/bg_tab01_on.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/bul/bul_i.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/bul/bul_i.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/bul/bullet_arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/bul/bullet_arrow.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/search2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/search2.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/no_required.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/no_required.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/icon_next.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/icon_next.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/icon_prev.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/icon_prev.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/icon_tit2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/icon_tit2.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/tit_icon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/tit_icon.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/required.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/required.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/action_delete.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/action_delete.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/action_add.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/action_add.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/search.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/search.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/tit_icon.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/icon/tit_icon.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/main/top_logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/main/top_logo.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/main/navi_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/main/navi_bg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/main/bottom_logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/main/bottom_logo.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/main/logo_01.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/main/logo_01.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/main/logout_btn.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/main/logout_btn.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_hr.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_hr.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_indent_less.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_indent_less.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_justify.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_justify.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_right.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_right.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/insert_table.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/insert_table.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/fullscreen_maximize.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/fullscreen_maximize.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_italic.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_italic.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_strike.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_strike.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_indent_more.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_indent_more.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_bold.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_bold.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_image.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_image.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_color_fg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_color_fg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_color_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_color_bg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_html.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_html.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_help.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_help.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_left_to_right.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_left_to_right.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_undo.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_undo.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_killword.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_killword.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_right_to_left.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_right_to_left.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_rmformat.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_rmformat.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_sub.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_sub.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_link.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_link.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_redo.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_redo.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_cut.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_cut.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_underline.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_underline.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_sup.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_format_sup.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_about.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_about.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_center.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_center.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_paste.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_paste.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_list_num.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_list_num.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_copy.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_copy.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_left.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_align_left.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_list_bullet.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/toolbar/ed_list_bullet.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_close.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_next.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_next.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_prev.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_prev.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_search.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_search.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/bg_btn_02.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/bg_btn_02.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/bu2_right.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/bu2_right.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_del.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_del.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_search.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/btn_search.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/bu2_left.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/btn/bu2_left.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/btn_search.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/btn_search.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_first.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_first.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_last.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_last.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_first_on.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_first_on.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_last_on.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_last_on.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_next_on.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_next_on.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_prev_on.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_prev_on.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_next.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_next.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_prev.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/paging/pagination_prev.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_nolines_minus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_nolines_minus.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_page.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_page.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_musicfolder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_musicfolder.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_empty.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_empty.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_555555_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_555555_256x240.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_777777_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_777777_256x240.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_cc0000_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_cc0000_256x240.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_base.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_base.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_joinbottom.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_joinbottom.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_plus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_plus.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_question.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_question.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_minusbottom.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_minusbottom.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_nolines_plus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_nolines_plus.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_cd.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_cd.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_join.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_join.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_777620_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_777620_256x240.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_folder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_folder.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_minus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_minus.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_line.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_line.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_folderopen.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_folderopen.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_trash.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_trash.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_globe.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_globe.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_444444_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_444444_256x240.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_ffffff_256x240.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/ui-icons_ffffff_256x240.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_imgfolder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_imgfolder.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_plusbottom.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/utl/menu_plusbottom.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart1.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart1.JPG
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart2.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart2.JPG
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart3.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart3.JPG
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart4.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart4.JPG
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart5.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart5.JPG
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart6.JPG
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cmm/chart/chart6.JPG
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/more_08.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/more_08.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/cal.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/cal.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/right_gap.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/right_gap.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_bg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/left_menu_top.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/left_menu_top.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/logo_com.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/logo_com.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_left.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_left.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/1_step_right.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/1_step_right.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/temple_top01.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/temple_top01.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/dot.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/dot.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/1_step_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/1_step_bg.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_line_03.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_line_03.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/bull.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/bull.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/left_menu_bottom.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/left_menu_bottom.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/1_step_left.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/1_step_left.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_white.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_white.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_right.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_right.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_line_01.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_line_01.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_gap.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/top_menu_gap.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_line_02.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/tpl/gray_line_02.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bl03.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bl03.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/top_logo.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/top_logo.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/btn_next.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/btn_next.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/btn_more.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/btn_more.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_title_bg2.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_title_bg2.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bl01.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bl01.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_bg.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bg_gnb_r.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bg_gnb_r.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/txt_gray_dot.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/txt_gray_dot.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bg_lnb_tit.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bg_lnb_tit.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bg_bar01.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bg_bar01.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_title.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_title.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_title_bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/community_title_bg.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bl02.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/com/cmy/bl02.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/tbl_check.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/tbl_check.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/dot_gray.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/dot_gray.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_write.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_write.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/community_bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/community_bg.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_bot01.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_bot01.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_gnb_r.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_gnb_r.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/pencil.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/pencil.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_up.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_up.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_bar01.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_bar01.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_notice.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_notice.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/community_title_bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/community_title_bg.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_reply.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_reply.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_down.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_down.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img01.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img01.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/pencil_add.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/pencil_add.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_lock.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/icon_lock.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img02.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img02.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img04.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img04.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_blog_tit.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/bg_blog_tit.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/btn_write.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/btn_write.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img03.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/bbs/img03.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/smt/sdm/btn_next.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/smt/sdm/btn_next.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/smt/sdm/btn_prev.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/smt/sdm/btn_prev.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/cop/smt/sdm/bullet_arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/cop/smt/sdm/bullet_arrow.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/uss/ion/ntm/check.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/uss/ion/ntm/check.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/uss/ion/tir/twitter_regist_detail.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/uss/ion/tir/twitter_regist_detail.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/uss/ion/tir/twitter_regist.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/uss/ion/tir/twitter_regist.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/sym/cal/bu_icon_carlendar.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/sym/cal/bu_icon_carlendar.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_aft_month.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_aft_month.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_pre_month.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_pre_month.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_pre_year.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_pre_year.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_aft_year.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/sym/cal/icon_aft_year.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/uat/uia/google-login.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/uat/uia/google-login.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/uat/uia/login_tit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/uat/uia/login_tit.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/uat/uia/naver-login.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/uat/uia/naver-login.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/egovframework/com/uat/uia/kakao-login.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/egovframework/com/uat/uia/kakao-login.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/admin/arrow_right_gray.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_right_gray.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_right_gray.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="44.694px" height="80.388px" viewBox="17.847 -17.847 44.694 80.388" enable-background="new 17.847 -17.847 44.694 80.388"
+ xml:space="preserve">
+<polyline fill="none" stroke="#999999" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 22.348,-13.346 58.042,22.347 22.348,58.042 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/bg_project.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/admin/bg_project.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/admin/arrow_down_gray.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_down_gray.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_down_gray.svg (revision 7)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="80.389px" height="44.693px" viewBox="0 0 80.389 44.693" enable-background="new 0 0 80.389 44.693" xml:space="preserve">
+<polyline fill="none" stroke="#999999" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 75.889,4.5 40.196,40.194 4.501,4.5 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/icon_minus.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/icon_minus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/icon_minus.svg (revision 7)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="21.567px" height="21.567px" viewBox="11.563 27.577 21.567 21.567" enable-background="new 11.563 27.577 21.567 21.567"
+ xml:space="preserve">
+<g>
+
+ <line fill="none" stroke="#112B53" stroke-width="3.2351" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.513" y1="38.361" x2="13.181" y2="38.361"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/smile2.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/smile2.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/smile2.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.3" cy="12.7" r="2.4"/>
+ <path class="st3" d="M10.6,24.1c0-2.2,2.6-4,5.7-4s5.7,1.8,5.7,4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/smile4.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/smile4.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/smile4.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.3" cy="12.7" r="2.4"/>
+ <path class="st3" d="M22,20c0,2.2-2.6,4-5.7,4s-5.7-1.8-5.7-4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/icon_x.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/icon_x.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/icon_x.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="21.566px" height="21.566px" viewBox="0 0 21.566 21.566" enable-background="new 0 0 21.566 21.566" xml:space="preserve">
+<g>
+
+ <line fill="none" stroke="#112B53" stroke-width="3.2351" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="17.265" y1="4.302" x2="4.302" y2="17.265"/>
+
+ <line fill="none" stroke="#112B53" stroke-width="3.2351" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="17.265" y1="17.265" x2="4.302" y2="4.302"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_down_white.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_down_white.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_down_white.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="80.388px" height="44.695px" viewBox="0.002 0 80.388 44.695" enable-background="new 0.002 0 80.388 44.695"
+ xml:space="preserve">
+<polyline fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 75.89,4.5 40.197,40.195 4.502,4.5 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/icon_calendar.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/icon_calendar.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/icon_calendar.svg (revision 7)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="20.924px" height="22.231px" viewBox="249.647 262.968 20.924 22.231"
+ enable-background="new 249.647 262.968 20.924 22.231" xml:space="preserve">
+<g>
+ <path fill="#221F1F" d="M268.098,285.199H252.12c-1.363,0-2.473-1.109-2.473-2.473v-13.841c0-1.363,1.109-2.473,2.473-2.473h15.979
+ c1.363,0,2.473,1.109,2.473,2.473v13.841C270.571,284.09,269.462,285.199,268.098,285.199z M252.12,268.523
+ c-0.199,0-0.361,0.163-0.361,0.362v13.841c0,0.199,0.162,0.362,0.361,0.362h15.979c0.199,0,0.361-0.163,0.361-0.362v-13.841
+ c0-0.2-0.162-0.362-0.361-0.362H252.12z"/>
+ <g>
+ <path fill="#221F1F" d="M256.969,266.559c0,0.157-0.127,0.284-0.283,0.284h-2.184c-0.156,0-0.283-0.127-0.283-0.284v-3.308
+ c0-0.157,0.127-0.284,0.283-0.284h2.184c0.156,0,0.283,0.127,0.283,0.284V266.559z"/>
+ <path fill="#221F1F" d="M266,266.559c0,0.157-0.127,0.284-0.283,0.284h-2.184c-0.156,0-0.283-0.127-0.283-0.284v-3.308
+ c0-0.157,0.127-0.284,0.283-0.284h2.184c0.156,0,0.283,0.127,0.283,0.284V266.559z"/>
+ </g>
+ <g>
+ <path fill="#221F1F" d="M256.89,274.411c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.616
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V274.411z"/>
+ <path fill="#221F1F" d="M261.484,274.411c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.616
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V274.411z"/>
+ <path fill="#221F1F" d="M266.078,274.411c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.616
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V274.411z"/>
+ <path fill="#221F1F" d="M256.89,278.816c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.615
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V278.816z"/>
+ <path fill="#221F1F" d="M261.484,278.816c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.615
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V278.816z"/>
+ <path fill="#221F1F" d="M266.078,278.816c0,0.313-0.254,0.567-0.567,0.567h-1.615c-0.313,0-0.567-0.254-0.567-0.567v-1.615
+ c0-0.313,0.254-0.567,0.567-0.567h1.615c0.313,0,0.567,0.254,0.567,0.567V278.816z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/bg_select_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/bg_select_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/bg_select_fff.svg (revision 7)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14.578px" height="8.082px" viewBox="47.978 22.834 14.578 8.082" enable-background="new 47.978 22.834 14.578 8.082"
+ xml:space="preserve">
+<path fill="#FFFFFF" d="M55.267,30.916c-0.203,0-0.405-0.078-0.56-0.232l-6.497-6.497c-0.31-0.31-0.31-0.811,0-1.121
+ c0.309-0.309,0.811-0.309,1.119,0l5.938,5.938l5.937-5.938c0.309-0.309,0.812-0.309,1.121,0c0.309,0.31,0.309,0.811,0,1.121
+ l-6.498,6.498C55.672,30.838,55.47,30.916,55.267,30.916z"/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/icon_fileup.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/icon_fileup.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/icon_fileup.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 37 30" style="enable-background:new 0 0 37 30;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <polyline class="st0" points="11.5,8.5 18.5,1.5 25.5,8.5 "/>
+ <polyline class="st0" points="35.5,16.5 35.5,28.5 1.5,28.5 1.5,16.5 "/>
+ <line class="st0" x1="18.5" y1="1.5" x2="18.5" y2="20.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/logo.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/logo.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/logo.svg (revision 7)
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 277.49 34.51" style="enable-background:new 0 0 277.49 34.51;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+ .st2{fill:#FFFFFF;}
+</style>
+<g>
+ <g id="XMLID_6_">
+ <g id="XMLID_7_">
+ <g id="XMLID_8_">
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="35.9578" y1="3.9224" x2="67.9155" y2="28.1247">
+ <stop offset="0" style="stop-color:#00AFEC"/>
+ <stop offset="0.1679" style="stop-color:#00ADEB"/>
+ <stop offset="0.3876" style="stop-color:#00A4E4"/>
+ <stop offset="0.6361" style="stop-color:#0096D9"/>
+ <stop offset="0.9038" style="stop-color:#0082C9"/>
+ <stop offset="1" style="stop-color:#0079C3"/>
+ </linearGradient>
+ <path id="XMLID_10_" class="st0" d="M58.4,23.79c2.42,0.96,1.8,3.91-1.05,3.91H39c-0.53,0-0.96,0.49-0.96,1.11v2.35
+ c0,0.61,0.43,1.11,0.96,1.11h21.38c5,0,8.93-2.44,8.93-7.43c0-3.31-1.47-6.01-5.05-7.63c-2.14-0.99-15.72-6.67-15.72-6.67
+ c-2.44-0.96-1.84-3.91,1.04-3.91h18.34c0.52,0,0.96-0.49,0.96-1.1V3.19c0-0.63-0.44-1.09-0.96-1.09h-21.4
+ c-4.98,0-8.91,2.41-8.91,7.4c0,3.32,1.47,6.01,5.06,7.64C44.8,18.12,58.4,23.79,58.4,23.79z"/>
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="5.5249" y1="-3.3173" x2="29.1511" y2="20.8844">
+ <stop offset="5.618000e-03" style="stop-color:#FDD000"/>
+ <stop offset="1" style="stop-color:#F08300"/>
+ </linearGradient>
+ <path id="XMLID_9_" class="st1" d="M36.39,2.08H0.97C0.45,2.08,0,2.56,0,3.17v2.37c0,0.6,0.45,1.09,0.97,1.09h12.76v24.58
+ c0,0.6,0.46,1.11,0.99,1.11l0,0h7.92l0,0c0.53,0,0.98-0.51,0.98-1.11V6.63h12.77c0.52,0,0.96-0.49,0.96-1.09V3.17
+ C37.36,2.56,36.91,2.08,36.39,2.08z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <path class="st2" d="M89.25,5.37c0,2.95,1.46,6.38,4.48,7.85l-1.46,2.19c-2.04-0.99-3.48-2.93-4.3-5.22
+ c-0.82,2.53-2.3,4.65-4.4,5.71l-1.48-2.21c3.02-1.47,4.52-5.12,4.52-8.32V4.3h-3.82V2h10.12V4.3h-3.66V5.37z M99.59,9.83h-2.68
+ v9.71h-2.64V0.15h2.64v7.39h2.68V9.83z"/>
+ <path class="st2" d="M116.97,9.27v2.21h-16.66V9.27h7v-1.6h-4.98v-6.7h12.64v2.21h-10.02v2.27h10.12v2.21h-5.12v1.6H116.97z
+ M114.97,16c0,2.27-2.42,3.56-6.4,3.56c-3.98,0-6.38-1.28-6.38-3.56c0-2.29,2.4-3.58,6.38-3.58
+ C112.55,12.42,114.97,13.71,114.97,16z M112.29,16c0-1.01-1.26-1.47-3.72-1.47c-2.46,0-3.72,0.46-3.72,1.47s1.26,1.45,3.72,1.45
+ C111.03,17.46,112.29,17.02,112.29,16z"/>
+ <path class="st2" d="M124.76,6.19c0,2.74,1.3,5.88,4.18,7.33l-1.4,2.11c-1.96-0.95-3.3-2.76-4.06-4.91
+ c-0.8,2.32-2.22,4.27-4.28,5.24l-1.42-2.13c2.98-1.45,4.36-4.74,4.36-7.64V5.52h-3.74V3.31h3.74v-2.7h2.64v2.7h3.64v2.21h-3.66
+ V6.19z M135.2,9.98h-2.68v9.56h-2.64V0.17h2.64v7.52h2.68V9.98z"/>
+ <path class="st2" d="M152.56,13.84h-3.8v5.71h-2.66v-5.71h-3.7v5.71h-2.66v-5.71h-3.86V11.6h16.68V13.84z M150.82,10.28h-12.86
+ V0.93h12.68v2.19h-10.06v1.41h9.66v2.11h-9.66v1.47h10.24V10.28z"/>
+ <path class="st2" d="M165.17,9.46c-3.02,0.67-5.92,0.86-8.82,0.86h-1.6V1.37h2.62v6.67c2.46-0.06,4.94-0.29,7.52-0.84L165.17,9.46
+ z M169.03,15.6c0,2.46-2.44,3.96-6.3,3.96c-3.84,0-6.28-1.5-6.28-3.96c0-2.46,2.44-3.96,6.28-3.96
+ C166.59,11.65,169.03,13.14,169.03,15.6z M166.41,15.6c0-1.2-1.3-1.75-3.68-1.75c-2.36,0-3.66,0.55-3.66,1.75
+ c0,1.18,1.3,1.75,3.66,1.75C165.11,17.35,166.41,16.78,166.41,15.6z M168.95,11.37h-2.64V0.15h2.64V11.37z"/>
+ <path class="st2" d="M188.16,9.44v2.21h-16.64V9.44h6.98V7.1h2.64v2.34H188.16z M172.21,6.02c3.44-0.29,5.24-1.56,5.7-2.86h-4.88
+ V0.95h13.62v2.21h-4.9c0.46,1.31,2.26,2.57,5.7,2.86l-0.92,2.19c-3.46-0.36-5.74-1.71-6.7-3.56c-0.98,1.85-3.24,3.2-6.72,3.56
+ L172.21,6.02z M186.19,16.13c0,2.19-2.4,3.43-6.4,3.43s-6.38-1.24-6.38-3.43c0-2.19,2.38-3.43,6.38-3.43
+ S186.19,13.94,186.19,16.13z M183.51,16.13c0-0.93-1.24-1.35-3.72-1.35s-3.72,0.42-3.72,1.35c0,0.95,1.24,1.35,3.72,1.35
+ S183.51,17.08,183.51,16.13z"/>
+ <path class="st2" d="M200.16,4.02H189.3V1.85h4.1V0h2.66v1.85h4.12L200.16,4.02z M194.74,11.41c-2.66,0-4.52-1.39-4.52-3.43
+ c0-2.06,1.86-3.43,4.52-3.43c2.66,0,4.52,1.37,4.52,3.43C199.26,10.02,197.4,11.41,194.74,11.41z M201.2,12.24h2.62v7.1h-11.98
+ v-7.1h2.62v1.47h6.74V12.24z M194.74,9.39c1.18,0,2-0.48,2-1.41s-0.82-1.41-2-1.41c-1.18,0-2,0.48-2,1.41S193.56,9.39,194.74,9.39
+ z M201.2,15.82h-6.74v1.35h6.74V15.82z M206.26,7.08h-2.44v4.42h-2.64V0.15h2.64V4.8h2.44V7.08z"/>
+ <path class="st2" d="M214.24,5.37c0,3.16,1.48,6.51,4.56,7.85l-1.44,2.19c-2.14-0.97-3.6-2.86-4.42-5.2
+ c-0.82,2.53-2.3,4.65-4.46,5.69l-1.5-2.21c3.08-1.45,4.58-5.01,4.58-8.32V4.3h-3.84V2h10.32V4.3h-3.8V5.37z M222.39,0.15v19.39
+ h-2.64V0.15H222.39z"/>
+ <path class="st2" d="M240.83,17v2.21h-13.66v-5.77h2.56v-2.59c-1.62,0.08-3.16,0.11-4.54,0.11l-0.34-2.21
+ c3.36-0.02,7.84-0.06,11.72-0.59l0.18,1.98c-1.44,0.27-2.92,0.44-4.4,0.55v3.66h-2.54V17H240.83z M226.19,4.28
+ c0-2.06,1.9-3.47,4.6-3.47c2.68,0,4.58,1.41,4.58,3.47s-1.9,3.45-4.58,3.45C228.09,7.73,226.19,6.34,226.19,4.28z M228.69,4.28
+ c0,0.95,0.86,1.43,2.1,1.43c1.22,0,2.08-0.48,2.08-1.43c0-0.95-0.86-1.45-2.08-1.45C229.55,2.82,228.69,3.33,228.69,4.28z
+ M237.79,11.41V0.15h2.64v14.7h-2.64v-1.54h-3.46v-1.9H237.79z"/>
+ <path class="st2" d="M259.42,15.12v2.23h-16.68v-2.23h6.98v-3.45h-5.58V9.46h2.4v-5.5h-2.5V1.75h14v2.21h-2.5v5.5h2.44v2.21h-5.62
+ v3.45H259.42z M249.16,9.46h3.76v-5.5h-3.76V9.46z"/>
+ <path class="st2" d="M270.7,9.65c-2.42,0.36-4.48,0.38-7.88,0.38h-1.44v-8.8h8.5v2.15H264v1.2h5.32v2.02H264v1.26
+ c2.64-0.02,4.42-0.06,6.5-0.38L270.7,9.65z M276.46,17.31v2.08h-12.64v-5.14h9.5V13.2h-9.54v-2.08h12.16v5.1h-9.52v1.09H276.46z
+ M273.3,6.45h-2.92V4.25h2.92V0.15h2.64V10.4h-2.64V6.45z"/>
+ </g>
+ <g>
+ <path class="st2" d="M82.52,25.76h0.83v3.3h0.03l2.74-3.3h0.93L85,28.26l2.37,4.07h-0.93l-1.96-3.42l-1.13,1.34v2.08h-0.83V25.76z
+ "/>
+ <path class="st2" d="M90.23,26.46h-1.99v-0.7h4.81v0.7h-1.99v5.87h-0.83V26.46z"/>
+ <path class="st2" d="M94.07,31.47l0.49-0.56c0.47,0.49,1.14,0.81,1.82,0.81c0.86,0,1.38-0.43,1.38-1.07
+ c0-0.67-0.47-0.89-1.09-1.17l-0.95-0.41c-0.61-0.26-1.33-0.72-1.33-1.68c0-1.01,0.88-1.75,2.07-1.75c0.78,0,1.47,0.33,1.93,0.81
+ l-0.44,0.53c-0.4-0.38-0.89-0.62-1.5-0.62c-0.74,0-1.23,0.38-1.23,0.97c0,0.64,0.57,0.88,1.08,1.09l0.94,0.4
+ c0.76,0.33,1.35,0.78,1.35,1.75c0,1.04-0.86,1.86-2.23,1.86C95.44,32.45,94.65,32.07,94.07,31.47z"/>
+ <path class="st2" d="M103.63,30.32h-2.4l-0.64,2.01h-0.84l2.23-6.57h0.92l2.23,6.57h-0.88L103.63,30.32z M103.42,29.66l-0.31-1
+ c-0.24-0.74-0.45-1.46-0.66-2.22h-0.04c-0.21,0.77-0.42,1.48-0.65,2.22l-0.32,1H103.42z"/>
+ <path class="st2" d="M106.53,31.83c0-0.37,0.27-0.64,0.59-0.64c0.32,0,0.59,0.27,0.59,0.64s-0.27,0.62-0.59,0.62
+ C106.8,32.45,106.53,32.19,106.53,31.83z"/>
+ <path class="st2" d="M115.72,30.32h-2.4l-0.64,2.01h-0.84l2.23-6.57h0.92l2.23,6.57h-0.88L115.72,30.32z M115.51,29.66l-0.31-1
+ c-0.24-0.74-0.45-1.46-0.66-2.22h-0.04c-0.21,0.77-0.42,1.48-0.65,2.22l-0.32,1H115.51z"/>
+ <path class="st2" d="M118.67,30.55v-3.08h0.82v2.98c0,0.9,0.27,1.29,0.91,1.29c0.5,0,0.85-0.24,1.32-0.82v-3.45h0.81v4.86h-0.68
+ l-0.06-0.76h-0.03c-0.46,0.53-0.94,0.88-1.61,0.88C119.13,32.45,118.67,31.78,118.67,30.55z"/>
+ <path class="st2" d="M125.03,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.56-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C125.38,32.45,125.03,31.8,125.03,30.82z"/>
+ <path class="st2" d="M128.49,29.9c0-1.62,1.07-2.56,2.26-2.56S133,28.28,133,29.9c0,1.61-1.07,2.54-2.26,2.54
+ S128.49,31.51,128.49,29.9z M132.16,29.9c0-1.12-0.57-1.88-1.42-1.88s-1.41,0.76-1.41,1.88c0,1.12,0.56,1.86,1.41,1.86
+ S132.16,31.02,132.16,29.9z"/>
+ <path class="st2" d="M135,27.47h0.67l0.07,0.71h0.03c0.42-0.47,0.93-0.83,1.51-0.83c0.74,0,1.15,0.36,1.34,0.93
+ c0.5-0.55,1.01-0.93,1.6-0.93c1,0,1.48,0.66,1.48,1.91v3.08h-0.81v-2.97c0-0.91-0.29-1.3-0.9-1.3c-0.38,0-0.77,0.24-1.23,0.74
+ v3.53h-0.81v-2.97c0-0.91-0.29-1.3-0.9-1.3c-0.37,0-0.78,0.24-1.23,0.74v3.53H135V27.47z"/>
+ <path class="st2" d="M143.65,29.9c0-1.62,1.07-2.56,2.26-2.56s2.26,0.94,2.26,2.56c0,1.61-1.07,2.54-2.26,2.54
+ S143.65,31.51,143.65,29.9z M147.32,29.9c0-1.12-0.57-1.88-1.42-1.88s-1.41,0.76-1.41,1.88c0,1.12,0.56,1.86,1.41,1.86
+ S147.32,31.02,147.32,29.9z"/>
+ <path class="st2" d="M150.14,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.56-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C150.49,32.45,150.14,31.8,150.14,30.82z"/>
+ <path class="st2" d="M153.94,25.93c0-0.33,0.24-0.53,0.56-0.53c0.32,0,0.56,0.2,0.56,0.53c0,0.3-0.24,0.53-0.56,0.53
+ C154.18,26.46,153.94,26.24,153.94,25.93z M154.09,27.47h0.81v4.86h-0.81V27.47z"/>
+ <path class="st2" d="M156.57,27.47h0.85l0.91,2.77c0.15,0.47,0.3,0.98,0.46,1.43h0.04c0.14-0.46,0.3-0.96,0.45-1.43l0.92-2.77H161
+ l-1.73,4.86h-0.95L156.57,27.47z"/>
+ <path class="st2" d="M162.26,29.9c0-1.58,1.07-2.56,2.19-2.56c1.24,0,1.93,0.9,1.93,2.28c0,0.18-0.02,0.35-0.04,0.47h-3.28
+ c0.05,1.04,0.69,1.7,1.61,1.7c0.47,0,0.86-0.14,1.22-0.39l0.3,0.54c-0.43,0.28-0.95,0.5-1.61,0.5
+ C163.3,32.45,162.26,31.5,162.26,29.9z M165.67,29.51c0-0.99-0.45-1.51-1.21-1.51c-0.69,0-1.3,0.55-1.4,1.51H165.67z"/>
+ <path class="st2" d="M172.48,26.46h-1.99v-0.7h4.81v0.7h-1.99v5.87h-0.83V26.46z"/>
+ <path class="st2" d="M176.59,30.55v-3.08h0.82v2.98c0,0.9,0.27,1.29,0.91,1.29c0.5,0,0.85-0.24,1.32-0.82v-3.45h0.81v4.86h-0.68
+ l-0.06-0.76h-0.03c-0.46,0.53-0.94,0.88-1.61,0.88C177.05,32.45,176.59,31.78,176.59,30.55z"/>
+ <path class="st2" d="M182.81,27.47h0.67l0.07,0.7h0.03c0.47-0.46,0.97-0.82,1.63-0.82c1.02,0,1.49,0.66,1.49,1.91v3.08h-0.81
+ v-2.97c0-0.91-0.28-1.3-0.92-1.3c-0.5,0-0.84,0.25-1.33,0.74v3.53h-0.81V27.47z"/>
+ <path class="st2" d="M188.85,25.93c0-0.33,0.24-0.53,0.56-0.53c0.32,0,0.56,0.2,0.56,0.53c0,0.3-0.24,0.53-0.56,0.53
+ C189.1,26.46,188.85,26.24,188.85,25.93z M189.01,27.47h0.81v4.86h-0.81V27.47z"/>
+ <path class="st2" d="M192.19,27.47h0.67l0.07,0.7h0.03c0.47-0.46,0.97-0.82,1.63-0.82c1.02,0,1.49,0.66,1.49,1.91v3.08h-0.81
+ v-2.97c0-0.91-0.28-1.3-0.92-1.3c-0.5,0-0.84,0.25-1.33,0.74v3.53h-0.81V27.47z"/>
+ <path class="st2" d="M198.01,33.26c0-0.41,0.27-0.81,0.73-1.1v-0.04c-0.26-0.15-0.45-0.41-0.45-0.8c0-0.4,0.3-0.73,0.55-0.91
+ v-0.04c-0.32-0.26-0.64-0.73-0.64-1.31c0-1.07,0.84-1.74,1.83-1.74c0.27,0,0.51,0.06,0.68,0.13h1.69v0.63h-0.99
+ c0.23,0.22,0.39,0.58,0.39,1c0,1.04-0.79,1.69-1.77,1.69c-0.24,0-0.51-0.06-0.73-0.17c-0.18,0.15-0.31,0.31-0.31,0.58
+ c0,0.31,0.2,0.53,0.85,0.53h0.95c1.13,0,1.69,0.36,1.69,1.16c0,0.9-0.95,1.68-2.45,1.68C198.83,34.57,198.01,34.1,198.01,33.26z
+ M201.69,33.01c0-0.45-0.35-0.6-0.99-0.6h-0.84c-0.18,0-0.41-0.03-0.63-0.08c-0.35,0.25-0.5,0.54-0.5,0.82
+ c0,0.52,0.53,0.86,1.42,0.86C201.07,34.01,201.69,33.52,201.69,33.01z M201.05,29.08c0-0.71-0.46-1.14-1.03-1.14
+ s-1.04,0.42-1.04,1.14c0,0.71,0.47,1.16,1.04,1.16C200.58,30.23,201.05,29.79,201.05,29.08z"/>
+ <path class="st2" d="M206.47,31.47l0.49-0.56c0.47,0.49,1.14,0.81,1.82,0.81c0.86,0,1.38-0.43,1.38-1.07
+ c0-0.67-0.47-0.89-1.09-1.17l-0.95-0.41c-0.61-0.26-1.33-0.72-1.33-1.68c0-1.01,0.88-1.75,2.07-1.75c0.78,0,1.47,0.33,1.93,0.81
+ l-0.44,0.53c-0.4-0.38-0.89-0.62-1.5-0.62c-0.74,0-1.23,0.38-1.23,0.97c0,0.64,0.57,0.88,1.08,1.09l0.94,0.4
+ c0.76,0.33,1.35,0.78,1.35,1.75c0,1.04-0.86,1.86-2.23,1.86C207.84,32.45,207.04,32.07,206.47,31.47z"/>
+ <path class="st2" d="M212.88,30.55v-3.08h0.81v2.98c0,0.9,0.27,1.29,0.91,1.29c0.5,0,0.85-0.24,1.32-0.82v-3.45h0.82v4.86h-0.68
+ l-0.06-0.76h-0.03c-0.46,0.53-0.94,0.88-1.61,0.88C213.33,32.45,212.88,31.78,212.88,30.55z"/>
+ <path class="st2" d="M219.1,27.47h0.67l0.07,0.55h0.03c0.44-0.36,0.99-0.68,1.55-0.68c1.25,0,1.93,0.99,1.93,2.48
+ c0,1.67-0.99,2.62-2.11,2.62c-0.44,0-0.9-0.21-1.34-0.56l0.02,0.85v1.65h-0.81V27.47z M222.5,29.83c0-1.08-0.36-1.8-1.28-1.8
+ c-0.41,0-0.83,0.23-1.31,0.67v2.55c0.44,0.38,0.87,0.51,1.19,0.51C221.91,31.76,222.5,31.04,222.5,29.83z"/>
+ <path class="st2" d="M225.37,27.47h0.67l0.07,0.55h0.03c0.44-0.36,0.98-0.68,1.55-0.68c1.25,0,1.93,0.99,1.93,2.48
+ c0,1.67-0.99,2.62-2.11,2.62c-0.44,0-0.9-0.21-1.34-0.56l0.02,0.85v1.65h-0.81V27.47z M228.77,29.83c0-1.08-0.36-1.8-1.28-1.8
+ c-0.41,0-0.83,0.23-1.31,0.67v2.55c0.44,0.38,0.87,0.51,1.19,0.51C228.18,31.76,228.77,31.04,228.77,29.83z"/>
+ <path class="st2" d="M231.28,29.9c0-1.62,1.07-2.56,2.26-2.56s2.26,0.94,2.26,2.56c0,1.61-1.07,2.54-2.26,2.54
+ S231.28,31.51,231.28,29.9z M234.95,29.9c0-1.12-0.57-1.88-1.42-1.88s-1.41,0.76-1.41,1.88c0,1.12,0.56,1.86,1.41,1.86
+ S234.95,31.02,234.95,29.9z"/>
+ <path class="st2" d="M237.79,27.47h0.67l0.07,0.89h0.03c0.34-0.62,0.83-1.01,1.38-1.01c0.21,0,0.37,0.03,0.52,0.11l-0.15,0.72
+ c-0.16-0.06-0.28-0.08-0.47-0.08c-0.4,0-0.9,0.29-1.23,1.12v3.13h-0.81V27.47z"/>
+ <path class="st2" d="M242.13,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.55-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C242.48,32.45,242.13,31.8,242.13,30.82z"/>
+ <path class="st2" d="M248.88,25.76h1.87c1.48,0,2.46,0.49,2.46,1.93c0,1.39-0.99,2.03-2.42,2.03h-1.08v2.61h-0.83V25.76z
+ M250.69,29.05c1.16,0,1.7-0.42,1.7-1.36c0-0.95-0.58-1.25-1.74-1.25h-0.94v2.62H250.69z"/>
+ <path class="st2" d="M254.58,29.9c0-1.62,1.07-2.56,2.26-2.56c1.19,0,2.26,0.94,2.26,2.56c0,1.61-1.07,2.54-2.26,2.54
+ C255.65,32.45,254.58,31.51,254.58,29.9z M258.26,29.9c0-1.12-0.57-1.88-1.42-1.88c-0.84,0-1.41,0.76-1.41,1.88
+ c0,1.12,0.56,1.86,1.41,1.86C257.68,31.76,258.26,31.02,258.26,29.9z"/>
+ <path class="st2" d="M261.1,27.47h0.67l0.07,0.89h0.03c0.34-0.62,0.83-1.01,1.38-1.01c0.21,0,0.37,0.03,0.52,0.11l-0.15,0.72
+ c-0.16-0.06-0.28-0.08-0.47-0.08c-0.4,0-0.9,0.29-1.23,1.12v3.13h-0.81V27.47z"/>
+ <path class="st2" d="M265.44,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.55-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C265.79,32.45,265.44,31.8,265.44,30.82z"/>
+ <path class="st2" d="M268.87,31.07c0-1.06,0.92-1.59,2.99-1.82c0-0.63-0.21-1.23-1-1.23c-0.56,0-1.08,0.26-1.46,0.52l-0.32-0.56
+ c0.45-0.29,1.14-0.64,1.92-0.64c1.18,0,1.68,0.8,1.68,2v2.99h-0.67l-0.07-0.58h-0.03c-0.47,0.38-1.01,0.7-1.61,0.7
+ C269.48,32.45,268.87,31.94,268.87,31.07z M271.86,31.15v-1.36c-1.64,0.2-2.19,0.6-2.19,1.23c0,0.55,0.38,0.78,0.86,0.78
+ C271,31.79,271.39,31.57,271.86,31.15z"/>
+ <path class="st2" d="M274.95,31.36V25.2h0.81v6.22c0,0.25,0.11,0.35,0.23,0.35c0.04,0,0.08,0,0.17-0.02l0.12,0.63
+ c-0.12,0.04-0.26,0.07-0.47,0.07C275.2,32.45,274.95,32.05,274.95,31.36z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/smile3.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/smile3.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/smile3.svg (revision 7)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.4" cy="12.7" r="2.4"/>
+ <line class="st3" x1="11.6" y1="24.9" x2="21" y2="24.9"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/smile5.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/smile5.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/smile5.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st0" cx="16.3" cy="16.3" r="16.3"/>
+ <path class="st1" d="M25.3,18.9c0,2.2-0.9,4.2-2.3,5.6l-0.1,0.1c-1.5,1.5-3.5,2.4-5.7,2.4h-1.7c-2.3,0-4.4-1-5.9-2.5
+ C8.2,23,7.3,21,7.3,18.9H25.3z"/>
+ <path class="st2" d="M23,24.5l-0.1,0.1c-1.5,1.5-3.5,2.4-5.7,2.4h-1.7c-2.3,0-4.4-1-5.9-2.5c0,0,0.1-0.1,0.1-0.1
+ c1.5-1.5,3.5-2.4,5.7-2.4h1.7C19.5,22,21.5,22.9,23,24.5z"/>
+ <circle class="st1" cx="9.3" cy="12.7" r="2.4"/>
+ <circle class="st1" cx="23.3" cy="12.7" r="2.4"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/Ellipsis-1s-84px.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/Ellipsis-1s-84px.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/Ellipsis-1s-84px.svg (revision 7)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="84px" height="84px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
+<circle cx="84" cy="50" r="10" fill="#1d3f72">
+ <animate attributeName="r" repeatCount="indefinite" dur="0.25s" calcMode="spline" keyTimes="0;1" values="10;0" keySplines="0 0.5 0.5 1" begin="0s"></animate>
+ <animate attributeName="fill" repeatCount="indefinite" dur="1s" calcMode="discrete" keyTimes="0;0.25;0.5;0.75;1" values="#1d3f72;#71c2cc;#d8ebf9;#5699d2;#1d3f72" begin="0s"></animate>
+</circle><circle cx="16" cy="50" r="10" fill="#1d3f72">
+ <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate>
+ <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="0s"></animate>
+</circle><circle cx="50" cy="50" r="10" fill="#5699d2">
+ <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate>
+ <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.25s"></animate>
+</circle><circle cx="84" cy="50" r="10" fill="#d8ebf9">
+ <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate>
+ <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.5s"></animate>
+</circle><circle cx="16" cy="50" r="10" fill="#71c2cc">
+ <animate attributeName="r" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="0;0;10;10;10" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate>
+ <animate attributeName="cx" repeatCount="indefinite" dur="1s" calcMode="spline" keyTimes="0;0.25;0.5;0.75;1" values="16;16;16;50;84" keySplines="0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1;0 0.5 0.5 1" begin="-0.75s"></animate>
+</circle>
+<!-- [ldio] generated by https://loading.io/ --></svg>
\ No newline at end of file
Index: base3.10/src/main/webapp/images/admin/icon_cog.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/icon_cog.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/icon_cog.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" width="1000px" height="1920px" viewBox="0 0 1000 1920" enable-background="new 0 0 1000 1920"
+ xml:space="preserve">
+<path fill="#333333" d="M951.953,1076.602l-83.203-48.047c8.398-45.313,8.398-91.797,0-137.109l83.203-48.047
+ c9.57-5.469,13.867-16.797,10.742-27.344c-21.68-69.531-58.594-132.422-106.836-184.766c-7.422-8.008-19.531-9.961-28.906-4.492
+ l-83.203,48.047c-34.961-30.078-75.195-53.32-118.75-68.555v-95.898c0-10.938-7.617-20.508-18.359-22.852
+ c-71.68-16.016-145.117-15.234-213.281,0C382.617,489.883,375,499.453,375,510.391v96.094
+ c-43.359,15.43-83.594,38.672-118.75,68.555l-83.008-48.047c-9.57-5.469-21.484-3.711-28.906,4.492
+ C96.094,683.633,59.18,746.523,37.5,816.25c-3.32,10.547,1.172,21.875,10.742,27.344l83.203,48.047
+ c-8.398,45.313-8.398,91.797,0,137.109l-83.203,48.047c-9.57,5.469-13.867,16.797-10.742,27.344
+ c21.68,69.531,58.594,132.422,106.836,184.766c7.422,8.008,19.531,9.961,28.906,4.492l83.203-48.047
+ c34.961,30.078,75.195,53.32,118.75,68.555V1410c0,10.938,7.617,20.508,18.359,22.852c71.68,16.016,145.117,15.234,213.281,0
+ c10.742-2.344,18.359-11.914,18.359-22.852v-96.094c43.359-15.43,83.594-38.672,118.75-68.555l83.203,48.047
+ c9.57,5.469,21.484,3.711,28.906-4.492c48.242-52.148,85.156-115.039,106.836-184.766
+ C965.821,1093.398,961.524,1082.07,951.953,1076.602z M500,1116.25c-86.133,0-156.25-70.117-156.25-156.25
+ S413.867,803.75,500,803.75S656.25,873.867,656.25,960S586.133,1116.25,500,1116.25z"/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/favicon.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/admin/favicon.ico
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/admin/arrow_right_white.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_right_white.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_right_white.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="44.694px" height="80.388px" viewBox="17.848 -17.846 44.694 80.388" enable-background="new 17.848 -17.846 44.694 80.388"
+ xml:space="preserve">
+<polyline fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 22.348,-13.346 58.042,22.347 22.348,58.042 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_down.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_down.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_down.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="66.609px" height="37.805px" viewBox="-14.402 14.403 66.609 37.805" enable-background="new -14.402 14.403 66.609 37.805"
+ xml:space="preserve">
+<polyline fill="none" stroke="#3C3C3C" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 47.707,18.903 18.903,47.707 -9.902,18.903 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/icon_plus.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/icon_plus.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/icon_plus.svg (revision 7)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="21.567px" height="21.567px" viewBox="11.563 27.577 21.567 21.567" enable-background="new 11.563 27.577 21.567 21.567"
+ xml:space="preserve">
+<g>
+
+ <line fill="none" stroke="#112B53" stroke-width="3.2351" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="22.347" y1="29.195" x2="22.347" y2="47.527"/>
+
+ <line fill="none" stroke="#112B53" stroke-width="3.2351" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.513" y1="38.361" x2="13.181" y2="38.361"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/bg_select.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/bg_select.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/bg_select.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14.578px" height="8.082px" viewBox="0 0 14.578 8.082" enable-background="new 0 0 14.578 8.082" xml:space="preserve">
+<path fill="#2B363A" d="M7.29,8.081c-0.203,0-0.405-0.078-0.561-0.232L0.231,1.353c-0.309-0.311-0.309-0.812,0-1.121
+ c0.31-0.309,0.812-0.309,1.121,0l5.937,5.938l5.937-5.938c0.309-0.309,0.813-0.309,1.121,0c0.309,0.31,0.309,0.811,0,1.121
+ L7.849,7.849C7.694,8.003,7.493,8.081,7.29,8.081z"/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_top.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_top.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_top.svg (revision 7)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="27.523px" height="14.614px" viewBox="0 0 27.523 14.614" enable-background="new 0 0 27.523 14.614" xml:space="preserve">
+<g>
+
+ <line fill="none" stroke="#666666" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="1.5" y1="13.114" x2="13.762" y2="1.5"/>
+
+ <line fill="none" stroke="#666666" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="26.023" y1="13.114" x2="13.762" y2="1.5"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/smile1.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/smile1.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/smile1.svg (revision 7)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 32.6 32.6" style="enable-background:new 0 0 32.6 32.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#F3CE64;}
+ .st1{fill:#383838;}
+ .st2{fill:#D96151;}
+ .st3{fill:none;stroke:#383838;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<g>
+ <circle class="st2" cx="16.3" cy="16.3" r="16.3"/>
+ <path class="st1" d="M10.5,25.8c0-1.4,0.6-2.7,1.5-3.6l0.1-0.1c0.9-0.9,2.2-1.5,3.7-1.5h1.1c1.5,0,2.8,0.6,3.8,1.6
+ c0.9,0.9,1.5,2.2,1.5,3.6H10.5z"/>
+ <circle class="st1" cx="10.6" cy="14.3" r="2.9"/>
+ <line class="st3" x1="13.9" y1="12.5" x2="8.1" y2="9.1"/>
+ <circle class="st1" cx="22" cy="14.3" r="2.9"/>
+ <line class="st3" x1="18.7" y1="12.5" x2="24.5" y2="9.1"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/logo_v.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/logo_v.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/logo_v.svg (revision 7)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 141.1 74.8" style="enable-background:new 0 0 141.1 74.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+ .st2{fill:#FFFFFF;}
+</style>
+<g>
+ <g id="XMLID_6_">
+ <g id="XMLID_7_">
+ <g id="XMLID_8_">
+
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="72.0314" y1="414.8975" x2="103.9891" y2="439.0998" gradientTransform="matrix(1 0 0 1 0 -413.01)">
+ <stop offset="0" style="stop-color:#00AFEC"/>
+ <stop offset="0.1679" style="stop-color:#00ADEB"/>
+ <stop offset="0.3876" style="stop-color:#00A4E4"/>
+ <stop offset="0.6361" style="stop-color:#0096D9"/>
+ <stop offset="0.9038" style="stop-color:#0082C9"/>
+ <stop offset="1" style="stop-color:#0079C3"/>
+ </linearGradient>
+ <path id="XMLID_10_" class="st0" d="M94.5,21.7c2.4,1,1.8,3.9-1,3.9H75.1c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.4,1.1,1,1.1h21.4
+ c5,0,8.9-2.4,8.9-7.4c0-3.3-1.5-6-5.1-7.6c-2.1-1-15.7-6.7-15.7-6.7c-2.4-1-1.8-3.9,1-3.9h18.3c0.5,0,1-0.5,1-1.1V1.1
+ c0-0.6-0.4-1.1-1-1.1H82.6c-5,0-8.9,2.4-8.9,7.4c0,3.3,1.5,6,5.1,7.6C80.9,16,94.5,21.7,94.5,21.7z"/>
+
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="41.6288" y1="407.6165" x2="65.255" y2="431.8181" gradientTransform="matrix(1 0 0 1 0 -413.01)">
+ <stop offset="5.618000e-03" style="stop-color:#FDD000"/>
+ <stop offset="1" style="stop-color:#F08300"/>
+ </linearGradient>
+ <path id="XMLID_9_" class="st1" d="M72.5,0H37.1c-0.5,0-1,0.5-1,1.1v2.4c0,0.6,0.5,1.1,1,1.1h12.8v24.6c0,0.6,0.5,1.1,1,1.1l0,0
+ h7.9l0,0c0.5,0,1-0.5,1-1.1V4.6h12.8c0.5,0,1-0.5,1-1.1V1.1C73.5,0.5,73,0,72.5,0z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <path class="st2" d="M28,61.5v3.5h-6.7v8.9h-4.1v-8.9h-6.4v8.9H6.7v-8.9H0v-3.5H28z M24.4,59.1H3.6V44.7h20.4v3.4H7.8v2.1h16v3.4
+ h-16v2.1h16.6V59.1z"/>
+ <path class="st2" d="M30.1,45.1h4.2v10.3c2.3,0,4.4-0.1,6.5-0.2s4.2-0.3,6.3-0.5l0.4,3.5c-1,0.1-2.1,0.2-3.2,0.3
+ c-1.1,0.1-2.4,0.2-3.7,0.2c-1.4,0.1-2.9,0.1-4.6,0.1c-1.7,0-3.6,0-5.8,0V45.1z M44.2,74.8c-1.4,0-2.6-0.1-3.8-0.4
+ c-1.2-0.3-2.2-0.7-3-1.2c-0.9-0.5-1.5-1.1-2-1.9s-0.7-1.6-0.7-2.5v-1.4c0-0.9,0.2-1.8,0.7-2.5c0.5-0.7,1.2-1.4,2-1.9
+ c0.9-0.5,1.9-0.9,3-1.2c1.2-0.3,2.4-0.4,3.8-0.4c1.4,0,2.6,0.1,3.8,0.4c1.2,0.3,2.2,0.7,3,1.2c0.9,0.5,1.5,1.1,2,1.9
+ c0.5,0.7,0.7,1.6,0.7,2.5v1.4c0,0.9-0.2,1.8-0.7,2.5s-1.2,1.4-2,1.9c-0.9,0.5-1.9,0.9-3,1.2C46.8,74.7,45.6,74.8,44.2,74.8z
+ M44.2,64.8c-0.7,0-1.4,0.1-2.1,0.2c-0.7,0.2-1.2,0.4-1.7,0.6c-0.5,0.3-0.9,0.6-1.2,0.9c-0.3,0.4-0.5,0.7-0.5,1.1v0.9
+ c0,0.4,0.2,0.8,0.5,1.1c0.3,0.4,0.7,0.7,1.2,0.9c0.5,0.3,1.1,0.5,1.7,0.6c0.7,0.2,1.3,0.2,2.1,0.2c0.7,0,1.4-0.1,2.1-0.2
+ s1.2-0.4,1.7-0.6c0.5-0.3,0.9-0.6,1.2-0.9c0.3-0.4,0.5-0.7,0.5-1.1v-0.9c0-0.4-0.2-0.8-0.5-1.1c-0.3-0.3-0.7-0.7-1.2-0.9
+ c-0.5-0.3-1.1-0.5-1.7-0.6S44.9,64.8,44.2,64.8z M53.7,61.3h-4.1v-18h4.1V61.3z"/>
+ <path class="st2" d="M65,58c-1.2,0-2.3-0.2-3.3-0.6c-1-0.4-1.8-0.9-2.4-1.5c-0.7-0.6-1.2-1.3-1.5-2.1c-0.4-0.8-0.5-1.6-0.5-2.4
+ v-1.1c0-0.8,0.2-1.6,0.5-2.4c0.4-0.8,0.9-1.5,1.5-2.1c0.7-0.6,1.5-1.1,2.4-1.5c1-0.4,2.1-0.6,3.3-0.6c1.2,0,2.3,0.2,3.3,0.6
+ c1,0.4,1.8,0.9,2.4,1.5c0.7,0.6,1.2,1.3,1.5,2.1c0.3,0.8,0.5,1.6,0.5,2.4v1.1c0,0.8-0.2,1.6-0.5,2.4c-0.4,0.8-0.9,1.5-1.5,2.1
+ c-0.7,0.6-1.5,1.1-2.4,1.5S66.3,58,65,58z M65,47.3c-0.6,0-1.2,0.1-1.6,0.3s-0.9,0.4-1.2,0.7s-0.6,0.6-0.7,1
+ c-0.2,0.4-0.2,0.8-0.2,1.2v0.9c0,0.4,0.1,0.8,0.2,1.2c0.2,0.4,0.4,0.7,0.7,1s0.7,0.5,1.2,0.7c0.5,0.2,1,0.3,1.6,0.3
+ c0.6,0,1.2-0.1,1.6-0.3c0.5-0.2,0.9-0.4,1.2-0.7c0.3-0.3,0.6-0.6,0.7-1c0.2-0.4,0.2-0.8,0.2-1.2v-0.9c0-0.4-0.1-0.8-0.2-1.2
+ c-0.2-0.4-0.4-0.7-0.7-1c-0.3-0.3-0.7-0.5-1.2-0.7S65.6,47.3,65,47.3z M80.8,59.9v8.7H65.7v2.3h16v3.3h-20v-8.7h15.1v-2.3H61.5
+ v-3.3H80.8z M80.8,49h4v3.6h-4v5.9h-4.1V43.3h4.1V49z"/>
+ <path class="st2" d="M91.1,63.1h3.2c1.5,0,3.1,0,4.7-0.1c1.6-0.1,3.2-0.2,4.7-0.4l0.5,3.5c-1.6,0.2-3.3,0.4-5.1,0.5
+ c-1.8,0.1-3.8,0.1-5.8,0.1H87V54.2h9.9v-5H87v-3.5h14v11.9h-9.9V63.1z M110.6,73.9h-4.2V43.3h4.2V73.9z"/>
+ <path class="st2" d="M122.7,66.6V55.9h4.1v10.7h14.2v3.5h-28v-3.5H122.7z M132,62.8c0.4-2,0.7-3.9,0.8-5.8
+ c0.2-1.8,0.2-3.7,0.2-5.7v-1.9h-16.6v-3.6h20.8v4.4c0,2.6-0.1,4.9-0.3,7c-0.2,2.1-0.4,4.1-0.8,6L132,62.8z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/bg_project.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/images/admin/bg_project.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/images/admin/arrow_left_gray.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_left_gray.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_left_gray.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="44.694px" height="80.388px" viewBox="17.847 -17.847 44.694 80.388" enable-background="new 17.847 -17.847 44.694 80.388"
+ xml:space="preserve">
+<polyline fill="none" stroke="#999999" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 58.041,58.041 22.347,22.347 58.041,-13.347 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_left.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_left.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_left.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 37.8 66.6" style="enable-background:new 0 0 37.8 66.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:none;stroke:#3C3C3C;stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="33.3,62.1 4.5,33.3 33.3,4.5 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_top_gray.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_top_gray.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_top_gray.svg (revision 7)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="80.389px" height="44.693px" viewBox="0 0 80.389 44.693" enable-background="new 0 0 80.389 44.693" xml:space="preserve">
+<polyline fill="none" stroke="#999999" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 4.5,40.194 40.194,4.5 75.888,40.194 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/logo_b.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/logo_b.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/logo_b.svg (revision 7)
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.2.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 277.49 34.51" style="enable-background:new 0 0 277.49 34.51;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:url(#XMLID_2_);}
+ .st1{fill:url(#XMLID_3_);}
+ .st2{fill:#373838;}
+</style>
+<g>
+ <g id="XMLID_6_">
+ <g id="XMLID_7_">
+ <g id="XMLID_8_">
+ <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="35.9578" y1="3.9224" x2="67.9155" y2="28.1247">
+ <stop offset="0" style="stop-color:#00AFEC"/>
+ <stop offset="0.1679" style="stop-color:#00ADEB"/>
+ <stop offset="0.3876" style="stop-color:#00A4E4"/>
+ <stop offset="0.6361" style="stop-color:#0096D9"/>
+ <stop offset="0.9038" style="stop-color:#0082C9"/>
+ <stop offset="1" style="stop-color:#0079C3"/>
+ </linearGradient>
+ <path id="XMLID_10_" class="st0" d="M58.4,23.79c2.42,0.96,1.8,3.91-1.05,3.91H39c-0.53,0-0.96,0.49-0.96,1.11v2.35
+ c0,0.61,0.43,1.11,0.96,1.11h21.38c5,0,8.93-2.44,8.93-7.43c0-3.31-1.47-6.01-5.05-7.63c-2.14-0.99-15.72-6.67-15.72-6.67
+ c-2.44-0.96-1.84-3.91,1.04-3.91h18.34c0.52,0,0.96-0.49,0.96-1.1V3.19c0-0.63-0.44-1.09-0.96-1.09h-21.4
+ c-4.98,0-8.91,2.41-8.91,7.4c0,3.32,1.47,6.01,5.06,7.64C44.8,18.12,58.4,23.79,58.4,23.79z"/>
+ <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="5.5249" y1="-3.3173" x2="29.1511" y2="20.8844">
+ <stop offset="5.618000e-03" style="stop-color:#FDD000"/>
+ <stop offset="1" style="stop-color:#F08300"/>
+ </linearGradient>
+ <path id="XMLID_9_" class="st1" d="M36.39,2.08H0.97C0.45,2.08,0,2.56,0,3.17v2.37c0,0.6,0.45,1.09,0.97,1.09h12.76v24.58
+ c0,0.6,0.46,1.11,0.99,1.11l0,0h7.92l0,0c0.53,0,0.98-0.51,0.98-1.11V6.63h12.77c0.52,0,0.96-0.49,0.96-1.09V3.17
+ C37.36,2.56,36.91,2.08,36.39,2.08z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <path class="st2" d="M89.25,5.37c0,2.95,1.46,6.38,4.48,7.85l-1.46,2.19c-2.04-0.99-3.48-2.93-4.3-5.22
+ c-0.82,2.53-2.3,4.65-4.4,5.71l-1.48-2.21c3.02-1.47,4.52-5.12,4.52-8.32V4.3h-3.82V2h10.12V4.3h-3.66V5.37z M99.59,9.83h-2.68
+ v9.71h-2.64V0.15h2.64v7.39h2.68V9.83z"/>
+ <path class="st2" d="M116.97,9.27v2.21h-16.66V9.27h7v-1.6h-4.98v-6.7h12.64v2.21h-10.02v2.27h10.12v2.21h-5.12v1.6H116.97z
+ M114.97,16c0,2.27-2.42,3.56-6.4,3.56c-3.98,0-6.38-1.28-6.38-3.56c0-2.29,2.4-3.58,6.38-3.58
+ C112.55,12.42,114.97,13.71,114.97,16z M112.29,16c0-1.01-1.26-1.47-3.72-1.47c-2.46,0-3.72,0.46-3.72,1.47s1.26,1.45,3.72,1.45
+ C111.03,17.46,112.29,17.02,112.29,16z"/>
+ <path class="st2" d="M124.76,6.19c0,2.74,1.3,5.88,4.18,7.33l-1.4,2.11c-1.96-0.95-3.3-2.76-4.06-4.91
+ c-0.8,2.32-2.22,4.27-4.28,5.24l-1.42-2.13c2.98-1.45,4.36-4.74,4.36-7.64V5.52h-3.74V3.31h3.74v-2.7h2.64v2.7h3.64v2.21h-3.66
+ V6.19z M135.2,9.98h-2.68v9.56h-2.64V0.17h2.64v7.52h2.68V9.98z"/>
+ <path class="st2" d="M152.56,13.84h-3.8v5.71h-2.66v-5.71h-3.7v5.71h-2.66v-5.71h-3.86V11.6h16.68V13.84z M150.82,10.28h-12.86
+ V0.93h12.68v2.19h-10.06v1.41h9.66v2.11h-9.66v1.47h10.24V10.28z"/>
+ <path class="st2" d="M165.17,9.46c-3.02,0.67-5.92,0.86-8.82,0.86h-1.6V1.37h2.62v6.67c2.46-0.06,4.94-0.29,7.52-0.84L165.17,9.46
+ z M169.03,15.6c0,2.46-2.44,3.96-6.3,3.96c-3.84,0-6.28-1.5-6.28-3.96c0-2.46,2.44-3.96,6.28-3.96
+ C166.59,11.65,169.03,13.14,169.03,15.6z M166.41,15.6c0-1.2-1.3-1.75-3.68-1.75c-2.36,0-3.66,0.55-3.66,1.75
+ c0,1.18,1.3,1.75,3.66,1.75C165.11,17.35,166.41,16.78,166.41,15.6z M168.95,11.37h-2.64V0.15h2.64V11.37z"/>
+ <path class="st2" d="M188.16,9.44v2.21h-16.64V9.44h6.98V7.1h2.64v2.34H188.16z M172.21,6.02c3.44-0.29,5.24-1.56,5.7-2.86h-4.88
+ V0.95h13.62v2.21h-4.9c0.46,1.31,2.26,2.57,5.7,2.86l-0.92,2.19c-3.46-0.36-5.74-1.71-6.7-3.56c-0.98,1.85-3.24,3.2-6.72,3.56
+ L172.21,6.02z M186.19,16.13c0,2.19-2.4,3.43-6.4,3.43s-6.38-1.24-6.38-3.43c0-2.19,2.38-3.43,6.38-3.43
+ S186.19,13.94,186.19,16.13z M183.51,16.13c0-0.93-1.24-1.35-3.72-1.35s-3.72,0.42-3.72,1.35c0,0.95,1.24,1.35,3.72,1.35
+ S183.51,17.08,183.51,16.13z"/>
+ <path class="st2" d="M200.16,4.02H189.3V1.85h4.1V0h2.66v1.85h4.12L200.16,4.02z M194.74,11.41c-2.66,0-4.52-1.39-4.52-3.43
+ c0-2.06,1.86-3.43,4.52-3.43c2.66,0,4.52,1.37,4.52,3.43C199.26,10.02,197.4,11.41,194.74,11.41z M201.2,12.24h2.62v7.1h-11.98
+ v-7.1h2.62v1.47h6.74V12.24z M194.74,9.39c1.18,0,2-0.48,2-1.41s-0.82-1.41-2-1.41c-1.18,0-2,0.48-2,1.41S193.56,9.39,194.74,9.39
+ z M201.2,15.82h-6.74v1.35h6.74V15.82z M206.26,7.08h-2.44v4.42h-2.64V0.15h2.64V4.8h2.44V7.08z"/>
+ <path class="st2" d="M214.24,5.37c0,3.16,1.48,6.51,4.56,7.85l-1.44,2.19c-2.14-0.97-3.6-2.86-4.42-5.2
+ c-0.82,2.53-2.3,4.65-4.46,5.69l-1.5-2.21c3.08-1.45,4.58-5.01,4.58-8.32V4.3h-3.84V2h10.32V4.3h-3.8V5.37z M222.39,0.15v19.39
+ h-2.64V0.15H222.39z"/>
+ <path class="st2" d="M240.83,17v2.21h-13.66v-5.77h2.56v-2.59c-1.62,0.08-3.16,0.11-4.54,0.11l-0.34-2.21
+ c3.36-0.02,7.84-0.06,11.72-0.59l0.18,1.98c-1.44,0.27-2.92,0.44-4.4,0.55v3.66h-2.54V17H240.83z M226.19,4.28
+ c0-2.06,1.9-3.47,4.6-3.47c2.68,0,4.58,1.41,4.58,3.47s-1.9,3.45-4.58,3.45C228.09,7.73,226.19,6.34,226.19,4.28z M228.69,4.28
+ c0,0.95,0.86,1.43,2.1,1.43c1.22,0,2.08-0.48,2.08-1.43c0-0.95-0.86-1.45-2.08-1.45C229.55,2.82,228.69,3.33,228.69,4.28z
+ M237.79,11.41V0.15h2.64v14.7h-2.64v-1.54h-3.46v-1.9H237.79z"/>
+ <path class="st2" d="M259.42,15.12v2.23h-16.68v-2.23h6.98v-3.45h-5.58V9.46h2.4v-5.5h-2.5V1.75h14v2.21h-2.5v5.5h2.44v2.21h-5.62
+ v3.45H259.42z M249.16,9.46h3.76v-5.5h-3.76V9.46z"/>
+ <path class="st2" d="M270.7,9.65c-2.42,0.36-4.48,0.38-7.88,0.38h-1.44v-8.8h8.5v2.15H264v1.2h5.32v2.02H264v1.26
+ c2.64-0.02,4.42-0.06,6.5-0.38L270.7,9.65z M276.46,17.31v2.08h-12.64v-5.14h9.5V13.2h-9.54v-2.08h12.16v5.1h-9.52v1.09H276.46z
+ M273.3,6.45h-2.92V4.25h2.92V0.15h2.64V10.4h-2.64V6.45z"/>
+ </g>
+ <g>
+ <path class="st2" d="M82.52,25.76h0.83v3.3h0.03l2.74-3.3h0.93L85,28.26l2.37,4.07h-0.93l-1.96-3.42l-1.13,1.34v2.08h-0.83V25.76z
+ "/>
+ <path class="st2" d="M90.23,26.46h-1.99v-0.7h4.81v0.7h-1.99v5.87h-0.83V26.46z"/>
+ <path class="st2" d="M94.07,31.47l0.49-0.56c0.47,0.49,1.14,0.81,1.82,0.81c0.86,0,1.38-0.43,1.38-1.07
+ c0-0.67-0.47-0.89-1.09-1.17l-0.95-0.41c-0.61-0.26-1.33-0.72-1.33-1.68c0-1.01,0.88-1.75,2.07-1.75c0.78,0,1.47,0.33,1.93,0.81
+ l-0.44,0.53c-0.4-0.38-0.89-0.62-1.5-0.62c-0.74,0-1.23,0.38-1.23,0.97c0,0.64,0.57,0.88,1.08,1.09l0.94,0.4
+ c0.76,0.33,1.35,0.78,1.35,1.75c0,1.04-0.86,1.86-2.23,1.86C95.44,32.45,94.65,32.07,94.07,31.47z"/>
+ <path class="st2" d="M103.63,30.32h-2.4l-0.64,2.01h-0.84l2.23-6.57h0.92l2.23,6.57h-0.88L103.63,30.32z M103.42,29.66l-0.31-1
+ c-0.24-0.74-0.45-1.46-0.66-2.22h-0.04c-0.21,0.77-0.42,1.48-0.65,2.22l-0.32,1H103.42z"/>
+ <path class="st2" d="M106.53,31.83c0-0.37,0.27-0.64,0.59-0.64c0.32,0,0.59,0.27,0.59,0.64s-0.27,0.62-0.59,0.62
+ C106.8,32.45,106.53,32.19,106.53,31.83z"/>
+ <path class="st2" d="M115.72,30.32h-2.4l-0.64,2.01h-0.84l2.23-6.57h0.92l2.23,6.57h-0.88L115.72,30.32z M115.51,29.66l-0.31-1
+ c-0.24-0.74-0.45-1.46-0.66-2.22h-0.04c-0.21,0.77-0.42,1.48-0.65,2.22l-0.32,1H115.51z"/>
+ <path class="st2" d="M118.67,30.55v-3.08h0.82v2.98c0,0.9,0.27,1.29,0.91,1.29c0.5,0,0.85-0.24,1.32-0.82v-3.45h0.81v4.86h-0.68
+ l-0.06-0.76h-0.03c-0.46,0.53-0.94,0.88-1.61,0.88C119.13,32.45,118.67,31.78,118.67,30.55z"/>
+ <path class="st2" d="M125.03,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.56-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C125.38,32.45,125.03,31.8,125.03,30.82z"/>
+ <path class="st2" d="M128.49,29.9c0-1.62,1.07-2.56,2.26-2.56S133,28.28,133,29.9c0,1.61-1.07,2.54-2.26,2.54
+ S128.49,31.51,128.49,29.9z M132.16,29.9c0-1.12-0.57-1.88-1.42-1.88s-1.41,0.76-1.41,1.88c0,1.12,0.56,1.86,1.41,1.86
+ S132.16,31.02,132.16,29.9z"/>
+ <path class="st2" d="M135,27.47h0.67l0.07,0.71h0.03c0.42-0.47,0.93-0.83,1.51-0.83c0.74,0,1.15,0.36,1.34,0.93
+ c0.5-0.55,1.01-0.93,1.6-0.93c1,0,1.48,0.66,1.48,1.91v3.08h-0.81v-2.97c0-0.91-0.29-1.3-0.9-1.3c-0.38,0-0.77,0.24-1.23,0.74
+ v3.53h-0.81v-2.97c0-0.91-0.29-1.3-0.9-1.3c-0.37,0-0.78,0.24-1.23,0.74v3.53H135V27.47z"/>
+ <path class="st2" d="M143.65,29.9c0-1.62,1.07-2.56,2.26-2.56s2.26,0.94,2.26,2.56c0,1.61-1.07,2.54-2.26,2.54
+ S143.65,31.51,143.65,29.9z M147.32,29.9c0-1.12-0.57-1.88-1.42-1.88s-1.41,0.76-1.41,1.88c0,1.12,0.56,1.86,1.41,1.86
+ S147.32,31.02,147.32,29.9z"/>
+ <path class="st2" d="M150.14,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.56-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C150.49,32.45,150.14,31.8,150.14,30.82z"/>
+ <path class="st2" d="M153.94,25.93c0-0.33,0.24-0.53,0.56-0.53c0.32,0,0.56,0.2,0.56,0.53c0,0.3-0.24,0.53-0.56,0.53
+ C154.18,26.46,153.94,26.24,153.94,25.93z M154.09,27.47h0.81v4.86h-0.81V27.47z"/>
+ <path class="st2" d="M156.57,27.47h0.85l0.91,2.77c0.15,0.47,0.3,0.98,0.46,1.43h0.04c0.14-0.46,0.3-0.96,0.45-1.43l0.92-2.77H161
+ l-1.73,4.86h-0.95L156.57,27.47z"/>
+ <path class="st2" d="M162.26,29.9c0-1.58,1.07-2.56,2.19-2.56c1.24,0,1.93,0.9,1.93,2.28c0,0.18-0.02,0.35-0.04,0.47h-3.28
+ c0.05,1.04,0.69,1.7,1.61,1.7c0.47,0,0.86-0.14,1.22-0.39l0.3,0.54c-0.43,0.28-0.95,0.5-1.61,0.5
+ C163.3,32.45,162.26,31.5,162.26,29.9z M165.67,29.51c0-0.99-0.45-1.51-1.21-1.51c-0.69,0-1.3,0.55-1.4,1.51H165.67z"/>
+ <path class="st2" d="M172.48,26.46h-1.99v-0.7h4.81v0.7h-1.99v5.87h-0.83V26.46z"/>
+ <path class="st2" d="M176.59,30.55v-3.08h0.82v2.98c0,0.9,0.27,1.29,0.91,1.29c0.5,0,0.85-0.24,1.32-0.82v-3.45h0.81v4.86h-0.68
+ l-0.06-0.76h-0.03c-0.46,0.53-0.94,0.88-1.61,0.88C177.05,32.45,176.59,31.78,176.59,30.55z"/>
+ <path class="st2" d="M182.81,27.47h0.67l0.07,0.7h0.03c0.47-0.46,0.97-0.82,1.63-0.82c1.02,0,1.49,0.66,1.49,1.91v3.08h-0.81
+ v-2.97c0-0.91-0.28-1.3-0.92-1.3c-0.5,0-0.84,0.25-1.33,0.74v3.53h-0.81V27.47z"/>
+ <path class="st2" d="M188.85,25.93c0-0.33,0.24-0.53,0.56-0.53c0.32,0,0.56,0.2,0.56,0.53c0,0.3-0.24,0.53-0.56,0.53
+ C189.1,26.46,188.85,26.24,188.85,25.93z M189.01,27.47h0.81v4.86h-0.81V27.47z"/>
+ <path class="st2" d="M192.19,27.47h0.67l0.07,0.7h0.03c0.47-0.46,0.97-0.82,1.63-0.82c1.02,0,1.49,0.66,1.49,1.91v3.08h-0.81
+ v-2.97c0-0.91-0.28-1.3-0.92-1.3c-0.5,0-0.84,0.25-1.33,0.74v3.53h-0.81V27.47z"/>
+ <path class="st2" d="M198.01,33.26c0-0.41,0.27-0.81,0.73-1.1v-0.04c-0.26-0.15-0.45-0.41-0.45-0.8c0-0.4,0.3-0.73,0.55-0.91
+ v-0.04c-0.32-0.26-0.64-0.73-0.64-1.31c0-1.07,0.84-1.74,1.83-1.74c0.27,0,0.51,0.06,0.68,0.13h1.69v0.63h-0.99
+ c0.23,0.22,0.39,0.58,0.39,1c0,1.04-0.79,1.69-1.77,1.69c-0.24,0-0.51-0.06-0.73-0.17c-0.18,0.15-0.31,0.31-0.31,0.58
+ c0,0.31,0.2,0.53,0.85,0.53h0.95c1.13,0,1.69,0.36,1.69,1.16c0,0.9-0.95,1.68-2.45,1.68C198.83,34.57,198.01,34.1,198.01,33.26z
+ M201.69,33.01c0-0.45-0.35-0.6-0.99-0.6h-0.84c-0.18,0-0.41-0.03-0.63-0.08c-0.35,0.25-0.5,0.54-0.5,0.82
+ c0,0.52,0.53,0.86,1.42,0.86C201.07,34.01,201.69,33.52,201.69,33.01z M201.05,29.08c0-0.71-0.46-1.14-1.03-1.14
+ s-1.04,0.42-1.04,1.14c0,0.71,0.47,1.16,1.04,1.16C200.58,30.23,201.05,29.79,201.05,29.08z"/>
+ <path class="st2" d="M206.47,31.47l0.49-0.56c0.47,0.49,1.14,0.81,1.82,0.81c0.86,0,1.38-0.43,1.38-1.07
+ c0-0.67-0.47-0.89-1.09-1.17l-0.95-0.41c-0.61-0.26-1.33-0.72-1.33-1.68c0-1.01,0.88-1.75,2.07-1.75c0.78,0,1.47,0.33,1.93,0.81
+ l-0.44,0.53c-0.4-0.38-0.89-0.62-1.5-0.62c-0.74,0-1.23,0.38-1.23,0.97c0,0.64,0.57,0.88,1.08,1.09l0.94,0.4
+ c0.76,0.33,1.35,0.78,1.35,1.75c0,1.04-0.86,1.86-2.23,1.86C207.84,32.45,207.04,32.07,206.47,31.47z"/>
+ <path class="st2" d="M212.88,30.55v-3.08h0.81v2.98c0,0.9,0.27,1.29,0.91,1.29c0.5,0,0.85-0.24,1.32-0.82v-3.45h0.82v4.86h-0.68
+ l-0.06-0.76h-0.03c-0.46,0.53-0.94,0.88-1.61,0.88C213.33,32.45,212.88,31.78,212.88,30.55z"/>
+ <path class="st2" d="M219.1,27.47h0.67l0.07,0.55h0.03c0.44-0.36,0.99-0.68,1.55-0.68c1.25,0,1.93,0.99,1.93,2.48
+ c0,1.67-0.99,2.62-2.11,2.62c-0.44,0-0.9-0.21-1.34-0.56l0.02,0.85v1.65h-0.81V27.47z M222.5,29.83c0-1.08-0.36-1.8-1.28-1.8
+ c-0.41,0-0.83,0.23-1.31,0.67v2.55c0.44,0.38,0.87,0.51,1.19,0.51C221.91,31.76,222.5,31.04,222.5,29.83z"/>
+ <path class="st2" d="M225.37,27.47h0.67l0.07,0.55h0.03c0.44-0.36,0.98-0.68,1.55-0.68c1.25,0,1.93,0.99,1.93,2.48
+ c0,1.67-0.99,2.62-2.11,2.62c-0.44,0-0.9-0.21-1.34-0.56l0.02,0.85v1.65h-0.81V27.47z M228.77,29.83c0-1.08-0.36-1.8-1.28-1.8
+ c-0.41,0-0.83,0.23-1.31,0.67v2.55c0.44,0.38,0.87,0.51,1.19,0.51C228.18,31.76,228.77,31.04,228.77,29.83z"/>
+ <path class="st2" d="M231.28,29.9c0-1.62,1.07-2.56,2.26-2.56s2.26,0.94,2.26,2.56c0,1.61-1.07,2.54-2.26,2.54
+ S231.28,31.51,231.28,29.9z M234.95,29.9c0-1.12-0.57-1.88-1.42-1.88s-1.41,0.76-1.41,1.88c0,1.12,0.56,1.86,1.41,1.86
+ S234.95,31.02,234.95,29.9z"/>
+ <path class="st2" d="M237.79,27.47h0.67l0.07,0.89h0.03c0.34-0.62,0.83-1.01,1.38-1.01c0.21,0,0.37,0.03,0.52,0.11l-0.15,0.72
+ c-0.16-0.06-0.28-0.08-0.47-0.08c-0.4,0-0.9,0.29-1.23,1.12v3.13h-0.81V27.47z"/>
+ <path class="st2" d="M242.13,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.55-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C242.48,32.45,242.13,31.8,242.13,30.82z"/>
+ <path class="st2" d="M248.88,25.76h1.87c1.48,0,2.46,0.49,2.46,1.93c0,1.39-0.99,2.03-2.42,2.03h-1.08v2.61h-0.83V25.76z
+ M250.69,29.05c1.16,0,1.7-0.42,1.7-1.36c0-0.95-0.58-1.25-1.74-1.25h-0.94v2.62H250.69z"/>
+ <path class="st2" d="M254.58,29.9c0-1.62,1.07-2.56,2.26-2.56c1.19,0,2.26,0.94,2.26,2.56c0,1.61-1.07,2.54-2.26,2.54
+ C255.65,32.45,254.58,31.51,254.58,29.9z M258.26,29.9c0-1.12-0.57-1.88-1.42-1.88c-0.84,0-1.41,0.76-1.41,1.88
+ c0,1.12,0.56,1.86,1.41,1.86C257.68,31.76,258.26,31.02,258.26,29.9z"/>
+ <path class="st2" d="M261.1,27.47h0.67l0.07,0.89h0.03c0.34-0.62,0.83-1.01,1.38-1.01c0.21,0,0.37,0.03,0.52,0.11l-0.15,0.72
+ c-0.16-0.06-0.28-0.08-0.47-0.08c-0.4,0-0.9,0.29-1.23,1.12v3.13h-0.81V27.47z"/>
+ <path class="st2" d="M265.44,30.82v-2.7h-0.73v-0.62l0.76-0.04l0.1-1.36h0.68v1.36h1.32v0.66h-1.32v2.71
+ c0,0.6,0.19,0.94,0.75,0.94c0.17,0,0.39-0.06,0.55-0.13l0.16,0.61c-0.28,0.09-0.6,0.18-0.9,0.18
+ C265.79,32.45,265.44,31.8,265.44,30.82z"/>
+ <path class="st2" d="M268.87,31.07c0-1.06,0.92-1.59,2.99-1.82c0-0.63-0.21-1.23-1-1.23c-0.56,0-1.08,0.26-1.46,0.52l-0.32-0.56
+ c0.45-0.29,1.14-0.64,1.92-0.64c1.18,0,1.68,0.8,1.68,2v2.99h-0.67l-0.07-0.58h-0.03c-0.47,0.38-1.01,0.7-1.61,0.7
+ C269.48,32.45,268.87,31.94,268.87,31.07z M271.86,31.15v-1.36c-1.64,0.2-2.19,0.6-2.19,1.23c0,0.55,0.38,0.78,0.86,0.78
+ C271,31.79,271.39,31.57,271.86,31.15z"/>
+ <path class="st2" d="M274.95,31.36V25.2h0.81v6.22c0,0.25,0.11,0.35,0.23,0.35c0.04,0,0.08,0,0.17-0.02l0.12,0.63
+ c-0.12,0.04-0.26,0.07-0.47,0.07C275.2,32.45,274.95,32.05,274.95,31.36z"/>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_right.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_right.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_right.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="44.694px" height="80.388px" viewBox="17.848 -17.846 44.694 80.388" enable-background="new 17.848 -17.846 44.694 80.388"
+ xml:space="preserve">
+<polyline fill="none" stroke="#112B53" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 22.348,-13.346 58.042,22.347 22.348,58.042 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/check_on.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/check_on.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/check_on.svg (revision 7)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 8.8 8.8" style="enable-background:new 0 0 8.8 8.8;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#333333;}
+ .st1{fill:#FFFFFF;}
+</style>
+<g>
+ <g>
+ <g>
+ <path class="st0" d="M3.6,7.3C3.4,7.3,3.2,7.2,3,7L0.8,5c-0.2-0.3-0.2-0.7,0-1.1V3.8l0.6-0.6C1.5,3.1,1.7,3,1.9,3s0.3,0,0.5,0.1
+ h0.1l1.1,1.1l2.7-2.7c0.1-0.1,0.3-0.2,0.6-0.2c0.2,0,0.3,0,0.5,0.1h0.1L8.1,2c0.3,0.3,0.3,0.7,0.1,1.1v0.1L4.2,7
+ C4.1,7.2,3.8,7.3,3.6,7.3z"/>
+ <path class="st1" d="M6.9,1.8c0.1,0,0.2,0,0.3,0.1l0.5,0.5c0.1,0.1,0.1,0.3,0,0.5L3.8,6.7c-0.3,0.2-0.5,0-0.5,0L1.2,4.6
+ c-0.1-0.1-0.3-0.3,0-0.5l0.5-0.5c0.1-0.1,0.2-0.1,0.2-0.1c0.1,0,0.2,0,0.3,0.1L3.6,5l3.1-3.1C6.8,1.8,6.8,1.8,6.9,1.8 M6.9,0.8
+ C6.6,0.8,6.2,1,6,1.2L3.6,3.6L2.9,2.9L2.8,2.8L2.6,2.7C2.4,2.6,2.2,2.5,1.9,2.5S1.2,2.7,1,2.9L0.5,3.4L0.4,3.5L0.3,3.7
+ C0,4.2,0.1,4.9,0.5,5.3l2.1,2.1c0.4,0.4,0.7,0.4,1,0.4c0.4,0,0.8-0.2,1-0.5l3.8-3.7l0.1-0.1l0.1-0.2c0.3-0.6,0.2-1.2-0.2-1.7
+ L7.9,1.2L7.8,1.1L7.6,1C7.4,0.9,7.2,0.8,6.9,0.8L6.9,0.8z"/>
+ </g>
+ </g>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/icon_pin.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/icon_pin.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/icon_pin.svg (revision 7)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="67.924px" height="67.924px" viewBox="-0.03 0.053 67.924 67.924" enable-background="new -0.03 0.053 67.924 67.924"
+ xml:space="preserve">
+<g>
+
+ <rect x="32.372" y="15.988" transform="matrix(0.7072 0.7071 -0.7071 0.7072 30.9415 -21.3796)" fill="none" stroke="#333333" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="17.819" height="21.353"/>
+
+ <rect x="36.555" y="13.011" transform="matrix(0.7071 0.7071 -0.7071 0.7071 26.7734 -31.4597)" fill="none" stroke="#333333" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" width="29.611" height="7.152"/>
+
+ <line fill="none" stroke="#333333" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.566" y1="42.382" x2="3.506" y2="64.441"/>
+ <path fill="none" stroke="#333333" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M38.978,55.794L12.153,28.97l0.645-0.645c4.154-4.154,10.888-4.154,15.044,0l11.783,11.78c4.152,4.154,4.152,10.89,0,15.043
+ L38.978,55.794z"/>
+</g>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_left_white.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_left_white.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_left_white.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="44.694px" height="80.388px" viewBox="17.848 -17.846 44.694 80.388" enable-background="new 17.848 -17.846 44.694 80.388"
+ xml:space="preserve">
+<polyline fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 58.042,58.042 22.348,22.348 58.042,-13.346 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_down_fff.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_down_fff.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_down_fff.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="66.609px" height="37.805px" viewBox="-14.402 14.403 66.609 37.805" enable-background="new -14.402 14.403 66.609 37.805"
+ xml:space="preserve">
+<polyline fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 47.707,18.903 18.903,47.707 -9.902,18.903 "/>
+</svg>
Index: base3.10/src/main/webapp/images/admin/arrow_top_white.svg
===================================================================
--- base3.10/src/main/webapp/images/admin/arrow_top_white.svg (nonexistent)
+++ base3.10/src/main/webapp/images/admin/arrow_top_white.svg (revision 7)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="80.388px" height="44.695px" viewBox="0.002 0 80.388 44.695" enable-background="new 0.002 0 80.388 44.695"
+ xml:space="preserve">
+<polyline fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 4.502,40.196 40.196,4.501 75.89,40.196 "/>
+</svg>
Index: base3.10/src/main/webapp/META-INF/license
===================================================================
--- base3.10/src/main/webapp/META-INF/license (nonexistent)
+++ base3.10/src/main/webapp/META-INF/license (revision 7)
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
Index: base3.10/src/main/webapp/META-INF/osslicenses
===================================================================
--- base3.10/src/main/webapp/META-INF/osslicenses (nonexistent)
+++ base3.10/src/main/webapp/META-INF/osslicenses (revision 7)
@@ -0,0 +1,1688 @@
+전자정부 표준프레임워크에 포함된 다음 오픈소스소프트웨어는 아래 명시된
+-------
+Apache License 2.0
+* spring
+* spring-social-sa mples
+* Spring Social Config
+* godsoft
+* egovframework
+* Commons IO
+-------
+BSD 3-clause "New" or "Revised" License
+* HTMLarea Editor For XOOPS
+-------
+GNU Lesser General Public License v2.1 or later
+* FCKeditor - CKEditor
+-------
+JSON License
+* JSON in Java
+-------
+MIT License
+* jsTree
+* Prototype JavaScript Framework
+* jQuery
+* jsx-requirejs-plu gin
+* jQuery
+* jQuery UI
+-------
+htmlArea License
+* htmlArea
+* HTMLarea Editor For XOOPS
+-------
+라이센스 적용을 받습니다.
+ .
+ .
+ .
+ Oss License Details
+---------------------------------------------------------------------------------
+Apache License 2.0
+* spring
+* spring-social-sa mples
+* Spring Social Config
+* godsoft
+* egovframework
+* Commons IO
+
+----------------------------------------------
+* spring
+* spring-social-sa mples
+* Spring Social Config
+* godsoft
+* egovframework
+* Commons IO
+
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all
+other entities that control, are controlled by, or are under common
+control with that entity. For the purposes of this definition,
+"control" means (i) the power, direct or indirect, to cause the
+direction or management of such entity, whether by contract or
+otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation
+source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or
+Object form, made available under the License, as indicated by a
+copyright notice that is included in or attached to the work
+(an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the purposes
+of this License, Derivative Works shall not include works that remain
+separable from, or merely link (or bind by name) to the interfaces of,
+the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including
+the original version of the Work and any modifications or additions
+to that Work or Derivative Works thereof, that is intentionally
+submitted to Licensor for inclusion in the Work by the copyright owner
+or by an individual or Legal Entity authorized to submit on behalf of
+the copyright owner. For the purposes of this definition, "submitted"
+means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems,
+and issue tracking systems that are managed by, or on behalf of, the
+Licensor for the purpose of discussing and improving the Work, but
+excluding communication that is conspicuously marked or otherwise
+designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work,
+where such license applies only to those patent claims licensable
+by such Contributor that are necessarily infringed by their
+Contribution(s) alone or by combination of their Contribution(s)
+with the Work to which such Contribution(s) was submitted. If You
+institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work
+or a Contribution incorporated within the Work constitutes direct
+or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate
+as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+Work or Derivative Works thereof in any medium, with or without
+modifications, and in Source or Object form, provided that You
+meet the following conditions:
+
+(a) You must give any other recipients of the Work or
+Derivative Works a copy of this License; and
+
+(b) You must cause any modified files to carry prominent notices
+stating that You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works
+that You distribute, all copyright, patent, trademark, and
+attribution notices from the Source form of the Work,
+excluding those notices that do not pertain to any part of
+the Derivative Works; and
+
+(d) If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must
+include a readable copy of the attribution notices contained
+within such NOTICE file, excluding those notices that do not
+pertain to any part of the Derivative Works, in at least one
+of the following places: within a NOTICE text file distributed
+as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or,
+within a display generated by the Derivative Works, if and
+wherever such third-party notices normally appear. The contents
+of the NOTICE file are for informational purposes only and
+do not modify the License. You may add Your own attribution
+notices within Derivative Works that You distribute, alongside
+or as an addendum to the NOTICE text from the Work, provided
+that such additional attribution notices cannot be construed
+as modifying the License.
+
+You may add Your own copyright statement to Your modifications and
+may provide additional or different license terms and conditions
+for use, reproduction, or distribution of Your modifications, or
+for any such Derivative Works as a whole, provided Your use,
+reproduction, and distribution of the Work otherwise complies with
+the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+---------------------------------------------------------------------------------
+BSD 3-clause "New" or "Revised" License
+-* HTMLarea Editor For XOOPS
+htmlArea License (based on BSD license)
+Copyright (c) 2002-2004, interactivetools.com, inc.
+Copyright (c) 2003-2005 dynarch.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1) Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2) Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3) Neither the name of interactivetools.com, inc. nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+zCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------------------------------
+GNU Lesser General Public License v2.1 or later
+* FCKeditor - CKEditor
+----------------------------------------------
+Software License Agreement
+==========================
+
+CKEditor - The text editor for Internet - http://ckeditor.com
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+ http://www.gnu.org/licenses/gpl.html
+ (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ http://www.gnu.org/licenses/lgpl.html
+ (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+ http://www.mozilla.org/MPL/MPL-1.1.html
+ (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify
+and distribute this software under any of the above licenses.
+
+Sources of Intellectual Property Included in CKEditor
+-----------------------------------------------------
+
+Where not otherwise indicated, all CKEditor content is authored by
+CKSource engineers and consists of CKSource-owned intellectual
+property. In some specific instances, CKEditor will incorporate work
+done by developers outside of CKSource with their express permission.
+
+Trademarks
+----------
+
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
+and product names are trademarks, registered trademarks or service
+marks of their respective holders.
+
+---
+
+Appendix A: The GPL License
+---------------------------
+
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software-to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+GNU GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+----------------------------
+
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software-to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages-typically libraries-of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+GNU LESSER GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+---------------------------
+
+MOZILLA PUBLIC LICENSE
+Version 1.1
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
+---------------------------------------------------------------------------------
+JSON License
+* JSON in Java
+----------------------------------------------
+Copyright (c) 2002 JSON.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+---------------------------------------------------------------------------------
+MIT License
+* jsTree
+* Prototype JavaScript Framework
+* jsx-requirejs-plu gin
+* jQuery
+* jQuery UI
+----------------------------------------------
+* Prototype JavaScript Framework
+Prototype is Copyright © 2005-2007 Sam Stephenson. It is freely distributable under the terms of an MIT-style license.
+
+Copyright (c) 2005-2010 Sam Stephenson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+The Prototype documentation is Copyright © 2007 The Prototype Core Team. It is released under the Creative Commons Attribution-ShareAlike 3.0 license.
+----------------------------------------------
+* jsTree
+Copyright (c) 2014 Ivan Bozhanov
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+----------------------------------------------
+* jQuery
+Copyright JS Foundation and other contributors, https://js.foundation/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/jquery
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
+
+---------------------------------------------------------------------------------
+htmlArea License
+* htmlArea
+* HTMLarea Editor For XOOPS
+----------------------------------------------
+htmlArea License (based on BSD license)
+Copyright (c) 2002-2004, interactivetools.com, inc.
+Copyright (c) 2003-2005 dynarch.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1) Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2) Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3) Neither the name of interactivetools.com, inc. nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------------
\ No newline at end of file
Index: base3.10/src/main/webapp/META-INF/MANIFEST.MF
===================================================================
--- base3.10/src/main/webapp/META-INF/MANIFEST.MF (nonexistent)
+++ base3.10/src/main/webapp/META-INF/MANIFEST.MF (revision 7)
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
Property changes on: base3.10/src/main/webapp/META-INF/MANIFEST.MF
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/META-INF/readme
===================================================================
--- base3.10/src/main/webapp/META-INF/readme (nonexistent)
+++ base3.10/src/main/webapp/META-INF/readme (revision 7)
@@ -0,0 +1,10 @@
+Copyright Since 2009 전자정부 표준프레임워크
+
+전자정부 표준프레임워크는 공통컴포넌트는
+
+Apache License 2.0, BSD 3, GNU 2.1, JSON License, MIT License, htmlArea License 의 적용을 받는 오픈소스소프트웨어를 기반으로 만들어졌습니다.
+
+전자정부 표준프레임워크를 수정 혹은 확장한 2차적 저작물을 사용하거나 배포하여 발생하는 모든 손해나 법적 문제에 대해
+전자정부 표준프레임워크의 저작권자는 일체의 책임을 지지 않습니다.
+
+전자정부 표준프레임워크에 사용된 오픈 소스소프트웨어의 라이선스는 osslicenses 파일을 참조하십시오
Index: base3.10/src/main/webapp/js/com/fontawesome.js
===================================================================
--- base3.10/src/main/webapp/js/com/fontawesome.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/fontawesome.js (revision 7)
@@ -0,0 +1,7 @@
+// JavaScript Document
+
+/*!
+ * Font Awesome Free 5.0.7 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */
+!function(){"use strict";var c={};try{"undefined"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?"":l,v=c,z=(~h.indexOf("MSIE")||h.indexOf("Trident/"),"___FONT_AWESOME___"),e=function(){try{return!0}catch(c){return!1}}(),a=[1,2,3,4,5,6,7,8,9,10],m=a.concat([11,12,13,14,15,16,17,18,19,20]);["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(a.map(function(c){return c+"x"})).concat(m.map(function(c){return"w-"+c}));var t=v||{};t[z]||(t[z]={}),t[z].styles||(t[z].styles={}),t[z].hooks||(t[z].hooks={}),t[z].shims||(t[z].shims=[]);var s=t[z],r=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var v in h)Object.prototype.hasOwnProperty.call(h,v)&&(c[v]=h[v])}return c};var f={"500px":[448,512,[],"f26e","M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z"],"accessible-icon":[448,512,[],"f368","M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z"],accusoft:[640,512,[],"f369","M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2 23.4-2.4 1.3-114.6 47.7-117.8 48.9-10.1 4-17.5 6.8-30.8-9.3m114.7-5.6s-115 50.4-117.5 51.6c-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2-2.3-.3-24.6-4.7-38-7.2m-326-181.3s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3v-1l-51.2-65.8"],adn:[496,512,[],"f170","M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z"],adversal:[512,512,[],"f36a","M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z"],affiliatetheme:[512,512,[],"f36b","M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z"],algolia:[448,512,[],"f36c","M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z"],amazon:[448,512,[],"f270","M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z"],"amazon-pay":[611,512,[],"f42c","M0 325.2c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7 40.7 20.4 83.2 35.6 127.4 46.3 20.9 5 41.9 9 63.2 11.8 31.5 4.2 63.2 6 95 5.2 17.4-.4 34.8-1.8 52.1-3.8 56.4-6.7 110.9-20.8 163.3-42.8 2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9-2.8 2.8-6.3 5.1-9.6 7.4-30.7 21.1-64.2 36.4-99.6 47.9-24.6 7.9-49.6 13.8-75.1 17.6-17.6 2.6-35.4 4.4-53.2 4.8-.8 0-1.7.2-2.5.3H294c-.8-.1-1.7-.3-2.5-.3-3.6-.2-7.2-.3-10.7-.4-16.9-.7-33.7-2.6-50.4-5.3-27.4-4.5-54.2-11.4-80.4-20.9-54.1-19.6-102.6-48.6-145.6-87-1.8-1.6-3-3.8-4.4-5.7v-2zM158 65c-1.4.2-2.9.4-4.3.6-14 1.7-26.6 6.9-38 15.1-2.4 1.7-4.6 3.5-7.1 5.4-.2-.5-.4-1-.4-1.4-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6H87.8c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3V215c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zm-47.4 41.9c0-1.5.4-2.4 1.7-3.3 13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9-1.2-.9-1.7-1.7-1.7-3.3.1-14.1 0-28.1 0-42.2 0-14 .1-28 0-42.1zM316.3 65c-1 .1-2 .3-2.9.4-9.8.5-19.4 1.7-28.9 4.1-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9 0 .4-.1.9-.2 1.4-.5-.1-.9 0-1.3-.1-10.5-2.5-21.1-4.3-32-4.9-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4.4-.4.9-.7 1.6-1.1.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0 2.7-.1 4.5-1.9 4.8-4.7.1-.9.1-1.9.1-2.8v-106c0-4.3-.2-8.6-.9-12.9-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7c0 1.3-.4 2.2-1.5 3-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8-6.3-2.5-10.4-6.9-12.4-13.3s-2-13-.1-19.4c2.5-8.3 8.4-13 16.4-15.6 8.1-2.6 16.5-3 24.8-2.2 8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3-.1 4.7-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3-6.8-2.3-13.9-3.3-21-3.9-13.1-1.1-26.2-.5-39.2 1.9-14.3 2.7-27.9 7.3-40 15.6-1.4 1-2.8 2.1-3.7 3.5-.7 1.1-.9 2.8-.5 4 .4 1.5 2.1 1.9 3.6 1.8.7 0 1.5 0 2.2-.1 7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9 4.8.3 9.7 1.4 14.4 2.7 5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1-.4 1-.8 2-1 3-.5 2.9 1.2 4.8 4.1 4.1 1.7-.4 3.6-1.3 4.8-2.5 4.4-4.3 8.9-8.6 12.7-13.4 12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM479.1 198.9c-12.9-35.7-25.8-71.5-38.7-107.2-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5.5 2.1 1.1 4.1 1.9 6.1 19.6 48.5 39.3 97.1 59.1 145.5 1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3-5.1 1.4-10.2 1.6-15.4 1.1-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8-.1 3.3-.1 6.6 0 9.9.1 5.5 2 8 7.4 8.9 5.6 1 11.3 1.9 16.9 2 17.1.4 30.7-6.5 39.5-21.4 3.5-5.9 6.7-12.1 9.2-18.4 23.7-59.8 47.1-119.7 70.6-179.6.7-1.8 1.3-3.6 1.6-5.5.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0-3.7 0-6.3 1.6-7.7 5.2-.5 1.4-1.1 2.7-1.6 4.1-11.6 33.3-23.2 66.6-34.8 100-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z"],amilia:[448,512,[],"f36d","M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm-87.9 327.7c0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5V380c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7"],android:[448,512,[],"f17b","M89.6 204.5v115.8c0 15.4-12.1 27.7-27.5 27.7-15.3 0-30.1-12.4-30.1-27.7V204.5c0-15.1 14.8-27.5 30.1-27.5 15.1 0 27.5 12.4 27.5 27.5zm10.8 157c0 16.4 13.2 29.6 29.6 29.6h19.9l.3 61.1c0 36.9 55.2 36.6 55.2 0v-61.1h37.2v61.1c0 36.7 55.5 36.8 55.5 0v-61.1h20.2c16.2 0 29.4-13.2 29.4-29.6V182.1H100.4v179.4zm248-189.1H99.3c0-42.8 25.6-80 63.6-99.4l-19.1-35.3c-2.8-4.9 4.3-8 6.7-3.8l19.4 35.6c34.9-15.5 75-14.7 108.3 0L297.5 34c2.5-4.3 9.5-1.1 6.7 3.8L285.1 73c37.7 19.4 63.3 56.6 63.3 99.4zm-170.7-55.5c0-5.7-4.6-10.5-10.5-10.5-5.7 0-10.2 4.8-10.2 10.5s4.6 10.5 10.2 10.5c5.9 0 10.5-4.8 10.5-10.5zm113.4 0c0-5.7-4.6-10.5-10.2-10.5-5.9 0-10.5 4.8-10.5 10.5s4.6 10.5 10.5 10.5c5.6 0 10.2-4.8 10.2-10.5zm94.8 60.1c-15.1 0-27.5 12.1-27.5 27.5v115.8c0 15.4 12.4 27.7 27.5 27.7 15.4 0 30.1-12.4 30.1-27.7V204.5c0-15.4-14.8-27.5-30.1-27.5z"],angellist:[448,512,[],"f209","M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z"],angrycreative:[640,512,[],"f36e","M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z"],angular:[415,512,[],"f420","M169.7 268.1h76.2l-38.1-91.6-38.1 91.6zM207.8 32L0 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7L207.8 32zM338 373.8h-48.6l-26.2-65.4H152.6l-26.2 65.4H77.7L207.8 81.5 338 373.8z"],"app-store":[512,512,[],"f36f","M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z"],"app-store-ios":[448,512,[],"f370","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z"],apper:[640,512,[],"f371","M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z"],apple:[376,512,[],"f179","M314.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C59.3 141.2 0 184.8 0 273.5c0 26.2 4.8 53.3 14.4 81.2 12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"],"apple-pay":[640,512,[],"f415","M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z"],asymmetrik:[576,512,[],"f372","M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z"],audible:[640,512,[],"f373","M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z"],autoprefixer:[640,512,[],"f41c","M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z"],avianex:[512,512,[],"f374","M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z"],aviato:[640,512,[],"f421","M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z"],aws:[512,512,[],"f375","M261.2 136.1c-14 57.5-13.1 54.4-25.8 107-1.6 6.5-4.1 8.4-10.7 8.5h-14.4c-5.8-.1-8.2-1.6-9.9-7.3-12.3-39.4-28.8-94.1-39.9-130.7-4.1-13.5-1.4-13.2 9.3-12.9 3.7.1 7.3 0 11 0 5.1.1 7.7 2 9.1 7.1 3.6 12.9 6 22.8 26.6 104.1.4 1.6.9 3.1 1.4 4.6h1.1c.5-2 1.1-3.9 1.6-5.9 7.8-32.9 15.5-65.9 23.3-98.8 2.4-10.2 6.7-11.2 17-11.2h7.6c6.9.1 9 1.5 10.7 8.3 6 23.4 23.5 101.8 26.7 110.4 5.1-18.3-1.8 7.9 28.5-109 2.1-8.1 4.1-9.7 12.3-9.7h12.7c5.4.1 7 1.8 5.7 7.1-2.4 9.5-2.9 9.9-41.3 132.9-3.1 9.9-4.2 10.8-14.6 10.8h-10.6c-7.3 0-9.2-1.3-11-8.4-4.3-16.2-23.3-95.7-26.4-106.9zM125.4 247.3c4.2 5.8 8.1 6.3 14.1 2.4l6.3-4.2c6.8-4.5 7.3-6.3 3.6-13.5-4.3-8.4-6.4-17.3-6.3-26.9 0-3.1.6-55.7-.9-66.8-2.7-19.3-12.5-32.8-31.7-38.7-10.7-3.4-21.7-3.3-32.7-3-15.1.4-29.4 4.6-42.8 11.4-1.8.9-3.7 3.1-4.1 4.9-.8 3.9-1.1 8.1-.7 12.1.6 5.9 2.6 7 8.2 5.1 5.1-1.7 10-3.9 15.1-5.4 14.5-4.4 29.2-6.4 44.1-1.7 7.1 2.2 11.7 6.9 14.3 13.8 3 7.9 2.4 16.1 2.4 24.2 0 5.5-.1 5.5-5.5 4.5-13.9-2.6-27.7-5-41.9-3.1-15.2 2.1-28.6 7.3-38.2 20-9.1 12-10 25.6-7.4 39.5 2.8 15 11.8 25.7 26.4 30.4 20.6 6.7 40.1 3.3 57.7-9.5 3.8-2.8 7.2-6.2 11.1-9.5 3.1 5 5.8 9.7 8.9 14zm-15.3-61.6c3 .4 4.5 1.9 4.3 5.1-.2 3.8.1 7.6-.3 11.4-1.2 11.7-7.7 19.7-17.9 24.9-8.2 4.2-16.9 5.8-26.1 5-15.2-1.3-21-13.1-19.6-26.3C51.8 193.2 59 186.2 72 184c13.8-2.4 16-1.1 38.1 1.7zm348.8 65.1c21.3-8.6 32.9-26.2 29.2-50-2.2-14.6-11.8-24.2-25.2-29.5-14.7-5.9-33.8-10.3-48.1-18.2-4.4-2.4-7.4-6.3-7.6-11.9-.4-11.1 4.2-17.2 15.4-19.8 9.3-2.1 18.8-2.2 28.1-.4 7.3 1.4 14.3 4.2 21.4 6.3 2.8.9 5.9 2.1 7.8-1.6 3.8-7.3.4-18.7-7.3-21.8-22.5-9-45.5-11.6-68.2-1.6-14.6 6.4-24.6 17.4-26 34.2-1.6 19.3 6.9 33.4 24.1 41.7 7.7 3.7 16.1 5.9 24.2 8.9 8.1 3 16.2 5.8 24.1 9.1 12.3 5.3 11.6 24.2 1.2 30-27.7 15.3-64.9-2.4-69.2-3.8-3.3-1.1-5.3.2-6.3 3.7-3 11.3.7 18.8 11.6 22.7 21.7 7.9 49.6 10.5 70.8 2zM296 413.5c50.8-5.8 98.7-20.8 142.7-47 8-4.7 15.5-10.3 23.1-15.7 7.3-5.2 3.2-18.4-11.3-12.2-54.4 23.2-111.2 36.1-170.2 38.9-30.5 1.5-60.8-.3-91.1-4.7-63.1-9.2-122.4-29.2-177.6-61.2-2.1-1.2-4.2-2.5-6.5-3-4.9-1.1-7.7 4.7-2.4 9.7 24 22.1 50.3 40.8 79.1 55.7 53.7 27.7 110.5 42.7 171.2 42 14.4-.8 28.8-.9 43-2.5zm174.7-92.2c14.8.8 19.4 5.9 15.7 20.2-3.8 14.8-9.3 29.2-13.9 43.8-.9 2.9-4.2 6.3-.8 8.8 3.7 2.6 6.5-1 9-3.3 10.2-9.5 17.4-21 22.5-33.8 5.4-13.4 9.3-27.2 8.7-41.9-.2-6.2-1.8-8.8-7.8-10.5-5.4-1.5-11-2.8-16.5-3.2-21.6-1.8-42.5.5-62 10.6-3.1 1.6-6 3.7-8.7 5.9-1.1.9-3.2 5.3 2.4 6.1 1.9.3 3.9-.1 5.9-.3 16.9-1.6 28.6-3.3 45.5-2.4z"],bandcamp:[496,512,[],"f2d5","M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm48.2 326.1h-181L199.9 178h181l-84.7 156.1z"],behance:[576,512,[],"f1b4","M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z"],"behance-square":[448,512,[],"f1b5","M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z"],bimobject:[448,512,[],"f378","M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z"],bitbucket:[512,512,[],"f171","M23.1 32C14.2 31.9 7 38.9 6.9 47.8c0 .9.1 1.8.2 2.8L74.9 462c1.7 10.4 10.7 18 21.2 18.1h325.1c7.9.1 14.7-5.6 16-13.4l67.8-416c1.4-8.7-4.5-16.9-13.2-18.3-.9-.1-1.8-.2-2.8-.2L23.1 32zm285.3 297.3H204.6l-28.1-146.8h157l-25.1 146.8z"],bitcoin:[512,512,[],"f379","M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z"],bity:[496,512,[],"f37a","M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z"],"black-tie":[448,512,[],"f27e","M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z"],blackberry:[512,512,[],"f37b","M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z"],blogger:[448,512,[],"f37c","M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z"],"blogger-b":[448,512,[],"f37d","M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z"],bluetooth:[448,512,[],"f293","M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z"],"bluetooth-b":[320,512,[],"f294","M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z"],btc:[384,512,[],"f15a","M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z"],buromobelexperte:[448,512,[],"f37f","M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z"],buysellads:[448,512,[],"f20d","M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z"],"cc-amazon-pay":[576,512,[],"f42d","M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z"],"cc-amex":[576,512,[],"f1f3","M576 255.4c-37.9-.2-44.2-.9-54.5 5v-5c-45.3 0-53.5-1.7-64.9 5.2v-5.2h-78.2v5.1c-11.4-6.5-21.4-5.1-75.7-5.1v5.6c-6.3-3.7-14.5-5.6-24.3-5.6h-58c-3.5 3.8-12.5 13.7-15.7 17.2-12.7-14.1-10.5-11.6-15.5-17.2h-83.1v92.3h82c3.3-3.5 12.9-13.9 16.1-17.4 12.7 14.3 10.3 11.7 15.4 17.4h48.9c0-14.7.1-8.3.1-23 11.5.2 24.3-.2 34.3-6.2 0 13.9-.1 17.1-.1 29.2h39.6c0-18.5.1-7.4.1-25.3 6.2 0 7.7 0 9.4.1.1 1.3 0 0 0 25.2 152.8 0 145.9 1.1 156.7-4.5v4.5c34.8 0 54.8 2.2 67.5-6.1V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V228.3h26.6c4.2-10.1 2.2-5.3 6.4-15.3h19.2c4.2 10 2.2 5.2 6.4 15.3h52.9v-11.4c2.2 5 1.1 2.5 5.1 11.4h29.5c2.4-5.5 2.6-5.8 5.1-11.4v11.4h135.5v-25.1c6.4 0 8-.1 9.8.2 0 0-.2 10.9.1 24.8h66.5v-8.9c7.4 5.9 17.4 8.9 29.7 8.9h26.8c4.2-10.1 2.2-5.3 6.4-15.3h19c6.5 15 .2.5 6.6 15.3h52.8v-21.9c11.8 19.7 7.8 12.9 13.2 21.9h41.6v-92h-39.9v18.4c-12.2-20.2-6.3-10.4-11.2-18.4h-43.3v20.6c-6.2-14.6-4.6-10.8-8.8-20.6h-32.4c-.4 0-2.3.2-2.3-.3h-27.6c-12.8 0-23.1 3.2-30.7 9.3v-9.3h-39.9v5.3c-10.8-6.1-20.7-5.1-64.4-5.3-.1 0-11.6-.1-11.6 0h-103c-2.5 6.1-6.8 16.4-12.6 30-2.8-6-11-23.8-13.9-30h-46V157c-7.4-17.4-4.7-11-9-21.1H22.9c-3.4 7.9-13.7 32-23.1 53.9V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48v175.4zm-186.6-80.6c-.3.2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9.2.1 1.1.5 3.4.5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm-19.9 130.9c9.2 3.3 11 9.5 11 18.4l-.1 13.8h-16.6l.1-11.5c0-11.8-3.8-13.8-14.8-13.8h-17.6l-.1 25.3h-16.6l.1-69.3h39.4c13 0 27.1 2.3 27.1 18.7-.1 7.6-4.2 15.3-11.9 18.4zm-6.3-15.4c0-6.4-5.6-7.4-10.7-7.4h-21v15.6h20.7c5.6 0 11-1.3 11-8.2zm181.7-7.1H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-99.2-.3v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5h38.5zm42.2 40.1h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-78.1-158.7c-17.4-.3-33.2-4.1-33.2 19.7 0 11.8 2.8 19.9 16.1 19.9h7.4l23.5-54.5h24.8l27.9 65.4v-65.4h25.3l29.1 48.1v-48.1h16.9v69H524l-31.2-51.9v51.9h-33.7l-6.6-15.3h-34.3l-6.4 15.3h-19.2c-22.8 0-33-11.8-33-34 0-23.3 10.5-35.3 34-35.3h16.1v15.2zm14.3 24.5h22.8l-11.2-27.6-11.6 27.6zm-72.6-39.6h-16.9v69.3h16.9v-69.3zm-38.1 37.3c9.5 3.3 11 9.2 11 18.4v13.5h-16.6c-.3-14.8 3.6-25.1-14.8-25.1h-18v25.1h-16.4v-69.3l39.1.3c13.3 0 27.4 2 27.4 18.4.1 8-4.3 15.7-11.7 18.7zm-6.7-15.3c0-6.4-5.6-7.4-10.7-7.4h-21v15.3h20.7c5.7 0 11-1.3 11-7.9zm-59.5-7.4v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5h38.9zm-84.6 54.7v-54.2l-24 54.2H124l-24-54.2v54.2H66.2l-6.4-15.3H25.3l-6.4 15.3H1l29.7-69.3h24.5l28.1 65.7v-65.7h27.1l21.7 47 19.7-47h27.6v69.3h-16.8zM53.9 188.8l-11.5-27.6-11.2 27.6h22.7zm253 102.5c0 27.9-30.4 23.3-49.3 23.3l-.1 23.3h-32.2l-20.4-23-21.3 23h-65.4l.1-69.3h66.5l20.5 22.8 21-22.8H279c15.6 0 27.9 5.4 27.9 22.7zm-112.7 11.8l-17.9-20.2h-41.7v12.5h36.3v14.1h-36.3v13.8h40.6l19-20.2zM241 276l-25.3 27.4 25.3 28.1V276zm48.3 15.3c0-6.1-4.6-8.4-10.2-8.4h-21.5v17.6h21.2c5.9 0 10.5-2.8 10.5-9.2z"],"cc-apple-pay":[576,512,[],"f416","M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z"],"cc-diners-club":[576,512,[],"f24c","M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z"],"cc-discover":[576,512,[],"f1f2","M83 212.1c0 7.9-3.2 15.5-8.9 20.7-4.9 4.4-11.6 6.4-21.9 6.4H48V185h4.2c10.3 0 16.7 1.7 21.9 6.6 5.7 5 8.9 12.6 8.9 20.5zM504.8 184h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8 0-7.9-5.5-12.1-15.6-12.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM428 253h45.3v-13.8H444V217h28.3v-13.8H444V185h29.3v-14H428v82zm-86.2-82l35 84.2h8.6l35.5-84.2h-17.5l-22.2 55.2-21.9-55.2h-17.5zm-83 41.6c0 24.6 19.9 44.6 44.6 44.6 24.6 0 44.6-19.9 44.6-44.6 0-24.6-19.9-44.6-44.6-44.6-24.6 0-44.6 19.9-44.6 44.6zm-68-.5c0 32.5 33.6 52.5 63.3 38.2v-19c-19.3 19.3-46.8 5.8-46.8-19.2 0-23.7 26.7-39.1 46.8-19v-19c-30.2-15-63.3 6.8-63.3 38zm-33.9 28.3c-7.6 0-13.8-3.7-17.5-10.8l-10.3 9.9c17.8 26.1 56.6 18.2 56.6-11.3 0-13.1-5.4-19-23.6-25.6-9.6-3.4-12.3-5.9-12.3-10.3 0-8.7 14.5-14.1 24.9-2.5l8.4-10.8c-19.1-17.1-49.7-8.9-49.7 14.3 0 11.3 5.2 17.2 20.2 22.7 25.7 9.1 14.7 24.4 3.3 24.4zm-57.4-28.3c0-24.1-18-41.1-44.1-41.1H32v82h23.4c30.9 0 44.1-22.4 44.1-40.9zm23.4-41.1h-16v82h16v-82zM544 288c-33.3 20.8-226.4 124.4-416 160h401c8.2 0 15-6.8 15-15V288zm0-35l-25.9-34.5c12.1-2.5 18.7-10.6 18.7-23.2 0-28.5-30.3-24.4-52.9-24.4v82h16v-32.8h2.2l22.2 32.8H544z"],"cc-jcb":[576,512,[],"f24b","M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z"],"cc-mastercard":[576,512,[],"f1f1","M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z"],"cc-paypal":[576,512,[],"f1f4","M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z"],"cc-stripe":[576,512,[],"f1f5","M396.9 256.5c0 19.1-8.8 33.4-21.9 33.4-8.3 0-13.3-3-16.8-6.7l-.2-52.8c3.7-4.1 8.8-7 17-7 12.9-.1 21.9 14.5 21.9 33.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM122.2 281.1c0-42.3-54.3-34.7-54.3-50.7 0-5.5 4.6-7.7 12.1-7.7 10.8 0 24.5 3.3 35.3 9.1v-33.4c-11.8-4.7-23.5-6.5-35.3-6.5-28.8 0-48 15-48 40.2 0 39.3 54 32.9 54 49.9 0 6.6-5.7 8.7-13.6 8.7-11.8 0-26.9-4.9-38.9-11.3v33.9c13.2 5.7 26.6 8.1 38.8 8.1 29.6-.2 49.9-14.7 49.9-40.3zm68.9-86.9h-27v-30.8l-34.7 7.4-.2 113.9c0 21 15.8 36.5 36.9 36.5 11.6 0 20.2-2.1 24.9-4.7v-28.9c-4.5 1.8-27 8.3-27-12.6v-50.5h27v-30.3zm73.8 0c-4.7-1.7-21.3-4.8-29.6 10.5l-2.2-10.5h-30.7v124.5h35.5v-84.4c8.4-11 22.6-8.9 27.1-7.4v-32.7zm44.2 0h-35.7v124.5h35.7V194.2zm0-47.3l-35.7 7.6v28.9l35.7-7.6v-28.9zm122.7 108.8c0-41.3-23.5-63.8-48.4-63.8-13.9 0-22.9 6.6-27.8 11.1l-1.8-8.8h-31.3V360l35.5-7.5.1-40.2c5.1 3.7 12.7 9 25.1 9 25.4-.1 48.6-20.5 48.6-65.6zm112.2 1.2c0-36.4-17.6-65.1-51.3-65.1-33.8 0-54.3 28.7-54.3 64.9 0 42.8 24.2 64.5 58.8 64.5 17 0 29.7-3.9 39.4-9.2v-28.6c-9.7 4.9-20.8 7.9-34.9 7.9-13.8 0-26-4.9-27.6-21.5h69.5c.1-2 .4-9.4.4-12.9zm-51.6-36.1c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7z"],"cc-visa":[576,512,[],"f1f0","M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z"],centercode:[512,512,[],"f380","M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z"],chrome:[496,512,[],"f268","M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z"],cloudscale:[448,512,[],"f383","M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z"],cloudsmith:[332,512,[],"f384","M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z"],cloudversify:[616,512,[],"f385","M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z"],codepen:[512,512,[],"f1cb","M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z"],codiepie:[472,512,[],"f284","M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z"],connectdevelop:[576,512,[],"f20e","M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z"],contao:[512,512,[],"f26d","M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z"],cpanel:[640,512,[],"f388","M52.9 213.7h40l-6.2 23.6c-1.9 6.5-7.4 10.9-14.3 10.9H53.8c-24.9 0-24.7 37.4 0 37.4h11.3c4.2 0 7.6 3.9 6.4 8.3L64.4 320H52c-33.5 0-59-31.4-50.3-65.2 7.3-27 28.3-41.1 51.2-41.1M73.1 320L108 189.9c1.8-6.4 7.2-10.9 14.3-10.9h37c24.1 0 45.4 16.4 51 41.2 6.6 29.1-14.5 65.3-51.7 65.3h-32l6.4-23.8c1.8-6.2 7.3-10.8 14.3-10.8h10.3c12.4 0 20.8-11.7 18.3-22.6-2.1-9.2-9.9-14.8-18.3-14.8h-19.8L112 309.2c-1.9 6.2-7.4 10.7-14.2 10.7l-24.7.1m220.6-69.4c.3-1 1.9-5.3-2.1-5.3h-57.5c-9.7 0-16.6-8.9-14.2-18.5l3.5-13.4h77.9c18.8 0 33.3 17.6 28.5 36.8l-14 51.8c-2.8 10.6-12.2 17.8-23.4 17.8l-57.5-.2c-42.9 0-38.5-63.8.7-63.8H284l-3.5 13.2c-1.9 6.2-7.4 10.8-14.2 10.8h-21.6c-5.3 0-5.3 7.9 0 7.9h34.9c4.6 0 5.1-3.9 5.5-5.3l8.6-31.8m103.1-36.9c34.4 0 59.3 32.3 50.3 65.4l-8.8 33.1c-1.2 4.9-5.7 7.8-10.3 7.8h-19.1c-4.5 0-7.6-4-6.4-8.3l10.6-40c3.3-11.6-5.6-23.4-18.1-23.4h-19.8l-17.2 64c-1.2 4.8-5.6 7.8-10.4 7.8h-18.9c-4.2 0-7.6-3.9-6.4-8.3l26.2-98h48.3M498 251.6l-8 30c-.9 3.3 1.5 6.7 5.1 6.7h73.3l-5.7 21c-1.9 6.2-7.4 10.7-14.2 10.7h-66.7c-20 0-33.3-19-28.3-36.7l10.8-40c4.8-17.6 20.7-29.6 38.6-29.6h47.3c19 0 33.2 17.7 28.3 36.8l-3.2 12c-2.9 11-12.7 17.6-23.2 17.6h-53.4l3.5-13c1.6-6.2 7.2-10.8 14.2-10.8H538c2 0 3.3-1 3.9-3l.7-2.6c.7-2.7-1.3-5.1-3.9-5.1h-32.9c-4.1 0-6.9 2.1-7.8 6zm70.2 68.4l35.6-133.1c1.2-4.7 5.5-7.9 10.4-7.9h18.9c4.5 0 7.7 4 6.5 8.3l-26.5 98.2c-5.1 20.7-24.2 34.5-44.9 34.5"],"creative-commons":[512,512,[],"f25e","M255.547 8C392.884 8 504 114.439 504 256.004 504 405.979 381.106 504 255.562 504 122.319 504 8 394.557 8 256.004 8 124.825 113.486 8 255.547 8zm.899 44.734c-120.341 0-203.727 100.568-203.727 203.278 0 106.515 88.984 202.394 203.727 202.394 101.528 0 202.821-79.442 202.821-202.387-.001-114.773-91.773-203.285-202.821-203.285zm-3.108 162.093l-33.225 17.275c-5.395-11.203-15.25-19.926-27.459-19.926-22.134 0-33.217 14.609-33.217 43.842 0 23.842 9.446 43.842 33.217 43.842 14.469 0 24.653-7.091 30.566-21.259l30.551 15.5c-12.813 23.899-36.887 38.975-65.101 38.975-43.162 0-73.959-27.272-73.959-77.052 0-49.541 32.706-77.059 72.634-77.059 30.714-.013 52.701 11.946 65.993 35.862zm143.044 0l-32.775 17.275c-5.517-11.482-15.324-19.926-27.9-19.926-22.142 0-33.225 14.609-33.225 43.842 0 23.906 9.502 43.842 33.225 43.842 14.454 0 24.645-7.091 30.543-21.259l31 15.5c-13.363 23.869-37.451 38.975-65.086 38.975-43.439 0-73.959-26.988-73.959-77.052 0-49.523 32.698-77.059 72.626-77.059 30.706-.013 52.569 11.946 65.551 35.862z"],css3:[512,512,[],"f13c","M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z"],"css3-alt":[384,512,[],"f38b","M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z"],cuttlefish:[440,512,[],"f38c","M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z"],"d-and-d":[576,512,[],"f38d","M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z"],dashcube:[448,512,[],"f210","M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z"],delicious:[448,512,[],"f1a5","M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192v176z"],deploydog:[512,512,[],"f38e","M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z"],deskpro:[480,512,[],"f38f","M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z"],deviantart:[320,512,[],"f1bd","M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z"],digg:[512,512,[],"f1a6","M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z"],"digital-ocean":[512,512,[],"f391","M256 504v-96.1c101.8 0 180.8-100.9 141.7-208-14.3-39.6-46.1-71.4-85.8-85.7-107.1-38.8-208.1 39.9-208.1 141.7H8C8 93.7 164.9-32.8 335 20.3c74.2 23.3 133.6 82.4 156.6 156.6C544.8 347.2 418.6 504 256 504zm.3-191.4h-95.6v95.6h95.6v-95.6zm-95.6 95.6H87v73.6h73.7v-73.6zM87 346.6H25.4v61.6H87v-61.6z"],discord:[448,512,[],"f392","M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z"],discourse:[448,512,[],"f393","M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z"],dochub:[416,512,[],"f394","M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z"],docker:[640,512,[],"f395","M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z"],draft2digital:[480,512,[],"f396","M369.9 425.4V371l47.1 27.2-47.1 27.2zM82.4 380.6c25.5-27.3 97.7-104.7 150.9-170 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7H82.4zm51.8-219.2c0 12.4-10 22.4-22.4 22.4-12.4 0-22.4-10-22.4-22.4 0-12.4 10-22.4 22.4-22.4 12.4 0 22.4 10.1 22.4 22.4M336 315.9v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480l144-81.9-144-82.2z"],dribbble:[512,512,[],"f17d","M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z"],"dribbble-square":[448,512,[],"f397","M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z"],dropbox:[528,512,[],"f16b","M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z"],drupal:[448,512,[],"f1a9","M319.5 114.7c-22.2-14-43.5-19.5-64.7-33.5-13-8.8-31.3-30-46.5-48.3-2.7 29.3-11.5 41.2-22 49.5-21.3 17-34.8 22.2-53.5 32.3C117 123 32 181.5 32 290.5 32 399.7 123.8 480 225.8 480 327.5 480 416 406 416 294c0-112.3-83-171-96.5-179.3zm2.5 325.6c-20.1 20.1-90.1 28.7-116.7 4.2-4.8-4.8.3-12 6.5-12 0 0 17 13.3 51.5 13.3 27 0 46-7.7 54.5-14 6.1-4.6 8.4 4.3 4.2 8.5zm-54.5-52.6c8.7-3.6 29-3.8 36.8 1.3 4.1 2.8 16.1 18.8 6.2 23.7-8.4 4.2-1.2-15.7-26.5-15.7-14.7 0-19.5 5.2-26.7 11-7 6-9.8 8-12.2 4.7-6-8.2 15.9-22.3 22.4-25zM360 405c-15.2-1-45.5-48.8-65-49.5-30.9-.9-104.1 80.7-161.3 42-38.8-26.6-14.6-104.8 51.8-105.2 49.5-.5 83.8 49 108.5 48.5 21.3-.3 61.8-41.8 81.8-41.8 48.7 0 23.3 109.3-15.8 106z"],dyalog:[416,512,[],"f399","M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z"],earlybirds:[480,512,[],"f39a","M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z"],edge:[512,512,[],"f282","M25.714 228.163c.111-.162.23-.323.342-.485-.021.162-.045.323-.065.485h-.277zm460.572 15.508c0-44.032-7.754-84.465-28.801-122.405C416.498 47.879 343.912 8.001 258.893 8.001 118.962 7.724 40.617 113.214 26.056 227.679c42.429-61.312 117.073-121.376 220.375-124.966 0 0 109.666 0 99.419 104.957H169.997c6.369-37.386 18.554-58.986 34.339-78.926-75.048 34.893-121.85 96.096-120.742 188.315.83 71.448 50.124 144.836 120.743 171.976 83.357 31.847 192.776 7.2 240.132-21.324V363.307c-80.864 56.494-270.871 60.925-272.255-67.572h314.073v-52.064z"],elementor:[448,512,[],"f430","M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z"],ember:[640,512,[],"f423","M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1c-1.9-43.8-44.2-27.6-49-24-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-18.3-11-32.8 12.1-32.8 12.1s54.5-60.7 42.5-112c-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5c-17.2-.8-28.5 18.8-28.5 18.8s-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7c11.6 2.1 16.4 1 36.5-47.9 11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2c6.7-23.6 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7c8.6 15.6 30.9 5.3 30.9 5.3s15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6c12.4 5.1 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z"],empire:[496,512,[],"f1d1","M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z"],envira:[448,512,[],"f299","M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z"],erlang:[640,512,[],"f39d","M21.7 246.4c-.1 86.8 29 159.5 78.7 212.1H0v-405h87.2c-41.5 50.2-65.6 116.2-65.5 192.9zM640 53.6h-83.6c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405zm-80.8 405s0-.1 0 0h-.2.2zm-3.1-405h.3l-.1-.1-.2.1zm-230.7 9.6c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2z"],ethereum:[320,512,[],"f42e","M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z"],etsy:[384,512,[],"f2d7","M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z"],expeditedssl:[496,512,[],"f23e","M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z"],facebook:[448,512,[],"f09a","M448 56.7v398.5c0 13.7-11.1 24.7-24.7 24.7H309.1V306.5h58.2l8.7-67.6h-67v-43.2c0-19.6 5.4-32.9 33.5-32.9h35.8v-60.5c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9h-58.4v67.6h58.4V480H24.7C11.1 480 0 468.9 0 455.3V56.7C0 43.1 11.1 32 24.7 32h398.5c13.7 0 24.8 11.1 24.8 24.7z"],"facebook-f":[264,512,[],"f39e","M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229"],"facebook-messenger":[448,512,[],"f39f","M224 32C15.9 32-77.5 278 84.6 400.6V480l75.7-42c142.2 39.8 285.4-59.9 285.4-198.7C445.8 124.8 346.5 32 224 32zm23.4 278.1L190 250.5 79.6 311.6l121.1-128.5 57.4 59.6 110.4-61.1-121.1 128.5z"],"facebook-square":[448,512,[],"f082","M448 80v352c0 26.5-21.5 48-48 48h-85.3V302.8h60.6l8.7-67.6h-69.3V192c0-19.6 5.4-32.9 33.5-32.9H384V98.7c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9H184v67.6h60.9V480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"],firefox:[480,512,[],"f269","M478.1 235.3c-.7-4.5-1.4-7.1-1.4-7.1s-1.8 2-4.7 5.9c-.9-10.7-2.8-21.2-5.8-31.6-3.7-12.9-8.5-25.4-14.5-37.4-3.8-8-8.2-15.6-13.3-22.8-1.8-2.7-3.7-5.4-5.6-7.9-8.8-14.4-19-23.3-30.7-40-7.6-12.8-12.9-26.9-15.4-41.6-3.2 8.9-5.7 18-7.4 27.3-12.1-12.2-22.5-20.8-28.9-26.7C319.4 24.2 323 9.1 323 9.1S264.7 74.2 289.9 142c8.7 23 23.8 43.1 43.4 57.9 24.4 20.2 50.8 36 64.7 76.6-11.2-21.3-28.1-39.2-48.8-51.5 6.2 14.7 9.4 30.6 9.3 46.5 0 61-49.6 110.5-110.6 110.4-8.3 0-16.5-.9-24.5-2.8-9.5-1.8-18.7-4.9-27.4-9.3-12.9-7.8-24-18.1-32.8-30.3l-.2-.3 2 .7c4.6 1.6 9.2 2.8 14 3.7 18.7 4 38.3 1.7 55.6-6.6 17.5-9.7 28-16.9 36.6-14h.2c8.4 2.7 15-5.5 9-14-10.4-13.4-27.4-20-44.2-17-17.5 2.5-33.5 15-56.4 2.9-1.5-.8-2.9-1.6-4.3-2.5-1.6-.9 4.9 1.3 3.4.3-5-2.5-9.8-5.4-14.4-8.6-.3-.3 3.5 1.1 3.1.8-5.9-4-11-9.2-15-15.2-4.1-7.4-4.5-16.4-1-24.1 2.1-3.8 5.4-6.9 9.3-8.7 3 1.5 4.8 2.6 4.8 2.6s-1.3-2.5-2.1-3.8c.3-.1.5 0 .8-.2 2.6 1.1 8.3 4 11.4 5.8 2.1 1.1 3.8 2.7 5.2 4.7 0 0 1-.5.3-2.7-1.1-2.7-2.9-5-5.4-6.6h.2c2.3 1.2 4.5 2.6 6.6 4.1 1.9-4.4 2.8-9.2 2.6-14 .2-2.6-.2-5.3-1.1-7.8-.8-1.6.5-2.2 1.9-.5-.2-1.3-.7-2.5-1.2-3.7v-.1s.8-1.1 1.2-1.5c1-1 2.1-1.9 3.4-2.7 7.2-4.5 14.8-8.4 22.7-11.6 6.4-2.8 11.7-4.9 12.8-5.6 1.6-1 3.1-2.2 4.5-3.5 5.3-4.5 9-10.8 10.2-17.7.1-.9.2-1.8.3-2.8v-1.5c-.9-3.5-6.9-6.1-38.4-9.1-11.1-1.8-20-10.1-22.5-21.1v.1c-.4 1.1-.9 2.3-1.3 3.5.4-1.2.8-2.3 1.3-3.5v-.2c6-15.7 16.8-29.1 30.8-38.3.8-.7-3.2.2-2.4-.5 2.7-1.3 5.4-2.5 8.2-3.5 1.4-.6-6-3.4-12.6-2.7-4 .2-8 1.2-11.7 2.8 1.6-1.3 6.2-3.1 5.1-3.1-8.4 1.6-16.5 4.7-23.9 9 0-.8.1-1.5.5-2.2-5.9 2.5-11 6.5-15 11.5.1-.9.2-1.8.2-2.7-2.7 2-5.2 4.3-7.3 6.9l-.1.1c-17.4-6.7-36.3-8.3-54.6-4.7l-.2-.1h.2c-3.8-3.1-7.1-6.7-9.7-10.9l-.2.1-.4-.2c-1.2-1.8-2.4-3.8-3.7-6-.9-1.6-1.8-3.4-2.7-5.2 0-.1-.1-.2-.2-.2-.4 0-.6 1.7-.9 1.3v-.1c-3.2-8.3-4.7-17.2-4.4-26.2l-.2.1c-5.1 3.5-9 8.6-11.1 14.5-.9 2.1-1.6 3.3-2.2 4.5v-.5c.1-1.1.6-3.3.5-3.1-.1.2-.2.3-.3.4-1.5 1.7-2.9 3.7-3.9 5.8-.9 1.9-1.7 3.9-2.3 5.9-.1.3 0-.3 0-1s.1-2 0-1.7l-.3.7c-6.7 14.9-10.9 30.8-12.4 47.1-.4 2.8-.6 5.6-.5 8.3v.2c-4.8 5.2-9 11-12.7 17.1-12.1 20.4-21.1 42.5-26.8 65.6 4-8.8 8.8-17.2 14.3-25.1C5.5 228.5 0 257.4 0 286.6c1.8-8.6 4.2-17 7-25.3-1.7 34.5 4.9 68.9 19.4 100.3 19.4 43.5 51.6 80 92.3 104.7 16.6 11.2 34.7 19.9 53.8 25.8 2.5.9 5.1 1.8 7.7 2.7-.8-.3-1.6-.7-2.4-1 22.6 6.8 46.2 10.3 69.8 10.3 83.7 0 111.3-31.9 113.8-35 4.1-3.7 7.5-8.2 9.9-13.3 1.6-.7 3.2-1.4 4.9-2.1l1-.5 1.9-.9c12.6-5.9 24.5-13.4 35.3-22.1 16.3-11.7 27.9-28.7 32.9-48.1 3-7.1 3.1-15 .4-22.2.9-1.4 1.7-2.8 2.7-4.3 18-28.9 28.2-61.9 29.6-95.9v-2.8c0-7.3-.6-14.5-1.9-21.6z"],"first-order":[448,512,[],"f2b0","M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z"],firstdraft:[384,512,[],"f3a1","M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z"],flickr:[448,512,[],"f16e","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z"],flipboard:[448,512,[],"f44d","M0 32v448h448V32H0zm175.7 175.7v184.4H87.8V119.9h87.8v87.8zm184.5 0h-87.9v96.6h-87.8v-87.8h87.8v-8.8h-87.8v-87.8h175.7v87.8z"],fly:[384,512,[],"f417","M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z"],"font-awesome":[448,512,[],"f2b4","M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-45.4 284.3c0 4.2-3.6 6-7.8 7.8-16.7 7.2-34.6 13.7-53.8 13.7-26.9 0-39.4-16.7-71.7-16.7-23.3 0-47.8 8.4-67.5 17.3-1.2.6-2.4.6-3.6 1.2V385c0 1.8 0 3.6-.6 4.8v1.2c-2.4 8.4-10.2 14.3-19.1 14.3-11.3 0-20.3-9-20.3-20.3V166.4c-7.8-6-13.1-15.5-13.1-26.3 0-18.5 14.9-33.5 33.5-33.5 18.5 0 33.5 14.9 33.5 33.5 0 10.8-4.8 20.3-13.1 26.3v18.5c1.8-.6 3.6-1.2 5.4-2.4 18.5-7.8 40.6-14.3 61.5-14.3 22.7 0 40.6 6 60.9 13.7 4.2 1.8 8.4 2.4 13.1 2.4 22.7 0 47.8-16.1 53.8-16.1 4.8 0 9 3.6 9 7.8v140.3z"],"font-awesome-alt":[448,512,[],"f35c","M397.8 67.8c7.8 0 14.3 6.6 14.3 14.3v347.6c0 7.8-6.6 14.3-14.3 14.3H50.2c-7.8 0-14.3-6.6-14.3-14.3V82.2c0-7.8 6.6-14.3 14.3-14.3h347.6m0-35.9H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-58.5 139.2c-6 0-29.9 15.5-52.6 15.5-4.2 0-8.4-.6-12.5-2.4-19.7-7.8-37-13.7-59.1-13.7-20.3 0-41.8 6.6-59.7 13.7-1.8.6-3.6 1.2-4.8 1.8v-17.9c7.8-6 12.5-14.9 12.5-25.7 0-17.9-14.3-32.3-32.3-32.3s-32.3 14.3-32.3 32.3c0 10.2 4.8 19.7 12.5 25.7v212.1c0 10.8 9 19.7 19.7 19.7 9 0 16.1-6 18.5-13.7V385c.6-1.8.6-3 .6-4.8V336c1.2 0 2.4-.6 3-1.2 19.7-8.4 43-16.7 65.7-16.7 31.1 0 43 16.1 69.3 16.1 18.5 0 36.4-6.6 52-13.7 4.2-1.8 7.2-3.6 7.2-7.8V178.3c1.8-4.1-2.3-7.1-7.7-7.1z"],"font-awesome-flag":[448,512,[],"f425","M444.373 359.424c0 7.168-6.144 10.24-13.312 13.312-28.672 12.288-59.392 23.552-92.16 23.552-46.08 0-67.584-28.672-122.88-28.672-39.936 0-81.92 14.336-115.712 29.696-2.048 1.024-4.096 1.024-6.144 2.048v77.824c0 21.405-16.122 34.816-33.792 34.816-19.456 0-34.816-15.36-34.816-34.816V102.4C12.245 92.16 3.029 75.776 3.029 57.344 3.029 25.6 28.629 0 60.373 0s57.344 25.6 57.344 57.344c0 18.432-8.192 34.816-22.528 45.056v31.744c4.124-1.374 58.768-28.672 114.688-28.672 65.27 0 97.676 27.648 126.976 27.648 38.912 0 81.92-27.648 92.16-27.648 8.192 0 15.36 6.144 15.36 13.312v240.64z"],fonticons:[448,512,[],"f280","M0 32v448h448V32H0zm167.4 196h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4zM364 414.7H261.3v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm-21.9-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6-21.9 24.2z"],"fonticons-fi":[384,512,[],"f3a2","M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z"],"fort-awesome":[512,512,[],"f286","M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z"],"fort-awesome-alt":[512,512,[],"f3a3","M211.7 241.1v51.7c0 2.1-1.6 3.7-3.7 3.7h-22.2c-2.1 0-3.7-1.6-3.7-3.7v-51.7c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7zm114.5-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm-29.1 263.2c-.9.1-1.7.3-2.6.4-1 .2-2.1.3-3.1.5-.9.1-1.8.3-2.8.4-1 .1-2 .3-3 .4-1 .1-2 .2-2.9.3-1 .1-1.9.2-2.9.3-1 .1-2.1.2-3.1.3-.9.1-1.8.2-2.7.2-1.1.1-2.3.1-3.4.2-.8 0-1.7.1-2.5.1-1.3.1-2.6.1-3.9.1-.7 0-1.4.1-2.1.1-2 0-4 .1-6 .1s-4 0-6-.1c-.7 0-1.4 0-2.1-.1-1.3 0-2.6-.1-3.9-.1-.8 0-1.7-.1-2.5-.1-1.1-.1-2.3-.1-3.4-.2-.9-.1-1.8-.1-2.7-.2-1-.1-2.1-.2-3.1-.3-1-.1-1.9-.2-2.9-.3-1-.1-2-.2-2.9-.3-1-.1-2-.2-3-.4-.9-.1-1.8-.3-2.8-.4-1-.1-2.1-.3-3.1-.5-.9-.1-1.7-.3-2.6-.4-65.6-10.9-122.5-47.7-160-99.4-.2-.2-.3-.5-.5-.7-.8-1.1-1.6-2.2-2.3-3.3-.3-.4-.6-.8-.8-1.2-.7-1.1-1.4-2.1-2.1-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.4-2.1-2-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.3-2.2-2-3.3-.2-.4-.5-.8-.7-1.2-2.4-4-4.6-8.1-6.8-12.2-.1-.2-.2-.3-.3-.5-.6-1.1-1.1-2.2-1.7-3.3-.3-.6-.6-1.1-.8-1.7-.5-1-1-2.1-1.5-3.1-.3-.7-.6-1.3-.9-2-.5-1-.9-2-1.4-3l-.9-2.1c-.4-1-.9-2-1.3-3-.3-.7-.6-1.5-.9-2.2l-1.2-3c-.3-.8-.6-1.5-.9-2.3-.4-1-.8-2-1.1-3-.3-.9-.6-1.8-1-2.8-.6-1.6-1.1-3.3-1.7-4.9-.3-.9-.6-1.8-.9-2.8-.3-.9-.5-1.8-.8-2.7-.3-.9-.6-1.9-.8-2.8-.3-.9-.5-1.8-.8-2.7-.3-1-.5-1.9-.8-2.9-.2-.9-.5-1.8-.7-2.7-.3-1-.5-2-.7-3-.2-.9-.4-1.7-.6-2.6-.2-1.1-.5-2.2-.7-3.2-.2-.8-.3-1.6-.5-2.4-.3-1.3-.5-2.7-.8-4-.1-.6-.2-1.1-.3-1.7l-.9-5.7c-.1-.6-.2-1.3-.3-1.9-.2-1.3-.4-2.6-.5-3.9-.1-.8-.2-1.5-.3-2.3-.1-1.2-.3-2.4-.4-3.6-.1-.8-.2-1.6-.2-2.4-.1-1.2-.2-2.4-.3-3.5-.1-.8-.1-1.6-.2-2.4-.1-1.2-.2-2.4-.2-3.7 0-.8-.1-1.5-.1-2.3-.1-1.3-.1-2.7-.2-4 0-.7 0-1.3-.1-2 0-2-.1-4-.1-6 0-53.5 16.9-103 45.8-143.6 2.3-3.2 4.7-6.4 7.1-9.5 4.9-6.2 10.1-12.3 15.6-18 2.7-2.9 5.5-5.7 8.4-8.4 2.9-2.7 5.8-5.4 8.8-8 4.5-3.9 9.1-7.6 13.9-11.2 1.6-1.2 3.2-2.4 4.8-3.5C140 34.2 171.7 20.1 206 13c16.1-3.3 32.9-5 50-5s33.8 1.7 50 5c34.3 7 66 21.1 93.6 40.7 1.6 1.2 3.2 2.3 4.8 3.5 4.8 3.6 9.4 7.3 13.9 11.2 12 10.4 23 21.9 32.8 34.4 2.5 3.1 4.8 6.3 7.1 9.5C487.1 153 504 202.5 504 256c0 2 0 4-.1 6 0 .7 0 1.3-.1 2 0 1.3-.1 2.7-.2 4 0 .8-.1 1.5-.1 2.3-.1 1.2-.1 2.4-.2.7-.1.8-.1 1.6-.2 2.4-.1 1.2-.2 2.4-.3 3.5-.1.8-.2 1.6-.2 2.4-.1 1.2-.3 2.4-.4 3.6-.1.8-.2 1.5-.3 2.3-.2 1.3-.4 2.6-.5 3.9-.1.6-.2 1.3-.3 1.9l-.9 5.7c-.1.6-.2 1.1-.3 1.7-.2 1.3-.5 2.7-.8 4-.2.8-.3 1.6-.5 2.4-.2 1.1-.5 2.2-.7 3.2-.2.9-.4 1.7-.6 2.6-.2 1-.5 2-.7 3-.2.9-.5 1.8-.7 2.7-.3 1-.5 1.9-.8 2.9-.2.9-.5 1.8-.8 2.7-.3.9-.6 1.9-.8 2.8-.3.9-.5 1.8-.8 2.7-.3.9-.6 1.8-.9 2.8-.5 1.6-1.1 3.3-1.7 4.9-.3.9-.6 1.8-1 2.8-.4 1-.7 2-1.1 3-.3.8-.6 1.5-.9 2.3l-1.2 3c-.3.7-.6 1.5-.9 2.2-.4 1-.8 2-1.3 3l-.9 2.1c-.4 1-.9 2-1.4 3-.3.7-.6 1.3-.9 2-.5 1-1 2.1-1.5 3.1-.3.6-.6 1.1-.8 1.7-.6 1.1-1.1 2.2-1.7 3.3-.1.2-.2.3-.3.5-2.2 4.1-4.4 8.2-6.8 12.2-.2.4-.5.8-.7 1.2-.7 1.1-1.3 2.2-2 3.3-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2 3.2-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2.1 3.2-.3.4-.6.8-.8 1.2-.8 1.1-1.5 2.2-2.3 3.3-.2.2-.3.5-.5.7-37.6 54.7-94.5 91.4-160.1 102.4zm117.3-86.2c13-13 24.2-27.4 33.6-42.9v-71.3c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7V326h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-4.8-6.5-3.7-9.5-3.7v-30.7c6.7-1.6 13.8-2.8 20.8-2.8 8.8 0 16.8 3.5 25.4 3.5 3.7 0 22.4-.9 22.4-6.5V93.4c0-2.1-1.6-3.7-3.7-3.7-4.2 0-12.2 3.5-19.4 3.5-7.9 0-16.9-3.5-26.3-3.5-6.5 0-12.9.9-19.2 2.3v-3.9c4.4-2.1 7.4-6.7 7.4-11.5 0-16.8-25.4-16.8-25.4 0 0 4.8 3 9.5 7.4 11.5v90.2c-3 0-9.5-1.1-9.5 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v144H93.5v-25.8c0-2.1-1.6-3.7-3.7-3.7H67.7c-2.1 0-3.7 1.6-3.7 3.7v71.3c9.4 15.5 20.6 29.9 33.6 42.9 20.6 20.6 44.5 36.7 71.2 48 13.9 5.9 28.2 10.3 42.9 13.2v-75.8c0-58.6 88.6-58.6 88.6 0v75.8c14.7-2.9 29-7.4 42.9-13.2 26.7-11.3 50.6-27.4 71.2-48"],forumbee:[448,512,[],"f211","M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z"],foursquare:[368,512,[],"f180","M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z"],"free-code-camp":[576,512,[],"f2c5","M69.3 144.5c-41 68.5-36.4 163 1 227C92.5 409.7 120 423.9 120 438c0 6.8-6 13-12.8 13C87.7 451 8 375.5 8 253.2c0-111.5 78-186 97.1-186 6 0 14.9 4.8 14.9 11.1 0 12.7-28.3 28.6-50.7 66.2zm195.8 213.8c4.5 1.8 12.3 5.2 12.3-1.2 0-2.7-2.2-2.9-4.3-3.6-8.5-3.4-14-7.7-19.1-15.2-8.2-12.1-10.1-24.2-10.1-38.6 0-32.1 44.2-37.9 44.2-70 0-12.3-7.7-15.9-7.7-19.3 0-2.2.7-2.2 2.9-2.2 8 0 19.1 13.3 22.5 19.8 2.2 4.6 2.4 6 2.4 11.1 0 7-.7 14.2-.7 21.3 0 27 31.9 19.8 31.9 6.8 0-6-3.6-11.6-3.6-17.4 0-.7 0-1.2.7-1.2 3.4 0 9.4 7.7 11.1 10.1 5.8 8.9 8.5 20.8 8.5 31.4 0 32.4-29.5 49-29.5 56 0 1 2.9 7.7 12.1 1.9 29.7-15.1 53.1-47.6 53.1-89.8 0-33.6-8.7-57.7-32.1-82.6-3.9-4.1-16.4-16.9-22.5-16.9-8.2 0 7.2 18.6 7.2 31.2 0 7.2-4.8 12.3-12.3 12.3-11.6 0-14.5-25.4-15.9-33.3-5.8-33.8-12.8-58.2-46.4-74.1-10.4-5-36.5-11.8-36.5-2.2 0 2.4 2.7 4.1 4.6 5.1 9.2 5.6 19.6 21.4 19.6 38.2 0 46.1-57.7 88.2-57.7 136.2-.2 40.3 28.1 72.6 65.3 86.2zM470.4 67c-6 0-14.4 6.5-14.4 12.6 0 8.7 12.1 19.6 17.6 25.4 81.6 85.1 78.6 214.3 17.6 291-7 8.9-35.3 35.3-35.3 43.5 0 5.1 8.2 11.4 13.2 11.4 25.4 0 98.8-80.8 98.8-185.7C568 145.9 491.8 67 470.4 67zm-42.3 323.1H167c-9.4 0-15.5 7.5-15.5 16.4 0 8.5 7 15.5 15.5 15.5h261.1c9.4 0 11.9-7.5 11.9-16.4 0-8.5-3.5-15.5-11.9-15.5z"],freebsd:[448,512,[],"f3a4","M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z"],"get-pocket":[448,512,[],"f265","M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z"],gg:[512,512,[],"f260","M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z"],"gg-circle":[512,512,[],"f261","M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z"],git:[448,512,[],"f1d3","M18.8 221.7c0 25.3 16.2 60 41.5 68.5v1c-18.8 8.3-24 50.6 1 65.8v1C34 367 16 384.3 16 414.2c0 51.5 48.8 65.8 91.5 65.8 52 0 90.7-18.7 90.7-76 0-70.5-101-44.5-101-82.8 0-13.5 7.2-18.7 19.7-21.3 41.5-7.7 67.5-40 67.5-82.2 0-7.3-1.5-14.2-4-21 6.7-1.5 13.2-3.3 19.7-5.5v-50.5c-17.2 6.8-35.7 11.8-54.5 11.8-53.8-31-126.8 1.3-126.8 69.2zm87.7 163.8c17 0 41.2 3 41.2 25 0 21.8-19.5 26.3-37.7 26.3-17.3 0-43.3-2.7-43.3-25.2.1-22.3 22.1-26.1 39.8-26.1zM103.3 256c-22 0-31.3-13-31.3-33.8 0-49.3 61-48.8 61-.5 0 20.3-8 34.3-29.7 34.3zM432 305.5v49c-13.3 7.3-30.5 9.8-45.5 9.8-53.5 0-59.8-42.2-59.8-85.7v-87.7h.5v-1c-7 0-7.3-1.6-24 1v-47.5h24c0-22.3.3-31-1.5-41.2h56.7c-2 13.8-1.5 27.5-1.5 41.2h51v47.5s-19.3-1-51-1V281c0 14.8 3.3 32.8 21.8 32.8 9.8 0 21.3-2.8 29.3-8.3zM286 68.7c0 18.7-14.5 36.2-33.8 36.2-19.8 0-34.5-17.2-34.5-36.2 0-19.3 14.5-36.7 34.5-36.7C272 32 286 50 286 68.7zm-6.2 74.5c-1.8 14.6-1.6 199.8 0 217.8h-55.5c1.6-18.1 1.8-203 0-217.8h55.5z"],"git-square":[448,512,[],"f1d2","M140.1 348.5c12.1 0 29.5 2.1 29.5 17.9 0 15.5-13.9 18.8-27 18.8-12.3 0-30.9-2-30.9-18s15.7-18.7 28.4-18.7zm-24.7-116.6c0 14.8 6.6 24.1 22.3 24.1 15.5 0 21.2-10 21.2-24.5.1-34.4-43.5-34.8-43.5.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-241 93.7c-12.3 4.8-25.5 8.4-38.9 8.4-38.5-22.1-90.7.9-90.7 49.5 0 18 11.6 42.9 29.6 48.9v.7c-13.4 5.9-17.1 36.1.7 47v.7c-19.5 6.4-32.3 18.8-32.3 40.2 0 36.8 34.8 47 65.4 47 37.1 0 64.8-13.4 64.8-54.3 0-50.4-72.1-31.8-72.1-59.1 0-9.6 5.2-13.4 14.1-15.2 29.6-5.5 48.2-28.6 48.2-58.7 0-5.2-1.1-10.2-2.9-15 4.8-1.1 9.5-2.3 14.1-3.9v-36.2zm56.8 1.8h-39.6c1.3 10.6 1.1 142.6 0 155.5h39.6c-1.1-12.8-1.2-145.1 0-155.5zm4.5-53.3c0-13.4-10-26.2-24.1-26.2-14.3 0-24.6 12.5-24.6 26.2 0 13.6 10.5 25.9 24.6 25.9 13.7 0 24.1-12.5 24.1-25.9zm104.3 53.3h-36.4c0-9.8-.4-19.6 1.1-29.5h-40.5c1.3 7.3 1.1 13.6 1.1 29.5h-17.1v33.9c11.9-1.9 12.1-.7 17.1-.7v.7h-.4v62.7c0 31.1 4.5 61.2 42.7 61.2 10.7 0 23-1.8 32.5-7v-35c-5.7 3.9-13.9 5.9-20.9 5.9-13.2 0-15.5-12.9-15.5-23.4v-65.2c22.7 0 36.4.7 36.4.7v-33.8z"],github:[496,512,[],"f09b","M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"],"github-alt":[480,512,[],"f113","M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"],"github-square":[448,512,[],"f092","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z"],gitkraken:[592,512,[],"f3a6","M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z"],gitlab:[512,512,[],"f296","M29.782 199.732L256 493.714 8.074 309.699c-6.856-5.142-9.712-13.996-7.141-21.993l28.849-87.974zm75.405-174.806c-3.142-8.854-15.709-8.854-18.851 0L29.782 199.732h131.961L105.187 24.926zm56.556 174.806L256 493.714l94.257-293.982H161.743zm349.324 87.974l-28.849-87.974L256 493.714l247.926-184.015c6.855-5.142 9.711-13.996 7.141-21.993zm-85.404-262.78c-3.142-8.854-15.709-8.854-18.851 0l-56.555 174.806h131.961L425.663 24.926z"],gitter:[384,512,[],"f426","M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z"],glide:[448,512,[],"f2a5","M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z"],"glide-g":[448,512,[],"f2a6","M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z"],gofore:[400,512,[],"f3a7","M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z"],goodreads:[448,512,[],"f3a8","M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z"],"goodreads-g":[384,512,[],"f3a9","M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z"],google:[488,512,[],"f1a0","M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"],"google-drive":[512,512,[],"f3aa","M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z"],"google-play":[512,512,[],"f3ab","M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z"],"google-plus":[496,512,[],"f2b3","M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm-70.7 372c-68.8 0-124-55.5-124-124s55.2-124 124-124c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1s34.2 78.1 77.2 78.1c32.6 0 64.9-19.1 70.1-53.3h-70.1v-42.6h116.9c1.3 6.8 1.9 13.6 1.9 20.7 0 70.8-47.5 121.2-118.8 121.2zm230.2-106.2v35.5H372v-35.5h-35.5v-35.5H372v-35.5h35.5v35.5h35.2v35.5h-35.2z"],"google-plus-g":[640,512,[],"f0d5","M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z"],"google-plus-square":[448,512,[],"f0d4","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z"],"google-wallet":[448,512,[],"f1ee","M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z"],gratipay:[496,512,[],"f184","M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z"],grav:[512,512,[],"f2d6","M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z"],gripfire:[384,512,[],"f3ac","M171.8 503.8c0-5.3 4.8-12.2 4.8-22.3 0-15.2-13-39.9-78.1-86.6C64.2 365.8 32 336.4 32 286.6 32 171.9 179.1 110.1 179.1 18c0-3.3-.2-6.7-.6-10 5.1 2.4 39.1 43.3 39.1 90.4 0 80.5-105.1 129.2-105.1 203 0 26.9 16.6 47.2 32.6 69.5 22.5 30.2 44.2 56.9 44.2 86.5-.1 14.5-4.4 29.7-17.5 46.4zm146-241.4c1.5 8.4 2.2 16.6 2.2 24.6 0 51.8-29.4 97.5-67.3 136.8-1 1-2.2 2.4-3.2 2.4-3.6 0-35.5-41.6-35.5-53.2 0 0 41.8-55.7 41.8-96.9 0-10.8-2.7-21.7-9.1-33.4-1.5 32.3-55.7 87.7-58.1 87.7-2.7 0-17.9-22-17.9-42.1 0-5.3 1-10.7 3.2-15.8 2.4-5.5 56.6-72 56.6-116.7 0-6.2-1-12-3.4-17.1l-4-7.2c16.7 6.5 82.6 64.1 94.7 130.9"],grunt:[384,512,[],"f3ad","M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm79.2 233.7c2.2 2.3 1.5 5.3.9 6.8-1.1 2.7-5.5 11.6-13 19.8-2.7 2.9-6.6 4.6-11 4.6-4.3 0-8.7-1.6-11.8-4.3-2.3-2.1-10.2-9.5-13.7-18.6-1.3-3.4-1-6.1.9-8.1 1.3-1.3 4-2.9 9.5-2.9H160c4.1 0 7 .9 8.8 2.7zm62.9-187.9c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm17.8-8.8c7.5-11.4 25.4-26 44.9-37 3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6-.1.1 0 0 0 0zM263 421.4c1.9 1.9 2.2 4.6.9 7.9-3.5 8.9-11.4 16.1-13.7 18.1-3.1 2.6-7.4 4.2-11.8 4.2s-8.3-1.6-11-4.5c-7.5-8-12-16.7-13-19.3-.6-1.5-1.3-4.4.9-6.7 1.7-1.8 4.7-2.7 8.9-2.7h29.4c5.4.1 8.1 1.7 9.4 3zm-98.3-251.5c9.9 6 18.8 8.1 27.3 8.3 8.5-.2 17.4-2.3 27.3-8.3 0 0-14.5 17.7-27.2 17.8h-.2c-12.7-.2-27.2-17.8-27.2-17.8zm184.5 147.4c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59z"],gulp:[256,512,[],"f3ae","M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z"],"hacker-news":[448,512,[],"f1d4","M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"],"hacker-news-square":[448,512,[],"f3af","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"],hips:[640,512,[],"f452","M0 80.2c0-1.8.9-2.7 2.7-2.7h40.9c1.9 0 2.8.9 2.8 2.7v81.2c15.2-7.7 31.7-11.5 49.8-11.4 24 .1 44.2 6.2 60.3 18 18.7 13.5 28 31.9 28 55.3v136.1c0 1.9-.9 2.8-2.7 2.8h-27.3c-9.1 0-16.4-7.3-16.4-16.3V223.3c0-.9 2.7-27-45.8-27-48.6 0-45.8 26.2-45.8 27v136.1c0 1.9-.9 2.8-2.8 2.8h-41c-1.8 0-2.7-.9-2.7-2.8V80.2zm497.7 221.5c13.7 10.2 34.1 19.1 58.4 19.1 23.3 0 32.8-4.5 36.5-13.6 3-7.9-.6-16.1-12.2-21.2l-53.6-23.5c-21.4-9.4-33.8-24-37.2-43.6-5.7-33.7 22.2-53.3 22.7-53.7 13.2-9.6 32-15.4 58.5-15.4 19 0 37.4 3.3 55.1 9.9 1.3.5 1.9 1.3 1.9 2.6V207c0 2.1-2.3 3.4-4 2.4-39.7-20.7-76.6-12.3-84-6.8-6.6 4.9-6 12.5 2.6 16.1L600 244c16.5 7.1 28.1 18.4 34.9 34.1 5.5 12.6 6.6 25.6 3.1 39.1-9.6 36.9-44.9 45.5-45.6 45.8-10.5 3.1-23.6 4.3-36.3 4.3-16.6 0-32.6-2.7-48.2-8.2-9.7-3.4-14.6-10.3-14.6-20.7V304c0-2.1 2.3-3.7 4.4-2.3zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zm-124.6 38.7c0 1.9-.9 2.8-2.8 2.8h-40.9c-1.6 0-2.7-1.4-2.7-2.8V157.6c0-1.4 1.1-2.8 2.7-2.8h40.9c1.9 0 2.8.9 2.8 2.8v201.8M228.3 72.5c15.9 0 28.9 12.7 28.9 28.9 0 15.8-12.7 28.9-28.9 28.9s-28.9-13.3-28.9-28.9c.1-16 13-28.9 28.9-28.9"],"hire-a-helper":[512,512,[],"f3b0","M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z"],hooli:[640,512,[],"f427","M508.4 352h57.9V156.7L508.4 184v168zm73.7-110.5V352H640V241.5h-57.9zm-250.7-8.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.9 110.9v-31c-48.8-54.6-39-76.1-35.3-79.2 13.5-11.4 37.5-8 64.4 2.1L65.2 184v63.3c13.1 14.7 30.5 31.5 53.5 50.4l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zm-39.7 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm185.7-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm173.5-73c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zM144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8v16zm-21.4 0v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.5-21.7-38.5-31.5V352h57.9zm59.7.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3v5.3l-19.4.8z"],hotjar:[448,512,[],"f3b1","M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z"],houzz:[320,512,[],"f27c","M12.2 256L160 341.1 12.2 426.6V256M160 512l147.8-85.4V256L160 341.1V512zm0-512L12.2 85.4V256L160 170.6V0zm0 170.6L307.8 256V85.4L160 170.6z"],html5:[384,512,[],"f13b","M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z"],hubspot:[512,512,[],"f3b2","M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z"],imdb:[448,512,[],"f2d8","M350.5 288.7c0 5.4 1.6 14.4-6.2 14.4-1.6 0-3-.8-3.8-2.4-2.2-5.1-1.1-44.1-1.1-44.7 0-3.8-1.1-12.7 4.9-12.7 7.3 0 6.2 7.3 6.2 12.7v32.7zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2.3 10.3-8.7 10.3-18.4v-49.3zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM21.3 228.8c-.1.1-.2.3-.3.4h.3v-.4zM97 192H64v127.8h33V192zm113.3 0h-43.1l-7.6 59.9c-2.7-20-5.4-40.1-8.7-59.9h-42.8v127.8h29v-84.5l12.2 84.5h20.6l11.6-86.4v86.4h28.7V192zm86.3 45.3c0-8.1.3-16.8-1.4-24.4-4.3-22.5-31.4-20.9-49-20.9h-24.6v127.8c86.1.1 75 6 75-82.5zm85.9 17.3c0-17.3-.8-30.1-22.2-30.1-8.9 0-14.9 2.7-20.9 9.2V192h-31.7v127.8h29.8l1.9-8.1c5.7 6.8 11.9 9.8 20.9 9.8 19.8 0 22.2-15.2 22.2-30.9v-36z"],instagram:[448,512,[],"f16d","M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"],"internet-explorer":[512,512,[],"f26b","M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z"],ioxhost:[640,512,[],"f208","M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z"],itunes:[448,512,[],"f3b4","M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z"],"itunes-note":[384,512,[],"f3b5","M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z"],jenkins:[512,512,[],"f3b6","M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z"],joget:[496,512,[],"f3b7","M227.5 468.7c-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1M66.1 143.9C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9-55.5-1.4-81.7-20.8-58.5-48.2 23.2-27.4 51.1-40.7 68.9-51.2 17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1m-29.2-18c-71.9 116.6-35.6 269.3 81 341.2 116.6 71.9 269.3 35.6 341.2-80.9 71.9-116.6 35.6-269.4-81-341.2-40.5-25.1-85.5-37-129.9-37C165 8 83.8 49.9 36.9 125.9m244.4 110.4c-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5c10.5-6.4 31.9-14 13.4-24.6-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6"],joomla:[448,512,[],"f1aa","M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z"],js:[448,512,[],"f3b8","M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"],"js-square":[448,512,[],"f3b9","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"],jsfiddle:[576,512,[],"f1cc","M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z"],keycdn:[512,512,[],"f3ba","M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160"],kickstarter:[448,512,[],"f3bb","M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z"],"kickstarter-k":[384,512,[],"f3bc","M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z"],korvue:[446,512,[],"f42f","M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z"],laravel:[640,512,[],"f3bd","M637.5 241.6c-4.2-4.8-62.8-78.1-73.1-90.5-10.3-12.4-15.4-10.2-21.7-9.3-6.4.9-80.5 13.4-89.1 14.8-8.6 1.5-14 4.9-8.7 12.3 4.7 6.6 53.4 75.7 64.2 90.9l-193.7 46.4L161.2 48.7c-6.1-9.1-7.4-12.3-21.4-11.6-14 .6-120.9 9.5-128.5 10.2-7.6.6-16 4-8.4 22s129 279.6 132.4 287.2c3.4 7.6 12.2 20 32.8 15 21.1-5.1 94.3-24.2 134.3-34.7 21.1 38.3 64.2 115.9 72.2 127 10.6 14.9 18 12.4 34.3 7.4 12.8-3.9 199.6-71.1 208-74.5 8.4-3.5 13.6-5.9 7.9-14.4-4.2-6.2-53.5-72.2-79.3-106.8 17.7-4.7 80.6-21.4 87.3-23.3 7.9-2 9-5.8 4.7-10.6zm-352.2 72c-2.3.5-110.8 26.5-116.6 27.8-5.8 1.3-5.8.7-6.5-1.3-.7-2-129-266.7-130.8-270-1.8-3.3-1.7-5.9 0-5.9s102.5-9 106-9.2c3.6-.2 3.2.6 4.5 2.8 0 0 142.2 245.4 144.6 249.7 2.6 4.3 1.1 5.6-1.2 6.1zm306 57.4c1.7 2.7 3.5 4.5-2 6.4-5.4 2-183.7 62.1-187.1 63.6-3.5 1.5-6.2 2-10.6-4.5s-62.4-106.8-62.4-106.8L518 280.6c4.7-1.5 6.2-2.5 9.2 2.2 2.9 4.8 62.4 85.5 64.1 88.2zm12.1-134.1c-4.2.9-73.6 18.1-73.6 18.1l-56.7-77.8c-1.6-2.3-2.9-4.5 1.1-5s68.4-12.2 71.3-12.8c2.9-.7 5.4-1.5 9 3.4 3.6 4.9 52.6 67 54.5 69.4 1.8 2.3-1.4 3.7-5.6 4.7z"],lastfm:[512,512,[],"f202","M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z"],"lastfm-square":[448,512,[],"f203","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z"],leanpub:[576,512,[],"f212","M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z"],less:[640,512,[],"f41d","M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z"],line:[448,512,[],"f3c0","M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1.5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9.3 1.6.9 2.2.6.5 1.3.9 2.2.9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8.1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z"],linkedin:[448,512,[],"f08c","M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"],"linkedin-in":[448,512,[],"f0e1","M100.3 480H7.4V180.9h92.9V480zM53.8 140.1C24.1 140.1 0 115.5 0 85.8 0 56.1 24.1 32 53.8 32c29.7 0 53.8 24.1 53.8 53.8 0 29.7-24.1 54.3-53.8 54.3zM448 480h-92.7V334.4c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7V480h-92.8V180.9h89.1v40.8h1.3c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3V480z"],linode:[448,512,[],"f2b8","M437.4 226.3c-.3-.9-.9-1.4-1.4-2l-70-38.6c-.9-.6-2-.6-3.1 0l-58.9 36c-.9.6-1.4 1.7-1.4 2.6l-.9 31.4-24-16c-.9-.6-2.3-.6-3.1 0L240 260.9l-1.4-35.1c0-.9-.6-2-1.4-2.3l-36-24.3 33.7-17.4c1.1-.6 1.7-1.7 1.7-2.9l-5.7-132.3c0-.9-.9-2-1.7-2.6L138.6.3c-.9-.3-1.7-.3-2.3-.3L12.6 38.6c-1.4.6-2.3 2-2 3.7L38 175.4c.9 3.4 34 27.4 38.6 30.9l-26.9 12.9c-1.4.9-2 2.3-1.7 3.4l20.6 100.3c.6 2.9 23.7 23.1 27.1 26.3l-17.4 10.6c-.9.6-1.7 2-1.4 3.1 1.4 7.1 15.4 77.7 16.9 79.1l65.1 69.1c.6.6 1.4.6 2.3.9.6 0 1.1-.3 1.7-.6l83.7-66.9c.9-.6 1.1-1.4 1.1-2.3l-2-46 28 23.7c1.1.9 2.9.9 4 0l66.9-53.4c.9-.6 1.1-1.4 1.1-2.3l2.3-33.4 20.3 14c1.1.9 2.6.9 3.7 0l54.6-43.7c.6-.3 1.1-1.1 1.1-2 .9-6.5 10.3-70.8 9.7-72.8zm-204.8 4.8l4 92.6-90.6 61.2-14-96.6 100.6-57.2zm-7.7-180l5.4 126-106.6 55.4L104 97.7l120.9-46.6zM44 173.1L18 48l79.7 49.4 19.4 132.9L44 173.1zm30.6 147.8L55.7 230l70 58.3 13.7 93.4-64.8-60.8zm24.3 117.7l-13.7-67.1 61.7 60.9 9.7 67.4-57.7-61.2zm64.5 64.5l-10.6-70.9 85.7-61.4 3.1 70-78.2 62.3zm82-115.1c0-3.4.9-22.9-2-25.1l-24.3-20 22.3-14.9c2.3-1.7 1.1-5.7 1.1-8l29.4 22.6.6 68.3-27.1-22.9zm94.3-25.4l-60.9 48.6-.6-68.6 65.7-46.9-4.2 66.9zm27.7-25.7l-19.1-13.4 2-34c.3-.9-.3-2-1.1-2.6L308 259.7l.6-30 64.6 40.6-5.8 66.6zm54.6-39.8l-48.3 38.3 5.7-65.1 51.1-36.6-8.5 63.4z"],linux:[448,512,[],"f17c","M196.1 123.6c-.2-1.4 1.9-2.3 3.2-2.9 1.7-.7 3.9-1 5.5-.1.4.2.8.7.6 1.1-.4 1.2-2.4 1-3.5 1.6-1 .5-1.8 1.7-3 1.7-1 .1-2.7-.4-2.8-1.4zm24.7-.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm214.7 310.2c-.5 8.2-6.5 13.8-13.9 18.3-14.9 9-37.3 15.8-50.9 32.2l-2.6-2.2 2.6 2.2c-14.2 16.9-31.7 26.6-48.3 27.9-16.5 1.3-32-6.3-40.3-23v-.1c-1.1-2.1-1.9-4.4-2.5-6.7-21.5 1.2-40.2-5.3-55.1-4.1-22 1.2-35.8 6.5-48.3 6.6-4.8 10.6-14.3 17.6-25.9 20.2-16 3.7-36.1 0-55.9-10.4l1.6-3-1.6 3c-18.5-9.8-42-8.9-59.3-12.5-8.7-1.8-16.3-5-20.1-12.3-3.7-7.3-3-17.3 2.2-31.7 1.7-5.1.4-12.7-.8-20.8-.6-3.9-1.2-7.9-1.2-11.8 0-4.3.7-8.5 2.8-12.4 4.5-8.5 11.8-12.1 18.5-14.5 6.7-2.4 12.8-4 17-8.3 5.2-5.5 10.1-14.4 16.6-20.2-2.6-17.2.2-35.4 6.2-53.3 12.6-37.9 39.2-74.2 58.1-96.7 16.1-22.9 20.8-41.3 22.5-64.7C158 103.4 132.4-.2 234.8 0c80.9.1 76.3 85.4 75.8 131.3-.3 30.1 16.3 50.5 33.4 72 15.2 18 35.1 44.3 46.5 74.4 9.3 24.6 12.9 51.8 3.7 79.1 1.4.5 2.8 1.2 4.1 2 1.4.8 2.7 1.8 4 2.9 6.6 5.6 8.7 14.3 10.5 22.4 1.9 8.1 3.6 15.7 7.2 19.7 11.1 12.4 15.9 21.5 15.5 29.7zM220.8 109.1c3.6.9 8.9 2.4 13 4.4-2.1-12.2 4.5-23.5 11.8-23 8.9.3 13.9 15.5 9.1 27.3-.8 1.9-2.8 3.4-3.9 4.6 6.7 2.3 11 4.1 12.6 4.9 7.9-9.5 10.8-26.2 4.3-40.4-9.8-21.4-34.2-21.8-44 .4-3.2 7.2-3.9 14.9-2.9 21.8zm-46.2 18.8c7.8-5.7 6.9-4.7 5.9-5.5-8-6.9-6.6-27.4 1.8-28.1 6.3-.5 10.8 10.7 9.6 19.6 3.1-2.1 6.7-3.6 10.2-4.6 1.7-19.3-9-33.5-19.1-33.5-18.9 0-24 37.5-8.4 52.1zm-9.4 20.9c1.5 4.9 6.1 10.5 14.7 15.3 7.8 4.6 12 11.5 20 15 2.6 1.1 5.7 1.9 9.6 2.1 18.4 1.1 27.1-11.3 38.2-14.9 11.7-3.7 20.1-11 22.7-18.1 3.2-8.5-2.1-14.7-10.5-18.2-11.3-4.9-16.3-5.2-22.6-9.3-10.3-6.6-18.8-8.9-25.9-8.9-14.4 0-23.2 9.8-27.9 14.2-.5.5-7.9 5.9-14.1 10.5-4.2 3.3-5.6 7.4-4.2 12.3zm-33.5 252.8L112.1 366c-6.8-9.2-13.8-14.8-21.9-16-7.7-1.2-12.6 1.4-17.7 6.9-4.8 5.1-8.8 12.3-14.3 18-7.8 6.5-9.3 6.2-19.6 9.9-6.3 2.2-11.3 4.6-14.8 11.3-2.7 5-2.1 12.2-.9 20 1.2 7.9 3 16.3.6 23.9v.2c-5 13.7-5 21.7-2.6 26.4 7.9 15.4 46.6 6.1 76.5 21.9 31.4 16.4 72.6 17.1 75.3-18 2.1-20.5-31.5-49-41-68.9zm153.9 35.8c3.2-11 6.3-21.3 6.8-29 .8-15.2 1.6-28.7 4.4-39.9 3.1-12.6 9.3-23.1 21.4-27.3 2.3-21.1 18.7-21.1 38.3-12.5 18.9 8.5 26 16 22.8 26.1 1 0 2-.1 4.2 0 5.2-16.9-14.3-28-30.7-34.8 2.9-12 2.4-24.1-.4-35.7-6-25.3-22.6-47.8-35.2-59-2.3-.1-2.1 1.9 2.6 6.5 11.6 10.7 37.1 49.2 23.3 84.9-3.9-1-7.6-1.5-10.9-1.4-5.3-29.1-17.5-53.2-23.6-64.6-11.5-21.4-29.5-65.3-37.2-95.7-4.5 6.4-12.4 11.9-22.3 15-4.7 1.5-9.7 5.5-15.9 9-13.9 8-30 8.8-42.4-1.2-4.5-3.6-8-7.6-12.6-10.3-1.6-.9-5.1-3.3-6.2-4.1-2 37.8-27.3 85.3-39.3 112.7-8.3 19.7-13.2 40.8-13.8 61.5-21.8-29.1-5.9-66.3 2.6-82.4 9.5-17.6 11-22.5 8.7-20.8-8.6 14-22 36.3-27.2 59.2-2.7 11.9-3.2 24 .3 35.2 3.5 11.2 11.1 21.5 24.6 29.9 0 0 24.8 14.3 38.3 32.5 7.4 10 9.7 18.7 7.4 24.9-2.5 6.7-9.6 8.9-16.7 8.9 4.8 6 10.3 13 14.4 19.6 37.6 25.7 82.2 15.7 114.3-7.2zM415 408.5c-10-11.3-7.2-33.1-17.1-41.6-6.9-6-13.6-5.4-22.6-5.1-7.7 8.8-25.8 19.6-38.4 16.3-11.5-2.9-18-16.3-18.8-29.5-.3.2-.7.3-1 .5-7.1 3.9-11.1 10.8-13.7 21.1-2.5 10.2-3.4 23.5-4.2 38.7-.7 11.8-6.2 26.4-9.9 40.6-3.5 13.2-5.8 25.2-1.1 36.3 7.2 14.5 19.5 20.4 33.7 19.3 14.2-1.1 30.4-9.8 43.6-25.5 22-26.6 62.3-29.7 63.2-46.5.3-5.1-3.1-13-13.7-24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4 3.9-3.4 5.9-6.3 3.1-6.6-2.8-.3-2.6 2.6-6 5.1-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2-10.4 0-18.7-4.8-24.9-9.7-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"],lyft:[512,512,[],"f3c3","M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z"],magento:[448,512,[],"f3c4","M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z"],maxcdn:[512,512,[],"f136","M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z"],medapps:[320,512,[],"f3c6","M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z"],medium:[448,512,[],"f23a","M0 32v448h448V32H0zm372.2 106.1l-24 23c-2.1 1.6-3.1 4.2-2.7 6.7v169.3c-.4 2.6.6 5.2 2.7 6.7l23.5 23v5.1h-118V367l24.3-23.6c2.4-2.4 2.4-3.1 2.4-6.7V199.8l-67.6 171.6h-9.1L125 199.8v115c-.7 4.8 1 9.7 4.4 13.2l31.6 38.3v5.1H71.2v-5.1l31.6-38.3c3.4-3.5 4.9-8.4 4.1-13.2v-133c.4-3.7-1-7.3-3.8-9.8L75 138.1V133h87.3l67.4 148L289 133.1h83.2v5z"],"medium-m":[512,512,[],"f3c7","M71.5 142.3c.6-5.9-1.7-11.8-6.1-15.8L20.3 72.1V64h140.2l108.4 237.7L364.2 64h133.7v8.1l-38.6 37c-3.3 2.5-5 6.7-4.3 10.8v272c-.7 4.1 1 8.3 4.3 10.8l37.7 37v8.1H307.3v-8.1l39.1-37.9c3.8-3.8 3.8-5 3.8-10.8V171.2L241.5 447.1h-14.7L100.4 171.2v184.9c-1.1 7.8 1.5 15.6 7 21.2l50.8 61.6v8.1h-144v-8L65 377.3c5.4-5.6 7.9-13.5 6.5-21.2V142.3z"],medrt:[544,512,[],"f3c8","M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z"],meetup:[512,512,[],"f2e0","M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z"],microsoft:[448,512,[],"f3ca","M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"],mix:[448,512,[],"f3cb","M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z"],mixcloud:[640,512,[],"f289","M424.43 219.729C416.124 134.727 344.135 68 256.919 68c-72.266 0-136.224 46.516-159.205 114.074-54.545 8.029-96.63 54.822-96.63 111.582 0 62.298 50.668 112.966 113.243 112.966h289.614c52.329 0 94.969-42.362 94.969-94.693 0-45.131-32.118-83.063-74.48-92.2zm-20.489 144.53H114.327c-39.04 0-70.881-31.564-70.881-70.604s31.841-70.604 70.881-70.604c18.827 0 36.548 7.475 49.838 20.766 19.963 19.963 50.133-10.227 30.18-30.18-14.675-14.398-32.672-24.365-52.053-29.349 19.935-44.3 64.79-73.926 114.628-73.926 69.496 0 125.979 56.483 125.979 125.702 0 13.568-2.215 26.857-6.369 39.594-8.943 27.517 32.133 38.939 40.147 13.29 2.769-8.306 4.984-16.889 6.369-25.472 19.381 7.476 33.502 26.303 33.502 48.453 0 28.795-23.535 52.33-52.607 52.33zm235.069-52.33c0 44.024-12.737 86.386-37.102 122.657-4.153 6.092-10.798 9.414-17.72 9.414-16.317 0-27.127-18.826-17.443-32.949 19.381-29.349 29.903-63.682 29.903-99.122s-10.521-69.773-29.903-98.845c-15.655-22.831 19.361-47.24 35.163-23.534 24.366 35.993 37.102 78.356 37.102 122.379zm-70.88 0c0 31.565-9.137 62.021-26.857 88.325-4.153 6.091-10.798 9.136-17.72 9.136-17.201 0-27.022-18.979-17.443-32.948 13.013-19.104 19.658-41.255 19.658-64.513 0-22.981-6.645-45.408-19.658-64.512-15.761-22.986 19.008-47.095 35.163-23.535 17.719 26.026 26.857 56.483 26.857 88.047z"],mizuni:[496,512,[],"f3cc","M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z"],modx:[448,512,[],"f285","M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z"],monero:[496,512,[],"f3d0","M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"],napster:[496,512,[],"f3d2","M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z"],"nintendo-switch":[448,512,[],"f418","M95.9 33.5c-44.6 8-80.5 41-91.8 84.4C0 133.6-.3 142.8.2 264.4.4 376 .5 378.6 2.4 387.3c10.3 46.5 43.3 79.6 90.3 90.5 6.1 1.4 13.9 1.7 64.1 1.9 51.9.4 57.3.3 58.7-1.1 1.4-1.4 1.5-19.3 1.5-222.2 0-150.5-.3-221.3-.9-222.6-.9-1.7-2.5-1.8-56.9-1.7-44.2.1-57.5.4-63.3 1.4zm83.9 222.6V444l-37.8-.5c-34.8-.4-38.5-.6-45.5-2.3-29.9-7.7-52-30.7-58.3-60.7-2-9.4-2-240.1-.1-249.3 5.6-26.1 23.7-47.7 48-57.4 12.2-4.9 17.9-5.5 57.6-5.6l35.9-.1v188zm-75.9-131.2c-5.8 1.1-14.7 5.6-19.5 9.7-9.7 8.4-14.6 20.4-13.8 34.5.4 7.3.8 9.3 3.8 15.2 4.4 9 10.9 15.6 19.9 20 6.2 3.1 7.8 3.4 15.9 3.7 7.3.3 9.9 0 14.8-1.7 20.1-6.8 32.3-26.3 28.8-46.4-3.9-23.7-26.6-39.7-49.9-35zm158.2-92.3c-.4.3-.6 100.8-.6 223.5 0 202.3.1 222.8 1.5 223.4 2.5.9 74.5.6 83.4-.4 37.7-4.3 71-27.2 89-61.2 2.3-4.4 5.4-11.7 7-16.2 5.8-17.4 5.7-12.8 5.7-146.1 0-106.4-.2-122.3-1.5-129-9.2-48.3-46.1-84.8-94.5-93.1-6.5-1.1-16.5-1.4-48.8-1.4-22.4-.1-40.9.2-41.2.5zm99.1 202.1c14.5 3.8 26.3 14.8 31.2 28.9 3.1 8.7 3 21.5-.1 29.5-5.7 14.7-16.8 25-31.1 28.8-23.2 6-47.9-8-54.6-31-2-7-1.9-18.9.4-26.2 6.9-22.7 31-36.1 54.2-30z"],node:[640,512,[],"f419","M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z"],"node-js":[448,512,[],"f3d3","M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"],npm:[576,512,[],"f3d4","M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z"],ns8:[640,512,[],"f3d5","M187.1 159.9l-34.2 113.7-54.5-113.7H49L0 320h44.9L76 213.5 126.6 320h56.9L232 159.9h-44.9zm452.5-.9c-2.9-18-23.9-28.1-42.1-31.3-44.6-7.8-101.9 16.3-88.5 58.8v.1c-43.8 8.7-74.3 26.8-94.2 48.2-3-9.8-13.6-16.6-34-16.6h-87.6c-9.3 0-12.9-2.3-11.5-7.4 1.6-5.5 1.9-6.8 3.7-12.2 2.1-6.4 7.8-7.1 13.3-7.1h133.5l9.7-31.5c-139.7 0-144.5-.5-160.1 1.2-12.3 1.3-23.5 4.8-30.6 15-6.8 9.9-14.4 35.6-17.6 47.1-5.4 19.4-.6 28.6 32.8 28.6h87.3c7.8 0 8.8 2.7 7.7 6.6-1.1 4.4-2.8 10-4.5 14.6-1.6 4.2-4.7 7.4-13.8 7.4H216.3L204.7 320c139.9 0 145.3-.6 160.9-2.3 6.6-.7 13-2.1 18.5-4.9.2 3.7.5 7.3 1.2 10.8 5.4 30.5 27.4 52.3 56.8 59.5 48.6 11.9 108.7-16.8 135.1-68 18.7-36.2 14.1-76.2-3.4-105.5h.1c29.6-5.9 70.3-22 65.7-50.6zM530.7 263.7c-5.9 29.5-36.6 47.8-61.6 43.9-30.9-4.8-38.5-39.5-14.1-64.8 16.2-16.8 45.2-24 68.5-26.9 6.7 14.1 10.3 32 7.2 47.8zm21.8-83.1c-4.2-6-9.8-18.5-2.5-26.3 6.7-7.2 20.9-10.1 31.8-7.7 15.3 3.4 19.7 15.9 4.9 24.4-10.7 6.1-23.6 8.1-34.2 9.6z"],nutritionix:[400,512,[],"f3d6","M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z"],odnoklassniki:[320,512,[],"f263","M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z"],"odnoklassniki-square":[448,512,[],"f264","M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z"],opencart:[640,512,[],"f23d","M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z"],openid:[448,512,[],"f19b","M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z"],opera:[496,512,[],"f26a","M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z"],"optin-monster":[576,512,[],"f23c","M550.671 450.303c0 11.62-15.673 19.457-32.158 14.863-12.16-3.243-31.346-17.565-36.211-27.294-5.674-11.62 4.054-32.698 18.916-30.806 15.674 1.621 49.453 25.401 49.453 43.237zM372.86 75.223c-3.783-72.151-100.796-79.718-125.928-23.51 44.588-24.321 90.257-15.673 125.928 23.51zM74.795 407.066c-15.673 1.621-49.452 25.401-49.452 43.237 0 11.62 15.673 19.457 32.157 14.863 12.16-3.243 31.076-17.565 35.94-27.294 5.946-11.62-3.782-32.698-18.645-30.806zm497.765 14.322c1.081 3.513 1.892 7.026 1.892 10.809.81 31.616-44.317 64.045-73.503 65.125-17.295.81-34.59-8.377-42.696-23.51-113.497 4.053-226.994 4.864-340.22 0-8.377 15.133-25.672 24.05-42.967 23.51-28.915-1.081-74.043-33.509-73.503-65.125.27-3.783.811-7.296 1.892-10.809-5.566-9.463-4.845-15.282 5.405-11.62 3.243-5.134 7.026-9.458 11.08-13.782-2.57-10.917 1.27-14.094 11.079-9.188 4.594-3.243 9.998-6.485 15.944-9.188 0-15.757 11.839-11.131 17.295-5.675 12.467-1.78 20.129.709 26.753 5.675v-19.726c-12.987 0-40.641-11.375-45.94-36.212-4.974-20.725 2.607-38.075 25.132-47.56.81-5.945 8.107-14.052 14.862-15.944 7.567-1.892 12.431 4.594 14.052 10.269 7.425 0 17.757 1.465 21.078 8.107 5.405-.541 11.079-1.352 16.484-1.892-2.432-1.892-5.134-3.513-8.107-4.594-5.134-8.917-13.782-11.079-24.591-11.62 0-.81 0-1.621.27-2.702-19.727-.541-44.048-5.675-54.857-17.835-21.321-23.638-15.935-83.577 12.16-103.498 8.377-5.675 21.618-.811 22.699 9.728 2.425 20.598.399 26.833 26.212 25.942 8.107-7.836 16.755-14.592 26.483-19.997-14.862-1.352-28.914 1.621-43.778 3.783 12.752-12.48 23.953-25.442 56.748-42.427 23.511-11.89 49.993-20.808 76.205-23.239-18.646-7.837-39.993-11.891-59.721-16.484 76.475-16.214 174.569-22.159 244.289 37.562 18.105 15.403 32.427 36.211 42.696 59.992 39.799 4.853 36.47-5.581 38.643-25.132 1.081-10.269 14.322-15.403 22.699-9.458 14.862 10.539 22.159 30.806 24.59 48.101 2.162 17.835.27 41.345-12.43 55.127-10.809 12.16-34.32 17.565-53.776 18.105v2.703c-11.08.27-20.268 2.432-25.673 11.62-2.972 1.081-5.674 2.703-8.377 4.594 5.675.54 11.35 1.351 16.755 1.891 1.869-5.619 12.535-8.377 21.077-8.377 1.621-5.405 6.756-11.89 14.052-10.269s14.052 9.998 14.863 15.944c10.809 4.324 22.159 12.16 25.131 25.672 1.892 8.107 1.621 15.133.27 21.888-5.726 25.262-33.361 36.212-45.939 36.212 0 6.756 0 13.241-.27 19.726 8.01-6.006 16.367-7.158 26.752-5.675 5.919-5.919 17.565-9.41 17.565 5.675 5.675 2.703 11.349 5.945 15.944 9.188 10.1-5.051 13.669-.539 10.809 9.188 4.053 4.323 8.107 8.917 11.079 13.782 10.136-3.62 11.021 2.078 5.409 11.62zm-73.773-254.016c17.295 6.756 26.212 22.159 30.265 35.67 1.081-10.539-2.702-39.453-13.782-51.073-7.296-7.296-14.052-5.134-14.052.81.001 6.216-1.35 11.62-2.431 14.593zm-18.646 12.43c12.971 15.673 17.024 41.615 12.7 62.963 10.809-2.162 20.537-6.215 26.212-12.16 1.892-2.162 3.783-4.864 4.864-7.566-1.081-21.348-10.269-42.697-29.725-48.912-3.242 3.243-9.187 4.864-14.051 5.675zm-21.889.811c7.567 20.537 12.431 42.696 14.322 64.585 3.513 0 7.567-.27 11.62-.811 5.945-24.321-.27-51.614-14.052-63.504-3.783 0-8.107 0-11.89-.27zM77.768 167.372c-1.081-2.973-2.432-8.377-2.432-14.593 0-5.945-7.026-8.107-14.052-.81-11.35 11.62-14.863 40.534-13.782 51.073 4.053-13.512 12.971-28.915 30.266-35.67zm5.675 75.394c-4.324-21.348-.27-47.291 12.701-62.963-4.865-.811-10.809-2.432-14.052-5.675-19.457 6.215-28.375 27.563-29.726 48.912 1.351 2.702 2.972 5.404 4.864 7.566 5.675 6.215 15.403 9.998 26.213 12.16zm41.345-61.073c-5.134 1.081-9.998 2.973-14.862 4.865l-12.16 5.134v-.27c-7.296 14.052-9.999 34.319-5.405 52.965 4.594.541 8.647.811 12.7.811 2.432-22.159 9.188-43.778 19.727-63.505zm88.095-23.239c0 42.155 34.319 76.205 76.205 76.205s76.205-34.05 76.205-76.205c0-41.886-34.319-75.935-76.205-75.935s-76.205 34.049-76.205 75.935zm152.41 97.283c9.969 50.608 3.299 64.692 16.484 58.099 15.944-8.107 22.699-39.183 22.97-57.019-12.971-.81-26.213-.81-39.454-1.08zm-71.611-.541v-.27c-.27 5.134.27 38.103 4.324 41.075 11.079 5.405 39.453 4.594 51.073 1.081 5.405-1.621 2.432-37.022 1.621-41.886-18.916-.27-38.102-.27-57.018 0zm-14.053 0v-.27c-19.456.27-38.642.27-57.829.811-1.892 9.187-4.594 48.911 1.892 51.614 12.971 5.675 41.616 5.134 54.586 1.621 4.595-2.432 2.433-45.399 1.351-53.776zm-85.662 57.56c5.405 2.432 8.647 2.432 9.728-4.324 1.892-8.647 2.432-36.752 4.865-52.155-12.16.27-24.591.811-36.752 1.621-5.405 19.727.27 45.129 22.159 54.858zm-65.666-11.08c43.778 47.02 92.689 85.663 155.923 106.47 67.558-19.186 115.659-59.991 163.219-107.011-11.095-4.315-7.715-10.363-7.296-11.62-8.918-.81-17.835-1.892-26.483-2.702-9.458 32.968-35.94 52.965-46.75 31.616-2.702-5.134-3.513-11.62-4.594-16.754-3.783 8.377-13.242 8.107-24.591 8.918-13.241 1.081-31.617 1.351-44.048-2.972-2.972 12.971-11.079 12.971-26.752 14.322-14.052 1.352-48.642 4.054-54.857-10.809-1.081 28.644-35.13 9.998-45.129-7.026-3.243-5.675-5.405-11.35-7.026-17.565-7.837.81-15.673 1.621-23.511 2.702 2.443 3.663 1.549 9.052-8.105 12.431zM115.6 453.545c-5.674-23.239-18.646-49.722-33.508-54.046-22.429-6.756-68.909 23.51-66.207 54.586 12.701 19.457 39.994 35.67 59.181 36.481 17.835.81 35.94-11.08 39.724-28.914.539-2.432.81-5.134.81-8.107zm7.296-5.944c33.509-19.457 69.179-35.671 105.931-47.02-38.643-20.537-68.098-47.831-97.283-77.016-2.162 1.352-5.134 2.432-7.836 3.513-1.637 4.91 8.718 5.33 5.405 12.431-2.162 4.054-8.648 7.567-15.133 9.188-2.161 2.702-5.134 4.864-7.836 6.485h-.27c-.27 13.511-.27 27.024.27 40.535 8.939 15.964 15.426 33.314 16.752 51.884zm320.764 12.7c-36.752-21.348-74.044-41.345-115.659-52.965-13.782 6.215-27.833 11.349-42.155 15.403-2.162.811-2.162.811-4.324 0-11.89-3.783-23.239-8.107-34.859-13.241-40.265 11.62-77.286 29.185-112.416 50.803h-.27v.27c.27 0 .27 0 .27-.27 103.227 4.054 206.455 3.513 309.413 0zm27.023-64.045l-.27.27c.541-13.782.811-27.563.811-41.345-2.973-1.621-5.675-4.054-8.107-6.756-6.485-1.351-12.971-5.134-15.133-8.918-1.892-4.053 1.351-7.566 5.945-10.269-.27-.541-.541-1.621-.541-2.432-2.972-.811-5.405-1.892-7.567-3.243-31.616 29.455-65.396 56.749-103.498 76.746 38.914 11.62 75.935 28.104 111.875 47.561 1.05-14.692 7.231-35.749 16.485-51.614zm23.24 3.244c-14.593 4.323-27.834 30.806-33.509 54.046 0 23.826 21.278 37.897 40.534 37.022 19.186-.811 46.48-17.024 59.181-36.481 2.973-31.077-43.507-61.344-66.206-54.587zM290.709 134.133c.045 0 .089.003.134.003.046 0 .09-.003.136-.003h-.27zm0 96.743c28.645 0 51.884-21.618 51.884-48.371 0-36.092-40.507-58.079-72.151-44.318 9.458 2.972 16.484 11.62 16.484 21.618 0 23.257-33.291 31.955-46.48 11.35-7.297 34.067 19.368 59.721 50.263 59.721zM68.039 474.083c.54 6.486 12.16 12.701 21.618 9.458 6.756-2.703 14.593-10.539 17.295-16.214 2.973-7.026-1.081-19.997-9.728-18.375-8.917 1.621-29.725 16.754-29.185 25.131zm410.75-25.131c-8.377-1.621-12.431 11.349-9.458 18.375 2.432 5.675 10.269 13.511 17.295 16.214 9.187 3.243 21.078-2.972 21.348-9.458.811-8.377-20.267-23.51-29.185-25.131z"],osi:[495,512,[],"f41a","M0 259.2C2.3 123.4 97.4 26.8 213.8 11.1c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7-17.8-46.3-35.6-92.7-53.4-139-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8 6.4-42.4-24.5-78.7-64.5-82.2-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4-17.9 46.6-35.8 93.2-53.7 139.9-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119C1.9 318.7 1.6 280.2 0 259.2zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3 14.9-39.1 29.9-78.2 45-117.3 1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6 31.9 18.4 49.5 53.8 45.2 90.4-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6 15.2 39.2 30.2 78.4 45.2 117.7 1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161C459.8 112 354.1 14.7 218 31.5 111.9 44.5 22.7 134 20.9 257.3z"],page4:[496,512,[],"f3d7","M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z"],pagelines:[384,512,[],"f18c","M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z"],palfed:[576,512,[],"f3d8","M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z"],patreon:[512,512,[],"f3d9","M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z"],paypal:[384,512,[],"f1ed","M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z"],periscope:[448,512,[],"f3da","M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z"],phabricator:[496,512,[],"f3db","M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z"],"phoenix-framework":[640,512,[],"f3dc","M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z"],php:[640,512,[],"f457","M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z"],"pied-piper":[640,512,[],"f2ae","M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z"],"pied-piper-alt":[576,512,[],"f1a8","M242 187c6.3-11.8 13.2-17 25.9-21.8 27.3-10.3 40.2-30.5 58.9-51.1 11.9 8.4 12 24.6 31.6 23v21.8l6.3.3c37.4-14.4 74.7-30.2 106.6-54.6 48.3-36.8 52.9-50 81.3-100l2-2.6c-.6 14.1-6.3 27.3-12.4 39.9-30.5 63.8-78.7 100.3-146.8 116.7-12.4 2.9-26.4 3.2-37.6 8.9 1.4 9.8 13.2 18.1 13.2 23 0 3.4-5.5 7.2-7.5 8.6-11.2-12.9-16.1-19.3-22.7-22.1-7.6-3.5-63.9-6.4-98.8 10zm137.9 256.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9L244 246zm-12.6 31.8l24.1 61.2 21-13.8-31.3-50.9-13.8 3.5zM555.5 0l-.6 1.1-.3.9.6-.6.3-1.4zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46v27.3l11.8-3.4-2.9-23.8h-8.9zm76.1 2.9c0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3l2 12.4c9-1.5 58.4-6.6 58.4-14.1z"],"pied-piper-pp":[448,512,[],"f1a7","M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z"],pinterest:[496,512,[],"f0d2","M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"],"pinterest-p":[384,512,[],"f231","M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z"],"pinterest-square":[448,512,[],"f0d3","M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"],playstation:[576,512,[],"f3df","M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z"],"product-hunt":[512,512,[],"f288","M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z"],pushed:[432,512,[],"f3e1","M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z"],python:[448,512,[],"f3e2","M167.8 36.4c-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1zm-6.7 28.4c11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4zm185.2 81.4v47.5c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6-7.7-30.9-22.3-54.2-53.4-54.2h-40.1zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3z"],qq:[448,512,[],"f1d6","M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z"],quinscape:[489,512,[],"f459","M301.9 474.6h-1.3c-87.3 0-158.1-70.8-158.1-158.1s70.8-158.1 158.1-158.1c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C489.1 117.5 379.6 8 244.5 8 109.5 8 0 117.5 0 252.6s109.5 244.6 244.5 244.6c24.8 0 47.8-3.2 70.4-10.1-5.2-3.5-9-8.2-13.4-12.6l.4.1zm-21.2-69.8c0-54.8 44.4-99.2 99.2-99.2 54.8 0 99.2 44.4 99.2 99.2 0 54.8-44.4 99.2-99.2 99.2-54.8 0-99.2-44.4-99.2-99.2"],quora:[448,512,[],"f2c4","M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z"],ravelry:[512,512,[],"f2d9","M407.4 61.5C331.6 22.1 257.8 31 182.9 66c-11.3 5.2-15.5 10.6-19.9 19-10.3 19.2-16.2 37.4-19.9 52.7-21.2 25.6-36.4 56.1-43.3 89.9-10.6 18-20.9 41.4-23.1 71.4 0 0-.7 7.6-.5 7.9-35.3-4.6-76.2-27-76.2-27 9.1 14.5 61.3 32.3 76.3 37.9 0 0 1.7 98 64.5 131.2-11.3-17.2-13.3-20.2-13.3-20.2S94.8 369 100.4 324.7c.7 0 1.5.2 2.2.2 23.9 87.4 103.2 151.4 196.9 151.4 6.2 0 12.1-.2 18-.7 14 1.5 27.6.5 40.1-3.9 6.9-2.2 13.8-6.4 20.2-10.8 70.2-39.1 100.9-82 123.1-147.7 5.4-16 8.1-35.5 9.8-52.2 8.7-82.3-30.6-161.6-103.3-199.5zM138.8 163.2s-1.2 12.3-.7 19.7c-3.4 2.5-10.1 8.1-18.2 16.7 5.2-12.8 11.3-25.1 18.9-36.4zm-31.2 121.9c4.4-17.2 13.3-39.1 29.8-55.1 0 0 1.7 48 15.8 90.1l-41.4-6.9c-2.2-9.2-3.5-18.5-4.2-28.1zm7.9 42.8c14.8 3.2 34 7.6 43.1 9.1 27.3 76.8 108.3 124.3 108.3 124.3 1 .5 1.7.7 2.7 1-73.1-11.6-132.7-64.7-154.1-134.4zM386 444.1c-14.5 4.7-36.2 8.4-64.7 3.7 0 0-91.1-23.1-127.5-107.8 38.2.7 52.4-.2 78-3.9 39.4-5.7 79-16.2 115-33 11.8-5.4 11.1-19.4 9.6-29.8-2-12.8-11.1-12.1-21.4-4.7 0 0-82 58.6-189.8 53.7-18.7-32-26.8-110.8-26.8-110.8 41.4-35.2 83.2-59.6 168.4-52.4.2-6.4 3-27.1-20.4-28.1 0 0-93.5-11.1-146 33.5 2.5-16.5 5.9-29.3 11.1-39.4 34.2-30.8 79-49.5 128.3-49.5 106.4 0 193 87.1 193 194.5-.2 76-43.8 142-106.8 174z"],react:[512,512,[],"f41b","M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zm-130 189.1c4.6 8.8 9.3 17.5 14.3 26.1 5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5zm0-50.6c-6.3-14.9-11.6-29.5-16-43.6 14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26zm11.4 25.3c6.6-13.8 13.8-27.3 21.4-40.6 7.6-13.3 15.8-26.2 24.4-38.9 15-1.1 30.3-1.7 45.9-1.7 15.6 0 31 .6 45.9 1.7 8.5 12.6 16.6 25.5 24.3 38.7 7.7 13.2 14.9 26.7 21.7 40.4-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6-15.7 0-30.9-.5-45.6-1.4-8.7-12.7-16.9-25.7-24.6-39-7.7-13.3-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zM256 210.2c25.3 0 45.8 20.5 45.8 45.8 0 25.3-20.5 45.8-45.8 45.8-25.3 0-45.8-20.5-45.8-45.8 0-25.3 20.5-45.8 45.8-45.8"],rebel:[512,512,[],"f1d0","M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z"],"red-river":[448,512,[],"f3e3","M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z"],reddit:[512,512,[],"f1a1","M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"],"reddit-alien":[512,512,[],"f281","M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"],"reddit-square":[448,512,[],"f1a2","M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z"],rendact:[496,512,[],"f3e4","M248 8C111 8 0 119 0 256s111 248 248 248c18.6 0 36.7-2.1 54.1-5.9-5.6-7.4-10.8-14.4-15.9-21.3-12.4 2.1-25.2 3.3-38.3 3.3C124.3 480 24 379.7 24 256S124.3 32 248 32s224 100.3 224 224c0 71-33 134.2-84.5 175.3-25.9 18.8-39.1 21.4-83.5-44.2-78.7-112.9-48-71.1-73.7-108.3 72.8 8.9 228.5-72 168.6-168.6C314-26.8 15 93.8 59.7 226.4c3.2 9.8 14.4 38.6 45.6 38.6 2 0 2.6-.6 2-1.7-4.4-8.7-20.1-9.8-20.1-37.4 0-40.5 40.5-89.6 100.3-120 66.1-32.3 131.9-30.2 158.2 5.4 27.2 38.3-20.9 119.2-120.4 136.9 7.5-9.4 57-75.2 62.8-84 22.7-34.6 23.6-49 14-59.2-15.5-16.9-29.5-10.3-50.7-11.7-10.8-.9-113.7 181.2-136.4 216.9-5.9 9-21.2 34.1-21.2 50.9 0 21.3 2.8 51.4 20.6 51.4 10.6 0 8-18.7 8-26.6 0-12.9 27.4-49.4 74.8-104.6 20.4 36.1 57.7 114.3 130.2 209.7 98-33.1 168.5-125.8 168.5-235C496 119 385 8 248 8z"],renren:[512,512,[],"f18b","M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z"],replyd:[448,512,[],"f3e6","M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z"],resolving:[496,512,[],"f3e7","M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z"],rocketchat:[448,512,[],"f3e8","M448 256.2c0-87.2-99.6-153.3-219.8-153.3-18.8 0-37.3 1.6-55.3 4.8-11.1-10.5-24.2-20-38-27.4C61.2 44.2 0 79.4 0 79.4s56.9 47.1 47.6 88.3c-52.3 52.3-52.5 124.1 0 176.6C56.9 385.6 0 432.6 0 432.6s61.2 35.2 134.9-.8c13.8-7.5 26.9-16.9 38-27.4 18 3.2 36.5 4.8 55.3 4.8 120.3-.1 219.8-65.8 219.8-153zm-219.7 124c-23.7 0-46.3-2.8-67.3-7.8-21.3 25.8-68.1 61.7-113.6 50.1 14.8-16 36.7-43.1 32-87.6-27.3-21.4-43.6-48.7-43.6-78.5 0-68.4 86.2-123.9 192.5-123.9S420.8 188 420.8 256.4c0 68.3-86.2 123.8-192.5 123.8zm25.6-123.9c0 14.2-11.5 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.5-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm88.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm-177.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.2 0 25.6 11.6 25.6 25.8z"],rockrms:[496,512,[],"f3e9","M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z"],safari:[512,512,[],"f267","M236.9 256.8c0-9.1 6.6-17.7 16.3-17.7 8.9 0 17.4 6.4 17.4 16.1 0 9.1-6.4 17.7-16.1 17.7-9 0-17.6-6.7-17.6-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-26.6 0c0-122.3-99.1-221.4-221.4-221.4S34.6 133.7 34.6 256 133.7 477.4 256 477.4 477.4 378.3 477.4 256zm-72.5 96.6c0 3.6 13 10.2 16.3 12.2-27.4 41.5-69.8 71.4-117.9 83.3l-4.4-18.5c-.3-2.5-1.9-2.8-4.2-2.8-1.9 0-3 2.8-2.8 4.2l4.4 18.8c-13.3 2.8-26.8 4.2-40.4 4.2-36.3 0-72-10.2-103-29.1 1.7-2.8 12.2-18 12.2-20.2 0-1.9-1.7-3.6-3.6-3.6-3.9 0-12.2 16.6-14.7 19.9-41.8-27.7-72-70.6-83.6-119.6l19.1-4.2c2.2-.6 2.8-2.2 2.8-4.2 0-1.9-2.8-3-4.4-2.8L62 294.5c-2.5-12.7-3.9-25.5-3.9-38.5 0-37.1 10.5-73.6 30.2-104.9 2.8 1.7 16.1 10.8 18.3 10.8 1.9 0 3.6-1.4 3.6-3.3 0-3.9-14.7-11.3-18-13.6 28.2-41.2 71.1-70.9 119.8-81.9l4.2 18.5c.6 2.2 2.2 2.8 4.2 2.8s3-2.8 2.8-4.4L219 61.7c12.2-2.2 24.6-3.6 37.1-3.6 37.1 0 73.3 10.5 104.9 30.2-1.9 2.8-10.8 15.8-10.8 18 0 1.9 1.4 3.6 3.3 3.6 3.9 0 11.3-14.4 13.3-17.7 41 27.7 70.3 70 81.7 118.2l-15.5 3.3c-2.5.6-2.8 2.2-2.8 4.4 0 1.9 2.8 3 4.2 2.8l15.8-3.6c2.5 12.7 3.9 25.7 3.9 38.7 0 36.3-10 72-28.8 102.7-2.8-1.4-14.4-9.7-16.6-9.7-2.1 0-3.8 1.7-3.8 3.6zm-33.2-242.2c-13 12.2-134.2 123.7-137.6 129.5l-96.6 160.5c12.7-11.9 134.2-124 137.3-129.3l96.9-160.7z"],sass:[640,512,[],"f41e","M551.1 291.9c-22.4.1-41.8 5.5-58 13.5-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-3.8 11.1-5.3 19.1-2.3 11.7-25.8 53.5-39.1 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-2.7 11.4-5.3 19.1-2.6 7.7-33.9 77.3-42.1 95.4-4.2 9.2-7.8 16.6-10.4 21.6s-.2.3-.4.9c-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2-.8 0-1.4 2-1.4 2s10.1-42.4-19.4-42.4c-18.4 0-44 20.2-56.6 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.8-38.2-101.9-65.2-99.1-116.5 1-18.7 7.5-67.8 127.1-127.4 98-48.8 176.4-35.4 189.9-5.6 19.4 42.5-41.9 121.6-143.7 133-38.8 4.3-59.2-10.7-64.3-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.8 28.9 18.7 6.1 64.2 9.5 119.2-11.8C367 196.5 415.1 130.2 401 74.7 386.6 18.3 293.1-.2 204.6 31.2 151.9 49.9 94.9 79.3 53.9 117.6 5.2 163.2-2.6 202.9.6 219.5c11.4 58.9 92.6 97.3 125.1 125.7-1.6.9-3.1 1.7-4.5 2.5-16.3 8.1-78.2 40.5-93.7 74.7-17.5 38.8 2.9 66.6 16.3 70.4 41.8 11.6 84.6-9.3 107.6-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.3-4.9 16.4-9.4 23.5-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.5 5 15.4 5 13.8 0 20-11.4 26.9-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.4 0 18.8-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.6-46 16.2-31.8 31.7-71.5 31.7-71.5s1.4 9.7 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2s0 .1.1.2c-3 4-6.4 8.3-9.9 12.5-12.8 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.7 2.5 11.5-.8 19.6-3.6 23.5-5.4 6.2-2.2 13.4-5.7 20.2-10.6 12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5 19.8-28.9 35.1-60.6 35.1-60.6s1.4 9.7 6.2 25.8c2.4 8.1 7.1 17 11.4 25.7-18.6 15.1-30.1 32.6-34.1 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5 6.5-2.2 14.3-5.7 21.6-11.1 12.5-9.2 24.6-22.1 23.8-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.1-10.2 62.1-7.2 55.7 6.5 66.6 41.3 64.5 55.8-2.1 14.6-13.8 22.6-17.7 25-3.9 2.4-5.1 3.3-4.8 5.1.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.2-11.8 30.3-38.7 1.6-34-31.1-71.4-89-71.1zM121.8 436.6c-18.4 20.1-44.2 27.7-55.3 21.3C54.6 451 59.3 421.4 82 400c13.8-13 31.6-25 43.4-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.3 30.4.3 57.2-19.1 78.3zm134.4-91.4c-6.4 15.7-19.9 55.7-28.1 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.1-11.3 21.2-14.9 23.8-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.9-13.9 0 .5.1 1 .1 1.6-.1 17.9-17.3 30-25.1 34.8zm85.6-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.6-15.3 19-24.5 1.2 3.8 1.9 7.4 1.9 10.8-.1 22.5-16.2 30.9-25.9 34.4z"],schlix:[448,512,[],"f3ea","M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z"],scribd:[384,512,[],"f28a","M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z"],searchengin:[460,512,[],"f3eb","M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z"],sellcast:[448,512,[],"f2da","M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z"],sellsy:[640,512,[],"f213","M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z"],servicestack:[496,512,[],"f3ec","M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z"],shirtsinbulk:[448,512,[],"f214","M395.208 221.583H406v33.542h-10.792v-33.542zm0-9.625H406v-33.542h-10.792v33.542zm0 86.333H406V264.75h-10.792v33.541zM358.75 135.25h-33.542v10.5h33.542v-10.5zm36.458 206.208H406v-33.542h-10.792v33.542zM311.5 135.25h-33.542v10.5H311.5v-10.5zm-47.25 0H231v10.5h33.25v-10.5zm-47.25 0h-33.25v10.5H217v-10.5zm178.208 33.542H406V135.25h-33.542v10.5h22.75v23.042zm-255.792 259l30.625 13.417 4.375-9.917-30.625-13.417-4.375 9.917zM179.083 445l30.334 13.708 4.374-9.916-30.333-13.417-4.375 9.625zm216.125-60.375H406v-33.542h-10.792v33.542zm-334.833 8.167L91 406.208l4.375-9.624-30.625-13.709-4.375 9.917zm39.666 17.499l30.625 13.417 4.375-9.917-30.625-13.416-4.375 9.916zm132.417 38.501l4.375 9.916L267.459 445l-4.375-9.625-30.626 13.417zm118.417-52.208l4.375 9.624 30.624-13.416-4.374-9.917-30.625 13.709zM311.5 413.791l4.375 9.917 30.625-13.417-4.374-9.916-30.626 13.416zm-39.667 17.501l4.375 9.917 30.625-13.417-4.375-9.917-30.625 13.417zM311.5 46.583h-33.542v10.5H311.5v-10.5zm94.209 0h-33.251v10.5h33.251v-10.5zm-188.709 0h-33.25v10.5H217v-10.5zm141.75 0h-33.542v10.5h33.542v-10.5zm-94.5 0H231v10.5h33.25v-10.5zM448 3.708v406l-226.334 98.584L0 409.708v-406h448zm-29.166 116.958H29.166V390.75l192.792 85.75 196.875-85.75V120.666zm0-87.791H29.166V91.5h389.667V32.875zM75.542 46.583H42.291v10.5h33.251v-10.5zm94.5 0H136.5v10.5h33.542v-10.5zm-47.251 0H89.25v10.5h33.542v-10.5zm7.584 236.542c0-50.167 41.125-91.292 91.292-91.292 50.458 0 91.292 41.125 91.292 91.292 0 50.458-40.833 91.292-91.292 91.292-50.167-.001-91.292-40.834-91.292-91.292zm120.75 18.084c0 13.125-23.917 14.291-32.666 14.291-12.25 0-29.75-2.625-35.875-14.875h-.875L172.666 319c14.876 9.333 29.167 12.25 47.25 12.25 19.542 0 51.042-5.833 51.042-31.209 0-48.125-78.458-16.333-78.458-37.916 0-13.125 20.708-14.875 29.75-14.875 10.791 0 29.166 3.208 35.583 13.124h.875l8.751-16.916c-15.167-6.125-27.417-11.959-44.334-11.959-20.125 0-49.583 6.417-49.583 31.792 0 44.334 77.583 11.959 77.583 37.918zM122.791 135.25H89.25v10.5h33.542v-10.5zm-69.999 10.5h22.75v-10.5H42v33.542h10.792V145.75zm0 32.666H42v33.542h10.792v-33.542zm117.25-43.166H136.5v10.5h33.542v-10.5zm-117.25 86.333H42v33.542h10.792v-33.542zm0 86.334H42v33.542h10.792v-33.542zm0-43.167H42v33.542h10.792V264.75zm0 86.333H42v33.542h10.792v-33.542z"],simplybuilt:[512,512,[],"f215","M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z"],sistrix:[448,512,[],"f3ee","M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z"],skyatlas:[640,512,[],"f216","M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z"],skype:[448,512,[],"f17e","M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z"],slack:[448,512,[],"f198","M244.2 217.5l19.3 57.7-59.8 20-19.3-57.7 59.8-20zm41.4 243.7C131.6 507.4 65 471.6 18.8 317.6S8.4 97 162.4 50.8C316.4 4.6 383 40.4 429.2 194.4c46.2 154 10.4 220.6-143.6 266.8zM366.2 265c-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-19.3-57.7 29-9.7c12.2-3.9 18.6-17.2 14.7-29.4-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-59.8 20.1-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l19.3 57.7-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 59.8-20.1 10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 29-9.7c12.2-4.2 18.6-17.5 14.7-29.6z"],"slack-hash":[448,512,[],"f3ef","M446.2 270.4c-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-30.3-90 45.4-15.1c19.1-6.2 29.1-26.8 23-45.9-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-93.4 31.2-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-45.3 15c-19.1 6.2-29.1 26.8-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l30.3 90L78 354.8c-19 6.2-29.1 26.9-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 93.6-31.3 15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 45.4-15.1c19-6 29.1-26.7 22.9-45.7zm-254.1 47.2l-30.3-90.2 93.5-31.3 30.3 90.2-93.5 31.3z"],slideshare:[512,512,[],"f1e7","M249.429 211.436c0 31.716-27.715 57.717-61.717 57.717-34.001 0-61.716-26.001-61.716-57.717 0-32.001 27.715-57.716 61.716-57.716 34.001 0 61.717 25.715 61.717 57.716zm254.294 50.002c-18.286 22.573-53.144 50.288-106.289 72.003C453.722 525.163 260 555.735 263.143 457.446c0 1.714-.286-52.859-.286-93.432-4.285-.858-8.571-2-13.714-3.143 0 40.858-.286 98.289-.286 96.575C252 555.735 58.278 525.163 114.566 333.441c-53.145-21.715-88.003-49.43-106.29-72.003-9.143-13.714.858-28.287 16.001-17.715 2 1.428 4.285 2.857 6.285 4.285V49.716C30.563 22.287 51.135 0 76.565 0h359.157c25.429 0 46.002 22.287 46.002 49.716v198.293l6-4.285c15.143-10.573 25.143 4 15.999 17.714zm-46.572-189.15c0-32.858-10.572-45.716-40.859-45.716H98.566c-31.716 0-40.573 10.858-40.573 45.716v192.293c67.717 35.43 125.72 29.144 157.435 28.001 13.429-.286 22.001 2.286 27.144 7.715 1.689 1.687 10.023 9.446 20.287 17.143 1.143-15.715 10.001-25.715 33.716-24.858 32.287 1.428 91.718 7.715 160.577-29.716V72.288zM331.146 153.72c-34.002 0-61.716 25.715-61.716 57.716 0 31.716 27.715 57.717 61.716 57.717 34.287 0 61.716-26.001 61.716-57.717 0-32.001-27.429-57.716-61.716-57.716z"],snapchat:[496,512,[],"f2ab","M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm169.5 338.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C183.1 100 230.7 96 244.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"],"snapchat-ghost":[512,512,[],"f2ac","M510.846 392.673c-5.211 12.157-27.239 21.089-67.36 27.318-2.064 2.786-3.775 14.686-6.507 23.956-1.625 5.566-5.623 8.869-12.128 8.869l-.297-.005c-9.395 0-19.203-4.323-38.852-4.323-26.521 0-35.662 6.043-56.254 20.588-21.832 15.438-42.771 28.764-74.027 27.399-31.646 2.334-58.025-16.908-72.871-27.404-20.714-14.643-29.828-20.582-56.241-20.582-18.864 0-30.736 4.72-38.852 4.72-8.073 0-11.213-4.922-12.422-9.04-2.703-9.189-4.404-21.263-6.523-24.13-20.679-3.209-67.31-11.344-68.498-32.15a10.627 10.627 0 0 1 8.877-11.069c69.583-11.455 100.924-82.901 102.227-85.934.074-.176.155-.344.237-.515 3.713-7.537 4.544-13.849 2.463-18.753-5.05-11.896-26.872-16.164-36.053-19.796-23.715-9.366-27.015-20.128-25.612-27.504 2.437-12.836 21.725-20.735 33.002-15.453 8.919 4.181 16.843 6.297 23.547 6.297 5.022 0 8.212-1.204 9.96-2.171-2.043-35.936-7.101-87.29 5.687-115.969C158.122 21.304 229.705 15.42 250.826 15.42c.944 0 9.141-.089 10.11-.089 52.148 0 102.254 26.78 126.723 81.643 12.777 28.65 7.749 79.792 5.695 116.009 1.582.872 4.357 1.942 8.599 2.139 6.397-.286 13.815-2.389 22.069-6.257 6.085-2.846 14.406-2.461 20.48.058l.029.01c9.476 3.385 15.439 10.215 15.589 17.87.184 9.747-8.522 18.165-25.878 25.018-2.118.835-4.694 1.655-7.434 2.525-9.797 3.106-24.6 7.805-28.616 17.271-2.079 4.904-1.256 11.211 2.46 18.748.087.168.166.342.239.515 1.301 3.03 32.615 74.46 102.23 85.934 6.427 1.058 11.163 7.877 7.725 15.859z"],"snapchat-square":[448,512,[],"f2ad","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6.5 314.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C159.1 100 206.7 96 220.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"],soundcloud:[640,512,[],"f1be","M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z"],speakap:[448,512,[],"f3f3","M352 32H96C43.2 32 0 75.2 0 128v256c0 52.8 43.2 96 96 96h256c52.8 0 96-43.2 96-96V128c0-52.8-43.2-96-96-96zM221 382.9c-39.6 0-81.9-17.8-81.9-53.7V302H179v17.8c0 15.1 19.5 24.5 41.9 24.5 24.2 0 41.3-10.4 41.3-29.5 0-23.8-27.2-31.9-54.7-42.6-31.9-12.4-63.1-26.2-63.1-69.1 0-48 38.6-66.4 79.9-66.4 37.6 0 75.5 14.1 75.5 41.9v31.2h-39.9v-16.1c0-12.1-17.8-18.5-35.6-18.5-19.5 0-35.6 8.1-35.6 26.2 0 22.1 22.5 29.2 47 38.9 35.9 12.4 71.1 27.2 71.1 71.5.1 48.6-40.8 71.1-85.8 71.1z"],spotify:[496,512,[],"f1bc","M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z"],"stack-exchange":[448,512,[],"f18d","M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z"],"stack-overflow":[384,512,[],"f16c","M293.7 300l-181.2-84.5 16.7-36.5 181.3 84.7-16.8 36.3zm48-76L188.2 95.7l-25.5 30.8 153.5 128.3 25.5-30.8zm39.6-31.7L262 32l-32 24 119.3 160.3 32-24zM290.7 311L95 269.7 86.8 309l195.7 41 8.2-39zm31.6 129H42.7V320h-40v160h359.5V320h-40v120zm-39.8-80h-200v39.7h200V360z"],staylinked:[440,512,[],"f3f5","M201.6 127.4c4.1-3.2 10.3-3 13.8.5l170 167.3-2.7-2.7 44.3 41.3c3.7 3.5 3.3 9-.7 12.2l-198 163.9c-9.9 7.6-17.3.8-17.3.8L2.3 314.6c-3.5-3.5-3-9 1.2-12.2l45.8-34.9c4.2-3.2 10.4-3 13.9.5l151.9 147.5c3.7 3.5 10 3.7 14.2.4l93.2-74c4.1-3.2 4.5-8.7.9-12.2l-84-81.3c-3.6-3.5-9.9-3.7-14-.5l-.1.1c-4.1 3.2-10.4 3-14-.5l-68.1-64.3c-3.5-3.5-3.1-9 1.1-12.2l57.3-43.6m14.8 257.3c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7"],steam:[496,512,[],"f1b6","M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z"],"steam-square":[448,512,[],"f1b7","M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z"],"steam-symbol":[448,512,[],"f3f6","M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z"],"sticker-mule":[576,512,[],"f3f7","M353.1 509.8c-5.9 2.9-32.1 3.2-36.5-.5-4.1-3-2.2-11.9-1.5-15 2.2-15-2.5-7.9-9.8-11.5-3.1-1.5-4.1-5.5-4.6-10-.5-1.5-1-2.5-1.5-3.5-1.7-10.7 6.8-33.6 8.2-43.4 4.9-23.7-.7-37.2 1.5-46.9 3.7-16.2 4.1-3.5 4.1-29.9-1.4-25.9 3.3-36.9.5-38.9-14.8 0-64.3 10.7-112.2 2-46.1-8.9-59.4-29-65.4-30.9-10.3-4.5-23.2.5-27.3 7-.1.1-35 70.6-39.6 87.8-6.2 20.5-.5 47.4 4.1 66.8 0 .1 4.5 14.6 10.3 19.5 2.1 1.5 5.1 2.5 7.2 4.5 2.8 2.7 9.4 15.2 9.8 16 2.6 4.5 3.6 8-1.5 10.5-3.6 2-9.3 2.5-14.4 2.5-2.6.5-1.5 3.5-3.1 5-2.9 2.8-20.7 6.1-29.9 2.5-2.6-1-5.7-3-6.2-5-1.5-4 2.1-9-1-12.5-4.5-2.9-13.1-2-17-12-2.2-5.4-2.6-7.6-2.6-49.4 0-9.7-5.9-38.7-8.2-46.9-1.5-5.5-1.5-11.5 0-16 .3-.9 4.1-4.6 4.1-13-1-1.5-4.6-.5-5.1-1.5-10.4-80.6-5.9-79-7.7-98.3-1.5-16-10.9-43.9-6.7-64.3.5-2.4 3.4-21 24.2-38.9 31-26.7 48.4-38.3 159-11.5 1.1.4 66.3 21.1 110.7-9 15.5-11.3 28.8-11.3 35.5-16 .1-.1 61.7-52.1 87-65.3 47.2-29.4 69.9-16.7 75.1-18 4.7-1 13.4-25.8 17-25.8 5.5 0 1.6 20.2 3.6 25.9.5 2 3.6 5 6.2 5 2.3 0 1.7-.8 10.3-5 8.4-5.4 14.9-17.6 20.6-17 11.7 1.6-19 41.6-19 46.9 0 2 .2.8 4.6 9.5 2.6 5.5 4.6 13.5 6.2 20 8.3 29.7 5.7 14.6 13.4 36.9 20.2 50.1 20.6 45.2 20.6 52.9 0 7.5-4.1 11-7.2 16.5-1.5 3-4.6 7.5-7.2 8-2.7.7 7-1.5-13.4 2.5-7.2 1-13.4-4.5-14.9-9.5-1.6-4.7 2.8-10.1-11.8-22.9-10.3-10-21.1-11.3-31.9-17-9.8-5.7-11.9 1-18 8-18 22.9-34 46.9-52 69.8-11.8 15-24.2 30.4-33.5 47.4-3.9 6.8-9.5 28.1-10.3 29.9-6.2 17.7-5.5 25.8-16.5 68.3-3.1 10-5.7 21.4-8.7 32.4-2.2 6.8-7.4 49.3-.5 59.4 2.1 3.5 8.7 4.5 11.3 8 .1.1 9.6 18.2 9.3 20 0 6.1-9.4 5.6-11.3 6.5-4.8 2.9-3.8 5.9-6.4 7.4"],strava:[369,512,[],"f428","M301.6 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220h-67.6zM151.4 0L0 292h89.2l62.2-116.1L213.1 292h88.5L151.4 0z"],stripe:[640,512,[],"f429","M640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9m-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4h-45.9zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7m-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8M346.4 124v36.2l-44.6 9.5v-36.2l44.6-9.5m-44.5 59.2h44.6v153.2h-44.6V183.2zm-47.8 13.1c10.4-19.1 31.1-15.2 37.1-13.1V224c-5.7-1.8-23.4-4.5-33.9 9.3v103.1H213V183.2h38.4l2.7 13.1m-89-13.1h33.7V221h-33.7v63.2c0 26.2 28 18 33.7 15.7v33.8c-5.9 3.2-16.6 5.9-31.2 5.9-26.3 0-46.1-17-46.1-43.3l.2-142.4 43.3-9.2.1 38.5zM44.9 228.3c0 20 67.9 10.5 67.9 63.4 0 32-25.4 47.8-62.3 47.8-15.3 0-32-3-48.5-10.1v-40c14.9 8.1 33.9 14.2 48.6 14.2 9.9 0 17-2.7 17-10.9 0-21.2-67.5-13.2-67.5-62.4 0-31.4 24-50.2 60-50.2 14.7 0 29.4 2.3 44.1 8.1V230c-13.5-7.3-30.7-11.4-44.2-11.4-9.3.1-15.1 2.8-15.1 9.7"],"stripe-s":[362,512,[],"f42a","M144.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C287.3 7.2 240.1 0 192.8 0 77.1 0 0 60.4 0 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5c53 22.8 106.8 32.4 156 32.4 118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9"],studiovinari:[512,512,[],"f3f8","M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z"],stumbleupon:[512,512,[],"f1a4","M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z"],"stumbleupon-circle":[496,512,[],"f1a3","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z"],superpowers:[448,512,[],"f2dd","M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z"],supple:[640,512,[],"f3f9","M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z"],telegram:[496,512,[],"f2c6","M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z"],"telegram-plane":[448,512,[],"f3fe","M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"],"tencent-weibo":[384,512,[],"f1d5","M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z"],themeisle:[512,512,[],"f2b2","M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z"],trello:[448,512,[],"f181","M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zM194.9 371.4c0 14.8-12 26.9-26.9 26.9H85.1c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9H168c14.8 0 26.9 12 26.9 26.9v254.3zm194.9-112c0 14.8-12 26.9-26.9 26.9H280c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v142.3z"],tripadvisor:[576,512,[],"f262","M166.4 280.521c0 13.236-10.73 23.966-23.966 23.966s-23.966-10.73-23.966-23.966 10.73-23.966 23.966-23.966 23.966 10.729 23.966 23.966zm264.962-23.956c-13.23 0-23.956 10.725-23.956 23.956 0 13.23 10.725 23.956 23.956 23.956 13.23 0 23.956-10.725 23.956-23.956-.001-13.231-10.726-23.956-23.956-23.956zm89.388 139.49c-62.667 49.104-153.276 38.109-202.379-24.559l-30.979 46.325-30.683-45.939c-48.277 60.39-135.622 71.891-197.885 26.055-64.058-47.158-77.759-137.316-30.601-201.374A186.762 186.762 0 0 0 0 139.416l90.286-.05a358.48 358.48 0 0 1 197.065-54.03 350.382 350.382 0 0 1 192.181 53.349l96.218.074a185.713 185.713 0 0 0-28.352 57.649c46.793 62.747 34.964 151.37-26.648 199.647zM259.366 281.761c-.007-63.557-51.535-115.075-115.092-115.068C80.717 166.7 29.2 218.228 29.206 281.785c.007 63.557 51.535 115.075 115.092 115.068 63.513-.075 114.984-51.539 115.068-115.052v-.04zm28.591-10.455c5.433-73.44 65.51-130.884 139.12-133.022a339.146 339.146 0 0 0-139.727-27.812 356.31 356.31 0 0 0-140.164 27.253c74.344 1.582 135.299 59.424 140.771 133.581zm251.706-28.767c-21.992-59.634-88.162-90.148-147.795-68.157-59.634 21.992-90.148 88.162-68.157 147.795v.032c22.038 59.607 88.198 90.091 147.827 68.113 59.615-22.004 90.113-88.162 68.125-147.783zm-326.039 37.975v.115c-.057 39.328-31.986 71.163-71.314 71.106-39.328-.057-71.163-31.986-71.106-71.314.057-39.328 31.986-71.163 71.314-71.106 39.259.116 71.042 31.94 71.106 71.199zm-24.512 0v-.084c-.051-25.784-20.994-46.645-46.778-46.594-25.784.051-46.645 20.994-46.594 46.777.051 25.784 20.994 46.645 46.777 46.594 25.726-.113 46.537-20.968 46.595-46.693zm313.423 0v.048c-.02 39.328-31.918 71.194-71.247 71.173s-71.194-31.918-71.173-71.247c.02-39.328 31.918-71.194 71.247-71.173 39.29.066 71.121 31.909 71.173 71.199zm-24.504-.008c-.009-25.784-20.918-46.679-46.702-46.67-25.784.009-46.679 20.918-46.67 46.702.009 25.784 20.918 46.678 46.702 46.67 25.765-.046 46.636-20.928 46.67-46.693v-.009z"],tumblr:[320,512,[],"f173","M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z"],"tumblr-square":[448,512,[],"f174","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z"],twitch:[448,512,[],"f1e8","M40.1 32L10 108.9v314.3h107V480h60.2l56.8-56.8h87l117-117V32H40.1zm357.8 254.1L331 353H224l-56.8 56.8V353H76.9V72.1h321v214zM331 149v116.9h-40.1V149H331zm-107 0v116.9h-40.1V149H224z"],twitter:[512,512,[],"f099","M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"],"twitter-square":[448,512,[],"f081","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"],typo3:[433,512,[],"f42b","M330.8 341c-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9 0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C0 246 106.8 480 184.1 480c36.3 0 97.3-59.5 146.7-139M294.5 32c71.8 0 138.8 11.6 138.8 52.5 0 82.6-52.5 182.3-78.8 182.3-47.9 0-101.7-132.1-101.7-198.5 0-30.9 11.6-36.3 41.7-36.3"],uber:[448,512,[],"f402","M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z"],uikit:[448,512,[],"f403","M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z"],uniregistry:[384,512,[],"f404","M281.1 220.1H384v-14.8H281.1v14.8zm0-37.1H384v-12.4H281.1V183zm0 74.2H384v-17.3H281.1v17.3zm-157.7 86.7H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8m145.7-12.4h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3m-41.5 37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8M384 32H281.1v2.5H384V32zM192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480m89.1-334.2H384V136H281.1v9.8zm0-37.1H384v-7.4H281.1v7.4zm0-37.1H384v-4.9H281.1v4.9zm-178.2 99H0V183h102.9v-12.4zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2m64.1-118.8v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4m178.2 0c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1v12.4zm-203 156h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7m24.8-376.2H0v4.9h102.9v-4.9zm0-34.7H0v2.5h102.9V32zm0 173.3H0v14.8h102.9v-14.8zm0 34.6H0v17.3h102.9v-17.3zm0-103.9H0v9.9h102.9V136zm0-34.7H0v7.4h102.9v-7.4zm2.8 207.9H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3"],untappd:[640,512,[],"f405","M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z"],usb:[640,512,[],"f287","M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z"],ussunnah:[512,512,[],"f407","M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2.8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7.2-9.4.5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5.2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 15 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6.5 9.3.5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3.8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3.2.6.5 1.4.6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2.3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8.5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6.9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z"],vaadin:[448,512,[],"f408","M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z"],viacoin:[384,512,[],"f237","M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z"],viadeo:[448,512,[],"f2a9","M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z"],"viadeo-square":[448,512,[],"f2aa","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z"],viber:[512,512,[],"f409","M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z"],vimeo:[448,512,[],"f40a","M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z"],"vimeo-square":[448,512,[],"f194","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z"],"vimeo-v":[448,512,[],"f27d","M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z"],vine:[384,512,[],"f1ca","M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z"],vk:[576,512,[],"f189","M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7 0 0-30 73.1-72.4 120.5-13.7 13.7-20 18.1-27.5 18.1-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5 0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5-20 0-68.6-73.4-97.4-157.4-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7 0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9 0-66.8-3.4-73.1 15.4-73.1 8.7 0 23.7 4.4 58.7 38.1 40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25-11.2-34.9-86.9-106.7-90.3-111.5-8.7-11.2-6.2-16.2 0-26.2.1-.1 72-101.3 79.4-135.6z"],vnv:[640,512,[],"f40b","M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z"],vuejs:[448,512,[],"f41f","M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z"],weibo:[512,512,[],"f18a","M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z"],weixin:[576,512,[],"f1d7","M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z"],whatsapp:[448,512,[],"f232","M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"],"whatsapp-square":[448,512,[],"f40c","M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z"],whmcs:[448,512,[],"f40d","M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z"],"wikipedia-w":[640,512,[],"f266","M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z"],windows:[448,512,[],"f17a","M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"],wordpress:[512,512,[],"f19a","M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"],"wordpress-simple":[512,512,[],"f411","M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z"],wpbeginner:[512,512,[],"f297","M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z"],wpexplorer:[512,512,[],"f2de","M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z"],wpforms:[448,512,[],"f298","M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z"],xbox:[512,512,[],"f412","M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z"],xing:[384,512,[],"f168","M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z"],"xing-square":[448,512,[],"f169","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z"],"y-combinator":[448,512,[],"f23b","M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z"],yahoo:[448,512,[],"f19e","M252 292l4 220c-12.7-2.2-23.5-3.9-32.3-3.9-8.4 0-19.2 1.7-32.3 3.9l4-220C140.4 197.2 85 95.2 21.4 0c11.9 3.1 23 3.9 33.2 3.9 9 0 20.4-.8 34.1-3.9 40.9 72.2 82.1 138.7 135 225.5C261 163.9 314.8 81.4 358.6 0c11.1 2.9 22 3.9 32.9 3.9 11.5 0 23.2-1 35-3.9C392.1 47.9 294.9 216.9 252 292z"],yandex:[256,512,[],"f413","M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z"],"yandex-international":[320,512,[],"f414","M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z"],yelp:[384,512,[],"f1e9","M136.9 328c-1 .3-109.2 35.7-115.8 35.7-15.2-.9-18.5-16.2-19.9-31.2-1.5-14.2-1.4-29.8.3-46.8 1.9-18.8 5.5-45.1 24.2-44 4.8 0 67.1 25.9 112.7 44.4 17.1 6.8 18.6 35.8-1.5 41.9zm57.9-113.9c1.8 38.2-25.5 48.5-47.2 14.3L41.3 60.4c-1.5-6.6.3-12.4 5.3-17.4C62.2 26.5 146 3.2 168.1 8.9c7.5 1.9 12.1 6.1 13.8 12.6 1.3 8.3 11.5 167.4 12.9 192.6zm-1.4 164.8c0 4.6.2 116.4-1.7 121.5-2.3 6-7 9.7-14.3 11.2-10.1 1.7-27.1-1.9-51-10.7-22-8.1-56.7-21.5-49.3-42.5 2.8-6.9 51.4-62.8 77.3-93.6 12-15.2 39.8-5.5 39 14.1zm180.2-117.8c-5.6 3.7-110.8 28.2-118.1 30.6l.3-.6c-18.1 4.7-35.4-18.5-23.3-34.6 3.7-3.7 65.9-92.4 72.8-97 5.2-3.6 11.3-3.8 18.3-.6 18.4 8.8 55.1 63.1 57.4 84.6-.1 2.9 1.2 11.7-7.4 17.6zm10.1 130.7c-2.7 20.6-44.5 73.4-63.8 81-6.9 2.6-12.9 2-17.7-2-5-3.5-61.8-97.1-64.9-102.3-10.9-16.2 6.8-39.8 25.6-33.2 0 0 110.5 35.7 114.7 39.4 5.2 4.1 7.2 9.8 6.1 17.1z"],yoast:[448,512,[],"f2b1","M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z"],youtube:[576,512,[],"f167","M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"],"youtube-square":[448,512,[],"f431","M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z"]};!function(c){try{c()}catch(c){if(!e)throw c}}(function(){!function c(l,h){var v=Object.keys(h).reduce(function(c,l){var v=h[l];return v.icon?c[v.iconName]=v.icon:c[l]=v,c},{});"function"==typeof s.hooks.addPack?s.hooks.addPack(l,v):s.styles[l]=r({},s.styles[l]||{},v),"fas"===l&&c("fa",h)}("fab",f)})}(),function(){"use strict";var c={};try{"undefined"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?"":l,v=c,z=(~h.indexOf("MSIE")||h.indexOf("Trident/"),"___FONT_AWESOME___"),e=function(){try{return!0}catch(c){return!1}}(),a=[1,2,3,4,5,6,7,8,9,10],m=a.concat([11,12,13,14,15,16,17,18,19,20]);["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(a.map(function(c){return c+"x"})).concat(m.map(function(c){return"w-"+c}));var t=v||{};t[z]||(t[z]={}),t[z].styles||(t[z].styles={}),t[z].hooks||(t[z].hooks={}),t[z].shims||(t[z].shims=[]);var s=t[z],r=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var v in h)Object.prototype.hasOwnProperty.call(h,v)&&(c[v]=h[v])}return c};var f={"address-book":[448,512,[],"f2b9","M436 160c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V48c0-26.51-21.49-48-48-48H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h20c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20v-64h20c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20v-64h20zm-74 304H54a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v404a6 6 0 0 1-6 6zM128 208c0-44.183 35.817-80 80-80s80 35.817 80 80-35.817 80-80 80-80-35.817-80-80zm208 133.477V360c0 13.255-10.745 24-24 24H104c-13.255 0-24-10.745-24-24v-18.523c0-22.026 14.99-41.225 36.358-46.567l35.657-8.914c29.101 20.932 74.509 26.945 111.97 0l35.657 8.914C321.01 300.252 336 319.452 336 341.477z"],"address-card":[512,512,[],"f2bb","M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zm-54-176H300c-6.627 0-12-5.373-12-12v-16c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v16c0 6.627-5.373 12-12 12zm0 72H300c-6.627 0-12-5.373-12-12v-16c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v16c0 6.627-5.373 12-12 12zM176 160c33.137 0 60 26.863 60 60s-26.863 60-60 60-60-26.863-60-60 26.863-60 60-60zm68.731 125.183l-26.742-6.686c-28.096 20.209-62.152 15.699-83.978 0l-26.742 6.686C91.243 289.189 80 303.589 80 320.108V334c0 9.941 8.059 18 18 18h156c9.941 0 18-8.059 18-18v-13.892c0-16.519-11.243-30.919-27.269-34.925z"],"arrow-alt-circle-down":[512,512,[],"f358","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"],"arrow-alt-circle-left":[512,512,[],"f359","M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z"],"arrow-alt-circle-right":[512,512,[],"f35a","M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z"],"arrow-alt-circle-up":[512,512,[],"f35b","M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z"],bell:[448,512,[],"f0f3","M425.403 330.939c-16.989-16.785-34.546-34.143-34.546-116.083 0-83.026-60.958-152.074-140.467-164.762A31.843 31.843 0 0 0 256 32c0-17.673-14.327-32-32-32s-32 14.327-32 32a31.848 31.848 0 0 0 5.609 18.095C118.101 62.783 57.143 131.831 57.143 214.857c0 81.933-17.551 99.292-34.543 116.078C-25.496 378.441 9.726 448 66.919 448H160c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64h93.08c57.19 0 92.415-69.583 44.323-117.061zM224 472c-13.234 0-24-10.766-24-24h48c0 13.234-10.766 24-24 24zm157.092-72H66.9c-16.762 0-25.135-20.39-13.334-32.191 28.585-28.585 51.577-55.724 51.577-152.952C105.143 149.319 158.462 96 224 96s118.857 53.319 118.857 118.857c0 97.65 23.221 124.574 51.568 152.952C406.278 379.661 397.783 400 381.092 400z"],"bell-slash":[576,512,[],"f1f6","M130.9 400c-16.762 0-25.135-20.39-13.334-32.191 25.226-25.226 46.094-49.338 50.649-121.48l-46.777-41.274a168.48 168.48 0 0 0-.296 9.802c0 81.933-17.551 99.292-34.543 116.078C38.504 378.441 73.726 448 130.919 448H224c0 35.346 28.654 64 64 64s64-28.654 64-64h44.777l-54.4-48H130.9zM288 472c-13.234 0-24-10.766-24-24h48c0 13.234-10.766 24-24 24zm283.867.553l-67.931-59.571c13.104-24.118 11.524-56.318-14.532-82.042-16.989-16.785-34.546-34.143-34.546-116.083 0-83.026-60.958-152.074-140.467-164.762A31.848 31.848 0 0 0 320 32c0-17.673-14.327-32-32-32s-32 14.327-32 32a31.848 31.848 0 0 0 5.609 18.095c-41.471 6.618-77.891 28.571-103.249 59.841L36.459 3.037c-5.058-4.436-12.777-3.956-17.24 1.071L3.056 22.313C-1.407 27.34-.925 35.012 4.134 39.447l535.408 469.516c5.058 4.436 12.777 3.956 17.24-1.071l16.163-18.205c4.462-5.027 3.98-12.699-1.078-17.134zM288 96c65.538 0 118.857 53.319 118.857 118.857 0 97.65 23.221 124.574 51.568 152.952 2.908 2.908 4.573 6.328 5.209 9.832L194.482 141.612C216.258 113.867 250.075 96 288 96z"],bookmark:[384,512,[],"f02e","M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z"],building:[448,512,[],"f1ad","M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z"],calendar:[448,512,[],"f133","M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z"],"calendar-alt":[448,512,[],"f073","M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"calendar-check":[448,512,[],"f274","M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z"],"calendar-minus":[448,512,[],"f272","M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"calendar-plus":[448,512,[],"f271","M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"calendar-times":[448,512,[],"f273","M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"caret-square-down":[448,512,[],"f150","M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"caret-square-left":[448,512,[],"f191","M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"caret-square-right":[448,512,[],"f152","M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"caret-square-up":[448,512,[],"f151","M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"chart-bar":[512,512,[],"f080","M500 400c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v324h452zm-356-60v-72c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V140c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V204c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V108c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12z"],"check-circle":[512,512,[],"f058","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z"],"check-square":[448,512,[],"f14a","M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z"],circle:[512,512,[],"f111","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z"],clipboard:[384,512,[],"f328","M336 64h-80c0-35.29-28.71-64-64-64s-64 28.71-64 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h42v36c0 6.627 5.373 12 12 12h168c6.627 0 12-5.373 12-12v-36h42a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zM192 40c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24"],clock:[512,512,[],"f017","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z"],clone:[512,512,[],"f24d","M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z"],"closed-captioning":[512,512,[],"f20a","M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z"],comment:[576,512,[],"f075","M288 32C129 32 0 125.1 0 240c0 49.3 23.7 94.5 63.3 130.2-8.7 23.3-22.1 32.7-37.1 43.1C15.1 421-6 433 1.6 456.5c5.1 15.4 20.9 24.7 38.1 23.3 57.7-4.6 111.2-19.2 157-42.5 28.7 6.9 59.4 10.7 91.2 10.7 159.1 0 288-93 288-208C576 125.1 447.1 32 288 32zm0 368c-32.5 0-65.4-4.4-97.3-14-32.3 19-78.7 46-134.7 54 32-24 56.8-61.6 61.2-88.4C79.1 325.6 48 286.7 48 240c0-70.9 86.3-160 240-160s240 89.1 240 160c0 71-86.3 160-240 160z"],"comment-alt":[576,512,[],"f27a","M288 32C129 32 0 125.1 0 240c0 49.3 23.7 94.5 63.3 130.2-8.7 23.3-22.1 32.7-37.1 43.1C15.1 421-6 433 1.6 456.5c5.1 15.4 20.9 24.7 38.1 23.3 57.7-4.6 111.2-19.2 157-42.5 28.7 6.9 59.4 10.7 91.2 10.7 159.1 0 288-93 288-208C576 125.1 447.1 32 288 32zm0 368c-32.5 0-65.4-4.4-97.3-14-32.3 19-78.7 46-134.7 54 32-24 56.8-61.6 61.2-88.4C79.1 325.6 48 286.7 48 240c0-70.9 86.3-160 240-160s240 89.1 240 160c0 71-86.3 160-240 160zm-64-160c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48 48 21.5 48 48zm112 0c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48 48 21.5 48 48zm112 0c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48 48 21.5 48 48z"],comments:[576,512,[],"f086","M574.507 443.86c-5.421 21.261-24.57 36.14-46.511 36.14-32.246 0-66.511-9.99-102.1-29.734-50.64 11.626-109.151 7.877-157.96-13.437 41.144-2.919 80.361-12.339 116.331-28.705 16.322-1.22 32.674-4.32 48.631-9.593C454.404 412.365 490.663 432 527.996 432c-32-17.455-43.219-38.958-46.159-58.502 25.443-18.848 46.159-47.183 46.159-81.135 0-10.495-2.383-21.536-7.041-32.467 7.405-25.93 8.656-50.194 5.185-73.938 32.164 30.461 49.856 69.128 49.856 106.405 0 33.893-12.913 65.047-34.976 91.119 2.653 2.038 5.924 4.176 9.962 6.378 19.261 10.508 28.947 32.739 23.525 54zM240.002 80C117.068 80 48.004 152.877 48.004 210.909c0 38.196 24.859 70.072 55.391 91.276-3.527 21.988-16.991 46.179-55.391 65.815 44.8 0 88.31-22.089 114.119-37.653 25.52 7.906 51.883 11.471 77.879 11.471C362.998 341.818 432 268.976 432 210.909 432 152.882 362.943 80 240.002 80m0-48C390.193 32 480 126.026 480 210.909c0 22.745-6.506 46.394-18.816 68.391-11.878 21.226-28.539 40.294-49.523 56.674-21.593 16.857-46.798 30.045-74.913 39.197-29.855 9.719-62.405 14.646-96.746 14.646-24.449 0-48.34-2.687-71.292-8.004C126.311 404.512 85.785 416 48.004 416c-22.18 0-41.472-15.197-46.665-36.761-5.194-21.563 5.064-43.878 24.811-53.976 7.663-3.918 13.324-7.737 17.519-11.294-7.393-7.829-13.952-16.124-19.634-24.844C8.09 264.655.005 238.339.005 210.909.005 126.259 89.508 32 240.002 32z"],compass:[512,512,[],"f14e","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm91.326-312.131l-33.359 137.779a24.005 24.005 0 0 1-6.772 11.729l-102.64 97.779c-17.104 16.293-45.56.434-39.88-23.024l33.359-137.779a23.997 23.997 0 0 1 6.772-11.729l102.642-97.779c17.285-16.47 45.494-.175 39.878 23.024zM256 224c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"],copy:[448,512,[],"f0c5","M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"],copyright:[512,512,[],"f1f9","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z"],"credit-card":[576,512,[],"f09d","M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z"],"dot-circle":[512,512,[],"f192","M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"],edit:[576,512,[],"f044","M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z"],envelope:[512,512,[],"f0e0","M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"],"envelope-open":[512,512,[],"f2b6","M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z"],"eye-slash":[576,512,[],"f070","M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z"],file:[384,512,[],"f15b","M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z"],"file-alt":[384,512,[],"f15c","M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z"],"file-archive":[384,512,[],"f1c6","M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM256 51.882L332.118 128H256V51.882zM336 464H48V48h79.714v16h32V48H208v104c0 13.255 10.745 24 24 24h104v288zM192.27 96h-32V64h32v32zm-32 0v32h-32V96h32zm0 64v32h-32v-32h32zm32 0h-32v-32h32v32zm1.909 105.678A12 12 0 0 0 182.406 256H160.27v-32h-32v32l-19.69 97.106C101.989 385.611 126.834 416 160 416c33.052 0 57.871-30.192 51.476-62.62l-17.297-87.702zM160.27 390.073c-17.918 0-32.444-12.105-32.444-27.036 0-14.932 14.525-27.036 32.444-27.036s32.444 12.105 32.444 27.036c0 14.931-14.526 27.036-32.444 27.036zm32-166.073h-32v-32h32v32z"],"file-audio":[384,512,[],"f1c7","M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z"],"file-code":[384,512,[],"f1c9","M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm101.677-115.115L116.854 320l32.822-28.885a8.793 8.793 0 0 0 .605-12.624l-17.403-18.564c-3.384-3.613-8.964-3.662-12.438-.401L62.78 313.58c-3.703 3.474-3.704 9.367.001 12.84l57.659 54.055a8.738 8.738 0 0 0 6.012 2.381 8.746 8.746 0 0 0 6.427-2.782l17.403-18.563a8.795 8.795 0 0 0-.605-12.626zm84.284-127.85l-24.401-7.084a8.796 8.796 0 0 0-10.905 5.998L144.04 408.061c-1.353 4.66 1.338 9.552 5.998 10.905l24.403 7.084c4.68 1.355 9.557-1.354 10.905-5.998l54.612-188.112c1.354-4.66-1.337-9.552-5.997-10.905zm87.258 92.545l-57.658-54.055c-3.526-3.307-9.099-3.165-12.439.401l-17.403 18.563a8.795 8.795 0 0 0 .605 12.625L267.146 320l-32.822 28.885a8.793 8.793 0 0 0-.605 12.624l17.403 18.564a8.797 8.797 0 0 0 12.439.401h-.001l57.66-54.055c3.703-3.473 3.703-9.366-.001-12.839z"],"file-excel":[384,512,[],"f1c3","M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z"],"file-image":[384,512,[],"f1c5","M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z"],"file-pdf":[384,512,[],"f1c1","M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"],"file-powerpoint":[384,512,[],"f1c4","M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z"],"file-video":[384,512,[],"f1c8","M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z"],"file-word":[384,512,[],"f1c2","M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z"],flag:[512,512,[],"f024","M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z"],folder:[512,512,[],"f07b","M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-6 272H54c-3.314 0-6-2.678-6-5.992V117.992A5.993 5.993 0 0 1 54 112h134.118l64 64H458a6 6 0 0 1 6 6v212a6 6 0 0 1-6 6z"],"folder-open":[576,512,[],"f07c","M527.943 224H480v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h400a48.001 48.001 0 0 0 40.704-22.56l79.942-128c19.948-31.917-3.038-73.44-40.703-73.44zM54 112h134.118l64 64H426a6 6 0 0 1 6 6v42H152a48 48 0 0 0-41.098 23.202L48 351.449V117.993A5.993 5.993 0 0 1 54 112zm394 288H72l77.234-128H528l-80 128z"],frown:[512,512,[],"f119","M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm64 136c-9.535 0-18.512 2.386-26.37 6.589h.017c12.735 0 23.059 10.324 23.059 23.059 0 12.735-10.324 23.059-23.059 23.059s-23.059-10.324-23.059-23.059v-.017C266.386 181.488 264 190.465 264 200c0 30.928 25.072 56 56 56s56-25.072 56-56-25.072-56-56-56zm-128 0c-9.535 0-18.512 2.386-26.37 6.589h.017c12.735 0 23.059 10.324 23.059 23.059 0 12.735-10.324 23.059-23.059 23.059-12.735 0-23.059-10.324-23.059-23.059v-.017C138.386 181.488 136 190.465 136 200c0 30.928 25.072 56 56 56s56-25.072 56-56-25.072-56-56-56zm171.547 201.782c-56.595-76.964-158.383-77.065-215.057-.001-18.82 25.593 19.858 54.018 38.67 28.438 37.511-51.01 100.365-50.796 137.717-.001 18.509 25.172 57.821-2.395 38.67-28.436z"],futbol:[496,512,[],"f1e3","M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z"],gem:[576,512,[],"f3a5","M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z"],"hand-lizard":[576,512,[],"f258","M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z"],"hand-paper":[448,512,[],"f256","M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z"],"hand-peace":[448,512,[],"f25b","M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z"],"hand-point-down":[448,512,[],"f0a7","M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"],"hand-point-left":[512,512,[],"f0a5","M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"],"hand-point-right":[512,512,[],"f0a4","M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"],"hand-point-up":[448,512,[],"f0a6","M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"],"hand-pointer":[448,512,[],"f25a","M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z"],"hand-rock":[512,512,[],"f255","M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z"],"hand-scissors":[512,512,[],"f257","M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z"],"hand-spock":[512,512,[],"f259","M21.096 381.79l129.092 121.513a32 32 0 0 0 21.932 8.698h237.6c14.17 0 26.653-9.319 30.68-22.904l31.815-107.313A115.955 115.955 0 0 0 477 348.811v-36.839c0-4.051.476-8.104 1.414-12.045l31.73-133.41c10.099-42.412-22.316-82.738-65.544-82.525-4.144-24.856-22.543-47.165-49.85-53.992-35.803-8.952-72.227 12.655-81.25 48.75L296.599 184 274.924 52.01c-8.286-36.07-44.303-58.572-80.304-50.296-29.616 6.804-50.138 32.389-51.882 61.295-42.637.831-73.455 40.563-64.071 81.844l31.04 136.508c-27.194-22.515-67.284-19.992-91.482 5.722-25.376 26.961-24.098 69.325 2.871 94.707zm32.068-61.811l.002-.001c7.219-7.672 19.241-7.98 26.856-.813l53.012 49.894C143.225 378.649 160 371.4 160 357.406v-69.479c0-1.193-.134-2.383-.397-3.546l-34.13-150.172c-5.596-24.617 31.502-32.86 37.054-8.421l30.399 133.757a16 16 0 0 0 15.603 12.454h8.604c10.276 0 17.894-9.567 15.594-19.583l-41.62-181.153c-5.623-24.469 31.39-33.076 37.035-8.508l45.22 196.828A16 16 0 0 0 288.956 272h13.217a16 16 0 0 0 15.522-12.119l42.372-169.49c6.104-24.422 42.962-15.159 36.865 9.217L358.805 252.12c-2.521 10.088 5.115 19.88 15.522 19.88h9.694a16 16 0 0 0 15.565-12.295L426.509 146.6c5.821-24.448 42.797-15.687 36.966 8.802L431.72 288.81a100.094 100.094 0 0 0-2.72 23.162v36.839c0 6.548-.943 13.051-2.805 19.328L397.775 464h-219.31L53.978 346.836c-7.629-7.18-7.994-19.229-.814-26.857z"],handshake:[640,512,[],"f2b5","M616 96h-48c-7.107 0-13.49 3.091-17.884 8H526.59l-31.13-36.3-.16-.18A103.974 103.974 0 0 0 417.03 32h-46.55c-17.75 0-34.9 4.94-49.69 14.01C304.33 36.93 285.67 32 266.62 32h-32.11c-28.903 0-57.599 11.219-79.2 32.8L116.12 104H89.884C85.49 99.091 79.107 96 72 96H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h48c10.449 0 19.334-6.68 22.629-16h18.801l75.35 67.57c25.542 26.45 59.925 44.43 96.58 44.43 16.39 0 32.28-3.85 46.1-10.93 24.936.496 51.101-10.368 69.07-31.41 19.684-5.579 37.503-17.426 50.72-34.6 20.989-4.401 40.728-16.492 53.42-35.06h40.701c3.295 9.32 12.18 16 22.629 16h48c13.255 0 24-10.745 24-24V120c0-13.255-10.745-24-24-24zM48 352c-8.837 0-16-7.163-16-16s7.163-16 16-16 16 7.163 16 16-7.163 16-16 16zm412.52-5.76c-15.35 14.295-36.884 11.328-39.95 8 1.414 13.382-18.257 41.043-49.08 38.88-5.541 18.523-28.218 33.826-51.49 25.75-8.89 8.89-22.46 13.13-34.64 13.13-24.95 0-47.77-14.54-63.14-30.91l-81.3-72.91a31.976 31.976 0 0 0-21.36-8.18H96V152h26.75c8.48 0 16.62-3.37 22.62-9.37l43.88-43.88A64.004 64.004 0 0 1 234.51 80h32.11c5.8 0 11.51.79 17 2.3l-43.27 50.49c-23.56 27.48-23.84 67.62-.66 95.44 32.388 38.866 91.378 39.228 124.48 1.98l25.98-30.08L462.59 296c13.44 14.6 10.95 38.13-2.07 50.24zM544 320h-24.458c.104-20.261-6.799-39.33-19.762-54.4L421.7 162.28c4.51-9.51 2.34-21.23-6.01-28.45-10.075-8.691-25.23-7.499-33.86 2.48l-53.63 62.12c-13.828 15.41-38.223 15.145-51.64-.93a25.857 25.857 0 0 1 .23-33.47l57.92-67.58A47.09 47.09 0 0 1 370.48 80h46.55c16.11 0 31.44 6.94 42.07 19.04L504.52 152H544v168zm48 32c-8.837 0-16-7.163-16-16s7.163-16 16-16 16 7.163 16 16-7.163 16-16 16z"],hdd:[576,512,[],"f0a0","M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z"],heart:[576,512,[],"f004","M257.3 475.4L92.5 313.6C85.4 307 24 248.1 24 174.8 24 84.1 80.8 24 176 24c41.4 0 80.6 22.8 112 49.8 31.3-27 70.6-49.8 112-49.8 91.7 0 152 56.5 152 150.8 0 52-31.8 103.5-68.1 138.7l-.4.4-164.8 161.5a43.7 43.7 0 0 1-61.4 0zM125.9 279.1L288 438.3l161.8-158.7c27.3-27 54.2-66.3 54.2-104.8C504 107.9 465.8 72 400 72c-47.2 0-92.8 49.3-112 68.4-17-17-64-68.4-112-68.4-65.9 0-104 35.9-104 102.8 0 37.3 26.7 78.9 53.9 104.3z"],hospital:[448,512,[],"f0f8","M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z"],hourglass:[384,512,[],"f254","M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z"],"id-badge":[384,512,[],"f2c1","M0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48H48C21.49 0 0 21.49 0 48zm336 32v378a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V80h288zm-144 80c38.66 0 70 31.34 70 70s-31.34 70-70 70-70-31.34-70-70 31.34-70 70-70zm80.187 146.047l-31.2-7.8c-32.779 23.577-72.51 18.316-97.974 0l-31.2 7.8C93.116 310.721 80 327.52 80 346.793V363c0 11.598 9.402 21 21 21h182c11.598 0 21-9.402 21-21v-16.207c0-19.273-13.116-36.072-31.813-40.746z"],"id-card":[512,512,[],"f2c2","M404 256H300c-6.627 0-12-5.373-12-12v-16c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v16c0 6.627-5.373 12-12 12zm12 60v-16c0-6.627-5.373-12-12-12H300c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h104c6.627 0 12-5.373 12-12zm96-204v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zm-48 282V144H48v250a6 6 0 0 0 6 6h404a6 6 0 0 0 6-6zM176 192c27.614 0 50 22.386 50 50s-22.386 50-50 50-50-22.386-50-50 22.386-50 50-50zm57.276 104.319l-22.285-5.571c-23.413 16.841-51.793 13.083-69.981 0l-22.285 5.571C105.369 299.658 96 311.657 96 325.423V337c0 8.284 6.716 15 15 15h130c8.284 0 15-6.716 15-15v-11.577c0-13.766-9.369-25.765-22.724-29.104z"],image:[512,512,[],"f03e","M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z"],images:[576,512,[],"f302","M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z"],keyboard:[576,512,[],"f11c","M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z"],lemon:[512,512,[],"f094","M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z"],"life-ring":[512,512,[],"f1cd","M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z"],lightbulb:[384,512,[],"f0eb","M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zM128 176c0-35.29 28.71-64 64-64 8.837 0 16-7.164 16-16s-7.163-16-16-16c-52.935 0-96 43.065-96 96 0 8.836 7.164 16 16 16s16-7.164 16-16zm64-128c70.734 0 128 57.254 128 128 0 77.602-37.383 60.477-80.98 160h-94.04C101.318 236.33 64 253.869 64 176c0-70.735 57.254-128 128-128m0-48C94.805 0 16 78.803 16 176c0 101.731 51.697 91.541 90.516 192.674 3.55 9.249 12.47 15.326 22.376 15.326h126.215c9.906 0 18.826-6.078 22.376-15.326C316.303 267.541 368 277.731 368 176 368 78.803 289.195 0 192 0z"],"list-alt":[512,512,[],"f022","M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z"],map:[576,512,[],"f279","M508.505 36.17L381.517 92.576 207.179 34.463a47.992 47.992 0 0 0-34.674 1.674l-144 64A48 48 0 0 0 0 144v287.967c0 34.938 35.991 57.864 67.495 43.863l126.988-56.406 174.339 58.113a47.992 47.992 0 0 0 34.674-1.674l144-64A48 48 0 0 0 576 368V80.033c0-34.938-35.991-57.864-67.495-43.863zM360 424l-144-48V88l144 48v288zm-312 8V144l120-53.333v288L48 432zm480-64l-120 53.333v-288L528 80v288z"],meh:[512,512,[],"f11a","M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm64 136c-9.535 0-18.512 2.386-26.37 6.589h.017c12.735 0 23.059 10.324 23.059 23.059 0 12.735-10.324 23.059-23.059 23.059s-23.059-10.324-23.059-23.059v-.017C266.386 181.488 264 190.465 264 200c0 30.928 25.072 56 56 56s56-25.072 56-56-25.072-56-56-56zm-128 0c-9.535 0-18.512 2.386-26.37 6.589h.017c12.735 0 23.059 10.324 23.059 23.059 0 12.735-10.324 23.059-23.059 23.059-12.735 0-23.059-10.324-23.059-23.059v-.017C138.386 181.488 136 190.465 136 200c0 30.928 25.072 56 56 56s56-25.072 56-56-25.072-56-56-56zm136 184H184c-31.776 0-31.749 48 0 48h144c31.776 0 31.749-48 0-48z"],"minus-square":[448,512,[],"f146","M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"money-bill-alt":[640,512,[],"f3d1","M320 144c-53.021 0-96 50.143-96 112 0 61.847 42.977 112 96 112 53 0 96-50.13 96-112 0-61.857-42.979-112-96-112zm48 164.428c0 7.477-3.917 11.572-11.572 11.572h-67.293c-7.656 0-11.573-4.095-11.573-11.572v-8.901c0-7.477 3.917-11.572 11.573-11.572h15.131v-39.878c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.939c4.449-4.095 8.366-5.697 14.42-5.697h12.105c7.656 0 11.75 3.916 11.75 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.902zM616 64H24C10.745 64 0 74.745 0 88v335c0 13.255 10.745 24 24 24h592c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM512 400H128c0-44.183-35.817-80-80-80V192c44.183 0 80-35.817 80-80h384c0 44.183 35.817 80 80 80v128c-44.183 0-80 35.817-80 80z"],moon:[512,512,[],"f186","M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z"],newspaper:[576,512,[],"f1ea","M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z"],"object-group":[512,512,[],"f247","M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z"],"object-ungroup":[576,512,[],"f248","M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z"],"paper-plane":[512,512,[],"f1d8","M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"],"pause-circle":[512,512,[],"f28b","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z"],"play-circle":[512,512,[],"f144","M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z"],"plus-square":[448,512,[],"f0fe","M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],"question-circle":[512,512,[],"f059","M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z"],registered:[512,512,[],"f25d","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z"],save:[448,512,[],"f0c7","M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z"],"share-square":[576,512,[],"f14d","M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z"],smile:[512,512,[],"f118","M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm64 136c-9.535 0-18.512 2.386-26.37 6.589h.017c12.735 0 23.059 10.324 23.059 23.059 0 12.735-10.324 23.059-23.059 23.059s-23.059-10.324-23.059-23.059v-.017C266.386 181.488 264 190.465 264 200c0 30.928 25.072 56 56 56s56-25.072 56-56-25.072-56-56-56zm-128 0c-9.535 0-18.512 2.386-26.37 6.589h.017c12.735 0 23.059 10.324 23.059 23.059 0 12.735-10.324 23.059-23.059 23.059-12.735 0-23.059-10.324-23.059-23.059v-.017C138.386 181.488 136 190.465 136 200c0 30.928 25.072 56 56 56s56-25.072 56-56-25.072-56-56-56zm195.372 182.219c18.819-25.592-19.856-54.017-38.67-28.438-50.135 68.177-135.229 68.18-185.367 0-18.828-25.601-57.478 2.861-38.67 28.438 69.298 94.231 193.323 94.351 262.707 0z"],snowflake:[448,512,[],"f2dc","M438.237 355.927l-66.574-38.54 59.448-10.327c5.846-1.375 10.609-5.183 13.458-10.13 2.48-4.307 3.506-9.478 2.524-14.651-2.11-11.115-12.686-18.039-23.621-15.467l-85.423 31.115L255.914 256l82.136-41.926 85.423 31.115c10.936 2.572 21.512-4.352 23.621-15.467 2.111-11.115-5.046-22.209-15.981-24.781l-59.448-10.327 66.573-38.54c9.54-5.523 12.615-18.092 6.867-28.074-5.748-9.982-18.14-13.596-27.68-8.074l-66.574 38.54 20.805-56.787c3.246-10.782-2.758-22.542-13.413-26.268-10.654-3.725-21.922 1.997-25.168 12.779l-15.838 89.735-72.423 41.926V136l69.585-58.621c7.689-8.21 6.997-20.856-1.548-28.245-8.545-7.391-21.705-6.723-29.394 1.486l-38.644 46.46V20c0-11.046-9.318-20-20.813-20s-20.813 8.954-20.813 20v77.08l-38.644-46.46c-7.689-8.21-20.849-8.876-29.394-1.486-8.544 7.389-9.236 20.035-1.547 28.245L203.187 136v83.853l-72.423-41.926-15.838-89.736c-3.247-10.782-14.515-16.504-25.169-12.779-10.656 3.725-16.659 15.486-13.413 26.268l20.805 56.787-66.573-38.54c-9.54-5.523-21.933-1.908-27.68 8.074s-2.673 22.551 6.867 28.074l66.574 38.54-59.449 10.328C5.953 207.515-1.202 218.609.907 229.724c2.11 11.114 12.686 18.038 23.622 15.466l85.422-31.115L192.086 256l-82.136 41.926-85.423-31.115c-10.936-2.572-21.511 4.352-23.622 15.466-2.109 11.113 5.046 22.209 15.981 24.781l59.449 10.328-66.574 38.54C.223 361.449-2.852 374.018 2.896 384s18.14 13.597 27.68 8.074l66.574-38.54-20.805 56.786c-1.735 5.764-.828 11.805 2.02 16.751 2.48 4.307 6.433 7.784 11.392 9.517 10.655 3.725 21.923-1.997 25.169-12.779l15.838-89.736 72.423-41.926V376l-69.585 58.621c-7.69 8.21-6.997 20.855 1.547 28.245 8.544 7.388 21.705 6.723 29.394-1.487l38.644-46.46V492c0 11.046 9.318 20 20.813 20s20.813-8.954 20.813-20v-77.081l38.644 46.46c4.111 4.389 9.782 6.621 15.478 6.621 4.96 0 9.939-1.694 13.916-5.134 8.545-7.39 9.237-20.035 1.548-28.245L244.813 376v-83.853l72.423 41.926 15.838 89.736c3.246 10.782 14.514 16.504 25.168 12.779 10.653-3.726 16.659-15.487 13.412-26.268l-20.805-56.787 66.574 38.54c9.54 5.523 21.933 1.908 27.68-8.074 5.749-9.981 2.675-22.55-6.866-28.072z"],square:[448,512,[],"f0c8","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z"],star:[576,512,[],"f005","M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"],"star-half":[576,512,[],"f089","M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z"],"sticky-note":[448,512,[],"f249","M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z"],"stop-circle":[512,512,[],"f28d","M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z"],sun:[512,512,[],"f185","M220.116 487.936l-20.213-49.425a3.992 3.992 0 0 0-5.808-1.886l-45.404 28.104c-29.466 18.24-66.295-8.519-58.054-42.179l12.699-51.865a3.993 3.993 0 0 0-3.59-4.941l-53.251-3.951c-34.554-2.562-48.632-45.855-22.174-68.247L65.08 259.05a3.992 3.992 0 0 0 0-6.106l-40.76-34.497c-26.45-22.384-12.39-65.682 22.174-68.246l53.251-3.951a3.993 3.993 0 0 0 3.59-4.941L90.637 89.443c-8.239-33.656 28.581-60.42 58.054-42.179l45.403 28.104a3.993 3.993 0 0 0 5.808-1.887l20.213-49.425c13.116-32.071 58.638-32.081 71.758 0l20.212 49.424a3.994 3.994 0 0 0 5.809 1.887l45.403-28.104c29.464-18.236 66.297 8.513 58.054 42.179l-12.699 51.865a3.995 3.995 0 0 0 3.59 4.941l53.251 3.951c34.553 2.563 48.633 45.854 22.175 68.246l-40.76 34.497a3.993 3.993 0 0 0 0 6.107l40.76 34.496c26.511 22.441 12.322 65.689-22.175 68.247l-53.251 3.951a3.993 3.993 0 0 0-3.589 4.942l12.698 51.864c8.241 33.658-28.583 60.421-58.054 42.18l-45.403-28.104a3.994 3.994 0 0 0-5.809 1.887l-20.212 49.424c-13.159 32.178-58.675 31.993-71.757 0zm16.814-64.568l19.064 46.616 19.064-46.615c10.308-25.2 40.778-35.066 63.892-20.759l42.822 26.507-11.976-48.919c-6.475-26.444 12.38-52.339 39.487-54.349l50.226-3.726-38.444-32.536c-20.782-17.591-20.747-49.621.001-67.18l38.442-32.536-50.225-3.727c-27.151-2.015-45.95-27.948-39.488-54.349l11.978-48.919-42.823 26.507c-23.151 14.327-53.603 4.4-63.892-20.76l-19.064-46.615-19.064 46.617c-10.305 25.198-40.778 35.066-63.891 20.76l-42.823-26.508 11.977 48.918c6.474 26.446-12.381 52.338-39.488 54.35l-50.224 3.726 38.443 32.537c20.782 17.588 20.747 49.619 0 67.178L52.48 322.123l50.226 3.726c27.151 2.014 45.95 27.947 39.487 54.349l-11.977 48.919 42.823-26.507c23.188-14.355 53.622-4.352 63.891 20.758zM256 384c-70.58 0-128-57.421-128-128 0-70.58 57.42-128 128-128 70.579 0 128 57.42 128 128 0 70.579-57.421 128-128 128zm0-208c-44.112 0-80 35.888-80 80s35.888 80 80 80 80-35.888 80-80-35.888-80-80-80z"],"thumbs-down":[512,512,[],"f165","M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z"],"thumbs-up":[512,512,[],"f164","M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"],"times-circle":[512,512,[],"f057","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"],"trash-alt":[448,512,[],"f2ed","M192 188v216c0 6.627-5.373 12-12 12h-24c-6.627 0-12-5.373-12-12V188c0-6.627 5.373-12 12-12h24c6.627 0 12 5.373 12 12zm100-12h-24c-6.627 0-12 5.373-12 12v216c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12V188c0-6.627-5.373-12-12-12zm132-96c13.255 0 24 10.745 24 24v12c0 6.627-5.373 12-12 12h-20v336c0 26.51-21.49 48-48 48H80c-26.51 0-48-21.49-48-48V128H12c-6.627 0-12-5.373-12-12v-12c0-13.255 10.745-24 24-24h74.411l34.018-56.696A48 48 0 0 1 173.589 0h100.823a48 48 0 0 1 41.16 23.304L349.589 80H424zm-269.611 0h139.223L276.16 50.913A6 6 0 0 0 271.015 48h-94.028a6 6 0 0 0-5.145 2.913L154.389 80zM368 128H80v330a6 6 0 0 0 6 6h276a6 6 0 0 0 6-6V128z"],user:[512,512,[],"f007","M423.309 291.025L402.221 285C431.798 243.89 436 202.294 436 180 436 80.649 355.484 0 256 0 156.649 0 76 80.516 76 180c0 22.299 4.198 63.884 33.779 105l-21.088 6.025C21.28 310.285 0 371.59 0 408.605v25.681C0 477.138 34.862 512 77.714 512h356.571C477.138 512 512 477.138 512 434.286v-25.681c0-36.247-20.725-98.161-88.691-117.58zM256 48c72.902 0 132 59.099 132 132s-59.098 132-132 132-132-59.099-132-132S183.098 48 256 48zm208 386.286c0 16.41-13.304 29.714-29.714 29.714H77.714C61.304 464 48 450.696 48 434.286v-25.681c0-33.167 21.987-62.316 53.878-71.427l46.103-13.172C162.683 335.058 200.427 360 256 360s93.317-24.942 108.019-35.994l46.103 13.172C442.013 346.29 464 375.438 464 408.605v25.681z"],"user-circle":[512,512,[],"f2bd","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.457 0 200 89.543 200 200 0 36.982-10.049 71.611-27.548 101.328-7.072-25.444-25.663-54.208-63.93-65.374C377.207 271.782 384 248.414 384 224c0-70.689-57.189-128-128-128-70.689 0-128 57.19-128 128 0 24.414 6.793 47.783 19.478 67.954-38.299 11.175-56.876 39.913-63.938 65.362C66.046 327.601 56 292.976 56 256c0-110.457 89.543-200 200-200zm80 168c0 44.183-35.817 80-80 80s-80-35.817-80-80 35.817-80 80-80 80 35.817 80 80zM128 409.669v-27.758c0-20.41 13.53-38.348 33.156-43.955l24.476-6.993C206.342 344.648 230.605 352 256 352s49.658-7.352 70.369-21.038l24.476 6.993C370.47 343.563 384 361.5 384 381.911v27.758C349.315 438.592 304.693 456 256 456s-93.315-17.408-128-46.331z"],"window-close":[512,512,[],"f410","M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z"],"window-maximize":[512,512,[],"f2d0","M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z"],"window-minimize":[512,512,[],"f2d1","M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z"],"window-restore":[512,512,[],"f2d2","M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z"]};!function(c){try{c()}catch(c){if(!e)throw c}}(function(){!function c(l,h){var v=Object.keys(h).reduce(function(c,l){var v=h[l];return v.icon?c[v.iconName]=v.icon:c[l]=v,c},{});"function"==typeof s.hooks.addPack?s.hooks.addPack(l,v):s.styles[l]=r({},s.styles[l]||{},v),"fas"===l&&c("fa",h)}("far",f)})}(),function(){"use strict";var c={};try{"undefined"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?"":l,v=c,z=(~h.indexOf("MSIE")||h.indexOf("Trident/"),"___FONT_AWESOME___"),e=function(){try{return!0}catch(c){return!1}}(),a=[1,2,3,4,5,6,7,8,9,10],m=a.concat([11,12,13,14,15,16,17,18,19,20]);["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(a.map(function(c){return c+"x"})).concat(m.map(function(c){return"w-"+c}));var t=v||{};t[z]||(t[z]={}),t[z].styles||(t[z].styles={}),t[z].hooks||(t[z].hooks={}),t[z].shims||(t[z].shims=[]);var s=t[z],r=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var v in h)Object.prototype.hasOwnProperty.call(h,v)&&(c[v]=h[v])}return c};var f={"address-book":[448,512,[],"f2b9","M436 160c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V48c0-26.51-21.49-48-48-48H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h20c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20v-64h20c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20v-64h20zm-228-32c44.183 0 80 35.817 80 80s-35.817 80-80 80-80-35.817-80-80 35.817-80 80-80zm128 232c0 13.255-10.745 24-24 24H104c-13.255 0-24-10.745-24-24v-18.523c0-22.026 14.99-41.225 36.358-46.567l35.657-8.914c29.101 20.932 74.509 26.945 111.97 0l35.657 8.914C321.01 300.252 336 319.452 336 341.477V360z"],"address-card":[512,512,[],"f2bb","M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-288 80c38.66 0 70 31.34 70 70s-31.34 70-70 70-70-31.34-70-70 31.34-70 70-70zm112 203c0 11.598-9.402 21-21 21H85c-11.598 0-21-9.402-21-21v-16.207c0-19.272 13.116-36.072 31.813-40.746l31.2-7.8c25.464 18.316 65.195 23.577 97.974 0l31.2 7.8C274.884 294.721 288 311.52 288 330.793V347zm160-39c0 6.627-5.373 12-12 12H332c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v8zm0-64c0 6.627-5.373 12-12 12H332c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v8zm0-64c0 6.627-5.373 12-12 12H332c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v8z"],adjust:[512,512,[],"f042","M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z"],"align-center":[448,512,[],"f037","M352 44v40c0 8.837-7.163 16-16 16H112c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h224c8.837 0 16 7.163 16 16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm320-200H112c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z"],"align-justify":[448,512,[],"f039","M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm16 144h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0-128h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],"align-left":[448,512,[],"f036","M288 44v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16zM0 172v40c0 8.837 7.163 16 16 16h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16zm16 312h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm256-200H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z"],"align-right":[448,512,[],"f038","M160 84V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H176c-8.837 0-16-7.163-16-16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],ambulance:[640,512,[],"f0f9","M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"],"american-sign-language-interpreting":[640,512,[],"f2a3","M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z"],anchor:[576,512,[],"f13d","M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z"],"angle-double-down":[320,512,[],"f103","M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"],"angle-double-left":[448,512,[],"f100","M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"],"angle-double-right":[448,512,[],"f101","M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"],"angle-double-up":[320,512,[],"f102","M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"],"angle-down":[320,512,[],"f107","M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"],"angle-left":[256,512,[],"f104","M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"],"angle-right":[256,512,[],"f105","M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"],"angle-up":[320,512,[],"f106","M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"],archive:[512,512,[],"f187","M488 128H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h464c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24zm-8 328V184c0-13.255-10.745-24-24-24H56c-13.255 0-24 10.745-24 24v272c0 13.255 10.745 24 24 24h400c13.255 0 24-10.745 24-24zM308 256H204c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12z"],"arrow-alt-circle-down":[512,512,[],"f358","M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"],"arrow-alt-circle-left":[512,512,[],"f359","M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"],"arrow-alt-circle-right":[512,512,[],"f35a","M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"],"arrow-alt-circle-up":[512,512,[],"f35b","M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"],"arrow-circle-down":[512,512,[],"f0ab","M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"],"arrow-circle-left":[512,512,[],"f0a8","M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"],"arrow-circle-right":[512,512,[],"f0a9","M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"],"arrow-circle-up":[512,512,[],"f0aa","M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"],"arrow-down":[448,512,[],"f063","M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"],"arrow-left":[448,512,[],"f060","M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"],"arrow-right":[448,512,[],"f061","M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"],"arrow-up":[448,512,[],"f062","M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"],"arrows-alt":[512,512,[],"f0b2","M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"],"arrows-alt-h":[512,512,[],"f337","M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"],"arrows-alt-v":[256,512,[],"f338","M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"],"assistive-listening-systems":[512,512,[],"f2a2","M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z"],asterisk:[512,512,[],"f069","M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"],at:[512,512,[],"f1fa","M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z"],"audio-description":[512,512,[],"f29e","M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z"],backward:[512,512,[],"f04a","M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z"],"balance-scale":[640,512,[],"f24e","M352 448h168c13.255 0 24 10.745 24 24v16c0 13.255-10.745 24-24 24H120c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h168V153.324C264.469 143.04 246.836 121.778 241.603 96H120c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h135.999C270.594 12.57 293.828 0 320 0s49.406 12.57 64.001 32H520c13.255 0 24 10.745 24 24v16c0 13.255-10.745 24-24 24H398.397c-5.233 25.778-22.866 47.04-46.397 57.324V448zm287.981-112c.001-16.182 1.342-8.726-85.048-181.506-17.647-35.294-68.186-35.358-85.865 0C381.94 328.75 384.019 320.331 384.019 336H384c0 44.183 57.308 80 128 80s128-35.817 128-80h-.019zM512 176l72 144H440l72-144zM255.981 336c.001-16.182 1.342-8.726-85.048-181.506-17.647-35.294-68.186-35.358-85.865 0C-2.06 328.75.019 320.331.019 336H0c0 44.183 57.308 80 128 80s128-35.817 128-80h-.019zM128 176l72 144H56l72-144z"],ban:[512,512,[],"f05e","M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"],"band-aid":[640,512,[],"f462","M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z"],barcode:[512,512,[],"f02a","M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z"],bars:[448,512,[],"f0c9","M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],"baseball-ball":[496,512,[],"f433","M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z"],"basketball-ball":[496,512,[],"f434","M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z"],bath:[512,512,[],"f2cd","M488 256H80V112c0-17.645 14.355-32 32-32 11.351 0 21.332 5.945 27.015 14.88-16.492 25.207-14.687 59.576 6.838 83.035-4.176 4.713-4.021 11.916.491 16.428l11.314 11.314c4.686 4.686 12.284 4.686 16.971 0l95.03-95.029c4.686-4.686 4.686-12.284 0-16.971l-11.314-11.314c-4.512-4.512-11.715-4.666-16.428-.491-17.949-16.469-42.294-21.429-64.178-15.365C163.281 45.667 139.212 32 112 32c-44.112 0-80 35.888-80 80v144h-8c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h8v32c0 28.43 12.362 53.969 32 71.547V456c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-8h256v8c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-32.453c19.638-17.578 32-43.117 32-71.547v-32h8c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"],"battery-empty":[640,512,[],"f244","M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z"],"battery-full":[640,512,[],"f240","M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z"],"battery-half":[640,512,[],"f242","M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z"],"battery-quarter":[640,512,[],"f243","M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z"],"battery-three-quarters":[640,512,[],"f241","M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z"],bed:[576,512,[],"f236","M552 288c13.255 0 24 10.745 24 24v136h-96v-64H96v64H0V88c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24v200h456zM192 96c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80zm384 128c0-53.019-42.981-96-96-96H312c-13.255 0-24 10.745-24 24v104h288v-32z"],beer:[448,512,[],"f0fc","M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z"],bell:[448,512,[],"f0f3","M433.884 366.059C411.634 343.809 384 316.118 384 208c0-79.394-57.831-145.269-133.663-157.83A31.845 31.845 0 0 0 256 32c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 6.75 2.095 13.008 5.663 18.17C121.831 62.731 64 128.606 64 208c0 108.118-27.643 135.809-49.893 158.059C-16.042 396.208 5.325 448 48.048 448H160c0 35.346 28.654 64 64 64s64-28.654 64-64h111.943c42.638 0 64.151-51.731 33.941-81.941zM224 472a8 8 0 0 1 0 16c-22.056 0-40-17.944-40-40h16c0 13.234 10.766 24 24 24z"],"bell-slash":[576,512,[],"f1f6","M78.107 366.059C47.958 396.208 69.325 448 112.048 448H224c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64h32.685L127.848 221.379c-2.198 97.078-28.439 123.378-49.741 144.68zM264 448c0 13.234 10.766 24 24 24a8 8 0 0 1 0 16c-22.056 0-40-17.944-40-40h16zm305.896 43.733l-10.762 12.086c-8.915 10.012-24.333 10.967-34.437 2.133L8.256 54.393C-1.848 45.558-2.811 30.28 6.104 20.267L16.865 8.181C25.781-1.831 41.199-2.786 51.303 6.049l113.81 99.512c24.017-28.778 57.946-48.996 96.55-55.39A31.85 31.85 0 0 1 256 32c0-17.673 14.327-32 32-32s32 14.327 32 32c0 6.75-2.095 13.008-5.663 18.17C390.169 62.731 448 128.606 448 208c0 108.118 27.634 135.809 49.884 158.059 12.149 12.149 15.923 27.776 13.33 42.121l56.53 49.427c10.104 8.835 11.067 24.113 2.152 34.126z"],bicycle:[640,512,[],"f206","M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z"],binoculars:[512,512,[],"f1e5","M192 104H96V56c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24v48zm224-48c0-13.255-10.745-24-24-24h-48c-13.255 0-24 10.745-24 24v48h96V56zM0 456c0 13.255 10.745 24 24 24h120c13.255 0 24-10.745 24-24v-16H0v16zm88-328c-13.255 0-24 10.745-24 24C64 256 0 272 0 416h168V312c0-13.255 10.745-24 24-24V128H88zm256 328c0 13.255 10.745 24 24 24h120c13.255 0 24-10.745 24-24v-16H344v16zM216 128v160h80V128h-80zm128 288h168c0-144-64-160-64-264 0-13.255-10.745-24-24-24H320v160c13.255 0 24 10.745 24 24v104z"],"birthday-cake":[448,512,[],"f1fd","M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z"],blind:[384,512,[],"f29d","M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z"],bold:[384,512,[],"f032","M304.793 243.891c33.639-18.537 53.657-54.16 53.657-95.693 0-48.236-26.25-87.626-68.626-104.179C265.138 34.01 240.849 32 209.661 32H24c-8.837 0-16 7.163-16 16v33.049c0 8.837 7.163 16 16 16h33.113v318.53H24c-8.837 0-16 7.163-16 16V464c0 8.837 7.163 16 16 16h195.69c24.203 0 44.834-1.289 66.866-7.584C337.52 457.193 376 410.647 376 350.014c0-52.168-26.573-91.684-71.207-106.123zM142.217 100.809h67.444c16.294 0 27.536 2.019 37.525 6.717 15.828 8.479 24.906 26.502 24.906 49.446 0 35.029-20.32 56.79-53.029 56.79h-76.846V100.809zm112.642 305.475c-10.14 4.056-22.677 4.907-31.409 4.907h-81.233V281.943h84.367c39.645 0 63.057 25.38 63.057 63.057.001 28.425-13.66 52.483-34.782 61.284z"],bolt:[320,512,[],"f0e7","M295.973 160H180.572L215.19 30.184C219.25 14.956 207.756 0 192 0H56C43.971 0 33.8 8.905 32.211 20.828l-31.996 240C-1.704 275.217 9.504 288 24.004 288h118.701L96.646 482.466C93.05 497.649 104.659 512 119.992 512c8.35 0 16.376-4.374 20.778-11.978l175.973-303.997c9.244-15.967-2.288-36.025-20.77-36.025z"],bomb:[512,512,[],"f1e2","M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z"],book:[448,512,[],"f02d","M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z"],bookmark:[384,512,[],"f02e","M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"],"bowling-ball":[496,512,[],"f436","M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],box:[512,512,[],"f466","M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"],boxes:[576,512,[],"f468","M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"],braille:[640,512,[],"f2a1","M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"],briefcase:[512,512,[],"f0b1","M320 288h192v144c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V288h192v20c0 6.627 5.373 12 12 12h104c6.627 0 12-5.373 12-12v-20zm192-112v80H0v-80c0-26.51 21.49-48 48-48h80V80c0-26.51 21.49-48 48-48h160c26.51 0 48 21.49 48 48v48h80c26.51 0 48 21.49 48 48zM320 96H192v32h128V96z"],bug:[512,512,[],"f188","M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z"],building:[448,512,[],"f1ad","M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z"],bullhorn:[576,512,[],"f0a1","M576 224c0-20.896-13.36-38.666-32-45.258V64c0-35.346-28.654-64-64-64-64.985 56-142.031 128-272 128H48c-26.51 0-48 21.49-48 48v96c0 26.51 21.49 48 48 48h43.263c-18.742 64.65 2.479 116.379 18.814 167.44 1.702 5.32 5.203 9.893 9.922 12.88 20.78 13.155 68.355 15.657 93.773 5.151 16.046-6.633 19.96-27.423 7.522-39.537-18.508-18.026-30.136-36.91-19.795-60.858a12.278 12.278 0 0 0-1.045-11.673c-16.309-24.679-3.581-62.107 28.517-72.752C346.403 327.887 418.591 395.081 480 448c35.346 0 64-28.654 64-64V269.258c18.64-6.592 32-24.362 32-45.258zm-96 139.855c-54.609-44.979-125.033-92.94-224-104.982v-69.747c98.967-12.042 169.391-60.002 224-104.982v279.711z"],bullseye:[512,512,[],"f140","M256 72c101.689 0 184 82.295 184 184 0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-101.689 82.295-184 184-184m0-64C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 184c35.29 0 64 28.71 64 64s-28.71 64-64 64-64-28.71-64-64 28.71-64 64-64m0-64c-70.692 0-128 57.308-128 128s57.308 128 128 128 128-57.308 128-128-57.308-128-128-128z"],bus:[512,512,[],"f207","M512 152v80c0 13.255-10.745 24-24 24h-8v168c0 13.255-10.745 24-24 24h-8v40c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24v-40H160v40c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24v-40h-8c-13.255 0-24-10.745-24-24V256h-8c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h8V80C32 35.817 132.288 0 256 0s224 35.817 224 80v48h8c13.255 0 24 10.745 24 24zM112 320c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288 0c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm32-56V120c0-13.255-10.745-24-24-24H104c-13.255 0-24 10.745-24 24v144c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"],calculator:[448,512,[],"f1ec","M0 464V48C0 21.49 21.49 0 48 0h352c26.51 0 48 21.49 48 48v416c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm384-284V76c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v104c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12zM128 308v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm256 128V268c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-256 0v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm128-128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm0 128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"],calendar:[448,512,[],"f133","M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z"],"calendar-alt":[448,512,[],"f073","M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm116 204c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40z"],"calendar-check":[448,512,[],"f274","M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z"],"calendar-minus":[448,512,[],"f272","M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z"],"calendar-plus":[448,512,[],"f271","M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z"],"calendar-times":[448,512,[],"f273","M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z"],camera:[512,512,[],"f030","M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z"],"camera-retro":[512,512,[],"f083","M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z"],car:[512,512,[],"f1b9","M499.991 168h-54.815l-7.854-20.944c-9.192-24.513-25.425-45.351-46.942-60.263S343.651 64 317.472 64H194.528c-26.18 0-51.391 7.882-72.908 22.793-21.518 14.912-37.75 35.75-46.942 60.263L66.824 168H12.009c-8.191 0-13.974 8.024-11.384 15.795l8 24A12 12 0 0 0 20.009 216h28.815l-.052.14C29.222 227.093 16 247.997 16 272v48c0 16.225 6.049 31.029 16 42.309V424c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24v-40h256v40c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24v-61.691c9.951-11.281 16-26.085 16-42.309v-48c0-24.003-13.222-44.907-32.772-55.86l-.052-.14h28.815a12 12 0 0 0 11.384-8.205l8-24c2.59-7.771-3.193-15.795-11.384-15.795zm-365.388 1.528C143.918 144.689 168 128 194.528 128h122.944c26.528 0 50.61 16.689 59.925 41.528L391.824 208H120.176l14.427-38.472zM88 328c-17.673 0-32-14.327-32-32 0-17.673 14.327-32 32-32s48 30.327 48 48-30.327 16-48 16zm336 0c-17.673 0-48 1.673-48-16 0-17.673 30.327-48 48-48s32 14.327 32 32c0 17.673-14.327 32-32 32z"],"caret-down":[320,512,[],"f0d7","M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"],"caret-left":[192,512,[],"f0d9","M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z"],"caret-right":[192,512,[],"f0da","M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"],"caret-square-down":[448,512,[],"f150","M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z"],"caret-square-left":[448,512,[],"f191","M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z"],"caret-square-right":[448,512,[],"f152","M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z"],"caret-square-up":[448,512,[],"f151","M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z"],"caret-up":[320,512,[],"f0d8","M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z"],"cart-arrow-down":[576,512,[],"f218","M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z"],"cart-plus":[576,512,[],"f217","M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z"],certificate:[512,512,[],"f0a3","M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z"],"chart-area":[512,512,[],"f1fe","M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z"],"chart-bar":[512,512,[],"f080","M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zm-308-44v-72c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V204c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V108c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"],"chart-line":[512,512,[],"f201","M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM456 96H344c-21.4 0-32.1 25.9-17 41l32.9 32.9-72 72.9-55.6-55.6c-4.7-4.7-12.2-4.7-16.9 0L96.4 305c-4.7 4.6-4.8 12.2-.2 16.9l28.5 29.4c4.7 4.8 12.4 4.9 17.1.1l82.1-82.1 55.5 55.5c4.7 4.7 12.3 4.7 17 0l109.2-109.2L439 249c15.1 15.1 41 4.4 41-17V120c0-13.3-10.7-24-24-24z"],"chart-pie":[576,512,[],"f200","M288 12.3V240h227.7c6.9 0 12.3-5.8 12-12.7-6.4-122.4-104.5-220.6-227-227-6.9-.3-12.7 5.1-12.7 12zM552.7 288c6.9 0 12.3 5.8 12 12.7-2.8 53.2-23.2 105.6-61.2 147.8-4.6 5.1-12.6 5.4-17.5.5L325 288h227.7zM401 433c4.8 4.8 4.7 12.8-.4 17.3-42.6 38.4-99 61.7-160.8 61.7C107.6 511.9-.2 403.8 0 271.5.2 143.4 100.8 38.9 227.3 32.3c6.9-.4 12.7 5.1 12.7 12V272l161 161z"],check:[512,512,[],"f00c","M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"],"check-circle":[512,512,[],"f058","M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"],"check-square":[448,512,[],"f14a","M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z"],chess:[512,512,[],"f439","M199.821 217.633a6 6 0 0 1 6 6l-.001 20.766a6 6 0 0 1-6 6h-25.805c0 31.715-2.153 96.201 17.398 153.229H64.597C84.54 345.452 82.02 279.245 82.02 250.399H56.183a6 6 0 0 1-6-6l.002-20.766a6 6 0 0 1 6-6h143.636zM41.554 115.088l34.58 95.071h103.734l34.572-95.072c2.846-7.826-2.95-16.101-11.278-16.101H152v-30.22h21.57a6 6 0 0 0 6-6V40.383a6 6 0 0 0-6-6h-28.367V6a6 6 0 0 0-6-6H116.82a6 6 0 0 0-6 6v28.383H82.421a6 6 0 0 0-6 6v22.383a6 6 0 0 0 6 6H104v30.219H52.831c-8.328.001-14.124 8.276-11.277 16.103zM222.678 445.17v-28.067a6 6 0 0 0-6-6H39.322a6 6 0 0 0-6 6v28.067l-22.148 14.164a6 6 0 0 0-2.767 5.055V506a6 6 0 0 0 6 6h227.187a6 6 0 0 0 6-6v-41.612a6 6 0 0 0-2.767-5.055l-22.149-14.163zm90.578-144.225l24.88 16.963c.09 18.124-.167 63.904-11.905 114.522h147.526c-11.713-50.475-11.969-96.324-11.882-114.537l24.859-16.949a3.856 3.856 0 0 0 1.684-3.187v-69.901a3.857 3.857 0 0 0-3.857-3.857h-27.655a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.858-3.857h-52.918a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.857-3.857H315.43a3.857 3.857 0 0 0-3.857 3.857v69.901a3.855 3.855 0 0 0 1.683 3.188zm71.585 51.906c0-8.372 6.787-15.158 15.159-15.158s15.158 6.787 15.158 15.158v30.318h-30.317v-30.318zM504.62 470.059l-13.664-10.639v-15.552a3.857 3.857 0 0 0-3.857-3.857H312.915a3.857 3.857 0 0 0-3.857 3.857v15.552l-13.677 10.639a3.857 3.857 0 0 0-1.488 3.044v35.039a3.857 3.857 0 0 0 3.857 3.857h204.5a3.857 3.857 0 0 0 3.857-3.857v-35.04a3.859 3.859 0 0 0-1.487-3.043z"],"chess-bishop":[320,512,[],"f43a","M123.158 77.881C107.369 72.53 96 57.597 96 40c0-22.091 17.909-40 40-40h47.796c22.091 0 40 17.909 40 40 0 17.541-11.295 32.434-27.005 37.829 23.993 16.657 48.577 46.839 68.703 82.05L144.929 280.443a6 6 0 0 0 0 8.485l14.142 14.142a6 6 0 0 0 8.485 0L280.9 189.726c17.758 38.297 29.371 79.443 29.371 114.273 0 53.786-22.897 75.788-58.446 86.033V448H68.174v-57.97C32.631 379.784 9.739 357.781 9.739 304c0-78.029 58.281-187.766 113.419-226.119zM320 500v-24c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12z"],"chess-board":[512,512,[],"f43c","M256 256v64h-64v-64h64zm0-256h-64v64h64V0zm0 256h64v-64h-64v64zM384 0h-64v64h64V0zm0 512h64v-64h-64v64zm128-64v-64h-64v64h64zm-384 64h64v-64h-64v64zm0-512H64v64h64V0zm384 192v-64h-64v64h64zm0 128v-64h-64v64h64zM0 512h64v-64H0v64zM0 64v64h64V64H0zm0 128v64h64v-64H0zm0 128v64h64v-64H0zm256 192h64v-64h-64v64zm-64-128v64h64v-64h-64zm64-192v-64h-64v64h64zM64 384v64h64v-64H64zm64-128H64v64h64v-64zm256 128h64v-64h-64v64zM512 0h-64v64h64V0zM384 256h64v-64h-64v64zm0-192v64h64V64h-64zm-64 320v64h64v-64h-64zm-192-64v64h64v-64h-64zm128 0v64h64v-64h-64zm-64-128h-64v64h64v-64zm-64-64H64v64h64v-64zm192 192h64v-64h-64v64zM192 128V64h-64v64h64zm128 0V64h-64v64h64zm0 64h64v-64h-64v64z"],"chess-king":[448,512,[],"f43f","M416 476v24c0 6.627-5.373 12-12 12H44c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12zm-8.033-324H248v-48h50a6 6 0 0 0 6-6V62a6 6 0 0 0-6-6h-50V6a6 6 0 0 0-6-6h-36a6 6 0 0 0-6 6v50h-50a6 6 0 0 0-6 6v36a6 6 0 0 0 6 6h50v48H40.033c-27.574 0-46.879 27.244-37.738 53.259L87.582 448h272.836l85.287-242.741C454.846 179.244 435.541 152 407.967 152z"],"chess-knight":[384,512,[],"f441","M352 224v224H32v-46.557c0-30.302 17.12-58.003 44.223-71.554l57.243-28.622A48 48 0 0 0 160 258.334V208l-22.127 11.063a23.996 23.996 0 0 0-12.55 15.645l-11.835 47.338a12 12 0 0 1-7.185 8.231l-29.601 11.84a11.998 11.998 0 0 1-9.33-.176L7.126 275.167A12 12 0 0 1 0 264.201v-158.26c0-6.365 2.529-12.47 7.03-16.971L16 80 1.789 51.578A16.937 16.937 0 0 1 0 44c0-6.627 5.373-12 12-12h148c106.039 0 192 85.961 192 192zm20 240H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zM52 128c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"],"chess-pawn":[320,512,[],"f443","M264 448H56s60-42.743 60-176H84c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h40.209C95.721 210.56 76 181.588 76 148c0-46.392 37.608-84 84-84s84 37.608 84 84c0 33.588-19.721 62.56-48.209 76H236c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12h-32c0 133.257 60 176 60 176zm28 16H28c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h264c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12z"],"chess-queen":[512,512,[],"f445","M436 512H76c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12zM255.579 0c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zm204.568 154.634c-5.768-3.045-12.916-.932-16.082 4.77-8.616 15.516-22.747 37.801-44.065 37.801-28.714 0-30.625-19.804-31.686-57.542-.183-6.492-5.501-11.664-11.995-11.664h-41.006c-5.175 0-9.754 3.328-11.388 8.238-8.89 26.709-26.073 40.992-47.925 40.992s-39.034-14.283-47.925-40.992c-1.634-4.91-6.213-8.238-11.388-8.238h-41.005c-6.495 0-11.813 5.174-11.995 11.667-1.052 37.642-2.934 57.539-31.688 57.539-20.691 0-33.817-20.224-44.425-38.025-3.266-5.48-10.258-7.431-15.899-4.453l-39.179 20.679a12 12 0 0 0-5.51 15.145L112 448h288l105.014-257.448a12 12 0 0 0-5.51-15.145l-39.357-20.773z"],"chess-rook":[384,512,[],"f447","M81.241 215.027C80.957 258.92 77.411 348.076 48 448h287.982c-29.4-99.604-32.936-188.912-33.221-232.975l45.418-42.312a11.998 11.998 0 0 0 3.82-8.78V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v44h-48V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v44H96V44c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v119.932c0 3.33 1.384 6.51 3.82 8.78l45.421 42.315zM160 256c0-17.673 14.327-32 32-32 17.673 0 32 14.327 32 32v64.004h-64V256zm224 220v24c0 6.627-5.373 12-12 12H12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12z"],"chevron-circle-down":[512,512,[],"f13a","M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z"],"chevron-circle-left":[512,512,[],"f137","M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z"],"chevron-circle-right":[512,512,[],"f138","M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z"],"chevron-circle-up":[512,512,[],"f139","M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z"],"chevron-down":[448,512,[],"f078","M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"],"chevron-left":[320,512,[],"f053","M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"],"chevron-right":[320,512,[],"f054","M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"],"chevron-up":[448,512,[],"f077","M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z"],child:[384,512,[],"f1ae","M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z"],circle:[512,512,[],"f111","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"],"circle-notch":[512,512,[],"f1ce","M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z"],clipboard:[384,512,[],"f328","M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z"],"clipboard-check":[384,512,[],"f46c","M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z"],"clipboard-list":[384,512,[],"f46d","M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"],clock:[512,512,[],"f017","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm57.1 350.1L224.9 294c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v137.7l63.5 46.2c5.4 3.9 6.5 11.4 2.6 16.8l-28.2 38.8c-3.9 5.3-11.4 6.5-16.8 2.6z"],clone:[512,512,[],"f24d","M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z"],"closed-captioning":[512,512,[],"f20a","M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z"],cloud:[640,512,[],"f0c2","M537.585 226.56C541.725 215.836 544 204.184 544 192c0-53.019-42.981-96-96-96-19.729 0-38.065 5.954-53.316 16.159C367.042 64.248 315.288 32 256 32c-88.366 0-160 71.634-160 160 0 2.728.07 5.439.204 8.133C40.171 219.845 0 273.227 0 336c0 79.529 64.471 144 144 144h368c70.692 0 128-57.308 128-128 0-61.93-43.983-113.586-102.415-125.44z"],"cloud-download-alt":[640,512,[],"f381","M640 352c0 70.692-57.308 128-128 128H144C64.471 480 0 415.529 0 336c0-62.773 40.171-116.155 96.204-135.867A163.68 163.68 0 0 1 96 192c0-88.366 71.634-160 160-160 59.288 0 111.042 32.248 138.684 80.159C409.935 101.954 428.271 96 448 96c53.019 0 96 42.981 96 96 0 12.184-2.275 23.836-6.415 34.56C596.017 238.414 640 290.07 640 352zm-246.627-64H328V176c0-8.837-7.164-16-16-16h-48c-8.836 0-16 7.163-16 16v112h-65.373c-14.254 0-21.393 17.234-11.314 27.314l105.373 105.373c6.248 6.248 16.379 6.248 22.627 0l105.373-105.373c10.08-10.08 2.941-27.314-11.313-27.314z"],"cloud-upload-alt":[640,512,[],"f382","M640 352c0 70.692-57.308 128-128 128H144C64.471 480 0 415.529 0 336c0-62.773 40.171-116.155 96.204-135.867A163.68 163.68 0 0 1 96 192c0-88.366 71.634-160 160-160 59.288 0 111.042 32.248 138.684 80.159C409.935 101.954 428.271 96 448 96c53.019 0 96 42.981 96 96 0 12.184-2.275 23.836-6.415 34.56C596.017 238.414 640 290.07 640 352zm-235.314-91.314L299.314 155.314c-6.248-6.248-16.379-6.248-22.627 0L171.314 260.686c-10.08 10.08-2.941 27.314 11.313 27.314H248v112c0 8.837 7.164 16 16 16h48c8.836 0 16-7.163 16-16V288h65.373c14.254 0 21.393-17.234 11.313-27.314z"],code:[640,512,[],"f121","M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"],"code-branch":[384,512,[],"f126","M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z"],coffee:[640,512,[],"f0f4","M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z"],cog:[512,512,[],"f013","M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"],cogs:[640,512,[],"f085","M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"],columns:[512,512,[],"f0db","M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"],comment:[576,512,[],"f075","M576 240c0 115-129 208-288 208-48.3 0-93.9-8.6-133.9-23.8-40.3 31.2-89.8 50.3-142.4 55.7-5.2.6-10.2-2.8-11.5-7.7-1.3-5 2.7-8.1 6.6-11.8 19.3-18.4 42.7-32.8 51.9-94.6C21.9 330.9 0 287.3 0 240 0 125.1 129 32 288 32s288 93.1 288 208z"],"comment-alt":[576,512,[],"f27a","M576 240c0 115-129 208-288 208-48.3 0-93.9-8.6-133.9-23.8-40.3 31.2-89.8 50.3-142.4 55.7-5.2.6-10.2-2.8-11.5-7.7-1.3-5 2.7-8.1 6.6-11.8 19.3-18.4 42.7-32.8 51.9-94.6C21.9 330.9 0 287.3 0 240 0 125.1 129 32 288 32s288 93.1 288 208zm-416-48c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm128 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm128 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z"],comments:[576,512,[],"f086","M224 358.857c-37.599 0-73.027-6.763-104.143-18.7-31.375 24.549-69.869 39.508-110.764 43.796a8.632 8.632 0 0 1-.89.047c-3.736 0-7.111-2.498-8.017-6.061-.98-3.961 2.088-6.399 5.126-9.305 15.017-14.439 33.222-25.79 40.342-74.297C17.015 266.886 0 232.622 0 195.429 0 105.16 100.297 32 224 32s224 73.159 224 163.429c-.001 90.332-100.297 163.428-224 163.428zm347.067 107.174c-13.944-13.127-30.849-23.446-37.46-67.543 68.808-64.568 52.171-156.935-37.674-207.065.031 1.334.066 2.667.066 4.006 0 122.493-129.583 216.394-284.252 211.222 38.121 30.961 93.989 50.492 156.252 50.492 34.914 0 67.811-6.148 96.704-17 29.134 22.317 64.878 35.916 102.853 39.814 3.786.395 7.363-1.973 8.27-5.467.911-3.601-1.938-5.817-4.759-8.459z"],compass:[512,512,[],"f14e","M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM307.446 120.844l-102.642 97.779a23.997 23.997 0 0 0-6.772 11.729l-33.359 137.779c-5.68 23.459 22.777 39.318 39.88 23.024l102.64-97.779a23.99 23.99 0 0 0 6.772-11.729l33.359-137.779c5.618-23.198-22.591-39.493-39.878-23.024zM256 224c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"],compress:[448,512,[],"f066","M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"],copy:[448,512,[],"f0c5","M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"],copyright:[512,512,[],"f1f9","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z"],"credit-card":[576,512,[],"f09d","M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z"],crop:[512,512,[],"f125","M488 352h-40V109.3l57-57c9.4-9.4 9.4-24.6 0-33.9L493.7 7c-9.4-9.4-24.6-9.4-33.9 0l-57 57H160V24c0-13.3-10.7-24-24-24H88C74.7 0 64 10.7 64 24v40H24C10.7 64 0 74.7 0 88v48c0 13.3 10.7 24 24 24h40v264c0 13.3 10.7 24 24 24h264v40c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24v-40h40c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zM306.7 160L160 306.7V160h146.7zM205.3 352L352 205.3V352H205.3z"],crosshairs:[512,512,[],"f05b","M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z"],cube:[512,512,[],"f1b2","M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"],cubes:[512,512,[],"f1b3","M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"],cut:[448,512,[],"f0c4","M444.485 422.426c4.689 4.689 4.684 12.287 0 16.971-32.804 32.804-85.991 32.804-118.795 0L210.176 323.883l-24.859 24.859C189.63 359.657 192 371.552 192 384c0 53.019-42.981 96-96 96S0 437.019 0 384s42.981-96 96-96c4.536 0 8.995.322 13.363.93l32.93-32.93-32.93-32.93c-4.368.608-8.827.93-13.363.93-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96c0 12.448-2.37 24.343-6.682 35.258l24.859 24.859L325.69 72.603c32.804-32.804 85.991-32.804 118.795 0 4.684 4.684 4.689 12.282 0 16.971L278.059 256l166.426 166.426zM96 96c-17.645 0-32 14.355-32 32s14.355 32 32 32 32-14.355 32-32-14.355-32-32-32m0 256c-17.645 0-32 14.355-32 32s14.355 32 32 32 32-14.355 32-32-14.355-32-32-32m112-108c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12z"],database:[448,512,[],"f1c0","M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"],deaf:[512,512,[],"f2a4","M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z"],desktop:[576,512,[],"f108","M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"],dna:[448,512,[],"f471","M447.9 17.9C449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.9c-1.6-6.9-2.9-13.2-3.5-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9c4.6 37.9 25.6 129 118.9 207.7 17.6-12.4 37.1-24.2 58.5-35.4-6.2-4.6-11.4-9.4-17-14.2h127.6c-21.3 18.1-47 35.6-78.7 51.4C37.5 312.9 5.9 446.2.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1h312.4c1.6 7 2.7 13.1 3.4 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-5-42.9-31.1-153.9-159.7-238.1C416.5 171.8 442.7 60.8 447.9 17.9zM224 292.4c25.1 13.7 46.4 28.4 64.3 43.6H159.7c17.9-15.2 39.2-30 64.3-43.6zM92.9 416c5.8-10.4 12.8-21.1 21-32h220c8.3 10.9 15.3 21.6 21 32h-262zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114.6c-8.3-10.9-15.4-21.6-21.2-32h261.7z"],"dollar-sign":[320,512,[],"f155","M113.411 169.375c0-23.337 21.536-38.417 54.865-38.417 26.726 0 54.116 12.263 76.461 28.333 5.88 4.229 14.13 2.354 17.575-4.017l23.552-43.549c2.649-4.898 1.596-10.991-2.575-14.68-24.281-21.477-59.135-34.09-91.289-37.806V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v49.832c-58.627 13.29-97.299 55.917-97.299 108.639 0 123.533 184.765 110.81 184.765 169.414 0 19.823-16.311 41.158-52.124 41.158-30.751 0-62.932-15.88-87.848-35.887-5.31-4.264-13.082-3.315-17.159 2.14l-30.389 40.667c-3.627 4.854-3.075 11.657 1.302 15.847 24.049 23.02 59.249 41.255 98.751 47.973V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-47.438c65.72-10.215 106.176-59.186 106.176-116.516.001-119.688-184.764-103.707-184.764-166.671z"],dolly:[576,512,[],"f472","M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"],"dolly-flatbed":[640,512,[],"f474","M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"],"dot-circle":[512,512,[],"f192","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z"],download:[512,512,[],"f019","M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"],edit:[576,512,[],"f044","M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"],eject:[448,512,[],"f052","M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z"],"ellipsis-h":[512,512,[],"f141","M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"],"ellipsis-v":[192,512,[],"f142","M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"],envelope:[512,512,[],"f0e0","M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"],"envelope-open":[512,512,[],"f2b6","M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z"],"envelope-square":[448,512,[],"f199","M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"],eraser:[512,512,[],"f12d","M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z"],"euro-sign":[320,512,[],"f153","M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z"],"exchange-alt":[512,512,[],"f362","M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"],exclamation:[192,512,[],"f12a","M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"],"exclamation-circle":[512,512,[],"f06a","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],"exclamation-triangle":[576,512,[],"f071","M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],expand:[448,512,[],"f065","M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"],"expand-arrows-alt":[448,512,[],"f31e","M448.1 344v112c0 13.3-10.7 24-24 24h-112c-21.4 0-32.1-25.9-17-41l36.2-36.2L224 295.6 116.8 402.9 153 439c15.1 15.1 4.4 41-17 41H24c-13.3 0-24-10.7-24-24V344c0-21.4 25.9-32.1 41-17l36.2 36.2L184.5 256 77.2 148.7 41 185c-15.1 15.1-41 4.4-41-17V56c0-13.3 10.7-24 24-24h112c21.4 0 32.1 25.9 17 41l-36.2 36.2L224 216.4l107.3-107.3L295.1 73c-15.1-15.1-4.4-41 17-41h112c13.3 0 24 10.7 24 24v112c0 21.4-25.9 32.1-41 17l-36.2-36.2L263.6 256l107.3 107.3 36.2-36.2c15.1-15.2 41-4.5 41 16.9z"],"external-link-alt":[576,512,[],"f35d","M576 24v127.984c0 21.461-25.96 31.98-40.971 16.971l-35.707-35.709-243.523 243.523c-9.373 9.373-24.568 9.373-33.941 0l-22.627-22.627c-9.373-9.373-9.373-24.569 0-33.941L442.756 76.676l-35.703-35.705C391.982 25.9 402.656 0 424.024 0H552c13.255 0 24 10.745 24 24zM407.029 270.794l-16 16A23.999 23.999 0 0 0 384 303.765V448H64V128h264a24.003 24.003 0 0 0 16.97-7.029l16-16C376.089 89.851 365.381 64 344 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V287.764c0-21.382-25.852-32.09-40.971-16.97z"],"external-link-square-alt":[448,512,[],"f360","M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z"],eye:[576,512,[],"f06e","M569.354 231.631C512.969 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-75.162 0-136-60.827-136-136 0-75.162 60.826-136 136-136 75.162 0 136 60.826 136 136 0 75.162-60.826 136-136 136zm104-136c0 57.438-46.562 104-104 104s-104-46.562-104-104c0-17.708 4.431-34.379 12.236-48.973l-.001.032c0 23.651 19.173 42.823 42.824 42.823s42.824-19.173 42.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621 156.431 270.292 152 288 152c57.438 0 104 46.562 104 104z"],"eye-dropper":[512,512,[],"f1fb","M177.38 206.64L39.03 344.97A24.01 24.01 0 0 0 32 361.94V424L0 480l32 32 56-32h62.06c6.36 0 12.47-2.53 16.97-7.03l138.35-138.33-128-128zm225.552 30.47l16.952 16.95c9.37 9.37 9.37 24.57 0 33.94l-40.973 40.97c-9.292 9.312-24.506 9.434-33.94 0L183.028 167.03c-9.37-9.37-9.37-24.57 0-33.94L224 92.12c9.289-9.309 24.502-9.438 33.94 0l16.992 16.99 82.606-82.601c35.19-35.19 92.5-35.5 128 0 40.49 48.08 29.66 98.34 0 128l-82.606 82.601z"],"eye-slash":[576,512,[],"f070","M286.693 391.984l32.579 46.542A333.958 333.958 0 0 1 288 440C168.19 440 63.031 376.051 6.646 280.369a47.999 47.999 0 0 1 0-48.739c24.023-40.766 56.913-75.775 96.024-102.537l57.077 81.539C154.736 224.82 152 240.087 152 256c0 74.736 60.135 135.282 134.693 135.984zm282.661-111.615c-31.667 53.737-78.747 97.46-135.175 125.475l.011.015 41.47 59.2c7.6 10.86 4.96 25.82-5.9 33.42l-13.11 9.18c-10.86 7.6-25.82 4.96-33.42-5.9L100.34 46.94c-7.6-10.86-4.96-25.82 5.9-33.42l13.11-9.18c10.86-7.6 25.82-4.96 33.42 5.9l51.038 72.617C230.68 75.776 258.905 72 288 72c119.81 0 224.969 63.949 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM424 256c0-75.174-60.838-136-136-136-17.939 0-35.056 3.473-50.729 9.772l19.299 27.058c25.869-8.171 55.044-6.163 80.4 7.41h-.03c-23.65 0-42.82 19.17-42.82 42.82 0 23.626 19.147 42.82 42.82 42.82 23.65 0 42.82-19.17 42.82-42.82v-.03c18.462 34.49 16.312 77.914-8.25 110.95v.01l19.314 27.061C411.496 321.2 424 290.074 424 256zM262.014 356.727l-77.53-110.757c-5.014 52.387 29.314 98.354 77.53 110.757z"],"fast-backward":[512,512,[],"f049","M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z"],"fast-forward":[512,512,[],"f050","M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z"],fax:[512,512,[],"f1ac","M128 144v320c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V144c0-26.51 21.49-48 48-48h32c26.51 0 48 21.49 48 48zm384 64v256c0 26.51-21.49 48-48 48H192c-26.51 0-48-21.49-48-48V40c0-22.091 17.909-40 40-40h207.432a39.996 39.996 0 0 1 28.284 11.716l48.569 48.569A39.999 39.999 0 0 1 480 88.568v74.174c18.641 6.591 32 24.36 32 45.258zm-320-16h240V96h-24c-13.203 0-24-10.797-24-24V48H192v144zm96 204c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm128 128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40z"],female:[256,512,[],"f182","M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z"],"fighter-jet":[640,512,[],"f0fb","M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z"],file:[384,512,[],"f15b","M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],"file-alt":[384,512,[],"f15c","M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],"file-archive":[384,512,[],"f1c6","M224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32V32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6zm32.7-53c0 14.9-14.5 27-32.4 27S96 378 96 363c0-14.9 14.5-27 32.4-27s32.5 12.1 32.5 27zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],"file-audio":[384,512,[],"f1c7","M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],"file-code":[384,512,[],"f1c9","M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z"],"file-excel":[384,512,[],"f1c3","M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],"file-image":[384,512,[],"f1c5","M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z"],"file-pdf":[384,512,[],"f1c1","M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"],"file-powerpoint":[384,512,[],"f1c4","M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z"],"file-video":[384,512,[],"f1c8","M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z"],"file-word":[384,512,[],"f1c2","M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"],film:[512,512,[],"f008","M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"],filter:[512,512,[],"f0b0","M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"],fire:[384,512,[],"f06d","M216 23.858c0-23.802-30.653-32.765-44.149-13.038C48 191.851 224 200 224 288c0 35.629-29.114 64.458-64.85 63.994C123.98 351.538 96 322.22 96 287.046v-85.51c0-21.703-26.471-32.225-41.432-16.504C27.801 213.158 0 261.332 0 320c0 105.869 86.131 192 192 192s192-86.131 192-192c0-170.29-168-193.003-168-296.142z"],"fire-extinguisher":[448,512,[],"f134","M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"],"first-aid":[576,512,[],"f479","M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],flag:[512,512,[],"f024","M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z"],"flag-checkered":[512,512,[],"f11e","M466.515 66.928C487.731 57.074 512 72.551 512 95.944v243.1c0 10.526-5.161 20.407-13.843 26.358-35.837 24.564-74.335 40.858-122.505 40.858-67.373 0-111.63-34.783-165.217-34.783-50.853 0-86.124 10.058-114.435 22.122V488c0 13.255-10.745 24-24 24H56c-13.255 0-24-10.745-24-24V101.945C17.497 91.825 8 75.026 8 56 8 24.296 34.345-1.254 66.338.048c28.468 1.158 51.779 23.968 53.551 52.404.52 8.342-.81 16.31-3.586 23.562C137.039 68.384 159.393 64 184.348 64c67.373 0 111.63 34.783 165.217 34.783 40.496 0 82.612-15.906 116.95-31.855zM96 134.63v70.49c29-10.67 51.18-17.83 73.6-20.91v-71.57c-23.5 2.17-40.44 9.79-73.6 21.99zm220.8 9.19c-26.417-4.672-49.886-13.979-73.6-21.34v67.42c24.175 6.706 47.566 16.444 73.6 22.31v-68.39zm-147.2 40.39v70.04c32.796-2.978 53.91-.635 73.6 3.8V189.9c-25.247-7.035-46.581-9.423-73.6-5.69zm73.6 142.23c26.338 4.652 49.732 13.927 73.6 21.34v-67.41c-24.277-6.746-47.54-16.45-73.6-22.32v68.39zM96 342.1c23.62-8.39 47.79-13.84 73.6-16.56v-71.29c-26.11 2.35-47.36 8.04-73.6 17.36v70.49zm368-221.6c-21.3 8.85-46.59 17.64-73.6 22.47v71.91c27.31-4.36 50.03-14.1 73.6-23.89V120.5zm0 209.96v-70.49c-22.19 14.2-48.78 22.61-73.6 26.02v71.58c25.07-2.38 48.49-11.04 73.6-27.11zM316.8 212.21v68.16c25.664 7.134 46.616 9.342 73.6 5.62v-71.11c-25.999 4.187-49.943 2.676-73.6-2.67z"],flask:[448,512,[],"f0c3","M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z"],folder:[512,512,[],"f07b","M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"],"folder-open":[576,512,[],"f07c","M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"],font:[448,512,[],"f031","M152 416h-24.013l26.586-80.782H292.8L319.386 416H296c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-26.739L275.495 42.746A16 16 0 0 0 260.382 32h-72.766a16 16 0 0 0-15.113 10.746L42.739 416H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm64.353-271.778c4.348-15.216 6.61-28.156 7.586-34.644.839 6.521 2.939 19.476 7.727 34.706l41.335 124.006h-98.619l41.971-124.068z"],"football-ball":[496,512,[],"f44e","M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z"],forward:[512,512,[],"f04e","M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z"],frown:[512,512,[],"f119","M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-396-64c0 37.497 30.503 68 68 68s68-30.503 68-68-30.503-68-68-68-68 30.503-68 68zm160.5 0c0 37.221 30.279 67.5 67.5 67.5s67.5-30.279 67.5-67.5-30.279-67.5-67.5-67.5-67.5 30.279-67.5 67.5zm67.5-48a47.789 47.789 0 0 0-22.603 5.647h.015c10.916 0 19.765 8.849 19.765 19.765s-8.849 19.765-19.765 19.765-19.765-8.849-19.765-19.765v-.015A47.789 47.789 0 0 0 288 192c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48zm-160 0a47.789 47.789 0 0 0-22.603 5.647h.015c10.916 0 19.765 8.849 19.765 19.765s-8.849 19.765-19.765 19.765-19.765-8.849-19.765-19.765v-.015A47.789 47.789 0 0 0 128 192c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48zm192.551 212.66c-59.128-91.455-165.846-91.594-225.064 0-11.502 17.79 15.383 35.148 26.873 17.374 46.626-72.118 124.862-71.855 171.318 0 11.328 17.524 38.548.684 26.873-17.374z"],futbol:[512,512,[],"f1e3","M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z"],gamepad:[640,512,[],"f11b","M480 96H160C71.6 96 0 167.6 0 256s71.6 160 160 160c44.8 0 85.2-18.4 114.2-48h91.5c29 29.6 69.5 48 114.2 48 88.4 0 160-71.6 160-160S568.4 96 480 96zM256 276c0 6.6-5.4 12-12 12h-52v52c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-52H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h52v-52c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h52c6.6 0 12 5.4 12 12v40zm184 68c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-80c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"],gavel:[512,512,[],"f0e3","M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"],gem:[576,512,[],"f3a5","M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z"],genderless:[288,512,[],"f22d","M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z"],gift:[512,512,[],"f06b","M488 192h-64.512C438.72 175.003 448 152.566 448 128c0-52.935-43.065-96-96-96-41.997 0-68.742 20.693-95.992 54.15C226.671 50.192 199.613 32 160 32c-52.935 0-96 43.065-96 96 0 24.566 9.28 47.003 24.512 64H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h8v112c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V320h8c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zm-208-32c24-56 55.324-64 72-64 17.645 0 32 14.355 32 32s-14.355 32-32 32h-72zM160 96c16.676 0 48 8 72 64h-72c-17.645 0-32-14.355-32-32s14.355-32 32-32zm48 128h96v184c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V224z"],"glass-martini":[512,512,[],"f000","M507.3 27.3c10-10 2.9-27.3-11.3-27.3H16C1.8 0-5.4 17.2 4.7 27.3L216 238.6V472h-92c-15.5 0-28 12.5-28 28 0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12 0-15.5-12.5-28-28-28h-92V238.6L507.3 27.3z"],globe:[512,512,[],"f0ac","M364.215 192h131.43c5.439 20.419 8.354 41.868 8.354 64s-2.915 43.581-8.354 64h-131.43c5.154-43.049 4.939-86.746 0-128zM185.214 352c10.678 53.68 33.173 112.514 70.125 151.992.221.001.44.008.661.008s.44-.008.661-.008c37.012-39.543 59.467-98.414 70.125-151.992H185.214zm174.13-192h125.385C452.802 84.024 384.128 27.305 300.95 12.075c30.238 43.12 48.821 96.332 58.394 147.925zm-27.35 32H180.006c-5.339 41.914-5.345 86.037 0 128h151.989c5.339-41.915 5.345-86.037-.001-128zM152.656 352H27.271c31.926 75.976 100.6 132.695 183.778 147.925-30.246-43.136-48.823-96.35-58.393-147.925zm206.688 0c-9.575 51.605-28.163 104.814-58.394 147.925 83.178-15.23 151.852-71.949 183.778-147.925H359.344zm-32.558-192c-10.678-53.68-33.174-112.514-70.125-151.992-.221 0-.44-.008-.661-.008s-.44.008-.661.008C218.327 47.551 195.872 106.422 185.214 160h141.572zM16.355 192C10.915 212.419 8 233.868 8 256s2.915 43.581 8.355 64h131.43c-4.939-41.254-5.154-84.951 0-128H16.355zm136.301-32c9.575-51.602 28.161-104.81 58.394-147.925C127.872 27.305 59.198 84.024 27.271 160h125.385z"],"golf-ball":[416,512,[],"f450","M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z"],"graduation-cap":[640,512,[],"f19d","M622.884 199.005l-275.817 85.1a96 96 0 0 1-54.134 0L92.398 222.232c-8.564 11.438-11.018 23.05-11.918 38.335C89.778 266.165 96 276.355 96 288c0 11.952-6.557 22.366-16.265 27.861l16.197 123.096c.63 4.786-3.1 9.043-7.932 9.043H40c-4.828 0-8.562-4.253-7.932-9.044L48.265 315.86C38.557 310.366 32 299.952 32 288c0-12.034 6.646-22.511 16.465-27.976.947-17.951 3.974-33.231 12.152-47.597l-43.502-13.422c-22.876-6.801-22.766-39.241 0-46.01l275.817-85.1a96 96 0 0 1 54.134 0l275.817 85.1c22.877 6.801 22.767 39.241.001 46.01zM356.503 314.682l-.207.064-.207.061a127.998 127.998 0 0 1-72.177 0l-.207-.061-.207-.064-150.914-46.57L120 352c0 35.346 89.543 64 200 64s200-28.654 200-64l-12.583-83.888-150.914 46.57z"],"h-square":[448,512,[],"f0fd","M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z"],"hand-lizard":[576,512,[],"f258","M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z"],"hand-paper":[448,512,[],"f256","M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z"],"hand-peace":[448,512,[],"f25b","M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z"],"hand-point-down":[384,512,[],"f0a7","M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"],"hand-point-left":[512,512,[],"f0a5","M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z"],"hand-point-right":[512,512,[],"f0a4","M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"],"hand-point-up":[384,512,[],"f0a6","M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"],"hand-pointer":[448,512,[],"f25a","M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z"],"hand-rock":[512,512,[],"f255","M512 128.79c0-26.322-20.861-48.344-47.18-48.783C437.935 79.558 416 101.217 416 128h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C333.935 47.558 312 69.217 312 96v32h-8V80.79c0-26.322-20.861-48.344-47.18-48.783C229.935 31.558 208 53.217 208 80v48h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C125.935 47.558 104 69.217 104 96v136l-8-7.111V176.79c0-26.322-20.861-48.344-47.18-48.783C21.935 127.558 0 149.217 0 176v66.445a95.998 95.998 0 0 0 32.221 71.751l111.668 99.261A47.999 47.999 0 0 1 160 449.333V456c0 13.255 10.745 24 24 24h240c13.255 0 24-10.745 24-24v-2.921a96.01 96.01 0 0 1 7.523-37.254l48.954-116.265A96.002 96.002 0 0 0 512 262.306V128.79z"],"hand-scissors":[512,512,[],"f257","M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z"],"hand-spock":[512,512,[],"f259","M10.872 316.585c15.139-16.086 40.454-16.854 56.543-1.713L128 371.893v-79.405L88.995 120.865c-4.896-21.542 8.598-42.974 30.14-47.87 21.549-4.894 42.975 8.599 47.87 30.141L201.747 256h9.833L164.016 48.966c-4.946-21.531 8.498-42.994 30.028-47.94 21.532-4.95 42.994 8.498 47.94 30.028L293.664 256h15.105l48.425-193.702c5.357-21.432 27.075-34.462 48.507-29.104 21.432 5.358 34.463 27.075 29.104 48.507L391.231 256h11.08l30.768-129.265c5.117-21.491 26.685-34.768 48.177-29.647 21.491 5.117 34.765 26.686 29.647 48.177l-36.292 152.467A96.024 96.024 0 0 0 472 319.967v42.102a96.002 96.002 0 0 1-3.96 27.287l-26.174 88.287C435.825 498.022 417.101 512 395.846 512H179.172a48.002 48.002 0 0 1-32.898-13.046L12.585 373.128c-16.087-15.141-16.853-40.456-1.713-56.543z"],handshake:[640,512,[],"f2b5","M72 112H24c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24V136c0-13.255-10.745-24-24-24zM48 340c-11.046 0-20-8.954-20-20s8.954-20 20-20 20 8.954 20 20-8.954 20-20 20zm568-228h-48c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24V136c0-13.255-10.745-24-24-24zm-24 228c-11.046 0-20-8.954-20-20s8.954-20 20-20 20 8.954 20 20-8.954 20-20 20zM485.94 92.67L528 140.74V320h-19.17c.56-14.96-4.38-28.98-14-39.71l-80.92-98.91c2.93-3.2 2.76-8.16-.38-11.16-2.82-2.7-7.08-2.92-10.14-.76-.42.3-60.35 62.93-60.35 62.93l-.2.21c-23.904 26.905-66.127 26.204-89.15-1.42-15.48-18.58-15.29-45.39.45-63.76l66.57-77.67C334.304 73.88 354.534 64 376.7 64h46.05a83.98 83.98 0 0 1 63.19 28.67zm-3.37 197.92c15.46 16.78 12.59 43.83-2.37 57.75-17.711 16.462-42.433 13.004-45.93 9.2 1.653 15.658-21.389 47.249-56.42 44.68-6.325 21.185-32.298 38.909-59.18 29.61-10.22 10.21-25.82 14.97-39.81 14.97-28.69 0-54.92-11.99-72.58-30.8L112 320V135.52l61.36-50.57A71.52 71.52 0 0 1 223.93 64h37.42c16.73 0 32.68 6.84 44.21 18.85l-63.57 74.16c-20.84 24.31-21.09 59.81-.59 84.42 29.375 35.247 83.007 35.853 113.31 1.92L402.82 193l79.75 97.59z"],hashtag:[448,512,[],"f292","M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z"],hdd:[576,512,[],"f0a0","M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"],heading:[512,512,[],"f1dc","M496 80V48c0-8.837-7.163-16-16-16H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.621v128H154.379V96H192c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.275v320H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.621V288H357.62v128H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.275V96H480c8.837 0 16-7.163 16-16z"],headphones:[512,512,[],"f025","M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z"],heart:[576,512,[],"f004","M414.9 24C361.8 24 312 65.7 288 89.3 264 65.7 214.2 24 161.1 24 70.3 24 16 76.9 16 165.5c0 72.6 66.8 133.3 69.2 135.4l187 180.8c8.8 8.5 22.8 8.5 31.6 0l186.7-180.2c2.7-2.7 69.5-63.5 69.5-136C560 76.9 505.7 24 414.9 24z"],heartbeat:[512,512,[],"f21e","M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z"],history:[512,512,[],"f1da","M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"],"hockey-puck":[512,512,[],"f453","M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z"],home:[576,512,[],"f015","M488 312.7V456c0 13.3-10.7 24-24 24H348c-6.6 0-12-5.4-12-12V356c0-6.6-5.4-12-12-12h-72c-6.6 0-12 5.4-12 12v112c0 6.6-5.4 12-12 12H112c-13.3 0-24-10.7-24-24V312.7c0-3.6 1.6-7 4.4-9.3l188-154.8c4.4-3.6 10.8-3.6 15.3 0l188 154.8c2.7 2.3 4.3 5.7 4.3 9.3zm83.6-60.9L488 182.9V44.4c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12V117l-89.5-73.7c-17.7-14.6-43.3-14.6-61 0L4.4 251.8c-5.1 4.2-5.8 11.8-1.6 16.9l25.5 31c4.2 5.1 11.8 5.8 16.9 1.6l235.2-193.7c4.4-3.6 10.8-3.6 15.3 0l235.2 193.7c5.1 4.2 12.7 3.5 16.9-1.6l25.5-31c4.2-5.2 3.4-12.7-1.7-16.9z"],hospital:[448,512,[],"f0f8","M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z"],"hospital-symbol":[512,512,[],"f47e","M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z"],hourglass:[384,512,[],"f254","M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z"],"hourglass-end":[384,512,[],"f253","M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z"],"hourglass-half":[384,512,[],"f252","M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z"],"hourglass-start":[384,512,[],"f251","M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z"],"i-cursor":[256,512,[],"f246","M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z"],"id-badge":[384,512,[],"f2c1","M336 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM128 44c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12H140c-6.627 0-12-5.373-12-12v-8zm64 116c44.183 0 80 35.817 80 80s-35.817 80-80 80-80-35.817-80-80 35.817-80 80-80zm128 232c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24v-18.523c0-22.026 14.99-41.225 36.358-46.567l35.656-8.914c29.101 20.932 74.509 26.945 111.97 0l35.656 8.914c21.37 5.342 36.36 24.542 36.36 46.567V392z"],"id-card":[512,512,[],"f2c2","M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zM256 350c0 9.941-8.059 18-18 18H82c-9.941 0-18-8.059-18-18v-13.892c0-16.519 11.243-30.919 27.269-34.925l26.742-6.686c21.826 15.699 55.882 20.209 83.978 0l26.743 6.686C244.757 305.189 256 319.589 256 336.108V350zM100 236c0-33.137 26.863-60 60-60s60 26.863 60 60-26.863 60-60 60-60-26.863-60-60zm348 104c0 6.627-5.373 12-12 12H300c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v8zm0-64c0 6.627-5.373 12-12 12H300c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v8zm0-64c0 6.627-5.373 12-12 12H300c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v8zm32-96c0 6.627-5.373 12-12 12H44c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v8z"],image:[512,512,[],"f03e","M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"],images:[576,512,[],"f302","M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z"],inbox:[576,512,[],"f01c","M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z"],indent:[448,512,[],"f03c","M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm176 144h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm-52.687-111.313l-96-95.984C17.266 138.652 0 145.776 0 160.016v191.975c0 14.329 17.325 21.304 27.313 11.313l96-95.992c6.249-6.247 6.249-16.377 0-22.625z"],industry:[512,512,[],"f275","M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z"],info:[192,512,[],"f129","M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"],"info-circle":[512,512,[],"f05a","M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"],italic:[320,512,[],"f033","M204.758 416h-33.849l62.092-320h40.725a16 16 0 0 0 15.704-12.937l6.242-32C297.599 41.184 290.034 32 279.968 32H120.235a16 16 0 0 0-15.704 12.937l-6.242 32C96.362 86.816 103.927 96 113.993 96h33.846l-62.09 320H46.278a16 16 0 0 0-15.704 12.935l-6.245 32C22.402 470.815 29.967 480 40.034 480h158.479a16 16 0 0 0 15.704-12.935l6.245-32c1.927-9.88-5.638-19.065-15.704-19.065z"],key:[512,512,[],"f084","M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"],keyboard:[576,512,[],"f11c","M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"],language:[640,512,[],"f1ab","M304 416H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h280v320zm-120.676-72.622A12 12 0 0 0 194.839 352h22.863c8.22 0 14.007-8.078 11.362-15.861L171.61 167.085a12 12 0 0 0-11.362-8.139h-32.489a12.001 12.001 0 0 0-11.362 8.139L58.942 336.139C56.297 343.922 62.084 352 70.304 352h22.805a12 12 0 0 0 11.535-8.693l9.118-31.807h60.211l9.351 31.878zm-39.051-140.42s4.32 21.061 7.83 33.21l10.8 37.531h-38.07l11.07-37.531c3.51-12.15 7.83-33.21 7.83-33.21h.54zM616 416H336V96h280c13.255 0 24 10.745 24 24v272c0 13.255-10.745 24-24 24zm-36-228h-64v-16c0-6.627-5.373-12-12-12h-16c-6.627 0-12 5.373-12 12v16h-64c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h114.106c-6.263 14.299-16.518 28.972-30.023 43.206-6.56-6.898-12.397-13.91-17.365-20.933-3.639-5.144-10.585-6.675-15.995-3.446l-7.28 4.346-6.498 3.879c-5.956 3.556-7.693 11.421-3.735 17.117 6.065 8.729 13.098 17.336 20.984 25.726-8.122 6.226-16.841 12.244-26.103 17.964-5.521 3.41-7.381 10.556-4.162 16.19l7.941 13.896c3.362 5.883 10.935 7.826 16.706 4.276 12.732-7.831 24.571-16.175 35.443-24.891 10.917 8.761 22.766 17.102 35.396 24.881 5.774 3.556 13.353 1.618 16.717-4.27l7.944-13.903c3.213-5.623 1.37-12.76-4.135-16.171a312.737 312.737 0 0 1-26.06-18.019c21.024-22.425 35.768-46.289 42.713-69.85H580c6.627 0 12-5.373 12-12v-16c0-6.625-5.373-11.998-12-11.998z"],laptop:[640,512,[],"f109","M512 64v256H128V64h384m16-64H112C85.5 0 64 21.5 64 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm100 416H389.5c-3 0-5.5 2.1-5.9 5.1C381.2 436.3 368 448 352 448h-64c-16 0-29.2-11.7-31.6-26.9-.5-2.9-3-5.1-5.9-5.1H12c-6.6 0-12 5.4-12 12v36c0 26.5 21.5 48 48 48h544c26.5 0 48-21.5 48-48v-36c0-6.6-5.4-12-12-12z"],leaf:[576,512,[],"f06c","M395.4 420.8c-43.4 21.6-91.9 34.4-140.8 34.4-82.2 0-151.1-40.1-151.1-40.1-16.1 0-35.4 64.9-63.3 64.9-27 0-40.2-24-40.2-38.5 0-33.1 63.6-58.9 63.6-77.3 0 0-12.5-21.2-12.5-59.2 0-101.2 81.3-173.4 172.6-203.3 65.9-21.6 206 3.5 250.7-38.5C492.1 47 500.8 32 527.8 32c36.3 0 48.2 93.2 48.2 120.3 0 110.9-54.5 206.5-180.6 268.5zm-254.3-75.6c63.5-89.9 144.5-128.8 257.7-120 8.8.7 16.5-5.9 17.2-14.7.7-8.8-5.9-16.5-14.7-17.2-124-9.6-215.9 33.9-286.3 133.5-5.1 7.2-3.4 17.2 3.8 22.3 7.2 5.1 17.2 3.4 22.3-3.9z"],lemon:[512,512,[],"f094","M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z"],"level-down-alt":[320,512,[],"f3be","M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z"],"level-up-alt":[320,512,[],"f3bf","M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z"],"life-ring":[512,512,[],"f1cd","M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"],lightbulb:[384,512,[],"f0eb","M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zm-143.107-44c-9.907 0-18.826-6.078-22.376-15.327C67.697 267.541 16 277.731 16 176 16 78.803 94.805 0 192 0s176 78.803 176 176c0 101.731-51.697 91.541-90.516 192.673-3.55 9.249-12.47 15.327-22.376 15.327H128.893zM112 176c0-44.112 35.888-80 80-80 8.837 0 16-7.164 16-16s-7.163-16-16-16c-61.757 0-112 50.243-112 112 0 8.836 7.164 16 16 16s16-7.164 16-16z"],link:[512,512,[],"f0c1","M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"],"lira-sign":[384,512,[],"f195","M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z"],list:[512,512,[],"f03a","M128 116V76c0-8.837 7.163-16 16-16h352c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H144c-8.837 0-16-7.163-16-16zm16 176h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 144h64c8.837 0 16-7.163 16-16V64c0-8.837-7.163-16-16-16H16C7.163 48 0 55.163 0 64v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16z"],"list-alt":[512,512,[],"f022","M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z"],"list-ol":[512,512,[],"f0cb","M3.263 139.527c0-7.477 3.917-11.572 11.573-11.572h15.131V88.078c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.938C32.815 33.602 36.732 32 42.785 32H54.89c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572H14.836c-7.656 0-11.573-4.095-11.573-11.572v-8.902zM2.211 304.591c0-47.278 50.955-56.383 50.955-69.165 0-7.18-5.954-8.755-9.28-8.755-3.153 0-6.479 1.051-9.455 3.852-5.079 4.903-10.507 7.004-16.111 2.451l-8.579-6.829c-5.779-4.553-7.18-9.805-2.803-15.409C13.592 201.981 26.025 192 47.387 192c19.437 0 44.476 10.506 44.476 39.573 0 38.347-46.753 46.402-48.679 56.909h39.049c7.529 0 11.557 4.027 11.557 11.382v8.755c0 7.354-4.028 11.382-11.557 11.382h-67.94c-7.005 0-12.083-4.028-12.083-11.382v-4.028zM5.654 454.61l5.603-9.28c3.853-6.654 9.105-7.004 15.584-3.152 4.903 2.101 9.63 3.152 14.359 3.152 10.155 0 14.358-3.502 14.358-8.23 0-6.654-5.604-9.106-15.934-9.106h-4.728c-5.954 0-9.28-2.101-12.258-7.88l-1.05-1.926c-2.451-4.728-1.226-9.806 2.801-14.884l5.604-7.004c6.829-8.405 12.257-13.483 12.257-13.483v-.35s-4.203 1.051-12.608 1.051H16.685c-7.53 0-11.383-4.028-11.383-11.382v-8.755c0-7.53 3.853-11.382 11.383-11.382h58.484c7.529 0 11.382 4.027 11.382 11.382v3.327c0 5.778-1.401 9.806-5.079 14.183l-17.509 20.137c19.611 5.078 28.716 20.487 28.716 34.845 0 21.363-14.358 44.126-48.503 44.126-16.636 0-28.192-4.728-35.896-9.455-5.779-4.202-6.304-9.805-2.626-15.934zM144 132h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],"list-ul":[512,512,[],"f0ca","M96 96c0 26.51-21.49 48-48 48S0 122.51 0 96s21.49-48 48-48 48 21.49 48 48zM48 208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm0 160c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm96-236h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],"location-arrow":[512,512,[],"f124","M443.683 4.529L27.818 196.418C-18.702 217.889-3.39 288 47.933 288H224v175.993c0 51.727 70.161 66.526 91.582 20.115L507.38 68.225c18.905-40.961-23.752-82.133-63.697-63.696z"],lock:[448,512,[],"f023","M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"],"lock-open":[576,512,[],"f3c1","M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"],"long-arrow-alt-down":[256,512,[],"f309","M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z"],"long-arrow-alt-left":[448,512,[],"f30a","M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z"],"long-arrow-alt-right":[448,512,[],"f30b","M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z"],"long-arrow-alt-up":[256,512,[],"f30c","M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z"],"low-vision":[576,512,[],"f2a8","M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z"],magic:[512,512,[],"f0d0","M101.1 505L7 410.9c-9.4-9.4-9.4-24.6 0-33.9L377 7c9.4-9.4 24.6-9.4 33.9 0l94.1 94.1c9.4 9.4 9.4 24.6 0 33.9L135 505c-9.3 9.3-24.5 9.3-33.9 0zM304 159.2l48.8 48.8 89.9-89.9-48.8-48.8-89.9 89.9zM138.9 39.3l-11.7 23.8-26.2 3.8c-4.7.7-6.6 6.5-3.2 9.8l19 18.5-4.5 26.1c-.8 4.7 4.1 8.3 8.3 6.1L144 115l23.4 12.3c4.2 2.2 9.1-1.4 8.3-6.1l-4.5-26.1 19-18.5c3.4-3.3 1.5-9.1-3.2-9.8L160.8 63l-11.7-23.8c-2-4.1-8.1-4.1-10.2.1zm97.7-20.7l-7.8 15.8-17.5 2.6c-3.1.5-4.4 4.3-2.1 6.5l12.6 12.3-3 17.4c-.5 3.1 2.8 5.5 5.6 4L240 69l15.6 8.2c2.8 1.5 6.1-.9 5.6-4l-3-17.4 12.6-12.3c2.3-2.2 1-6.1-2.1-6.5l-17.5-2.5-7.8-15.8c-1.4-3-5.4-3-6.8-.1zm-192 0l-7.8 15.8L19.3 37c-3.1.5-4.4 4.3-2.1 6.5l12.6 12.3-3 17.4c-.5 3.1 2.8 5.5 5.6 4L48 69l15.6 8.2c2.8 1.5 6.1-.9 5.6-4l-3-17.4 12.6-12.3c2.3-2.2 1-6.1-2.1-6.5l-17.5-2.5-7.8-15.8c-1.4-3-5.4-3-6.8-.1zm416 223.5l-7.8 15.8-17.5 2.5c-3.1.5-4.4 4.3-2.1 6.5l12.6 12.3-3 17.4c-.5 3.1 2.8 5.5 5.6 4l15.6-8.2 15.6 8.2c2.8 1.5 6.1-.9 5.6-4l-3-17.4 12.6-12.3c2.3-2.2 1-6.1-2.1-6.5l-17.5-2.5-7.8-15.8c-1.4-2.8-5.4-2.8-6.8 0z"],magnet:[512,512,[],"f076","M164.1 160H12c-6.6 0-12-5.4-12-12V68c0-19.9 16.1-36 36-36h104c19.9 0 36 16.1 36 36v80c.1 6.6-5.3 12-11.9 12zm348-12V67.9c0-19.9-16.1-36-36-36h-104c-19.9 0-36 16.1-36 36v80c0 6.6 5.4 12 12 12h152c6.6.1 12-5.3 12-11.9zm-164 44c-6.6 0-12 5.4-12 12v52c0 128.1-160 127.9-160 0v-52c0-6.6-5.4-12-12-12h-152c-6.7 0-12 5.4-12 12.1.1 21.4.6 40.3 0 53.3C.1 408 136.3 504 256.9 504 377.5 504 512 408 512 257.3c-.6-12.8-.2-33 0-53.2 0-6.7-5.3-12.1-12-12.1H348.1z"],male:[192,512,[],"f183","M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z"],map:[576,512,[],"f279","M576 56.015v335.97a23.998 23.998 0 0 1-13.267 21.466l-128 64C418.948 485.344 400 473.992 400 455.985v-335.97a23.998 23.998 0 0 1 13.267-21.466l128-64C557.052 26.656 576 38.008 576 56.015zm-206.253 42.07l-144-64c-15.751-7-33.747 4.461-33.747 21.932v335.967a24 24 0 0 0 14.253 21.931l144 64c15.751 7 33.747-4.461 33.747-21.931V120.017a24 24 0 0 0-14.253-21.932zm-228.48-63.536l-128 63.985A23.998 23.998 0 0 0 0 120v335.985c0 18.007 18.948 29.359 34.733 21.466l128-63.985A23.998 23.998 0 0 0 176 392V56.015c0-18.007-18.948-29.359-34.733-21.466z"],"map-marker":[384,512,[],"f041","M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z"],"map-marker-alt":[384,512,[],"f3c5","M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"],"map-pin":[320,512,[],"f276","M192 300.813v172.82l-22.015 33.023c-4.75 7.125-15.219 7.125-19.969 0L128 473.633v-172.82a162.221 162.221 0 0 0 64 0zM160 0c79.529 0 144 64.471 144 144s-64.471 144-144 144S16 223.529 16 144 80.471 0 160 0M80 136c0-39.701 32.299-72 72-72a8 8 0 0 0 0-16c-48.523 0-88 39.477-88 88a8 8 0 0 0 16 0z"],"map-signs":[512,512,[],"f277","M487.515 104.485L439.03 152.97a23.998 23.998 0 0 1-16.97 7.029H56c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h160v-8c0-13.255 10.745-24 24-24h32c13.255 0 24 10.745 24 24v8h126.059a24 24 0 0 1 16.97 7.029l48.485 48.485c4.687 4.687 4.687 12.285.001 16.971zM216 368v120c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V368h-80zm240-144H296v-48h-80v48H89.941a24 24 0 0 0-16.97 7.029l-48.485 48.485c-4.686 4.686-4.686 12.284 0 16.971l48.485 48.485a23.998 23.998 0 0 0 16.97 7.029H456c13.255 0 24-10.745 24-24v-80C480 234.745 469.255 224 456 224z"],mars:[384,512,[],"f222","M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],"mars-double":[512,512,[],"f227","M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z"],"mars-stroke":[384,512,[],"f229","M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],"mars-stroke-h":[480,512,[],"f22b","M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"],"mars-stroke-v":[288,512,[],"f22a","M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"],medkit:[512,512,[],"f0fa","M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"],meh:[512,512,[],"f11a","M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-396-64c0 37.497 30.503 68 68 68s68-30.503 68-68-30.503-68-68-68-68 30.503-68 68zm160.5 0c0 37.221 30.279 67.5 67.5 67.5s67.5-30.279 67.5-67.5-30.279-67.5-67.5-67.5-67.5 30.279-67.5 67.5zm67.5-48a47.789 47.789 0 0 0-22.603 5.647h.015c10.916 0 19.765 8.849 19.765 19.765s-8.849 19.765-19.765 19.765-19.765-8.849-19.765-19.765v-.015A47.789 47.789 0 0 0 288 192c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48zm-160 0a47.789 47.789 0 0 0-22.603 5.647h.015c10.916 0 19.765 8.849 19.765 19.765s-8.849 19.765-19.765 19.765-19.765-8.849-19.765-19.765v-.015A47.789 47.789 0 0 0 128 192c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48zm160 208H176c-21.178 0-21.169 32 0 32h160c21.178 0 21.169-32 0-32z"],mercury:[288,512,[],"f223","M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"],microchip:[512,512,[],"f2db","M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z"],microphone:[384,512,[],"f130","M96 256V96c0-53.019 42.981-96 96-96s96 42.981 96 96v160c0 53.019-42.981 96-96 96s-96-42.981-96-96zm252-56h-24c-6.627 0-12 5.373-12 12v42.68c0 66.217-53.082 120.938-119.298 121.318C126.213 376.38 72 322.402 72 256v-44c0-6.627-5.373-12-12-12H36c-6.627 0-12 5.373-12 12v44c0 84.488 62.693 154.597 144 166.278V468h-68c-6.627 0-12 5.373-12 12v20c0 6.627 5.373 12 12 12h184c6.627 0 12-5.373 12-12v-20c0-6.627-5.373-12-12-12h-68v-45.722c81.307-11.681 144-81.79 144-166.278v-44c0-6.627-5.373-12-12-12z"],"microphone-slash":[512,512,[],"f131","M421.45 285.195L376 239.746V212c0-6.627 5.373-12 12-12h24c6.627 0 12 5.373 12 12v44c0 9.957-.881 19.71-2.55 29.195zM352 96c0-53.019-42.981-96-96-96-32.574 0-61.354 16.227-78.71 41.035L352 215.746V96zm152.971 363.716L52.284 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 18.343c-9.372 9.373-9.372 24.568 0 33.941L160 205.254v49.577c0 53.089 43.436 97.452 96.524 97.167 14.626-.078 28.471-3.44 40.854-9.366l17.746 17.746c-17.529 9.971-37.794 15.666-59.372 15.622C189.355 375.864 136 321.053 136 254.656V212c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v44c0 84.488 62.693 154.597 144 166.278V468h-68c-6.627 0-12 5.373-12 12v20c0 6.627 5.373 12 12 12h184c6.627 0 12-5.373 12-12v-20c0-6.627-5.373-12-12-12h-68v-45.722c25.625-3.682 49.396-13.172 69.942-27.083L459.717 504.97c9.373 9.373 24.569 9.373 33.941 0l11.313-11.313c9.372-9.373 9.372-24.568 0-33.941z"],minus:[448,512,[],"f068","M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z"],"minus-circle":[512,512,[],"f056","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"],"minus-square":[448,512,[],"f146","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"],mobile:[320,512,[],"f10b","M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],"mobile-alt":[320,512,[],"f3cd","M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z"],"money-bill-alt":[640,512,[],"f3d1","M640 120v272c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h592c13.255 0 24 10.745 24 24zM96 384c0-35.346-28.654-64-64-64v64h64zm0-256H32v64c35.346 0 64-28.654 64-64zm304 128c0-53.021-35.816-96-80-96s-80 42.979-80 96c0 53.012 35.814 96 80 96 44.167 0 80-42.969 80-96zm208 64c-35.346 0-64 28.654-64 64h64v-64zm0-192h-64c0 35.346 28.654 64 64 64v-64zM277.563 299.527c0-7.477 3.917-11.572 11.573-11.572h15.131v-39.878c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.939c4.449-4.095 8.366-5.697 14.42-5.697h12.105c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572h-67.293c-7.656 0-11.573-4.095-11.573-11.572v-8.9z"],moon:[512,512,[],"f186","M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"],motorcycle:[640,512,[],"f21c","M512.949 192.003c-14.862-.108-29.14 2.322-42.434 6.874L437.589 144H520c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24h-45.311a24 24 0 0 0-17.839 7.945l-37.496 41.663-22.774-37.956A24 24 0 0 0 376 64h-80c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h66.411l19.2 32H227.904c-17.727-23.073-44.924-40-99.904-40H72.54c-13.455 0-24.791 11.011-24.536 24.464C48.252 141.505 58.9 152 72 152h56c24.504 0 38.686 10.919 47.787 24.769l-11.291 20.529c-13.006-3.865-26.871-5.736-41.251-5.21C55.857 194.549 1.565 249.605.034 317.021-1.603 389.076 56.317 448 128 448c59.642 0 109.744-40.794 123.953-96h84.236c13.673 0 24.589-11.421 23.976-25.077-2.118-47.12 17.522-93.665 56.185-125.026l12.485 20.808c-27.646 23.654-45.097 58.88-44.831 98.179.47 69.556 57.203 126.452 126.758 127.11 71.629.678 129.839-57.487 129.234-129.099-.588-69.591-57.455-126.386-127.047-126.892zM128 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c4.242 0 8.405.341 12.469.982L98.97 316.434C90.187 332.407 101.762 352 120 352h81.297c-12.37 28.225-40.56 48-73.297 48zm388.351-.116C470.272 402.337 432 365.554 432 320c0-21.363 8.434-40.781 22.125-55.144l49.412 82.352c4.546 7.577 14.375 10.034 21.952 5.488l13.72-8.232c7.577-4.546 10.034-14.375 5.488-21.952l-48.556-80.927A80.005 80.005 0 0 1 512 240c45.554 0 82.338 38.273 79.884 84.352-2.16 40.558-34.974 73.372-75.533 75.532z"],"mouse-pointer":[320,512,[],"f245","M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z"],music:[512,512,[],"f001","M470.4 1.5l-304 96C153.1 101.7 144 114 144 128v264.6c-14.1-5.4-30.5-8.6-48-8.6-53 0-96 28.7-96 64s43 64 96 64 96-28.7 96-64V220.5l272-85.9v194c-14.1-5.4-30.5-8.6-48-8.6-53 0-96 28.7-96 64s43 64 96 64 96-28.7 96-64V32c0-21.7-21.1-37-41.6-30.5z"],neuter:[288,512,[],"f22c","M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],newspaper:[576,512,[],"f1ea","M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z"],"object-group":[512,512,[],"f247","M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z"],"object-ungroup":[576,512,[],"f248","M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z"],outdent:[448,512,[],"f03b","M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm208 144h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm192-128h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM4.687 267.313l96 95.984C110.734 373.348 128 366.224 128 351.984V160.008c0-14.329-17.325-21.304-27.313-11.313l-96 95.992c-6.249 6.248-6.249 16.378 0 22.626z"],"paint-brush":[512,512,[],"f1fc","M269.9 364.6c1.4 6.4 2.1 13 2.1 19.7 0 81.2-54.2 127.7-134.8 127.7C41.5 512 0 435.1 0 347.6c10.4 7.1 46.9 36.5 58.7 36.5 7 0 13-4 15.5-10.6 23.6-62.2 66.5-76.5 112.9-77.4 15.6 33.8 46.1 59.6 82.8 68.5zM460.6 0c-14.4 0-27.9 6.4-38.2 15.7C228.2 190 208 194.1 208 245.4c0 48.8 40.5 90.6 90.2 90.6 59 0 93.2-43.4 200.6-244.8 7-13.7 13.2-28.5 13.2-43.9C512 19.7 487.3 0 460.6 0z"],pallet:[640,512,[],"f482","M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z"],"paper-plane":[512,512,[],"f1d8","M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"],paperclip:[448,512,[],"f0c6","M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"],paragraph:[448,512,[],"f1dd","M408 32H177.531C88.948 32 16.045 103.335 16 191.918 15.956 280.321 87.607 352 176 352v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h32v344c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h40c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24z"],paste:[448,512,[],"f0ea","M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z"],pause:[448,512,[],"f04c","M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"],"pause-circle":[512,512,[],"f28b","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z"],paw:[512,512,[],"f1b0","M85.231 330.958C36 330.958 0 273.792 0 231.5c0-28.292 16-58.042 49.538-58.042 49.231 0 85.231 57.458 85.231 99.75 0 28.292-15.692 57.75-49.538 57.75zm348 106.167c0 37.042-32 42.875-63.385 42.875-41.231 0-74.462-26.25-113.846-26.25-41.231 0-76.308 25.958-120.923 25.958-29.847 0-56.308-9.625-56.308-42.583C78.769 368 180.616 265.333 256 265.333s177.231 102.959 177.231 171.792zM182.462 203.792c-49.847 0-80-59.5-80-100.333C102.462 70.792 120.308 32 160 32c50.154 0 80 59.5 80 100.333 0 32.667-17.846 71.459-57.538 71.459zM272 132.333C272 91.5 301.846 32 352 32c39.692 0 57.539 38.792 57.539 71.458 0 40.833-30.154 100.333-80.001 100.333C289.846 203.792 272 165 272 132.333zM512 231.5c0 42.292-36 99.458-85.231 99.458-33.847 0-49.538-29.458-49.538-57.75 0-42.291 35.999-99.75 85.231-99.75C496 173.458 512 203.208 512 231.5z"],"pen-square":[448,512,[],"f14b","M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z"],"pencil-alt":[512,512,[],"f303","M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"],percent:[448,512,[],"f295","M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"],phone:[512,512,[],"f095","M493.397 24.615l-104-23.997c-11.314-2.611-22.879 3.252-27.456 13.931l-48 111.997a24 24 0 0 0 6.862 28.029l60.617 49.596c-35.973 76.675-98.938 140.508-177.249 177.248l-49.596-60.616a24 24 0 0 0-28.029-6.862l-111.997 48C3.873 366.516-1.994 378.08.618 389.397l23.997 104C27.109 504.204 36.748 512 48 512c256.087 0 464-207.532 464-464 0-11.176-7.714-20.873-18.603-23.385z"],"phone-square":[448,512,[],"f098","M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z"],"phone-volume":[384,512,[],"f2a0","M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"],pills:[576,512,[],"f484","M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z"],plane:[576,512,[],"f072","M472 200H360.211L256.013 5.711A12 12 0 0 0 245.793 0h-57.787c-7.85 0-13.586 7.413-11.616 15.011L209.624 200H99.766l-34.904-58.174A12 12 0 0 0 54.572 136H12.004c-7.572 0-13.252 6.928-11.767 14.353l21.129 105.648L.237 361.646c-1.485 7.426 4.195 14.354 11.768 14.353l42.568-.002c4.215 0 8.121-2.212 10.289-5.826L99.766 312h109.858L176.39 496.989c-1.97 7.599 3.766 15.011 11.616 15.011h57.787a12 12 0 0 0 10.22-5.711L360.212 312H472c57.438 0 104-25.072 104-56s-46.562-56-104-56z"],play:[448,512,[],"f04b","M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"],"play-circle":[512,512,[],"f144","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"],plug:[384,512,[],"f1e6","M256 144V32c0-17.673 14.327-32 32-32s32 14.327 32 32v112h-64zm112 16H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h16v32c0 77.406 54.969 141.971 128 156.796V512h64v-99.204c73.031-14.825 128-79.39 128-156.796v-32h16c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm-240-16V32c0-17.673-14.327-32-32-32S64 14.327 64 32v112h64z"],plus:[448,512,[],"f067","M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z"],"plus-circle":[512,512,[],"f055","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],"plus-square":[448,512,[],"f0fe","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],podcast:[448,512,[],"f2ce","M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z"],"pound-sign":[320,512,[],"f154","M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z"],"power-off":[512,512,[],"f011","M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"],print:[512,512,[],"f02f","M464 192h-16V81.941a24 24 0 0 0-7.029-16.97L383.029 7.029A24 24 0 0 0 366.059 0H88C74.745 0 64 10.745 64 24v168H48c-26.51 0-48 21.49-48 48v132c0 6.627 5.373 12 12 12h52v104c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V384h52c6.627 0 12-5.373 12-12V240c0-26.51-21.49-48-48-48zm-80 256H128v-96h256v96zM128 224V64h192v40c0 13.2 10.8 24 24 24h40v96H128zm304 72c-13.254 0-24-10.746-24-24s10.746-24 24-24 24 10.746 24 24-10.746 24-24 24z"],"puzzle-piece":[576,512,[],"f12e","M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z"],qrcode:[448,512,[],"f029","M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z"],question:[384,512,[],"f128","M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"],"question-circle":[512,512,[],"f059","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"],quidditch:[640,512,[],"f458","M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z"],"quote-left":[512,512,[],"f10d","M0 432V304C0 166.982 63.772 67.676 193.827 32.828 209.052 28.748 224 40.265 224 56.027v33.895c0 10.057-6.228 19.133-15.687 22.55C142.316 136.312 104 181.946 104 256h72c26.51 0 48 21.49 48 48v128c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm336 48h128c26.51 0 48-21.49 48-48V304c0-26.51-21.49-48-48-48h-72c0-74.054 38.316-119.688 104.313-143.528C505.772 109.055 512 99.979 512 89.922V56.027c0-15.762-14.948-27.279-30.173-23.199C351.772 67.676 288 166.982 288 304v128c0 26.51 21.49 48 48 48z"],"quote-right":[512,512,[],"f10e","M512 80v128c0 137.018-63.772 236.324-193.827 271.172-15.225 4.08-30.173-7.437-30.173-23.199v-33.895c0-10.057 6.228-19.133 15.687-22.55C369.684 375.688 408 330.054 408 256h-72c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h128c26.51 0 48 21.49 48 48zM176 32H48C21.49 32 0 53.49 0 80v128c0 26.51 21.49 48 48 48h72c0 74.054-38.316 119.688-104.313 143.528C6.228 402.945 0 412.021 0 422.078v33.895c0 15.762 14.948 27.279 30.173 23.199C160.228 444.324 224 345.018 224 208V80c0-26.51-21.49-48-48-48z"],random:[512,512,[],"f074","M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"],recycle:[512,512,[],"f1b8","M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z"],redo:[512,512,[],"f01e","M500.333 0h-47.411c-6.853 0-12.314 5.729-11.986 12.574l3.966 82.759C399.416 41.899 331.672 8 256.001 8 119.34 8 7.899 119.526 8 256.187 8.101 393.068 119.096 504 256 504c63.926 0 122.202-24.187 166.178-63.908 5.113-4.618 5.354-12.561.482-17.433l-33.971-33.971c-4.466-4.466-11.64-4.717-16.38-.543C341.308 415.448 300.606 432 256 432c-97.267 0-176-78.716-176-176 0-97.267 78.716-176 176-176 60.892 0 114.506 30.858 146.099 77.8l-101.525-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12z"],"redo-alt":[512,512,[],"f2f9","M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z"],registered:[512,512,[],"f25d","M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z"],reply:[512,512,[],"f3e5","M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"],"reply-all":[576,512,[],"f122","M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z"],retweet:[640,512,[],"f079","M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z"],road:[576,512,[],"f018","M567.3 383.6L429.9 78.2C426 69.5 417.4 64 408 64h-96.1l1.9 18.8c.7 7.1-4.8 13.2-11.9 13.2H274c-7.1 0-12.7-6.2-11.9-13.2L264 64h-96c-9.4 0-18 5.5-21.9 14.2L8.7 383.6C3.2 395.8 0 409.6 0 424c0 13.3 10.7 24 24 24h213.6c-7.1 0-12.7-6.2-11.9-13.2l10.8-104c.6-6.1 5.8-10.8 11.9-10.8h79.2c6.1 0 11.3 4.6 11.9 10.8l10.8 104c.7 7.1-4.8 13.2-11.9 13.2H552c13.2 0 24-10.7 24-24 0-13.9-3-27.7-8.7-40.4zM254.7 154.8l3.3-32c.6-6.1 5.8-10.8 11.9-10.8h36.2c6.1 0 11.3 4.6 11.9 10.8l3.3 32c.7 7.1-4.8 13.2-11.9 13.2h-42.8c-7.1 0-12.7-6.2-11.9-13.2zM321.8 288h-67.6c-7.1 0-12.7-6.2-11.9-13.2l7.4-72c.6-6.1 5.8-10.8 11.9-10.8h52.7c6.1 0 11.3 4.6 11.9 10.8l7.4 72c.9 7-4.7 13.2-11.8 13.2z"],rocket:[512,512,[],"f135","M505.1 19.1C503.8 13 499 8.2 492.9 6.9 460.7 0 435.5 0 410.4 0 307.2 0 245.3 55.2 199.1 128H94.9c-18.2 0-34.8 10.3-42.9 26.5L2.6 253.3c-8 16 3.6 34.7 21.5 34.7h95.1c-5.9 12.8-11.9 25.5-18 37.7-3.1 6.2-1.9 13.6 3 18.5l63.6 63.6c4.9 4.9 12.3 6.1 18.5 3 12.2-6.1 24.9-12 37.7-17.9V488c0 17.8 18.8 29.4 34.7 21.5l98.7-49.4c16.3-8.1 26.5-24.8 26.5-42.9V312.8c72.6-46.3 128-108.4 128-211.1.1-25.2.1-50.4-6.8-82.6zM400 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"],rss:[448,512,[],"f09e","M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z"],"rss-square":[448,512,[],"f143","M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z"],"ruble-sign":[384,512,[],"f158","M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z"],"rupee-sign":[320,512,[],"f156","M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z"],save:[448,512,[],"f0c7","M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"],search:[512,512,[],"f002","M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"],"search-minus":[512,512,[],"f010","M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"],"search-plus":[512,512,[],"f00e","M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"],server:[512,512,[],"f233","M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"],share:[512,512,[],"f064","M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"],"share-alt":[448,512,[],"f1e0","M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z"],"share-alt-square":[448,512,[],"f1e1","M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z"],"share-square":[576,512,[],"f14d","M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z"],"shekel-sign":[448,512,[],"f20b","M170.12 96H80v372c0 6.627-5.373 12-12 12H12c-6.627 0-12-5.373-12-12V44c0-6.627 5.373-12 12-12h168.36C265.48 32 325 89.6 325 175.071V359c0 6.627-5.373 12-12 12h-44c-13.255 0-24-10.745-24-24V170.323C245 125.11 216.839 96 170.12 96zM436 32h-56c-6.627 0-12 5.373-12 12v372h-90.12c-46.72 0-74.88-29.11-74.88-74.323V165c0-13.255-10.745-24-24-24h-44c-6.627 0-12 5.373-12 12v183.929C123 422.4 182.52 480 267.64 480H436c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12z"],"shield-alt":[512,512,[],"f3ed","M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z"],ship:[640,512,[],"f21a","M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z"],"shipping-fast":[640,512,[],"f48b","M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"],"shopping-bag":[448,512,[],"f290","M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z"],"shopping-basket":[576,512,[],"f291","M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z"],"shopping-cart":[576,512,[],"f07a","M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"],shower:[512,512,[],"f2cc","M389.66 135.6L231.6 293.66c-9.37 9.37-24.57 9.37-33.94 0l-11.32-11.32c-9.37-9.37-9.37-24.57 0-33.94l.11-.11c-34.03-40.21-35.16-98.94-3.39-140.38-11.97-7.55-26.14-11.91-41.3-11.91C98.88 96 64 130.88 64 173.76V480H0V173.76C0 95.59 63.59 32 141.76 32c36.93 0 70.61 14.2 95.86 37.42 35.9-11.51 76.5-4.5 106.67 21.03l.11-.11c9.37-9.37 24.57-9.37 33.94 0l11.32 11.32c9.37 9.37 9.37 24.57 0 33.94zM384 208c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm48-16c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zm80 16c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-128 32c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-96 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm64 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z"],"sign-in-alt":[512,512,[],"f2f6","M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z"],"sign-language":[448,512,[],"f2a7","M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z"],"sign-out-alt":[512,512,[],"f2f5","M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"],signal:[640,512,[],"f012","M36 384h56c6.6 0 12 5.4 12 12v104c0 6.6-5.4 12-12 12H36c-6.6 0-12-5.4-12-12V396c0-6.6 5.4-12 12-12zm116-36v152c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V348c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-80v232c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V268c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-112v344c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V156c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zM536 12v488c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V12c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12z"],sitemap:[640,512,[],"f0e8","M616 320h-48v-48c0-22.056-17.944-40-40-40H344v-40h48c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v144c0 13.255 10.745 24 24 24h48v40H112c-22.056 0-40 17.944-40 40v48H24c-13.255 0-24 10.745-24 24v144c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V344c0-13.255-10.745-24-24-24h-48v-40h176v40h-48c-13.255 0-24 10.745-24 24v144c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V344c0-13.255-10.745-24-24-24h-48v-40h176v40h-48c-13.255 0-24 10.745-24 24v144c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V344c0-13.255-10.745-24-24-24z"],"sliders-h":[576,512,[],"f1de","M576 80v40c0 6.6-5.4 12-12 12H160v8c0 13.3-10.7 24-24 24h-16c-13.3 0-24-10.7-24-24v-8H12c-6.6 0-12-5.4-12-12V80c0-6.6 5.4-12 12-12h84v-8c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24v8h404c6.6 0 12 5.4 12 12zm-12 148h-84v-8c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v8H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h404v8c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-8h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12zm0 160H288v-8c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v8H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h212v8c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-8h276c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12z"],smile:[512,512,[],"f118","M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-122.526 75.34c11.479-17.755-15.349-35.194-26.873-17.374-53.418 82.627-143.71 82.681-197.164 0-11.502-17.79-38.364-.401-26.873 17.374 66.014 102.107 184.795 102.265 250.91 0zM108 192c0 37.497 30.503 68 68 68s68-30.503 68-68-30.503-68-68-68-68 30.503-68 68zm160.5 0c0 37.221 30.279 67.5 67.5 67.5s67.5-30.279 67.5-67.5-30.279-67.5-67.5-67.5-67.5 30.279-67.5 67.5zm67.5-48a47.789 47.789 0 0 0-22.603 5.647h.015c10.916 0 19.765 8.849 19.765 19.765s-8.849 19.765-19.765 19.765-19.765-8.849-19.765-19.765v-.015A47.789 47.789 0 0 0 288 192c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48zm-160 0a47.789 47.789 0 0 0-22.603 5.647h.015c10.916 0 19.765 8.849 19.765 19.765s-8.849 19.765-19.765 19.765-19.765-8.849-19.765-19.765v-.015A47.789 47.789 0 0 0 128 192c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48z"],snowflake:[448,512,[],"f2dc","M444.816 301.639a24.12 24.12 0 0 0 2.661-16.978c-2.725-12.966-15.339-21.245-28.174-18.492l-87.407 25.046L264 256l67.896-35.215 87.407 25.046c12.835 2.753 25.449-5.526 28.174-18.492 2.725-12.966-5.471-25.708-18.305-28.461l-47.477-7.137 53.077-30.956c11.363-6.627 15.257-21.306 8.696-32.785-6.561-11.479-21.091-15.412-32.454-8.785l-53.077 30.956 17.621-45.104c4.057-12.606-2.768-26.146-15.247-30.245-12.478-4.099-25.883 2.797-29.94 15.402l-22.232 88.99-60.38 35.215V144l65.175-63.945c8.778-9.852 7.987-25.027-1.766-33.894-9.753-8.867-24.775-8.068-33.552 1.784l-29.857 37.967V24c0-13.255-10.637-24-23.758-24s-23.758 10.745-23.758 24v61.912l-29.857-37.967c-8.779-9.852-23.799-10.652-33.552-1.784-9.753 8.867-10.543 24.042-1.766 33.894L200.242 144v70.431l-60.38-35.215-22.232-88.99c-4.057-12.605-17.462-19.501-29.94-15.402-12.478 4.099-19.304 17.64-15.247 30.245l17.62 45.104-53.077-30.956c-11.363-6.627-25.893-2.694-32.454 8.785s-2.667 26.157 8.696 32.785l53.077 30.956-47.477 7.137C5.993 201.634-2.203 214.375.523 227.341c2.725 12.965 15.339 21.245 28.174 18.492l87.407-25.046L184 256l-67.896 35.215-87.406-25.045c-12.835-2.753-25.449 5.526-28.174 18.492-2.725 12.967 5.47 25.708 18.305 28.461l47.477 7.137-53.077 30.956C1.866 357.843-2.027 372.521 4.533 384s21.091 15.412 32.454 8.785l53.077-30.956-17.62 45.104a24.157 24.157 0 0 0 2.022 19.428c2.831 4.953 7.416 8.909 13.224 10.816 12.478 4.099 25.883-2.797 29.94-15.402l22.232-88.99 60.38-35.215V368l-65.175 63.945c-8.778 9.852-7.987 25.027 1.766 33.894 9.754 8.868 24.774 8.068 33.552-1.784l29.857-37.967V488c0 13.255 10.637 24 23.758 24s23.758-10.745 23.758-24v-61.912l29.857 37.967A23.59 23.59 0 0 0 295.282 472a23.534 23.534 0 0 0 15.885-6.161c9.753-8.867 10.544-24.042 1.766-33.894L247.758 368v-70.431l60.38 35.215 22.232 88.99c4.057 12.605 17.462 19.501 29.94 15.402 12.479-4.099 19.304-17.64 15.247-30.245l-17.621-45.104 53.077 30.956c11.363 6.627 25.893 2.694 32.454-8.785s2.667-26.157-8.696-32.785l-53.077-30.956 47.477-7.137c6.86-1.469 12.394-5.793 15.645-11.481z"],sort:[320,512,[],"f0dc","M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z"],"sort-alpha-down":[448,512,[],"f15d","M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zm119.075-180.007A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z"],"sort-alpha-up":[448,512,[],"f15e","M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zm301.671 98.621A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z"],"sort-amount-down":[512,512,[],"f160","M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z"],"sort-amount-up":[512,512,[],"f161","M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z"],"sort-down":[320,512,[],"f0dd","M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z"],"sort-numeric-down":[448,512,[],"f162","M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM175.984 368H128V48c0-8.837-7.163-16-16-16H80c-8.837 0-16 7.163-16 16v320H16.019c-14.212 0-21.384 17.244-11.314 27.314l79.981 80.002c6.245 6.245 16.38 6.247 22.627 0l79.984-80.002c10.05-10.05 2.928-27.314-11.313-27.314z"],"sort-numeric-up":[448,512,[],"f163","M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM16.016 144H64v320c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144h47.981c14.212 0 21.384-17.244 11.314-27.314l-79.981-80.002c-6.245-6.245-16.38-6.247-22.627 0L4.702 116.686C-5.347 126.736 1.775 144 16.016 144z"],"sort-up":[320,512,[],"f0de","M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z"],"space-shuttle":[640,512,[],"f197","M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z"],spinner:[512,512,[],"f110","M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"],square:[448,512,[],"f0c8","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],"square-full":[512,512,[],"f45c","M512 512H0V0h512v512z"],star:[576,512,[],"f005","M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"],"star-half":[576,512,[],"f089","M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z"],"step-backward":[448,512,[],"f048","M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z"],"step-forward":[448,512,[],"f051","M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z"],stethoscope:[512,512,[],"f0f1","M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"],"sticky-note":[448,512,[],"f249","M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z"],stop:[448,512,[],"f04d","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],"stop-circle":[512,512,[],"f28d","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"],stopwatch:[448,512,[],"f2f2","M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"],"street-view":[512,512,[],"f21d","M192 64c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zm112 80h-11.36c-22.711 10.443-49.59 10.894-73.28 0H208c-26.51 0-48 21.49-48 48v104c0 13.255 10.745 24 24 24h16v104c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V320h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48zm85.642 189.152a72.503 72.503 0 0 1-29.01 27.009C391.133 365.251 480 385.854 480 416c0 46.304-167.656 64-224 64-70.303 0-224-20.859-224-64 0-30.123 88.361-50.665 119.367-55.839a72.516 72.516 0 0 1-29.01-27.009C74.959 343.395 0 367.599 0 416c0 77.111 178.658 96 256 96 77.249 0 256-18.865 256-96 0-48.403-74.967-72.606-122.358-82.848z"],strikethrough:[512,512,[],"f0cc","M496 288H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h480c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16zm-214.666 16c27.258 12.937 46.524 28.683 46.524 56.243 0 33.108-28.977 53.676-75.621 53.676-32.325 0-76.874-12.08-76.874-44.271V368c0-8.837-7.164-16-16-16H113.75c-8.836 0-16 7.163-16 16v19.204c0 66.845 77.717 101.82 154.487 101.82 88.578 0 162.013-45.438 162.013-134.424 0-19.815-3.618-36.417-10.143-50.6H281.334zm-30.952-96c-32.422-13.505-56.836-28.946-56.836-59.683 0-33.92 30.901-47.406 64.962-47.406 42.647 0 64.962 16.593 64.962 32.985V136c0 8.837 7.164 16 16 16h45.613c8.836 0 16-7.163 16-16v-30.318c0-52.438-71.725-79.875-142.575-79.875-85.203 0-150.726 40.972-150.726 125.646 0 22.71 4.665 41.176 12.777 56.547h129.823z"],subscript:[512,512,[],"f12c","M395.198 416c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 256c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 96H16C7.163 96 0 88.837 0 80V48c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035A15.999 15.999 0 0 1 204.226 32H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 256H272z"],subway:[448,512,[],"f239","M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"],suitcase:[512,512,[],"f0f2","M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352z"],sun:[512,512,[],"f185","M274.835 12.646l25.516 62.393c4.213 10.301 16.671 14.349 26.134 8.492l57.316-35.479c15.49-9.588 34.808 4.447 30.475 22.142l-16.03 65.475c-2.647 10.81 5.053 21.408 16.152 22.231l67.224 4.987c18.167 1.348 25.546 24.057 11.641 35.826L441.81 242.26c-8.495 7.19-8.495 20.289 0 27.479l51.454 43.548c13.906 11.769 6.527 34.478-11.641 35.826l-67.224 4.987c-11.099.823-18.799 11.421-16.152 22.231l16.03 65.475c4.332 17.695-14.986 31.73-30.475 22.142l-57.316-35.479c-9.463-5.858-21.922-1.81-26.134 8.492l-25.516 62.393c-6.896 16.862-30.774 16.862-37.67 0l-25.516-62.393c-4.213-10.301-16.671-14.349-26.134-8.492l-57.317 35.479c-15.49 9.588-34.808-4.447-30.475-22.142l16.03-65.475c2.647-10.81-5.053-21.408-16.152-22.231l-67.224-4.987c-18.167-1.348-25.546-24.057-11.641-35.826L70.19 269.74c8.495-7.19 8.495-20.289 0-27.479l-51.454-43.548c-13.906-11.769-6.527-34.478 11.641-35.826l67.224-4.987c11.099-.823 18.799-11.421 16.152-22.231l-16.03-65.475c-4.332-17.695 14.986-31.73 30.475-22.142l57.317 35.479c9.463 5.858 21.921 1.81 26.134-8.492l25.516-62.393c6.896-16.861 30.774-16.861 37.67 0zM392 256c0-74.991-61.01-136-136-136-74.991 0-136 61.009-136 136s61.009 136 136 136c74.99 0 136-61.009 136-136zm-32 0c0 57.346-46.654 104-104 104s-104-46.654-104-104 46.654-104 104-104 104 46.654 104 104z"],superscript:[512,512,[],"f12b","M395.198 256c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 256H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035a16 16 0 0 1 13.598-7.567H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 416H272z"],sync:[512,512,[],"f021","M440.935 12.574l3.966 82.766C399.416 41.904 331.674 8 256 8 134.813 8 33.933 94.924 12.296 209.824 10.908 217.193 16.604 224 24.103 224h49.084c5.57 0 10.377-3.842 11.676-9.259C103.407 137.408 172.931 80 256 80c60.893 0 114.512 30.856 146.104 77.801l-101.53-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12h-47.411c-6.853 0-12.315 5.729-11.987 12.574zM256 432c-60.895 0-114.517-30.858-146.109-77.805l101.868 4.871c6.845.327 12.573-5.134 12.573-11.986v-47.412c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12V500c0 6.627 5.373 12 12 12h47.385c6.863 0 12.328-5.745 11.985-12.599l-4.129-82.575C112.725 470.166 180.405 504 256 504c121.187 0 222.067-86.924 243.704-201.824 1.388-7.369-4.308-14.176-11.807-14.176h-49.084c-5.57 0-10.377 3.842-11.676 9.259C408.593 374.592 339.069 432 256 432z"],"sync-alt":[512,512,[],"f2f1","M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"],syringe:[512,512,[],"f48e","M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z"],table:[512,512,[],"f0ce","M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z"],"table-tennis":[512,512,[],"f45d","M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z"],tablet:[448,512,[],"f10a","M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"],"tablet-alt":[448,512,[],"f3fa","M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z"],"tachometer-alt":[576,512,[],"f3fd","M75.694 480a48.02 48.02 0 0 1-42.448-25.571C12.023 414.3 0 368.556 0 320 0 160.942 128.942 32 288 32s288 128.942 288 288c0 48.556-12.023 94.3-33.246 134.429A48.018 48.018 0 0 1 500.306 480H75.694zM512 288c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zM288 128c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32s-32 14.327-32 32c0 17.673 14.327 32 32 32zM64 288c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zm65.608-158.392c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zm316.784 0c-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32s32-14.327 32-32c0-17.673-14.327-32-32-32zm-87.078 31.534c-12.627-4.04-26.133 2.92-30.173 15.544l-45.923 143.511C250.108 322.645 224 350.264 224 384c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0-19.773-8.971-37.447-23.061-49.187l45.919-143.498c4.039-12.625-2.92-26.133-15.544-30.173z"],tag:[512,512,[],"f02b","M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"],tags:[640,512,[],"f02c","M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"],tasks:[512,512,[],"f0ae","M208 132h288c8.8 0 16-7.2 16-16V76c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zM64 368c-26.5 0-48.6 21.5-48.6 48s22.1 48 48.6 48 48-21.5 48-48-21.5-48-48-48zm92.5-299l-72.2 72.2-15.6 15.6c-4.7 4.7-12.9 4.7-17.6 0L3.5 109.4c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.3c4.7-4.7 12.3-4.7 17 0l17 16.5c4.6 4.7 4.6 12.3-.1 17zm0 159.6l-72.2 72.2-15.7 15.7c-4.7 4.7-12.9 4.7-17.6 0L3.5 269c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.7c4.7-4.7 12.3-4.7 17 0l17 17c4.6 4.6 4.6 12.2-.1 16.9z"],taxi:[512,512,[],"f1ba","M461.951 243.865l-21.816-87.268A79.885 79.885 0 0 0 362.522 96H352V56c0-13.255-10.745-24-24-24H184c-13.255 0-24 10.745-24 24v40h-10.522a79.885 79.885 0 0 0-77.612 60.597L50.05 243.865C25.515 252.823 8 276.366 8 304v48c0 20.207 9.374 38.214 24 49.943V456c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24v-40h256v40c0 13.255 10.745 24 24 24h48c13.255 0 24-10.745 24-24v-54.057c14.626-11.729 24-29.737 24-49.943v-48c0-27.634-17.515-51.177-42.049-60.135zM149.478 160h213.045a15.975 15.975 0 0 1 15.522 12.12l16.97 67.88h-278.03l16.97-67.881A15.976 15.976 0 0 1 149.478 160zM132 336c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm320 0c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z"],terminal:[640,512,[],"f120","M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"],"text-height":[576,512,[],"f034","M16 32h288c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96h-54.761v320H232c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H88c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm475.308 4.685l79.995 80.001C581.309 126.693 574.297 144 559.99 144H512v224h48c15.639 0 20.635 17.991 11.313 27.314l-79.995 80.001c-6.247 6.247-16.381 6.245-22.626 0l-79.995-80.001C378.691 385.307 385.703 368 400.01 368H448V144h-48c-15.639 0-20.635-17.991-11.313-27.314l79.995-80.001c6.247-6.248 16.381-6.245 22.626 0z"],"text-width":[448,512,[],"f035","M16 32h416c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96H261.743v128H296c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H152c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm427.315 340.682l-80.001-79.995C353.991 283.365 336 288.362 336 304v48H112v-47.99c0-14.307-17.307-21.319-27.314-11.313L4.685 372.692c-6.245 6.245-6.247 16.379 0 22.626l80.001 79.995C94.009 484.635 112 479.638 112 464v-48h224v47.99c0 14.307 17.307 21.319 27.314 11.313l80.001-79.995c6.245-6.245 6.248-16.379 0-22.626z"],th:[512,512,[],"f00a","M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z"],"th-large":[512,512,[],"f009","M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z"],"th-list":[512,512,[],"f00b","M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z"],thermometer:[512,512,[],"f491","M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z"],"thermometer-empty":[256,512,[],"f2cb","M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],"thermometer-full":[256,512,[],"f2c7","M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z"],"thermometer-half":[256,512,[],"f2c9","M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],"thermometer-quarter":[256,512,[],"f2ca","M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],"thermometer-three-quarters":[256,512,[],"f2c8","M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"],"thumbs-down":[512,512,[],"f165","M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z"],"thumbs-up":[512,512,[],"f164","M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z"],thumbtack:[384,512,[],"f08d","M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z"],"ticket-alt":[576,512,[],"f3ff","M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z"],times:[384,512,[],"f00d","M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z"],"times-circle":[512,512,[],"f057","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"],tint:[384,512,[],"f043","M192 512c-98.435 0-178.087-79.652-178.087-178.087 0-111.196 101.194-154.065 148.522-311.825 9.104-30.116 51.099-28.778 59.13 0 47.546 158.486 148.522 200.069 148.522 311.825C370.087 432.348 290.435 512 192 512zm-42.522-171.826c-1.509-5.533-9.447-5.532-10.956 0-9.223 29.425-27.913 37.645-27.913 58.435C110.609 417.13 125.478 432 144 432s33.391-14.87 33.391-33.391c0-20.839-18.673-28.956-27.913-58.435z"],"toggle-off":[576,512,[],"f204","M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z"],"toggle-on":[576,512,[],"f205","M576 256c0 106.039-85.961 192-192 192H192C85.961 448 0 362.039 0 256S85.961 64 192 64h192c106.039 0 192 85.961 192 192zM384 128c-70.741 0-128 57.249-128 128 0 70.741 57.249 128 128 128 70.741 0 128-57.249 128-128 0-70.741-57.249-128-128-128"],trademark:[640,512,[],"f25c","M97.119 163.133H12c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h248.559c6.627 0 12 5.373 12 12v43.133c0 6.627-5.373 12-12 12H175.44V404c0 6.627-5.373 12-12 12h-54.322c-6.627 0-12-5.373-12-12V163.133zM329.825 96h65.425a12 12 0 0 1 11.346 8.093l43.759 127.068c7.161 20.588 16.111 52.812 16.111 52.812h.896s8.95-32.224 16.111-52.812l43.758-127.068A12 12 0 0 1 538.577 96h65.41a12 12 0 0 1 11.961 11.03l24.012 296c.567 6.987-4.951 12.97-11.961 12.97h-54.101a12 12 0 0 1-11.972-11.182l-9.082-132.93c-1.79-24.168 0-53.706 0-53.706h-.896s-10.741 33.566-17.902 53.706l-30.7 84.731a12 12 0 0 1-11.282 7.912h-50.302a12 12 0 0 1-11.282-7.912l-30.7-84.731c-7.161-20.14-17.903-53.706-17.903-53.706h-.895s1.79 29.538 0 53.706l-9.082 132.93c-.428 6.295-5.66 11.182-11.97 11.182H305.4c-7.017 0-12.536-5.994-11.959-12.987l24.425-296A11.999 11.999 0 0 1 329.825 96z"],train:[448,512,[],"f238","M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z"],transgender:[384,512,[],"f224","M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],"transgender-alt":[480,512,[],"f225","M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],trash:[448,512,[],"f1f8","M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm415.2 56.7L394.8 467c-1.6 25.3-22.6 45-47.9 45H101.1c-25.3 0-46.3-19.7-47.9-45L32.8 140.7c-.4-6.9 5.1-12.7 12-12.7h358.5c6.8 0 12.3 5.8 11.9 12.7z"],"trash-alt":[448,512,[],"f2ed","M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm416 56v324c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V140c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12zm-272 68c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208z"],tree:[384,512,[],"f1bb","M377.33 375.429L293.906 288H328c21.017 0 31.872-25.207 17.448-40.479L262.79 160H296c20.878 0 31.851-24.969 17.587-40.331l-104-112.003c-9.485-10.214-25.676-10.229-35.174 0l-104 112.003C56.206 134.969 67.037 160 88 160h33.21l-82.659 87.521C24.121 262.801 34.993 288 56 288h34.094L6.665 375.429C-7.869 390.655 2.925 416 24.025 416H144c0 32.781-11.188 49.26-33.995 67.506C98.225 492.93 104.914 512 120 512h144c15.086 0 21.776-19.069 9.995-28.494-19.768-15.814-33.992-31.665-33.995-67.496V416h119.97c21.05 0 31.929-25.309 17.36-40.571z"],trophy:[576,512,[],"f091","M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z"],truck:[640,512,[],"f0d1","M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"],tty:[512,512,[],"f1e4","M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"],tv:[640,512,[],"f26c","M592 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h245.1v32h-160c-17.7 0-32 14.3-32 32s14.3 32 32 32h384c17.7 0 32-14.3 32-32s-14.3-32-32-32h-160v-32H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h512v288z"],umbrella:[576,512,[],"f0e9","M557.011 267.631c-51.432-45.217-107.572-43.698-158.567 30.731-5.298 7.861-14.906 7.165-19.736 0-2.483-3.624-32.218-60.808-90.708-60.808-45.766 0-70.542 31.378-90.709 60.808-4.829 7.165-14.436 7.861-19.734 0-50.904-74.285-106.613-76.406-158.567-30.731-10.21 8.264-20.912-1.109-18.696-9.481C32.146 134.573 158.516 64.612 288.001 64.612c128.793 0 256.546 69.961 287.706 193.538 2.206 8.322-8.426 17.793-18.696 9.481zM256 261.001V416c0 17.645-14.355 32-32 32s-32-14.355-32-32c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 52.935 43.065 96 96 96s96-43.065 96-96V261.288c-21.836-10.806-45.425-9.737-64-.287zm64-211.007V32c0-17.673-14.327-32-32-32s-32 14.327-32 32v17.987a372.105 372.105 0 0 1 64 .007z"],underline:[448,512,[],"f0cd","M224.264 388.24c-91.669 0-156.603-51.165-156.603-151.392V64H39.37c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h137.39c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.813v172.848c0 53.699 28.314 79.444 76.317 79.444 46.966 0 75.796-25.434 75.796-79.965V64h-28.291c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h136.868c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.291v172.848c0 99.405-64.881 151.392-156.082 151.392zM16 448h416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16z"],undo:[512,512,[],"f0e2","M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"],"undo-alt":[512,512,[],"f2ea","M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z"],"universal-access":[512,512,[],"f29a","M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z"],university:[512,512,[],"f19c","M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z"],unlink:[512,512,[],"f127","M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z"],unlock:[448,512,[],"f09c","M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"],"unlock-alt":[448,512,[],"f13e","M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z"],upload:[512,512,[],"f093","M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"],user:[512,512,[],"f007","M256 0c88.366 0 160 71.634 160 160s-71.634 160-160 160S96 248.366 96 160 167.634 0 256 0zm183.283 333.821l-71.313-17.828c-74.923 53.89-165.738 41.864-223.94 0l-71.313 17.828C29.981 344.505 0 382.903 0 426.955V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48v-37.045c0-44.052-29.981-82.45-72.717-93.134z"],"user-circle":[512,512,[],"f2bd","M8 256C8 119.033 119.033 8 256 8s248 111.033 248 248-111.033 248-248 248S8 392.967 8 256zm72.455 125.868C119.657 436.446 183.673 472 256 472s136.343-35.554 175.545-90.132c-3.141-26.99-22.667-49.648-49.538-56.366l-32.374-8.093C323.565 339.79 290.722 352 256 352s-67.565-12.21-93.634-34.591l-32.374 8.093c-26.87 6.718-46.396 29.376-49.537 56.366zM144 208c0 61.856 50.144 112 112 112s112-50.144 112-112S317.856 96 256 96s-112 50.144-112 112z"],"user-md":[448,512,[],"f0f0","M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm250.4-151.6l-34.4-5.7v55c36.5 7.4 64 39.8 64 78.4v56c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V400c0-29.6-26.9-53-57.6-47.1-22.8 4.4-38.4 25.8-38.4 49v41l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9v-58c0-38.6 27.5-70.9 64-78.4v-47.2c-19.6 8.6-41.2 13.6-64 13.6-29.3 0-56.4-8.5-80-22.3v104.9c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4V269.3l-18.4 3.1c-54 9-93.6 55.7-93.6 110.5V480c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32v-97.1c-.1-54.8-39.7-101.5-93.7-110.5z"],"user-plus":[640,512,[],"f234","M224 32c77.32 0 140 62.68 140 140s-62.68 140-140 140S84 249.32 84 172 146.68 32 224 32zm160.373 292.093l-62.399-15.6c-65.557 47.154-145.021 36.631-195.948 0l-62.399 15.6C26.233 333.442 0 367.04 0 405.585V438c0 23.196 18.804 42 42 42h364c23.196 0 42-18.804 42-42v-32.415c0-38.545-26.233-72.143-63.627-81.492zM628 224.889h-68.889V156c0-6.627-5.373-12-12-12h-38.222c-6.627 0-12 5.373-12 12l-.002 68.887-68.887.002c-6.627 0-12 5.373-12 12v38.222c0 6.627 5.373 12 12 12l68.887.002.002 68.887c0 6.627 5.373 12 12 12h38.222c6.627 0 12-5.373 12-12l.002-68.887 68.887-.002c6.627 0 12-5.373 12-12v-38.222c0-6.627-5.373-12-12-12z"],"user-secret":[448,512,[],"f21b","M388.829 295.324l20.972-55.052c2.992-7.854-2.809-16.272-11.214-16.272H340.39c7.45-16.236 11.61-34.297 11.61-53.333 0-3.631-.16-7.224-.456-10.778C391.083 152.074 416 140.684 416 128c0-13.263-27.231-25.112-69.947-32.937-9.185-32.805-27.178-65.797-40.714-82.85-9.452-11.908-25.873-15.634-39.471-8.834l-27.557 13.779a31.997 31.997 0 0 1-28.622 0l-27.557-13.78c-13.599-6.799-30.02-3.074-39.471 8.834-13.536 17.053-31.529 50.045-40.714 82.85C59.231 102.888 32 114.737 32 128c0 12.684 24.917 24.074 64.456 31.889A129.362 129.362 0 0 0 96 170.667c0 19.037 4.159 37.098 11.608 53.333h-57.41c-8.615 0-14.423 8.808-11.029 16.727l22.906 53.447C25.799 307.882 0 342.925 0 384v80c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-80c0-39.97-24.43-74.231-59.171-88.676zM184 488l-48-192 48 24 24 40-24 128zm80 0l-24-128 24-40 48-24-48 192zm54.778-303.746c-.008.043-4.299 3.231-5.125 5.771-3.861 11.864-7.026 24.572-16.514 33.359-10.071 9.327-47.957 22.405-63.996-25.029-2.837-8.395-15.447-8.398-18.285 0-16.963 50.168-56.019 32.417-63.996 25.029-9.488-8.786-12.653-21.495-16.514-33.359-.826-2.54-5.118-5.728-5.125-5.771-.554-2.925-.981-5.884-1.22-8.85-.309-3.848 10.078-3.658 11.078-3.747 26.303-2.326 52.303-.579 78.023 5.497 2.563.606 11.553.529 13.793 0 25.72-6.076 51.72-7.824 78.023-5.497 1.002.089 11.387-.102 11.078 3.747-.239 2.966-.666 5.925-1.22 8.85z"],"user-times":[640,512,[],"f235","M224 32c77.32 0 140 62.68 140 140s-62.68 140-140 140S84 249.32 84 172 146.68 32 224 32zm160.373 292.093l-62.399-15.6c-65.557 47.154-145.021 36.631-195.948 0l-62.399 15.6C26.233 333.442 0 367.04 0 405.585V438c0 23.196 18.804 42 42 42h364c23.196 0 42-18.804 42-42v-32.415c0-38.545-26.233-72.143-63.627-81.492zM587.897 256l48.596-48.598c4.675-4.675 4.675-12.256 0-16.931l-26.964-26.964c-4.675-4.675-12.256-4.675-16.931 0L544 212.105l-48.598-48.598c-4.675-4.675-12.256-4.675-16.931 0l-26.964 26.964c-4.675 4.675-4.675 12.256 0 16.931L500.103 256l-48.596 48.598c-4.675 4.675-4.675 12.256 0 16.931l26.964 26.964c4.675 4.675 12.256 4.675 16.931 0L544 299.897l48.598 48.596c4.675 4.675 12.256 4.675 16.931 0l26.964-26.964c4.675-4.675 4.675-12.256 0-16.931L587.897 256z"],users:[640,512,[],"f0c0","M320 64c57.99 0 105 47.01 105 105s-47.01 105-105 105-105-47.01-105-105S262.01 64 320 64zm113.463 217.366l-39.982-9.996c-49.168 35.365-108.766 27.473-146.961 0l-39.982 9.996C174.485 289.379 152 318.177 152 351.216V412c0 19.882 16.118 36 36 36h264c19.882 0 36-16.118 36-36v-60.784c0-33.039-22.485-61.837-54.537-69.85zM528 300c38.66 0 70-31.34 70-70s-31.34-70-70-70-70 31.34-70 70 31.34 70 70 70zm-416 0c38.66 0 70-31.34 70-70s-31.34-70-70-70-70 31.34-70 70 31.34 70 70 70zm24 112v-60.784c0-16.551 4.593-32.204 12.703-45.599-29.988 14.72-63.336 8.708-85.69-7.37l-26.655 6.664C14.99 310.252 0 329.452 0 351.477V392c0 13.255 10.745 24 24 24h112.169a52.417 52.417 0 0 1-.169-4zm467.642-107.09l-26.655-6.664c-27.925 20.086-60.89 19.233-85.786 7.218C499.369 318.893 504 334.601 504 351.216V412c0 1.347-.068 2.678-.169 4H616c13.255 0 24-10.745 24-24v-40.523c0-22.025-14.99-41.225-36.358-46.567z"],"utensil-spoon":[512,512,[],"f2e5","M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z"],utensils:[416,512,[],"f2e7","M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z"],venus:[288,512,[],"f221","M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"],"venus-double":[512,512,[],"f226","M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z"],"venus-mars":[576,512,[],"f228","M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],video:[576,512,[],"f03d","M528 64h-12.118a48 48 0 0 0-33.941 14.059L384 176v-64c0-26.51-21.49-48-48-48H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-64l97.941 97.941A48 48 0 0 0 515.882 448H528c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48z"],"volleyball-ball":[495,512,[],"f45f","M223.3 243.4c-.9-37-8.6-72.8-22.7-105.7-90.8 42.4-157.5 122.4-180.3 216.8 13.4 30.8 32.9 58.3 56.9 81.1 22.7-79.2 74.2-147.8 146.1-192.2zM186.4 109c-15-26.4-34.5-50.1-57.4-70.7C38 88.1-15.8 191.2 4 300.5c33.4-83.1 98.4-152 182.4-191.5zM374 274.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5 57.3 59.3 91 138.2 93.5 222.7 32.5 17.7 67.3 29 102.9 33.2zm-124.7 9.5c-31.6 19.3-58.7 43.9-80.2 72.6 82 57.3 184.5 75.1 277.5 47.8 19.7-26.4 34.2-56.8 42.2-89.9-26.6 6.6-53.7 10.4-80.9 10.4-54.6-.1-108.9-14.1-158.6-40.9zM151 383.3c-15.2 26-25.7 54.4-32.1 84.2 37.6 23 81.7 36.5 129.1 36.5 61 0 116.7-22.1 159.9-58.6C295 461.5 204.6 420.6 151 383.3zM331.3 22.7c55.3 70.4 82.5 161.2 74.6 253.6 30.3.2 60.5-4.8 89.7-14.2 0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z"],"volume-down":[384,512,[],"f027","M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zM384 256c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z"],"volume-off":[256,512,[],"f026","M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971z"],"volume-up":[576,512,[],"f028","M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zm182.056-77.876C422.982.92 403.283 5.668 394.061 20.745c-9.221 15.077-4.473 34.774 10.604 43.995C468.967 104.063 512 174.983 512 256c0 73.431-36.077 142.292-96.507 184.206-14.522 10.072-18.129 30.01-8.057 44.532 10.076 14.528 30.016 18.126 44.531 8.057C529.633 438.927 576 350.406 576 256c0-103.244-54.579-194.877-137.944-245.859zM480 256c0-68.547-36.15-129.777-91.957-163.901-15.076-9.22-34.774-4.471-43.994 10.607-9.22 15.078-4.471 34.774 10.607 43.994C393.067 170.188 416 211.048 416 256c0 41.964-20.62 81.319-55.158 105.276-14.521 10.073-18.128 30.01-8.056 44.532 6.216 8.96 16.185 13.765 26.322 13.765a31.862 31.862 0 0 0 18.21-5.709C449.091 377.953 480 318.938 480 256zm-96 0c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z"],warehouse:[640,512,[],"f494","M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"],weight:[512,512,[],"f496","M448 64h-26c16.4 28.3 26 61 26 96 0 105.9-86.1 192-192 192S64 265.9 64 160c0-35 9.6-67.7 26-96H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h384c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64zM256 320c88.4 0 160-71.6 160-160S344.4 0 256 0 96 71.6 96 160s71.6 160 160 160zm-.3-151.9l33.6-78.4c3.5-8.2 12.9-11.9 21-8.4s11.9 12.9 8.4 21L285 180.9c6.7 7.1 10.9 16.6 10.9 27.1 0 22.1-17.9 40-40 40s-40-17.9-40-40c.1-22 17.9-39.8 39.8-39.9z"],wheelchair:[512,512,[],"f193","M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z"],wifi:[640,512,[],"f1eb","M384 416c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm136.659-124.443c6.465-6.465 6.245-17.065-.564-23.167-113.793-101.985-286.526-101.869-400.19 0-6.809 6.102-7.029 16.702-.564 23.167l34.006 34.006c5.927 5.927 15.464 6.32 21.769.796 82.88-72.609 207.074-72.447 289.768 0 6.305 5.524 15.842 5.132 21.769-.796l34.006-34.006zm112.11-113.718c6.385-6.385 6.254-16.816-.35-22.973-175.768-163.86-449.134-163.8-624.837 0-6.604 6.157-6.735 16.589-.35 22.973l33.966 33.966c6.095 6.095 15.891 6.231 22.224.383 144.763-133.668 368.356-133.702 513.156 0 6.333 5.848 16.129 5.712 22.224-.383l33.967-33.966z"],"window-close":[512,512,[],"f410","M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z"],"window-maximize":[512,512,[],"f2d0","M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z"],"window-minimize":[512,512,[],"f2d1","M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z"],"window-restore":[512,512,[],"f2d2","M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z"],"won-sign":[576,512,[],"f159","M564 192c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-48.028l18.572-80.61c1.732-7.518-3.978-14.694-11.693-14.694h-46.107a11.998 11.998 0 0 0-11.736 9.5L450.73 128H340.839l-19.725-85.987a12 12 0 0 0-11.696-9.317H265.43a12 12 0 0 0-11.687 9.277L233.696 128H124.975L107.5 42.299a12 12 0 0 0-11.758-9.602H53.628c-7.686 0-13.39 7.124-11.709 14.624L60 128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h62.342l7.171 32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h83.856l40.927 182.624A12 12 0 0 0 148.492 480h56.767c5.583 0 10.428-3.85 11.689-9.288L259.335 288h55.086l42.386 182.712A12 12 0 0 0 368.496 480h56.826a12 12 0 0 0 11.694-9.306L479.108 288H564c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-70.146l7.373-32H564zm-425.976 0h80.757l-7.457 32h-66.776l-6.524-32zm45.796 150.029c-6.194 25.831-6.758 47.25-7.321 47.25h-1.126s-1.689-22.05-6.758-47.25L157.599 288h38.812l-12.591 54.029zM274.182 224l1.996-8.602c1.856-7.962 3.457-15.968 4.803-23.398h11.794c1.347 7.43 2.947 15.436 4.803 23.398l1.996 8.602h-25.392zm130.959 118.029c-5.068 25.2-6.758 47.25-6.758 47.25h-1.126c-.563 0-1.126-21.42-7.321-47.25L377.542 288h39.107l-11.508 54.029zM430.281 224h-67.42l-7.34-32h81.577l-6.817 32z"],wrench:[512,512,[],"f0ad","M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z"],"yen-sign":[384,512,[],"f157","M351.208 32h-65.277a12 12 0 0 0-10.778 6.724l-55.39 113.163c-14.513 34.704-27.133 71.932-27.133 71.932h-1.262s-12.62-37.228-27.133-71.932l-55.39-113.163A11.997 11.997 0 0 0 98.068 32H32.792c-9.057 0-14.85 9.65-10.59 17.643L102.322 200H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h88.162L152 293.228V320H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h108v92c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-92h108c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12H232v-26.772L251.838 256H340c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12h-58.322l80.12-150.357C366.058 41.65 360.266 32 351.208 32z"]};!function(c){try{c()}catch(c){if(!e)throw c}}(function(){!function c(l,h){var v=Object.keys(h).reduce(function(c,l){var v=h[l];return v.icon?c[v.iconName]=v.icon:c[l]=v,c},{});"function"==typeof s.hooks.addPack?s.hooks.addPack(l,v):s.styles[l]=r({},s.styles[l]||{},v),"fas"===l&&c("fa",h)}("fas",f)})}(),function(){"use strict";var c=function(){},l={},h={},v=null,z={mark:c,measure:c};try{"undefined"!=typeof window&&(l=window),"undefined"!=typeof document&&(h=document),"undefined"!=typeof MutationObserver&&(v=MutationObserver),"undefined"!=typeof performance&&(z=performance)}catch(c){}var e=(l.navigator||{}).userAgent,a=void 0===e?"":e,m=l,t=h,s=v,r=z,f=!!m.document,M=!!t.documentElement&&!!t.head&&"function"==typeof t.addEventListener&&"function"==typeof t.createElement,i=~a.indexOf("MSIE")||~a.indexOf("Trident/"),n="___FONT_AWESOME___",H=16,o="svg-inline--fa",V="data-fa-i2svg",C="data-fa-pseudo-element",L="fontawesome-i2svg",u=function(){try{return!0}catch(c){return!1}}(),d=[1,2,3,4,5,6,7,8,9,10],p=d.concat([11,12,13,14,15,16,17,18,19,20]),b=["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"],g=["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(d.map(function(c){return c+"x"})).concat(p.map(function(c){return"w-"+c})),y=function(c,l){if(!(c instanceof l))throw new TypeError("Cannot call a class as a function")},w=function(){function c(c,l){for(var h=0;h<l.length;h++){var v=l[h];v.enumerable=v.enumerable||!1,v.configurable=!0,"value"in v&&(v.writable=!0),Object.defineProperty(c,v.key,v)}}return function(l,h,v){return h&&c(l.prototype,h),v&&c(l,v),l}}(),k=Object.assign||function(c){for(var l=1;l<arguments.length;l++){var h=arguments[l];for(var v in h)Object.prototype.hasOwnProperty.call(h,v)&&(c[v]=h[v])}return c},S=function(c){if(Array.isArray(c)){for(var l=0,h=Array(c.length);l<c.length;l++)h[l]=c[l];return h}return Array.from(c)},x=m.FontAwesomeConfig||{},A=Object.keys(x),q=k({familyPrefix:"fa",replacementClass:o,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0},x);q.autoReplaceSvg||(q.observeMutations=!1);var O=k({},q);function j(c){var l=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).asNewDefault,h=void 0!==l&&l,v=Object.keys(O),z=h?function(c){return~v.indexOf(c)&&!~A.indexOf(c)}:function(c){return~v.indexOf(c)};Object.keys(c).forEach(function(l){z(l)&&(O[l]=c[l])})}m.FontAwesomeConfig=O;var N=m||{};N[n]||(N[n]={}),N[n].styles||(N[n].styles={}),N[n].hooks||(N[n].hooks={}),N[n].shims||(N[n].shims=[]);var E=N[n],P=[],_=!1;M&&((_=(t.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(t.readyState))||t.addEventListener("DOMContentLoaded",function c(){t.removeEventListener("DOMContentLoaded",c),_=1,P.map(function(c){return c()})}));var T=function(c){M&&(_?setTimeout(c,0):P.push(c))},F=H,I={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function R(c){if(c&&M){var l=t.createElement("style");l.setAttribute("type","text/css"),l.innerHTML=c;for(var h=t.head.childNodes,v=null,z=h.length-1;z>-1;z--){var e=h[z],a=(e.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(a)>-1&&(v=e)}return t.head.insertBefore(l,v),c}}var W=0;function B(){return++W}function D(c){for(var l=[],h=(c||[]).length>>>0;h--;)l[h]=c[h];return l}function X(c){return c.classList?D(c.classList):(c.getAttribute("class")||"").split(" ").filter(function(c){return c})}function Y(c,l){var h,v=l.split("-"),z=v[0],e=v.slice(1).join("-");return z!==c||""===e||(h=e,~g.indexOf(h))?null:e}function U(c){return(""+c).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function K(c){return Object.keys(c||{}).reduce(function(l,h){return l+(h+": ")+c[h]+";"},"")}function G(c){return c.size!==I.size||c.x!==I.x||c.y!==I.y||c.rotate!==I.rotate||c.flipX||c.flipY}function J(c){var l=c.transform,h=c.containerWidth,v=c.iconWidth;return{outer:{transform:"translate("+h/2+" 256)"},inner:{transform:"translate("+32*l.x+", "+32*l.y+") "+" "+("scale("+l.size/16*(l.flipX?-1:1)+", "+l.size/16*(l.flipY?-1:1)+") ")+" "+("rotate("+l.rotate+" 0 0)")},path:{transform:"translate("+v/2*-1+" -256)"}}}var Q={x:0,y:0,width:"100%",height:"100%"},Z=function(c){var l=c.children,h=c.attributes,v=c.main,z=c.mask,e=c.transform,a=v.width,m=v.icon,t=z.width,s=z.icon,r=J({transform:e,containerWidth:t,iconWidth:a}),f={tag:"rect",attributes:k({},Q,{fill:"white"})},M={tag:"g",attributes:k({},r.inner),children:[{tag:"path",attributes:k({},m.attributes,r.path,{fill:"black"})}]},i={tag:"g",attributes:k({},r.outer),children:[M]},n="mask-"+B(),H="clip-"+B(),o={tag:"defs",children:[{tag:"clipPath",attributes:{id:H},children:[s]},{tag:"mask",attributes:k({},Q,{id:n,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[f,i]}]};return l.push(o,{tag:"rect",attributes:k({fill:"currentColor","clip-path":"url(#"+H+")",mask:"url(#"+n+")"},Q)}),{children:l,attributes:h}},$=function(c){var l=c.children,h=c.attributes,v=c.main,z=c.transform,e=K(c.styles);if(e.length>0&&(h.style=e),G(z)){var a=J({transform:z,containerWidth:v.width,iconWidth:v.width});l.push({tag:"g",attributes:k({},a.outer),children:[{tag:"g",attributes:k({},a.inner),children:[{tag:v.icon.tag,children:v.icon.children,attributes:k({},v.icon.attributes,a.path)}]}]})}else l.push(v.icon);return{children:l,attributes:h}},cc=function(c){var l=c.children,h=c.main,v=c.mask,z=c.attributes,e=c.styles,a=c.transform;if(G(a)&&h.found&&!v.found){var m=h.width/h.height/2,t=.5;z.style=K(k({},e,{"transform-origin":m+a.x/16+"em "+(t+a.y/16)+"em"}))}return[{tag:"svg",attributes:z,children:l}]},lc=function(c){var l=c.prefix,h=c.iconName,v=c.children,z=c.attributes,e=c.symbol,a=!0===e?l+"-"+O.familyPrefix+"-"+h:e;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:k({},z,{id:a}),children:v}]}]};function hc(c){var l=c.icons,h=l.main,v=l.mask,z=c.prefix,e=c.iconName,a=c.transform,m=c.symbol,t=c.title,s=c.extra,r=c.watchable,f=void 0!==r&&r,M=v.found?v:h,i=M.width,n=M.height,H="fa-w-"+Math.ceil(i/n*16),o=[O.replacementClass,e?O.familyPrefix+"-"+e:"",H].concat(s.classes).join(" "),C={children:[],attributes:k({},s.attributes,{"data-prefix":z,"data-icon":e,class:o,role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 "+i+" "+n})};f&&(C.attributes[V]=""),t&&C.children.push({tag:"title",attributes:{id:C.attributes["aria-labelledby"]||"title-"+B()},children:[t]});var L=k({},C,{prefix:z,iconName:e,main:h,mask:v,transform:a,symbol:m,styles:s.styles}),u=v.found&&h.found?Z(L):$(L),d=u.children,p=u.attributes;return L.children=d,L.attributes=p,m?lc(L):cc(L)}function vc(c){var l=c.content,h=c.width,v=c.height,z=c.transform,e=c.title,a=c.extra,m=c.watchable,t=void 0!==m&&m,s=k({},a.attributes,e?{title:e}:{},{class:a.classes.join(" ")});t&&(s[V]="");var r,f,M,n,o,C,L,u,d,p=k({},a.styles);G(z)&&(p.transform=(f=(r={transform:z,startCentered:!0,width:h,height:v}).transform,M=r.width,n=void 0===M?H:M,o=r.height,C=void 0===o?H:o,L=r.startCentered,d="",d+=(u=void 0!==L&&L)&&i?"translate("+(f.x/F-n/2)+"em, "+(f.y/F-C/2)+"em) ":u?"translate(calc(-50% + "+f.x/F+"em), calc(-50% + "+f.y/F+"em)) ":"translate("+f.x/F+"em, "+f.y/F+"em) ",d+="scale("+f.size/F*(f.flipX?-1:1)+", "+f.size/F*(f.flipY?-1:1)+") ",d+="rotate("+f.rotate+"deg) "),p["-webkit-transform"]=p.transform);var b=K(p);b.length>0&&(s.style=b);var g=[];return g.push({tag:"span",attributes:s,children:[l]}),e&&g.push({tag:"span",attributes:{class:"sr-only"},children:[e]}),g}var zc=function(){},ec=O.measurePerformance&&r&&r.mark&&r.measure?r:{mark:zc,measure:zc},ac='FA "5.0.7"',mc=function(c){ec.mark(ac+" "+c+" ends"),ec.measure(ac+" "+c,ac+" "+c+" begins",ac+" "+c+" ends")},tc={begin:function(c){return ec.mark(ac+" "+c+" begins"),function(){return mc(c)}},end:mc},sc=function(c,l,h,v){var z,e,a,m,t,s=Object.keys(c),r=s.length,f=void 0!==v?(m=l,t=v,function(c,l,h,v){return m.call(t,c,l,h,v)}):l;for(void 0===h?(z=1,a=c[s[0]]):(z=0,a=h);z<r;z++)a=f(a,c[e=s[z]],e,c);return a},rc=E.styles,fc=E.shims,Mc={},ic={},nc={},Hc=function(){var c=function(c){return sc(rc,function(l,h,v){return l[v]=sc(h,c,{}),l},{})};Mc=c(function(c,l,h){return c[l[3]]=h,c}),ic=c(function(c,l,h){var v=l[2];return c[h]=h,v.forEach(function(l){c[l]=h}),c});var l="far"in rc;nc=sc(fc,function(c,h){var v=h[0],z=h[1],e=h[2];return"far"!==z||l||(z="fas"),c[v]={prefix:z,iconName:e},c},{})};Hc();var oc=E.styles,Vc=function(){return{prefix:null,iconName:null,rest:[]}};function Cc(c){return c.reduce(function(c,l){var h=Y(O.familyPrefix,l);if(oc[l])c.prefix=l;else if(h){var v="fa"===c.prefix?nc[h]||{prefix:null,iconName:null}:{};c.iconName=v.iconName||h,c.prefix=v.prefix||c.prefix}else l!==O.replacementClass&&0!==l.indexOf("fa-w-")&&c.rest.push(l);return c},Vc())}function Lc(c,l,h){if(c&&c[l]&&c[l][h])return{prefix:l,iconName:h,icon:c[l][h]}}function uc(c){var l,h=c.tag,v=c.attributes,z=void 0===v?{}:v,e=c.children,a=void 0===e?[]:e;return"string"==typeof c?U(c):"<"+h+" "+(l=z,Object.keys(l||{}).reduce(function(c,h){return c+(h+'="')+U(l[h])+'" '},"").trim())+">"+a.map(uc).join("")+"</"+h+">"}var dc=function(){};function pc(c){return"string"==typeof(c.getAttribute?c.getAttribute(V):null)}var bc={replace:function(c){var l=c[0],h=c[1].map(function(c){return uc(c)}).join("\n");if(l.parentNode&&l.outerHTML)l.outerHTML=h+(O.keepOriginalSource&&"svg"!==l.tagName.toLowerCase()?"\x3c!-- "+l.outerHTML+" --\x3e":"");else if(l.parentNode){var v=document.createElement("span");l.parentNode.replaceChild(v,l),v.outerHTML=h}},nest:function(c){var l=c[0],h=c[1];if(~X(l).indexOf(O.replacementClass))return bc.replace(c);var v=new RegExp(O.familyPrefix+"-.*");delete h[0].attributes.style;var z=h[0].attributes.class.split(" ").reduce(function(c,l){return l===O.replacementClass||l.match(v)?c.toSvg.push(l):c.toNode.push(l),c},{toNode:[],toSvg:[]});h[0].attributes.class=z.toSvg.join(" ");var e=h.map(function(c){return uc(c)}).join("\n");l.setAttribute("class",z.toNode.join(" ")),l.setAttribute(V,""),l.innerHTML=e}};function gc(c,l){var h="function"==typeof l?l:dc;0===c.length?h():(m.requestAnimationFrame||function(c){return c()})(function(){var l=!0===O.autoReplaceSvg?bc.replace:bc[O.autoReplaceSvg]||bc.replace,v=tc.begin("mutate");c.map(l),v(),h()})}var yc=!1;var wc=null;var kc=function(c){var l=c.getAttribute("style"),h=[];return l&&(h=l.split(";").reduce(function(c,l){var h=l.split(":"),v=h[0],z=h.slice(1);return v&&z.length>0&&(c[v]=z.join(":").trim()),c},{})),h};var Sc=function(c){var l,h,v,z,e=c.getAttribute("data-prefix"),a=c.getAttribute("data-icon"),m=void 0!==c.innerText?c.innerText.trim():"",t=Cc(X(c));return e&&a&&(t.prefix=e,t.iconName=a),t.prefix&&m.length>1?t.iconName=(v=t.prefix,z=c.innerText,ic[v][z]):t.prefix&&1===m.length&&(t.iconName=(l=t.prefix,h=function(c){for(var l="",h=0;h<c.length;h++)l+=("000"+c.charCodeAt(h).toString(16)).slice(-4);return l}(c.innerText),Mc[l][h])),t},xc=function(c){var l={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return c?c.toLowerCase().split(" ").reduce(function(c,l){var h=l.toLowerCase().split("-"),v=h[0],z=h.slice(1).join("-");if(v&&"h"===z)return c.flipX=!0,c;if(v&&"v"===z)return c.flipY=!0,c;if(z=parseFloat(z),isNaN(z))return c;switch(v){case"grow":c.size=c.size+z;break;case"shrink":c.size=c.size-z;break;case"left":c.x=c.x-z;break;case"right":c.x=c.x+z;break;case"up":c.y=c.y-z;break;case"down":c.y=c.y+z;break;case"rotate":c.rotate=c.rotate+z}return c},l):l},Ac=function(c){return xc(c.getAttribute("data-fa-transform"))},qc=function(c){var l=c.getAttribute("data-fa-symbol");return null!==l&&(""===l||l)},Oc=function(c){var l=D(c.attributes).reduce(function(c,l){return"class"!==c.name&&"style"!==c.name&&(c[l.name]=l.value),c},{}),h=c.getAttribute("title");return O.autoA11y&&(h?l["aria-labelledby"]=O.replacementClass+"-title-"+B():l["aria-hidden"]="true"),l},jc=function(c){var l=c.getAttribute("data-fa-mask");return l?Cc(l.split(" ").map(function(c){return c.trim()})):Vc()};function Nc(c){this.name="MissingIcon",this.message=c||"Icon unavailable",this.stack=(new Error).stack}(Nc.prototype=Object.create(Error.prototype)).constructor=Nc;var Ec={fill:"currentColor"},Pc={attributeType:"XML",repeatCount:"indefinite",dur:"2s"},_c={tag:"path",attributes:k({},Ec,{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})},Tc=k({},Pc,{attributeName:"opacity"}),Fc={tag:"g",children:[_c,{tag:"circle",attributes:k({},Ec,{cx:"256",cy:"364",r:"28"}),children:[{tag:"animate",attributes:k({},Pc,{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:k({},Tc,{values:"1;0;1;1;0;1;"})}]},{tag:"path",attributes:k({},Ec,{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:[{tag:"animate",attributes:k({},Tc,{values:"1;0;0;0;0;1;"})}]},{tag:"path",attributes:k({},Ec,{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:k({},Tc,{values:"0;0;1;1;0;0;"})}]}]},Ic=E.styles,Rc="fa-layers-text",Wc=/Font Awesome 5 (Solid|Regular|Light|Brands)/,Bc={Solid:"fas",Regular:"far",Light:"fal",Brands:"fab"};function Dc(c,l){var h={found:!1,width:512,height:512,icon:Fc};if(c&&l&&Ic[l]&&Ic[l][c]){var v=Ic[l][c];h={found:!0,width:v[0],height:v[1],icon:{tag:"path",attributes:{fill:"currentColor",d:v.slice(4)[0]}}}}else if(c&&l&&!O.showMissingIcons)throw new Nc("Icon is missing for prefix "+l+" with icon name "+c);return h}function Xc(c){var l,h,v,z,e,a,m,t,s,r,f,M,n,H,o,V,C,L,u,d=(h=Sc(l=c),v=h.iconName,z=h.prefix,e=h.rest,a=kc(l),m=Ac(l),t=qc(l),s=Oc(l),r=jc(l),{iconName:v,title:l.getAttribute("title"),prefix:z,transform:m,symbol:t,mask:r,extra:{classes:e,styles:a,attributes:s}});return~d.extra.classes.indexOf(Rc)?function(c,l){var h=l.title,v=l.transform,z=l.extra,e=null,a=null;if(i){var m=parseInt(getComputedStyle(c).fontSize,10),t=c.getBoundingClientRect();e=t.width/m,a=t.height/m}return O.autoA11y&&!h&&(z.attributes["aria-hidden"]="true"),[c,vc({content:c.innerHTML,width:e,height:a,transform:v,title:h,extra:z,watchable:!0})]}(c,d):(f=c,n=(M=d).iconName,H=M.title,o=M.prefix,V=M.transform,C=M.symbol,L=M.mask,u=M.extra,[f,hc({icons:{main:Dc(n,o),mask:Dc(L.iconName,L.prefix)},prefix:o,iconName:n,transform:V,symbol:C,mask:L,title:H,extra:u,watchable:!0})])}function Yc(c){"function"==typeof c.remove?c.remove():c&&c.parentNode&&c.parentNode.removeChild(c)}function Uc(c){if(M){var l=tc.begin("searchPseudoElements");yc=!0,function(){D(c.querySelectorAll("*")).forEach(function(c){[":before",":after"].forEach(function(l){var h=m.getComputedStyle(c,l),v=h.getPropertyValue("font-family").match(Wc),z=D(c.children).filter(function(c){return c.getAttribute(C)===l})[0];if(z&&(z.nextSibling&&z.nextSibling.textContent.indexOf(C)>-1&&Yc(z.nextSibling),Yc(z),z=null),v&&!z){var e=h.getPropertyValue("content"),a=t.createElement("i");a.setAttribute("class",""+Bc[v[1]]),a.setAttribute(C,l),a.innerText=3===e.length?e.substr(1,1):e,":before"===l?c.insertBefore(a,c.firstChild):c.appendChild(a)}})})}(),yc=!1,l()}}function Kc(c){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(M){var h=t.documentElement.classList,v=function(c){return h.add(L+"-"+c)},z=function(c){return h.remove(L+"-"+c)},e=Object.keys(Ic),a=["."+Rc+":not(["+V+"])"].concat(e.map(function(c){return"."+c+":not(["+V+"])"})).join(", ");if(0!==a.length){var m=D(c.querySelectorAll(a));if(m.length>0){v("pending"),z("complete");var s=tc.begin("onTree"),r=m.reduce(function(c,l){try{var h=Xc(l);h&&c.push(h)}catch(c){u||c instanceof Nc&&console.error(c)}return c},[]);s(),gc(r,function(){v("active"),v("complete"),z("pending"),"function"==typeof l&&l()})}}}}function Gc(c){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,h=Xc(c);h&&gc([h],l)}var Jc=function(){var c=o,l=O.familyPrefix,h=O.replacementClass,v="svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}";if("fa"!==l||h!==c){var z=new RegExp("\\.fa\\-","g"),e=new RegExp("\\."+c,"g");v=v.replace(z,"."+l+"-").replace(e,"."+h)}return v};var Qc=function(){function c(){y(this,c),this.definitions={}}return w(c,[{key:"add",value:function(){for(var c=this,l=arguments.length,h=Array(l),v=0;v<l;v++)h[v]=arguments[v];var z=h.reduce(this._pullDefinitions,{});Object.keys(z).forEach(function(l){c.definitions[l]=k({},c.definitions[l]||{},z[l]),function c(l,h){var v=Object.keys(h).reduce(function(c,l){var v=h[l];return v.icon?c[v.iconName]=v.icon:c[l]=v,c},{});"function"==typeof E.hooks.addPack?E.hooks.addPack(l,v):E.styles[l]=k({},E.styles[l]||{},v),"fas"===l&&c("fa",h)}(l,z[l])})}},{key:"reset",value:function(){this.definitions={}}},{key:"_pullDefinitions",value:function(c,l){var h=l.prefix&&l.iconName&&l.icon?{0:l}:l;return Object.keys(h).map(function(l){var v=h[l],z=v.prefix,e=v.iconName,a=v.icon;c[z]||(c[z]={}),c[z][e]=a}),c}}]),c}();function Zc(c){return{found:!0,width:c[0],height:c[1],icon:{tag:"path",attributes:{fill:"currentColor",d:c.slice(4)[0]}}}}var $c=!1;function cl(){O.autoAddCss&&($c||R(Jc()),$c=!0)}function ll(c,l){return Object.defineProperty(c,"abstract",{get:l}),Object.defineProperty(c,"html",{get:function(){return c.abstract.map(function(c){return uc(c)})}}),Object.defineProperty(c,"node",{get:function(){if(M){var l=t.createElement("div");return l.innerHTML=c.html,l.children}}}),c}function hl(c){var l=c.prefix,h=void 0===l?"fa":l,v=c.iconName;if(v)return Lc(zl.definitions,h,v)||Lc(E.styles,h,v)}var vl,zl=new Qc,el=(vl=function(c){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},h=l.transform,v=void 0===h?I:h,z=l.symbol,e=void 0!==z&&z,a=l.mask,m=void 0===a?null:a,t=l.title,s=void 0===t?null:t,r=l.classes,f=void 0===r?[]:r,M=l.attributes,i=void 0===M?{}:M,n=l.styles,H=void 0===n?{}:n;if(c){var o=c.prefix,V=c.iconName,C=c.icon;return ll(k({type:"icon"},c),function(){return cl(),O.autoA11y&&(s?i["aria-labelledby"]=O.replacementClass+"-title-"+B():i["aria-hidden"]="true"),hc({icons:{main:Zc(C),mask:m?Zc(m.icon):{found:!1,width:null,height:null,icon:{}}},prefix:o,iconName:V,transform:k({},I,v),symbol:e,title:s,extra:{attributes:i,styles:H,classes:f}})})}},function(c){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},h=(c||{}).icon?c:hl(c||{}),v=l.mask;return v&&(v=(v||{}).icon?v:hl(v||{})),vl(h,k({},l,{mask:v}))}),al={noAuto:function(){var c;j({autoReplaceSvg:c=!1,observeMutations:c}),wc&&wc.disconnect()},dom:{i2svg:function(){var c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(M){cl();var l=c.node,h=void 0===l?t:l,v=c.callback,z=void 0===v?function(){}:v;O.searchPseudoElements&&Uc(h),Kc(h,z)}},css:Jc,insertCss:function(){R(Jc())}},library:zl,parse:{transform:function(c){return xc(c)}},findIconDefinition:hl,icon:el,text:function(c){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},h=l.transform,v=void 0===h?I:h,z=l.title,e=void 0===z?null:z,a=l.classes,m=void 0===a?[]:a,t=l.attributes,s=void 0===t?{}:t,r=l.styles,f=void 0===r?{}:r;return ll({type:"text",content:c},function(){return cl(),vc({content:c,transform:k({},I,v),title:e,extra:{attributes:s,styles:f,classes:[O.familyPrefix+"-layers-text"].concat(S(m))}})})},layer:function(c){return ll({type:"layer"},function(){cl();var l=[];return c(function(c){Array.isArray(c)?c.map(function(c){l=l.concat(c.abstract)}):l=l.concat(c.abstract)}),[{tag:"span",attributes:{class:O.familyPrefix+"-layers"},children:l}]})}},ml=function(){M&&O.autoReplaceSvg&&al.dom.i2svg({node:t})};Object.defineProperty(al,"config",{get:function(){return O},set:function(c){j(c)}}),function(c){try{c()}catch(c){if(!u)throw c}}(function(){f&&(m.FontAwesome||(m.FontAwesome=al),T(function(){Object.keys(E.styles).length>0&&ml(),O.observeMutations&&"function"==typeof MutationObserver&&function(c){if(s){var l=c.treeCallback,h=c.nodeCallback,v=c.pseudoElementsCallback;wc=new s(function(c){yc||D(c).forEach(function(c){if("childList"===c.type&&c.addedNodes.length>0&&!pc(c.addedNodes[0])&&(O.searchPseudoElements&&v(c.target),l(c.target)),"attributes"===c.type&&c.target.parentNode&&O.searchPseudoElements&&v(c.target.parentNode),"attributes"===c.type&&pc(c.target)&&~b.indexOf(c.attributeName))if("class"===c.attributeName){var z=Cc(X(c.target)),e=z.prefix,a=z.iconName;e&&c.target.setAttribute("data-prefix",e),a&&c.target.setAttribute("data-icon",a)}else h(c.target)})}),M&&wc.observe(t.getElementsByTagName("body")[0],{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}({treeCallback:Kc,nodeCallback:Gc,pseudoElementsCallback:Uc})})),E.hooks=k({},E.hooks,{addPack:function(c,l){E.styles[c]=k({},E.styles[c]||{},l),Hc(),ml()},addShims:function(c){var l;(l=E.shims).push.apply(l,S(c)),Hc(),ml()}})})}();
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/fontawesome.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery.cookie.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery.cookie.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery.cookie.js (revision 7)
@@ -0,0 +1,117 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD
+ define(['jquery'], factory);
+ } else if (typeof exports === 'object') {
+ // CommonJS
+ factory(require('jquery'));
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+}(function ($) {
+
+ var pluses = /\+/g;
+
+ function encode(s) {
+ return config.raw ? s : encodeURIComponent(s);
+ }
+
+ function decode(s) {
+ return config.raw ? s : decodeURIComponent(s);
+ }
+
+ function stringifyCookieValue(value) {
+ return encode(config.json ? JSON.stringify(value) : String(value));
+ }
+
+ function parseCookieValue(s) {
+ if (s.indexOf('"') === 0) {
+ // This is a quoted cookie as according to RFC2068, unescape...
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+ }
+
+ try {
+ // Replace server-side written pluses with spaces.
+ // If we can't decode the cookie, ignore it, it's unusable.
+ // If we can't parse the cookie, ignore it, it's unusable.
+ s = decodeURIComponent(s.replace(pluses, ' '));
+ return config.json ? JSON.parse(s) : s;
+ } catch(e) {}
+ }
+
+ function read(s, converter) {
+ var value = config.raw ? s : parseCookieValue(s);
+ return $.isFunction(converter) ? converter(value) : value;
+ }
+
+ var config = $.cookie = function (key, value, options) {
+
+ // Write
+
+ if (value !== undefined && !$.isFunction(value)) {
+ options = $.extend({}, config.defaults, options);
+
+ if (typeof options.expires === 'number') {
+ var days = options.expires, t = options.expires = new Date();
+ t.setTime(+t + days * 864e+5);
+ }
+
+ return (document.cookie = [
+ encode(key), '=', stringifyCookieValue(value),
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+ options.path ? '; path=' + options.path : '',
+ options.domain ? '; domain=' + options.domain : '',
+ options.secure ? '; secure' : ''
+ ].join(''));
+ }
+
+ // Read
+
+ var result = key ? undefined : {};
+
+ // To prevent the for loop in the first place assign an empty array
+ // in case there are no cookies at all. Also prevents odd result when
+ // calling $.cookie().
+ var cookies = document.cookie ? document.cookie.split('; ') : [];
+
+ for (var i = 0, l = cookies.length; i < l; i++) {
+ var parts = cookies[i].split('=');
+ var name = decode(parts.shift());
+ var cookie = parts.join('=');
+
+ if (key && key === name) {
+ // If second argument (value) is a function it's a converter...
+ result = read(cookie, value);
+ break;
+ }
+
+ // Prevent storing a cookie that we couldn't decode.
+ if (!key && (cookie = read(cookie)) !== undefined) {
+ result[name] = cookie;
+ }
+ }
+
+ return result;
+ };
+
+ config.defaults = {};
+
+ $.removeCookie = function (key, options) {
+ if ($.cookie(key) === undefined) {
+ return false;
+ }
+
+ // Must not alter options, thus extending a fresh object...
+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));
+ return !$.cookie(key);
+ };
+
+}));
Property changes on: base3.10/src/main/webapp/js/com/jquery.cookie.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery.blockUI.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery.blockUI.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery.blockUI.js (revision 7)
@@ -0,0 +1,621 @@
+/*!
+ * jQuery blockUI plugin
+ * Version 2.66.0-2013.10.09
+ * Requires jQuery v1.7 or later
+ *
+ * Examples at: http://malsup.com/jquery/block/
+ * Copyright (c) 2007-2013 M. Alsup
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Thanks to Amir-Hossein Sobhi for some excellent contributions!
+ */
+
+;(function() {
+/*jshint eqeqeq:false curly:false latedef:false */
+"use strict";
+
+ function setup($) {
+ $.fn._fadeIn = $.fn.fadeIn;
+
+ var noOp = $.noop || function() {};
+
+ // this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
+ // confusing userAgent strings on Vista)
+ var msie = /MSIE/.test(navigator.userAgent);
+ var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
+ var mode = document.documentMode || 0;
+ var setExpr = $.isFunction( document.createElement('div').style.setExpression );
+
+ // global $ methods for blocking/unblocking the entire page
+ $.blockUI = function(opts) { install(window, opts); };
+ $.unblockUI = function(opts) { remove(window, opts); };
+
+ // convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
+ $.growlUI = function(title, message, timeout, onClose) {
+ var $m = $('<div class="growlUI"></div>');
+ if (title) $m.append('<h1>'+title+'</h1>');
+ if (message) $m.append('<h2>'+message+'</h2>');
+ if (timeout === undefined) timeout = 3000;
+
+ // Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
+ var callBlock = function(opts) {
+ opts = opts || {};
+
+ $.blockUI({
+ message: $m,
+ fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,
+ fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
+ timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
+ centerY: false,
+ showOverlay: false,
+ onUnblock: onClose,
+ css: $.blockUI.defaults.growlCSS
+ });
+ };
+
+ callBlock();
+ var nonmousedOpacity = $m.css('opacity');
+ $m.mouseover(function() {
+ callBlock({
+ fadeIn: 0,
+ timeout: 30000
+ });
+
+ var displayBlock = $('.blockMsg');
+ displayBlock.stop(); // cancel fadeout if it has started
+ displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
+ }).mouseout(function() {
+ $('.blockMsg').fadeOut(1000);
+ });
+ // End konapun additions
+ };
+
+ // plugin method for blocking element content
+ $.fn.block = function(opts) {
+ if ( this[0] === window ) {
+ $.blockUI( opts );
+ return this;
+ }
+ var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
+ this.each(function() {
+ var $el = $(this);
+ if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
+ return;
+ $el.unblock({ fadeOut: 0 });
+ });
+
+ return this.each(function() {
+ if ($.css(this,'position') == 'static') {
+ this.style.position = 'relative';
+ $(this).data('blockUI.static', true);
+ }
+ this.style.zoom = 1; // force 'hasLayout' in ie
+ install(this, opts);
+ });
+ };
+
+ // plugin method for unblocking element content
+ $.fn.unblock = function(opts) {
+ if ( this[0] === window ) {
+ $.unblockUI( opts );
+ return this;
+ }
+ return this.each(function() {
+ remove(this, opts);
+ });
+ };
+
+ $.blockUI.version = 2.66; // 2nd generation blocking at no extra cost!
+
+ // override these in your code to change the default behavior and style
+ $.blockUI.defaults = {
+ // message displayed when blocking (use null for no message)
+ //message: '<h1>Please wait...</h1>',
+// message: '<i class="fa fa-refresh fa-spin" style="font-size:600%"></i>',
+ message: '<img src="' + CONTEXT_PATH + '/images/custom/loading.svg" style="width:80px; height:auto;"/>',
+
+ title: null, // title string; only used when theme == true
+ draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)
+
+ theme: false, // set to true to use with jQuery UI themes
+
+ // styles for the message when blocking; if you wish to disable
+ // these and use an external stylesheet then do this in your code:
+ // $.blockUI.defaults.css = {};
+ css: {
+ padding: 0,
+ margin: 0,
+ width: '30%',
+ top: '40%',
+ left: '35%',
+ textAlign: 'center',
+ color: '#000',
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ border : '0px solid #a00',
+ cursor: 'wait'
+ },
+
+ // minimal style set used when themes are used
+ themedCSS: {
+ width: '30%',
+ top: '40%',
+ left: '35%'
+ },
+
+ // styles for the overlay
+ overlayCSS: {
+ backgroundColor: '#000',
+ opacity: 0.6,
+ cursor: 'wait'
+ },
+
+ // style to replace wait cursor before unblocking to correct issue
+ // of lingering wait cursor
+ cursorReset: 'default',
+
+ // styles applied when using $.growlUI
+ growlCSS: {
+ width: '350px',
+ top: '10px',
+ left: '',
+ right: '10px',
+ border: 'none',
+ padding: '5px',
+ opacity: 0.6,
+ cursor: 'default',
+ color: '#fff',
+ backgroundColor: '#000',
+ '-webkit-border-radius':'10px',
+ '-moz-border-radius': '10px',
+ 'border-radius': '10px'
+ },
+
+ // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
+ // (hat tip to Jorge H. N. de Vasconcelos)
+ /*jshint scripturl:true */
+ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
+
+ // force usage of iframe in non-IE browsers (handy for blocking applets)
+ forceIframe: false,
+
+ // z-index for the blocking overlay
+ baseZ: 99999,
+
+ // set these to true to have the message automatically centered
+ centerX: true, // <-- only effects element blocking (page block controlled via css above)
+ centerY: true,
+
+ // allow body element to be stetched in ie6; this makes blocking look better
+ // on "short" pages. disable if you wish to prevent changes to the body height
+ allowBodyStretch: true,
+
+ // enable if you want key and mouse events to be disabled for content that is blocked
+ bindEvents: true,
+
+ // be default blockUI will supress tab navigation from leaving blocking content
+ // (if bindEvents is true)
+ constrainTabKey: true,
+
+ // fadeIn time in millis; set to 0 to disable fadeIn on block
+ fadeIn: 200,
+
+ // fadeOut time in millis; set to 0 to disable fadeOut on unblock
+ fadeOut: 400,
+
+ // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
+ timeout: 0,
+
+ // disable if you don't want to show the overlay
+ showOverlay: true,
+
+ // if true, focus will be placed in the first available input field when
+ // page blocking
+ focusInput: true,
+
+ // elements that can receive focus
+ focusableElements: ':input:enabled:visible',
+
+ // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
+ // no longer needed in 2012
+ // applyPlatformOpacityRules: true,
+
+ // callback method invoked when fadeIn has completed and blocking message is visible
+ onBlock: null,
+
+ // callback method invoked when unblocking has completed; the callback is
+ // passed the element that has been unblocked (which is the window object for page
+ // blocks) and the options that were passed to the unblock call:
+ // onUnblock(element, options)
+ onUnblock: null,
+
+ // callback method invoked when the overlay area is clicked.
+ // setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
+ onOverlayClick: null,
+
+ // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
+ quirksmodeOffsetHack: 4,
+
+ // class name of the message block
+ blockMsgClass: 'blockMsg',
+
+ // if it is already blocked, then ignore it (don't unblock and reblock)
+ ignoreIfBlocked: false
+ };
+
+ // private data and functions follow...
+
+ var pageBlock = null;
+ var pageBlockEls = [];
+
+ function install(el, opts) {
+ var css, themedCSS;
+ var full = (el == window);
+ var msg = (opts && opts.message !== undefined ? opts.message : undefined);
+ opts = $.extend({}, $.blockUI.defaults, opts || {});
+
+ if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
+ return;
+
+ opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
+ css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
+ if (opts.onOverlayClick)
+ opts.overlayCSS.cursor = 'pointer';
+
+ themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
+ msg = msg === undefined ? opts.message : msg;
+
+ // remove the current block (if there is one)
+ if (full && pageBlock)
+ remove(window, {fadeOut:0});
+
+ // if an existing element is being used as the blocking content then we capture
+ // its current place in the DOM (and current display style) so we can restore
+ // it when we unblock
+ if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
+ var node = msg.jquery ? msg[0] : msg;
+ var data = {};
+ $(el).data('blockUI.history', data);
+ data.el = node;
+ data.parent = node.parentNode;
+ data.display = node.style.display;
+ data.position = node.style.position;
+ if (data.parent)
+ data.parent.removeChild(node);
+ }
+
+ $(el).data('blockUI.onUnblock', opts.onUnblock);
+ var z = opts.baseZ;
+
+ // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
+ // layer1 is the iframe layer which is used to supress bleed through of underlying content
+ // layer2 is the overlay layer which has opacity and a wait cursor (by default)
+ // layer3 is the message content that is displayed while blocking
+ var lyr1, lyr2, lyr3, s;
+ if (msie || opts.forceIframe)
+ lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
+ else
+ lyr1 = $('<div class="blockUI" style="display:none"></div>');
+
+ if (opts.theme)
+ lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
+ else
+ lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
+
+ if (opts.theme && full) {
+ s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
+ if ( opts.title ) {
+ s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || ' ')+'</div>';
+ }
+ s += '<div class="ui-widget-content ui-dialog-content"></div>';
+ s += '</div>';
+ }
+ else if (opts.theme) {
+ s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
+ if ( opts.title ) {
+ s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || ' ')+'</div>';
+ }
+ s += '<div class="ui-widget-content ui-dialog-content"></div>';
+ s += '</div>';
+ }
+ else if (full) {
+ s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
+ }
+ else {
+ s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
+ }
+ lyr3 = $(s);
+
+ // if we have a message, style it
+ if (msg) {
+ if (opts.theme) {
+ lyr3.css(themedCSS);
+ lyr3.addClass('ui-widget-content');
+ }
+ else
+ lyr3.css(css);
+ }
+
+ // style the overlay
+ if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
+ lyr2.css(opts.overlayCSS);
+ lyr2.css('position', full ? 'fixed' : 'absolute');
+
+ // make iframe layer transparent in IE
+ if (msie || opts.forceIframe)
+ lyr1.css('opacity',0.0);
+
+ //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
+ var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
+ $.each(layers, function() {
+ this.appendTo($par);
+ });
+
+ if (opts.theme && opts.draggable && $.fn.draggable) {
+ lyr3.draggable({
+ handle: '.ui-dialog-titlebar',
+ cancel: 'li'
+ });
+ }
+
+ // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
+ var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
+ if (ie6 || expr) {
+ // give body 100% height
+ if (full && opts.allowBodyStretch && $.support.boxModel)
+ $('html,body').css('height','100%');
+
+ // fix ie6 issue when blocked element has a border width
+ if ((ie6 || !$.support.boxModel) && !full) {
+ var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
+ var fixT = t ? '(0 - '+t+')' : 0;
+ var fixL = l ? '(0 - '+l+')' : 0;
+ }
+
+ // simulate fixed position
+ $.each(layers, function(i,o) {
+ var s = o[0].style;
+ s.position = 'absolute';
+ if (i < 2) {
+ if (full)
+ s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
+ else
+ s.setExpression('height','this.parentNode.offsetHeight + "px"');
+ if (full)
+ s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
+ else
+ s.setExpression('width','this.parentNode.offsetWidth + "px"');
+ if (fixL) s.setExpression('left', fixL);
+ if (fixT) s.setExpression('top', fixT);
+ }
+ else if (opts.centerY) {
+ if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
+ s.marginTop = 0;
+ }
+ else if (!opts.centerY && full) {
+ var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
+ var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
+ s.setExpression('top',expression);
+ }
+ });
+ }
+
+ // show the message
+ if (msg) {
+ if (opts.theme)
+ lyr3.find('.ui-widget-content').append(msg);
+ else
+ lyr3.append(msg);
+ if (msg.jquery || msg.nodeType)
+ $(msg).show();
+ }
+
+ if ((msie || opts.forceIframe) && opts.showOverlay)
+ lyr1.show(); // opacity is zero
+ if (opts.fadeIn) {
+ var cb = opts.onBlock ? opts.onBlock : noOp;
+ var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
+ var cb2 = msg ? cb : noOp;
+ if (opts.showOverlay)
+ lyr2._fadeIn(opts.fadeIn, cb1);
+ if (msg)
+ lyr3._fadeIn(opts.fadeIn, cb2);
+ }
+ else {
+ if (opts.showOverlay)
+ lyr2.show();
+ if (msg)
+ lyr3.show();
+ if (opts.onBlock)
+ opts.onBlock();
+ }
+
+ // bind key and mouse events
+ bind(1, el, opts);
+
+ if (full) {
+ pageBlock = lyr3[0];
+ pageBlockEls = $(opts.focusableElements,pageBlock);
+ if (opts.focusInput)
+ setTimeout(focus, 20);
+ }
+ else
+ center(lyr3[0], opts.centerX, opts.centerY);
+
+ if (opts.timeout) {
+ // auto-unblock
+ var to = setTimeout(function() {
+ if (full)
+ $.unblockUI(opts);
+ else
+ $(el).unblock(opts);
+ }, opts.timeout);
+ $(el).data('blockUI.timeout', to);
+ }
+ }
+
+ // remove the block
+ function remove(el, opts) {
+ var count;
+ var full = (el == window);
+ var $el = $(el);
+ var data = $el.data('blockUI.history');
+ var to = $el.data('blockUI.timeout');
+ if (to) {
+ clearTimeout(to);
+ $el.removeData('blockUI.timeout');
+ }
+ opts = $.extend({}, $.blockUI.defaults, opts || {});
+ bind(0, el, opts); // unbind events
+
+ if (opts.onUnblock === null) {
+ opts.onUnblock = $el.data('blockUI.onUnblock');
+ $el.removeData('blockUI.onUnblock');
+ }
+
+ var els;
+ if (full) // crazy selector to handle odd field errors in ie6/7
+ els = $('body').children().filter('.blockUI').add('body > .blockUI');
+ else
+ els = $el.find('>.blockUI');
+
+ // fix cursor issue
+ if ( opts.cursorReset ) {
+ if ( els.length > 1 )
+ els[1].style.cursor = opts.cursorReset;
+ if ( els.length > 2 )
+ els[2].style.cursor = opts.cursorReset;
+ }
+
+ if (full)
+ pageBlock = pageBlockEls = null;
+
+ if (opts.fadeOut) {
+ count = els.length;
+ els.stop().fadeOut(opts.fadeOut, function() {
+ if ( --count === 0)
+ reset(els,data,opts,el);
+ });
+ }
+ else
+ reset(els, data, opts, el);
+ }
+
+ // move blocking element back into the DOM where it started
+ function reset(els,data,opts,el) {
+ var $el = $(el);
+ if ( $el.data('blockUI.isBlocked') )
+ return;
+
+ els.each(function(i,o) {
+ // remove via DOM calls so we don't lose event handlers
+ if (this.parentNode)
+ this.parentNode.removeChild(this);
+ });
+
+ if (data && data.el) {
+ data.el.style.display = data.display;
+ data.el.style.position = data.position;
+ if (data.parent)
+ data.parent.appendChild(data.el);
+ $el.removeData('blockUI.history');
+ }
+
+ if ($el.data('blockUI.static')) {
+ $el.css('position', 'static'); // #22
+ }
+
+ if (typeof opts.onUnblock == 'function')
+ opts.onUnblock(el,opts);
+
+ // fix issue in Safari 6 where block artifacts remain until reflow
+ var body = $(document.body), w = body.width(), cssW = body[0].style.width;
+ body.width(w-1).width(w);
+ body[0].style.width = cssW;
+ }
+
+ // bind/unbind the handler
+ function bind(b, el, opts) {
+ var full = el == window, $el = $(el);
+
+ // don't bother unbinding if there is nothing to unbind
+ if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
+ return;
+
+ $el.data('blockUI.isBlocked', b);
+
+ // don't bind events when overlay is not in use or if bindEvents is false
+ if (!full || !opts.bindEvents || (b && !opts.showOverlay))
+ return;
+
+ // bind anchors and inputs for mouse and key events
+ var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
+ if (b)
+ $(document).bind(events, opts, handler);
+ else
+ $(document).unbind(events, handler);
+
+ // former impl...
+ // var $e = $('a,:input');
+ // b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
+ }
+
+ // event handler to suppress keyboard/mouse events when blocking
+ function handler(e) {
+ // allow tab navigation (conditionally)
+ if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
+ if (pageBlock && e.data.constrainTabKey) {
+ var els = pageBlockEls;
+ var fwd = !e.shiftKey && e.target === els[els.length-1];
+ var back = e.shiftKey && e.target === els[0];
+ if (fwd || back) {
+ setTimeout(function(){focus(back);},10);
+ return false;
+ }
+ }
+ }
+ var opts = e.data;
+ var target = $(e.target);
+ if (target.hasClass('blockOverlay') && opts.onOverlayClick)
+ opts.onOverlayClick(e);
+
+ // allow events within the message content
+ if (target.parents('div.' + opts.blockMsgClass).length > 0)
+ return true;
+
+ // allow events for content that is not being blocked
+ return target.parents().children().filter('div.blockUI').length === 0;
+ }
+
+ function focus(back) {
+ if (!pageBlockEls)
+ return;
+ var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
+ if (e)
+ e.focus();
+ }
+
+ function center(el, x, y) {
+ var p = el.parentNode, s = el.style;
+ var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
+ var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
+ if (x) s.left = l > 0 ? (l+'px') : '0';
+ if (y) s.top = t > 0 ? (t+'px') : '0';
+ }
+
+ function sz(el, p) {
+ return parseInt($.css(el,p),10)||0;
+ }
+
+ }
+
+
+ /*global define:true */
+ if (typeof define === 'function' && define.amd && define.amd.jQuery) {
+ define(['jquery'], setup);
+ } else {
+ setup(jQuery);
+ }
+
+})();
Property changes on: base3.10/src/main/webapp/js/com/jquery.blockUI.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/html5shiv.js
===================================================================
--- base3.10/src/main/webapp/js/com/html5shiv.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/html5shiv.js (revision 7)
@@ -0,0 +1,326 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+;(function(window, document) {
+/*jshint evil:true */
+ /** version */
+ var version = '3.7.3';
+
+ /** Preset options */
+ var options = window.html5 || {};
+
+ /** Used to skip problem elements */
+ var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+ /** Not all elements can be cloned in IE **/
+ var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+ /** Detect whether the browser supports default html5 styles */
+ var supportsHtml5Styles;
+
+ /** Name of the expando, to work with multiple documents or to re-shiv one document */
+ var expando = '_html5shiv';
+
+ /** The id for the the documents expando */
+ var expanID = 0;
+
+ /** Cached data for each document */
+ var expandoData = {};
+
+ /** Detect whether the browser supports unknown elements */
+ var supportsUnknownElements;
+
+ (function() {
+ try {
+ var a = document.createElement('a');
+ a.innerHTML = '<xyz></xyz>';
+ //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
+ supportsHtml5Styles = ('hidden' in a);
+
+ supportsUnknownElements = a.childNodes.length == 1 || (function() {
+ // assign a false positive if unable to shiv
+ (document.createElement)('a');
+ var frag = document.createDocumentFragment();
+ return (
+ typeof frag.cloneNode == 'undefined' ||
+ typeof frag.createDocumentFragment == 'undefined' ||
+ typeof frag.createElement == 'undefined'
+ );
+ }());
+ } catch(e) {
+ // assign a false positive if detection fails => unable to shiv
+ supportsHtml5Styles = true;
+ supportsUnknownElements = true;
+ }
+
+ }());
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a style sheet with the given CSS text and adds it to the document.
+ * @private
+ * @param {Document} ownerDocument The document.
+ * @param {String} cssText The CSS text.
+ * @returns {StyleSheet} The style element.
+ */
+ function addStyleSheet(ownerDocument, cssText) {
+ var p = ownerDocument.createElement('p'),
+ parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+ p.innerHTML = 'x<style>' + cssText + '</style>';
+ return parent.insertBefore(p.lastChild, parent.firstChild);
+ }
+
+ /**
+ * Returns the value of `html5.elements` as an array.
+ * @private
+ * @returns {Array} An array of shived element node names.
+ */
+ function getElements() {
+ var elements = html5.elements;
+ return typeof elements == 'string' ? elements.split(' ') : elements;
+ }
+
+ /**
+ * Extends the built-in list of html5 elements
+ * @memberOf html5
+ * @param {String|Array} newElements whitespace separated list or array of new element names to shiv
+ * @param {Document} ownerDocument The context document.
+ */
+ function addElements(newElements, ownerDocument) {
+ var elements = html5.elements;
+ if(typeof elements != 'string'){
+ elements = elements.join(' ');
+ }
+ if(typeof newElements != 'string'){
+ newElements = newElements.join(' ');
+ }
+ html5.elements = elements +' '+ newElements;
+ shivDocument(ownerDocument);
+ }
+
+ /**
+ * Returns the data associated to the given document
+ * @private
+ * @param {Document} ownerDocument The document.
+ * @returns {Object} An object of data.
+ */
+ function getExpandoData(ownerDocument) {
+ var data = expandoData[ownerDocument[expando]];
+ if (!data) {
+ data = {};
+ expanID++;
+ ownerDocument[expando] = expanID;
+ expandoData[expanID] = data;
+ }
+ return data;
+ }
+
+ /**
+ * returns a shived element for the given nodeName and document
+ * @memberOf html5
+ * @param {String} nodeName name of the element
+ * @param {Document|DocumentFragment} ownerDocument The context document.
+ * @returns {Object} The shived element.
+ */
+ function createElement(nodeName, ownerDocument, data){
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ if(supportsUnknownElements){
+ return ownerDocument.createElement(nodeName);
+ }
+ if (!data) {
+ data = getExpandoData(ownerDocument);
+ }
+ var node;
+
+ if (data.cache[nodeName]) {
+ node = data.cache[nodeName].cloneNode();
+ } else if (saveClones.test(nodeName)) {
+ node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+ } else {
+ node = data.createElem(nodeName);
+ }
+
+ // Avoid adding some elements to fragments in IE < 9 because
+ // * Attributes like `name` or `type` cannot be set/changed once an element
+ // is inserted into a document/fragment
+ // * Link elements with `src` attributes that are inaccessible, as with
+ // a 403 response, will cause the tab/window to crash
+ // * Script elements appended to fragments will execute when their `src`
+ // or `text` property is set
+ return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+ }
+
+ /**
+ * returns a shived DocumentFragment for the given document
+ * @memberOf html5
+ * @param {Document} ownerDocument The context document.
+ * @returns {Object} The shived DocumentFragment.
+ */
+ function createDocumentFragment(ownerDocument, data){
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ if(supportsUnknownElements){
+ return ownerDocument.createDocumentFragment();
+ }
+ data = data || getExpandoData(ownerDocument);
+ var clone = data.frag.cloneNode(),
+ i = 0,
+ elems = getElements(),
+ l = elems.length;
+ for(;i<l;i++){
+ clone.createElement(elems[i]);
+ }
+ return clone;
+ }
+
+ /**
+ * Shivs the `createElement` and `createDocumentFragment` methods of the document.
+ * @private
+ * @param {Document|DocumentFragment} ownerDocument The document.
+ * @param {Object} data of the document.
+ */
+ function shivMethods(ownerDocument, data) {
+ if (!data.cache) {
+ data.cache = {};
+ data.createElem = ownerDocument.createElement;
+ data.createFrag = ownerDocument.createDocumentFragment;
+ data.frag = data.createFrag();
+ }
+
+
+ ownerDocument.createElement = function(nodeName) {
+ //abort shiv
+ if (!html5.shivMethods) {
+ return data.createElem(nodeName);
+ }
+ return createElement(nodeName, ownerDocument, data);
+ };
+
+ ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+ 'var n=f.cloneNode(),c=n.createElement;' +
+ 'h.shivMethods&&(' +
+ // unroll the `createElement` calls
+ getElements().join().replace(/[\w\-:]+/g, function(nodeName) {
+ data.createElem(nodeName);
+ data.frag.createElement(nodeName);
+ return 'c("' + nodeName + '")';
+ }) +
+ ');return n}'
+ )(html5, data.frag);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Shivs the given document.
+ * @memberOf html5
+ * @param {Document} ownerDocument The document to shiv.
+ * @returns {Document} The shived document.
+ */
+ function shivDocument(ownerDocument) {
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ var data = getExpandoData(ownerDocument);
+
+ if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+ data.hasCSS = !!addStyleSheet(ownerDocument,
+ // corrects block display not defined in IE6/7/8/9
+ 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+ // adds styling not present in IE6/7/8/9
+ 'mark{background:#FF0;color:#000}' +
+ // hides non-rendered elements
+ 'template{display:none}'
+ );
+ }
+ if (!supportsUnknownElements) {
+ shivMethods(ownerDocument, data);
+ }
+ return ownerDocument;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The `html5` object is exposed so that more elements can be shived and
+ * existing shiving can be detected on iframes.
+ * @type Object
+ * @example
+ *
+ * // options can be changed before the script is included
+ * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
+ */
+ var html5 = {
+
+ /**
+ * An array or space separated string of node names of the elements to shiv.
+ * @memberOf html5
+ * @type Array|String
+ */
+ 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
+
+ /**
+ * current version of html5shiv
+ */
+ 'version': version,
+
+ /**
+ * A flag to indicate that the HTML5 style sheet should be inserted.
+ * @memberOf html5
+ * @type Boolean
+ */
+ 'shivCSS': (options.shivCSS !== false),
+
+ /**
+ * Is equal to true if a browser supports creating unknown/HTML5 elements
+ * @memberOf html5
+ * @type boolean
+ */
+ 'supportsUnknownElements': supportsUnknownElements,
+
+ /**
+ * A flag to indicate that the document's `createElement` and `createDocumentFragment`
+ * methods should be overwritten.
+ * @memberOf html5
+ * @type Boolean
+ */
+ 'shivMethods': (options.shivMethods !== false),
+
+ /**
+ * A string to describe the type of `html5` object ("default" or "default print").
+ * @memberOf html5
+ * @type String
+ */
+ 'type': 'default',
+
+ // shivs the document according to the specified `html5` object options
+ 'shivDocument': shivDocument,
+
+ //creates a shived element
+ createElement: createElement,
+
+ //creates a shived documentFragment
+ createDocumentFragment: createDocumentFragment,
+
+ //extends list of elements
+ addElements: addElements
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ // expose html5
+ window.html5 = html5;
+
+ // shiv the document
+ shivDocument(document);
+
+ if(typeof module == 'object' && module.exports){
+ module.exports = html5;
+ }
+
+}(typeof window !== "undefined" ? window : this, document));
Property changes on: base3.10/src/main/webapp/js/com/html5shiv.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/examples.js
===================================================================
--- base3.10/src/main/webapp/js/com/examples.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/examples.js (revision 7)
@@ -0,0 +1,15 @@
+$(document).ready(function(){
+ $("#demosMenu").change(function(){
+ window.location.href = $(this).find("option:selected").attr("id") + '.html';
+ });
+
+ $(".gnbbtn").click(function(){
+ $(this).toggleClass("on");
+ $(".sitemap").toggleClass("on");
+ });
+
+ $(".closebtn").click(function(){
+ $(".explain").addClass("hide");
+ });
+});
+
Property changes on: base3.10/src/main/webapp/js/com/examples.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/designJS.js
===================================================================
--- base3.10/src/main/webapp/js/com/designJS.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/designJS.js (revision 7)
@@ -0,0 +1,1149 @@
+(function() {
+ /**함수**/
+ var board = {
+ 'survey' : function() {
+ //설문조사 결과 bar 채우기
+ $(".bar").each(function(){
+ var bar_width = $(this).parent(".per_bar").prev(".item_text").children(".per_no").children("em").text();
+ $(this).css({ width: bar_width + '%'});
+ });
+ },
+ 'calendar' : function(){
+ $(".schedule_wrap").each(function(){
+ var calendarH = $(this).height();
+ var dayH = $(".calendar.month .day_wrap li").outerHeight() / .6;
+ if (calendarH > dayH){
+ $(this).parent("li").addClass("long");
+ $(this).after("<button type='button' class='clickmore'>더보기</button>");
+ }
+ });
+ //댓글더보기 클릭시 내용 펼쳐짐
+ $(".clickmore").click(function(){
+ $(this).hide().parent("li").removeClass("long");
+ })
+
+ },
+ 'marketH' : function(){
+
+ var picmaskH = $(".pic_mask").height();
+ if (picmaskH < 500){
+ $(".pic_mask").removeClass("long");
+ $(".pic_mask").next("button").hide();
+ }
+ else {
+ $(".pic_mask").addClass("long");
+ $(".pic_mask").next("button").show();
+ }
+
+ //댓글더보기 클릭시 내용 펼쳐짐
+ $(".clickmore").click(function(){
+ $(this).text("간단히 보기");
+ $(this).toggleClass("more");
+ $(".pic_mask").removeClass("long");
+ });
+
+ $(window).resize(function(){
+
+ });
+ },
+ 'marketImg' : function(){
+// $(".pic_mask").find("img").attr("alt", "제품 상세 설명 이미지");
+ },
+ 'overX' : function(){
+ //반응형 설정
+ var overLi = $(".scatg ul li");
+ var overTotal = 0;
+ overLi.each(function(){
+ overTotal = overTotal += Number($(this).outerWidth() + 10);
+ });
+
+ $(".scatg ul").css({ width : overTotal })
+
+ $(window).resize(function(){
+ var overLi = $(".scatg ul li");
+ var overTotal = 0;
+ overLi.each(function(){
+ overTotal = overTotal += Number($(this).outerWidth() + 10);
+ });
+
+ $(".scatg ul").css({ width : overTotal })
+ });
+ },
+ 'design' : function(){
+ $(".btn_group .fr").prev(".pagination").addClass("onpage");
+
+ if ( $(".btn_group div").hasClass("fl") ){
+ $(this).parent(".btn_group").removeClass("goList");
+ }
+
+ //$("button:contains('목록')").addClass("goList").closest(".btn_group").addClass("goList");
+ $("button:contains('주소찾기')").addClass("btnAddress");
+
+ $(".modal").attr("tabindex", "1");
+
+ //must * 추가
+ $(".must .board_label, .must .tit, em.must").append("<b class='mustText'>*</b>");
+
+ //캘린더 표기 앞글자 추가
+ $(".calendar_control ul li p").each(function(){
+ var calText = $(this).text();
+ let calem = calText.charAt(0);
+ $(this).prepend("<em>" + calem + "</em>");
+ });
+
+ //대체텍스트 입력 방법 toggle
+ $(".openSample").attr("title", "이미지 대체텍스트 등록방법보기");
+ $(".openSample").on('click', function(){
+ $(this).toggleClass("on");
+ $(".imgUpsample").slideToggle();
+ });
+
+ //게시판에 img alt값 없을떄 제목(해당 게시물 h2) 넣기
+ //$(".fr-view").find("img").each(function(){
+ // var imgAlt = $(this).attr("alt");
+ // var h2title = $(".board_header h2").text();
+ // if (imgAlt == null) {
+ // $(this).attr("alt", h2title);
+ // }
+ //});
+
+ //이미지 alt추가
+ $(".imgUpsample").find("li").each(function(){
+ var imgsample = $(this).find("p").text();
+ $(this).find("img").attr("alt", imgsample);
+ })
+
+ }
+ }
+
+ var skip = {
+ 'skipPage' : function() {
+ //웹접근성을 위한 본문 바로가기
+ //본문 바로가기
+ $('.skip a').on('focus', function(){
+ $(this).stop().animate({"top":0, "opacity":1});
+ });
+ $('.skip a').on('click', function(){
+ $(this).stop().animate({"top":"-30px", "opacity":0});
+ });
+ $('.skip a').on('focusout', function(){
+ $(this).stop().animate({"top":"-30px", "opacity":0});
+ });
+ }
+ }
+
+ var gnb = {
+ 'show' : function() {
+ $(".gnb").on("mouseenter focusin", function(){
+ $("body").addClass("gnbOn");
+ }).on("mouseleave focusout", function(){
+ $("body").removeClass("gnbOn");
+ $(".submenu_wrap").css("opacity", "0");
+ })
+
+ //gnb mousrover 시 submanu 열림
+ $(".gnb li.depth1").on("mouseenter focusin", function(){
+ $(".submenu_wrap").css("opacity", "0").removeClass("active");
+ $(".gnb li.depth1").removeClass("on");
+ $(this).addClass("on");
+ $(this).find(".submenu_wrap").css("opacity", "1")
+ })
+
+ },
+ 'hide' : function() {
+ //header mouseleave 시 gnb 닫힘
+ $(".header").on("mouseleave ", function(){
+ $("body").removeClass("gnbOn");
+ $(".gnb li.depth1").removeClass("on");
+ $(".submenu_wrap").removeClass("active");
+ });
+
+ },
+ 'gnbTabKey' : function() {
+ //웹접근성을 위한 gnb tab 키 적용
+ $(".gnb li.depth1").last().find(".depth2 li").last().focusout(function(){
+ $(".submenu_wrap").removeClass("active");
+ $("body").removeClass("gnbOn");
+ });
+
+
+ },
+ 'btnMypage' : function() {
+ //마이페이지 서브메뉴 펼쳐짐
+ $(".mnb li.gnb_mypage").on("mouseenter focusin", function(){
+ $(".mnb_sub").addClass("active");
+ }).on("mouseleave focusout", function(){
+ $(".mnb_sub").removeClass("active");
+ });
+ },
+ 'breadcrumb' : function(){
+
+ //현재위치표시
+ $(".btn_location .now").on({
+ click : function(){
+ if ($(this).next(".location").css('display') == 'none') {
+ $('.location').slideUp();
+ $('.btn_location .now').removeClass('on');
+ $(this).toggleClass("on");
+ $(this).next(".location").slideToggle();
+ } else {
+ $('.location').slideUp();
+ $(this).removeClass('on');
+ }
+ }
+ });
+
+ $(".location li:last-child").on({
+ focusout : function(){
+ $('.location').slideUp();
+ $(".now").removeClass('on');
+ }
+ });
+
+ if ( $(window).width() < 701){
+ //반응형 설정
+ var locationLi = $(".breadcrumb .location li");
+ var locationTotal = 0;
+ locationLi.each(function(){
+ locationTotal = locationTotal += Number($(this).outerWidth() + 10);
+ });
+ $(".location").css({ width : locationTotal })
+
+ }
+ else {
+ $(".location").css({ width: "100%" });
+ }
+
+ $(window).resize(function(){
+
+ if ( $(window).width() < 701){
+
+ //반응형 설정
+ var locationLi = $(".breadcrumb .location li");
+ var locationTotal = 0;
+ locationLi.each(function(){
+ locationTotal = locationTotal += Number($(this).outerWidth() + 10);
+ });
+ $(".location").css({ width : locationTotal })
+
+ }
+ else {
+ $(".location").css({ width: "100%" });
+ }
+ });
+ },
+ 'mypageGnb' : function() {
+ var mypageMenu = $(".mypage_lnb");
+ var mypagesubMenu = mypageMenu.find("li.active").html();
+ //mypage
+ $(".mpage").find(".sub_title").before("<div class='mypage_submenu overX'></div>");
+ $(".mypage_submenu").html(mypagesubMenu);
+ $(".mysub").parent("li").addClass("have");
+ $(".mypage_submenu .mysub").parent(".mypage_submenu").addClass("have");
+
+ if ( $(window).width() < 1200){
+ $(".mypage_submenu").before(mypageMenu);
+ }
+ else {
+ $(".my_content_wrap").before(mypageMenu);
+ }
+
+ $(window).resize(function(){
+ if ( $(window).width() < 1200){
+ $(".mypage_submenu").before(mypageMenu);
+ }
+ else {
+ $(".my_content_wrap").before(mypageMenu);
+ }
+ });
+
+ if ( $(window).width() < 701){
+ var mymainLi = $(".mypage_lnb > ul > li");
+ var mymaintotalWidth = 0;
+ mymainLi.each(function(){
+ mymaintotalWidth = mymaintotalWidth += Number($(this).outerWidth() + 5);
+ })
+ $(".mypage_lnb ul").css({ width : mymaintotalWidth });
+
+ var mysubLi = $(".mypage_submenu > ul > li");
+ var mysubtotalWidth = 0;
+ mysubLi.each(function(){
+ mysubtotalWidth = mysubtotalWidth += Number($(this).outerWidth() + 15);
+ })
+ $(".mypage_submenu ul").css({ width : mysubtotalWidth });
+
+ }
+ else {
+ $(".mypage_lnb ul").css({ width: "100%" });
+ }
+
+ $(window).resize(function(){
+
+ if ( $(window).width() < 701){
+ var mymainLi = $(".mypage_lnb > ul > li");
+ var mymaintotalWidth = 0;
+ mymainLi.each(function(){
+ mymaintotalWidth = mymaintotalWidth += Number($(this).outerWidth() + 5);
+ })
+ $(".mypage_lnb ul").css({ width : mymaintotalWidth });
+
+ var mysubLi = $(".mypage_submenu > ul > li");
+ var mysubtotalWidth = 0;
+ mysubLi.each(function(){
+ mysubtotalWidth = mysubtotalWidth += Number($(this).outerWidth() + 15);
+ })
+ $(".mypage_submenu ul").css({ width : mysubtotalWidth });
+
+ }
+ else {
+ $(".mypage_lnb ul").css({ width: "100%" });
+ }
+ });
+ },
+ 'gnbMobile' : function(){
+ var depth2Menu = $(".gnb ul").find("li.active").find(".submenu").html();
+ var depth3Menu = $(".gnb").find(".depth2").find("li.active").find(".depth3_wrap").html();
+ $(".gnb_2depth_mobile").html(depth2Menu)
+ $(".gnb_3depth_mobile").html(depth3Menu)
+ $(".gnb_mobile").find(".depth3").parent(".gnb_3depth_mobile").addClass("have")
+
+ var mgLi2 = $(".gnb_2depth_mobile ul li");
+ var mg2totalWidth = 0;
+ mgLi2.each(function(){
+ mg2totalWidth = mg2totalWidth += Number($(this).outerWidth() + 10);
+ })
+ $(".gnb_2depth_mobile ul").css({ width : mg2totalWidth })
+
+ var mgLi3 = $(".gnb_3depth_mobile ul li");
+ var mg3totalWidth = 0;
+ mgLi3.each(function(){
+ mg3totalWidth = mg3totalWidth += Number($(this).outerWidth() + 30);
+ })
+ $(".gnb_3depth_mobile ul").css({ width : mg3totalWidth })
+
+ $(window).resize(function(){
+ var mgLi2 = $(".gnb_2depth_mobile ul li");
+ var mg2totalWidth = 0;
+ mgLi2.each(function(){
+ mg2totalWidth = mg2totalWidth += Number($(this).outerWidth() + 10);
+ })
+ $(".gnb_2depth_mobile ul").css({ width : mg2totalWidth })
+
+ var mgLi3 = $(".gnb_3depth_mobile ul li");
+ var mg3totalWidth = 0;
+ mgLi3.each(function(){
+ mg3totalWidth = mg3totalWidth += Number($(this).outerWidth() + 30);
+ })
+ $(".gnb_3depth_mobile ul").css({ width : mg3totalWidth })
+ });
+ }
+ }
+
+
+ var clickEvent = {
+
+ 'familysite' : function(){
+ //familysite toggle
+ $(".btn_family").on("click", function(){
+ $(".familysite").toggleClass("active");
+ if ($(".familysite").hasClass('active')){
+ $(".btn_family").attr("title", "관련사이트 닫기");
+ } else{
+ $(".btn_family").attr("title", "관련사이트 열기");
+ }
+ });
+ $(".familysite li ul li:last-child").on("focusout", function(){
+ $(".btn_family").focus();
+ });
+ },
+ 'map' : function(){
+ //지도 넓게 보기
+ $(".btn_fold").on('click', function(){
+ $(".map_list_wrap").toggleClass("wide");
+ });
+ },
+ 'productView' : function(){
+ //상품 상세설명 더보기 버튼
+ $('.pic_sub button').on('click', function (){
+ $(this).toggleClass("active");
+ $(".pic_mask").toggleClass("show");
+ if ($(this).hasClass('active')){
+ $(this).attr("title", "상세정보 간단히 보기").text("간단히 보기");
+ } else{
+ $(this).attr("title", "상세정보 더보기").text("자세히 보기");
+ }
+ });
+
+ },
+ 'terms' : function(){
+ //회원가입 약관
+ // $(".btn_terms").on('click', function(){
+ // $(this).toggleClass("active");
+ // $(this).parent(".terms_wrap").next(".textarea_member_wrap").slideToggle();
+ // });
+
+ $('.btn_terms').on('click', function(){
+ if ($(this).parent(".terms_wrap").next(".textarea_member_wrap").css('display') == 'none') {
+ $('.textarea_member_wrap').slideUp();
+ $('.btn_terms').removeClass('active');
+ $(this).toggleClass("active");
+ $(this).parent(".terms_wrap").next(".textarea_member_wrap").slideToggle();
+ } else {
+ $('.textarea_member_wrap').slideUp();
+ $(this).removeClass('active');
+ }
+ });
+
+ },
+ 'howto' : function(){
+ //신청방법
+ $(".howto_wrap button").on('click', function(){
+ $(this).toggleClass("active");
+ $(".title_box").toggleClass("active");
+ $(".howto").slideToggle();
+ });
+ },
+ 'skip_top' : function(){
+ if ($("body").hasClass("index_body")) {
+ //$(".skip_top").attr("onclick", "location.href='/vtsp/'");
+ $(".skip_top").attr("onclick", "location.href='#anchor1'");
+ $(".skip_top").addClass("forIndex");
+ }
+ },
+ 'productImg' : function(){
+ //상품이미지 변경
+ $('.thumb_list li').on('click', function(){
+ $('.thumb_list li').removeClass("active");
+ $(this).addClass("active");
+ var thubImg = $(this).children(".bg_box").children("img").attr("src");
+ $(".img_frame").children(".bg_box").css({ backgroundImage: "url(" + thubImg + ")" });
+ });
+ },
+ 'inputCategory' : function(){
+ //검색, 선택 버튼 설정
+ $(".btn_input").on("click", function(){
+ $(this).addClass("active");
+ $(".btn_select").removeClass("active");
+ $(".input_show").show();
+ $(".select_show").hide();
+ });
+ $(".btn_select").on("click", function(){
+ $(this).addClass("active");
+ $(".btn_input").removeClass("active");
+ $(".select_show").show();
+ $(".input_show").hide();
+ });
+ },
+ 'mapShow' : function(){
+ //지도 show
+ $(".show_map").on("click", function(){
+ $(this).hide();
+ $(".show_list").show();
+ $(".map_list_wrap, .map_wrap").addClass("active");
+ });
+ },
+ 'mapHide' : function(){
+ ///지도 hide
+ $(".show_list").on("click", function(){
+ $(this).hide();
+ $(".show_map").show();
+ $(".map_list_wrap, .map_wrap").removeClass("active");
+ });
+ },
+ 'showmore' : function(){
+ $(".tbac_sub_info button").click(function(){
+ $(this).parent(".btn_group").hide();
+ $(".board_view").show();
+ })
+ }
+ }
+
+ // toggle events
+ var toggle = {
+ 'toggleList' : function(){
+ //toggle list
+ $('.toggle_tit').on('click', function(){
+ if ($(this).next('.toggle_box').css('display') == 'none') {
+ $('.toggle_box').slideUp();
+ $('.toggle_tit').removeClass('active');
+ $(this).addClass('active');
+ $(this).next(".toggle_box").slideDown();
+ } else {
+ $('.toggle_box').slideUp();
+ $(this).removeClass('active');
+ }
+ });
+ },
+
+ 'toggleBtn' : function(){
+ $('.btn_toggle').on('click', function(){
+ $(this).toggleClass("active");
+ $(this).parent(".toggle_btn_tit").next(".toggle_box").slideToggle();
+ });
+ },
+ 'arrowBtn' : function(){
+ $('.btn_arrow_down').on('click', function(){
+ $(this).toggleClass("active")
+ $(this).parent(".toggle_wrap").find(".toggle_content").slideToggle();
+ });
+ },
+ 'estToggle' : function(){
+ //견적항목 담기 목록
+ $(document).on('click', '.est_sel_title', function() {
+ $(this).parent(".est_selected li").toggleClass("active");
+ $(this).toggleClass("on");
+ $(this).next(".est_sel_content_wrap").stop().slideToggle();
+ var titleText = $(this).closest("li").attr("title");
+
+ if ($(this).hasClass("on")){
+ $(this).attr("title",titleText+" 접기");
+ }
+ else{
+ $(this).attr("title",titleText+" 펼치기");
+ }
+ });
+ },
+ 'activeToggle' : function(){
+ $('.active_toggle').on('click', function(){
+ $('.active_toggle').removeClass("active");
+ $(this).toggleClass("active");
+ });
+ },
+ 'jobList' : function(){
+ var widwidth = $(window).width();
+ if (widwidth < 500){
+ $(".toggle").addClass("mobile");
+ $(".toggle .toggle_content").hide();
+ $(".toggle .tit_wrap").on('click', function(){
+ $(this).toggleClass("on")
+ $(this).next(".toggle_content").slideToggle();
+ });
+ }
+ else {
+ $(".toggle").removeClass("mobile");
+ $(".toggle .toggle_content").show();
+ $(".toggle .tit_wrap").on('click', function(){
+ $(this).removeClass("on");
+ $(this).next(".toggle_content").slideDown();
+ });
+ }
+ }
+ }
+
+ var sitemap = {
+ 'close' : function(){
+
+ $(".gnb_sitemap a").on("click", function(){
+ $(".sitemap_wrap").addClass("open");
+ $(".close_sitemap").focus()
+ });
+
+ $(".close_sitemap").on("click", function(){
+ $(".sitemap_wrap").removeClass("open");
+ $(".gnb_sitemap a").focus(); //표시해둔 곳으로 초점 이동
+ });
+
+ $(".sitemap_left .depth1:last-child .submenu .depth2 > li:last-child").on('focusout', function() {
+ //$(".sitemap_wrap").removeClass("active");
+ $(".close_sitemap").focus()
+ });
+ }
+ }
+
+ var popup = {
+ 'open' : function(){
+ // $(".openpopup").on("click", function(){
+ // var popupname = $(this).attr("name");
+ // $("." + popupname).show().addClass("open").find(".btn_close").focus();
+ // var el = $(this);
+ // el.attr('data-focus','on'); //레이어 팝업이 닫힐떄를 위한 표시 - 접근성
+ // });
+
+ $(".openpopup").on('click', function(){
+
+ var op = $(this);
+ var lp = $("#" + $(this).attr("aria-controls"));
+ var lpObj = lp.find(".modal_box");
+ var lpObjClose = lp.find(".btn_close");
+ var lpObjTabbale = lpObj.find("button, input:not([type='hidden']), select, iframe, textarea, [href], [tabindex]:not([tabindex='-1'])");
+ var lpObjTabbaleFirst = lpObjTabbale && lpObjTabbale.first()
+ var lpObjTabbaleLast = lpObjTabbale && lpObjTabbale.last()
+ var lpOuterObjHidden = $("") //레이어 바깥요소
+ var all = $("").add(lp);
+ var tabDisable;
+ var nowScrollPos = $(window).scrollTop();
+
+
+ function lpClose() {
+ $("body").removeClass("scroll-off").css("top", "").off("scroll touchmove mousewheel");
+ $(window).scrollTop(nowScrollPos); // 레이어 닫은 후 화면 최상단으로 이동 방지
+ if (tabDisable === true) lpObj.attr("tabindex", "-1");
+ all.removeClass("open");
+ lpOuterObjHidden.removeAttr("aria-hidden");
+ op.focus(); //레이어 닫은 후 원래 있던 곳으로 초점 이동
+ $(document).off("keydown.lp_keydown");
+
+ }
+
+ $(this).blur();
+ all.addClass("open");
+ lpOuterObjHidden.attr("aria-hidden", "true"); //레이어 바깥 영역을 스크린리더가 읽지 않게
+
+ lpObjTabbale.length ? lpObjTabbaleFirst.focus().on("keydown", function(event){
+ if (event.shiftkey && (event.keycode || event.which) === 9) {
+
+ event.preventDefault();
+ lpObjTabbaleLast.focus();
+
+ }
+
+ }) : lpObj.attr("tabindex", "0").focus().on("keydown", function(){
+ tabDisabble = true;
+ if ((event.keyCode || event.which) === 9) event.preventDefault();
+ // 레이어 밖으로 초점이동 안되게
+ });
+
+ lpObjTabbaleLast.on("keydown", function(event){
+ if (!event.shiftkey && (event.keycode || event.which) === 9) {
+ event.preventDefault();
+ lpObjTabbaleFirst.focus();
+ }
+ })
+
+ lpObjClose.on("click", lpClose); //레이어 닫기
+
+ lp.on("click", function(){
+ if (event.target === event.currentTarget) {
+ lpClose(); //반투명 배경 클릭시 레이어 닫기
+ }
+ });
+
+ $(document).on("keydown.lp_keydown", function(event){
+ //esc키 : 레이어닫기
+ var keyType = event.keycode || event.which;
+ if (keyType === 27 && lp.hasClass("open")){
+ lpClose()
+ }
+ })
+ })
+
+
+ },
+ 'close' : function(){
+ //$(".close, .btn_close, .member_close").on('click', function(){
+ // $(".modal, .member_wrap").hide().removeClass("open");
+ // $("a[data-focus~=on]").focus(); //표시해둔 곳으로 초점 이동
+ //
+ //});
+
+ }
+ }
+
+ var search = {
+ init : function() {
+ this.addEvent();
+ },
+ 'issearch' : function(){
+ $(".btn_is").on('click', function(){
+ $(".int_search").addClass("open");
+ $(".is_search .inputText").focus()
+ });
+ $(".close_is").on('click', function(){
+ $(".int_search").removeClass("open");
+ $(".btn_is").focus();
+ });
+ $(".close_is").on('focusout', function(){
+ $(".is_search .inputText").focus();
+ }); //통합검색 포커스
+
+ $(".keyword_footer .btn_close").on('focusout', function(){
+ $("#cmmTotalSearchAuto li:first-child a").focus();
+ }); //연관 검색어 포커스
+
+ }
+ }
+
+ // 배경 이미지 넣기
+ var itemImg = {
+ 'bgImg' : function() {
+ $(".bg_box, .item_img").each(function(){
+ var item_img_box = $(this).children("img").attr("src");
+ $(this).css({backgroundImage: "url(" + item_img_box + ")"});
+ });
+ },
+ //버튼 배경 이미지 넣기
+ 'btnImg' : function() {
+ $(".btn_img").each(function(){
+ var btn_img = $(this).children("img").attr("src");
+ $(this).css({backgroundImage: "url(" + btn_img + ")"});
+ });
+ }
+ }
+
+ function inputFocus() {
+ //input focus event
+ //포커스시
+ $(document).on('focus', '.inputText, .textArea', function() {
+ $(this).parent('.text_show').addClass("focus");
+ });
+ //포커스아웃시
+ $(document).on('focusout', '.inputText, .textArea', function() {
+ if($(this).val() == '') {
+ $(this).parent('.text_show').removeClass("focus");
+ }
+ });
+ var inputText = $('.inputText, .textArea');
+ inputText.each(function() {
+ if ($(this).val().trim() != '') {
+ $(this).parent('.text_show').addClass('focus');
+ }
+ });
+ }
+
+ //slick slide
+ var slideShow = {
+ 'cardSlide' : function() {
+ $(".card_wrap").slick({
+ centerMode: true,
+ centerPadding: '0',
+ slidesToShow: 1,
+ dots: true,
+ accessibility:true,
+ customPaging: function(slider, i){
+ return '<a href="#!" class="dot" title="' + $(slider.$slides[i]).find('.slick_list').attr('data-dot-title') + '번째로 이동">슬라이드이동버튼</a>';
+ },
+ });
+
+ $(".card_wrap3").slick({
+ rows: 1,
+ centerMode: true,
+ infinite : true,
+ centerPadding: '0',
+ slidesToShow: 3,
+ keyboard: true,
+ dots: true,
+ accessibility:true,
+ });
+
+
+ //index 아이콘 title
+ $(".m_slide").each(function(){
+ var modaldot = $(this).index() + 1;
+ $(this).attr("data-dot-title", modaldot + "번째로 이동");
+ })
+
+ //index 아이콘 title
+ $(".slick-dots li").each(function(){
+ var indexdot = $(this).index() + 1;
+ $(this).find("a").attr("title", indexdot + "번째 페이지로 이동");
+ })
+
+ $(".modal_slide").slick({
+ centerMode: true,
+ centerPadding: '0',
+ slidesToShow: 1,
+ dots: true,
+ arrow: true,
+ accessibility:true,
+ customPaging: function(slider, i){
+ return '<a href="#!" class="dot" title="' + $(slider.$slides[i]).find('.m_slide').attr('data-dot-title') + '">슬라이드이동버튼</a>';
+ },
+ });
+
+ var $reiviewSlider = $(".review_wrap").slick({
+ dot: false,
+ centerMode: true,
+ arrow: true,
+ infinite : true,
+ slideToScroll: 1,
+ keyboard: true,
+ dots: true,
+ accessibility:true,
+ variableWidth: true,
+ responsive:[
+
+ {
+ breakpoint:1200,
+ settings:{
+ centerPadding: '0',
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ }
+ }
+ ]
+ });
+
+ $reiviewSlider.on('beforeChange', function(event, slick, currentSlide, nextSlide){
+ var slideNo = nextSlide+1;
+ $(".reviewAcnt").html("0"+slideNo);
+ })
+
+ $(".graph").slick({
+ rows: 1,
+ //centerMode: true,
+ centerPadding: '10%',
+ slidesToShow: 2,
+ slidesToScroll: 2,
+ dots: true,
+ customPaging: function(slider, i){
+ return '<a href="#!" class="dot" title="' + $(slider.$slides[i]).find('.graph_list').attr('data-dot-title') + '번째로 이동">슬라이드이동버튼</a>';
+ },
+ keyboard: true,
+ accessibility:true,
+ responsive:[
+ {
+ breakpoint:1500,
+ settings:{
+ centerMode: true,
+ centerPadding: '20%',
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ }
+ },
+ {
+ breakpoint:1200,
+ settings:{
+ centerMode: true,
+ centerPadding: '10%',
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ }
+ },
+ {
+ breakpoint:500,
+ settings:{
+ centerMode: true,
+ centerPadding: '0',
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ }
+ }
+ ]
+ });
+
+ $(".index_slide").slick({
+ rows: 1,
+ //infinite : true,
+ centerMode: true,
+ centerPadding: '0',
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ dots: true,
+ customPaging: function(slider, i){
+ return '<a href="#!" class="dot" title="' + $(slider.$slides[i]).find('.slick_list').attr('data-dot-title') + '">슬라이드이동버튼</a>';
+ },
+ arrows: true,
+ autoplay: true,
+ autoplaySpeed: 4000,
+ keyboard: true,
+ accessibility:true,
+ speed: 1000,
+ });
+ $(".btn_play").on("click", function(){
+ $(this).addClass("on");
+ $(".btn_pause").removeClass("on");
+ $(".index_slide").slick("slickPlay");
+ })
+ $(".btn_pause").on("click", function(){
+ $(this).addClass("on");
+ $(".btn_play").removeClass("on");
+ $(".index_slide").slick("slickPause");
+ });
+
+ },
+ 'slideButton' : function() {
+ //slick button title
+ $(".slick-prev").attr("title", "이전컨텐츠");
+ $(".slick-next").attr("title", "다음컨텐츠");
+ }
+
+ }
+
+ // 스크롤 시 top버튼 토글 함수
+ function scrollTopToggle() {
+ var scroll = $(window).scrollTop();
+ var windowH = $(window).height();
+ var htmlH = $("html").outerHeight();
+ var headerH = $(".header").outerHeight();
+ var footerH = $("footer").outerHeight();
+ var subtitleH = $(".sub_title").outerHeight();
+ var picMainH = $(".pic_main").outerHeight();
+ var headnameH = $(".headname").outerHeight();
+ var categoryH = $(".market_category").outerHeight();
+ var searchH = $(".detail_search_wrap").outerHeight();
+ var cmtintro1 = $(".cmtintro.section1").outerHeight();
+ var cmtintro2 = $(".cmtintro.section2").outerHeight();
+ var cmtintro3 = $(".cmtintro.section3").outerHeight();
+ var cmtintro4 = $(".cmtintro.section4").outerHeight();
+ var cmtintro5 = $(".cmtintro.section5").outerHeight();
+
+ $(".familysite").removeClass("active");
+
+ //포털소개
+ if (scroll >= 150) {
+ $(".cmtintro.section1").addClass("active");
+ $(".cmtintro.section2").removeClass("active");
+ } else {
+ $(".cmtintro.section1").removeClass("active");
+ }
+ if (scroll >= headerH + cmtintro1) {
+ $(".cmtintro.section1").addClass("gone");
+ $(".cmtintro.section2").addClass("active");
+ $(".cmtintro.section3").removeClass("active");
+ } else {
+ $(".cmtintro.section1").removeClass("gone");
+ }
+ if (scroll >= headerH + cmtintro1 + cmtintro2) {
+ $(".cmtintro.section1").addClass("gone");
+ $(".cmtintro.section3").addClass("active");
+ $(".cmtintro.section4").removeClass("active");
+ } else {
+ $(".cmtintro.section2").removeClass("gone");
+ }
+ if (scroll >= headerH + cmtintro1 + cmtintro2 + cmtintro3) {
+ $(".cmtintro.section2").addClass("gone");
+ $(".cmtintro.section4").addClass("active");
+ $(".cmtintro.section5").removeClass("active");
+ } else {
+ $(".cmtintro.section3").removeClass("gone");
+ }
+ if (scroll >= headerH + cmtintro1 + cmtintro2 + cmtintro3 + cmtintro4) {
+ $(".cmtintro.section3").addClass("gone");
+ $(".cmtintro.section5").addClass("active");
+ $(".cmtintro.section6").removeClass("active");
+ } else {
+ $(".cmtintro.section4").removeClass("gone");
+ }
+ if (scroll >= headerH + cmtintro1 + cmtintro2 + cmtintro3 + cmtintro4 + cmtintro5) {
+ $(".cmtintro.section4").addClass("gone");
+ $(".cmtintro.section6").addClass("active");
+ } else {
+ $(".cmtintro.section5").removeClass("gone");
+ }
+
+ //스크롤시 skip top 버튼 toggle
+ if (scroll >= 150) {
+ $(".skip_top").addClass("fix");
+ } else {
+ $(".skip_top").removeClass("fix");
+ }
+
+ //마이페이지메뉴, 마켓 정보박스 fix
+ if (scroll >= headerH + subtitleH - 50) {
+ $(".payment, .price_wrap").addClass("fix");
+ } else {
+ $(".payment, .price_wrap").removeClass("fix");
+ }
+
+ //브랜드관 animation
+ if (scroll >= headerH + subtitleH + headnameH - 150) {
+ $(".brand_header").addClass("on");
+ } else {
+ $(".brand_header").removeClass("on");
+ }
+
+ //하단 도달 시 마이페이지메뉴, 마켓 정보박스 아래 띄움
+ if (scroll >= htmlH - windowH - footerH + 150) {
+ $(".payment").addClass("nofix");
+ } else {
+ $(".payment").removeClass("nofix");
+ }
+
+ //스크롤 시 마켓 카테고리 fix
+ if (scroll >= headerH + subtitleH + picMainH + categoryH - 10) {
+ $(".market_category, .pic_sub, .text_sub, .market_info, .market_view_wrap").addClass("fix");
+ $(".payment").addClass("morefix");
+ } else {
+ $(".market_category, .pic_sub, .text_sub, .market_info, .market_view_wrap").removeClass("fix");
+ $(".payment").removeClass("morefix");
+ }
+
+ //하단 도달 시 마이페이지메뉴, 마켓 정보박스 아래 띄움
+ if (scroll >= htmlH - windowH - footerH - 20) {
+ $(".payment").addClass("bottom");
+ $(".price_wrap").addClass("nofix");
+ } else {
+ $(".payment").removeClass("bottom");
+ $(".price_wrap").removeClass("nofix")
+ }
+
+ //하단 도달 시 마이페이지메뉴, 마켓 정보박스 아래 띄움
+ if (scroll >= headerH + subtitleH + searchH) {
+ $(".search_result").addClass("fix");
+ } else {
+ $(".search_result").removeClass("fix");
+ }
+
+ }
+
+ // switch 체크 시 라인 active
+ function checkSwitch() {
+ if ($("input[type='checkbox'].switch").is(":checked")) {
+ $(".row").addClass("active");
+ } else {
+ $(".row").removeClass("active");
+ }
+ }
+
+ // 이미지 사이즈 함수
+ function boardContentImg() {
+ var img_length = $(".board_content img, .item_info_wrap img").length;
+ var _div_width = $(".board_content, .item_info_wrap").width();
+ var _div_height = $(".board_content, .item_info_wrap").height();
+
+ for(var i=0;i<img_length;i++){
+ var _width = $(".board_content img, .item_info_wrap img").eq(i).width();
+ var _height = $(".board_content img, .item_info_wrap img").eq(i).height();
+ if(_width < _div_width){
+ $(".board_content img, .item_info_wrap img").eq(i).width(_width);
+ } else{
+ $(".board_content img, .item_info_wrap img").eq(i).width("100%");
+ }
+ if(_height < _div_height){
+ $(".board_content img, .item_info_wrap img").eq(i).height("auto");
+ } else{
+ $(".board_content img, .item_info_wrap img").eq(i).height("auto");
+ }
+ }
+
+ $(window).resize(function(){
+ var img_length = $(".board_content img").length;
+ var _div_width = $(".board_content").width();
+ var _div_height = $(".board_content").height();
+
+ for(var i=0;i<img_length;i++){
+ var _width = $(".board_content img").eq(i).width();
+ var _height = $(".board_content img").eq(i).height();
+ if(_width < _div_width){
+ $(".board_content img").eq(i).width(_width);
+ } else{
+ $(".board_content img").eq(i).width("100%");
+ }
+ if(_height < _div_height){
+ $(".board_content img").eq(i).height("auto");
+ } else{
+ $(".board_content img").eq(i).height("auto");
+ }
+ }
+ });
+ }
+
+ // 마켓 카테고리 active
+ function pageSection() {
+ var scrollDistance = $(window).scrollTop();
+ // Assign active class to nav links while scolling
+ $('.page-section').each(function(i) {
+ if ($(this).position().top <= scrollDistance) {
+ $('.market_category ul li.active, .search_category ul li.active').removeClass('active');
+ $('.market_category ul li, .search_category ul li').eq(i).addClass('active');
+ }
+ });
+ }
+
+ //a title 추가
+ function addTitle() {
+
+ $(".fr-file").each(function(){
+ var filename = $(this).text()
+ $(this).attr("title", filename + " 다운받기")
+ })
+
+ }
+
+ //tab 설정
+ function tabs() {
+ // Default Action
+ $("ul.tabs li").children("a").attr("title", "선택안됨");
+ $("ul.tabs").each(function() {
+ $(this).children("li:first").addClass("active") // Activate first tab
+ $(this).children("li:first").children("a").attr("title", "선택됨");
+
+ $(this).closest(".tab_wrap").find(".tab_content").hide(); // Hide all tab content
+ var activeTab = $(this).find("a").attr("href");
+ $(activeTab).show();
+ });
+
+ // On Click Event
+ $("ul.tabs li").click(function() {
+ $(this).parent("ul.tabs").children("li").removeClass("active");// Remove any "active" class
+ $(this).addClass("active"); // Add "active" class to selected tab
+ $(this).closest(".tab_wrap").find(".tab_content").hide(); // Hide all tab content
+ $("ul.tabs li").children("a").attr("title", "선택안됨");
+ $(this).children("a").attr("title", "선택됨");
+ var clickTab = $(this).find("a").attr("href"); // Find the rel
+ $(clickTab).fadeIn(); // Fade in the active content
+ return false;
+ });
+
+ }
+
+
+ $(document).ready(function() {
+
+ /**이벤트**/
+ $(window).scroll(function() {
+ //마켓 카테고리 active
+ pageSection();
+ //scroll events
+ scrollTopToggle()
+ });
+
+ inputFocus(); //inputText focus 이벤트
+ checkSwitch(); //카테고리 스위치
+ addTitle(); //a 에 title 넣기
+ tabs(); //tab
+
+ board.survey(".bar"); //설문조사 bar 채우기
+ board.calendar(); //달력 일정 숨기기
+ board.marketH() //상세설명 높이 설정
+ board.marketImg() //상세이미지 alt추가
+ board.overX()
+ board.design()
+
+ //popup
+ popup.open();
+ popup.close();
+
+ skip.skipPage(); //웹접근성을 위한 본문 바로가기
+
+ //gnb
+ gnb.show();
+ gnb.hide();
+ gnb.gnbTabKey(); //gnb웹접근성(키보드로 이동)
+ gnb.btnMypage(); //header mypage button toggle
+ gnb.breadcrumb() //현재위치표시 toggle
+ gnb.mypageGnb() //마이페이지메뉴
+ gnb.gnbMobile()
+
+ //click events
+ clickEvent.familysite(); //패밀리사이트 toggle
+ clickEvent.map(); //지도넓게보기
+ clickEvent.productView(); //상품 상세설명 더보기 버튼
+ clickEvent.terms(); //회원가입 약관 toggle
+ clickEvent.howto(); //신청방법 toggle
+ clickEvent.skip_top(); //top으로가기버튼 event
+ clickEvent.productImg(); //상품이미지 변경 toggle
+ clickEvent.inputCategory() //input category toggle
+ clickEvent.mapShow() //반응형 지도 show
+ clickEvent.mapHide() //반응형 지도 hide
+ clickEvent.showmore()
+
+ //toggle events
+ toggle.toggleList();
+ toggle.toggleBtn();
+ toggle.arrowBtn(); //견적서 toggle
+ toggle.estToggle(); //견적서 선택된 차종 리스트 toggle
+ toggle.activeToggle() //active toggle 설정
+ toggle.jobList()
+
+ search.issearch() //통합검색 포커스 이동
+
+ sitemap.close(".sitemap_wrap"); //사이트맵 close
+ itemImg.bgImg(); //자식요소 img 에 src 를 이용한 배경이미지 넣기
+ itemImg.btnImg(); //버튼의 자식요소 img 에 src 를 이용한 배경이미지 넣기
+ slideShow.cardSlide(".card_wrap"); //카드 형식의 슬라이드쇼
+ slideShow.slideButton()
+ boardContentImg() //img 넓이가 부모요소의 넓이 이상 이면 100% 로 맞추기
+
+ });
+})();
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/designJS.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/cookie.js
===================================================================
--- base3.10/src/main/webapp/js/com/cookie.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/cookie.js (revision 7)
@@ -0,0 +1,45 @@
+/**
+ * 쿠키 정보
+ */
+/** 쿠기정보를 가져온다.ㅣ */
+function getCookie(cookieName) {
+ var search = cookieName + '=';
+ var cookie = document.cookie;
+ var startIndex, endIndex;
+
+ /* 현재 쿠키가 존재할 경우 */
+ if (cookie.length > 0) {
+ /* 해당 쿠키명이 존재하는지 검색한 후 존재하면 위치를 리턴. */
+ startIndex = cookie.indexOf(cookieName);
+
+ /* 존재한다면 */
+ if (startIndex != -1) {
+ /* 값을 얻어내기 위해 시작 인덱스 조절 */
+ startIndex += cookieName.length;
+
+ /* 값을 얻어내기 위해 종료 인덱스 추출 */
+ endIndex = cookie.indexOf(';', startIndex);
+
+ /* 만약 종료 인덱스를 못찾게 되면 쿠키 전체길이로 설정 */
+ if (endIndex == -1) {
+ endIndex = cookie.length;
+ }
+
+ /* 쿠키값을 추출하여 리턴 */
+ return unescape(cookie.substring(startIndex + 1, endIndex));
+ } else {
+ /* 쿠키 내에 해당 쿠키가 존재하지 않을 경우 */
+ return false;
+ }
+ } else {
+ /* 쿠키 자체가 없을 경우 */
+ return false;
+ }
+}
+
+/** 쿠키정보를 설정한다. */
+function setCookie(name, value, expiredays) {
+ var todayDate = new Date();
+ todayDate.setDate(todayDate.getDate() + expiredays);
+ document.cookie = name + '=' + escape(value) + '; path=/; expires=' + todayDate.toGMTString() + ';';
+}
Property changes on: base3.10/src/main/webapp/js/com/cookie.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery.easing.1.3.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery.easing.1.3.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery.easing.1.3.js (revision 7)
@@ -0,0 +1,202 @@
+/*
+* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+*
+* Uses the built in easing capabilities added In jQuery 1.1
+* to offer multiple easing options
+*
+* TERMS OF USE - jQuery Easing
+*
+* Open source under the BSD License.
+*
+* Copyright © 2008 George McGinley Smith
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* Neither the name of the author nor the names of contributors may be used to endorse
+* or promote products derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+* OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+// t: current time, b: begInnIng value, c: change In value, d: duration
+jQuery.easing['jswing'] = jQuery.easing['swing'];
+jQuery.extend( jQuery.easing,
+{
+def: 'easeOutQuad',
+swing: function (x, t, b, c, d) {
+//alert(jQuery.easing.default);
+return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
+},
+easeInQuad: function (x, t, b, c, d) {
+return c*(t/=d)*t + b;
+},
+easeOutQuad: function (x, t, b, c, d) {
+return -c *(t/=d)*(t-2) + b;
+},
+easeInOutQuad: function (x, t, b, c, d) {
+if ((t/=d/2) < 1) return c/2*t*t + b;
+return -c/2 * ((--t)*(t-2) - 1) + b;
+},
+easeInCubic: function (x, t, b, c, d) {
+return c*(t/=d)*t*t + b;
+},
+easeOutCubic: function (x, t, b, c, d) {
+return c*((t=t/d-1)*t*t + 1) + b;
+},
+easeInOutCubic: function (x, t, b, c, d) {
+if ((t/=d/2) < 1) return c/2*t*t*t + b;
+return c/2*((t-=2)*t*t + 2) + b;
+},
+easeInQuart: function (x, t, b, c, d) {
+return c*(t/=d)*t*t*t + b;
+},
+easeOutQuart: function (x, t, b, c, d) {
+return -c * ((t=t/d-1)*t*t*t - 1) + b;
+},
+easeInOutQuart: function (x, t, b, c, d) {
+if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+return -c/2 * ((t-=2)*t*t*t - 2) + b;
+},
+easeInQuint: function (x, t, b, c, d) {
+return c*(t/=d)*t*t*t*t + b;
+},
+easeOutQuint: function (x, t, b, c, d) {
+return c*((t=t/d-1)*t*t*t*t + 1) + b;
+},
+easeInOutQuint: function (x, t, b, c, d) {
+if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+return c/2*((t-=2)*t*t*t*t + 2) + b;
+},
+easeInSine: function (x, t, b, c, d) {
+return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+},
+easeOutSine: function (x, t, b, c, d) {
+return c * Math.sin(t/d * (Math.PI/2)) + b;
+},
+easeInOutSine: function (x, t, b, c, d) {
+return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+},
+easeInExpo: function (x, t, b, c, d) {
+return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+},
+easeOutExpo: function (x, t, b, c, d) {
+return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+},
+easeInOutExpo: function (x, t, b, c, d) {
+if (t==0) return b;
+if (t==d) return b+c;
+if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+},
+easeInCirc: function (x, t, b, c, d) {
+return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+},
+easeOutCirc: function (x, t, b, c, d) {
+return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+},
+easeInOutCirc: function (x, t, b, c, d) {
+if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+},
+easeInElastic: function (x, t, b, c, d) {
+var s=1.70158;var p=0;var a=c;
+if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+if (a < Math.abs(c)) { a=c; var s=p/4; }
+else var s = p/(2*Math.PI) * Math.asin (c/a);
+return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+},
+easeOutElastic: function (x, t, b, c, d) {
+var s=1.70158;var p=0;var a=c;
+if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+if (a < Math.abs(c)) { a=c; var s=p/4; }
+else var s = p/(2*Math.PI) * Math.asin (c/a);
+return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+},
+easeInOutElastic: function (x, t, b, c, d) {
+var s=1.70158;var p=0;var a=c;
+if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
+if (a < Math.abs(c)) { a=c; var s=p/4; }
+else var s = p/(2*Math.PI) * Math.asin (c/a);
+if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+},
+easeInBack: function (x, t, b, c, d, s) {
+if (s == undefined) s = 1.70158;
+return c*(t/=d)*t*((s+1)*t - s) + b;
+},
+easeOutBack: function (x, t, b, c, d, s) {
+if (s == undefined) s = 1.70158;
+return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+},
+easeInOutBack: function (x, t, b, c, d, s) {
+if (s == undefined) s = 1.70158;
+if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+},
+easeInBounce: function (x, t, b, c, d) {
+return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+},
+easeOutBounce: function (x, t, b, c, d) {
+if ((t/=d) < (1/2.75)) {
+return c*(7.5625*t*t) + b;
+} else if (t < (2/2.75)) {
+return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+} else if (t < (2.5/2.75)) {
+return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+} else {
+return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+}
+},
+easeInOutBounce: function (x, t, b, c, d) {
+if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+}
+});
+/*
+*
+* TERMS OF USE - EASING EQUATIONS
+*
+* Open source under the BSD License.
+*
+* Copyright © 2001 Robert Penner
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this list of
+* conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this list
+* of conditions and the following disclaimer in the documentation and/or other materials
+* provided with the distribution.
+*
+* Neither the name of the author nor the names of contributors may be used to endorse
+* or promote products derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+* OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
Property changes on: base3.10/src/main/webapp/js/com/jquery.easing.1.3.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/sockjs.min.js.map
===================================================================
--- base3.10/src/main/webapp/js/com/sockjs.min.js.map (nonexistent)
+++ base3.10/src/main/webapp/js/com/sockjs.min.js.map (revision 7)
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/entry.js","lib/event/close.js","lib/event/emitter.js","lib/event/event.js","lib/event/eventtarget.js","lib/event/trans-message.js","lib/facade.js","lib/iframe-bootstrap.js","lib/info-ajax.js","lib/info-iframe-receiver.js","lib/info-iframe.js","lib/info-receiver.js","lib/location.js","lib/main.js","lib/shims.js","lib/transport-list.js","lib/transport/browser/abstract-xhr.js","lib/transport/browser/eventsource.js","lib/transport/browser/websocket.js","lib/transport/eventsource.js","lib/transport/htmlfile.js","lib/transport/iframe.js","lib/transport/jsonp-polling.js","lib/transport/lib/ajax-based.js","lib/transport/lib/buffered-sender.js","lib/transport/lib/iframe-wrap.js","lib/transport/lib/polling.js","lib/transport/lib/sender-receiver.js","lib/transport/receiver/eventsource.js","lib/transport/receiver/htmlfile.js","lib/transport/receiver/jsonp.js","lib/transport/receiver/xhr.js","lib/transport/sender/jsonp.js","lib/transport/sender/xdr.js","lib/transport/sender/xhr-cors.js","lib/transport/sender/xhr-fake.js","lib/transport/sender/xhr-local.js","lib/transport/websocket.js","lib/transport/xdr-polling.js","lib/transport/xdr-streaming.js","lib/transport/xhr-polling.js","lib/transport/xhr-streaming.js","lib/utils/browser-crypto.js","lib/utils/browser.js","lib/utils/escape.js","lib/utils/event.js","lib/utils/iframe.js","lib/utils/log.js","lib/utils/object.js","lib/utils/random.js","lib/utils/transport.js","lib/utils/url.js","lib/version.js","node_modules/inherits/inherits_browser.js","node_modules/json3/lib/json3.js","node_modules/querystringify/index.js","node_modules/requires-port/index.js","node_modules/url-parse/index.js"],"names":["f","exports","module","define","amd","window","global","self","this","SockJS","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","transportList","setTimeout","_sockjs_onload","inherits","Event","CloseEvent","initEvent","wasClean","reason","EventTarget","EventEmitter","prototype","removeAllListeners","type","_listeners","once","listener","fired","on","g","removeListener","apply","arguments","emit","listeners","l","args","Array","ai","addListener","addEventListener","removeEventListener","eventType","canBubble","cancelable","bubbles","timeStamp","Date","stopPropagation","preventDefault","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","arr","indexOf","concat","idx","slice","dispatchEvent","event","TransportMessageEvent","data","JSON3","iframeUtils","FacadeJS","transport","_transport","_transportMessage","bind","_transportClose","postMessage","stringify","frame","_send","send","_close","close","urlUtils","eventUtils","InfoIframeReceiver","loc","debug","availableTransports","parentOrigin","transportMap","forEach","at","facadeTransport","transportName","bootstrap_iframe","facade","currentWindowId","hash","attachEvent","source","parent","origin","iframeMessage","parse","ignored","windowId","version","transUrl","baseUrl","isOriginEqual","href","objectUtils","InfoAjax","url","AjaxObject","t0","xo","status","text","info","rtt","isObject","XHRLocalObject","InfoReceiverIframe","ir","utils","IframeTransport","InfoIframe","go","ifr","msg","d","document","body","enabled","XDR","XHRCors","XHRLocal","XHRFake","InfoReceiver","urlInfo","doXhr","_getReceiver","sameOrigin","sameScheme","addPath","timeoutRef","_cleanup","timeout","clearTimeout","location","protocol","host","port","transports","URL","random","escape","browser","log","protocols","options","TypeError","readyState","CONNECTING","extensions","protocols_whitelist","warn","_transportsWhitelist","_transportOptions","transportOptions","_timeout","sessionId","_generateSessionId","string","_server","server","numberString","parsedUrl","SyntaxError","secure","isArray","sortedProtocols","sort","proto","getOrigin","_origin","toLowerCase","set","pathname","replace","_urlInfo","nullOrigin","hasDomain","isSchemeEqual","_ir","_receiveInfo","userSetCode","CLOSING","CLOSED","OPEN","quote","_rto","countRTO","_transUrl","base_url","extend","enabledTransports","filterToEnabled","_transports","main","_connect","Transport","shift","needBody","unshift","timeoutMs","Math","max","roundTrips","_transportTimeoutId","_transportTimeout","transportUrl","transportObj","payload","content","_open","forceFail","onmessage","onclose","onerror","isFunction","val","ObjectPrototype","toString","isString","obj","_toString","defineProperty","ArrayPrototype","Object","FunctionPrototype","Function","StringPrototype","String","array_slice","supportsDescriptors","object","name","method","forceAssign","configurable","enumerable","writable","value","defineProperties","map","hasOwnProperty","toObject","Empty","that","target","boundLength","boundArgs","push","bound","join","result","properlyBoxesNonStrict","properlyBoxesStrict","boxedString","splitString","fun","split","thisp","_","__","context","hasFirefox2IndexOfBug","sought","num","floor","abs","toInteger","compliantExecNpcg","string_split","exec","separator","limit","separator2","match","lastIndex","lastLength","output","flags","ignoreCase","multiline","extended","sticky","lastLastIndex","RegExp","x","ToUint32","index","test","string_substr","substr","hasNegativeSubstrBug","start","XHR","XMLHttpRequest","AbstractXHRObject","opts","_start","xhr","addQuery","unloadRef","unloadAdd","open","ontimeout","noCredentials","supportsCORS","withCredentials","headers","key","setRequestHeader","onreadystatechange","responseText","abort","unloadDel","axo","cors","EventSource","Driver","WebSocket","MozWebSocket","undefined","AjaxBasedTransport","EventSourceReceiver","XHRCorsObject","EventSourceDriver","EventSourceTransport","HtmlfileReceiver","HtmlFileTransport","iframeUrl","iframeObj","createIframe","onmessageCallback","_message","detachEvent","cleanup","loaded","cdata","post","message","iframeEnabled","SenderReceiver","JsonpReceiver","jsonpSender","JsonPTransport","urlSuffix","Receiver","callback","opt","Content-type","ajaxUrl","err","createAjaxSender","BufferedSender","sender","sendBuffer","sendStop","sendSchedule","sendScheduleWait","tref","IframeWrapTransport","iframeInfo","Polling","receiveUrl","_scheduleReceiver","poll","pollIsClosing","senderFunc","pollUrl","es","decodeURI","polluteGlobalNamespace","id","decodeURIComponent","WPrefix","htmlfileEnabled","constructFunc","createHtmlfile","stop","urlWithId","encodeURIComponent","_callback","_createScript","timeoutId","_abort","scriptErrorTimeout","aborting","script2","parentNode","removeChild","script","onload","onclick","_scriptError","errorTimer","loadedOkay","createElement","src","charset","htmlFor","async","isOpera","head","getElementsByTagName","insertBefore","firstChild","XhrReceiver","bufferPosition","_chunkHandler","buf","form","area","style","display","position","enctype","acceptCharset","appendChild","action","iframe","submit","completed","XDRObject","xdr","XDomainRequest","_error","onprogress","XhrDriver","to","WebsocketDriver","WebSocketTransport","ignore","ws","XdrStreamingTransport","XdrPollingTransport","cookie_needed","XhrPollingTransport","XhrStreamingTransport","crypto","getRandomValues","randomBytes","bytes","Uint8Array","navigator","userAgent","isKonqueror","domain","extraLookup","extraEscapable","quoted","escapable","unrolled","fromCharCode","charCodeAt","unrollLookup","onUnload","afterUnload","isChromePackagedApp","chrome","app","runtime","ref","triggerUnloadCallbacks","errorCallback","unattach","contentWindow","doc","CollectGarbage","write","parentWindow","logObject","level","levelExists","console","prop","_randomStringChars","ret","number","transportsWhitelist","trans","websocket","hostname","b","res","path","qs","q","create","ctor","superCtor","super_","constructor","TempCtor","objectTypes","function","freeExports","nodeType","root","freeGlobal","runInContext","Number","nativeJSON","isProperty","undef","objectProto","getClass","isExtended","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","exception","has","isSupported","serialized","stringifySupported","toJSON","parseSupported","functionClass","numberClass","stringClass","arrayClass","charIndexBuggy","Months","getDay","year","month","property","members","__proto__","original","Properties","size","valueOf","isConstructor","hasProperty","toPaddedString","width","useCharIndex","symbols","charCode","Escapes","charAt","92","34","8","12","10","13","9","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","pop","filter","Index","Source","lex","begin","isSigned","Unescapes","update","walk","47","98","116","110","102","114","get","hasMembers","JSON","previousJSON","isRestored","noConflict","decode","input","pairs","query","part","parser","required","protocolre","slashes","rules","address","NaN","lolcation","finaldestination","Url","unescape","extractProtocol","rest","relative","extracted","instruction","instructions","base","last","up","splice","resolve","username","password","auth","fn","char","ins"],"mappings":";CAAA,SAAAA,GAAA,GAAA,iBAAAC,SAAA,oBAAAC,OAAAA,OAAAD,QAAAD,SAAA,GAAA,mBAAAG,QAAAA,OAAAC,IAAAD,OAAA,GAAAH,OAAA,EAAA,oBAAAK,OAAAA,OAAA,oBAAAC,OAAAA,OAAA,oBAAAC,KAAAA,KAAAC,MAAAC,OAAAT,KAAA,CAAA,WAAA,OAAA,SAAAU,EAAAC,EAAAC,EAAAC,GAAA,SAAAC,EAAAC,EAAAf,GAAA,IAAAY,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,IAAAC,EAAA,mBAAAC,SAAAA,QAAA,IAAAjB,GAAAgB,EAAA,OAAAA,EAAAD,GAAA,GAAA,GAAAG,EAAA,OAAAA,EAAAH,GAAA,GAAA,IAAAI,EAAA,IAAAC,MAAA,uBAAAL,EAAA,KAAA,MAAAI,EAAAE,KAAA,mBAAAF,EAAA,IAAAG,EAAAV,EAAAG,GAAA,CAAAd,QAAA,IAAAU,EAAAI,GAAA,GAAAQ,KAAAD,EAAArB,QAAA,SAAAS,GAAA,OAAAI,EAAAH,EAAAI,GAAA,GAAAL,IAAAA,IAAAY,EAAAA,EAAArB,QAAAS,EAAAC,EAAAC,EAAAC,GAAA,OAAAD,EAAAG,GAAAd,QAAA,IAAA,IAAAiB,EAAA,mBAAAD,SAAAA,QAAAF,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,IAAA,OAAAD,EAAA,CAAA,CAAAW,EAAA,CAAA,SAAAR,EAAAf,EAAAD,gBCAA,aAEA,IAAAyB,EAAAT,EAAA,oBAEAf,EAAAD,QAAAgB,EAAA,SAAAA,CAAAS,GAGA,mBAAApB,GACAqB,WAAArB,EAAAsB,eAAA,8KCRA,aAEA,IAAAC,EAAAZ,EAAA,YACAa,EAAAb,EAAA,WAGA,SAAAc,IACAD,EAAAP,KAAAf,MACAA,KAAAwB,UAAA,SAAA,GAAA,GACAxB,KAAAyB,UAAA,EACAzB,KAAAa,KAAA,EACAb,KAAA0B,OAAA,GAGAL,EAAAE,EAAAD,GAEA5B,EAAAD,QAAA8B,mDChBA,aAEA,IAAAF,EAAAZ,EAAA,YACAkB,EAAAlB,EAAA,iBAGA,SAAAmB,IACAD,EAAAZ,KAAAf,MAGAqB,EAAAO,EAAAD,GAEAC,EAAAC,UAAAC,mBAAA,SAAAC,GACAA,SACA/B,KAAAgC,WAAAD,GAEA/B,KAAAgC,WAAA,IAIAJ,EAAAC,UAAAI,KAAA,SAAAF,EAAAG,GACA,IAAAnC,EAAAC,KACAmC,GAAA,EAWAnC,KAAAoC,GAAAL,EATA,SAAAM,IACAtC,EAAAuC,eAAAP,EAAAM,GAEAF,IACAA,GAAA,EACAD,EAAAK,MAAAvC,KAAAwC,eAOAZ,EAAAC,UAAAY,KAAA,WACA,IAAAV,EAAAS,UAAA,GACAE,EAAA1C,KAAAgC,WAAAD,GACA,GAAAW,EAAA,CAMA,IAFA,IAAAC,EAAAH,UAAAxB,OACA4B,EAAA,IAAAC,MAAAF,EAAA,GACAG,EAAA,EAAAA,EAAAH,EAAAG,IACAF,EAAAE,EAAA,GAAAN,UAAAM,GAEA,IAAA,IAAAvC,EAAA,EAAAA,EAAAmC,EAAA1B,OAAAT,IACAmC,EAAAnC,GAAAgC,MAAAvC,KAAA4C,KAIAhB,EAAAC,UAAAO,GAAAR,EAAAC,UAAAkB,YAAApB,EAAAE,UAAAmB,iBACApB,EAAAC,UAAAS,eAAAX,EAAAE,UAAAoB,oBAEAvD,EAAAD,QAAAmC,aAAAA,yDCxDA,aAEA,SAAAN,EAAA4B,GACAlD,KAAA+B,KAAAmB,EAGA5B,EAAAO,UAAAL,UAAA,SAAA0B,EAAAC,EAAAC,GAKA,OAJApD,KAAA+B,KAAAmB,EACAlD,KAAAqD,QAAAF,EACAnD,KAAAoD,WAAAA,EACApD,KAAAsD,WAAA,IAAAC,KACAvD,MAGAsB,EAAAO,UAAA2B,gBAAA,aACAlC,EAAAO,UAAA4B,eAAA,aAEAnC,EAAAoC,gBAAA,EACApC,EAAAqC,UAAA,EACArC,EAAAsC,eAAA,EAEAlE,EAAAD,QAAA6B,0BCrBA,aAMA,SAAAK,IACA3B,KAAAgC,WAAA,GAGAL,EAAAE,UAAAmB,iBAAA,SAAAE,EAAAhB,GACAgB,KAAAlD,KAAAgC,aACAhC,KAAAgC,WAAAkB,GAAA,IAEA,IAAAW,EAAA7D,KAAAgC,WAAAkB,IAEA,IAAAW,EAAAC,QAAA5B,KAEA2B,EAAAA,EAAAE,OAAA,CAAA7B,KAEAlC,KAAAgC,WAAAkB,GAAAW,GAGAlC,EAAAE,UAAAoB,oBAAA,SAAAC,EAAAhB,GACA,IAAA2B,EAAA7D,KAAAgC,WAAAkB,GACA,GAAAW,EAAA,CAGA,IAAAG,EAAAH,EAAAC,QAAA5B,IACA,IAAA8B,IACA,EAAAH,EAAA7C,OAEAhB,KAAAgC,WAAAkB,GAAAW,EAAAI,MAAA,EAAAD,GAAAD,OAAAF,EAAAI,MAAAD,EAAA,WAEAhE,KAAAgC,WAAAkB,MAMAvB,EAAAE,UAAAqC,cAAA,WACA,IAAAC,EAAA3B,UAAA,GACAnC,EAAA8D,EAAApC,KAEAa,EAAA,IAAAJ,UAAAxB,OAAA,CAAAmD,GAAAtB,MAAAN,MAAA,KAAAC,WAQA,GAHAxC,KAAA,KAAAK,IACAL,KAAA,KAAAK,GAAAkC,MAAAvC,KAAA4C,GAEAvC,KAAAL,KAAAgC,WAGA,IADA,IAAAU,EAAA1C,KAAAgC,WAAA3B,GACAE,EAAA,EAAAA,EAAAmC,EAAA1B,OAAAT,IACAmC,EAAAnC,GAAAgC,MAAAvC,KAAA4C,IAKAlD,EAAAD,QAAAkC,0BC7DA,aAEA,IAAAN,EAAAZ,EAAA,YACAa,EAAAb,EAAA,WAGA,SAAA2D,EAAAC,GACA/C,EAAAP,KAAAf,MACAA,KAAAwB,UAAA,WAAA,GAAA,GACAxB,KAAAqE,KAAAA,EAGAhD,EAAA+C,EAAA9C,GAEA5B,EAAAD,QAAA2E,mDCdA,aAEA,IAAAE,EAAA7D,EAAA,SACA8D,EAAA9D,EAAA,kBAGA,SAAA+D,EAAAC,IACAzE,KAAA0E,WAAAD,GACArC,GAAA,UAAApC,KAAA2E,kBAAAC,KAAA5E,OACAyE,EAAArC,GAAA,QAAApC,KAAA6E,gBAAAD,KAAA5E,OAGAwE,EAAA3C,UAAAgD,gBAAA,SAAAhE,EAAAa,GACA6C,EAAAO,YAAA,IAAAR,EAAAS,UAAA,CAAAlE,EAAAa,MAEA8C,EAAA3C,UAAA8C,kBAAA,SAAAK,GACAT,EAAAO,YAAA,IAAAE,IAEAR,EAAA3C,UAAAoD,MAAA,SAAAZ,GACArE,KAAA0E,WAAAQ,KAAAb,IAEAG,EAAA3C,UAAAsD,OAAA,WACAnF,KAAA0E,WAAAU,QACApF,KAAA0E,WAAA5C,sBAGApC,EAAAD,QAAA+E,wDC1BA,aAEA,IAAAa,EAAA5E,EAAA,eACA6E,EAAA7E,EAAA,iBACA6D,EAAA7D,EAAA,SACA+D,EAAA/D,EAAA,YACA8E,EAAA9E,EAAA,0BACA8D,EAAA9D,EAAA,kBACA+E,EAAA/E,EAAA,cAGAgF,EAAA,aAKA/F,EAAAD,QAAA,SAAAQ,EAAAyF,GACA,IAUAC,EAVAC,EAAA,GACAF,EAAAG,QAAA,SAAAC,GACAA,EAAAC,kBACAH,EAAAE,EAAAC,gBAAAC,eAAAF,EAAAC,mBAMAH,EAAAL,EAAAS,eAAAT,EAIAtF,EAAAgG,iBAAA,WAEA,IAAAC,EACA3B,EAAA4B,gBAAAX,EAAAY,KAAAnC,MAAA,GA+DAqB,EAAAe,YAAA,UA9DA,SAAAlG,GACA,GAAAA,EAAAmG,SAAAC,cAGA,IAAAZ,IACAA,EAAAxF,EAAAqG,QAEArG,EAAAqG,SAAAb,GAAA,CAIA,IAAAc,EACA,IACAA,EAAAnC,EAAAoC,MAAAvG,EAAAkE,MACA,MAAAsC,GAEA,YADAlB,EAAA,WAAAtF,EAAAkE,MAIA,GAAAoC,EAAAG,WAAArC,EAAA4B,gBAGA,OAAAM,EAAA1E,MACA,IAAA,IACA,IAAAjB,EACA,IACAA,EAAAwD,EAAAoC,MAAAD,EAAApC,MACA,MAAAsC,GACAlB,EAAA,WAAAgB,EAAApC,MACA,MAEA,IAAAwC,EAAA/F,EAAA,GACA2D,EAAA3D,EAAA,GACAgG,EAAAhG,EAAA,GACAiG,EAAAjG,EAAA,GAGA,GAFA2E,EAAAoB,EAAApC,EAAAqC,EAAAC,GAEAF,IAAA5G,EAAA4G,QACA,MAAA,IAAAjG,MAAA,yCACAiG,EAAA,mBACA5G,EAAA4G,QAAA,MAGA,IAAAxB,EAAA2B,cAAAF,EAAAtB,EAAAyB,QACA5B,EAAA2B,cAAAD,EAAAvB,EAAAyB,MACA,MAAA,IAAArG,MAAA,6DACA4E,EAAAyB,KAAA,KAAAH,EAAA,KAAAC,EAAA,KAEAb,EAAA,IAAA1B,EAAA,IAAAoB,EAAAnB,GAAAqC,EAAAC,IACA,MACA,IAAA,IACAb,EAAAjB,MAAAwB,EAAApC,MACA,MACA,IAAA,IACA6B,GACAA,EAAAf,SAEAe,EAAA,SAQA3B,EAAAO,YAAA,yKCnGA,aAEA,IAAAlD,EAAAnB,EAAA,UAAAmB,aACAP,EAAAZ,EAAA,YACA6D,EAAA7D,EAAA,SACAyG,EAAAzG,EAAA,kBAGAgF,EAAA,aAKA,SAAA0B,EAAAC,EAAAC,GACAzF,EAAAb,KAAAf,MAEA,IAAAD,EAAAC,KACAsH,GAAA,IAAA/D,KACAvD,KAAAuH,GAAA,IAAAF,EAAA,MAAAD,GAEApH,KAAAuH,GAAAtF,KAAA,SAAA,SAAAuF,EAAAC,GACA,IAAAC,EAAAC,EACA,GAAA,MAAAH,EAAA,CAEA,GADAG,GAAA,IAAApE,KAAA+D,EACAG,EACA,IACAC,EAAApD,EAAAoC,MAAAe,GACA,MAAAtH,GACAsF,EAAA,WAAAgC,GAIAP,EAAAU,SAAAF,KACAA,EAAA,IAGA3H,EAAA0C,KAAA,SAAAiF,EAAAC,GACA5H,EAAA+B,uBAIAT,EAAA8F,EAAAvF,GAEAuF,EAAAtF,UAAAuD,MAAA,WACApF,KAAA8B,qBACA9B,KAAAuH,GAAAnC,SAGA1F,EAAAD,QAAA0H,iGChDA,aAEA,IAAA9F,EAAAZ,EAAA,YACAmB,EAAAnB,EAAA,UAAAmB,aACA0C,EAAA7D,EAAA,SACAoH,EAAApH,EAAA,gCACA0G,EAAA1G,EAAA,eAGA,SAAAqH,EAAAhB,GACA,IAAA/G,EAAAC,KACA4B,EAAAb,KAAAf,MAEAA,KAAA+H,GAAA,IAAAZ,EAAAL,EAAAe,GACA7H,KAAA+H,GAAA9F,KAAA,SAAA,SAAAyF,EAAAC,GACA5H,EAAAgI,GAAA,KACAhI,EAAA0C,KAAA,UAAA6B,EAAAS,UAAA,CAAA2C,EAAAC,OAIAtG,EAAAyG,EAAAlG,GAEAkG,EAAA9B,cAAA,uBAEA8B,EAAAjG,UAAAuD,MAAA,WACApF,KAAA+H,KACA/H,KAAA+H,GAAA3C,QACApF,KAAA+H,GAAA,MAEA/H,KAAA8B,sBAGApC,EAAAD,QAAAqI,6HChCA,aAEA,IAAAlG,EAAAnB,EAAA,UAAAmB,aACAP,EAAAZ,EAAA,YACA6D,EAAA7D,EAAA,SACAuH,EAAAvH,EAAA,iBACAwH,EAAAxH,EAAA,sBACAqH,EAAArH,EAAA,0BAGAgF,EAAA,aAKA,SAAAyC,EAAAnB,EAAAK,GACA,IAAArH,EAAAC,KACA4B,EAAAb,KAAAf,MAEA,SAAAmI,IACA,IAAAC,EAAArI,EAAAqI,IAAA,IAAAH,EAAAH,EAAA9B,cAAAoB,EAAAL,GAEAqB,EAAAnG,KAAA,UAAA,SAAAoG,GACA,GAAAA,EAAA,CACA,IAAAC,EACA,IACAA,EAAAhE,EAAAoC,MAAA2B,GACA,MAAAlI,GAIA,OAHAsF,EAAA,WAAA4C,GACAtI,EAAA0C,KAAA,eACA1C,EAAAqF,QAIA,IAAAsC,EAAAY,EAAA,GAAAX,EAAAW,EAAA,GACAvI,EAAA0C,KAAA,SAAAiF,EAAAC,GAEA5H,EAAAqF,UAGAgD,EAAAnG,KAAA,QAAA,WACAlC,EAAA0C,KAAA,UACA1C,EAAAqF,UAKAtF,EAAAyI,SAAAC,KAGAL,IAFAH,EAAA3B,YAAA,OAAA8B,GAMA9G,EAAA6G,EAAAtG,GAEAsG,EAAAO,QAAA,WACA,OAAAR,EAAAQ,WAGAP,EAAArG,UAAAuD,MAAA,WACApF,KAAAoI,KACApI,KAAAoI,IAAAhD,QAEApF,KAAA8B,qBACA9B,KAAAoI,IAAA,MAGA1I,EAAAD,QAAAyI,sQCpEA,aAEA,IAAAtG,EAAAnB,EAAA,UAAAmB,aACAP,EAAAZ,EAAA,YACA4E,EAAA5E,EAAA,eACAiI,EAAAjI,EAAA,0BACAkI,EAAAlI,EAAA,+BACAmI,EAAAnI,EAAA,gCACAoI,EAAApI,EAAA,+BACAyH,EAAAzH,EAAA,iBACA0G,EAAA1G,EAAA,eAGAgF,EAAA,aAKA,SAAAqD,EAAA/B,EAAAgC,GACAtD,EAAAsB,GACA,IAAAhH,EAAAC,KACA4B,EAAAb,KAAAf,MAEAmB,WAAA,WACApB,EAAAiJ,MAAAjC,EAAAgC,IACA,GAGA1H,EAAAyH,EAAAlH,GAIAkH,EAAAG,aAAA,SAAAlC,EAAAK,EAAA2B,GAEA,OAAAA,EAAAG,WACA,IAAA/B,EAAAC,EAAAwB,GAEAD,EAAAF,QACA,IAAAtB,EAAAC,EAAAuB,GAEAD,EAAAD,SAAAM,EAAAI,WACA,IAAAhC,EAAAC,EAAAsB,GAEAR,EAAAO,UACA,IAAAP,EAAAnB,EAAAK,GAEA,IAAAD,EAAAC,EAAAyB,IAGAC,EAAAjH,UAAAmH,MAAA,SAAAjC,EAAAgC,GACA,IAAAhJ,EAAAC,KACAoH,EAAA/B,EAAA+D,QAAArC,EAAA,SAEAtB,EAAA,QAAA2B,GAEApH,KAAAuH,GAAAuB,EAAAG,aAAAlC,EAAAK,EAAA2B,GAEA/I,KAAAqJ,WAAAlI,WAAA,WACAsE,EAAA,WACA1F,EAAAuJ,UAAA,GACAvJ,EAAA0C,KAAA,WACAqG,EAAAS,SAEAvJ,KAAAuH,GAAAtF,KAAA,SAAA,SAAAyF,EAAAC,GACAlC,EAAA,SAAAiC,EAAAC,GACA5H,EAAAuJ,UAAA,GACAvJ,EAAA0C,KAAA,SAAAiF,EAAAC,MAIAmB,EAAAjH,UAAAyH,SAAA,SAAA7H,GACAgE,EAAA,YACA+D,aAAAxJ,KAAAqJ,YACArJ,KAAAqJ,WAAA,MACA5H,GAAAzB,KAAAuH,IACAvH,KAAAuH,GAAAnC,QAEApF,KAAAuH,GAAA,MAGAuB,EAAAjH,UAAAuD,MAAA,WACAK,EAAA,SACAzF,KAAA8B,qBACA9B,KAAAsJ,UAAA,IAGAR,EAAAS,QAAA,IAEA7J,EAAAD,QAAAqJ,mQCxFA,aAEApJ,EAAAD,QAAAK,EAAA2J,UAAA,CACAjD,OAAA,sBACAkD,SAAA,QACAC,KAAA,YACAC,KAAA,GACA3C,KAAA,oBACAb,KAAA,4JCRA,aAEA3F,EAAA,WAEA,IAwBAoJ,EAxBAC,EAAArJ,EAAA,aACAY,EAAAZ,EAAA,YACA6D,EAAA7D,EAAA,SACAsJ,EAAAtJ,EAAA,kBACAuJ,EAAAvJ,EAAA,kBACA4E,EAAA5E,EAAA,eACA6E,EAAA7E,EAAA,iBACAgE,EAAAhE,EAAA,qBACAyG,EAAAzG,EAAA,kBACAwJ,EAAAxJ,EAAA,mBACAyJ,EAAAzJ,EAAA,eACAa,EAAAb,EAAA,iBACAkB,EAAAlB,EAAA,uBACA+E,EAAA/E,EAAA,cACAc,EAAAd,EAAA,iBACA2D,EAAA3D,EAAA,yBACAqI,EAAArI,EAAA,mBAGAgF,EAAA,aAQA,SAAAxF,EAAAmH,EAAA+C,EAAAC,GACA,KAAApK,gBAAAC,GACA,OAAA,IAAAA,EAAAmH,EAAA+C,EAAAC,GAEA,GAAA5H,UAAAxB,OAAA,EACA,MAAA,IAAAqJ,UAAA,wEAEA1I,EAAAZ,KAAAf,MAEAA,KAAAsK,WAAArK,EAAAsK,WACAvK,KAAAwK,WAAA,GACAxK,KAAA0J,SAAA,IAGAU,EAAAA,GAAA,IACAK,qBACAP,EAAAQ,KAAA,kEAEA1K,KAAA2K,qBAAAP,EAAAP,WACA7J,KAAA4K,kBAAAR,EAAAS,kBAAA,GACA7K,KAAA8K,SAAAV,EAAAb,SAAA,EAEA,IAAAwB,EAAAX,EAAAW,WAAA,EACA,GAAA,mBAAAA,EACA/K,KAAAgL,mBAAAD,MACA,CAAA,GAAA,iBAAAA,EAKA,MAAA,IAAAV,UAAA,+EAJArK,KAAAgL,mBAAA,WACA,OAAAjB,EAAAkB,OAAAF,IAMA/K,KAAAkL,QAAAd,EAAAe,QAAApB,EAAAqB,aAAA,KAGA,IAAAC,EAAA,IAAAvB,EAAA1C,GACA,IAAAiE,EAAA1B,OAAA0B,EAAA3B,SACA,MAAA,IAAA4B,YAAA,YAAAlE,EAAA,gBACA,GAAAiE,EAAAjF,KACA,MAAA,IAAAkF,YAAA,uCACA,GAAA,UAAAD,EAAA3B,UAAA,WAAA2B,EAAA3B,SACA,MAAA,IAAA4B,YAAA,yDAAAD,EAAA3B,SAAA,qBAGA,IAAA6B,EAAA,WAAAF,EAAA3B,SAEA,GAAA,WAAAlE,EAAAkE,WAAA6B,EACA,MAAA,IAAA3K,MAAA,mGAKAuJ,EAEAtH,MAAA2I,QAAArB,KACAA,EAAA,CAAAA,IAFAA,EAAA,GAMA,IAAAsB,EAAAtB,EAAAuB,OACAD,EAAA5F,QAAA,SAAA8F,EAAApL,GACA,IAAAoL,EACA,MAAA,IAAAL,YAAA,wBAAAK,EAAA,iBAEA,GAAApL,EAAAkL,EAAAzK,OAAA,GAAA2K,IAAAF,EAAAlL,EAAA,GACA,MAAA,IAAA+K,YAAA,wBAAAK,EAAA,sBAKA,IAAArL,EAAA+E,EAAAuG,UAAApG,EAAAyB,MACAjH,KAAA6L,QAAAvL,EAAAA,EAAAwL,cAAA,KAGAT,EAAAU,IAAA,WAAAV,EAAAW,SAAAC,QAAA,OAAA,KAGAjM,KAAAoH,IAAAiE,EAAApE,KACAxB,EAAA,YAAAzF,KAAAoH,KAKApH,KAAAkM,SAAA,CACAC,YAAAlC,EAAAmC,YACAlD,WAAA7D,EAAA2B,cAAAhH,KAAAoH,IAAA5B,EAAAyB,MACAkC,WAAA9D,EAAAgH,cAAArM,KAAAoH,IAAA5B,EAAAyB,OAGAjH,KAAAsM,IAAA,IAAAxD,EAAA9I,KAAAoH,IAAApH,KAAAkM,UACAlM,KAAAsM,IAAArK,KAAA,SAAAjC,KAAAuM,aAAA3H,KAAA5E,OAKA,SAAAwM,EAAA3L,GACA,OAAA,MAAAA,GAAA,KAAAA,GAAAA,GAAA,KAHAQ,EAAApB,EAAA0B,GAMA1B,EAAA4B,UAAAuD,MAAA,SAAAvE,EAAAa,GAEA,GAAAb,IAAA2L,EAAA3L,GACA,MAAA,IAAAD,MAAA,oCAGA,GAAAc,GAAA,IAAAA,EAAAV,OACA,MAAA,IAAAsK,YAAA,yCAIA,GAAAtL,KAAAsK,aAAArK,EAAAwM,SAAAzM,KAAAsK,aAAArK,EAAAyM,OAAA,CAMA1M,KAAAmF,OAAAtE,GAAA,IAAAa,GAAA,kBADA,KAIAzB,EAAA4B,UAAAqD,KAAA,SAAAb,GAMA,GAHA,iBAAAA,IACAA,EAAA,GAAAA,GAEArE,KAAAsK,aAAArK,EAAAsK,WACA,MAAA,IAAA3J,MAAA,kEAEAZ,KAAAsK,aAAArK,EAAA0M,MAGA3M,KAAA0E,WAAAQ,KAAA8E,EAAA4C,MAAAvI,KAGApE,EAAA4G,QAAApG,EAAA,aAEAR,EAAAsK,WAAA,EACAtK,EAAA0M,KAAA,EACA1M,EAAAwM,QAAA,EACAxM,EAAAyM,OAAA,EAEAzM,EAAA4B,UAAA0K,aAAA,SAAA7E,EAAAC,GAGA,GAFAlC,EAAA,eAAAkC,GACA3H,KAAAsM,IAAA,KACA5E,EAAA,CAOA1H,KAAA6M,KAAA7M,KAAA8M,SAAAnF,GAEA3H,KAAA+M,UAAArF,EAAAsF,SAAAtF,EAAAsF,SAAAhN,KAAAoH,IACAM,EAAAR,EAAA+F,OAAAvF,EAAA1H,KAAAkM,UACAzG,EAAA,OAAAiC,GAEA,IAAAwF,EAAArD,EAAAsD,gBAAAnN,KAAA2K,qBAAAjD,GACA1H,KAAAoN,YAAAF,EAAAG,KACA5H,EAAAzF,KAAAoN,YAAApM,OAAA,uBAEAhB,KAAAsN,gBAhBAtN,KAAAmF,OAAA,KAAA,6BAmBAlF,EAAA4B,UAAAyL,SAAA,WACA,IAAA,IAAAC,EAAAvN,KAAAoN,YAAAI,QAAAD,EAAAA,EAAAvN,KAAAoN,YAAAI,QAAA,CAEA,GADA/H,EAAA,UAAA8H,EAAAvH,eACAuH,EAAAE,YACA3N,EAAAyI,SAAAC,WACA,IAAA1I,EAAAyI,SAAA+B,YACA,aAAAxK,EAAAyI,SAAA+B,YACA,gBAAAxK,EAAAyI,SAAA+B,YAIA,OAHA7E,EAAA,oBACAzF,KAAAoN,YAAAM,QAAAH,QACAjI,EAAAe,YAAA,OAAArG,KAAAsN,SAAA1I,KAAA5E,OAMA,IAAA2N,EAAAC,KAAAC,IAAA7N,KAAA8K,SAAA9K,KAAA6M,KAAAU,EAAAO,YAAA,KACA9N,KAAA+N,oBAAA5M,WAAAnB,KAAAgO,kBAAApJ,KAAA5E,MAAA2N,GACAlI,EAAA,gBAAAkI,GAEA,IAAAM,EAAA5I,EAAA+D,QAAApJ,KAAA+M,UAAA,IAAA/M,KAAAkL,QAAA,IAAAlL,KAAAgL,sBACAZ,EAAApK,KAAA4K,kBAAA2C,EAAAvH,eACAP,EAAA,gBAAAwI,GACA,IAAAC,EAAA,IAAAX,EAAAU,EAAAjO,KAAA+M,UAAA3C,GAMA,OALA8D,EAAA9L,GAAA,UAAApC,KAAA2E,kBAAAC,KAAA5E,OACAkO,EAAAjM,KAAA,QAAAjC,KAAA6E,gBAAAD,KAAA5E,OACAkO,EAAAlI,cAAAuH,EAAAvH,mBACAhG,KAAA0E,WAAAwJ,GAIAlO,KAAAmF,OAAA,IAAA,yBAAA,IAGAlF,EAAA4B,UAAAmM,kBAAA,WACAvI,EAAA,qBACAzF,KAAAsK,aAAArK,EAAAsK,aACAvK,KAAA0E,YACA1E,KAAA0E,WAAAU,QAGApF,KAAA6E,gBAAA,KAAA,yBAIA5E,EAAA4B,UAAA8C,kBAAA,SAAA0D,GACA5C,EAAA,oBAAA4C,GACA,IAGA8F,EAHApO,EAAAC,KACA+B,EAAAsG,EAAApE,MAAA,EAAA,GACAmK,EAAA/F,EAAApE,MAAA,GAKA,OAAAlC,GACA,IAAA,IAEA,YADA/B,KAAAqO,QAEA,IAAA,IAGA,OAFArO,KAAAkE,cAAA,IAAA5C,EAAA,mBACAmE,EAAA,YAAAzF,KAAAyE,WAIA,GAAA2J,EACA,IACAD,EAAA7J,EAAAoC,MAAA0H,GACA,MAAAjO,GACAsF,EAAA,WAAA2I,GAIA,QAAA,IAAAD,EAKA,OAAApM,GACA,IAAA,IACAc,MAAA2I,QAAA2C,IACAA,EAAAtI,QAAA,SAAA/E,GACA2E,EAAA,UAAA1F,EAAA0E,UAAA3D,GACAf,EAAAmE,cAAA,IAAAE,EAAAtD,MAGA,MACA,IAAA,IACA2E,EAAA,UAAAzF,KAAAyE,UAAA0J,GACAnO,KAAAkE,cAAA,IAAAE,EAAA+J,IACA,MACA,IAAA,IACAtL,MAAA2I,QAAA2C,IAAA,IAAAA,EAAAnN,QACAhB,KAAAmF,OAAAgJ,EAAA,GAAAA,EAAA,IAAA,QAnBA1I,EAAA,gBAAA2I,IAyBAnO,EAAA4B,UAAAgD,gBAAA,SAAAhE,EAAAa,GACA+D,EAAA,kBAAAzF,KAAAyE,UAAA5D,EAAAa,GACA1B,KAAA0E,aACA1E,KAAA0E,WAAA5C,qBACA9B,KAAA0E,WAAA,KACA1E,KAAAyE,UAAA,MAGA+H,EAAA3L,IAAA,MAAAA,GAAAb,KAAAsK,aAAArK,EAAAsK,WAKAvK,KAAAmF,OAAAtE,EAAAa,GAJA1B,KAAAsN,YAOArN,EAAA4B,UAAAwM,MAAA,WACA5I,EAAA,QAAAzF,KAAA0E,YAAA1E,KAAA0E,WAAAsB,cAAAhG,KAAAsK,YACAtK,KAAAsK,aAAArK,EAAAsK,YACAvK,KAAA+N,sBACAvE,aAAAxJ,KAAA+N,qBACA/N,KAAA+N,oBAAA,MAEA/N,KAAAsK,WAAArK,EAAA0M,KACA3M,KAAAyE,UAAAzE,KAAA0E,WAAAsB,cACAhG,KAAAkE,cAAA,IAAA5C,EAAA,SACAmE,EAAA,YAAAzF,KAAAyE,YAIAzE,KAAAmF,OAAA,KAAA,wBAIAlF,EAAA4B,UAAAsD,OAAA,SAAAtE,EAAAa,EAAAD,GACAgE,EAAA,SAAAzF,KAAAyE,UAAA5D,EAAAa,EAAAD,EAAAzB,KAAAsK,YACA,IAAAgE,GAAA,EAaA,GAXAtO,KAAAsM,MACAgC,GAAA,EACAtO,KAAAsM,IAAAlH,QACApF,KAAAsM,IAAA,MAEAtM,KAAA0E,aACA1E,KAAA0E,WAAAU,QACApF,KAAA0E,WAAA,KACA1E,KAAAyE,UAAA,MAGAzE,KAAAsK,aAAArK,EAAAyM,OACA,MAAA,IAAA9L,MAAA,qDAGAZ,KAAAsK,WAAArK,EAAAwM,QACAtL,WAAA,WACAnB,KAAAsK,WAAArK,EAAAyM,OAEA4B,GACAtO,KAAAkE,cAAA,IAAA5C,EAAA,UAGA,IAAAnB,EAAA,IAAAoB,EAAA,SACApB,EAAAsB,SAAAA,IAAA,EACAtB,EAAAU,KAAAA,GAAA,IACAV,EAAAuB,OAAAA,EAEA1B,KAAAkE,cAAA/D,GACAH,KAAAuO,UAAAvO,KAAAwO,QAAAxO,KAAAyO,QAAA,KACAhJ,EAAA,iBACAb,KAAA5E,MAAA,IAKAC,EAAA4B,UAAAiL,SAAA,SAAAnF,GAOA,OAAA,IAAAA,EACA,EAAAA,EAEA,IAAAA,GAGAjI,EAAAD,QAAA,SAAAiG,GAGA,OAFAmE,EAAApF,EAAAiB,GACAjF,EAAA,qBAAAA,CAAAR,EAAAyF,GACAzF,+gBC9XA,aAWA,SAAAyO,EAAAC,GACA,MAAA,sBAAAC,EAAAC,SAAA9N,KAAA4N,GAKA,SAAAG,EAAAC,GACA,MAAA,oBAAAC,EAAAjO,KAAAgO,GAdA,IA4BAE,EA5BAC,EAAArM,MAAAhB,UACA+M,EAAAO,OAAAtN,UACAuN,EAAAC,SAAAxN,UACAyN,EAAAC,OAAA1N,UACA2N,EAAAN,EAAAjL,MAEA+K,EAAAJ,EAAAC,SAWAY,EAAAN,OAAAF,gBAAA,WACA,IAEA,OADAE,OAAAF,eAAA,GAAA,IAAA,KACA,EACA,MAAA9O,GACA,OAAA,GALA,GAaA8O,EADAQ,EACA,SAAAC,EAAAC,EAAAC,EAAAC,IACAA,GAAAF,KAAAD,GACAP,OAAAF,eAAAS,EAAAC,EAAA,CACAG,cAAA,EACAC,YAAA,EACAC,UAAA,EACAC,MAAAL,KAIA,SAAAF,EAAAC,EAAAC,EAAAC,IACAA,GAAAF,KAAAD,IACAA,EAAAC,GAAAC,IAGA,SAAAM,EAAAR,EAAAS,EAAAN,GACA,IAAA,IAAAF,KAAAQ,EACAvB,EAAAwB,eAAArP,KAAAoP,EAAAR,IACAV,EAAAS,EAAAC,EAAAQ,EAAAR,GAAAE,GAKA,SAAAQ,EAAA/P,GACA,GAAA,MAAAA,EACA,MAAA,IAAA+J,UAAA,iBAAA/J,EAAA,cAEA,OAAA6O,OAAA7O,GAkCA,SAAAgQ,KAEAJ,EAAAd,EAAA,CACAxK,KAAA,SAAA2L,GAEA,IAAAC,EAAAxQ,KAEA,IAAA0O,EAAA8B,GACA,MAAA,IAAAnG,UAAA,kDAAAmG,GAmFA,IA9EA,IAAA5N,EAAA4M,EAAAzO,KAAAyB,UAAA,GAyEAiO,EAAA7C,KAAAC,IAAA,EAAA2C,EAAAxP,OAAA4B,EAAA5B,QAIA0P,EAAA,GACAnQ,EAAA,EAAAA,EAAAkQ,EAAAlQ,IACAmQ,EAAAC,KAAA,IAAApQ,GASA,IAAAqQ,EAAAvB,SAAA,SAAA,oBAAAqB,EAAAG,KAAA,KAAA,6CAAAxB,CA9EA,WAEA,GAAArP,gBAAA4Q,EAAA,CAiBA,IAAAE,EAAAN,EAAAjO,MACAvC,KACA4C,EAAAmB,OAAAyL,EAAAzO,KAAAyB,aAEA,OAAA2M,OAAA2B,KAAAA,EACAA,EAEA9Q,KAsBA,OAAAwQ,EAAAjO,MACAgO,EACA3N,EAAAmB,OAAAyL,EAAAzO,KAAAyB,eA0DA,OA5BAgO,EAAA3O,YACAyO,EAAAzO,UAAA2O,EAAA3O,UACA+O,EAAA/O,UAAA,IAAAyO,EAEAA,EAAAzO,UAAA,MAwBA+O,KAYAV,EAAArN,MAAA,CAAA2I,QAhOA,SAAAuD,GACA,MAAA,mBAAAC,EAAAjO,KAAAgO,MAkOA,IAGAa,EAEAmB,EACAC,EANAC,EAAA9B,OAAA,KACA+B,EAAA,MAAAD,EAAA,MAAA,KAAAA,GAmBAf,EAAAhB,EAAA,CACArJ,QAAA,SAAAsL,EAAA,GACA,IAAAzB,EAAAW,EAAArQ,MACAD,EAAAmR,GAAApC,EAAA9O,MAAAA,KAAAoR,MAAA,IAAA1B,EACA2B,EAHA,EAIA9Q,GAAA,EACAS,EAAAjB,EAAAiB,SAAA,EAGA,IAAA0N,EAAAyC,GACA,MAAA,IAAA9G,UAGA,OAAA9J,EAAAS,GACAT,KAAAR,GAIAoR,EAAApQ,KAAAsQ,EAAAtR,EAAAQ,GAAAA,EAAAmP,MAnCAE,EAuCAV,EAAArJ,QApCAmL,EADAD,GAAA,EAEAnB,IACAA,EAAA7O,KAAA,MAAA,SAAAuQ,EAAAC,EAAAC,GACA,iBAAAA,IAAAT,GAAA,KAGAnB,EAAA7O,KAAA,CAAA,GAAA,WAEAiQ,EAAA,iBAAAhR,MACA,QAEA4P,GAAAmB,GAAAC,KA8BA,IAAAS,EAAA5O,MAAAhB,UAAAiC,UAAA,IAAA,CAAA,EAAA,GAAAA,QAAA,EAAA,GACAoM,EAAAhB,EAAA,CACApL,QAAA,SAAA4N,EAAA,GACA,IAAA3R,EAAAmR,GAAApC,EAAA9O,MAAAA,KAAAoR,MAAA,IAAAf,EAAArQ,MACAgB,EAAAjB,EAAAiB,SAAA,EAEA,IAAAA,EACA,OAAA,EAGA,IAAAT,EAAA,EAOA,IANA,EAAAiC,UAAAxB,SACAT,EAnOA,SAAAoR,GACA,IAAAvR,GAAAuR,EAMA,OALAvR,GAAAA,EACAA,EAAA,EACA,IAAAA,GAAAA,IAAA,EAAA,GAAAA,KAAA,EAAA,IACAA,GAAA,EAAAA,IAAA,GAAAwN,KAAAgE,MAAAhE,KAAAiE,IAAAzR,KAEAA,EA4NA0R,CAVA,IAcAvR,EAAA,GAAAA,EAAAA,EAAAqN,KAAAC,IAAA,EAAA7M,EAAAT,GACAA,EAAAS,EAAAT,IACA,GAAAA,KAAAR,GAAAA,EAAAQ,KAAAmR,EACA,OAAAnR,EAGA,OAAA,IAEAkR,GAsBA,IAUAM,EAVAC,EAAA1C,EAAA8B,MAEA,IAAA,KAAAA,MAAA,WAAApQ,QACA,IAAA,IAAAoQ,MAAA,YAAApQ,QACA,MAAA,QAAAoQ,MAAA,QAAA,IACA,IAAA,OAAAA,MAAA,QAAA,GAAApQ,QACA,GAAAoQ,MAAA,MAAApQ,QACA,EAAA,IAAAoQ,MAAA,QAAApQ,QAGA+Q,OAAA,IAAA,OAAAE,KAAA,IAAA,GAEA3C,EAAA8B,MAAA,SAAAc,EAAAC,GACA,IAAAlH,EAAAjL,KACA,QAAA,IAAAkS,GAAA,IAAAC,EACA,MAAA,GAIA,GAAA,oBAAAnD,EAAAjO,KAAAmR,GACA,OAAAF,EAAAjR,KAAAf,KAAAkS,EAAAC,GAGA,IAOAC,EAAAC,EAAAC,EAAAC,EAPAC,EAAA,GACAC,GAAAP,EAAAQ,WAAA,IAAA,KACAR,EAAAS,UAAA,IAAA,KACAT,EAAAU,SAAA,IAAA,KACAV,EAAAW,OAAA,IAAA,IACAC,EAAA,EAmBA,IAhBAZ,EAAA,IAAAa,OAAAb,EAAA5L,OAAAmM,EAAA,KACAxH,GAAA,GACA8G,IAEAK,EAAA,IAAAW,OAAA,IAAAb,EAAA5L,OAAA,WAAAmM,IASAN,OAAA,IAAAA,GACA,IAAA,EAxSA,SAAAa,GACA,OAAAA,IAAA,EAwSAC,CAAAd,IACAE,EAAAH,EAAAD,KAAAhH,OAGA6H,GADAR,EAAAD,EAAAa,MAAAb,EAAA,GAAArR,UAEAwR,EAAA7B,KAAA1F,EAAAhH,MAAA6O,EAAAT,EAAAa,SAGAnB,GAAA,EAAAM,EAAArR,QACAqR,EAAA,GAAApG,QAAAmG,EAAA,WACA,IAAA,IAAA7R,EAAA,EAAAA,EAAAiC,UAAAxB,OAAA,EAAAT,SACA,IAAAiC,UAAAjC,KACA8R,EAAA9R,QAAA,KAKA,EAAA8R,EAAArR,QAAAqR,EAAAa,MAAAjI,EAAAjK,QACAkO,EAAAyB,KAAApO,MAAAiQ,EAAAH,EAAApO,MAAA,IAEAsO,EAAAF,EAAA,GAAArR,OACA8R,EAAAR,EACAE,EAAAxR,QAAAmR,KAIAD,EAAAI,YAAAD,EAAAa,OACAhB,EAAAI,YAUA,OAPAQ,IAAA7H,EAAAjK,QACAuR,GAAAL,EAAAiB,KAAA,KACAX,EAAA7B,KAAA,IAGA6B,EAAA7B,KAAA1F,EAAAhH,MAAA6O,IAEAN,EAAAxR,OAAAmR,EAAAK,EAAAvO,MAAA,EAAAkO,GAAAK,IAUA,IAAApB,WAAA,EAAA,GAAApQ,SACAsO,EAAA8B,MAAA,SAAAc,EAAAC,GACA,YAAA,IAAAD,GAAA,IAAAC,EAAA,GACAH,EAAAjR,KAAAf,KAAAkS,EAAAC,KASA,IAAAiB,EAAA9D,EAAA+D,OACAC,EAAA,GAAAD,QAAA,MAAA,KAAAA,QAAA,GACAnD,EAAAZ,EAAA,CACA+D,OAAA,SAAAE,EAAAvS,GACA,OAAAoS,EAAArS,KACAf,KACAuT,EAAA,IAAAA,EAAAvT,KAAAgB,OAAAuS,GAAA,EAAA,EAAAA,EACAvS,KAGAsS,4BCncA,aAEA5T,EAAAD,QAAA,CAEAgB,EAAA,yBACAA,EAAA,6BACAA,EAAA,6BACAA,EAAA,2BACAA,EAAA,8BAAAA,CAAAA,EAAA,4BAGAA,EAAA,wBACAA,EAAA,8BAAAA,CAAAA,EAAA,yBACAA,EAAA,2BACAA,EAAA,2BACAA,EAAA,8BAAAA,CAAAA,EAAA,4BACAA,EAAA,6UChBA,aAEA,IAAAmB,EAAAnB,EAAA,UAAAmB,aACAP,EAAAZ,EAAA,YACAuH,EAAAvH,EAAA,qBACA4E,EAAA5E,EAAA,mBACA+S,EAAA1T,EAAA2T,eAGAhO,EAAA,aAKA,SAAAiO,EAAA9D,EAAAxI,EAAA+G,EAAAwF,GACAlO,EAAAmK,EAAAxI,GACA,IAAArH,EAAAC,KACA4B,EAAAb,KAAAf,MAEAmB,WAAA,WACApB,EAAA6T,OAAAhE,EAAAxI,EAAA+G,EAAAwF,IACA,GAGAtS,EAAAqS,EAAA9R,GAEA8R,EAAA7R,UAAA+R,OAAA,SAAAhE,EAAAxI,EAAA+G,EAAAwF,GACA,IAAA5T,EAAAC,KAEA,IACAA,KAAA6T,IAAA,IAAAL,EACA,MAAAR,IAIA,IAAAhT,KAAA6T,IAIA,OAHApO,EAAA,UACAzF,KAAAyC,KAAA,SAAA,EAAA,uBACAzC,KAAAsJ,WAKAlC,EAAA/B,EAAAyO,SAAA1M,EAAA,OAAA,IAAA7D,MAIAvD,KAAA+T,UAAA/L,EAAAgM,UAAA,WACAvO,EAAA,kBACA1F,EAAAuJ,UAAA,KAEA,IACAtJ,KAAA6T,IAAAI,KAAArE,EAAAxI,GAAA,GACApH,KAAAuJ,SAAA,YAAAvJ,KAAA6T,MACA7T,KAAA6T,IAAAtK,QAAAvJ,KAAAuJ,QACAvJ,KAAA6T,IAAAK,UAAA,WACAzO,EAAA,eACA1F,EAAA0C,KAAA,SAAA,EAAA,IACA1C,EAAAuJ,UAAA,KAGA,MAAAnJ,GAKA,OAJAsF,EAAA,YAAAtF,GAEAH,KAAAyC,KAAA,SAAA,EAAA,SACAzC,KAAAsJ,UAAA,GAWA,GAPAqK,GAAAA,EAAAQ,gBAAAT,EAAAU,eACA3O,EAAA,mBAIAzF,KAAA6T,IAAAQ,iBAAA,GAEAV,GAAAA,EAAAW,QACA,IAAA,IAAAC,KAAAZ,EAAAW,QACAtU,KAAA6T,IAAAW,iBAAAD,EAAAZ,EAAAW,QAAAC,IAIAvU,KAAA6T,IAAAY,mBAAA,WACA,GAAA1U,EAAA8T,IAAA,CACA,IACApM,EAAAD,EADAwL,EAAAjT,EAAA8T,IAGA,OADApO,EAAA,aAAAuN,EAAA1I,YACA0I,EAAA1I,YACA,KAAA,EAGA,IACA9C,EAAAwL,EAAAxL,OACAC,EAAAuL,EAAA0B,aACA,MAAAvU,IAGAsF,EAAA,SAAA+B,GAEA,OAAAA,IACAA,EAAA,KAIA,MAAAA,GAAAC,GAAA,EAAAA,EAAAzG,SACAyE,EAAA,SACA1F,EAAA0C,KAAA,QAAA+E,EAAAC,IAEA,MACA,KAAA,EACAD,EAAAwL,EAAAxL,OACA/B,EAAA,SAAA+B,GAEA,OAAAA,IACAA,EAAA,KAIA,QAAAA,GAAA,QAAAA,IACAA,EAAA,GAGA/B,EAAA,SAAA+B,EAAAwL,EAAA0B,cACA3U,EAAA0C,KAAA,SAAA+E,EAAAwL,EAAA0B,cACA3U,EAAAuJ,UAAA,MAMA,IACAvJ,EAAA8T,IAAA3O,KAAAiJ,GACA,MAAAhO,GACAJ,EAAA0C,KAAA,SAAA,EAAA,IACA1C,EAAAuJ,UAAA,KAIAoK,EAAA7R,UAAAyH,SAAA,SAAAqL,GAEA,GADAlP,EAAA,WACAzF,KAAA6T,IAAA,CAYA,GATA7T,KAAA8B,qBACAkG,EAAA4M,UAAA5U,KAAA+T,WAGA/T,KAAA6T,IAAAY,mBAAA,aACAzU,KAAA6T,IAAAK,YACAlU,KAAA6T,IAAAK,UAAA,MAGAS,EACA,IACA3U,KAAA6T,IAAAc,QACA,MAAA3B,IAIAhT,KAAA+T,UAAA/T,KAAA6T,IAAA,OAGAH,EAAA7R,UAAAuD,MAAA,WACAK,EAAA,SACAzF,KAAAsJ,UAAA,IAGAoK,EAAAjL,UAAA+K,EAGA,IAAAqB,EAAA,CAAA,UAAA9Q,OAAA,UAAA8M,KAAA,MACA6C,EAAAjL,SAAAoM,KAAA/U,IACA2F,EAAA,6BAQAiO,EAAAjL,UAAA,IAPA+K,EAAA,WACA,IACA,OAAA,IAAA1T,EAAA+U,GAAA,qBACA,MAAA1U,GACA,OAAA,SAMA,IAAA2U,GAAA,EACA,IACAA,EAAA,oBAAA,IAAAtB,EACA,MAAA7M,IAIA+M,EAAAU,aAAAU,EAEApV,EAAAD,QAAAiU,6OChMAhU,EAAAD,QAAAK,EAAAiV,oKCAA,aAEA,IAAAC,EAAAlV,EAAAmV,WAAAnV,EAAAoV,aAEAxV,EAAAD,QADAuV,EACA,SAAA5N,GACA,OAAA,IAAA4N,EAAA5N,SAGA+N,6ICRA,aAEA,IAAA9T,EAAAZ,EAAA,YACA2U,EAAA3U,EAAA,oBACA4U,EAAA5U,EAAA,0BACA6U,EAAA7U,EAAA,qBACA8U,EAAA9U,EAAA,eAGA,SAAA+U,EAAA1O,GACA,IAAA0O,EAAA/M,UACA,MAAA,IAAA7H,MAAA,mCAGAwU,EAAArU,KAAAf,KAAA8G,EAAA,eAAAuO,EAAAC,GAGAjU,EAAAmU,EAAAJ,GAEAI,EAAA/M,QAAA,WACA,QAAA8M,GAGAC,EAAAxP,cAAA,cACAwP,EAAA1H,WAAA,EAEApO,EAAAD,QAAA+V,kIC1BA,aAEA,IAAAnU,EAAAZ,EAAA,YACAgV,EAAAhV,EAAA,uBACAoH,EAAApH,EAAA,sBACA2U,EAAA3U,EAAA,oBAGA,SAAAiV,EAAA5O,GACA,IAAA2O,EAAAhN,QACA,MAAA,IAAA7H,MAAA,mCAEAwU,EAAArU,KAAAf,KAAA8G,EAAA,YAAA2O,EAAA5N,GAGAxG,EAAAqU,EAAAN,GAEAM,EAAAjN,QAAA,SAAAf,GACA,OAAA+N,EAAAhN,SAAAf,EAAAwB,YAGAwM,EAAA1P,cAAA,WACA0P,EAAA5H,WAAA,EAEApO,EAAAD,QAAAiW,+GCxBA,aAUA,IAAArU,EAAAZ,EAAA,YACA6D,EAAA7D,EAAA,SACAmB,EAAAnB,EAAA,UAAAmB,aACAiF,EAAApG,EAAA,cACA4E,EAAA5E,EAAA,gBACA8D,EAAA9D,EAAA,mBACA6E,EAAA7E,EAAA,kBACAsJ,EAAAtJ,EAAA,mBAGAgF,EAAA,aAKA,SAAAwC,EAAAxD,EAAAqC,EAAAC,GACA,IAAAkB,EAAAQ,UACA,MAAA,IAAA7H,MAAA,mCAEAgB,EAAAb,KAAAf,MAEA,IAAAD,EAAAC,KACAA,KAAAwG,OAAAnB,EAAAuG,UAAA7E,GACA/G,KAAA+G,QAAAA,EACA/G,KAAA8G,SAAAA,EACA9G,KAAAyE,UAAAA,EACAzE,KAAA4G,SAAAmD,EAAAkB,OAAA,GAEA,IAAA0K,EAAAtQ,EAAA+D,QAAArC,EAAA,gBAAA,IAAA/G,KAAA4G,SACAnB,EAAAhB,EAAAqC,EAAA6O,GAEA3V,KAAA4V,UAAArR,EAAAsR,aAAAF,EAAA,SAAAzV,GACAuF,EAAA,gBACA1F,EAAA0C,KAAA,QAAA,KAAA,6BAAAvC,EAAA,KACAH,EAAAqF,UAGApF,KAAA8V,kBAAA9V,KAAA+V,SAAAnR,KAAA5E,MACAsF,EAAAe,YAAA,UAAArG,KAAA8V,mBAGAzU,EAAA4G,EAAArG,GAEAqG,EAAApG,UAAAuD,MAAA,WAGA,GAFAK,EAAA,SACAzF,KAAA8B,qBACA9B,KAAA4V,UAAA,CACAtQ,EAAA0Q,YAAA,UAAAhW,KAAA8V,mBACA,IAGA9V,KAAA8E,YAAA,KACA,MAAAkO,IAGAhT,KAAA4V,UAAAK,UACAjW,KAAA4V,UAAA,KACA5V,KAAA8V,kBAAA9V,KAAA4V,UAAA,OAIA3N,EAAApG,UAAAkU,SAAA,SAAA5V,GAEA,GADAsF,EAAA,UAAAtF,EAAAkE,MACAgB,EAAA2B,cAAA7G,EAAAqG,OAAAxG,KAAAwG,QAAA,CAKA,IAAAC,EACA,IACAA,EAAAnC,EAAAoC,MAAAvG,EAAAkE,MACA,MAAAsC,GAEA,YADAlB,EAAA,WAAAtF,EAAAkE,MAIA,GAAAoC,EAAAG,WAAA5G,KAAA4G,SAKA,OAAAH,EAAA1E,MACA,IAAA,IACA/B,KAAA4V,UAAAM,SAEAlW,KAAA8E,YAAA,IAAAR,EAAAS,UAAA,CACA8B,EACA7G,KAAAyE,UACAzE,KAAA8G,SACA9G,KAAA+G,WAEA,MACA,IAAA,IACA/G,KAAAyC,KAAA,UAAAgE,EAAApC,MACA,MACA,IAAA,IACA,IAAA8R,EACA,IACAA,EAAA7R,EAAAoC,MAAAD,EAAApC,MACA,MAAAsC,GAEA,YADAlB,EAAA,WAAAgB,EAAApC,MAGArE,KAAAyC,KAAA,QAAA0T,EAAA,GAAAA,EAAA,IACAnW,KAAAoF,aA3BAK,EAAA,uBAAAgB,EAAAG,SAAA5G,KAAA4G,eAbAnB,EAAA,kBAAAtF,EAAAqG,OAAAxG,KAAAwG,SA6CAyB,EAAApG,UAAAiD,YAAA,SAAA/C,EAAAsC,GACAoB,EAAA,cAAA1D,EAAAsC,GACArE,KAAA4V,UAAAQ,KAAA9R,EAAAS,UAAA,CACA6B,SAAA5G,KAAA4G,SACA7E,KAAAA,EACAsC,KAAAA,GAAA,KACArE,KAAAwG,SAGAyB,EAAApG,UAAAqD,KAAA,SAAAmR,GACA5Q,EAAA,OAAA4Q,GACArW,KAAA8E,YAAA,IAAAuR,IAGApO,EAAAQ,QAAA,WACA,OAAAlE,EAAA+R,eAGArO,EAAAjC,cAAA,SACAiC,EAAA6F,WAAA,EAEApO,EAAAD,QAAAwI,0LC5IA,aAUA,IAAA5G,EAAAZ,EAAA,YACA8V,EAAA9V,EAAA,yBACA+V,EAAA/V,EAAA,oBACAgW,EAAAhW,EAAA,kBAGA,SAAAiW,EAAA5P,GACA,IAAA4P,EAAAjO,UACA,MAAA,IAAA7H,MAAA,mCAEA2V,EAAAxV,KAAAf,KAAA8G,EAAA,SAAA2P,EAAAD,GAGAnV,EAAAqV,EAAAH,GAEAG,EAAAjO,QAAA,WACA,QAAA3I,EAAAyI,UAGAmO,EAAA1Q,cAAA,gBACA0Q,EAAA5I,WAAA,EACA4I,EAAAjJ,UAAA,EAEA/N,EAAAD,QAAAiX,+NCjCA,aAEA,IAAArV,EAAAZ,EAAA,YACA4E,EAAA5E,EAAA,mBACA8V,EAAA9V,EAAA,qBAGAgF,EAAA,aAmCA,SAAA2P,EAAAtO,EAAA6P,EAAAC,EAAAvP,GACAkP,EAAAxV,KAAAf,KAAA8G,EAAA6P,EA/BA,SAAAtP,GACA,OAAA,SAAAD,EAAA+G,EAAA0I,GACApR,EAAA,qBAAA2B,EAAA+G,GACA,IAAA2I,EAAA,GACA,iBAAA3I,IACA2I,EAAAxC,QAAA,CAAAyC,eAAA,eAEA,IAAAC,EAAA3R,EAAA+D,QAAAhC,EAAA,aACAG,EAAA,IAAAF,EAAA,OAAA2P,EAAA7I,EAAA2I,GAUA,OATAvP,EAAAtF,KAAA,SAAA,SAAAuF,GAIA,GAHA/B,EAAA,SAAA+B,GACAD,EAAA,KAEA,MAAAC,GAAA,MAAAA,EACA,OAAAqP,EAAA,IAAAjW,MAAA,eAAA4G,IAEAqP,MAEA,WACApR,EAAA,SACA8B,EAAAnC,QACAmC,EAAA,KAEA,IAAA0P,EAAA,IAAArW,MAAA,WACAqW,EAAApW,KAAA,IACAgW,EAAAI,KAMAC,CAAA7P,GAAAuP,EAAAvP,GAGAhG,EAAA+T,EAAAmB,GAEA7W,EAAAD,QAAA2V,mGChDA,aAEA,IAAA/T,EAAAZ,EAAA,YACAmB,EAAAnB,EAAA,UAAAmB,aAGA6D,EAAA,aAKA,SAAA0R,EAAA/P,EAAAgQ,GACA3R,EAAA2B,GACAxF,EAAAb,KAAAf,MACAA,KAAAqX,WAAA,GACArX,KAAAoX,OAAAA,EACApX,KAAAoH,IAAAA,EAGA/F,EAAA8V,EAAAvV,GAEAuV,EAAAtV,UAAAqD,KAAA,SAAAmR,GACA5Q,EAAA,OAAA4Q,GACArW,KAAAqX,WAAA1G,KAAA0F,GACArW,KAAAsX,UACAtX,KAAAuX,gBAYAJ,EAAAtV,UAAA2V,iBAAA,WACA/R,EAAA,oBACA,IACAgS,EADA1X,EAAAC,KAEAA,KAAAsX,SAAA,WACA7R,EAAA,YACA1F,EAAAuX,SAAA,KACA9N,aAAAiO,IAEAA,EAAAtW,WAAA,WACAsE,EAAA,WACA1F,EAAAuX,SAAA,KACAvX,EAAAwX,gBACA,KAGAJ,EAAAtV,UAAA0V,aAAA,WACA9R,EAAA,eAAAzF,KAAAqX,WAAArW,QACA,IAAAjB,EAAAC,KACA,GAAA,EAAAA,KAAAqX,WAAArW,OAAA,CACA,IAAAmN,EAAA,IAAAnO,KAAAqX,WAAAxG,KAAA,KAAA,IACA7Q,KAAAsX,SAAAtX,KAAAoX,OAAApX,KAAAoH,IAAA+G,EAAA,SAAA8I,GACAlX,EAAAuX,SAAA,KACAL,GACAxR,EAAA,QAAAwR,GACAlX,EAAA0C,KAAA,QAAAwU,EAAApW,MAAA,KAAA,kBAAAoW,GACAlX,EAAAqF,SAEArF,EAAAyX,qBAGAxX,KAAAqX,WAAA,KAIAF,EAAAtV,UAAAyH,SAAA,WACA7D,EAAA,YACAzF,KAAA8B,sBAGAqV,EAAAtV,UAAAuD,MAAA,WACAK,EAAA,SACAzF,KAAAsJ,WACAtJ,KAAAsX,WACAtX,KAAAsX,WACAtX,KAAAsX,SAAA,OAIA5X,EAAAD,QAAA0X,+ECtFA,aAEA,IAAA9V,EAAAZ,EAAA,YACAwH,EAAAxH,EAAA,aACAyG,EAAAzG,EAAA,sBAGAf,EAAAD,QAAA,SAAAgF,GAEA,SAAAiT,EAAA5Q,EAAAC,GACAkB,EAAAlH,KAAAf,KAAAyE,EAAAuB,cAAAc,EAAAC,GAqBA,OAlBA1F,EAAAqW,EAAAzP,GAEAyP,EAAAjP,QAAA,SAAArB,EAAAM,GACA,IAAA5H,EAAAyI,SACA,OAAA,EAGA,IAAAoP,EAAAzQ,EAAA+F,OAAA,GAAAvF,GAEA,OADAiQ,EAAAzO,YAAA,EACAzE,EAAAgE,QAAAkP,IAAA1P,EAAAQ,WAGAiP,EAAA1R,cAAA,UAAAvB,EAAAuB,cACA0R,EAAAjK,UAAA,EACAiK,EAAA5J,WAAA7F,EAAA6F,WAAArJ,EAAAqJ,WAAA,EAEA4J,EAAA3R,gBAAAtB,EAEAiT,kMC/BA,aAEA,IAAArW,EAAAZ,EAAA,YACAmB,EAAAnB,EAAA,UAAAmB,aAGA6D,EAAA,aAKA,SAAAmS,EAAAhB,EAAAiB,EAAAxQ,GACA5B,EAAAoS,GACAjW,EAAAb,KAAAf,MACAA,KAAA4W,SAAAA,EACA5W,KAAA6X,WAAAA,EACA7X,KAAAqH,WAAAA,EACArH,KAAA8X,oBAGAzW,EAAAuW,EAAAhW,GAEAgW,EAAA/V,UAAAiW,kBAAA,WACArS,EAAA,qBACA,IAAA1F,EAAAC,KACA+X,EAAA/X,KAAA+X,KAAA,IAAA/X,KAAA4W,SAAA5W,KAAA6X,WAAA7X,KAAAqH,YAEA0Q,EAAA3V,GAAA,UAAA,SAAAiG,GACA5C,EAAA,UAAA4C,GACAtI,EAAA0C,KAAA,UAAA4F,KAGA0P,EAAA9V,KAAA,QAAA,SAAApB,EAAAa,GACA+D,EAAA,QAAA5E,EAAAa,EAAA3B,EAAAiY,eACAjY,EAAAgY,KAAAA,EAAA,KAEAhY,EAAAiY,gBACA,YAAAtW,EACA3B,EAAA+X,qBAEA/X,EAAA0C,KAAA,QAAA5B,GAAA,KAAAa,GACA3B,EAAA+B,0BAMA8V,EAAA/V,UAAA8S,MAAA,WACAlP,EAAA,SACAzF,KAAA8B,qBACA9B,KAAAgY,eAAA,EACAhY,KAAA+X,MACA/X,KAAA+X,KAAApD,SAIAjV,EAAAD,QAAAmY,kECxDA,aAEA,IAAAvW,EAAAZ,EAAA,YACA4E,EAAA5E,EAAA,mBACA0W,EAAA1W,EAAA,qBACAmX,EAAAnX,EAAA,aAGAgF,EAAA,aAKA,SAAA8Q,EAAAzP,EAAA6P,EAAAsB,EAAArB,EAAAvP,GACA,IAAA6Q,EAAA7S,EAAA+D,QAAAtC,EAAA6P,GACAlR,EAAAyS,GACA,IAAAnY,EAAAC,KACAmX,EAAApW,KAAAf,KAAA8G,EAAAmR,GAEAjY,KAAA+X,KAAA,IAAAH,EAAAhB,EAAAsB,EAAA7Q,GACArH,KAAA+X,KAAA3V,GAAA,UAAA,SAAAiG,GACA5C,EAAA,eAAA4C,GACAtI,EAAA0C,KAAA,UAAA4F,KAEArI,KAAA+X,KAAA9V,KAAA,QAAA,SAAApB,EAAAa,GACA+D,EAAA,aAAA5E,EAAAa,GACA3B,EAAAgY,KAAA,KACAhY,EAAA0C,KAAA,QAAA5B,EAAAa,GACA3B,EAAAqF,UAIA/D,EAAAkV,EAAAY,GAEAZ,EAAA1U,UAAAuD,MAAA,WACA+R,EAAAtV,UAAAuD,MAAArE,KAAAf,MACAyF,EAAA,SACAzF,KAAA8B,qBACA9B,KAAA+X,OACA/X,KAAA+X,KAAApD,QACA3U,KAAA+X,KAAA,OAIArY,EAAAD,QAAA8W,kHC5CA,aAEA,IAAAlV,EAAAZ,EAAA,YACAmB,EAAAnB,EAAA,UAAAmB,aACA2T,EAAA9U,EAAA,eAGAgF,EAAA,aAKA,SAAA4P,EAAAjO,GACA3B,EAAA2B,GACAxF,EAAAb,KAAAf,MAEA,IAAAD,EAAAC,KACAmY,EAAAnY,KAAAmY,GAAA,IAAA5C,EAAAnO,GACA+Q,EAAA5J,UAAA,SAAApO,GACAsF,EAAA,UAAAtF,EAAAkE,MACAtE,EAAA0C,KAAA,UAAA2V,UAAAjY,EAAAkE,QAEA8T,EAAA1J,QAAA,SAAAtO,GACAsF,EAAA,QAAA0S,EAAA7N,WAAAnK,GAGA,IAAAuB,EAAA,IAAAyW,EAAA7N,WAAA,UAAA,YACAvK,EAAAuJ,WACAvJ,EAAAoF,OAAAzD,IAIAL,EAAAgU,EAAAzT,GAEAyT,EAAAxT,UAAA8S,MAAA,WACAlP,EAAA,SACAzF,KAAAsJ,WACAtJ,KAAAmF,OAAA,SAGAkQ,EAAAxT,UAAAyH,SAAA,WACA7D,EAAA,WACA,IAAA0S,EAAAnY,KAAAmY,GACAA,IACAA,EAAA5J,UAAA4J,EAAA1J,QAAA,KACA0J,EAAA/S,QACApF,KAAAmY,GAAA,OAIA9C,EAAAxT,UAAAsD,OAAA,SAAAzD,GACA+D,EAAA,QAAA/D,GACA,IAAA3B,EAAAC,KAIAmB,WAAA,WACApB,EAAA0C,KAAA,QAAA,KAAAf,GACA3B,EAAA+B,sBACA,MAGApC,EAAAD,QAAA4V,gGC9DA,aAEA,IAAAhU,EAAAZ,EAAA,YACA8D,EAAA9D,EAAA,sBACA4E,EAAA5E,EAAA,mBACAmB,EAAAnB,EAAA,UAAAmB,aACAmI,EAAAtJ,EAAA,sBAGAgF,EAAA,aAKA,SAAAgQ,EAAArO,GACA3B,EAAA2B,GACAxF,EAAAb,KAAAf,MACA,IAAAD,EAAAC,KACAuE,EAAA8T,yBAEArY,KAAAsY,GAAA,IAAAvO,EAAAkB,OAAA,GACA7D,EAAA/B,EAAAyO,SAAA1M,EAAA,KAAAmR,mBAAAhU,EAAAiU,QAAA,IAAAxY,KAAAsY,KAEA7S,EAAA,iBAAAgQ,EAAAgD,iBACA,IAAAC,EAAAjD,EAAAgD,gBACAlU,EAAAoU,eAAApU,EAAAsR,aAEA/V,EAAAyE,EAAAiU,SAAAxY,KAAAsY,IAAA,CACA/E,MAAA,WACA9N,EAAA,SACA1F,EAAA6V,UAAAM,UAEAG,QAAA,SAAAhS,GACAoB,EAAA,UAAApB,GACAtE,EAAA0C,KAAA,UAAA4B,IAEAuU,KAAA,WACAnT,EAAA,QACA1F,EAAAuJ,WACAvJ,EAAAoF,OAAA,aAGAnF,KAAA4V,UAAA8C,EAAAtR,EAAA,WACA3B,EAAA,YACA1F,EAAAuJ,WACAvJ,EAAAoF,OAAA,eAIA9D,EAAAoU,EAAA7T,GAEA6T,EAAA5T,UAAA8S,MAAA,WACAlP,EAAA,SACAzF,KAAAsJ,WACAtJ,KAAAmF,OAAA,SAGAsQ,EAAA5T,UAAAyH,SAAA,WACA7D,EAAA,YACAzF,KAAA4V,YACA5V,KAAA4V,UAAAK,UACAjW,KAAA4V,UAAA,aAEA9V,EAAAyE,EAAAiU,SAAAxY,KAAAsY,KAGA7C,EAAA5T,UAAAsD,OAAA,SAAAzD,GACA+D,EAAA,SAAA/D,GACA1B,KAAAyC,KAAA,QAAA,KAAAf,GACA1B,KAAA8B,sBAGA2T,EAAAgD,iBAAA,EAGA,IAAA5D,EAAA,CAAA,UAAA9Q,OAAA,UAAA8M,KAAA,KACA,GAAAgE,KAAA/U,EACA,IACA2V,EAAAgD,kBAAA,IAAA3Y,EAAA+U,GAAA,YACA,MAAA7B,IAKAyC,EAAAhN,QAAAgN,EAAAgD,iBAAAlU,EAAA+R,cAEA5W,EAAAD,QAAAgW,sQCtFA,aAEA,IAAAzN,EAAAvH,EAAA,sBACAsJ,EAAAtJ,EAAA,sBACAwJ,EAAAxJ,EAAA,uBACA4E,EAAA5E,EAAA,mBACAY,EAAAZ,EAAA,YACAmB,EAAAnB,EAAA,UAAAmB,aAGA6D,EAAA,aAKA,SAAA+Q,EAAApP,GACA3B,EAAA2B,GACA,IAAArH,EAAAC,KACA4B,EAAAb,KAAAf,MAEAgI,EAAAqQ,yBAEArY,KAAAsY,GAAA,IAAAvO,EAAAkB,OAAA,GACA,IAAA4N,EAAAxT,EAAAyO,SAAA1M,EAAA,KAAA0R,mBAAA9Q,EAAAwQ,QAAA,IAAAxY,KAAAsY,KAEAxY,EAAAkI,EAAAwQ,SAAAxY,KAAAsY,IAAAtY,KAAA+Y,UAAAnU,KAAA5E,MACAA,KAAAgZ,cAAAH,GAGA7Y,KAAAiZ,UAAA9X,WAAA,WACAsE,EAAA,WACA1F,EAAAmZ,OAAA,IAAAtY,MAAA,8CACA4V,EAAAjN,SAGAlI,EAAAmV,EAAA5U,GAEA4U,EAAA3U,UAAA8S,MAAA,WAEA,GADAlP,EAAA,SACA3F,EAAAkI,EAAAwQ,SAAAxY,KAAAsY,IAAA,CACA,IAAArB,EAAA,IAAArW,MAAA,2BACAqW,EAAApW,KAAA,IACAb,KAAAkZ,OAAAjC,KAIAT,EAAAjN,QAAA,KACAiN,EAAA2C,mBAAA,IAEA3C,EAAA3U,UAAAkX,UAAA,SAAA1U,GACAoB,EAAA,YAAApB,GACArE,KAAAsJ,WAEAtJ,KAAAoZ,WAIA/U,IACAoB,EAAA,UAAApB,GACArE,KAAAyC,KAAA,UAAA4B,IAEArE,KAAAyC,KAAA,QAAA,KAAA,WACAzC,KAAA8B,uBAGA0U,EAAA3U,UAAAqX,OAAA,SAAAjC,GACAxR,EAAA,SAAAwR,GACAjX,KAAAsJ,WACAtJ,KAAAoZ,UAAA,EACApZ,KAAAyC,KAAA,QAAAwU,EAAApW,KAAAoW,EAAAZ,SACArW,KAAA8B,sBAGA0U,EAAA3U,UAAAyH,SAAA,WAOA,GANA7D,EAAA,YACA+D,aAAAxJ,KAAAiZ,WACAjZ,KAAAqZ,UACArZ,KAAAqZ,QAAAC,WAAAC,YAAAvZ,KAAAqZ,SACArZ,KAAAqZ,QAAA,MAEArZ,KAAAwZ,OAAA,CACA,IAAAA,EAAAxZ,KAAAwZ,OAGAA,EAAAF,WAAAC,YAAAC,GACAA,EAAA/E,mBAAA+E,EAAA/K,QACA+K,EAAAC,OAAAD,EAAAE,QAAA,KACA1Z,KAAAwZ,OAAA,YAEA1Z,EAAAkI,EAAAwQ,SAAAxY,KAAAsY,KAGA9B,EAAA3U,UAAA8X,aAAA,WACAlU,EAAA,gBACA,IAAA1F,EAAAC,KACAA,KAAA4Z,aAIA5Z,KAAA4Z,WAAAzY,WAAA,WACApB,EAAA8Z,YACA9Z,EAAAmZ,OAAA,IAAAtY,MAAA,8CAEA4V,EAAA2C,sBAGA3C,EAAA3U,UAAAmX,cAAA,SAAA5R,GACA3B,EAAA,gBAAA2B,GACA,IAEAiS,EAFAtZ,EAAAC,KACAwZ,EAAAxZ,KAAAwZ,OAAA1Z,EAAAyI,SAAAuR,cAAA,UA0CA,GAvCAN,EAAAlB,GAAA,IAAAvO,EAAAkB,OAAA,GACAuO,EAAAO,IAAA3S,EACAoS,EAAAzX,KAAA,kBACAyX,EAAAQ,QAAA,QACAR,EAAA/K,QAAAzO,KAAA2Z,aAAA/U,KAAA5E,MACAwZ,EAAAC,OAAA,WACAhU,EAAA,UACA1F,EAAAmZ,OAAA,IAAAtY,MAAA,6CAKA4Y,EAAA/E,mBAAA,WAEA,GADAhP,EAAA,qBAAA+T,EAAAlP,YACA,gBAAA6I,KAAAqG,EAAAlP,YAAA,CACA,GAAAkP,GAAAA,EAAAS,SAAAT,EAAAE,QAAA,CACA3Z,EAAA8Z,YAAA,EACA,IAEAL,EAAAE,UACA,MAAA1G,KAIAwG,GACAzZ,EAAAmZ,OAAA,IAAAtY,MAAA,+DAcA,IAAA4Y,EAAAU,OAAApa,EAAAyI,SAAAlC,YAIA,GAAA4D,EAAAkQ,WAWAd,EAAArZ,KAAAqZ,QAAAvZ,EAAAyI,SAAAuR,cAAA,WACArS,KAAA,wCAAA+R,EAAAlB,GAAA,oCACAkB,EAAAU,MAAAb,EAAAa,OAAA,MAbA,CAEA,IACAV,EAAAS,QAAAT,EAAAlB,GACAkB,EAAArV,MAAA,UACA,MAAA6O,IAGAwG,EAAAU,OAAA,OAQA,IAAAV,EAAAU,QACAV,EAAAU,OAAA,GAGA,IAAAE,EAAAta,EAAAyI,SAAA8R,qBAAA,QAAA,GACAD,EAAAE,aAAAd,EAAAY,EAAAG,YACAlB,GACAe,EAAAE,aAAAjB,EAAAe,EAAAG,aAIA7a,EAAAD,QAAA+W,kRCtLA,aAEA,IAAAnV,EAAAZ,EAAA,YACAmB,EAAAnB,EAAA,UAAAmB,aAGA6D,EAAA,aAKA,SAAA+U,EAAApT,EAAAC,GACA5B,EAAA2B,GACAxF,EAAAb,KAAAf,MACA,IAAAD,EAAAC,KAEAA,KAAAya,eAAA,EAEAza,KAAAuH,GAAA,IAAAF,EAAA,OAAAD,EAAA,MACApH,KAAAuH,GAAAnF,GAAA,QAAApC,KAAA0a,cAAA9V,KAAA5E,OACAA,KAAAuH,GAAAtF,KAAA,SAAA,SAAAuF,EAAAC,GACAhC,EAAA,SAAA+B,EAAAC,GACA1H,EAAA2a,cAAAlT,EAAAC,GACA1H,EAAAwH,GAAA,KACA,IAAA7F,EAAA,MAAA8F,EAAA,UAAA,YACA/B,EAAA,QAAA/D,GACA3B,EAAA0C,KAAA,QAAA,KAAAf,GACA3B,EAAAuJ,aAIAjI,EAAAmZ,EAAA5Y,GAEA4Y,EAAA3Y,UAAA6Y,cAAA,SAAAlT,EAAAC,GAEA,GADAhC,EAAA,gBAAA+B,GACA,MAAAA,GAAAC,EAIA,IAAA,IAAAzD,GAAA,GAAAhE,KAAAya,gBAAAzW,EAAA,EAAA,CACA,IAAA2W,EAAAlT,EAAAxD,MAAAjE,KAAAya,gBAEA,IAAA,KADAzW,EAAA2W,EAAA7W,QAAA,OAEA,MAEA,IAAAuE,EAAAsS,EAAA1W,MAAA,EAAAD,GACAqE,IACA5C,EAAA,UAAA4C,GACArI,KAAAyC,KAAA,UAAA4F,MAKAmS,EAAA3Y,UAAAyH,SAAA,WACA7D,EAAA,YACAzF,KAAA8B,sBAGA0Y,EAAA3Y,UAAA8S,MAAA,WACAlP,EAAA,SACAzF,KAAAuH,KACAvH,KAAAuH,GAAAnC,QACAK,EAAA,SACAzF,KAAAyC,KAAA,QAAA,KAAA,QACAzC,KAAAuH,GAAA,MAEAvH,KAAAsJ,YAGA5J,EAAAD,QAAA+a,+ECrEA,aAEA,IASAI,EAAAC,EATA9Q,EAAAtJ,EAAA,sBACA4E,EAAA5E,EAAA,mBAGAgF,EAAA,aAmCA/F,EAAAD,QAAA,SAAA2H,EAAA+G,EAAA0I,GACApR,EAAA2B,EAAA+G,GACAyM,IAjBAnV,EAAA,eACAmV,EAAA9a,EAAAyI,SAAAuR,cAAA,SACAgB,MAAAC,QAAA,OACAH,EAAAE,MAAAE,SAAA,WACAJ,EAAAhL,OAAA,OACAgL,EAAAK,QAAA,oCACAL,EAAAM,cAAA,SAEAL,EAAA/a,EAAAyI,SAAAuR,cAAA,aACAnK,KAAA,IACAiL,EAAAO,YAAAN,GAEA/a,EAAAyI,SAAAC,KAAA2S,YAAAP,IAQA,IAAAtC,EAAA,IAAAvO,EAAAkB,OAAA,GACA2P,EAAApK,OAAA8H,EACAsC,EAAAQ,OAAA/V,EAAAyO,SAAAzO,EAAA+D,QAAAhC,EAAA,eAAA,KAAAkR,GAEA,IAAA+C,EArCA,SAAA/C,GACA7S,EAAA,eAAA6S,GACA,IAEA,OAAAxY,EAAAyI,SAAAuR,cAAA,iBAAAxB,EAAA,MACA,MAAAtF,GACA,IAAAqI,EAAAvb,EAAAyI,SAAAuR,cAAA,UAEA,OADAuB,EAAA1L,KAAA2I,EACA+C,GA6BAxF,CAAAyC,GACA+C,EAAA/C,GAAAA,EACA+C,EAAAP,MAAAC,QAAA,OACAH,EAAAO,YAAAE,GAEA,IACAR,EAAA5K,MAAA9B,EACA,MAAAhO,IAGAya,EAAAU,SAEA,SAAAC,EAAAtE,GACAxR,EAAA,YAAA6S,EAAArB,GACAoE,EAAA5M,UAGA4M,EAAA5G,mBAAA4G,EAAA5M,QAAA4M,EAAA5B,OAAA,KAGAtY,WAAA,WACAsE,EAAA,cAAA6S,GACA+C,EAAA/B,WAAAC,YAAA8B,GACAA,EAAA,MACA,KACAR,EAAA5K,MAAA,GAGA4G,EAAAI,IAgBA,OAdAoE,EAAA5M,QAAA,WACAhJ,EAAA,UAAA6S,GACAiD,KAEAF,EAAA5B,OAAA,WACAhU,EAAA,SAAA6S,GACAiD,KAEAF,EAAA5G,mBAAA,SAAAtU,GACAsF,EAAA,qBAAA6S,EAAA+C,EAAA/Q,WAAAnK,GACA,aAAAkb,EAAA/Q,YACAiR,KAGA,WACA9V,EAAA,UAAA6S,GACAiD,EAAA,IAAA3a,MAAA,iOChGA,aAEA,IAAAgB,EAAAnB,EAAA,UAAAmB,aACAP,EAAAZ,EAAA,YACA6E,EAAA7E,EAAA,qBACAwJ,EAAAxJ,EAAA,uBACA4E,EAAA5E,EAAA,mBAGAgF,EAAA,aASA,SAAA+V,EAAA5L,EAAAxI,EAAA+G,GACA1I,EAAAmK,EAAAxI,GACA,IAAArH,EAAAC,KACA4B,EAAAb,KAAAf,MAEAmB,WAAA,WACApB,EAAA6T,OAAAhE,EAAAxI,EAAA+G,IACA,GAGA9M,EAAAma,EAAA5Z,GAEA4Z,EAAA3Z,UAAA+R,OAAA,SAAAhE,EAAAxI,EAAA+G,GACA1I,EAAA,UACA,IAAA1F,EAAAC,KACAyb,EAAA,IAAA3b,EAAA4b,eAEAtU,EAAA/B,EAAAyO,SAAA1M,EAAA,OAAA,IAAA7D,MAEAkY,EAAAhN,QAAA,WACAhJ,EAAA,WACA1F,EAAA4b,UAEAF,EAAAvH,UAAA,WACAzO,EAAA,aACA1F,EAAA4b,UAEAF,EAAAG,WAAA,WACAnW,EAAA,WAAAgW,EAAA/G,cACA3U,EAAA0C,KAAA,QAAA,IAAAgZ,EAAA/G,eAEA+G,EAAAhC,OAAA,WACAhU,EAAA,QACA1F,EAAA0C,KAAA,SAAA,IAAAgZ,EAAA/G,cACA3U,EAAAuJ,UAAA,IAEAtJ,KAAAyb,IAAAA,EACAzb,KAAA+T,UAAAzO,EAAA0O,UAAA,WACAjU,EAAAuJ,UAAA,KAEA,IAEAtJ,KAAAyb,IAAAxH,KAAArE,EAAAxI,GACApH,KAAAuJ,UACAvJ,KAAAyb,IAAAlS,QAAAvJ,KAAAuJ,SAEAvJ,KAAAyb,IAAAvW,KAAAiJ,GACA,MAAA6E,GACAhT,KAAA2b,WAIAH,EAAA3Z,UAAA8Z,OAAA,WACA3b,KAAAyC,KAAA,SAAA,EAAA,IACAzC,KAAAsJ,UAAA,IAGAkS,EAAA3Z,UAAAyH,SAAA,SAAAqL,GAEA,GADAlP,EAAA,UAAAkP,GACA3U,KAAAyb,IAAA,CAOA,GAJAzb,KAAA8B,qBACAwD,EAAAsP,UAAA5U,KAAA+T,WAEA/T,KAAAyb,IAAAvH,UAAAlU,KAAAyb,IAAAhN,QAAAzO,KAAAyb,IAAAG,WAAA5b,KAAAyb,IAAAhC,OAAA,KACA9E,EACA,IACA3U,KAAAyb,IAAA9G,QACA,MAAA3B,IAIAhT,KAAA+T,UAAA/T,KAAAyb,IAAA,OAGAD,EAAA3Z,UAAAuD,MAAA,WACAK,EAAA,SACAzF,KAAAsJ,UAAA,IAIAkS,EAAA/S,WAAA3I,EAAA4b,iBAAAzR,EAAAmC,aAEA1M,EAAAD,QAAA+b,yPCtGA,aAEA,IAAAna,EAAAZ,EAAA,YACAob,EAAApb,EAAA,iBAGA,SAAA6U,EAAA1F,EAAAxI,EAAA+G,EAAAwF,GACAkI,EAAA9a,KAAAf,KAAA4P,EAAAxI,EAAA+G,EAAAwF,GAGAtS,EAAAiU,EAAAuG,GAEAvG,EAAA7M,QAAAoT,EAAApT,SAAAoT,EAAAzH,aAEA1U,EAAAD,QAAA6V,2DCdA,aAEA,IAAA1T,EAAAnB,EAAA,UAAAmB,aAIA,SAAAiH,IACA,IAAA9I,EAAAC,KACA4B,EAAAb,KAAAf,MAEAA,KAAA8b,GAAA3a,WAAA,WACApB,EAAA0C,KAAA,SAAA,IAAA,OACAoG,EAAAU,SATA9I,EAAA,WAYAY,CAAAwH,EAAAjH,GAEAiH,EAAAhH,UAAAuD,MAAA,WACAoE,aAAAxJ,KAAA8b,KAGAjT,EAAAU,QAAA,IAEA7J,EAAAD,QAAAoJ,mDCvBA,aAEA,IAAAxH,EAAAZ,EAAA,YACAob,EAAApb,EAAA,iBAGA,SAAAoH,EAAA+H,EAAAxI,EAAA+G,GACA0N,EAAA9a,KAAAf,KAAA4P,EAAAxI,EAAA+G,EAAA,CACAgG,eAAA,IAIA9S,EAAAwG,EAAAgU,GAEAhU,EAAAY,QAAAoT,EAAApT,QAEA/I,EAAAD,QAAAoI,2DChBA,aAEA,IAAAG,EAAAvH,EAAA,kBACA4E,EAAA5E,EAAA,gBACAY,EAAAZ,EAAA,YACAmB,EAAAnB,EAAA,UAAAmB,aACAma,EAAAtb,EAAA,sBAGAgF,EAAA,aAKA,SAAAuW,EAAAlV,EAAAmV,EAAA7R,GACA,IAAA4R,EAAAvT,UACA,MAAA,IAAA7H,MAAA,mCAGAgB,EAAAb,KAAAf,MACAyF,EAAA,cAAAqB,GAEA,IAAA/G,EAAAC,KACAoH,EAAA/B,EAAA+D,QAAAtC,EAAA,cAEAM,EADA,UAAAA,EAAAnD,MAAA,EAAA,GACA,MAAAmD,EAAAnD,MAAA,GAEA,KAAAmD,EAAAnD,MAAA,GAEAjE,KAAAoH,IAAAA,EAEApH,KAAAkc,GAAA,IAAAH,EAAA/b,KAAAoH,IAAA,GAAAgD,GACApK,KAAAkc,GAAA3N,UAAA,SAAApO,GACAsF,EAAA,gBAAAtF,EAAAkE,MACAtE,EAAA0C,KAAA,UAAAtC,EAAAkE,OAQArE,KAAA+T,UAAA/L,EAAAgM,UAAA,WACAvO,EAAA,UACA1F,EAAAmc,GAAA9W,UAEApF,KAAAkc,GAAA1N,QAAA,SAAArO,GACAsF,EAAA,cAAAtF,EAAAU,KAAAV,EAAAuB,QACA3B,EAAA0C,KAAA,QAAAtC,EAAAU,KAAAV,EAAAuB,QACA3B,EAAAuJ,YAEAtJ,KAAAkc,GAAAzN,QAAA,SAAAtO,GACAsF,EAAA,cAAAtF,GACAJ,EAAA0C,KAAA,QAAA,KAAA,+BACA1C,EAAAuJ,YAIAjI,EAAA2a,EAAApa,GAEAoa,EAAAna,UAAAqD,KAAA,SAAAb,GACA,IAAAgE,EAAA,IAAAhE,EAAA,IACAoB,EAAA,OAAA4C,GACArI,KAAAkc,GAAAhX,KAAAmD,IAGA2T,EAAAna,UAAAuD,MAAA,WACAK,EAAA,SACA,IAAAyW,EAAAlc,KAAAkc,GACAlc,KAAAsJ,WACA4S,GACAA,EAAA9W,SAIA4W,EAAAna,UAAAyH,SAAA,WACA7D,EAAA,YACA,IAAAyW,EAAAlc,KAAAkc,GACAA,IACAA,EAAA3N,UAAA2N,EAAA1N,QAAA0N,EAAAzN,QAAA,MAEAzG,EAAA4M,UAAA5U,KAAA+T,WACA/T,KAAA+T,UAAA/T,KAAAkc,GAAA,KACAlc,KAAA8B,sBAGAka,EAAAvT,QAAA,WAEA,OADAhD,EAAA,aACAsW,GAEAC,EAAAhW,cAAA,YAMAgW,EAAAlO,WAAA,EAEApO,EAAAD,QAAAuc,gIClGA,aAEA,IAAA3a,EAAAZ,EAAA,YACA2U,EAAA3U,EAAA,oBACA0b,EAAA1b,EAAA,mBACA+Z,EAAA/Z,EAAA,kBACA+a,EAAA/a,EAAA,gBAGA,SAAA2b,EAAAtV,GACA,IAAA0U,EAAA/S,QACA,MAAA,IAAA7H,MAAA,mCAEAwU,EAAArU,KAAAf,KAAA8G,EAAA,OAAA0T,EAAAgB,GAGAna,EAAA+a,EAAAhH,GAEAgH,EAAA3T,QAAA0T,EAAA1T,QACA2T,EAAApW,cAAA,cACAoW,EAAAtO,WAAA,EAEApO,EAAAD,QAAA2c,yHCtBA,aAEA,IAAA/a,EAAAZ,EAAA,YACA2U,EAAA3U,EAAA,oBACA+Z,EAAA/Z,EAAA,kBACA+a,EAAA/a,EAAA,gBAOA,SAAA0b,EAAArV,GACA,IAAA0U,EAAA/S,QACA,MAAA,IAAA7H,MAAA,mCAEAwU,EAAArU,KAAAf,KAAA8G,EAAA,iBAAA0T,EAAAgB,GAGAna,EAAA8a,EAAA/G,GAEA+G,EAAA1T,QAAA,SAAAf,GACA,OAAAA,EAAA2U,gBAAA3U,EAAAyE,aAGAqP,EAAA/S,SAAAf,EAAAyB,aAGAgT,EAAAnW,cAAA,gBACAmW,EAAArO,WAAA,EAEApO,EAAAD,QAAA0c,oGC/BA,aAEA,IAAA9a,EAAAZ,EAAA,YACA2U,EAAA3U,EAAA,oBACA+Z,EAAA/Z,EAAA,kBACA6U,EAAA7U,EAAA,qBACAoH,EAAApH,EAAA,sBAGA,SAAA6b,EAAAxV,GACA,IAAAe,EAAAY,UAAA6M,EAAA7M,QACA,MAAA,IAAA7H,MAAA,mCAEAwU,EAAArU,KAAAf,KAAA8G,EAAA,OAAA0T,EAAAlF,GAGAjU,EAAAib,EAAAlH,GAEAkH,EAAA7T,QAAA,SAAAf,GACA,OAAAA,EAAAyE,gBAIAtE,EAAAY,UAAAf,EAAAwB,aAGAoM,EAAA7M,UAGA6T,EAAAtW,cAAA,cACAsW,EAAAxO,WAAA,EAEApO,EAAAD,QAAA6c,8IChCA,aAEA,IAAAjb,EAAAZ,EAAA,YACA2U,EAAA3U,EAAA,oBACA+Z,EAAA/Z,EAAA,kBACA6U,EAAA7U,EAAA,qBACAoH,EAAApH,EAAA,sBACAwJ,EAAAxJ,EAAA,oBAGA,SAAA8b,EAAAzV,GACA,IAAAe,EAAAY,UAAA6M,EAAA7M,QACA,MAAA,IAAA7H,MAAA,mCAEAwU,EAAArU,KAAAf,KAAA8G,EAAA,iBAAA0T,EAAAlF,GAGAjU,EAAAkb,EAAAnH,GAEAmH,EAAA9T,QAAA,SAAAf,GACA,OAAAA,EAAAyE,cAKAlC,EAAAkQ,WAIA7E,EAAA7M,UAGA8T,EAAAvW,cAAA,gBACAuW,EAAAzO,WAAA,EAKAyO,EAAA9O,WAAA3N,EAAAyI,SAEA7I,EAAAD,QAAA8c,sRCxCA,aAEAzc,EAAA0c,QAAA1c,EAAA0c,OAAAC,gBACA/c,EAAAD,QAAAid,YAAA,SAAA1b,GACA,IAAA2b,EAAA,IAAAC,WAAA5b,GAEA,OADAlB,EAAA0c,OAAAC,gBAAAE,GACAA,GAGAjd,EAAAD,QAAAid,YAAA,SAAA1b,GAEA,IADA,IAAA2b,EAAA,IAAA9Z,MAAA7B,GACAT,EAAA,EAAAA,EAAAS,EAAAT,IACAoc,EAAApc,GAAAqN,KAAAgE,MAAA,IAAAhE,KAAA7D,UAEA,OAAA4S,2JCdA,aAEAjd,EAAAD,QAAA,CACA0a,QAAA,WACA,OAAAra,EAAA+c,WACA,SAAA1J,KAAArT,EAAA+c,UAAAC,YAGAC,YAAA,WACA,OAAAjd,EAAA+c,WACA,aAAA1J,KAAArT,EAAA+c,UAAAC,YAIA1Q,UAAA,WAEA,IAAAtM,EAAAyI,SACA,OAAA,EAGA,IACA,QAAAzI,EAAAyI,SAAAyU,OACA,MAAA7c,GACA,OAAA,gJCvBA,aAEA,IAMA8c,EANA3Y,EAAA7D,EAAA,SAKAyc,EAAA,0/BAwBAxd,EAAAD,QAAA,CACAmN,MAAA,SAAA3B,GACA,IAAAkS,EAAA7Y,EAAAS,UAAAkG,GAIA,OADAiS,EAAA5K,UAAA,EACA4K,EAAA/J,KAAAgK,IAKAF,EADAA,GA7BA,SAAAG,GACA,IAAA7c,EACA8c,EAAA,GACA7c,EAAA,GACA,IAAAD,EAAA,EAAAA,EAAA,MAAAA,IACAC,EAAAmQ,KAAApB,OAAA+N,aAAA/c,IAQA,OANA6c,EAAA9K,UAAA,EACA9R,EAAAqQ,KAAA,IAAA5E,QAAAmR,EAAA,SAAAzc,GAEA,OADA0c,EAAA1c,GAAA,OAAA,OAAAA,EAAA4c,WAAA,GAAA1O,SAAA,KAAA5K,OAAA,GACA,KAEAmZ,EAAA9K,UAAA,EACA+K,EAiBAG,CAAAN,GAGAC,EAAAlR,QAAAiR,EAAA,SAAAvc,GACA,OAAAsc,EAAAtc,MARAwc,oDCtCA,aAEA,IAAApT,EAAAtJ,EAAA,YAEAgd,EAAA,GACAC,GAAA,EAEAC,EAAA7d,EAAA8d,QAAA9d,EAAA8d,OAAAC,KAAA/d,EAAA8d,OAAAC,IAAAC,QAGApe,EAAAD,QAAA,CACA4G,YAAA,SAAAlC,EAAAjC,QACA,IAAApC,EAAAkD,iBACAlD,EAAAkD,iBAAAmB,EAAAjC,GAAA,GACApC,EAAAyI,UAAAzI,EAAAuG,cAIAvG,EAAAyI,SAAAlC,YAAA,KAAAlC,EAAAjC,GAEApC,EAAAuG,YAAA,KAAAlC,EAAAjC,KAIA8T,YAAA,SAAA7R,EAAAjC,QACA,IAAApC,EAAAkD,iBACAlD,EAAAmD,oBAAAkB,EAAAjC,GAAA,GACApC,EAAAyI,UAAAzI,EAAAkW,cACAlW,EAAAyI,SAAAyN,YAAA,KAAA7R,EAAAjC,GACApC,EAAAkW,YAAA,KAAA7R,EAAAjC,KAIA8R,UAAA,SAAA9R,GACA,GAAAyb,EACA,OAAA,KAGA,IAAAI,EAAAhU,EAAAkB,OAAA,GAKA,OAJAwS,EAAAM,GAAA7b,EACAwb,GACAvc,WAAAnB,KAAAge,uBAAA,GAEAD,GAGAnJ,UAAA,SAAAmJ,GACAA,KAAAN,UACAA,EAAAM,IAIAC,uBAAA,WACA,IAAA,IAAAD,KAAAN,EACAA,EAAAM,YACAN,EAAAM,KAeAJ,GACAje,EAAAD,QAAA4G,YAAA,SAXA,WACAqX,IAGAA,GAAA,EACAhe,EAAAD,QAAAue,iMCjEA,aAEA,IAAA1Y,EAAA7E,EAAA,WACA6D,EAAA7D,EAAA,SACAwJ,EAAAxJ,EAAA,aAGAgF,EAAA,aAKA/F,EAAAD,QAAA,CACA+Y,QAAA,MACArS,gBAAA,KAEAkS,uBAAA,WACA3Y,EAAAD,QAAA+Y,WAAA1Y,IACAA,EAAAJ,EAAAD,QAAA+Y,SAAA,KAIA1T,YAAA,SAAA/C,EAAAsC,GACAvE,EAAAyG,SAAAzG,EACAA,EAAAyG,OAAAzB,YAAAR,EAAAS,UAAA,CACA6B,SAAAlH,EAAAD,QAAA0G,gBACApE,KAAAA,EACAsC,KAAAA,GAAA,KACA,KAEAoB,EAAA,wCAAA1D,EAAAsC,IAIAwR,aAAA,SAAAF,EAAAsI,GAGA,SAAAC,IACAzY,EAAA,YACA+D,aAAAiO,GAEA,IACA4D,EAAA5B,OAAA,KACA,MAAAzG,IAGAqI,EAAA5M,QAAA,KAEA,SAAAwH,IACAxQ,EAAA,WACA4V,IACA6C,IAIA/c,WAAA,WACAka,GACAA,EAAA/B,WAAAC,YAAA8B,GAEAA,EAAA,MACA,GACA/V,EAAAsP,UAAAb,IAGA,SAAAtF,EAAAwI,GACAxR,EAAA,UAAAwR,GACAoE,IACApF,IACAgI,EAAAhH,IAjCA,IACAQ,EAAA1D,EADAsH,EAAAvb,EAAAyI,SAAAuR,cAAA,UAuEA,OApBAuB,EAAAtB,IAAApE,EACA0F,EAAAP,MAAAC,QAAA,OACAM,EAAAP,MAAAE,SAAA,WACAK,EAAA5M,QAAA,WACAA,EAAA,YAEA4M,EAAA5B,OAAA,WACAhU,EAAA,UAGA+D,aAAAiO,GACAA,EAAAtW,WAAA,WACAsN,EAAA,mBACA,MAEA3O,EAAAyI,SAAAC,KAAA2S,YAAAE,GACA5D,EAAAtW,WAAA,WACAsN,EAAA,YACA,MACAsF,EAAAzO,EAAA0O,UAAAiC,GACA,CACAG,KApCA,SAAA/N,EAAA7B,GACAf,EAAA,OAAA4C,EAAA7B,GACArF,WAAA,WACA,IAGAka,GAAAA,EAAA8C,eACA9C,EAAA8C,cAAArZ,YAAAuD,EAAA7B,GAEA,MAAAwM,MAGA,IAyBAiD,QAAAA,EACAC,OAAAgI,IAKAvF,eAAA,SAAAhD,EAAAsI,GAKA,SAAAC,IACA1U,aAAAiO,GACA4D,EAAA5M,QAAA,KAEA,SAAAwH,IACAmI,IACAF,IACA5Y,EAAAsP,UAAAb,GACAsH,EAAA/B,WAAAC,YAAA8B,GACAA,EAAA+C,EAAA,KACAC,kBAGA,SAAA5P,EAAAvO,GACAuF,EAAA,UAAAvF,GACAke,IACAnI,IACAgI,EAAA/d,IArBA,IAEAuX,EAAA1D,EACAsH,EAHAxG,EAAA,CAAA,UAAA9Q,OAAA,UAAA8M,KAAA,KACAuN,EAAA,IAAAte,EAAA+U,GAAA,YAqCAuJ,EAAAnK,OACAmK,EAAAE,MAAA,kCACAxe,EAAAyI,SAAAyU,OAAA,uBAEAoB,EAAAhZ,QACAgZ,EAAAG,aAAA7e,EAAAD,QAAA+Y,SAAA1Y,EAAAJ,EAAAD,QAAA+Y,SACA,IAAAhY,EAAA4d,EAAAtE,cAAA,OAYA,OAXAsE,EAAA5V,KAAA2S,YAAA3a,GACA6a,EAAA+C,EAAAtE,cAAA,UACAtZ,EAAA2a,YAAAE,GACAA,EAAAtB,IAAApE,EACA0F,EAAA5M,QAAA,WACAA,EAAA,YAEAgJ,EAAAtW,WAAA,WACAsN,EAAA,YACA,MACAsF,EAAAzO,EAAA0O,UAAAiC,GACA,CACAG,KAjCA,SAAA/N,EAAA7B,GACA,IAGArF,WAAA,WACAka,GAAAA,EAAA8C,eACA9C,EAAA8C,cAAArZ,YAAAuD,EAAA7B,IAEA,GACA,MAAAwM,MAyBAiD,QAAAA,EACAC,OAAAgI,KAKAxe,EAAAD,QAAA6W,eAAA,EACAxW,EAAAyI,WAGA7I,EAAAD,QAAA6W,eAAA,mBAAAxW,EAAAgF,aACA,iBAAAhF,EAAAgF,eAAAmF,EAAA8S,4NCxLA,aAEA,IAAAyB,EAAA,GACA,CAAA,MAAA,QAAA,QAAA3Y,QAAA,SAAA4Y,GACA,IAAAC,EAEA,IACAA,EAAA5e,EAAA6e,SAAA7e,EAAA6e,QAAAF,IAAA3e,EAAA6e,QAAAF,GAAAlc,MACA,MAAApC,IAIAqe,EAAAC,GAAAC,EAAA,WACA,OAAA5e,EAAA6e,QAAAF,GAAAlc,MAAAzC,EAAA6e,QAAAnc,YACA,QAAAic,EAAA,aAAAD,EAAAtU,MAGAxK,EAAAD,QAAA+e,6ICjBA,aAEA9e,EAAAD,QAAA,CACAmI,SAAA,SAAAmH,GACA,IAAAhN,SAAAgN,EACA,MAAA,YAAAhN,GAAA,UAAAA,KAAAgN,GAGA9B,OAAA,SAAA8B,GACA,IAAA/O,KAAA4H,SAAAmH,GACA,OAAAA,EAGA,IADA,IAAAzI,EAAAsY,EACAre,EAAA,EAAAS,EAAAwB,UAAAxB,OAAAT,EAAAS,EAAAT,IAEA,IAAAqe,KADAtY,EAAA9D,UAAAjC,GAEA4O,OAAAtN,UAAAuO,eAAArP,KAAAuF,EAAAsY,KACA7P,EAAA6P,GAAAtY,EAAAsY,IAIA,OAAA7P,6BCrBA,aAGA,IAAAyN,EAAA/b,EAAA,UAIAoe,EAAA,mCACAnf,EAAAD,QAAA,CACAwL,OAAA,SAAAjK,GAIA,IAHA,IAAA6M,EAAAgR,EAAA7d,OACA2b,EAAAH,EAAAE,YAAA1b,GACA8d,EAAA,GACAve,EAAA,EAAAA,EAAAS,EAAAT,IACAue,EAAAnO,KAAAkO,EAAAxL,OAAAsJ,EAAApc,GAAAsN,EAAA,IAEA,OAAAiR,EAAAjO,KAAA,KAGAkO,OAAA,SAAAlR,GACA,OAAAD,KAAAgE,MAAAhE,KAAA7D,SAAA8D,IAGAzC,aAAA,SAAAyC,GACA,IAAAxN,GAAA,IAAAwN,EAAA,IAAA7M,OAEA,OADA,IAAA6B,MAAAxC,EAAA,GAAAwQ,KAAA,KACA7Q,KAAA+e,OAAAlR,IAAA5J,OAAA5D,yCC1BA,aAEA,IAAAoF,EAAA,aAKA/F,EAAAD,QAAA,SAAAiG,GACA,MAAA,CACAyH,gBAAA,SAAA6R,EAAAtX,GACA,IAAAmC,EAAA,CACAwD,KAAA,GACAnH,OAAA,IAkCA,OAhCA8Y,EAEA,iBAAAA,IACAA,EAAA,CAAAA,IAFAA,EAAA,GAKAtZ,EAAAG,QAAA,SAAAoZ,GACAA,IAIA,cAAAA,EAAAjZ,gBAAA,IAAA0B,EAAAwX,UAKAF,EAAAhe,SACA,IAAAge,EAAAlb,QAAAmb,EAAAjZ,eACAP,EAAA,mBAAAwZ,EAAAjZ,eAIAiZ,EAAAxW,QAAAf,IACAjC,EAAA,UAAAwZ,EAAAjZ,eACA6D,EAAAwD,KAAAsD,KAAAsO,GACAA,EAAAlZ,iBACA8D,EAAA3D,OAAAyK,KAAAsO,EAAAlZ,kBAGAN,EAAA,WAAAwZ,EAAAjZ,eAjBAP,EAAA,uBAAA,gBAoBAoE,4CC9CA,aAEA,IAAAC,EAAArJ,EAAA,aAEAgF,EAAA,aAKA/F,EAAAD,QAAA,CACAmM,UAAA,SAAAxE,GACA,IAAAA,EACA,OAAA,KAGA,IAAAtG,EAAA,IAAAgJ,EAAA1C,GACA,GAAA,UAAAtG,EAAA4I,SACA,OAAA,KAGA,IAAAE,EAAA9I,EAAA8I,KAKA,OAHAA,EADAA,IACA,WAAA9I,EAAA4I,SAAA,MAAA,MAGA5I,EAAA4I,SAAA,KAAA5I,EAAAqe,SAAA,IAAAvV,GAGA5C,cAAA,SAAArG,EAAAye,GACA,IAAAC,EAAArf,KAAA4L,UAAAjL,KAAAX,KAAA4L,UAAAwT,GAEA,OADA3Z,EAAA,OAAA9E,EAAAye,EAAAC,GACAA,GAGAhT,cAAA,SAAA1L,EAAAye,GACA,OAAAze,EAAAyQ,MAAA,KAAA,KAAAgO,EAAAhO,MAAA,KAAA,IAGAhI,QAAA,SAAAhC,EAAAkY,GACA,IAAAC,EAAAnY,EAAAgK,MAAA,KACA,OAAAmO,EAAA,GAAAD,GAAAC,EAAA,GAAA,IAAAA,EAAA,GAAA,KAGAzL,SAAA,SAAA1M,EAAAoY,GACA,OAAApY,IAAA,IAAAA,EAAAtD,QAAA,KAAA,IAAA0b,EAAA,IAAAA,2DC5CA9f,EAAAD,QAAA,iCCAA,mBAAA0P,OAAAsQ,OAEA/f,EAAAD,QAAA,SAAAigB,EAAAC,GACAD,EAAAE,OAAAD,EACAD,EAAA7d,UAAAsN,OAAAsQ,OAAAE,EAAA9d,UAAA,CACAge,YAAA,CACA5P,MAAAyP,EACA3P,YAAA,EACAC,UAAA,EACAF,cAAA,MAMApQ,EAAAD,QAAA,SAAAigB,EAAAC,GACAD,EAAAE,OAAAD,EACA,SAAAG,KACAA,EAAAje,UAAA8d,EAAA9d,UACA6d,EAAA7d,UAAA,IAAAie,EACAJ,EAAA7d,UAAAge,YAAAH,0CCnBA,WAGA,IAGAK,EAAA,CACAC,YAAA,EACAtQ,UAAA,GAIAuQ,EAAAF,SAAAtgB,IAAAA,IAAAA,EAAAygB,UAAAzgB,EAMA0gB,EAAAJ,SAAAlgB,SAAAA,QAAAG,KACAogB,EAAAH,GAAAF,SAAArgB,IAAAA,IAAAA,EAAAwgB,UAAA,iBAAApgB,GAAAA,EAQA,SAAAugB,EAAA7O,EAAA/R,GACA+R,EAAAA,GAAA2O,EAAA,SACA1gB,EAAAA,GAAA0gB,EAAA,SAGA,IAAAG,EAAA9O,EAAA,QAAA2O,EAAA,OACA5Q,EAAAiC,EAAA,QAAA2O,EAAA,OACAhR,EAAAqC,EAAA,QAAA2O,EAAA,OACA5c,EAAAiO,EAAA,MAAA2O,EAAA,KACA7U,EAAAkG,EAAA,aAAA2O,EAAA,YACA9V,EAAAmH,EAAA,WAAA2O,EAAA,UACAvS,EAAA4D,EAAA,MAAA2O,EAAA,KACAI,EAAA/O,EAAA,MAAA2O,EAAA,KAGA,iBAAAI,GAAAA,IACA9gB,EAAAsF,UAAAwb,EAAAxb,UACAtF,EAAAiH,MAAA6Z,EAAA7Z,OAIA,IAEA8Z,EAAA3a,EAAA4a,EAFAC,EAAAvR,EAAAtN,UACA8e,EAAAD,EAAA7R,SAIA+R,EAAA,IAAArd,GAAA,iBACA,IAGAqd,GAAA,QAAAA,EAAAC,kBAAA,IAAAD,EAAAE,eAAA,IAAAF,EAAAG,cAIA,IAAAH,EAAAI,eAAA,IAAAJ,EAAAK,iBAAA,GAAAL,EAAAM,iBAAA,KAAAN,EAAAO,qBACA,MAAAC,IAIA,SAAAC,EAAA1R,GACA,GAAA0R,EAAA1R,KAAA8Q,EAEA,OAAAY,EAAA1R,GAEA,IAAA2R,EACA,GAAA,yBAAA3R,EAGA2R,EAAA,KAAA,IAAA,QACA,GAAA,QAAA3R,EAGA2R,EAAAD,EAAA,mBAAAA,EAAA,kBACA,CACA,IAAApR,EAAAsR,EAAA,qDAEA,GAAA,kBAAA5R,EAAA,CACA,IAAA5K,EAAAtF,EAAAsF,UAAAyc,EAAA,mBAAAzc,GAAA6b,EACA,GAAAY,EAAA,EAEAvR,EAAA,WACA,OAAA,IACAwR,OAAAxR,EACA,IACAuR,EAGA,MAAAzc,EAAA,IAGA,MAAAA,EAAA,IAAAub,IACA,MAAAvb,EAAA,IAAAwK,IAKAxK,EAAA4b,KAAAF,GAGA1b,EAAA0b,KAAAA,GAGA1b,MAAA0b,GAMA,MAAA1b,EAAAkL,IACA,OAAAlL,EAAA,CAAAkL,KAGA,UAAAlL,EAAA,CAAA0b,KAEA,QAAA1b,EAAA,OAKA,oBAAAA,EAAA,CAAA0b,EAAAE,EAAA,QAGA5b,EAAA,CAAApE,IAAA,CAAAsP,GAAA,GAAA,EAAA,KAAA,mBAAAsR,GAEA,MAAAxc,EAAA,KAAAkL,IACA,iBAAAlL,EAAA,CAAA,EAAA,GAAA,KAAA,IAGA,iCAAAA,EAAA,IAAAxB,GAAA,UAEA,iCAAAwB,EAAA,IAAAxB,EAAA,UAGA,iCAAAwB,EAAA,IAAAxB,GAAA,eAGA,8BAAAwB,EAAA,IAAAxB,GAAA,IACA,MAAA6d,GACAI,GAAA,GAGAF,EAAAE,EAGA,GAAA,cAAA7R,EAAA,CACA,IAAAjJ,EAAAjH,EAAAiH,MACA,GAAA,mBAAAA,EACA,IAIA,GAAA,IAAAA,EAAA,OAAAA,GAAA,GAAA,CAGA,IAAAgb,EAAA,IADAzR,EAAAvJ,EAAA6a,IACA,EAAAvgB,QAAA,IAAAiP,EAAA,EAAA,GACA,GAAAyR,EAAA,CACA,IAEAA,GAAAhb,EAAA,QACA,MAAA0a,IACA,GAAAM,EACA,IAIAA,EAAA,IAAAhb,EAAA,MACA,MAAA0a,IAEA,GAAAM,EACA,IAIAA,EAAA,IAAAhb,EAAA,MACA,MAAA0a,OAIA,MAAAA,GACAM,GAAA,EAGAJ,EAAAI,GAGA,OAAAL,EAAA1R,KAAA2R,EAGA,IAAAD,EAAA,QAAA,CAEA,IAAAM,EAAA,oBAEAC,EAAA,kBACAC,EAAA,kBACAC,EAAA,iBAIAC,EAAAV,EAAA,yBAGA,IAAAT,EACA,IAAAhP,EAAAhE,EAAAgE,MAGAoQ,EAAA,CAAA,EAAA,GAAA,GAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAGAC,EAAA,SAAAC,EAAAC,GACA,OAAAH,EAAAG,GAAA,KAAAD,EAAA,MAAAtQ,GAAAsQ,EAAA,MAAAC,IAAA,EAAAA,KAAA,GAAAvQ,GAAAsQ,EAAA,KAAAC,GAAA,KAAAvQ,GAAAsQ,EAAA,KAAAC,GAAA,MAwHA,IAlHA3B,EAAAE,EAAAtQ,kBACAoQ,EAAA,SAAA4B,GACA,IAAAvC,EAAAwC,EAAA,GA4BA,OApBA7B,GAPA6B,EAAAC,UAAA,KAAAD,EAAAC,UAAA,CAGAzT,WAAA,GACAwT,GAAAxT,UAAA8R,EAGA,SAAAyB,GAIA,IAAAG,EAAAviB,KAAAsiB,UAAAxR,EAAAsR,KAAApiB,KAAAsiB,UAAA,KAAAtiB,MAGA,OADAA,KAAAsiB,UAAAC,EACAzR,IAIA+O,EAAAwC,EAAAxC,YAGA,SAAAuC,GACA,IAAA7b,GAAAvG,KAAA6f,aAAAA,GAAAhe,UACA,OAAAugB,KAAApiB,QAAAoiB,KAAA7b,GAAAvG,KAAAoiB,KAAA7b,EAAA6b,MAGAC,EAAA,KACA7B,EAAAzf,KAAAf,KAAAoiB,KAMAvc,EAAA,SAAA6J,EAAAmH,GACA,IAAA2L,EAAAH,EAAAD,EAAAK,EAAA,EAWA,IAAAL,KANAI,EAAA,WACAxiB,KAAA0iB,QAAA,IACA7gB,UAAA6gB,QAAA,EAGAL,EAAA,IAAAG,EAGAhC,EAAAzf,KAAAshB,EAAAD,IACAK,IAsDA,OAnDAD,EAAAH,EAAA,MAuBAxc,EApBA4c,EAkBA,GAAAA,EAEA,SAAA/S,EAAAmH,GAEA,IAAAuL,EAAAC,EAAA,GAAA3T,EAAAiS,EAAA5f,KAAA2O,IAAAiS,EACA,IAAAS,KAAA1S,EAIAhB,GAAA,aAAA0T,GAAA5B,EAAAzf,KAAAshB,EAAAD,MAAAC,EAAAD,GAAA,KAAA5B,EAAAzf,KAAA2O,EAAA0S,IACAvL,EAAAuL,IAMA,SAAA1S,EAAAmH,GACA,IAAAuL,EAAAO,EAAAjU,EAAAiS,EAAA5f,KAAA2O,IAAAiS,EACA,IAAAS,KAAA1S,EACAhB,GAAA,aAAA0T,IAAA5B,EAAAzf,KAAA2O,EAAA0S,KAAAO,EAAA,gBAAAP,IACAvL,EAAAuL,IAKAO,GAAAnC,EAAAzf,KAAA2O,EAAA0S,EAAA,iBACAvL,EAAAuL,KA1CAC,EAAA,CAAA,UAAA,WAAA,iBAAA,uBAAA,gBAAA,iBAAA,eAGA,SAAA3S,EAAAmH,GACA,IAAAuL,EAAAphB,EAAA0N,EAAAiS,EAAA5f,KAAA2O,IAAAiS,EACAiB,GAAAlU,GAAA,mBAAAgB,EAAAmQ,aAAAE,SAAArQ,EAAAU,iBAAAV,EAAAU,gBAAAoQ,EACA,IAAA4B,KAAA1S,EAGAhB,GAAA,aAAA0T,IAAAQ,EAAA7hB,KAAA2O,EAAA0S,IACAvL,EAAAuL,GAIA,IAAAphB,EAAAqhB,EAAArhB,OAAAohB,EAAAC,IAAArhB,GAAA4hB,EAAA7hB,KAAA2O,EAAA0S,IAAAvL,EAAAuL,QAgCA1S,EAAAmH,KASAwK,EAAA,kBAAA,CAeA,SAAAwB,EAAAC,EAAA7S,GAGA,OAJA,UAIAA,GAAA,IAAAhM,OAAA6e,GAQA,SAAAlW,EAAAqD,GAGA,IAFA,IAAAa,EAAA,IAAAoC,EAAA,EAAAlS,EAAAiP,EAAAjP,OAAA+hB,GAAAhB,GAAA,GAAA/gB,EACAgiB,EAAAD,IAAAhB,EAAA9R,EAAAmB,MAAA,IAAAnB,GACAiD,EAAAlS,EAAAkS,IAAA,CACA,IAAA+P,EAAAhT,EAAAsN,WAAArK,GAGA,OAAA+P,GACA,KAAA,EAAA,KAAA,EAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GACAnS,GAAAoS,EAAAD,GACA,MACA,QACA,GAAAA,EAAA,GAAA,CACAnS,GAdA,QAcA+R,EAAA,EAAAI,EAAApU,SAAA,KACA,MAEAiC,GAAAiS,EAAAC,EAAA9P,GAAAjD,EAAAkT,OAAAjQ,IAGA,OAAApC,EAAA,IA3CA,IAAAoS,EAAA,CACAE,GAAA,OACAC,GAAA,MACAC,EAAA,MACAC,GAAA,MACAC,GAAA,MACAC,GAAA,MACAC,EAAA,OAyCAC,EAAA,SAAAvB,EAAA1S,EAAAmH,EAAA+M,EAAAC,EAAAC,EAAAC,GACA,IAAA9T,EAAA+T,EAAA9B,EAAAC,EAAA8B,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAtR,EAAAlS,EAAAyjB,EAAA3T,EACA,IAEAb,EAAAP,EAAA0S,GACA,MAAAhB,IACA,GAAA,iBAAAnR,GAAAA,EAEA,GApMA,kBAmMA+T,EAAArD,EAAA5f,KAAAkP,KACAuQ,EAAAzf,KAAAkP,EAAA,UA4CA,mBAAAA,EAAAwR,SAAAuC,GAAApC,GAAAoC,GAAAnC,GAAAmC,GAAAlC,GAAAtB,EAAAzf,KAAAkP,EAAA,aAKAA,EAAAA,EAAAwR,OAAAW,SAhDA,IAAA,EAAA,EAAAnS,GAAAA,EAAA,EAAA,EAAA,CAIA,GAAAgS,EAAA,CAKA,IADAgC,EAAArS,EAAA3B,EAAA,OACAiS,EAAAtQ,EAAAqS,EAAA,UAAA,KAAA,EAAAhC,EAAAC,EAAA,EAAA,IAAA+B,EAAA/B,KACA,IAAAC,EAAAvQ,GAAAqS,EAAAhC,EAAAC,EAAA,IAAA,OAAAD,EAAAC,EAAAC,EAAA,IAAA8B,EAAA9B,KACA8B,EAAA,EAAAA,EAAAhC,EAAAC,EAAAC,GAQAgC,EAAAvS,GAHAsS,GAAAjU,EAAA,MAAA,OAAA,OAGA,MAAA,GACAmU,EAAAxS,EAAAsS,EAAA,KAAA,GACAG,EAAAzS,EAAAsS,EAAA,KAAA,GACAI,EAAAJ,EAAA,SAEAhC,EAAAjS,EAAA4Q,iBACAsB,EAAAlS,EAAA6Q,cACAmD,EAAAhU,EAAA8Q,aACAoD,EAAAlU,EAAA+Q,cACAoD,EAAAnU,EAAAgR,gBACAoD,EAAApU,EAAAiR,gBACAoD,EAAArU,EAAAkR,qBAGAlR,GAAAiS,GAAA,GAAA,KAAAA,GAAAA,EAAA,EAAA,IAAA,KAAAW,EAAA,EAAAX,EAAA,GAAAA,EAAAA,GAAAW,EAAA,EAAAX,IACA,IAAAW,EAAA,EAAAV,EAAA,GAAA,IAAAU,EAAA,EAAAoB,GAGA,IAAApB,EAAA,EAAAsB,GAAA,IAAAtB,EAAA,EAAAuB,GAAA,IAAAvB,EAAA,EAAAwB,GAEA,IAAAxB,EAAA,EAAAyB,GAAA,SAEArU,EAAA,KAeA,GALA4G,IAGA5G,EAAA4G,EAAA9V,KAAA2O,EAAA0S,EAAAnS,IAEA,OAAAA,EACA,MAAA,OAGA,GA7PA,qBA4PA+T,EAAArD,EAAA5f,KAAAkP,IAGA,MAAA,GAAAA,EACA,GAAA+T,GAAApC,EAGA,OAAA,EAAA,EAAA3R,GAAAA,EAAA,EAAA,EAAA,GAAAA,EAAA,OACA,GAAA+T,GAAAnC,EAEA,OAAAjV,EAAA,GAAAqD,GAGA,GAAA,iBAAAA,EAAA,CAGA,IAAAjP,EAAA+iB,EAAA/iB,OAAAA,KACA,GAAA+iB,EAAA/iB,KAAAiP,EAEA,MAAA5F,IASA,GALA0Z,EAAApT,KAAAV,GACAsU,EAAA,GAEAE,EAAAX,EACAA,GAAAD,EACAG,GAAAlC,EAAA,CAEA,IAAA5O,EAAA,EAAAlS,EAAAiP,EAAAjP,OAAAkS,EAAAlS,EAAAkS,IACAsR,EAAAb,EAAAzQ,EAAAjD,EAAA4G,EAAA+M,EAAAC,EAAAC,EAAAC,GACAQ,EAAA5T,KAAA6T,IAAA/D,EAAA,OAAA+D,GAEA1T,EAAAyT,EAAAvjB,OAAA6iB,EAAA,MAAAC,EAAAS,EAAA1T,KAAA,MAAAiT,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAA1T,KAAA,KAAA,IAAA,UAKAhL,EAAA+d,GAAA3T,EAAA,SAAAmS,GACA,IAAAoC,EAAAb,EAAAvB,EAAAnS,EAAA4G,EAAA+M,EAAAC,EAAAC,EAAAC,GACAS,IAAA/D,GAOA8D,EAAA5T,KAAA/D,EAAAwV,GAAA,KAAAyB,EAAA,IAAA,IAAAW,KAGA1T,EAAAyT,EAAAvjB,OAAA6iB,EAAA,MAAAC,EAAAS,EAAA1T,KAAA,MAAAiT,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAA1T,KAAA,KAAA,IAAA,KAIA,OADAkT,EAAAW,MACA5T,IAKArR,EAAAsF,UAAA,SAAAuB,EAAAqe,EAAA7B,GACA,IAAAe,EAAAhN,EAAA+M,EAAAI,EACA,GAAAjE,SAAA4E,IAAAA,EACA,IAAAX,EAAArD,EAAA5f,KAAA4jB,KAAAhD,EACA9K,EAAA8N,OACA,GAAAX,GAAAlC,EAAA,CAEA8B,EAAA,GACA,IAAA,IAAA3T,EAAAiD,EAAA,EAAAlS,EAAA2jB,EAAA3jB,OAAAkS,EAAAlS,EAAAiP,EAAA0U,EAAAzR,MAAA8Q,EAAArD,EAAA5f,KAAAkP,KAAA4R,GAAAmC,GAAApC,IAAAgC,EAAA3T,GAAA,KAGA,GAAA6S,EACA,IAAAkB,EAAArD,EAAA5f,KAAA+hB,KAAAlB,GAGA,GAAA,GAAAkB,GAAAA,EAAA,GACA,IAAAe,EAAA,GAAA,GAAAf,IAAAA,EAAA,IAAAe,EAAA7iB,OAAA8hB,EAAAe,GAAA,WAEAG,GAAAnC,IACAgC,EAAAf,EAAA9hB,QAAA,GAAA8hB,EAAAA,EAAA7e,MAAA,EAAA,KAMA,OAAA0f,EAAA,KAAA1T,EAAA,IAAA,IAAA3J,EAAA2J,GAAA4G,EAAA+M,EAAAC,EAAA,GAAA,KAKA,IAAAxC,EAAA,cAAA,CAoBA,SAAA1M,IAEA,MADAiQ,EAAAC,EAAA,KACAvZ,IAMA,SAAAwZ,IAEA,IADA,IAAA7U,EAAA8U,EAAA/J,EAAAgK,EAAA/B,EAAA3c,EAAAue,EAAA7jB,EAAAsF,EAAAtF,OACA4jB,EAAA5jB,GAEA,OADAiiB,EAAA3c,EAAAiX,WAAAqH,IAEA,KAAA,EAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAGAA,IACA,MACA,KAAA,IAAA,KAAA,IAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAKA,OAFA3U,EAAA8R,EAAAzb,EAAA6c,OAAAyB,GAAAte,EAAAse,GACAA,IACA3U,EACA,KAAA,GAKA,IAAAA,EAAA,IAAA2U,IAAAA,EAAA5jB,GAEA,IADAiiB,EAAA3c,EAAAiX,WAAAqH,IACA,GAGAjQ,SACA,GAAA,IAAAsO,EAKA,OADAA,EAAA3c,EAAAiX,aAAAqH,IAEA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAEA3U,GAAAgV,EAAAhC,GACA2B,IACA,MACA,KAAA,IAKA,IADAG,IAAAH,EACA5J,EAAA4J,EAAA,EAAAA,EAAA5J,EAAA4J,IAIA,KAHA3B,EAAA3c,EAAAiX,WAAAqH,KAGA3B,GAAA,IAAA,IAAAA,GAAAA,GAAA,KAAA,IAAAA,GAAAA,GAAA,IAEAtO,IAIA1E,GAAAqN,EAAA,KAAAhX,EAAArC,MAAA8gB,EAAAH,IACA,MACA,QAEAjQ,QAEA,CACA,GAAA,IAAAsO,EAGA,MAKA,IAHAA,EAAA3c,EAAAiX,WAAAqH,GACAG,EAAAH,EAEA,IAAA3B,GAAA,IAAAA,GAAA,IAAAA,GACAA,EAAA3c,EAAAiX,aAAAqH,GAGA3U,GAAA3J,EAAArC,MAAA8gB,EAAAH,GAGA,GAAA,IAAAte,EAAAiX,WAAAqH,GAGA,OADAA,IACA3U,EAGA0E,IACA,QASA,GAPAoQ,EAAAH,EAEA,IAAA3B,IACA+B,GAAA,EACA/B,EAAA3c,EAAAiX,aAAAqH,IAGA,IAAA3B,GAAAA,GAAA,GAAA,CAQA,IANA,IAAAA,IAAA,KAAAA,EAAA3c,EAAAiX,WAAAqH,EAAA,KAAA3B,GAAA,KAEAtO,IAEAqQ,GAAA,EAEAJ,EAAA5jB,IAAA,KAAAiiB,EAAA3c,EAAAiX,WAAAqH,KAAA3B,GAAA,IAAA2B,KAGA,GAAA,IAAAte,EAAAiX,WAAAqH,GAAA,CAGA,IAFA5J,IAAA4J,EAEA5J,EAAAha,IAAA,KAAAiiB,EAAA3c,EAAAiX,WAAAvC,KAAAiI,GAAA,IAAAjI,KACAA,GAAA4J,GAEAjQ,IAEAiQ,EAAA5J,EAKA,GAAA,MADAiI,EAAA3c,EAAAiX,WAAAqH,KACA,IAAA3B,EAAA,CAQA,IAJA,KAHAA,EAAA3c,EAAAiX,aAAAqH,KAGA,IAAA3B,GACA2B,IAGA5J,EAAA4J,EAAA5J,EAAAha,IAAA,KAAAiiB,EAAA3c,EAAAiX,WAAAvC,KAAAiI,GAAA,IAAAjI,KACAA,GAAA4J,GAEAjQ,IAEAiQ,EAAA5J,EAGA,OAAA1U,EAAArC,MAAA8gB,EAAAH,GAOA,GAJAI,GACArQ,IAGA,QAAArO,EAAArC,MAAA2gB,EAAAA,EAAA,GAEA,OADAA,GAAA,GACA,EACA,GAAA,SAAAte,EAAArC,MAAA2gB,EAAAA,EAAA,GAEA,OADAA,GAAA,GACA,EACA,GAAA,QAAAte,EAAArC,MAAA2gB,EAAAA,EAAA,GAEA,OADAA,GAAA,EACA,KAGAjQ,IAKA,MAAA,IAuFA,SAAAuQ,EAAA5e,EAAA8b,EAAAvL,GACA,IAAA2N,EAAAW,EAAA7e,EAAA8b,EAAAvL,GACA2N,IAAA/D,SACAna,EAAA8b,GAEA9b,EAAA8b,GAAAoC,EAjRA,IAgBAI,EAAAC,EAhBAvH,EAAA/N,EAAA+N,aAIA2H,EAAA,CACA7B,GAAA,KACAC,GAAA,IACA+B,GAAA,IACAC,GAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,MA6KAC,EAAA,SAAAzV,GACA,IAAAsU,EAAAoB,EAKA,GAJA,KAAA1V,GAEA0E,IAEA,iBAAA1E,EAAA,CACA,GAAA,MAAA8R,EAAA9R,EAAAkT,OAAA,GAAAlT,EAAA,IAEA,OAAAA,EAAAhM,MAAA,GAGA,GAAA,KAAAgM,EAAA,CAGA,IADAsU,EAAA,GAIA,MAFAtU,EAAA6U,KADAa,EAAAA,IAAA,EASAA,IACA,KAAA1V,EAEA,MADAA,EAAA6U,MAGAnQ,IAIAA,KAIA,KAAA1E,GACA0E,IAEA4P,EAAA5T,KAAA+U,EAAAzV,IAEA,OAAAsU,EACA,GAAA,KAAAtU,EAAA,CAGA,IADAsU,EAAA,GAIA,MAFAtU,EAAA6U,KADAa,EAAAA,IAAA,EAQAA,IACA,KAAA1V,EAEA,MADAA,EAAA6U,MAGAnQ,IAIAA,KAMA,KAAA1E,GAAA,iBAAAA,GAAA,MAAA8R,EAAA9R,EAAAkT,OAAA,GAAAlT,EAAA,KAAA,KAAA6U,KACAnQ,IAEA4P,EAAAtU,EAAAhM,MAAA,IAAAyhB,EAAAZ,KAEA,OAAAP,EAGA5P,IAEA,OAAA1E,GAgBAkV,EAAA,SAAA7e,EAAA8b,EAAAvL,GACA,IAAA7V,EAAAiP,EAAA3J,EAAA8b,GACA,GAAA,iBAAAnS,GAAAA,EAIA,GAAA0Q,EAAA5f,KAAAkP,IAAA6R,EACA,IAAA9gB,EAAAiP,EAAAjP,OAAAA,KACAkkB,EAAAjV,EAAAjP,EAAA6V,QAGAhR,EAAAoK,EAAA,SAAAmS,GACA8C,EAAAjV,EAAAmS,EAAAvL,KAIA,OAAAA,EAAA9V,KAAAuF,EAAA8b,EAAAnS,IAIAxQ,EAAAiH,MAAA,SAAAJ,EAAAuQ,GACA,IAAA/F,EAAAb,EAUA,OATA2U,EAAA,EACAC,EAAA,GAAAve,EACAwK,EAAA4U,EAAAZ,KAEA,KAAAA,KACAnQ,IAGAiQ,EAAAC,EAAA,KACAhO,GAAA8J,EAAA5f,KAAA8V,IAAA8K,EAAAwD,IAAAlV,EAAA,IAAA,IAAAa,EAAAb,GAAA,GAAA4G,GAAA/F,IAMA,OADArR,EAAA,aAAA4gB,EACA5gB,EAGA,IA50BA2gB,GAAAA,EAAA,SAAAA,GAAAA,EAAA,SAAAA,GAAAA,EAAA,OAAAA,IACAD,EAAAC,GA20BAH,EAEAI,EAAAF,EAAAF,OACA,CAEA,IAAAM,EAAAJ,EAAAyF,KACAC,EAAA1F,EAAA,MACA2F,GAAA,EAEAxhB,EAAA+b,EAAAF,EAAAA,EAAA,MAAA,CAGA4F,aAAA,WAOA,OANAD,IACAA,GAAA,EACA3F,EAAAyF,KAAArF,EACAJ,EAAA,MAAA0F,EACAtF,EAAAsF,EAAA,MAEAvhB,KAIA6b,EAAAyF,KAAA,CACAlf,QAAApC,EAAAoC,MACA3B,YAAAT,EAAAS,cAUAhE,KAAAf,iJCr4BA,aAEA,IAAAqhB,EAAAlS,OAAAtN,UAAAuO,eASA,SAAA4V,EAAAC,GACA,OAAA1N,mBAAA0N,EAAAha,QAAA,MAAA,MA6DAxM,EAAAsF,UAtBA,SAAAgK,EAAA0V,GACAA,EAAAA,GAAA,GAEA,IAAAyB,EAAA,GAOA,IAAA,IAAA3R,IAFA,iBAAAkQ,IAAAA,EAAA,KAEA1V,EACAsS,EAAAtgB,KAAAgO,EAAAwF,IACA2R,EAAAvV,KAAAmI,mBAAAvE,GAAA,IAAAuE,mBAAA/J,EAAAwF,KAIA,OAAA2R,EAAAllB,OAAAyjB,EAAAyB,EAAArV,KAAA,KAAA,IAOApR,EAAAiH,MApDA,SAAAyf,GAKA,IAJA,IAEAC,EAFAC,EAAA,sBACAvV,EAAA,GAGAsV,EAAAC,EAAApU,KAAAkU,IAAA,CACA,IAAA5R,EAAAyR,EAAAI,EAAA,IACAnW,EAAA+V,EAAAI,EAAA,IAOA7R,KAAAzD,IACAA,EAAAyD,GAAAtE,GAGA,OAAAa,4BCxCA,aAWApR,EAAAD,QAAA,SAAAmK,EAAAF,GAIA,GAHAA,EAAAA,EAAA0H,MAAA,KAAA,KACAxH,GAAAA,GAEA,OAAA,EAEA,OAAAF,GACA,IAAA,OACA,IAAA,KACA,OAAA,KAAAE,EAEA,IAAA,QACA,IAAA,MACA,OAAA,MAAAA,EAEA,IAAA,MACA,OAAA,KAAAA,EAEA,IAAA,SACA,OAAA,KAAAA,EAEA,IAAA,OACA,OAAA,EAGA,OAAA,IAAAA,yCCpCA,aAEA,IAAA0c,EAAA7lB,EAAA,iBACA8e,EAAA9e,EAAA,kBACA8lB,EAAA,0CACAC,EAAA,gCAcAC,EAAA,CACA,CAAA,IAAA,QACA,CAAA,IAAA,SACA,SAAAC,GACA,OAAAA,EAAAza,QAAA,KAAA,MAEA,CAAA,IAAA,YACA,CAAA,IAAA,OAAA,GACA,CAAA0a,IAAA,YAAAxR,EAAA,EAAA,GACA,CAAA,UAAA,YAAAA,EAAA,GACA,CAAAwR,IAAA,gBAAAxR,EAAA,EAAA,IAWA8G,EAAA,CAAA7V,KAAA,EAAA+f,MAAA,GAcA,SAAAS,EAAAphB,GACA,IAKA+O,EALA9K,EAAA3J,GAAAA,EAAA2J,UAAA,GAGAod,EAAA,GACA9kB,SAHAyD,EAAAA,GAAAiE,GAMA,GAAA,UAAAjE,EAAAkE,SACAmd,EAAA,IAAAC,EAAAC,SAAAvhB,EAAAwG,UAAA,SACA,GAAA,UAAAjK,EAEA,IAAAwS,KADAsS,EAAA,IAAAC,EAAAthB,EAAA,IACAyW,SAAA4K,EAAAtS,QACA,GAAA,UAAAxS,EAAA,CACA,IAAAwS,KAAA/O,EACA+O,KAAA0H,IACA4K,EAAAtS,GAAA/O,EAAA+O,SAGAY,IAAA0R,EAAAL,UACAK,EAAAL,QAAAA,EAAArT,KAAA3N,EAAAyB,OAIA,OAAA4f,EAkBA,SAAAG,EAAAN,GACA,IAAArU,EAAAkU,EAAAtU,KAAAyU,GAEA,MAAA,CACAhd,SAAA2I,EAAA,GAAAA,EAAA,GAAAvG,cAAA,GACA0a,UAAAnU,EAAA,GACA4U,KAAA5U,EAAA,IAoDA,SAAAyU,EAAAJ,EAAAjd,EAAA4c,GACA,KAAArmB,gBAAA8mB,GACA,OAAA,IAAAA,EAAAJ,EAAAjd,EAAA4c,GAGA,IAAAa,EAAAC,EAAAzgB,EAAA0gB,EAAAlU,EAAAqB,EACA8S,EAAAZ,EAAAxiB,QACAlC,SAAA0H,EACArC,EAAApH,KACAO,EAAA,EAqCA,IAxBA,UAAAwB,GAAA,UAAAA,IACAskB,EAAA5c,EACAA,EAAA,MAGA4c,GAAA,mBAAAA,IAAAA,EAAA9G,EAAA7Y,OAEA+C,EAAAmd,EAAAnd,GAMAyd,IADAC,EAAAH,EAAAN,GAAA,KACAhd,WAAAyd,EAAAX,QACApf,EAAAof,QAAAW,EAAAX,SAAAU,GAAAzd,EAAA+c,QACApf,EAAAsC,SAAAyd,EAAAzd,UAAAD,EAAAC,UAAA,GACAgd,EAAAS,EAAAF,KAMAE,EAAAX,UAAAa,EAAA,GAAA,CAAA,OAAA,aAEA9mB,EAAA8mB,EAAArmB,OAAAT,IAGA,mBAFA6mB,EAAAC,EAAA9mB,KAOAmG,EAAA0gB,EAAA,GACA7S,EAAA6S,EAAA,GAEA1gB,GAAAA,EACAU,EAAAmN,GAAAmS,EACA,iBAAAhgB,IACAwM,EAAAwT,EAAA5iB,QAAA4C,MAGAggB,EAFA,iBAAAU,EAAA,IACAhgB,EAAAmN,GAAAmS,EAAAziB,MAAA,EAAAiP,GACAwT,EAAAziB,MAAAiP,EAAAkU,EAAA,MAEAhgB,EAAAmN,GAAAmS,EAAAziB,MAAAiP,GACAwT,EAAAziB,MAAA,EAAAiP,MAGAA,EAAAxM,EAAAuL,KAAAyU,MACAtf,EAAAmN,GAAArB,EAAA,GACAwT,EAAAA,EAAAziB,MAAA,EAAAiP,EAAAA,QAGA9L,EAAAmN,GAAAnN,EAAAmN,IACA2S,GAAAE,EAAA,IAAA3d,EAAA8K,IAAA,GAOA6S,EAAA,KAAAhgB,EAAAmN,GAAAnN,EAAAmN,GAAAzI,gBAhCA4a,EAAAU,EAAAV,GAwCAL,IAAAjf,EAAA+e,MAAAE,EAAAjf,EAAA+e,QAMAe,GACAzd,EAAA+c,SACA,MAAApf,EAAA4E,SAAAmX,OAAA,KACA,KAAA/b,EAAA4E,UAAA,KAAAvC,EAAAuC,YAEA5E,EAAA4E,SA7IA,SAAAkb,EAAAI,GAOA,IANA,IAAAhI,GAAAgI,GAAA,KAAAlW,MAAA,KAAAnN,MAAA,GAAA,GAAAF,OAAAmjB,EAAA9V,MAAA,MACA7Q,EAAA+e,EAAAte,OACAumB,EAAAjI,EAAA/e,EAAA,GACAmN,GAAA,EACA8Z,EAAA,EAEAjnB,KACA,MAAA+e,EAAA/e,GACA+e,EAAAmI,OAAAlnB,EAAA,GACA,OAAA+e,EAAA/e,IACA+e,EAAAmI,OAAAlnB,EAAA,GACAinB,KACAA,IACA,IAAAjnB,IAAAmN,GAAA,GACA4R,EAAAmI,OAAAlnB,EAAA,GACAinB,KAOA,OAHA9Z,GAAA4R,EAAA5R,QAAA,IACA,MAAA6Z,GAAA,OAAAA,GAAAjI,EAAA3O,KAAA,IAEA2O,EAAAzO,KAAA,KAsHA6W,CAAAtgB,EAAA4E,SAAAvC,EAAAuC,WAQAsa,EAAAlf,EAAAwC,KAAAxC,EAAAsC,YACAtC,EAAAuC,KAAAvC,EAAA+X,SACA/X,EAAAwC,KAAA,IAMAxC,EAAAugB,SAAAvgB,EAAAwgB,SAAA,GACAxgB,EAAAygB,OACAT,EAAAhgB,EAAAygB,KAAAzW,MAAA,KACAhK,EAAAugB,SAAAP,EAAA,IAAA,GACAhgB,EAAAwgB,SAAAR,EAAA,IAAA,IAGAhgB,EAAAZ,OAAAY,EAAAsC,UAAAtC,EAAAuC,MAAA,UAAAvC,EAAAsC,SACAtC,EAAAsC,SAAA,KAAAtC,EAAAuC,KACA,OAKAvC,EAAAH,KAAAG,EAAAyH,WAiIAiY,EAAAjlB,UAAA,CAAAkK,IAjHA,SAAAqa,EAAAnW,EAAA6X,GACA,IAAA1gB,EAAApH,KAEA,OAAAomB,GACA,IAAA,QACA,iBAAAnW,GAAAA,EAAAjP,SACAiP,GAAA6X,GAAAvI,EAAA7Y,OAAAuJ,IAGA7I,EAAAgf,GAAAnW,EACA,MAEA,IAAA,OACA7I,EAAAgf,GAAAnW,EAEAqW,EAAArW,EAAA7I,EAAAsC,UAGAuG,IACA7I,EAAAuC,KAAAvC,EAAA+X,SAAA,IAAAlP,IAHA7I,EAAAuC,KAAAvC,EAAA+X,SACA/X,EAAAgf,GAAA,IAKA,MAEA,IAAA,WACAhf,EAAAgf,GAAAnW,EAEA7I,EAAAwC,OAAAqG,GAAA,IAAA7I,EAAAwC,MACAxC,EAAAuC,KAAAsG,EACA,MAEA,IAAA,OACA7I,EAAAgf,GAAAnW,EAEA,QAAAkD,KAAAlD,IACAA,EAAAA,EAAAmB,MAAA,KACAhK,EAAAwC,KAAAqG,EAAAyU,MACAtd,EAAA+X,SAAAlP,EAAAY,KAAA,OAEAzJ,EAAA+X,SAAAlP,EACA7I,EAAAwC,KAAA,IAGA,MAEA,IAAA,WACAxC,EAAAsC,SAAAuG,EAAAnE,cACA1E,EAAAof,SAAAsB,EACA,MAEA,IAAA,WACA,IAAA,OACA,GAAA7X,EAAA,CACA,IAAA8X,EAAA,aAAA3B,EAAA,IAAA,IACAhf,EAAAgf,GAAAnW,EAAAkT,OAAA,KAAA4E,EAAAA,EAAA9X,EAAAA,OAEA7I,EAAAgf,GAAAnW,EAEA,MAEA,QACA7I,EAAAgf,GAAAnW,EAGA,IAAA,IAAA1P,EAAA,EAAAA,EAAAkmB,EAAAzlB,OAAAT,IAAA,CACA,IAAAynB,EAAAvB,EAAAlmB,GAEAynB,EAAA,KAAA5gB,EAAA4gB,EAAA,IAAA5gB,EAAA4gB,EAAA,IAAAlc,eASA,OANA1E,EAAAZ,OAAAY,EAAAsC,UAAAtC,EAAAuC,MAAA,UAAAvC,EAAAsC,SACAtC,EAAAsC,SAAA,KAAAtC,EAAAuC,KACA,OAEAvC,EAAAH,KAAAG,EAAAyH,WAEAzH,GAqCAyH,SA3BA,SAAA9J,GACAA,GAAA,mBAAAA,IAAAA,EAAAwa,EAAAxa,WAEA,IAAAohB,EACA/e,EAAApH,KACA0J,EAAAtC,EAAAsC,SAEAA,GAAA,MAAAA,EAAAyZ,OAAAzZ,EAAA1I,OAAA,KAAA0I,GAAA,KAEA,IAAAoH,EAAApH,GAAAtC,EAAAof,QAAA,KAAA,IAeA,OAbApf,EAAAugB,WACA7W,GAAA1J,EAAAugB,SACAvgB,EAAAwgB,WAAA9W,GAAA,IAAA1J,EAAAwgB,UACA9W,GAAA,KAGAA,GAAA1J,EAAAuC,KAAAvC,EAAA4E,UAEAma,EAAA,iBAAA/e,EAAA+e,MAAAphB,EAAAqC,EAAA+e,OAAA/e,EAAA+e,SACArV,GAAA,MAAAqV,EAAAhD,OAAA,GAAA,IAAAgD,EAAAA,GAEA/e,EAAAhB,OAAA0K,GAAA1J,EAAAhB,MAEA0K,IASAgW,EAAAE,gBAAAA,EACAF,EAAArd,SAAAmd,EACAE,EAAAvH,GAAAA,EAEA7f,EAAAD,QAAAqnB,uK1DxaA","file":"sockjs.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","'use strict';\n\nvar transportList = require('./transport-list');\n\nmodule.exports = require('./main')(transportList);\n\n// TODO can't get rid of this until all servers do\nif ('_sockjs_onload' in global) {\n setTimeout(global._sockjs_onload, 1);\n}\n","'use strict';\n\nvar inherits = require('inherits')\n , Event = require('./event')\n ;\n\nfunction CloseEvent() {\n Event.call(this);\n this.initEvent('close', false, false);\n this.wasClean = false;\n this.code = 0;\n this.reason = '';\n}\n\ninherits(CloseEvent, Event);\n\nmodule.exports = CloseEvent;\n","'use strict';\n\nvar inherits = require('inherits')\n , EventTarget = require('./eventtarget')\n ;\n\nfunction EventEmitter() {\n EventTarget.call(this);\n}\n\ninherits(EventEmitter, EventTarget);\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n if (type) {\n delete this._listeners[type];\n } else {\n this._listeners = {};\n }\n};\n\nEventEmitter.prototype.once = function(type, listener) {\n var self = this\n , fired = false;\n\n function g() {\n self.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n this.on(type, g);\n};\n\nEventEmitter.prototype.emit = function() {\n var type = arguments[0];\n var listeners = this._listeners[type];\n if (!listeners) {\n return;\n }\n // equivalent of Array.prototype.slice.call(arguments, 1);\n var l = arguments.length;\n var args = new Array(l - 1);\n for (var ai = 1; ai < l; ai++) {\n args[ai - 1] = arguments[ai];\n }\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].apply(this, args);\n }\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener;\nEventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener;\n\nmodule.exports.EventEmitter = EventEmitter;\n","'use strict';\n\nfunction Event(eventType) {\n this.type = eventType;\n}\n\nEvent.prototype.initEvent = function(eventType, canBubble, cancelable) {\n this.type = eventType;\n this.bubbles = canBubble;\n this.cancelable = cancelable;\n this.timeStamp = +new Date();\n return this;\n};\n\nEvent.prototype.stopPropagation = function() {};\nEvent.prototype.preventDefault = function() {};\n\nEvent.CAPTURING_PHASE = 1;\nEvent.AT_TARGET = 2;\nEvent.BUBBLING_PHASE = 3;\n\nmodule.exports = Event;\n","'use strict';\n\n/* Simplified implementation of DOM2 EventTarget.\n * http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget\n */\n\nfunction EventTarget() {\n this._listeners = {};\n}\n\nEventTarget.prototype.addEventListener = function(eventType, listener) {\n if (!(eventType in this._listeners)) {\n this._listeners[eventType] = [];\n }\n var arr = this._listeners[eventType];\n // #4\n if (arr.indexOf(listener) === -1) {\n // Make a copy so as not to interfere with a current dispatchEvent.\n arr = arr.concat([listener]);\n }\n this._listeners[eventType] = arr;\n};\n\nEventTarget.prototype.removeEventListener = function(eventType, listener) {\n var arr = this._listeners[eventType];\n if (!arr) {\n return;\n }\n var idx = arr.indexOf(listener);\n if (idx !== -1) {\n if (arr.length > 1) {\n // Make a copy so as not to interfere with a current dispatchEvent.\n this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1));\n } else {\n delete this._listeners[eventType];\n }\n return;\n }\n};\n\nEventTarget.prototype.dispatchEvent = function() {\n var event = arguments[0];\n var t = event.type;\n // equivalent of Array.prototype.slice.call(arguments, 0);\n var args = arguments.length === 1 ? [event] : Array.apply(null, arguments);\n // TODO: This doesn't match the real behavior; per spec, onfoo get\n // their place in line from the /first/ time they're set from\n // non-null. Although WebKit bumps it to the end every time it's\n // set.\n if (this['on' + t]) {\n this['on' + t].apply(this, args);\n }\n if (t in this._listeners) {\n // Grab a reference to the listeners list. removeEventListener may alter the list.\n var listeners = this._listeners[t];\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].apply(this, args);\n }\n }\n};\n\nmodule.exports = EventTarget;\n","'use strict';\n\nvar inherits = require('inherits')\n , Event = require('./event')\n ;\n\nfunction TransportMessageEvent(data) {\n Event.call(this);\n this.initEvent('message', false, false);\n this.data = data;\n}\n\ninherits(TransportMessageEvent, Event);\n\nmodule.exports = TransportMessageEvent;\n","'use strict';\n\nvar JSON3 = require('json3')\n , iframeUtils = require('./utils/iframe')\n ;\n\nfunction FacadeJS(transport) {\n this._transport = transport;\n transport.on('message', this._transportMessage.bind(this));\n transport.on('close', this._transportClose.bind(this));\n}\n\nFacadeJS.prototype._transportClose = function(code, reason) {\n iframeUtils.postMessage('c', JSON3.stringify([code, reason]));\n};\nFacadeJS.prototype._transportMessage = function(frame) {\n iframeUtils.postMessage('t', frame);\n};\nFacadeJS.prototype._send = function(data) {\n this._transport.send(data);\n};\nFacadeJS.prototype._close = function() {\n this._transport.close();\n this._transport.removeAllListeners();\n};\n\nmodule.exports = FacadeJS;\n","'use strict';\n\nvar urlUtils = require('./utils/url')\n , eventUtils = require('./utils/event')\n , JSON3 = require('json3')\n , FacadeJS = require('./facade')\n , InfoIframeReceiver = require('./info-iframe-receiver')\n , iframeUtils = require('./utils/iframe')\n , loc = require('./location')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:iframe-bootstrap');\n}\n\nmodule.exports = function(SockJS, availableTransports) {\n var transportMap = {};\n availableTransports.forEach(function(at) {\n if (at.facadeTransport) {\n transportMap[at.facadeTransport.transportName] = at.facadeTransport;\n }\n });\n\n // hard-coded for the info iframe\n // TODO see if we can make this more dynamic\n transportMap[InfoIframeReceiver.transportName] = InfoIframeReceiver;\n var parentOrigin;\n\n /* eslint-disable camelcase */\n SockJS.bootstrap_iframe = function() {\n /* eslint-enable camelcase */\n var facade;\n iframeUtils.currentWindowId = loc.hash.slice(1);\n var onMessage = function(e) {\n if (e.source !== parent) {\n return;\n }\n if (typeof parentOrigin === 'undefined') {\n parentOrigin = e.origin;\n }\n if (e.origin !== parentOrigin) {\n return;\n }\n\n var iframeMessage;\n try {\n iframeMessage = JSON3.parse(e.data);\n } catch (ignored) {\n debug('bad json', e.data);\n return;\n }\n\n if (iframeMessage.windowId !== iframeUtils.currentWindowId) {\n return;\n }\n switch (iframeMessage.type) {\n case 's':\n var p;\n try {\n p = JSON3.parse(iframeMessage.data);\n } catch (ignored) {\n debug('bad json', iframeMessage.data);\n break;\n }\n var version = p[0];\n var transport = p[1];\n var transUrl = p[2];\n var baseUrl = p[3];\n debug(version, transport, transUrl, baseUrl);\n // change this to semver logic\n if (version !== SockJS.version) {\n throw new Error('Incompatible SockJS! Main site uses:' +\n ' \"' + version + '\", the iframe:' +\n ' \"' + SockJS.version + '\".');\n }\n\n if (!urlUtils.isOriginEqual(transUrl, loc.href) ||\n !urlUtils.isOriginEqual(baseUrl, loc.href)) {\n throw new Error('Can\\'t connect to different domain from within an ' +\n 'iframe. (' + loc.href + ', ' + transUrl + ', ' + baseUrl + ')');\n }\n facade = new FacadeJS(new transportMap[transport](transUrl, baseUrl));\n break;\n case 'm':\n facade._send(iframeMessage.data);\n break;\n case 'c':\n if (facade) {\n facade._close();\n }\n facade = null;\n break;\n }\n };\n\n eventUtils.attachEvent('message', onMessage);\n\n // Start\n iframeUtils.postMessage('s');\n };\n};\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , JSON3 = require('json3')\n , objectUtils = require('./utils/object')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:info-ajax');\n}\n\nfunction InfoAjax(url, AjaxObject) {\n EventEmitter.call(this);\n\n var self = this;\n var t0 = +new Date();\n this.xo = new AjaxObject('GET', url);\n\n this.xo.once('finish', function(status, text) {\n var info, rtt;\n if (status === 200) {\n rtt = (+new Date()) - t0;\n if (text) {\n try {\n info = JSON3.parse(text);\n } catch (e) {\n debug('bad json', text);\n }\n }\n\n if (!objectUtils.isObject(info)) {\n info = {};\n }\n }\n self.emit('finish', info, rtt);\n self.removeAllListeners();\n });\n}\n\ninherits(InfoAjax, EventEmitter);\n\nInfoAjax.prototype.close = function() {\n this.removeAllListeners();\n this.xo.close();\n};\n\nmodule.exports = InfoAjax;\n","'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n , JSON3 = require('json3')\n , XHRLocalObject = require('./transport/sender/xhr-local')\n , InfoAjax = require('./info-ajax')\n ;\n\nfunction InfoReceiverIframe(transUrl) {\n var self = this;\n EventEmitter.call(this);\n\n this.ir = new InfoAjax(transUrl, XHRLocalObject);\n this.ir.once('finish', function(info, rtt) {\n self.ir = null;\n self.emit('message', JSON3.stringify([info, rtt]));\n });\n}\n\ninherits(InfoReceiverIframe, EventEmitter);\n\nInfoReceiverIframe.transportName = 'iframe-info-receiver';\n\nInfoReceiverIframe.prototype.close = function() {\n if (this.ir) {\n this.ir.close();\n this.ir = null;\n }\n this.removeAllListeners();\n};\n\nmodule.exports = InfoReceiverIframe;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , JSON3 = require('json3')\n , utils = require('./utils/event')\n , IframeTransport = require('./transport/iframe')\n , InfoReceiverIframe = require('./info-iframe-receiver')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:info-iframe');\n}\n\nfunction InfoIframe(baseUrl, url) {\n var self = this;\n EventEmitter.call(this);\n\n var go = function() {\n var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl);\n\n ifr.once('message', function(msg) {\n if (msg) {\n var d;\n try {\n d = JSON3.parse(msg);\n } catch (e) {\n debug('bad json', msg);\n self.emit('finish');\n self.close();\n return;\n }\n\n var info = d[0], rtt = d[1];\n self.emit('finish', info, rtt);\n }\n self.close();\n });\n\n ifr.once('close', function() {\n self.emit('finish');\n self.close();\n });\n };\n\n // TODO this seems the same as the 'needBody' from transports\n if (!global.document.body) {\n utils.attachEvent('load', go);\n } else {\n go();\n }\n}\n\ninherits(InfoIframe, EventEmitter);\n\nInfoIframe.enabled = function() {\n return IframeTransport.enabled();\n};\n\nInfoIframe.prototype.close = function() {\n if (this.ifr) {\n this.ifr.close();\n }\n this.removeAllListeners();\n this.ifr = null;\n};\n\nmodule.exports = InfoIframe;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , urlUtils = require('./utils/url')\n , XDR = require('./transport/sender/xdr')\n , XHRCors = require('./transport/sender/xhr-cors')\n , XHRLocal = require('./transport/sender/xhr-local')\n , XHRFake = require('./transport/sender/xhr-fake')\n , InfoIframe = require('./info-iframe')\n , InfoAjax = require('./info-ajax')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:info-receiver');\n}\n\nfunction InfoReceiver(baseUrl, urlInfo) {\n debug(baseUrl);\n var self = this;\n EventEmitter.call(this);\n\n setTimeout(function() {\n self.doXhr(baseUrl, urlInfo);\n }, 0);\n}\n\ninherits(InfoReceiver, EventEmitter);\n\n// TODO this is currently ignoring the list of available transports and the whitelist\n\nInfoReceiver._getReceiver = function(baseUrl, url, urlInfo) {\n // determine method of CORS support (if needed)\n if (urlInfo.sameOrigin) {\n return new InfoAjax(url, XHRLocal);\n }\n if (XHRCors.enabled) {\n return new InfoAjax(url, XHRCors);\n }\n if (XDR.enabled && urlInfo.sameScheme) {\n return new InfoAjax(url, XDR);\n }\n if (InfoIframe.enabled()) {\n return new InfoIframe(baseUrl, url);\n }\n return new InfoAjax(url, XHRFake);\n};\n\nInfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) {\n var self = this\n , url = urlUtils.addPath(baseUrl, '/info')\n ;\n debug('doXhr', url);\n\n this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo);\n\n this.timeoutRef = setTimeout(function() {\n debug('timeout');\n self._cleanup(false);\n self.emit('finish');\n }, InfoReceiver.timeout);\n\n this.xo.once('finish', function(info, rtt) {\n debug('finish', info, rtt);\n self._cleanup(true);\n self.emit('finish', info, rtt);\n });\n};\n\nInfoReceiver.prototype._cleanup = function(wasClean) {\n debug('_cleanup');\n clearTimeout(this.timeoutRef);\n this.timeoutRef = null;\n if (!wasClean && this.xo) {\n this.xo.close();\n }\n this.xo = null;\n};\n\nInfoReceiver.prototype.close = function() {\n debug('close');\n this.removeAllListeners();\n this._cleanup(false);\n};\n\nInfoReceiver.timeout = 8000;\n\nmodule.exports = InfoReceiver;\n","'use strict';\n\nmodule.exports = global.location || {\n origin: 'http://localhost:80'\n, protocol: 'http:'\n, host: 'localhost'\n, port: 80\n, href: 'http://localhost/'\n, hash: ''\n};\n","'use strict';\n\nrequire('./shims');\n\nvar URL = require('url-parse')\n , inherits = require('inherits')\n , JSON3 = require('json3')\n , random = require('./utils/random')\n , escape = require('./utils/escape')\n , urlUtils = require('./utils/url')\n , eventUtils = require('./utils/event')\n , transport = require('./utils/transport')\n , objectUtils = require('./utils/object')\n , browser = require('./utils/browser')\n , log = require('./utils/log')\n , Event = require('./event/event')\n , EventTarget = require('./event/eventtarget')\n , loc = require('./location')\n , CloseEvent = require('./event/close')\n , TransportMessageEvent = require('./event/trans-message')\n , InfoReceiver = require('./info-receiver')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:main');\n}\n\nvar transports;\n\n// follow constructor steps defined at http://dev.w3.org/html5/websockets/#the-websocket-interface\nfunction SockJS(url, protocols, options) {\n if (!(this instanceof SockJS)) {\n return new SockJS(url, protocols, options);\n }\n if (arguments.length < 1) {\n throw new TypeError(\"Failed to construct 'SockJS: 1 argument required, but only 0 present\");\n }\n EventTarget.call(this);\n\n this.readyState = SockJS.CONNECTING;\n this.extensions = '';\n this.protocol = '';\n\n // non-standard extension\n options = options || {};\n if (options.protocols_whitelist) {\n log.warn(\"'protocols_whitelist' is DEPRECATED. Use 'transports' instead.\");\n }\n this._transportsWhitelist = options.transports;\n this._transportOptions = options.transportOptions || {};\n this._timeout = options.timeout || 0;\n\n var sessionId = options.sessionId || 8;\n if (typeof sessionId === 'function') {\n this._generateSessionId = sessionId;\n } else if (typeof sessionId === 'number') {\n this._generateSessionId = function() {\n return random.string(sessionId);\n };\n } else {\n throw new TypeError('If sessionId is used in the options, it needs to be a number or a function.');\n }\n\n this._server = options.server || random.numberString(1000);\n\n // Step 1 of WS spec - parse and validate the url. Issue #8\n var parsedUrl = new URL(url);\n if (!parsedUrl.host || !parsedUrl.protocol) {\n throw new SyntaxError(\"The URL '\" + url + \"' is invalid\");\n } else if (parsedUrl.hash) {\n throw new SyntaxError('The URL must not contain a fragment');\n } else if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n throw new SyntaxError(\"The URL's scheme must be either 'http:' or 'https:'. '\" + parsedUrl.protocol + \"' is not allowed.\");\n }\n\n var secure = parsedUrl.protocol === 'https:';\n // Step 2 - don't allow secure origin with an insecure protocol\n if (loc.protocol === 'https:' && !secure) {\n throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS');\n }\n\n // Step 3 - check port access - no need here\n // Step 4 - parse protocols argument\n if (!protocols) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n protocols = [protocols];\n }\n\n // Step 5 - check protocols argument\n var sortedProtocols = protocols.sort();\n sortedProtocols.forEach(function(proto, i) {\n if (!proto) {\n throw new SyntaxError(\"The protocols entry '\" + proto + \"' is invalid.\");\n }\n if (i < (sortedProtocols.length - 1) && proto === sortedProtocols[i + 1]) {\n throw new SyntaxError(\"The protocols entry '\" + proto + \"' is duplicated.\");\n }\n });\n\n // Step 6 - convert origin\n var o = urlUtils.getOrigin(loc.href);\n this._origin = o ? o.toLowerCase() : null;\n\n // remove the trailing slash\n parsedUrl.set('pathname', parsedUrl.pathname.replace(/\\/+$/, ''));\n\n // store the sanitized url\n this.url = parsedUrl.href;\n debug('using url', this.url);\n\n // Step 7 - start connection in background\n // obtain server info\n // http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html#section-26\n this._urlInfo = {\n nullOrigin: !browser.hasDomain()\n , sameOrigin: urlUtils.isOriginEqual(this.url, loc.href)\n , sameScheme: urlUtils.isSchemeEqual(this.url, loc.href)\n };\n\n this._ir = new InfoReceiver(this.url, this._urlInfo);\n this._ir.once('finish', this._receiveInfo.bind(this));\n}\n\ninherits(SockJS, EventTarget);\n\nfunction userSetCode(code) {\n return code === 1000 || (code >= 3000 && code <= 4999);\n}\n\nSockJS.prototype.close = function(code, reason) {\n // Step 1\n if (code && !userSetCode(code)) {\n throw new Error('InvalidAccessError: Invalid code');\n }\n // Step 2.4 states the max is 123 bytes, but we are just checking length\n if (reason && reason.length > 123) {\n throw new SyntaxError('reason argument has an invalid length');\n }\n\n // Step 3.1\n if (this.readyState === SockJS.CLOSING || this.readyState === SockJS.CLOSED) {\n return;\n }\n\n // TODO look at docs to determine how to set this\n var wasClean = true;\n this._close(code || 1000, reason || 'Normal closure', wasClean);\n};\n\nSockJS.prototype.send = function(data) {\n // #13 - convert anything non-string to string\n // TODO this currently turns objects into [object Object]\n if (typeof data !== 'string') {\n data = '' + data;\n }\n if (this.readyState === SockJS.CONNECTING) {\n throw new Error('InvalidStateError: The connection has not been established yet');\n }\n if (this.readyState !== SockJS.OPEN) {\n return;\n }\n this._transport.send(escape.quote(data));\n};\n\nSockJS.version = require('./version');\n\nSockJS.CONNECTING = 0;\nSockJS.OPEN = 1;\nSockJS.CLOSING = 2;\nSockJS.CLOSED = 3;\n\nSockJS.prototype._receiveInfo = function(info, rtt) {\n debug('_receiveInfo', rtt);\n this._ir = null;\n if (!info) {\n this._close(1002, 'Cannot connect to server');\n return;\n }\n\n // establish a round-trip timeout (RTO) based on the\n // round-trip time (RTT)\n this._rto = this.countRTO(rtt);\n // allow server to override url used for the actual transport\n this._transUrl = info.base_url ? info.base_url : this.url;\n info = objectUtils.extend(info, this._urlInfo);\n debug('info', info);\n // determine list of desired and supported transports\n var enabledTransports = transports.filterToEnabled(this._transportsWhitelist, info);\n this._transports = enabledTransports.main;\n debug(this._transports.length + ' enabled transports');\n\n this._connect();\n};\n\nSockJS.prototype._connect = function() {\n for (var Transport = this._transports.shift(); Transport; Transport = this._transports.shift()) {\n debug('attempt', Transport.transportName);\n if (Transport.needBody) {\n if (!global.document.body ||\n (typeof global.document.readyState !== 'undefined' &&\n global.document.readyState !== 'complete' &&\n global.document.readyState !== 'interactive')) {\n debug('waiting for body');\n this._transports.unshift(Transport);\n eventUtils.attachEvent('load', this._connect.bind(this));\n return;\n }\n }\n\n // calculate timeout based on RTO and round trips. Default to 5s\n var timeoutMs = Math.max(this._timeout, (this._rto * Transport.roundTrips) || 5000);\n this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), timeoutMs);\n debug('using timeout', timeoutMs);\n\n var transportUrl = urlUtils.addPath(this._transUrl, '/' + this._server + '/' + this._generateSessionId());\n var options = this._transportOptions[Transport.transportName];\n debug('transport url', transportUrl);\n var transportObj = new Transport(transportUrl, this._transUrl, options);\n transportObj.on('message', this._transportMessage.bind(this));\n transportObj.once('close', this._transportClose.bind(this));\n transportObj.transportName = Transport.transportName;\n this._transport = transportObj;\n\n return;\n }\n this._close(2000, 'All transports failed', false);\n};\n\nSockJS.prototype._transportTimeout = function() {\n debug('_transportTimeout');\n if (this.readyState === SockJS.CONNECTING) {\n if (this._transport) {\n this._transport.close();\n }\n\n this._transportClose(2007, 'Transport timed out');\n }\n};\n\nSockJS.prototype._transportMessage = function(msg) {\n debug('_transportMessage', msg);\n var self = this\n , type = msg.slice(0, 1)\n , content = msg.slice(1)\n , payload\n ;\n\n // first check for messages that don't need a payload\n switch (type) {\n case 'o':\n this._open();\n return;\n case 'h':\n this.dispatchEvent(new Event('heartbeat'));\n debug('heartbeat', this.transport);\n return;\n }\n\n if (content) {\n try {\n payload = JSON3.parse(content);\n } catch (e) {\n debug('bad json', content);\n }\n }\n\n if (typeof payload === 'undefined') {\n debug('empty payload', content);\n return;\n }\n\n switch (type) {\n case 'a':\n if (Array.isArray(payload)) {\n payload.forEach(function(p) {\n debug('message', self.transport, p);\n self.dispatchEvent(new TransportMessageEvent(p));\n });\n }\n break;\n case 'm':\n debug('message', this.transport, payload);\n this.dispatchEvent(new TransportMessageEvent(payload));\n break;\n case 'c':\n if (Array.isArray(payload) && payload.length === 2) {\n this._close(payload[0], payload[1], true);\n }\n break;\n }\n};\n\nSockJS.prototype._transportClose = function(code, reason) {\n debug('_transportClose', this.transport, code, reason);\n if (this._transport) {\n this._transport.removeAllListeners();\n this._transport = null;\n this.transport = null;\n }\n\n if (!userSetCode(code) && code !== 2000 && this.readyState === SockJS.CONNECTING) {\n this._connect();\n return;\n }\n\n this._close(code, reason);\n};\n\nSockJS.prototype._open = function() {\n debug('_open', this._transport && this._transport.transportName, this.readyState);\n if (this.readyState === SockJS.CONNECTING) {\n if (this._transportTimeoutId) {\n clearTimeout(this._transportTimeoutId);\n this._transportTimeoutId = null;\n }\n this.readyState = SockJS.OPEN;\n this.transport = this._transport.transportName;\n this.dispatchEvent(new Event('open'));\n debug('connected', this.transport);\n } else {\n // The server might have been restarted, and lost track of our\n // connection.\n this._close(1006, 'Server lost session');\n }\n};\n\nSockJS.prototype._close = function(code, reason, wasClean) {\n debug('_close', this.transport, code, reason, wasClean, this.readyState);\n var forceFail = false;\n\n if (this._ir) {\n forceFail = true;\n this._ir.close();\n this._ir = null;\n }\n if (this._transport) {\n this._transport.close();\n this._transport = null;\n this.transport = null;\n }\n\n if (this.readyState === SockJS.CLOSED) {\n throw new Error('InvalidStateError: SockJS has already been closed');\n }\n\n this.readyState = SockJS.CLOSING;\n setTimeout(function() {\n this.readyState = SockJS.CLOSED;\n\n if (forceFail) {\n this.dispatchEvent(new Event('error'));\n }\n\n var e = new CloseEvent('close');\n e.wasClean = wasClean || false;\n e.code = code || 1000;\n e.reason = reason;\n\n this.dispatchEvent(e);\n this.onmessage = this.onclose = this.onerror = null;\n debug('disconnected');\n }.bind(this), 0);\n};\n\n// See: http://www.erg.abdn.ac.uk/~gerrit/dccp/notes/ccid2/rto_estimator/\n// and RFC 2988.\nSockJS.prototype.countRTO = function(rtt) {\n // In a local environment, when using IE8/9 and the `jsonp-polling`\n // transport the time needed to establish a connection (the time that pass\n // from the opening of the transport to the call of `_dispatchOpen`) is\n // around 200msec (the lower bound used in the article above) and this\n // causes spurious timeouts. For this reason we calculate a value slightly\n // larger than that used in the article.\n if (rtt > 100) {\n return 4 * rtt; // rto > 400msec\n }\n return 300 + rtt; // 300msec < rto <= 400msec\n};\n\nmodule.exports = function(availableTransports) {\n transports = transport(availableTransports);\n require('./iframe-bootstrap')(SockJS, availableTransports);\n return SockJS;\n};\n","/* eslint-disable */\n/* jscs: disable */\n'use strict';\n\n// pulled specific shims from https://github.com/es-shims/es5-shim\n\nvar ArrayPrototype = Array.prototype;\nvar ObjectPrototype = Object.prototype;\nvar FunctionPrototype = Function.prototype;\nvar StringPrototype = String.prototype;\nvar array_slice = ArrayPrototype.slice;\n\nvar _toString = ObjectPrototype.toString;\nvar isFunction = function (val) {\n return ObjectPrototype.toString.call(val) === '[object Function]';\n};\nvar isArray = function isArray(obj) {\n return _toString.call(obj) === '[object Array]';\n};\nvar isString = function isString(obj) {\n return _toString.call(obj) === '[object String]';\n};\n\nvar supportsDescriptors = Object.defineProperty && (function () {\n try {\n Object.defineProperty({}, 'x', {});\n return true;\n } catch (e) { /* this is ES3 */\n return false;\n }\n}());\n\n// Define configurable, writable and non-enumerable props\n// if they don't exist.\nvar defineProperty;\nif (supportsDescriptors) {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) { return; }\n Object.defineProperty(object, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: method\n });\n };\n} else {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) { return; }\n object[name] = method;\n };\n}\nvar defineProperties = function (object, map, forceAssign) {\n for (var name in map) {\n if (ObjectPrototype.hasOwnProperty.call(map, name)) {\n defineProperty(object, name, map[name], forceAssign);\n }\n }\n};\n\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + ' to object');\n }\n return Object(o);\n};\n\n//\n// Util\n// ======\n//\n\n// ES5 9.4\n// http://es5.github.com/#x9.4\n// http://jsperf.com/to-integer\n\nfunction toInteger(num) {\n var n = +num;\n if (n !== n) { // isNaN\n n = 0;\n } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n}\n\nfunction ToUint32(x) {\n return x >>> 0;\n}\n\n//\n// Function\n// ========\n//\n\n// ES-5 15.3.4.5\n// http://es5.github.com/#x15.3.4.5\n\nfunction Empty() {}\n\ndefineProperties(FunctionPrototype, {\n bind: function bind(that) { // .length is 1\n // 1. Let Target be the this value.\n var target = this;\n // 2. If IsCallable(Target) is false, throw a TypeError exception.\n if (!isFunction(target)) {\n throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n }\n // 3. Let A be a new (possibly empty) internal list of all of the\n // argument values provided after thisArg (arg1, arg2 etc), in order.\n // XXX slicedArgs will stand in for \"A\" if used\n var args = array_slice.call(arguments, 1); // for normal call\n // 4. Let F be a new native ECMAScript object.\n // 11. Set the [[Prototype]] internal property of F to the standard\n // built-in Function prototype object as specified in 15.3.3.1.\n // 12. Set the [[Call]] internal property of F as described in\n // 15.3.4.5.1.\n // 13. Set the [[Construct]] internal property of F as described in\n // 15.3.4.5.2.\n // 14. Set the [[HasInstance]] internal property of F as described in\n // 15.3.4.5.3.\n var binder = function () {\n\n if (this instanceof bound) {\n // 15.3.4.5.2 [[Construct]]\n // When the [[Construct]] internal method of a function object,\n // F that was created using the bind function is called with a\n // list of arguments ExtraArgs, the following steps are taken:\n // 1. Let target be the value of F's [[TargetFunction]]\n // internal property.\n // 2. If target has no [[Construct]] internal method, a\n // TypeError exception is thrown.\n // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Construct]] internal\n // method of target providing args as the arguments.\n\n var result = target.apply(\n this,\n args.concat(array_slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n // 15.3.4.5.1 [[Call]]\n // When the [[Call]] internal method of a function object, F,\n // which was created using the bind function is called with a\n // this value and a list of arguments ExtraArgs, the following\n // steps are taken:\n // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 2. Let boundThis be the value of F's [[BoundThis]] internal\n // property.\n // 3. Let target be the value of F's [[TargetFunction]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Call]] internal method\n // of target providing boundThis as the this value and\n // providing args as the arguments.\n\n // equiv: target.call(this, ...boundArgs, ...args)\n return target.apply(\n that,\n args.concat(array_slice.call(arguments))\n );\n\n }\n\n };\n\n // 15. If the [[Class]] internal property of Target is \"Function\", then\n // a. Let L be the length property of Target minus the length of A.\n // b. Set the length own property of F to either 0 or L, whichever is\n // larger.\n // 16. Else set the length own property of F to 0.\n\n var boundLength = Math.max(0, target.length - args.length);\n\n // 17. Set the attributes of the length own property of F to the values\n // specified in 15.3.5.1.\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n // XXX Build a dynamic function with desired amount of arguments is the only\n // way to set the length property of a function.\n // In environments where Content Security Policies enabled (Chrome extensions,\n // for ex.) all use of eval or Function costructor throws an exception.\n // However in all of these environments Function.prototype.bind exists\n // and so this code will never be executed.\n var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n // Clean up dangling references.\n Empty.prototype = null;\n }\n\n // TODO\n // 18. Set the [[Extensible]] internal property of F to true.\n\n // TODO\n // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n // 20. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n // false.\n // 21. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n // and false.\n\n // TODO\n // NOTE Function objects created using Function.prototype.bind do not\n // have a prototype property or the [[Code]], [[FormalParameters]], and\n // [[Scope]] internal properties.\n // XXX can't delete prototype in pure-js.\n\n // 22. Return F.\n return bound;\n }\n});\n\n//\n// Array\n// =====\n//\n\n// ES5 15.4.3.2\n// http://es5.github.com/#x15.4.3.2\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\ndefineProperties(Array, { isArray: isArray });\n\n\nvar boxedString = Object('a');\nvar splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\nvar properlyBoxesContext = function properlyBoxed(method) {\n // Check node 0.6.21 bug where third parameter is not boxed\n var properlyBoxesNonStrict = true;\n var properlyBoxesStrict = true;\n if (method) {\n method.call('foo', function (_, __, context) {\n if (typeof context !== 'object') { properlyBoxesNonStrict = false; }\n });\n\n method.call([1], function () {\n 'use strict';\n properlyBoxesStrict = typeof this === 'string';\n }, 'x');\n }\n return !!method && properlyBoxesNonStrict && properlyBoxesStrict;\n};\n\ndefineProperties(ArrayPrototype, {\n forEach: function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && isString(this) ? this.split('') : object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n\n // If no callback function or if callback is not a callable function\n if (!isFunction(fun)) {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n // Invoke the callback function with call, passing arguments:\n // context, property value, property key, thisArg object\n // context\n fun.call(thisp, self[i], i, object);\n }\n }\n }\n}, !properlyBoxesContext(ArrayPrototype.forEach));\n\n// ES5 15.4.4.14\n// http://es5.github.com/#x15.4.4.14\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\nvar hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\ndefineProperties(ArrayPrototype, {\n indexOf: function indexOf(sought /*, fromIndex */ ) {\n var self = splitString && isString(this) ? this.split('') : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n\n // handle negative indices\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n }\n}, hasFirefox2IndexOfBug);\n\n//\n// String\n// ======\n//\n\n// ES5 15.5.4.14\n// http://es5.github.com/#x15.5.4.14\n\n// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n// Many browsers do not split properly with regular expressions or they\n// do not perform the split correctly under obscure conditions.\n// See http://blog.stevenlevithan.com/archives/cross-browser-split\n// I've tested in many browsers and this seems to cover the deviant ones:\n// 'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n// '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n// 'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n// [undefined, \"t\", undefined, \"e\", ...]\n// ''.split(/.?/) should be [], not [\"\"]\n// '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\nvar string_split = StringPrototype.split;\nif (\n 'ab'.split(/(?:ab)*/).length !== 2 ||\n '.'.split(/(.?)(.?)/).length !== 4 ||\n 'tesst'.split(/(s)*/)[1] === 't' ||\n 'test'.split(/(?:)/, -1).length !== 4 ||\n ''.split(/.?/).length ||\n '.'.split(/()()/).length > 1\n) {\n (function () {\n var compliantExecNpcg = /()??/.exec('')[1] === void 0; // NPCG: nonparticipating capturing group\n\n StringPrototype.split = function (separator, limit) {\n var string = this;\n if (separator === void 0 && limit === 0) {\n return [];\n }\n\n // If `separator` is not a regex, use native split\n if (_toString.call(separator) !== '[object RegExp]') {\n return string_split.call(this, separator, limit);\n }\n\n var output = [],\n flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.extended ? 'x' : '') + // Proposed for ES6\n (separator.sticky ? 'y' : ''), // Firefox 3+\n lastLastIndex = 0,\n // Make `global` and avoid `lastIndex` issues by working with a copy\n separator2, match, lastIndex, lastLength;\n separator = new RegExp(separator.source, flags + 'g');\n string += ''; // Type-convert\n if (!compliantExecNpcg) {\n // Doesn't need flags gy, but they don't hurt\n separator2 = new RegExp('^' + separator.source + '$(?!\\\\s)', flags);\n }\n /* Values for `limit`, per the spec:\n * If undefined: 4294967295 // Math.pow(2, 32) - 1\n * If 0, Infinity, or NaN: 0\n * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n * If other: Type-convert, then use the above rules\n */\n limit = limit === void 0 ?\n -1 >>> 0 : // Math.pow(2, 32) - 1\n ToUint32(limit);\n while (match = separator.exec(string)) {\n // `separator.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0].length;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for\n // nonparticipating capturing groups\n if (!compliantExecNpcg && match.length > 1) {\n match[0].replace(separator2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === void 0) {\n match[i] = void 0;\n }\n }\n });\n }\n if (match.length > 1 && match.index < string.length) {\n ArrayPrototype.push.apply(output, match.slice(1));\n }\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= limit) {\n break;\n }\n }\n if (separator.lastIndex === match.index) {\n separator.lastIndex++; // Avoid an infinite loop\n }\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separator.test('')) {\n output.push('');\n }\n } else {\n output.push(string.slice(lastLastIndex));\n }\n return output.length > limit ? output.slice(0, limit) : output;\n };\n }());\n\n// [bugfix, chrome]\n// If separator is undefined, then the result array contains just one String,\n// which is the this value (converted to a String). If limit is not undefined,\n// then the output array is truncated so that it contains no more than limit\n// elements.\n// \"0\".split(undefined, 0) -> []\n} else if ('0'.split(void 0, 0).length) {\n StringPrototype.split = function split(separator, limit) {\n if (separator === void 0 && limit === 0) { return []; }\n return string_split.call(this, separator, limit);\n };\n}\n\n// ECMA-262, 3rd B.2.3\n// Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n// non-normative section suggesting uniform semantics and it should be\n// normalized across all browsers\n// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\nvar string_substr = StringPrototype.substr;\nvar hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\ndefineProperties(StringPrototype, {\n substr: function substr(start, length) {\n return string_substr.call(\n this,\n start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,\n length\n );\n }\n}, hasNegativeSubstrBug);\n","'use strict';\n\nmodule.exports = [\n // streaming transports\n require('./transport/websocket')\n, require('./transport/xhr-streaming')\n, require('./transport/xdr-streaming')\n, require('./transport/eventsource')\n, require('./transport/lib/iframe-wrap')(require('./transport/eventsource'))\n\n // polling transports\n, require('./transport/htmlfile')\n, require('./transport/lib/iframe-wrap')(require('./transport/htmlfile'))\n, require('./transport/xhr-polling')\n, require('./transport/xdr-polling')\n, require('./transport/lib/iframe-wrap')(require('./transport/xhr-polling'))\n, require('./transport/jsonp-polling')\n];\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , utils = require('../../utils/event')\n , urlUtils = require('../../utils/url')\n , XHR = global.XMLHttpRequest\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:browser:xhr');\n}\n\nfunction AbstractXHRObject(method, url, payload, opts) {\n debug(method, url);\n var self = this;\n EventEmitter.call(this);\n\n setTimeout(function () {\n self._start(method, url, payload, opts);\n }, 0);\n}\n\ninherits(AbstractXHRObject, EventEmitter);\n\nAbstractXHRObject.prototype._start = function(method, url, payload, opts) {\n var self = this;\n\n try {\n this.xhr = new XHR();\n } catch (x) {\n // intentionally empty\n }\n\n if (!this.xhr) {\n debug('no xhr');\n this.emit('finish', 0, 'no xhr support');\n this._cleanup();\n return;\n }\n\n // several browsers cache POSTs\n url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n // Explorer tends to keep connection open, even after the\n // tab gets closed: http://bugs.jquery.com/ticket/5280\n this.unloadRef = utils.unloadAdd(function() {\n debug('unload cleanup');\n self._cleanup(true);\n });\n try {\n this.xhr.open(method, url, true);\n if (this.timeout && 'timeout' in this.xhr) {\n this.xhr.timeout = this.timeout;\n this.xhr.ontimeout = function() {\n debug('xhr timeout');\n self.emit('finish', 0, '');\n self._cleanup(false);\n };\n }\n } catch (e) {\n debug('exception', e);\n // IE raises an exception on wrong port.\n this.emit('finish', 0, '');\n this._cleanup(false);\n return;\n }\n\n if ((!opts || !opts.noCredentials) && AbstractXHRObject.supportsCORS) {\n debug('withCredentials');\n // Mozilla docs says https://developer.mozilla.org/en/XMLHttpRequest :\n // \"This never affects same-site requests.\"\n\n this.xhr.withCredentials = true;\n }\n if (opts && opts.headers) {\n for (var key in opts.headers) {\n this.xhr.setRequestHeader(key, opts.headers[key]);\n }\n }\n\n this.xhr.onreadystatechange = function() {\n if (self.xhr) {\n var x = self.xhr;\n var text, status;\n debug('readyState', x.readyState);\n switch (x.readyState) {\n case 3:\n // IE doesn't like peeking into responseText or status\n // on Microsoft.XMLHTTP and readystate=3\n try {\n status = x.status;\n text = x.responseText;\n } catch (e) {\n // intentionally empty\n }\n debug('status', status);\n // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n if (status === 1223) {\n status = 204;\n }\n\n // IE does return readystate == 3 for 404 answers.\n if (status === 200 && text && text.length > 0) {\n debug('chunk');\n self.emit('chunk', status, text);\n }\n break;\n case 4:\n status = x.status;\n debug('status', status);\n // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n if (status === 1223) {\n status = 204;\n }\n // IE returns this for a bad port\n // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx\n if (status === 12005 || status === 12029) {\n status = 0;\n }\n\n debug('finish', status, x.responseText);\n self.emit('finish', status, x.responseText);\n self._cleanup(false);\n break;\n }\n }\n };\n\n try {\n self.xhr.send(payload);\n } catch (e) {\n self.emit('finish', 0, '');\n self._cleanup(false);\n }\n};\n\nAbstractXHRObject.prototype._cleanup = function(abort) {\n debug('cleanup');\n if (!this.xhr) {\n return;\n }\n this.removeAllListeners();\n utils.unloadDel(this.unloadRef);\n\n // IE needs this field to be a function\n this.xhr.onreadystatechange = function() {};\n if (this.xhr.ontimeout) {\n this.xhr.ontimeout = null;\n }\n\n if (abort) {\n try {\n this.xhr.abort();\n } catch (x) {\n // intentionally empty\n }\n }\n this.unloadRef = this.xhr = null;\n};\n\nAbstractXHRObject.prototype.close = function() {\n debug('close');\n this._cleanup(true);\n};\n\nAbstractXHRObject.enabled = !!XHR;\n// override XMLHttpRequest for IE6/7\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (!AbstractXHRObject.enabled && (axo in global)) {\n debug('overriding xmlhttprequest');\n XHR = function() {\n try {\n return new global[axo]('Microsoft.XMLHTTP');\n } catch (e) {\n return null;\n }\n };\n AbstractXHRObject.enabled = !!new XHR();\n}\n\nvar cors = false;\ntry {\n cors = 'withCredentials' in new XHR();\n} catch (ignored) {\n // intentionally empty\n}\n\nAbstractXHRObject.supportsCORS = cors;\n\nmodule.exports = AbstractXHRObject;\n","module.exports = global.EventSource;\n","'use strict';\n\nvar Driver = global.WebSocket || global.MozWebSocket;\nif (Driver) {\n\tmodule.exports = function WebSocketBrowserDriver(url) {\n\t\treturn new Driver(url);\n\t};\n} else {\n\tmodule.exports = undefined;\n}\n","'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , EventSourceReceiver = require('./receiver/eventsource')\n , XHRCorsObject = require('./sender/xhr-cors')\n , EventSourceDriver = require('eventsource')\n ;\n\nfunction EventSourceTransport(transUrl) {\n if (!EventSourceTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n\n AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject);\n}\n\ninherits(EventSourceTransport, AjaxBasedTransport);\n\nEventSourceTransport.enabled = function() {\n return !!EventSourceDriver;\n};\n\nEventSourceTransport.transportName = 'eventsource';\nEventSourceTransport.roundTrips = 2;\n\nmodule.exports = EventSourceTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n , HtmlfileReceiver = require('./receiver/htmlfile')\n , XHRLocalObject = require('./sender/xhr-local')\n , AjaxBasedTransport = require('./lib/ajax-based')\n ;\n\nfunction HtmlFileTransport(transUrl) {\n if (!HtmlfileReceiver.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject);\n}\n\ninherits(HtmlFileTransport, AjaxBasedTransport);\n\nHtmlFileTransport.enabled = function(info) {\n return HtmlfileReceiver.enabled && info.sameOrigin;\n};\n\nHtmlFileTransport.transportName = 'htmlfile';\nHtmlFileTransport.roundTrips = 2;\n\nmodule.exports = HtmlFileTransport;\n","'use strict';\n\n// Few cool transports do work only for same-origin. In order to make\n// them work cross-domain we shall use iframe, served from the\n// remote domain. New browsers have capabilities to communicate with\n// cross domain iframe using postMessage(). In IE it was implemented\n// from IE 8+, but of course, IE got some details wrong:\n// http://msdn.microsoft.com/en-us/library/cc197015(v=VS.85).aspx\n// http://stevesouders.com/misc/test-postmessage.php\n\nvar inherits = require('inherits')\n , JSON3 = require('json3')\n , EventEmitter = require('events').EventEmitter\n , version = require('../version')\n , urlUtils = require('../utils/url')\n , iframeUtils = require('../utils/iframe')\n , eventUtils = require('../utils/event')\n , random = require('../utils/random')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:transport:iframe');\n}\n\nfunction IframeTransport(transport, transUrl, baseUrl) {\n if (!IframeTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n EventEmitter.call(this);\n\n var self = this;\n this.origin = urlUtils.getOrigin(baseUrl);\n this.baseUrl = baseUrl;\n this.transUrl = transUrl;\n this.transport = transport;\n this.windowId = random.string(8);\n\n var iframeUrl = urlUtils.addPath(baseUrl, '/iframe.html') + '#' + this.windowId;\n debug(transport, transUrl, iframeUrl);\n\n this.iframeObj = iframeUtils.createIframe(iframeUrl, function(r) {\n debug('err callback');\n self.emit('close', 1006, 'Unable to load an iframe (' + r + ')');\n self.close();\n });\n\n this.onmessageCallback = this._message.bind(this);\n eventUtils.attachEvent('message', this.onmessageCallback);\n}\n\ninherits(IframeTransport, EventEmitter);\n\nIframeTransport.prototype.close = function() {\n debug('close');\n this.removeAllListeners();\n if (this.iframeObj) {\n eventUtils.detachEvent('message', this.onmessageCallback);\n try {\n // When the iframe is not loaded, IE raises an exception\n // on 'contentWindow'.\n this.postMessage('c');\n } catch (x) {\n // intentionally empty\n }\n this.iframeObj.cleanup();\n this.iframeObj = null;\n this.onmessageCallback = this.iframeObj = null;\n }\n};\n\nIframeTransport.prototype._message = function(e) {\n debug('message', e.data);\n if (!urlUtils.isOriginEqual(e.origin, this.origin)) {\n debug('not same origin', e.origin, this.origin);\n return;\n }\n\n var iframeMessage;\n try {\n iframeMessage = JSON3.parse(e.data);\n } catch (ignored) {\n debug('bad json', e.data);\n return;\n }\n\n if (iframeMessage.windowId !== this.windowId) {\n debug('mismatched window id', iframeMessage.windowId, this.windowId);\n return;\n }\n\n switch (iframeMessage.type) {\n case 's':\n this.iframeObj.loaded();\n // window global dependency\n this.postMessage('s', JSON3.stringify([\n version\n , this.transport\n , this.transUrl\n , this.baseUrl\n ]));\n break;\n case 't':\n this.emit('message', iframeMessage.data);\n break;\n case 'c':\n var cdata;\n try {\n cdata = JSON3.parse(iframeMessage.data);\n } catch (ignored) {\n debug('bad json', iframeMessage.data);\n return;\n }\n this.emit('close', cdata[0], cdata[1]);\n this.close();\n break;\n }\n};\n\nIframeTransport.prototype.postMessage = function(type, data) {\n debug('postMessage', type, data);\n this.iframeObj.post(JSON3.stringify({\n windowId: this.windowId\n , type: type\n , data: data || ''\n }), this.origin);\n};\n\nIframeTransport.prototype.send = function(message) {\n debug('send', message);\n this.postMessage('m', message);\n};\n\nIframeTransport.enabled = function() {\n return iframeUtils.iframeEnabled;\n};\n\nIframeTransport.transportName = 'iframe';\nIframeTransport.roundTrips = 2;\n\nmodule.exports = IframeTransport;\n","'use strict';\n\n// The simplest and most robust transport, using the well-know cross\n// domain hack - JSONP. This transport is quite inefficient - one\n// message could use up to one http request. But at least it works almost\n// everywhere.\n// Known limitations:\n// o you will get a spinning cursor\n// o for Konqueror a dumb timer is needed to detect errors\n\nvar inherits = require('inherits')\n , SenderReceiver = require('./lib/sender-receiver')\n , JsonpReceiver = require('./receiver/jsonp')\n , jsonpSender = require('./sender/jsonp')\n ;\n\nfunction JsonPTransport(transUrl) {\n if (!JsonPTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n SenderReceiver.call(this, transUrl, '/jsonp', jsonpSender, JsonpReceiver);\n}\n\ninherits(JsonPTransport, SenderReceiver);\n\nJsonPTransport.enabled = function() {\n return !!global.document;\n};\n\nJsonPTransport.transportName = 'jsonp-polling';\nJsonPTransport.roundTrips = 1;\nJsonPTransport.needBody = true;\n\nmodule.exports = JsonPTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n , urlUtils = require('../../utils/url')\n , SenderReceiver = require('./sender-receiver')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:ajax-based');\n}\n\nfunction createAjaxSender(AjaxObject) {\n return function(url, payload, callback) {\n debug('create ajax sender', url, payload);\n var opt = {};\n if (typeof payload === 'string') {\n opt.headers = {'Content-type': 'text/plain'};\n }\n var ajaxUrl = urlUtils.addPath(url, '/xhr_send');\n var xo = new AjaxObject('POST', ajaxUrl, payload, opt);\n xo.once('finish', function(status) {\n debug('finish', status);\n xo = null;\n\n if (status !== 200 && status !== 204) {\n return callback(new Error('http status ' + status));\n }\n callback();\n });\n return function() {\n debug('abort');\n xo.close();\n xo = null;\n\n var err = new Error('Aborted');\n err.code = 1000;\n callback(err);\n };\n };\n}\n\nfunction AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {\n SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);\n}\n\ninherits(AjaxBasedTransport, SenderReceiver);\n\nmodule.exports = AjaxBasedTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:buffered-sender');\n}\n\nfunction BufferedSender(url, sender) {\n debug(url);\n EventEmitter.call(this);\n this.sendBuffer = [];\n this.sender = sender;\n this.url = url;\n}\n\ninherits(BufferedSender, EventEmitter);\n\nBufferedSender.prototype.send = function(message) {\n debug('send', message);\n this.sendBuffer.push(message);\n if (!this.sendStop) {\n this.sendSchedule();\n }\n};\n\n// For polling transports in a situation when in the message callback,\n// new message is being send. If the sending connection was started\n// before receiving one, it is possible to saturate the network and\n// timeout due to the lack of receiving socket. To avoid that we delay\n// sending messages by some small time, in order to let receiving\n// connection be started beforehand. This is only a halfmeasure and\n// does not fix the big problem, but it does make the tests go more\n// stable on slow networks.\nBufferedSender.prototype.sendScheduleWait = function() {\n debug('sendScheduleWait');\n var self = this;\n var tref;\n this.sendStop = function() {\n debug('sendStop');\n self.sendStop = null;\n clearTimeout(tref);\n };\n tref = setTimeout(function() {\n debug('timeout');\n self.sendStop = null;\n self.sendSchedule();\n }, 25);\n};\n\nBufferedSender.prototype.sendSchedule = function() {\n debug('sendSchedule', this.sendBuffer.length);\n var self = this;\n if (this.sendBuffer.length > 0) {\n var payload = '[' + this.sendBuffer.join(',') + ']';\n this.sendStop = this.sender(this.url, payload, function(err) {\n self.sendStop = null;\n if (err) {\n debug('error', err);\n self.emit('close', err.code || 1006, 'Sending error: ' + err);\n self.close();\n } else {\n self.sendScheduleWait();\n }\n });\n this.sendBuffer = [];\n }\n};\n\nBufferedSender.prototype._cleanup = function() {\n debug('_cleanup');\n this.removeAllListeners();\n};\n\nBufferedSender.prototype.close = function() {\n debug('close');\n this._cleanup();\n if (this.sendStop) {\n this.sendStop();\n this.sendStop = null;\n }\n};\n\nmodule.exports = BufferedSender;\n","'use strict';\n\nvar inherits = require('inherits')\n , IframeTransport = require('../iframe')\n , objectUtils = require('../../utils/object')\n ;\n\nmodule.exports = function(transport) {\n\n function IframeWrapTransport(transUrl, baseUrl) {\n IframeTransport.call(this, transport.transportName, transUrl, baseUrl);\n }\n\n inherits(IframeWrapTransport, IframeTransport);\n\n IframeWrapTransport.enabled = function(url, info) {\n if (!global.document) {\n return false;\n }\n\n var iframeInfo = objectUtils.extend({}, info);\n iframeInfo.sameOrigin = true;\n return transport.enabled(iframeInfo) && IframeTransport.enabled();\n };\n\n IframeWrapTransport.transportName = 'iframe-' + transport.transportName;\n IframeWrapTransport.needBody = true;\n IframeWrapTransport.roundTrips = IframeTransport.roundTrips + transport.roundTrips - 1; // html, javascript (2) + transport - no CORS (1)\n\n IframeWrapTransport.facadeTransport = transport;\n\n return IframeWrapTransport;\n};\n","'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:polling');\n}\n\nfunction Polling(Receiver, receiveUrl, AjaxObject) {\n debug(receiveUrl);\n EventEmitter.call(this);\n this.Receiver = Receiver;\n this.receiveUrl = receiveUrl;\n this.AjaxObject = AjaxObject;\n this._scheduleReceiver();\n}\n\ninherits(Polling, EventEmitter);\n\nPolling.prototype._scheduleReceiver = function() {\n debug('_scheduleReceiver');\n var self = this;\n var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject);\n\n poll.on('message', function(msg) {\n debug('message', msg);\n self.emit('message', msg);\n });\n\n poll.once('close', function(code, reason) {\n debug('close', code, reason, self.pollIsClosing);\n self.poll = poll = null;\n\n if (!self.pollIsClosing) {\n if (reason === 'network') {\n self._scheduleReceiver();\n } else {\n self.emit('close', code || 1006, reason);\n self.removeAllListeners();\n }\n }\n });\n};\n\nPolling.prototype.abort = function() {\n debug('abort');\n this.removeAllListeners();\n this.pollIsClosing = true;\n if (this.poll) {\n this.poll.abort();\n }\n};\n\nmodule.exports = Polling;\n","'use strict';\n\nvar inherits = require('inherits')\n , urlUtils = require('../../utils/url')\n , BufferedSender = require('./buffered-sender')\n , Polling = require('./polling')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:sender-receiver');\n}\n\nfunction SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject) {\n var pollUrl = urlUtils.addPath(transUrl, urlSuffix);\n debug(pollUrl);\n var self = this;\n BufferedSender.call(this, transUrl, senderFunc);\n\n this.poll = new Polling(Receiver, pollUrl, AjaxObject);\n this.poll.on('message', function(msg) {\n debug('poll message', msg);\n self.emit('message', msg);\n });\n this.poll.once('close', function(code, reason) {\n debug('poll close', code, reason);\n self.poll = null;\n self.emit('close', code, reason);\n self.close();\n });\n}\n\ninherits(SenderReceiver, BufferedSender);\n\nSenderReceiver.prototype.close = function() {\n BufferedSender.prototype.close.call(this);\n debug('close');\n this.removeAllListeners();\n if (this.poll) {\n this.poll.abort();\n this.poll = null;\n }\n};\n\nmodule.exports = SenderReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n , EventSourceDriver = require('eventsource')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:receiver:eventsource');\n}\n\nfunction EventSourceReceiver(url) {\n debug(url);\n EventEmitter.call(this);\n\n var self = this;\n var es = this.es = new EventSourceDriver(url);\n es.onmessage = function(e) {\n debug('message', e.data);\n self.emit('message', decodeURI(e.data));\n };\n es.onerror = function(e) {\n debug('error', es.readyState, e);\n // ES on reconnection has readyState = 0 or 1.\n // on network error it's CLOSED = 2\n var reason = (es.readyState !== 2 ? 'network' : 'permanent');\n self._cleanup();\n self._close(reason);\n };\n}\n\ninherits(EventSourceReceiver, EventEmitter);\n\nEventSourceReceiver.prototype.abort = function() {\n debug('abort');\n this._cleanup();\n this._close('user');\n};\n\nEventSourceReceiver.prototype._cleanup = function() {\n debug('cleanup');\n var es = this.es;\n if (es) {\n es.onmessage = es.onerror = null;\n es.close();\n this.es = null;\n }\n};\n\nEventSourceReceiver.prototype._close = function(reason) {\n debug('close', reason);\n var self = this;\n // Safari and chrome < 15 crash if we close window before\n // waiting for ES cleanup. See:\n // https://code.google.com/p/chromium/issues/detail?id=89155\n setTimeout(function() {\n self.emit('close', null, reason);\n self.removeAllListeners();\n }, 200);\n};\n\nmodule.exports = EventSourceReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n , iframeUtils = require('../../utils/iframe')\n , urlUtils = require('../../utils/url')\n , EventEmitter = require('events').EventEmitter\n , random = require('../../utils/random')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:receiver:htmlfile');\n}\n\nfunction HtmlfileReceiver(url) {\n debug(url);\n EventEmitter.call(this);\n var self = this;\n iframeUtils.polluteGlobalNamespace();\n\n this.id = 'a' + random.string(6);\n url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id));\n\n debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled);\n var constructFunc = HtmlfileReceiver.htmlfileEnabled ?\n iframeUtils.createHtmlfile : iframeUtils.createIframe;\n\n global[iframeUtils.WPrefix][this.id] = {\n start: function() {\n debug('start');\n self.iframeObj.loaded();\n }\n , message: function(data) {\n debug('message', data);\n self.emit('message', data);\n }\n , stop: function() {\n debug('stop');\n self._cleanup();\n self._close('network');\n }\n };\n this.iframeObj = constructFunc(url, function() {\n debug('callback');\n self._cleanup();\n self._close('permanent');\n });\n}\n\ninherits(HtmlfileReceiver, EventEmitter);\n\nHtmlfileReceiver.prototype.abort = function() {\n debug('abort');\n this._cleanup();\n this._close('user');\n};\n\nHtmlfileReceiver.prototype._cleanup = function() {\n debug('_cleanup');\n if (this.iframeObj) {\n this.iframeObj.cleanup();\n this.iframeObj = null;\n }\n delete global[iframeUtils.WPrefix][this.id];\n};\n\nHtmlfileReceiver.prototype._close = function(reason) {\n debug('_close', reason);\n this.emit('close', null, reason);\n this.removeAllListeners();\n};\n\nHtmlfileReceiver.htmlfileEnabled = false;\n\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (axo in global) {\n try {\n HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile');\n } catch (x) {\n // intentionally empty\n }\n}\n\nHtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled;\n\nmodule.exports = HtmlfileReceiver;\n","'use strict';\n\nvar utils = require('../../utils/iframe')\n , random = require('../../utils/random')\n , browser = require('../../utils/browser')\n , urlUtils = require('../../utils/url')\n , inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:receiver:jsonp');\n}\n\nfunction JsonpReceiver(url) {\n debug(url);\n var self = this;\n EventEmitter.call(this);\n\n utils.polluteGlobalNamespace();\n\n this.id = 'a' + random.string(6);\n var urlWithId = urlUtils.addQuery(url, 'c=' + encodeURIComponent(utils.WPrefix + '.' + this.id));\n\n global[utils.WPrefix][this.id] = this._callback.bind(this);\n this._createScript(urlWithId);\n\n // Fallback mostly for Konqueror - stupid timer, 35 seconds shall be plenty.\n this.timeoutId = setTimeout(function() {\n debug('timeout');\n self._abort(new Error('JSONP script loaded abnormally (timeout)'));\n }, JsonpReceiver.timeout);\n}\n\ninherits(JsonpReceiver, EventEmitter);\n\nJsonpReceiver.prototype.abort = function() {\n debug('abort');\n if (global[utils.WPrefix][this.id]) {\n var err = new Error('JSONP user aborted read');\n err.code = 1000;\n this._abort(err);\n }\n};\n\nJsonpReceiver.timeout = 35000;\nJsonpReceiver.scriptErrorTimeout = 1000;\n\nJsonpReceiver.prototype._callback = function(data) {\n debug('_callback', data);\n this._cleanup();\n\n if (this.aborting) {\n return;\n }\n\n if (data) {\n debug('message', data);\n this.emit('message', data);\n }\n this.emit('close', null, 'network');\n this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._abort = function(err) {\n debug('_abort', err);\n this._cleanup();\n this.aborting = true;\n this.emit('close', err.code, err.message);\n this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._cleanup = function() {\n debug('_cleanup');\n clearTimeout(this.timeoutId);\n if (this.script2) {\n this.script2.parentNode.removeChild(this.script2);\n this.script2 = null;\n }\n if (this.script) {\n var script = this.script;\n // Unfortunately, you can't really abort script loading of\n // the script.\n script.parentNode.removeChild(script);\n script.onreadystatechange = script.onerror =\n script.onload = script.onclick = null;\n this.script = null;\n }\n delete global[utils.WPrefix][this.id];\n};\n\nJsonpReceiver.prototype._scriptError = function() {\n debug('_scriptError');\n var self = this;\n if (this.errorTimer) {\n return;\n }\n\n this.errorTimer = setTimeout(function() {\n if (!self.loadedOkay) {\n self._abort(new Error('JSONP script loaded abnormally (onerror)'));\n }\n }, JsonpReceiver.scriptErrorTimeout);\n};\n\nJsonpReceiver.prototype._createScript = function(url) {\n debug('_createScript', url);\n var self = this;\n var script = this.script = global.document.createElement('script');\n var script2; // Opera synchronous load trick.\n\n script.id = 'a' + random.string(8);\n script.src = url;\n script.type = 'text/javascript';\n script.charset = 'UTF-8';\n script.onerror = this._scriptError.bind(this);\n script.onload = function() {\n debug('onload');\n self._abort(new Error('JSONP script loaded abnormally (onload)'));\n };\n\n // IE9 fires 'error' event after onreadystatechange or before, in random order.\n // Use loadedOkay to determine if actually errored\n script.onreadystatechange = function() {\n debug('onreadystatechange', script.readyState);\n if (/loaded|closed/.test(script.readyState)) {\n if (script && script.htmlFor && script.onclick) {\n self.loadedOkay = true;\n try {\n // In IE, actually execute the script.\n script.onclick();\n } catch (x) {\n // intentionally empty\n }\n }\n if (script) {\n self._abort(new Error('JSONP script loaded abnormally (onreadystatechange)'));\n }\n }\n };\n // IE: event/htmlFor/onclick trick.\n // One can't rely on proper order for onreadystatechange. In order to\n // make sure, set a 'htmlFor' and 'event' properties, so that\n // script code will be installed as 'onclick' handler for the\n // script object. Later, onreadystatechange, manually execute this\n // code. FF and Chrome doesn't work with 'event' and 'htmlFor'\n // set. For reference see:\n // http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html\n // Also, read on that about script ordering:\n // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order\n if (typeof script.async === 'undefined' && global.document.attachEvent) {\n // According to mozilla docs, in recent browsers script.async defaults\n // to 'true', so we may use it to detect a good browser:\n // https://developer.mozilla.org/en/HTML/Element/script\n if (!browser.isOpera()) {\n // Naively assume we're in IE\n try {\n script.htmlFor = script.id;\n script.event = 'onclick';\n } catch (x) {\n // intentionally empty\n }\n script.async = true;\n } else {\n // Opera, second sync script hack\n script2 = this.script2 = global.document.createElement('script');\n script2.text = \"try{var a = document.getElementById('\" + script.id + \"'); if(a)a.onerror();}catch(x){};\";\n script.async = script2.async = false;\n }\n }\n if (typeof script.async !== 'undefined') {\n script.async = true;\n }\n\n var head = global.document.getElementsByTagName('head')[0];\n head.insertBefore(script, head.firstChild);\n if (script2) {\n head.insertBefore(script2, head.firstChild);\n }\n};\n\nmodule.exports = JsonpReceiver;\n","'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:receiver:xhr');\n}\n\nfunction XhrReceiver(url, AjaxObject) {\n debug(url);\n EventEmitter.call(this);\n var self = this;\n\n this.bufferPosition = 0;\n\n this.xo = new AjaxObject('POST', url, null);\n this.xo.on('chunk', this._chunkHandler.bind(this));\n this.xo.once('finish', function(status, text) {\n debug('finish', status, text);\n self._chunkHandler(status, text);\n self.xo = null;\n var reason = status === 200 ? 'network' : 'permanent';\n debug('close', reason);\n self.emit('close', null, reason);\n self._cleanup();\n });\n}\n\ninherits(XhrReceiver, EventEmitter);\n\nXhrReceiver.prototype._chunkHandler = function(status, text) {\n debug('_chunkHandler', status);\n if (status !== 200 || !text) {\n return;\n }\n\n for (var idx = -1; ; this.bufferPosition += idx + 1) {\n var buf = text.slice(this.bufferPosition);\n idx = buf.indexOf('\\n');\n if (idx === -1) {\n break;\n }\n var msg = buf.slice(0, idx);\n if (msg) {\n debug('message', msg);\n this.emit('message', msg);\n }\n }\n};\n\nXhrReceiver.prototype._cleanup = function() {\n debug('_cleanup');\n this.removeAllListeners();\n};\n\nXhrReceiver.prototype.abort = function() {\n debug('abort');\n if (this.xo) {\n this.xo.close();\n debug('close');\n this.emit('close', null, 'user');\n this.xo = null;\n }\n this._cleanup();\n};\n\nmodule.exports = XhrReceiver;\n","'use strict';\n\nvar random = require('../../utils/random')\n , urlUtils = require('../../utils/url')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:sender:jsonp');\n}\n\nvar form, area;\n\nfunction createIframe(id) {\n debug('createIframe', id);\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n return global.document.createElement('<iframe name=\"' + id + '\">');\n } catch (x) {\n var iframe = global.document.createElement('iframe');\n iframe.name = id;\n return iframe;\n }\n}\n\nfunction createForm() {\n debug('createForm');\n form = global.document.createElement('form');\n form.style.display = 'none';\n form.style.position = 'absolute';\n form.method = 'POST';\n form.enctype = 'application/x-www-form-urlencoded';\n form.acceptCharset = 'UTF-8';\n\n area = global.document.createElement('textarea');\n area.name = 'd';\n form.appendChild(area);\n\n global.document.body.appendChild(form);\n}\n\nmodule.exports = function(url, payload, callback) {\n debug(url, payload);\n if (!form) {\n createForm();\n }\n var id = 'a' + random.string(8);\n form.target = id;\n form.action = urlUtils.addQuery(urlUtils.addPath(url, '/jsonp_send'), 'i=' + id);\n\n var iframe = createIframe(id);\n iframe.id = id;\n iframe.style.display = 'none';\n form.appendChild(iframe);\n\n try {\n area.value = payload;\n } catch (e) {\n // seriously broken browsers get here\n }\n form.submit();\n\n var completed = function(err) {\n debug('completed', id, err);\n if (!iframe.onerror) {\n return;\n }\n iframe.onreadystatechange = iframe.onerror = iframe.onload = null;\n // Opera mini doesn't like if we GC iframe\n // immediately, thus this timeout.\n setTimeout(function() {\n debug('cleaning up', id);\n iframe.parentNode.removeChild(iframe);\n iframe = null;\n }, 500);\n area.value = '';\n // It is not possible to detect if the iframe succeeded or\n // failed to submit our form.\n callback(err);\n };\n iframe.onerror = function() {\n debug('onerror', id);\n completed();\n };\n iframe.onload = function() {\n debug('onload', id);\n completed();\n };\n iframe.onreadystatechange = function(e) {\n debug('onreadystatechange', id, iframe.readyState, e);\n if (iframe.readyState === 'complete') {\n completed();\n }\n };\n return function() {\n debug('aborted', id);\n completed(new Error('Aborted'));\n };\n};\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , eventUtils = require('../../utils/event')\n , browser = require('../../utils/browser')\n , urlUtils = require('../../utils/url')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:sender:xdr');\n}\n\n// References:\n// http://ajaxian.com/archives/100-line-ajax-wrapper\n// http://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx\n\nfunction XDRObject(method, url, payload) {\n debug(method, url);\n var self = this;\n EventEmitter.call(this);\n\n setTimeout(function() {\n self._start(method, url, payload);\n }, 0);\n}\n\ninherits(XDRObject, EventEmitter);\n\nXDRObject.prototype._start = function(method, url, payload) {\n debug('_start');\n var self = this;\n var xdr = new global.XDomainRequest();\n // IE caches even POSTs\n url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n xdr.onerror = function() {\n debug('onerror');\n self._error();\n };\n xdr.ontimeout = function() {\n debug('ontimeout');\n self._error();\n };\n xdr.onprogress = function() {\n debug('progress', xdr.responseText);\n self.emit('chunk', 200, xdr.responseText);\n };\n xdr.onload = function() {\n debug('load');\n self.emit('finish', 200, xdr.responseText);\n self._cleanup(false);\n };\n this.xdr = xdr;\n this.unloadRef = eventUtils.unloadAdd(function() {\n self._cleanup(true);\n });\n try {\n // Fails with AccessDenied if port number is bogus\n this.xdr.open(method, url);\n if (this.timeout) {\n this.xdr.timeout = this.timeout;\n }\n this.xdr.send(payload);\n } catch (x) {\n this._error();\n }\n};\n\nXDRObject.prototype._error = function() {\n this.emit('finish', 0, '');\n this._cleanup(false);\n};\n\nXDRObject.prototype._cleanup = function(abort) {\n debug('cleanup', abort);\n if (!this.xdr) {\n return;\n }\n this.removeAllListeners();\n eventUtils.unloadDel(this.unloadRef);\n\n this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null;\n if (abort) {\n try {\n this.xdr.abort();\n } catch (x) {\n // intentionally empty\n }\n }\n this.unloadRef = this.xdr = null;\n};\n\nXDRObject.prototype.close = function() {\n debug('close');\n this._cleanup(true);\n};\n\n// IE 8/9 if the request target uses the same scheme - #79\nXDRObject.enabled = !!(global.XDomainRequest && browser.hasDomain());\n\nmodule.exports = XDRObject;\n","'use strict';\n\nvar inherits = require('inherits')\n , XhrDriver = require('../driver/xhr')\n ;\n\nfunction XHRCorsObject(method, url, payload, opts) {\n XhrDriver.call(this, method, url, payload, opts);\n}\n\ninherits(XHRCorsObject, XhrDriver);\n\nXHRCorsObject.enabled = XhrDriver.enabled && XhrDriver.supportsCORS;\n\nmodule.exports = XHRCorsObject;\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n ;\n\nfunction XHRFake(/* method, url, payload, opts */) {\n var self = this;\n EventEmitter.call(this);\n\n this.to = setTimeout(function() {\n self.emit('finish', 200, '{}');\n }, XHRFake.timeout);\n}\n\ninherits(XHRFake, EventEmitter);\n\nXHRFake.prototype.close = function() {\n clearTimeout(this.to);\n};\n\nXHRFake.timeout = 2000;\n\nmodule.exports = XHRFake;\n","'use strict';\n\nvar inherits = require('inherits')\n , XhrDriver = require('../driver/xhr')\n ;\n\nfunction XHRLocalObject(method, url, payload /*, opts */) {\n XhrDriver.call(this, method, url, payload, {\n noCredentials: true\n });\n}\n\ninherits(XHRLocalObject, XhrDriver);\n\nXHRLocalObject.enabled = XhrDriver.enabled;\n\nmodule.exports = XHRLocalObject;\n","'use strict';\n\nvar utils = require('../utils/event')\n , urlUtils = require('../utils/url')\n , inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n , WebsocketDriver = require('./driver/websocket')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:websocket');\n}\n\nfunction WebSocketTransport(transUrl, ignore, options) {\n if (!WebSocketTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n\n EventEmitter.call(this);\n debug('constructor', transUrl);\n\n var self = this;\n var url = urlUtils.addPath(transUrl, '/websocket');\n if (url.slice(0, 5) === 'https') {\n url = 'wss' + url.slice(5);\n } else {\n url = 'ws' + url.slice(4);\n }\n this.url = url;\n\n this.ws = new WebsocketDriver(this.url, [], options);\n this.ws.onmessage = function(e) {\n debug('message event', e.data);\n self.emit('message', e.data);\n };\n // Firefox has an interesting bug. If a websocket connection is\n // created after onunload, it stays alive even when user\n // navigates away from the page. In such situation let's lie -\n // let's not open the ws connection at all. See:\n // https://github.com/sockjs/sockjs-client/issues/28\n // https://bugzilla.mozilla.org/show_bug.cgi?id=696085\n this.unloadRef = utils.unloadAdd(function() {\n debug('unload');\n self.ws.close();\n });\n this.ws.onclose = function(e) {\n debug('close event', e.code, e.reason);\n self.emit('close', e.code, e.reason);\n self._cleanup();\n };\n this.ws.onerror = function(e) {\n debug('error event', e);\n self.emit('close', 1006, 'WebSocket connection broken');\n self._cleanup();\n };\n}\n\ninherits(WebSocketTransport, EventEmitter);\n\nWebSocketTransport.prototype.send = function(data) {\n var msg = '[' + data + ']';\n debug('send', msg);\n this.ws.send(msg);\n};\n\nWebSocketTransport.prototype.close = function() {\n debug('close');\n var ws = this.ws;\n this._cleanup();\n if (ws) {\n ws.close();\n }\n};\n\nWebSocketTransport.prototype._cleanup = function() {\n debug('_cleanup');\n var ws = this.ws;\n if (ws) {\n ws.onmessage = ws.onclose = ws.onerror = null;\n }\n utils.unloadDel(this.unloadRef);\n this.unloadRef = this.ws = null;\n this.removeAllListeners();\n};\n\nWebSocketTransport.enabled = function() {\n debug('enabled');\n return !!WebsocketDriver;\n};\nWebSocketTransport.transportName = 'websocket';\n\n// In theory, ws should require 1 round trip. But in chrome, this is\n// not very stable over SSL. Most likely a ws connection requires a\n// separate SSL connection, in which case 2 round trips are an\n// absolute minumum.\nWebSocketTransport.roundTrips = 2;\n\nmodule.exports = WebSocketTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XdrStreamingTransport = require('./xdr-streaming')\n , XhrReceiver = require('./receiver/xhr')\n , XDRObject = require('./sender/xdr')\n ;\n\nfunction XdrPollingTransport(transUrl) {\n if (!XDRObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XDRObject);\n}\n\ninherits(XdrPollingTransport, AjaxBasedTransport);\n\nXdrPollingTransport.enabled = XdrStreamingTransport.enabled;\nXdrPollingTransport.transportName = 'xdr-polling';\nXdrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrPollingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XhrReceiver = require('./receiver/xhr')\n , XDRObject = require('./sender/xdr')\n ;\n\n// According to:\n// http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests\n// http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/\n\nfunction XdrStreamingTransport(transUrl) {\n if (!XDRObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XDRObject);\n}\n\ninherits(XdrStreamingTransport, AjaxBasedTransport);\n\nXdrStreamingTransport.enabled = function(info) {\n if (info.cookie_needed || info.nullOrigin) {\n return false;\n }\n return XDRObject.enabled && info.sameScheme;\n};\n\nXdrStreamingTransport.transportName = 'xdr-streaming';\nXdrStreamingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrStreamingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XhrReceiver = require('./receiver/xhr')\n , XHRCorsObject = require('./sender/xhr-cors')\n , XHRLocalObject = require('./sender/xhr-local')\n ;\n\nfunction XhrPollingTransport(transUrl) {\n if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrPollingTransport, AjaxBasedTransport);\n\nXhrPollingTransport.enabled = function(info) {\n if (info.nullOrigin) {\n return false;\n }\n\n if (XHRLocalObject.enabled && info.sameOrigin) {\n return true;\n }\n return XHRCorsObject.enabled;\n};\n\nXhrPollingTransport.transportName = 'xhr-polling';\nXhrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XhrPollingTransport;\n","'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XhrReceiver = require('./receiver/xhr')\n , XHRCorsObject = require('./sender/xhr-cors')\n , XHRLocalObject = require('./sender/xhr-local')\n , browser = require('../utils/browser')\n ;\n\nfunction XhrStreamingTransport(transUrl) {\n if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrStreamingTransport, AjaxBasedTransport);\n\nXhrStreamingTransport.enabled = function(info) {\n if (info.nullOrigin) {\n return false;\n }\n // Opera doesn't support xhr-streaming #60\n // But it might be able to #92\n if (browser.isOpera()) {\n return false;\n }\n\n return XHRCorsObject.enabled;\n};\n\nXhrStreamingTransport.transportName = 'xhr-streaming';\nXhrStreamingTransport.roundTrips = 2; // preflight, ajax\n\n// Safari gets confused when a streaming ajax request is started\n// before onload. This causes the load indicator to spin indefinetely.\n// Only require body when used in a browser\nXhrStreamingTransport.needBody = !!global.document;\n\nmodule.exports = XhrStreamingTransport;\n","'use strict';\n\nif (global.crypto && global.crypto.getRandomValues) {\n module.exports.randomBytes = function(length) {\n var bytes = new Uint8Array(length);\n global.crypto.getRandomValues(bytes);\n return bytes;\n };\n} else {\n module.exports.randomBytes = function(length) {\n var bytes = new Array(length);\n for (var i = 0; i < length; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n return bytes;\n };\n}\n","'use strict';\n\nmodule.exports = {\n isOpera: function() {\n return global.navigator &&\n /opera/i.test(global.navigator.userAgent);\n }\n\n, isKonqueror: function() {\n return global.navigator &&\n /konqueror/i.test(global.navigator.userAgent);\n }\n\n // #187 wrap document.domain in try/catch because of WP8 from file:///\n, hasDomain: function () {\n // non-browser client always has a domain\n if (!global.document) {\n return true;\n }\n\n try {\n return !!global.document.domain;\n } catch (e) {\n return false;\n }\n }\n};\n","'use strict';\n\nvar JSON3 = require('json3');\n\n// Some extra characters that Chrome gets wrong, and substitutes with\n// something else on the wire.\n// eslint-disable-next-line no-control-regex\nvar extraEscapable = /[\\x00-\\x1f\\ud800-\\udfff\\ufffe\\uffff\\u0300-\\u0333\\u033d-\\u0346\\u034a-\\u034c\\u0350-\\u0352\\u0357-\\u0358\\u035c-\\u0362\\u0374\\u037e\\u0387\\u0591-\\u05af\\u05c4\\u0610-\\u0617\\u0653-\\u0654\\u0657-\\u065b\\u065d-\\u065e\\u06df-\\u06e2\\u06eb-\\u06ec\\u0730\\u0732-\\u0733\\u0735-\\u0736\\u073a\\u073d\\u073f-\\u0741\\u0743\\u0745\\u0747\\u07eb-\\u07f1\\u0951\\u0958-\\u095f\\u09dc-\\u09dd\\u09df\\u0a33\\u0a36\\u0a59-\\u0a5b\\u0a5e\\u0b5c-\\u0b5d\\u0e38-\\u0e39\\u0f43\\u0f4d\\u0f52\\u0f57\\u0f5c\\u0f69\\u0f72-\\u0f76\\u0f78\\u0f80-\\u0f83\\u0f93\\u0f9d\\u0fa2\\u0fa7\\u0fac\\u0fb9\\u1939-\\u193a\\u1a17\\u1b6b\\u1cda-\\u1cdb\\u1dc0-\\u1dcf\\u1dfc\\u1dfe\\u1f71\\u1f73\\u1f75\\u1f77\\u1f79\\u1f7b\\u1f7d\\u1fbb\\u1fbe\\u1fc9\\u1fcb\\u1fd3\\u1fdb\\u1fe3\\u1feb\\u1fee-\\u1fef\\u1ff9\\u1ffb\\u1ffd\\u2000-\\u2001\\u20d0-\\u20d1\\u20d4-\\u20d7\\u20e7-\\u20e9\\u2126\\u212a-\\u212b\\u2329-\\u232a\\u2adc\\u302b-\\u302c\\uaab2-\\uaab3\\uf900-\\ufa0d\\ufa10\\ufa12\\ufa15-\\ufa1e\\ufa20\\ufa22\\ufa25-\\ufa26\\ufa2a-\\ufa2d\\ufa30-\\ufa6d\\ufa70-\\ufad9\\ufb1d\\ufb1f\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4e\\ufff0-\\uffff]/g\n , extraLookup;\n\n// This may be quite slow, so let's delay until user actually uses bad\n// characters.\nvar unrollLookup = function(escapable) {\n var i;\n var unrolled = {};\n var c = [];\n for (i = 0; i < 65536; i++) {\n c.push( String.fromCharCode(i) );\n }\n escapable.lastIndex = 0;\n c.join('').replace(escapable, function(a) {\n unrolled[ a ] = '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n return '';\n });\n escapable.lastIndex = 0;\n return unrolled;\n};\n\n// Quote string, also taking care of unicode characters that browsers\n// often break. Especially, take care of unicode surrogates:\n// http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates\nmodule.exports = {\n quote: function(string) {\n var quoted = JSON3.stringify(string);\n\n // In most cases this should be very fast and good enough.\n extraEscapable.lastIndex = 0;\n if (!extraEscapable.test(quoted)) {\n return quoted;\n }\n\n if (!extraLookup) {\n extraLookup = unrollLookup(extraEscapable);\n }\n\n return quoted.replace(extraEscapable, function(a) {\n return extraLookup[a];\n });\n }\n};\n","'use strict';\n\nvar random = require('./random');\n\nvar onUnload = {}\n , afterUnload = false\n // detect google chrome packaged apps because they don't allow the 'unload' event\n , isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime\n ;\n\nmodule.exports = {\n attachEvent: function(event, listener) {\n if (typeof global.addEventListener !== 'undefined') {\n global.addEventListener(event, listener, false);\n } else if (global.document && global.attachEvent) {\n // IE quirks.\n // According to: http://stevesouders.com/misc/test-postmessage.php\n // the message gets delivered only to 'document', not 'window'.\n global.document.attachEvent('on' + event, listener);\n // I get 'window' for ie8.\n global.attachEvent('on' + event, listener);\n }\n }\n\n, detachEvent: function(event, listener) {\n if (typeof global.addEventListener !== 'undefined') {\n global.removeEventListener(event, listener, false);\n } else if (global.document && global.detachEvent) {\n global.document.detachEvent('on' + event, listener);\n global.detachEvent('on' + event, listener);\n }\n }\n\n, unloadAdd: function(listener) {\n if (isChromePackagedApp) {\n return null;\n }\n\n var ref = random.string(8);\n onUnload[ref] = listener;\n if (afterUnload) {\n setTimeout(this.triggerUnloadCallbacks, 0);\n }\n return ref;\n }\n\n, unloadDel: function(ref) {\n if (ref in onUnload) {\n delete onUnload[ref];\n }\n }\n\n, triggerUnloadCallbacks: function() {\n for (var ref in onUnload) {\n onUnload[ref]();\n delete onUnload[ref];\n }\n }\n};\n\nvar unloadTriggered = function() {\n if (afterUnload) {\n return;\n }\n afterUnload = true;\n module.exports.triggerUnloadCallbacks();\n};\n\n// 'unload' alone is not reliable in opera within an iframe, but we\n// can't use `beforeunload` as IE fires it on javascript: links.\nif (!isChromePackagedApp) {\n module.exports.attachEvent('unload', unloadTriggered);\n}\n","'use strict';\n\nvar eventUtils = require('./event')\n , JSON3 = require('json3')\n , browser = require('./browser')\n ;\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:utils:iframe');\n}\n\nmodule.exports = {\n WPrefix: '_jp'\n, currentWindowId: null\n\n, polluteGlobalNamespace: function() {\n if (!(module.exports.WPrefix in global)) {\n global[module.exports.WPrefix] = {};\n }\n }\n\n, postMessage: function(type, data) {\n if (global.parent !== global) {\n global.parent.postMessage(JSON3.stringify({\n windowId: module.exports.currentWindowId\n , type: type\n , data: data || ''\n }), '*');\n } else {\n debug('Cannot postMessage, no parent window.', type, data);\n }\n }\n\n, createIframe: function(iframeUrl, errorCallback) {\n var iframe = global.document.createElement('iframe');\n var tref, unloadRef;\n var unattach = function() {\n debug('unattach');\n clearTimeout(tref);\n // Explorer had problems with that.\n try {\n iframe.onload = null;\n } catch (x) {\n // intentionally empty\n }\n iframe.onerror = null;\n };\n var cleanup = function() {\n debug('cleanup');\n if (iframe) {\n unattach();\n // This timeout makes chrome fire onbeforeunload event\n // within iframe. Without the timeout it goes straight to\n // onunload.\n setTimeout(function() {\n if (iframe) {\n iframe.parentNode.removeChild(iframe);\n }\n iframe = null;\n }, 0);\n eventUtils.unloadDel(unloadRef);\n }\n };\n var onerror = function(err) {\n debug('onerror', err);\n if (iframe) {\n cleanup();\n errorCallback(err);\n }\n };\n var post = function(msg, origin) {\n debug('post', msg, origin);\n setTimeout(function() {\n try {\n // When the iframe is not loaded, IE raises an exception\n // on 'contentWindow'.\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(msg, origin);\n }\n } catch (x) {\n // intentionally empty\n }\n }, 0);\n };\n\n iframe.src = iframeUrl;\n iframe.style.display = 'none';\n iframe.style.position = 'absolute';\n iframe.onerror = function() {\n onerror('onerror');\n };\n iframe.onload = function() {\n debug('onload');\n // `onload` is triggered before scripts on the iframe are\n // executed. Give it few seconds to actually load stuff.\n clearTimeout(tref);\n tref = setTimeout(function() {\n onerror('onload timeout');\n }, 2000);\n };\n global.document.body.appendChild(iframe);\n tref = setTimeout(function() {\n onerror('timeout');\n }, 15000);\n unloadRef = eventUtils.unloadAdd(cleanup);\n return {\n post: post\n , cleanup: cleanup\n , loaded: unattach\n };\n }\n\n/* eslint no-undef: \"off\", new-cap: \"off\" */\n, createHtmlfile: function(iframeUrl, errorCallback) {\n var axo = ['Active'].concat('Object').join('X');\n var doc = new global[axo]('htmlfile');\n var tref, unloadRef;\n var iframe;\n var unattach = function() {\n clearTimeout(tref);\n iframe.onerror = null;\n };\n var cleanup = function() {\n if (doc) {\n unattach();\n eventUtils.unloadDel(unloadRef);\n iframe.parentNode.removeChild(iframe);\n iframe = doc = null;\n CollectGarbage();\n }\n };\n var onerror = function(r) {\n debug('onerror', r);\n if (doc) {\n cleanup();\n errorCallback(r);\n }\n };\n var post = function(msg, origin) {\n try {\n // When the iframe is not loaded, IE raises an exception\n // on 'contentWindow'.\n setTimeout(function() {\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(msg, origin);\n }\n }, 0);\n } catch (x) {\n // intentionally empty\n }\n };\n\n doc.open();\n doc.write('<html><s' + 'cript>' +\n 'document.domain=\"' + global.document.domain + '\";' +\n '</s' + 'cript></html>');\n doc.close();\n doc.parentWindow[module.exports.WPrefix] = global[module.exports.WPrefix];\n var c = doc.createElement('div');\n doc.body.appendChild(c);\n iframe = doc.createElement('iframe');\n c.appendChild(iframe);\n iframe.src = iframeUrl;\n iframe.onerror = function() {\n onerror('onerror');\n };\n tref = setTimeout(function() {\n onerror('timeout');\n }, 15000);\n unloadRef = eventUtils.unloadAdd(cleanup);\n return {\n post: post\n , cleanup: cleanup\n , loaded: unattach\n };\n }\n};\n\nmodule.exports.iframeEnabled = false;\nif (global.document) {\n // postMessage misbehaves in konqueror 4.6.5 - the messages are delivered with\n // huge delay, or not at all.\n module.exports.iframeEnabled = (typeof global.postMessage === 'function' ||\n typeof global.postMessage === 'object') && (!browser.isKonqueror());\n}\n","'use strict';\n\nvar logObject = {};\n['log', 'debug', 'warn'].forEach(function (level) {\n var levelExists;\n\n try {\n levelExists = global.console && global.console[level] && global.console[level].apply;\n } catch(e) {\n // do nothing\n }\n\n logObject[level] = levelExists ? function () {\n return global.console[level].apply(global.console, arguments);\n } : (level === 'log' ? function () {} : logObject.log);\n});\n\nmodule.exports = logObject;\n","'use strict';\n\nmodule.exports = {\n isObject: function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n }\n\n, extend: function(obj) {\n if (!this.isObject(obj)) {\n return obj;\n }\n var source, prop;\n for (var i = 1, length = arguments.length; i < length; i++) {\n source = arguments[i];\n for (prop in source) {\n if (Object.prototype.hasOwnProperty.call(source, prop)) {\n obj[prop] = source[prop];\n }\n }\n }\n return obj;\n }\n};\n","'use strict';\n\n/* global crypto:true */\nvar crypto = require('crypto');\n\n// This string has length 32, a power of 2, so the modulus doesn't introduce a\n// bias.\nvar _randomStringChars = 'abcdefghijklmnopqrstuvwxyz012345';\nmodule.exports = {\n string: function(length) {\n var max = _randomStringChars.length;\n var bytes = crypto.randomBytes(length);\n var ret = [];\n for (var i = 0; i < length; i++) {\n ret.push(_randomStringChars.substr(bytes[i] % max, 1));\n }\n return ret.join('');\n }\n\n, number: function(max) {\n return Math.floor(Math.random() * max);\n }\n\n, numberString: function(max) {\n var t = ('' + (max - 1)).length;\n var p = new Array(t + 1).join('0');\n return (p + this.number(max)).slice(-t);\n }\n};\n","'use strict';\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:utils:transport');\n}\n\nmodule.exports = function(availableTransports) {\n return {\n filterToEnabled: function(transportsWhitelist, info) {\n var transports = {\n main: []\n , facade: []\n };\n if (!transportsWhitelist) {\n transportsWhitelist = [];\n } else if (typeof transportsWhitelist === 'string') {\n transportsWhitelist = [transportsWhitelist];\n }\n\n availableTransports.forEach(function(trans) {\n if (!trans) {\n return;\n }\n\n if (trans.transportName === 'websocket' && info.websocket === false) {\n debug('disabled from server', 'websocket');\n return;\n }\n\n if (transportsWhitelist.length &&\n transportsWhitelist.indexOf(trans.transportName) === -1) {\n debug('not in whitelist', trans.transportName);\n return;\n }\n\n if (trans.enabled(info)) {\n debug('enabled', trans.transportName);\n transports.main.push(trans);\n if (trans.facadeTransport) {\n transports.facade.push(trans.facadeTransport);\n }\n } else {\n debug('disabled', trans.transportName);\n }\n });\n return transports;\n }\n };\n};\n","'use strict';\n\nvar URL = require('url-parse');\n\nvar debug = function() {};\nif (\"production\" !== 'production') {\n debug = require('debug')('sockjs-client:utils:url');\n}\n\nmodule.exports = {\n getOrigin: function(url) {\n if (!url) {\n return null;\n }\n\n var p = new URL(url);\n if (p.protocol === 'file:') {\n return null;\n }\n\n var port = p.port;\n if (!port) {\n port = (p.protocol === 'https:') ? '443' : '80';\n }\n\n return p.protocol + '//' + p.hostname + ':' + port;\n }\n\n, isOriginEqual: function(a, b) {\n var res = this.getOrigin(a) === this.getOrigin(b);\n debug('same', a, b, res);\n return res;\n }\n\n, isSchemeEqual: function(a, b) {\n return (a.split(':')[0] === b.split(':')[0]);\n }\n\n, addPath: function (url, path) {\n var qs = url.split('?');\n return qs[0] + path + (qs[1] ? '?' + qs[1] : '');\n }\n\n, addQuery: function (url, q) {\n return url + (url.indexOf('?') === -1 ? ('?' + q) : ('&' + q));\n }\n};\n","module.exports = '1.4.0';\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String} The decoded string.\n * @api private\n */\nfunction decode(input) {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n if (key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = [];\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (var key in obj) {\n if (has.call(obj, key)) {\n pairs.push(encodeURIComponent(key) +'='+ encodeURIComponent(obj[key]));\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//;\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var location = global && global.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} location Location defaults for relative paths.\n * @param {Boolean|Function} parser Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.qs = qs;\n\nmodule.exports = Url;\n"]}
\ No newline at end of file
Index: base3.10/src/main/webapp/js/com/dragFileUploader.js
===================================================================
--- base3.10/src/main/webapp/js/com/dragFileUploader.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/dragFileUploader.js (revision 7)
@@ -0,0 +1,406 @@
+/**
+ * 드래그앤드랍 파일 업로드를 활용한 파일 업로더
+ * $('input hidden element').dragFileUploader(options, [callback])
+ */
+;
+(function($) {
+ function uploader(input, options, callback) {
+ const uploader = {
+ input : null
+ // 옵션
+ , options : {
+ 'allowedTypes' : ['ppt', 'pptx', 'hwp', 'xls', 'xlsx', 'doc', 'docx', 'png', 'jpg', 'jpeg', 'gif', 'pdf']
+ , 'maxSize' : 10
+ , 'maxCount' : 5
+ , 'useBtnDelete' : true
+ , 'useDragDrop' : true
+ , 'useClick' : true
+ , 'wrapSelector' : '#file_box_wrap'
+ , 'viewType' : 'file' // img, file, popup
+ , 'viewSelector' : null
+ }
+ // 초기화
+ , init : function() {
+ // 드래그앤드랍 초기화
+ if (this.options.useDragDrop) {
+ this.initDropZone();
+ }
+ // 클릭 초기화
+ if (this.options.useClick) {
+ this.initClick();
+ }
+ // 초기 데이터 셋팅
+ if (this.input.val() != '') {
+ var $viewSelector = $(this.options.wrapSelector + " .file_list");
+ this.initView('popup', $viewSelector);
+ }
+ return this;
+ }
+ // 초기 데이터 셋팅
+ , initView : function(type, selector) {
+ let fileId = this.input.val();
+ let $selector = selector == null ? $(uploader.options.viewSelector) : $(selector);
+ // 기존 DOM 삭제
+ $selector.empty();
+ if (fileId == '') {
+ return this;
+ }
+ var params = {
+ 'fileId' : fileId
+ }
+ $.post(CONTEXT_PATH + '/fileList/selectJson.do', params, function(data) {
+ if (data.sttus == 'success') {
+ let files = data.result;
+ $.each(files, function(i, file) {
+ var param = {
+ 'name' : file.originFileNm
+ , 'size' : file.fileSize
+ }
+ var $file = uploader.createDom(param, type);
+ $selector.append($file);
+
+ // 이벤트 추가(다운로드, 삭제, 데이터 셋팅)
+ uploader.fncFileTrigger($file, file);
+ });
+ } else {
+ alert('파일을 불러오는 중 오류가 발생하였습니다.');
+ }
+ });
+ return this;
+ }
+ // 클릭 초기화
+ , initClick : function() {
+ var $selector = $(this.options.wrapSelector);
+ var $dropZone = $selector.find('.dropZone');
+ var $fileInput = $('<input>', {'type': 'file', 'multiple' : 'multiple', 'class' : 'blind'});
+ // 파일 변경 이벤트
+ $fileInput.on('change', function() {
+ var files = this.files;
+
+ // 업로드 함수
+ uploader.fncFileUpload(files);
+ });
+ // 드랍존 다음에 파일 추가(드랍존 안에 추가 하면 중복 클릭 이벤트 발생)
+ $dropZone.after($fileInput);
+ $dropZone.on('click', function() {
+ $fileInput.trigger('click');
+ });
+ }
+ // 드래그앤드랍 초기화
+ , initDropZone : function() {
+ var $selector = $(this.options.wrapSelector);
+ var $dropZone = $selector.find('.dropZone');
+ $('html')
+ .on('dragover', function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ })
+ .on('drop', function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ });
+ $dropZone
+ .on('dragenter', function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).prop('style', 'border:1px dashed #0a52ad;');
+ $(this).find('p').prop('style', 'opacity:.8;');
+ })
+ .on('dragleave', function(e) {
+ $(this).prop('style', null);
+ $(this).find('p').prop('style', null);
+ })
+ .on('dragover', function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ })
+ .on('drop', function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ var files = e.originalEvent.dataTransfer.files;
+ // 업로드 함수
+ uploader.fncFileUpload(files);
+ });
+ }
+ // 파일 목록 데이터 반환
+ , fncGetData : function(name) {
+ var $selector = $(this.options.wrapSelector);
+ var arrData = new Array();
+ $selector.find('.file_list li').each(function(i) {
+ if (name != null && name != '') {
+ arrData.push($(this).data('result')[name]);
+ } else {
+ arrData.push($(this).data('result'));
+ }
+ });
+ return arrData;
+ }
+ // 확인(반환) 이벤트
+ , fncReturn : function() {
+ var list = uploader.fncGetData('fileId');
+ return list.join(',');
+ }
+ // 콜백 함수 필요시 추가
+ , callback : function() {
+
+ }
+ // 파일 업로드
+ , fncFileUpload : function(files) {
+ $.each(files, function(i, file) {
+ var fd = new FormData();
+ fd.append('file', file);
+
+ // 확장자 및 용량, 갯수 체크
+ if (!uploader.fncValidate(uploader.options, file)) {
+ return true;
+ };
+
+ // 업로드 UI 생성
+ var $file = uploader.createDom(file, 'popup');
+ var $selector = $(uploader.options.wrapSelector);
+ $selector.find('.file_list').append($file);
+
+ $.ajax({
+ type : 'post',
+ url : CONTEXT_PATH + '/uploadFile.do',
+ data : fd,
+ processData : false,
+ contentType : false,
+ beforeSend : function() {
+ },
+ complete : function() {
+ },
+ success : function(data) {
+ if (data.sttus == 'success') {
+ var result = data.result;
+
+ // 완료 처리
+ var $filename = $file.find('.filename');
+ $filename.append('<img src="' + CONTEXT_PATH + '/images/custom/icon_sucess.svg" alt="업로드 성공 아이콘">');
+
+ // 이벤트 추가(다운로드, 삭제, 데이터 셋팅)
+ uploader.fncFileTrigger($file, result);
+ } else {
+ alert(file.name + " 파일 업로드에 실패하였습니다.");
+ $file.remove();
+ }
+ },
+ error : function(error) {
+ alert("파일 업로드에 실패하였습니다.");
+ $file.remove();
+ },
+ xhr : function() { // 프로그래스
+ var xhr = $.ajaxSettings.xhr();
+
+ // 업로드 중 프로그래스바 표시
+ xhr.upload.onprogress = function(e) {
+ var per = e. loaded * 100 / e.total;
+ // 프로그래스바 이동
+ var $bar = $file.find('.bar');
+
+ $bar.prop('style', 'width: ' + per + '%');
+ if (per === 100) {
+ $bar.addClass('blind');
+ }
+ }
+ return xhr;
+ },
+ });
+ });
+ }
+ //파일 이벤트(다운로드, 삭제, 데이터 셋팅)
+ , fncFileTrigger : function(file, result) {
+ // 데이터 셋팅
+ file.data('result', result);
+
+ // 이미지뷰
+ file.find('img.imgThumb').prop('src', CONTEXT_PATH + result.link);
+
+ // 다운로드 버튼 이벤트
+ file.find('.btn_filedown').on('click', function() {
+ location.href = CONTEXT_PATH + result.link;
+ });
+
+ // 삭제 버튼 이벤트
+ file.find('.btn_delete').on('click', function() {
+ file.remove();
+ // 삭제 후 포커스
+ $('#file_box_wrap').find('a,input,button').eq(0).focus();
+ });
+ }
+ //확장자 체크 및 용량 체크, 파일 첨부 갯수
+ , fncValidate : function(options, file) {
+ var isTrue = true;
+ if (options.allowedTypes.indexOf('*') == -1) {
+ var ext = file.name.split('.').pop().toLowerCase();
+ if( $.inArray(ext, options.allowedTypes) == -1 ) {
+ alert(file.name + ' 파일은 허용되지 않은 확장자입니다.\n' + options.allowedTypes.join(', ') + ' 확장자 만 가능합니다.');
+ return false;
+ }
+ }
+ if (options.maxSize > -1) {
+ var fileSize = file.size;
+ var maxSize = options.maxSize * 1024 * 1024;
+ if( fileSize > maxSize ) {
+ alert('파일 사이즈는 ' + uploader.fileSizeConvert(maxSize) + '이내로 등록 가능합니다.');
+ return false;
+ }
+ }
+ var $selector = $(options.wrapSelector);
+ var fileListCnt = $selector.find('.file_list li').length;
+ var maxCount = options.maxCount;
+ if (fileListCnt >= maxCount) {
+ alert('파일 첨부 가능 갯수는 총 ' + maxCount + '개 입니다.');
+ return false;
+ }
+ return isTrue;
+ }
+ //파일 사이즈 형식 변경
+ , fileSizeConvert : function(size) {
+ var fileSize = size;
+ if (fileSize / 1024 >= 1024) {
+ fileSize = (fileSize / (1024 * 1024)).toFixed(1) + "MB";
+ } else {
+ fileSize = (fileSize / 1024).toFixed(1) + "KB";
+ }
+ return fileSize;
+ }
+ //파일 확장자별 아이콘
+ , fileExtIcon : function(ext) {
+ var fileIcon = 'file_reg';
+ switch (ext) {
+ case 'pdf':
+ fileIcon = 'file_pdf';
+ break;
+ case 'ppt':
+ fileIcon = 'file_ppt';
+ break;
+ case 'pptx':
+ fileIcon = 'file_ppt';
+ break;
+ case 'xls':
+ fileIcon = 'file_excel';
+ break;
+ case 'xlsx':
+ fileIcon = 'file_excel';
+ break;
+ case 'doc':
+ fileIcon = 'file_word';
+ break;
+ case 'docx':
+ fileIcon = 'file_word';
+ break;
+ case 'hwp':
+ fileIcon = 'file_hwp';
+ break;
+ case 'png':
+ fileIcon = 'file_img';
+ break;
+ case 'jpg':
+ fileIcon = 'file_img';
+ break;
+ case 'jpeg':
+ fileIcon = 'file_img';
+ break;
+ case 'gif':
+ fileIcon = 'file_img';
+ break;
+ case 'bmp':
+ fileIcon = 'file_img';
+ break;
+ case 'zip':
+ fileIcon = 'file_zip';
+ break;
+ case '7z':
+ fileIcon = 'file_zip';
+ break;
+ default:
+ fileIcon = 'file_reg';
+ }
+ return fileIcon;
+ }
+ // DOM생성
+ , createDom : function(file, type) {
+ var name = file.name;
+ var size = uploader.fileSizeConvert(file.size);
+ var ext = name.split('.').pop().toLowerCase();
+ var dom;
+ switch (type) {
+ case 'popup':
+ dom = '<li class="' + uploader.fileExtIcon(ext) + '">'
+ + '<p class="filename"><em>' + name + ' [' + size + ']</em></p>'
+ + '<div class="btn_wrap">'
+ + '<button type="button" class="btn_filedown btn_sq_s" title="파일다운 [' + name + ']">다운</button>'
+ + '<button type="button" class="btn_delete btn_sq_s" title="파일삭제 [' + name + ']">삭제</button>'
+ + '</div>'
+ + '<div class="progress_bar"><em class="blind">업로드상태</em>'
+ + '<div class="bar" style="width:0%"></div>'
+ + '</div>'
+ + '</li>';
+ break;
+ case 'img':
+ dom = '<li>'
+ + '<img class="imgThumb" alt="첨부 이미지" src="">'
+ + '<div class="btn">'
+ + '<button type="button" class="btn_filedown btn_sq_s" title="파일다운">다운</button>'
+ + '</div>'
+ + '</li>';
+ break;
+ default:
+ dom = '<li class="' + uploader.fileExtIcon(ext) + '">'
+ + '<div class="file_wrap">'
+ + '<p class="filename">' + name + '</p>'
+ + '<button type="button" class="btn_filedown btn_sq_s" title="파일다운 [' + name + ']">다운</button>'
+ + '</div>'
+ + '</li>';
+ break;
+ }
+ return $(dom);
+ }
+ // 파일 업로더 팝업 열기(button selector)
+ , fncOpenPopup : function(selector) {
+ var params = {
+ 'fileId' : uploader.input.val()
+ }
+
+ $(selector).on('click', function() {
+ fn_popupOpen(CONTEXT_PATH + "/uploadFile/popup.do", 500, 500, params, 'Y', function(popupId) {
+ // 초기화
+ uploader.init();
+
+ // 확인 이벤트
+ $('#' + popupId).find('.btn_saveFile').on('click', function() {
+ // 히든 값 셋팅
+ uploader.input.val(uploader.fncReturn());
+
+ var $viewSelector = $(uploader.options.viewSelector);
+ var viewType = uploader.options.viewType;
+ uploader.initView(viewType, $viewSelector);
+
+ if (typeof uploader.callback == 'function') {
+ uploader.callback(uploader);
+ }
+ });
+ });
+ });
+ return this;
+ }
+ }
+ // input hidden
+ uploader.input = $(input);
+ // 옵션
+ if (options != null) {
+ uploader.options = $.extend({}, uploader.options, options);
+ }
+ // 콜백 함수
+ if (typeof callback == 'function') {
+ uploader.callback = callback;
+ }
+ return uploader;
+ }
+ $.fn.dragFileUploader = function(options, callback) {
+ var fileUploader = new uploader(this, options, callback);
+ return fileUploader;
+ }
+})(jQuery);
Property changes on: base3.10/src/main/webapp/js/com/dragFileUploader.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/freeze-table.js
===================================================================
--- base3.10/src/main/webapp/js/com/freeze-table.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/freeze-table.js (revision 7)
@@ -0,0 +1,808 @@
+/**
+ * RWD Table with freezing head and columns for jQuery
+ *
+ * @author Nick Tsai <myintaer@gmail.com>
+ * @version 1.3.0
+ * @see https://github.com/yidas/jquery-freeze-table
+ */
+(function ($, window) {
+
+ 'use strict';
+
+ /**
+ * Main object
+ *
+ * @param {element} element
+ * @param {object} options
+ */
+ var FreezeTable = function(element, options) {
+
+ // Target element initialization
+ this.$tableWrapper = $(element).first();
+
+ // Options
+ this.options = options || {};
+ this.namespace = this.options.namespace || 'freeze-table';
+ this.callback;
+ this.scrollBarHeight;
+ this.shadow;
+ this.fastMode;
+ this.backgroundColor;
+ this.scrollable;
+
+ // Caches
+ this.$table = this.$tableWrapper.children("table");
+ this.$container = ((typeof this.options.container !== 'undefined') && this.options.container && $(this.options.container).length) ? $(this.options.container) : $(window);
+ this.$headTableWrap;
+ this.$columnTableWrap;
+ this.$columnHeadTableWrap;
+ this.$scrollBarWrap;
+ this.fixedNavbarHeight;
+ this.isWindowScrollX = false;
+
+ // Static class names for clone wraps
+ this.headWrapClass = 'clone-head-table-wrap';
+ this.columnWrapClass = 'clone-column-table-wrap';
+ this.columnHeadWrapClass = 'clone-column-head-table-wrap';
+ this.scrollBarWrapClass = 'clone-scroll-bar-wrap';
+
+ this.init();
+
+ return this;
+ }
+
+ /**
+ * Initialization
+ */
+ FreezeTable.prototype.init = function() {
+
+ // Element check
+ if (!this.$table.length) {
+ throw "The element must contain a table dom";
+ }
+
+ /**
+ * Update Mode
+ */
+ if (this.options==='update') {
+
+ this.destroy();
+ this.options = this.$tableWrapper.data('freeze-table-data');
+ }
+ else if (this.options==='resize') {
+
+ this.options = this.$tableWrapper.data('freeze-table-data');
+ // Get selected FreezeTable's namespace
+ this.namespace = this.options.namespace || this.namespace;
+ this.resize();
+ // Skip init for better performance usage
+ return;
+ }
+ else {
+ // Save to DOM data
+ this.$tableWrapper.data('freeze-table-data', this.options);
+ }
+
+ /**
+ * Options Setting
+ */
+ var options = this.options;
+ var freezeHead = (typeof options.freezeHead !== 'undefined') ? options.freezeHead : true;
+ var freezeColumn = (typeof options.freezeColumn !== 'undefined') ? options.freezeColumn : true;
+ var freezeColumnHead = (typeof options.freezeColumnHead !== 'undefined') ? options.freezeColumnHead : true;
+ var scrollBar = (typeof options.scrollBar !== 'undefined') ? options.scrollBar : false;
+ var fixedNavbar = options.fixedNavbar || '.navbar-fixed-top';
+ var callback = options.callback || null;
+ this.namespace = this.options.namespace || this.namespace;
+ // Default to get window scroll bar height
+ this.scrollBarHeight = ($.isNumeric(options.scrollBarHeight)) ? options.scrollBarHeight : (window.innerWidth - document.documentElement.clientWidth);
+ this.shadow = (typeof options.shadow !== 'undefined') ? options.shadow : false;
+ this.fastMode = (typeof options.fastMode !== 'undefined') ? options.fastMode : false;
+ this.backgroundColor = (typeof options.backgroundColor !== 'undefined') ? options.backgroundColor : 'white';
+ this.scrollable = (typeof options.scrollable !== 'undefined') ? options.scrollable : false;
+
+ // Get navbar height for keeping fixed navbar
+ this.fixedNavbarHeight = (fixedNavbar) ? $(fixedNavbar).outerHeight() || 0 : 0;
+
+ // Check existence
+ if (this.isInit()) {
+ this.destroy();
+ }
+
+ // Release height of the table wrapper
+ if (!this.scrollable) {
+ this.$tableWrapper.css('height', '100%')
+ .css('min-height', '100%')
+ .css('max-height', '100%');
+ }
+
+ /**
+ * Building
+ */
+ // Switch for freezeHead
+ if (freezeHead) {
+ this.buildHeadTable();
+ }
+ // Switch for freezeColumn
+ if (freezeColumn) {
+ this.buildColumnTable();
+ // X scroll bar
+ this.$tableWrapper.css('overflow-x', 'scroll');
+ }
+ // Switch for freezeColumnHead
+ if (freezeColumnHead && freezeHead && freezeColumn) {
+ this.buildColumnHeadTable();
+ }
+ // Switch for scrollBar
+ if (scrollBar) {
+ this.buildScrollBar();
+ }
+
+ // Body scroll-x prevention
+ var detectWindowScroll = (function (){
+ // If body scroll-x is opened, close library to prevent Invalid usage
+ if (this.$container.scrollLeft() > 0) {
+ // Mark
+ this.isWindowScrollX = true;
+ // Hide all components
+ if (this.$headTableWrap) {
+ this.$headTableWrap.css('visibility', 'hidden');
+ }
+ if (this.$columnTableWrap) {
+ this.$columnTableWrap.css('visibility', 'hidden');
+ }
+ if (this.$columnHeadTableWrap) {
+ this.$columnHeadTableWrap.css('visibility', 'hidden');
+ }
+ if (this.$scrollBarWrap) {
+ this.$scrollBarWrap.css('visibility', 'hidden');
+ }
+
+ } else {
+ // Unmark
+ this.isWindowScrollX = false;
+ }
+
+ }).bind(this);
+ // Listener of Body scroll-x prevention
+ this.$container.on('scroll.'+this.namespace, function () {
+
+ detectWindowScroll();
+ });
+
+ // Initialization
+ this.resize();
+
+ // Callback
+ if (typeof callback === 'function') {
+ callback();
+ }
+ }
+
+ /**
+ * Freeze thead table
+ */
+ FreezeTable.prototype.buildHeadTable = function() {
+
+ var that = this;
+
+ // Clone the table as Fixed thead
+ var $headTable = this.clone(this.$table);
+
+ // Fast Mode
+ if (this.fastMode) {
+ var $headTable = this.simplifyHead($headTable);
+ }
+
+ var headWrapStyles = this.options.headWrapStyles || null;
+ // Wrap the Fixed Column table
+ this.$headTableWrap = $('<div class="'+this.headWrapClass+'"></div>')
+ .append($headTable)
+ .css('position', 'fixed')
+ .css('overflow', 'hidden')
+ .css('visibility', 'hidden')
+ .css('top', 0 + this.fixedNavbarHeight)
+ .css('z-index', 2);
+ // Shadow option
+ if (this.shadow) {
+ this.$headTableWrap.css('box-shadow', '0px 6px 10px -5px rgba(159, 159, 160, 0.8)');
+ }
+ // Styles option
+ if (headWrapStyles && typeof headWrapStyles === "object") {
+ $.each(headWrapStyles, function(key, value) {
+ that.$headTableWrap.css(key, value);
+ });
+ }
+ // Add into target table wrap
+ this.$tableWrapper.append(this.$headTableWrap);
+
+ /**
+ * Listener - Table scroll for effecting Freeze Column
+ */
+ this.$tableWrapper.on('scroll.'+this.namespace, function() {
+
+ // this.$headTableWrap.css('left', this.$table.offset().left);
+ that.$headTableWrap.scrollLeft($(this).scrollLeft());
+ });
+
+ // Scrollable option
+ if (this.scrollable) {
+
+ var handler = function (window, that) {
+
+ var top = that.$tableWrapper.offset().top;
+
+ // Detect Current container's top is in the table scope
+ if (that.$tableWrapper.scrollTop() > 0 && top > that.fixedNavbarHeight) {
+
+ that.$headTableWrap.offset({top: top});
+ that.$headTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$headTableWrap.css('visibility', 'hidden');
+ }
+ }
+
+ /**
+ * Listener - Window scroll for effecting freeze head table
+ */
+ this.$tableWrapper.on('scroll.'+this.namespace, function() {
+
+ handler(window, that);
+ });
+
+ this.$container.on('scroll.'+this.namespace, function() {
+
+ handler(window, that);
+ });
+
+ }
+ // Default with window container
+ else if ($.isWindow(that.$container.get(0))) {
+
+ /**
+ * Listener - Window scroll for effecting freeze head table
+ */
+ this.$container.on('scroll.'+this.namespace, function() {
+
+ // Current container's top position
+ var topPosition = that.$container.scrollTop() + that.fixedNavbarHeight;
+ var tableTop = that.$table.offset().top - 1;
+
+ // Detect Current container's top is in the table scope
+ if (tableTop - 1 <= topPosition && (tableTop + that.$table.outerHeight() - 1) >= topPosition) {
+
+ that.$headTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$headTableWrap.css('visibility', 'hidden');
+ }
+ });
+ }
+ // Container setting
+ else {
+
+ /**
+ * Listener - Window scroll for effecting freeze head table
+ */
+ this.$container.on('scroll.'+this.namespace, function() {
+
+ var windowTop = $(window).scrollTop();
+ var tableTop = that.$table.offset().top - 1;
+
+ // Detect Current container's top is in the table scope
+ if (tableTop <= windowTop && (tableTop + that.$table.outerHeight() - 1) >= windowTop) {
+
+ that.$headTableWrap.offset({top: windowTop});
+ that.$headTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$headTableWrap.css('visibility', 'hidden');
+ }
+ });
+ }
+
+ /**
+ * Listener - Window resize for effecting freeze head table
+ */
+ this.$container.on('resize.'+this.namespace, function() {
+
+ // Scrollable check and prevention
+ var headTableWrapWidth = (that.scrollable) ? that.$tableWrapper.width() - that.scrollBarHeight : that.$tableWrapper.width();
+ headTableWrapWidth = (headTableWrapWidth > 0) ? headTableWrapWidth : that.$tableWrapper.width();
+ that.$headTableWrap.css('width', headTableWrapWidth);
+ that.$headTableWrap.css('height', that.$table.find("thead").outerHeight());
+ });
+ }
+
+ /**
+ * Freeze column table
+ */
+ FreezeTable.prototype.buildColumnTable = function() {
+
+ var that = this;
+
+ /**
+ * Setting
+ */
+ var columnWrapStyles = this.options.columnWrapStyles || null;
+ var columnNum = this.options.columnNum || 1;
+ var columnKeep = (typeof this.options.columnKeep !== 'undefined') ? this.options.columnKeep : false;
+ // Shadow option
+ var defaultColumnBorderWidth = (this.shadow) ? 0 : 1;
+ var columnBorderWidth = (typeof this.options.columnBorderWidth !== 'undefined') ? this.options.columnBorderWidth : defaultColumnBorderWidth;
+
+ // Clone the table as Fixed Column table
+ var $columnTable = this.clone(this.$table);
+
+ // Wrap the Fixed Column table
+ this.$columnTableWrap = $('<div class="'+this.columnWrapClass+'"></div>')
+ .append($columnTable)
+ .css('position', 'fixed')
+ .css('overflow', 'hidden')
+ .css('visibility', 'hidden')
+ .css('z-index', 3);
+ // Shadow option
+ if (this.shadow) {
+ this.$columnTableWrap.css('box-shadow', '6px 0px 10px -5px rgba(159, 159, 160, 0.8)');
+ }
+ // Styles option
+ if (columnWrapStyles && typeof columnWrapStyles === "object") {
+ $.each(columnWrapStyles, function(key, value) {
+ that.$columnTableWrap.css(key, value);
+ });
+ }
+ // Scrollable
+ if (this.scrollable) {
+ // Scrollable check and prevention
+// var columnTableWrapHeight = this.$tableWrapper.height() - this.scrollBarHeight;
+ var columnTableWrapHeight = this.$tableWrapper.height();
+ columnTableWrapHeight = (columnTableWrapHeight > 0) ? columnTableWrapHeight : this.$tableWrapper.height();
+// console.log(columnTableWrapHeight);
+// console.log(columnTableWrapHeight-8);
+ // 해당 영역에서 스크롤 크기 만큼 마이너스(크롬 스크롤 크기 8px;)
+ this.$columnTableWrap.height(columnTableWrapHeight-8);
+ }
+ // Add into target table wrap
+ this.$tableWrapper.append(this.$columnTableWrap);
+
+ /**
+ * localize the column wrap to current top
+ */
+ var localizeWrap = function () {
+
+ that.$columnTableWrap.offset({top: that.$tableWrapper.offset().top});
+ }
+
+ // Column keep option
+ if (columnKeep) {
+
+ this.$columnTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ // Scrollable option
+ if (that.scrollable) {
+
+ /**
+ * Listener - Table scroll for effecting Freeze Column
+ */
+ this.$tableWrapper.on('scroll.'+this.namespace, function() {
+
+
+ // Detect for horizontal scroll
+ if ($(this).scrollLeft() > 0) {
+
+ // Scrollable localization
+ that.$columnTableWrap.scrollTop(that.$tableWrapper.scrollTop());
+ that.$columnTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$columnTableWrap.css('visibility', 'hidden');
+ }
+ });
+
+ } else {
+
+ /**
+ * Listener - Table scroll for effecting Freeze Column
+ */
+ this.$tableWrapper.on('scroll.'+this.namespace, function() {
+
+ // Disable while isWindowScrollX
+ if (that.isWindowScrollX)
+ return;
+
+ // Detect for horizontal scroll
+ if ($(this).scrollLeft() > 0) {
+
+ that.$columnTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$columnTableWrap.css('visibility', 'hidden');
+ }
+ });
+ }
+ }
+
+ /**
+ * Listener - Window resize for effecting tables
+ */
+ this.$container.on('resize.'+this.namespace, function() {
+
+ // Follows origin table's width
+ $columnTable.width(that.$table.width());
+
+ /**
+ * Dynamic column calculation
+ */
+ // Get width by fixed column with number setting
+ var width = 0 + columnBorderWidth;
+ for (var i = 1; i <= columnNum; i++) {
+ // th/td detection
+ var th = that.$table.find('th:nth-child('+i+')').outerWidth();
+ var addWidth = (th > 0) ? th : that.$table.find('td:nth-child('+i+')').outerWidth();
+ width += addWidth;
+ }
+ that.$columnTableWrap.width(width);
+
+ localizeWrap();
+ });
+
+ /**
+ * Listener - Window scroll for effecting freeze column table
+ */
+ this.$container.on('scroll.'+this.namespace, function() {
+
+ localizeWrap();
+ });
+ }
+
+ /**
+ * Freeze column thead table
+ */
+ FreezeTable.prototype.buildColumnHeadTable = function() {
+
+ var that = this;
+
+ // Clone head table wrap
+ this.$columnHeadTableWrap = this.clone(this.$headTableWrap);
+
+ // Fast Mode
+ if (this.fastMode) {
+ this.$columnHeadTableWrap = this.simplifyHead(this.$columnHeadTableWrap);
+ }
+
+ var columnHeadWrapStyles = this.options.columnHeadWrapStyles || null;
+
+ this.$columnHeadTableWrap.removeClass(this.namespace)
+ .addClass(this.columnHeadWrapClass)
+ .css('z-index', 3);
+ // Shadow option
+ if (this.shadow) {
+ this.$columnHeadTableWrap.css('box-shadow', 'none');
+ }
+ // Styles option
+ if (columnHeadWrapStyles && typeof columnHeadWrapStyles === "object") {
+ $.each(columnHeadWrapStyles, function(key, value) {
+ this.$columnHeadTableWrap.css(key, value);
+ });
+ }
+
+ // Add into target table wrap
+ this.$tableWrapper.append(this.$columnHeadTableWrap);
+
+ // Scrollable option
+ if (this.scrollable) {
+
+ var detect = function () {
+
+ var top = that.$tableWrapper.offset().top;
+
+ // Detect Current container's top is in the table scope
+ if (that.$tableWrapper.scrollTop() > 0 && top > that.fixedNavbarHeight) {
+
+ that.$columnHeadTableWrap.offset({top: top});
+ that.$columnHeadTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$columnHeadTableWrap.css('visibility', 'hidden');
+ }
+ }
+
+ /**
+ * Listener - Window scroll for effecting freeze head table
+ */
+ $(this.$tableWrapper).on('scroll.'+this.namespace, function() {
+
+ detect();
+ });
+
+ }
+ // Default with window container
+ else if ($.isWindow(this.$container.get(0))) {
+
+ var detect = function () {
+
+ // Current container's top position
+ var topPosition = that.$container.scrollTop() + that.fixedNavbarHeight;
+ var tableTop = that.$table.offset().top - 1;
+
+ // Detect Current container's top is in the table scope
+ if (tableTop - 1 <= topPosition && (tableTop + that.$table.outerHeight() - 1) >= topPosition && that.$tableWrapper.scrollLeft() > 0) {
+
+ that.$columnHeadTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$columnHeadTableWrap.css('visibility', 'hidden');
+ }
+ }
+ }
+ // Container setting
+ else {
+
+ var detect = function () {
+
+ var windowTop = $(window).scrollTop();
+ var tableTop = that.$table.offset().top - 1;
+
+ // Detect Current container's top is in the table scope
+ if (tableTop <= windowTop && (tableTop + that.$table.outerHeight() - 1) >= windowTop && that.$tableWrapper.scrollLeft() > 0) {
+
+ that.$columnHeadTableWrap.offset({top: windowTop});
+ that.$columnHeadTableWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$columnHeadTableWrap.css('visibility', 'hidden');
+ }
+ }
+ }
+
+ /**
+ * Listener - Window scroll for effecting Freeze column-head table
+ */
+ this.$container.on('scroll.'+this.namespace, function() {
+
+ detect();
+ });
+
+ /**
+ * Listener - Table scroll for effecting Freeze column-head table
+ */
+ this.$tableWrapper.on('scroll.'+this.namespace, function() {
+
+ // Disable while isWindowScrollX
+ if (that.isWindowScrollX)
+ return;
+
+ detect();
+ });
+
+ /**
+ * Listener - Window resize for effecting freeze column-head table
+ */
+ this.$container.on('resize.'+this.namespace, function() {
+
+ // Table synchronism
+ that.$columnHeadTableWrap.find("> table").css('width', that.$table.width());
+ that.$columnHeadTableWrap.css('width', that.$columnTableWrap.width());
+ that.$columnHeadTableWrap.css('height', that.$table.find("thead").outerHeight());
+ });
+ }
+
+ /**
+ * Freeze scroll bar
+ */
+ FreezeTable.prototype.buildScrollBar = function() {
+
+ var that = this;
+
+ var theadHeight = this.$table.find("thead").outerHeight();
+
+ // Scroll wrap container
+ var $scrollBarContainer = $('<div class="'+this.scrollBarWrapClass+'"></div>')
+ .css('width', this.$table.width())
+ .css('height', 1);
+
+ // Wrap the Fixed Column table
+ this.$scrollBarWrap = $('<div class="'+this.scrollBarWrapClass+'"></div>')
+ .css('position', 'fixed')
+ .css('overflow-x', 'scroll')
+ .css('visibility', 'hidden')
+ .css('bottom', 0)
+ .css('z-index', 2)
+ .css('width', this.$tableWrapper.width())
+ .css('height', this.scrollBarHeight);
+
+ // Add into target table wrap
+ this.$scrollBarWrap.append($scrollBarContainer);
+ this.$tableWrapper.append(this.$scrollBarWrap);
+
+ /**
+ * Listener - Freeze scroll bar effected Table
+ */
+ this.$scrollBarWrap.on('scroll.'+this.namespace, function() {
+
+ that.$tableWrapper.scrollLeft($(this).scrollLeft());
+ });
+
+ /**
+ * Listener - Table scroll for effecting Freeze scroll bar
+ */
+ this.$tableWrapper.on('scroll.'+this.namespace, function() {
+
+ // this.$headTableWrap.css('left', $table.offset().left);
+ that.$scrollBarWrap.scrollLeft($(this).scrollLeft());
+ });
+
+ /**
+ * Listener - Window scroll for effecting scroll bar
+ */
+ this.$container.on('scroll.'+this.namespace, function() {
+
+ // Current container's top position
+ var bottomPosition = that.$container.scrollTop() + that.$container.height() - theadHeight + that.fixedNavbarHeight;
+
+ // Detect Current container's top is in the table scope
+ if (that.$table.offset().top - 1 <= bottomPosition && (that.$table.offset().top + that.$table.outerHeight() - 1) >= bottomPosition) {
+
+ that.$scrollBarWrap.css('visibility', 'visible');
+
+ } else {
+
+ that.$scrollBarWrap.css('visibility', 'hidden');
+ }
+ });
+
+ /**
+ * Listener - Window resize for effecting scroll bar
+ */
+ this.$container.on('resize.'+this.namespace, function() {
+
+ // Update width
+ $scrollBarContainer.css('width', that.$table.width())
+ // Update Wrap
+ that.$scrollBarWrap.css('width', that.$tableWrapper.width());
+ });
+ }
+
+ /**
+ * Clone element
+ *
+ * @param {element} element
+ */
+ FreezeTable.prototype.clone = function (element) {
+
+ var $clone = $(element).clone()
+ .removeAttr('id') // Remove ID
+
+ // Bootstrap background-color transparent problem
+ if (this.backgroundColor) {
+ $clone.css('background-color', this.backgroundColor);
+ }
+
+ return $clone;
+ }
+
+ /**
+ * simplify cloned head table
+ *
+ * @param {element} table Table element
+ */
+ FreezeTable.prototype.simplifyHead = function (table) {
+
+ var that = this;
+
+ var $headTable = $(table);
+ // Remove non-display DOM but keeping first row for accuracy
+ $headTable.find("> tr, > tbody > tr, tfoot > tr").not(':first').remove();
+ // Each th/td width synchronism
+ $.each($headTable.find("> thead > tr:nth-child(1) >"), function (key, value) {
+
+ var width = that.$table.find("> thead > tr:nth-child(1) > :nth-child("+parseInt(key+1)+")").outerWidth();
+ $(this).css('width', width);
+ });
+
+ return $headTable;
+ }
+
+ /**
+ * Detect is already initialized
+ */
+ FreezeTable.prototype.isInit = function() {
+
+ // Check existence DOM
+ if (this.$tableWrapper.find("."+this.headWrapClass).length)
+ return true;
+ if (this.$tableWrapper.find("."+this.columnWrapClass).length)
+ return true;
+ if (this.$tableWrapper.find("."+this.columnHeadWrapClass).length)
+ return true;
+ if (this.$tableWrapper.find("."+this.scrollBarWrapClass).length)
+ return true;
+
+ return false;
+
+ }
+
+ /**
+ * Unbind all events by same namespace
+ */
+ FreezeTable.prototype.unbind = function() {
+
+ this.$container.off('resize.'+this.namespace);
+ this.$container.off('scroll.'+this.namespace);
+ this.$tableWrapper.off('scroll.'+this.namespace);
+ }
+
+ /**
+ * Destroy Freeze Table by same namespace
+ */
+ FreezeTable.prototype.destroy = function() {
+
+ this.unbind();
+ this.$tableWrapper.find("."+this.headWrapClass).remove();
+ this.$tableWrapper.find("."+this.columnWrapClass).remove();
+ this.$tableWrapper.find("."+this.columnHeadWrapClass).remove();
+ this.$tableWrapper.find("."+this.scrollBarWrapClass).remove();
+ }
+
+ /**
+ * Resize trigger for current same namespace
+ */
+ FreezeTable.prototype.resize = function() {
+
+ this.$container.trigger('resize.'+this.namespace);
+ this.$container.trigger('scroll.'+this.namespace);
+ this.$tableWrapper.trigger('scroll.'+this.namespace);
+
+ return true;
+ }
+
+ /**
+ * Update for Dynamic Content
+ */
+ FreezeTable.prototype.update = function() {
+
+ // Same as re-new object
+ this.options = 'update';
+ this.init();
+ return this;
+ }
+
+ /**
+ * Interface
+ */
+ // Class for single element
+ window.FreezeTable = FreezeTable;
+ // jQuery interface
+ $.fn.freezeTable = function (options) {
+
+ // Single/Multiple mode
+ if (this.length === 1) {
+
+ return new FreezeTable(this, options)
+ }
+ else if (this.length > 1) {
+
+ var result = [];
+ // Multiple elements bundle
+ this.each(function () {
+ result.push(new FreezeTable(this, options));
+ });
+
+ return result;
+ }
+
+ return false;
+ }
+
+})(jQuery, window);
Property changes on: base3.10/src/main/webapp/js/com/freeze-table.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/slick.js
===================================================================
--- base3.10/src/main/webapp/js/com/slick.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/slick.js (revision 7)
@@ -0,0 +1,3011 @@
+/*
+ _ _ _ _
+ ___| (_) ___| | __ (_)___
+/ __| | |/ __| |/ / | / __|
+\__ \ | | (__| < _ | \__ \
+|___/_|_|\___|_|\_(_)/ |___/
+ |__/
+
+ Version: 1.8.0
+ Author: Ken Wheeler
+ Website: http://kenwheeler.github.io
+ Docs: http://kenwheeler.github.io/slick
+ Repo: http://github.com/kenwheeler/slick
+ Issues: http://github.com/kenwheeler/slick/issues
+
+ */
+/* global window, document, define, jQuery, setInterval, clearInterval */
+;(function(factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else if (typeof exports !== 'undefined') {
+ module.exports = factory(require('jquery'));
+ } else {
+ factory(jQuery);
+ }
+
+}(function($) {
+ 'use strict';
+ var Slick = window.Slick || {};
+
+ Slick = (function() {
+
+ var instanceUid = 0;
+
+ function Slick(element, settings) {
+
+ var _ = this, dataSettings;
+
+ _.defaults = {
+ accessibility: true,
+ adaptiveHeight: false,
+ appendArrows: $(element),
+ appendDots: $(element),
+ arrows: true,
+ asNavFor: null,
+ prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
+ nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
+ autoplay: false,
+ autoplaySpeed: 3000,
+ centerMode: false,
+ centerPadding: '50px',
+ cssEase: 'ease',
+ customPaging: function(slider, i) {
+ return $('<a>').text(i + 1);
+ },
+ dots: false,
+ dotsClass: 'slick-dots',
+ draggable: true,
+ easing: 'linear',
+ edgeFriction: 0.35,
+ fade: false,
+ focusOnSelect: false,
+ focusOnChange: false,
+ infinite: true,
+ initialSlide: 0,
+ lazyLoad: 'ondemand',
+ mobileFirst: false,
+ pauseOnHover: true,
+ pauseOnFocus: true,
+ pauseOnDotsHover: false,
+ respondTo: 'window',
+ responsive: null,
+ rows: 1,
+ rtl: false,
+ slide: '',
+ slidesPerRow: 1,
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ speed: 500,
+ swipe: true,
+ swipeToSlide: false,
+ touchMove: true,
+ touchThreshold: 5,
+ useCSS: true,
+ useTransform: true,
+ variableWidth: false,
+ vertical: false,
+ verticalSwiping: false,
+ waitForAnimate: true,
+ zIndex: 1000
+ };
+
+ _.initials = {
+ animating: false,
+ dragging: false,
+ autoPlayTimer: null,
+ currentDirection: 0,
+ currentLeft: null,
+ currentSlide: 0,
+ direction: 1,
+ $dots: null,
+ listWidth: null,
+ listHeight: null,
+ loadIndex: 0,
+ $nextArrow: null,
+ $prevArrow: null,
+ scrolling: false,
+ slideCount: null,
+ slideWidth: null,
+ $slideTrack: null,
+ $slides: null,
+ sliding: false,
+ slideOffset: 0,
+ swipeLeft: null,
+ swiping: false,
+ $list: null,
+ touchObject: {},
+ transformsEnabled: false,
+ unslicked: false
+ };
+
+ $.extend(_, _.initials);
+
+ _.activeBreakpoint = null;
+ _.animType = null;
+ _.animProp = null;
+ _.breakpoints = [];
+ _.breakpointSettings = [];
+ _.cssTransitions = false;
+ _.focussed = false;
+ _.interrupted = false;
+ _.hidden = 'hidden';
+ _.paused = true;
+ _.positionProp = null;
+ _.respondTo = null;
+ _.rowCount = 1;
+ _.shouldClick = true;
+ _.$slider = $(element);
+ _.$slidesCache = null;
+ _.transformType = null;
+ _.transitionType = null;
+ _.visibilityChange = 'visibilitychange';
+ _.windowWidth = 0;
+ _.windowTimer = null;
+
+ dataSettings = $(element).data('slick') || {};
+
+ _.options = $.extend({}, _.defaults, settings, dataSettings);
+
+ _.currentSlide = _.options.initialSlide;
+
+ _.originalSettings = _.options;
+
+ if (typeof document.mozHidden !== 'undefined') {
+ _.hidden = 'mozHidden';
+ _.visibilityChange = 'mozvisibilitychange';
+ } else if (typeof document.webkitHidden !== 'undefined') {
+ _.hidden = 'webkitHidden';
+ _.visibilityChange = 'webkitvisibilitychange';
+ }
+
+ _.autoPlay = $.proxy(_.autoPlay, _);
+ _.autoPlayClear = $.proxy(_.autoPlayClear, _);
+ _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
+ _.changeSlide = $.proxy(_.changeSlide, _);
+ _.clickHandler = $.proxy(_.clickHandler, _);
+ _.selectHandler = $.proxy(_.selectHandler, _);
+ _.setPosition = $.proxy(_.setPosition, _);
+ _.swipeHandler = $.proxy(_.swipeHandler, _);
+ _.dragHandler = $.proxy(_.dragHandler, _);
+ _.keyHandler = $.proxy(_.keyHandler, _);
+
+ _.instanceUid = instanceUid++;
+
+ // A simple way to check for HTML strings
+ // Strict HTML recognition (must start with <)
+ // Extracted from jQuery v1.11 source
+ _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
+
+
+ _.registerBreakpoints();
+ _.init(true);
+
+ }
+
+ return Slick;
+
+ }());
+
+ Slick.prototype.activateADA = function() {
+ var _ = this;
+
+ _.$slideTrack.find('.slick-active').attr({
+ 'aria-hidden': 'false'
+ }).find('a, input, button, select').attr({
+ 'tabindex': '0'
+ });
+
+ };
+
+ Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
+
+ var _ = this;
+
+ if (typeof(index) === 'boolean') {
+ addBefore = index;
+ index = null;
+ } else if (index < 0 || (index >= _.slideCount)) {
+ return false;
+ }
+
+ _.unload();
+
+ if (typeof(index) === 'number') {
+ if (index === 0 && _.$slides.length === 0) {
+ $(markup).appendTo(_.$slideTrack);
+ } else if (addBefore) {
+ $(markup).insertBefore(_.$slides.eq(index));
+ } else {
+ $(markup).insertAfter(_.$slides.eq(index));
+ }
+ } else {
+ if (addBefore === true) {
+ $(markup).prependTo(_.$slideTrack);
+ } else {
+ $(markup).appendTo(_.$slideTrack);
+ }
+ }
+
+ _.$slides = _.$slideTrack.children(this.options.slide);
+
+ _.$slideTrack.children(this.options.slide).detach();
+
+ _.$slideTrack.append(_.$slides);
+
+ _.$slides.each(function(index, element) {
+ $(element).attr('data-slick-index', index);
+ });
+
+ _.$slidesCache = _.$slides;
+
+ _.reinit();
+
+ };
+
+ Slick.prototype.animateHeight = function() {
+ var _ = this;
+ if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
+ var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
+ _.$list.animate({
+ height: targetHeight
+ }, _.options.speed);
+ }
+ };
+
+ Slick.prototype.animateSlide = function(targetLeft, callback) {
+
+ var animProps = {},
+ _ = this;
+
+ _.animateHeight();
+
+ if (_.options.rtl === true && _.options.vertical === false) {
+ targetLeft = -targetLeft;
+ }
+ if (_.transformsEnabled === false) {
+ if (_.options.vertical === false) {
+ _.$slideTrack.animate({
+ left: targetLeft
+ }, _.options.speed, _.options.easing, callback);
+ } else {
+ _.$slideTrack.animate({
+ top: targetLeft
+ }, _.options.speed, _.options.easing, callback);
+ }
+
+ } else {
+
+ if (_.cssTransitions === false) {
+ if (_.options.rtl === true) {
+ _.currentLeft = -(_.currentLeft);
+ }
+ $({
+ animStart: _.currentLeft
+ }).animate({
+ animStart: targetLeft
+ }, {
+ duration: _.options.speed,
+ easing: _.options.easing,
+ step: function(now) {
+ now = Math.ceil(now);
+ if (_.options.vertical === false) {
+ animProps[_.animType] = 'translate(' +
+ now + 'px, 0px)';
+ _.$slideTrack.css(animProps);
+ } else {
+ animProps[_.animType] = 'translate(0px,' +
+ now + 'px)';
+ _.$slideTrack.css(animProps);
+ }
+ },
+ complete: function() {
+ if (callback) {
+ callback.call();
+ }
+ }
+ });
+
+ } else {
+
+ _.applyTransition();
+ targetLeft = Math.ceil(targetLeft);
+
+ if (_.options.vertical === false) {
+ animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
+ } else {
+ animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
+ }
+ _.$slideTrack.css(animProps);
+
+ if (callback) {
+ setTimeout(function() {
+
+ _.disableTransition();
+
+ callback.call();
+ }, _.options.speed);
+ }
+
+ }
+
+ }
+
+ };
+
+ Slick.prototype.getNavTarget = function() {
+
+ var _ = this,
+ asNavFor = _.options.asNavFor;
+
+ if ( asNavFor && asNavFor !== null ) {
+ asNavFor = $(asNavFor).not(_.$slider);
+ }
+
+ return asNavFor;
+
+ };
+
+ Slick.prototype.asNavFor = function(index) {
+
+ var _ = this,
+ asNavFor = _.getNavTarget();
+
+ if ( asNavFor !== null && typeof asNavFor === 'object' ) {
+ asNavFor.each(function() {
+ var target = $(this).slick('getSlick');
+ if(!target.unslicked) {
+ target.slideHandler(index, true);
+ }
+ });
+ }
+
+ };
+
+ Slick.prototype.applyTransition = function(slide) {
+
+ var _ = this,
+ transition = {};
+
+ if (_.options.fade === false) {
+ transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
+ } else {
+ transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
+ }
+
+ if (_.options.fade === false) {
+ _.$slideTrack.css(transition);
+ } else {
+ _.$slides.eq(slide).css(transition);
+ }
+
+ };
+
+ Slick.prototype.autoPlay = function() {
+
+ var _ = this;
+
+ _.autoPlayClear();
+
+ if ( _.slideCount > _.options.slidesToShow ) {
+ _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
+ }
+
+ };
+
+ Slick.prototype.autoPlayClear = function() {
+
+ var _ = this;
+
+ if (_.autoPlayTimer) {
+ clearInterval(_.autoPlayTimer);
+ }
+
+ };
+
+ Slick.prototype.autoPlayIterator = function() {
+
+ var _ = this,
+ slideTo = _.currentSlide + _.options.slidesToScroll;
+
+ if ( !_.paused && !_.interrupted && !_.focussed ) {
+
+ if ( _.options.infinite === false ) {
+
+ if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
+ _.direction = 0;
+ }
+
+ else if ( _.direction === 0 ) {
+
+ slideTo = _.currentSlide - _.options.slidesToScroll;
+
+ if ( _.currentSlide - 1 === 0 ) {
+ _.direction = 1;
+ }
+
+ }
+
+ }
+
+ _.slideHandler( slideTo );
+
+ }
+
+ };
+
+ Slick.prototype.buildArrows = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true ) {
+
+ _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
+ _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
+
+ if( _.slideCount > _.options.slidesToShow ) {
+
+ _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
+ _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
+
+ if (_.htmlExpr.test(_.options.prevArrow)) {
+ _.$prevArrow.prependTo(_.options.appendArrows);
+ }
+
+ if (_.htmlExpr.test(_.options.nextArrow)) {
+ _.$nextArrow.appendTo(_.options.appendArrows);
+ }
+
+ if (_.options.infinite !== true) {
+ _.$prevArrow
+ .addClass('slick-disabled')
+ .attr('aria-disabled', 'true');
+ }
+
+ } else {
+
+ _.$prevArrow.add( _.$nextArrow )
+
+ .addClass('slick-hidden')
+ .attr({
+ 'aria-disabled': 'true',
+ 'tabindex': '-1'
+ });
+
+ }
+
+ }
+
+ };
+
+ Slick.prototype.buildDots = function() {
+
+ var _ = this,
+ i, dot;
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$slider.addClass('slick-dotted');
+
+ dot = $('<ul />').addClass(_.options.dotsClass);
+
+ for (i = 0; i <= _.getDotCount(); i += 1) {
+ dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
+ }
+
+ _.$dots = dot.appendTo(_.options.appendDots);
+
+ _.$dots.find('li').first().addClass('slick-active');
+
+ }
+
+ };
+
+ Slick.prototype.buildOut = function() {
+
+ var _ = this;
+
+ _.$slides =
+ _.$slider
+ .children( _.options.slide + ':not(.slick-cloned)')
+ .addClass('slick-slide');
+
+ _.slideCount = _.$slides.length;
+
+ _.$slides.each(function(index, element) {
+ $(element)
+ .attr('data-slick-index', index)
+ .data('originalStyling', $(element).attr('style') || '');
+ });
+
+ _.$slider.addClass('slick-slider');
+
+ _.$slideTrack = (_.slideCount === 0) ?
+ $('<div class="slick-track"/>').appendTo(_.$slider) :
+ _.$slides.wrapAll('<div class="slick-track"/>').parent();
+
+ _.$list = _.$slideTrack.wrap(
+ '<div class="slick-list"/>').parent();
+ _.$slideTrack.css('opacity', 0);
+
+ if (_.options.centerMode === true || _.options.swipeToSlide === true) {
+ _.options.slidesToScroll = 1;
+ }
+
+ $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
+
+ _.setupInfinite();
+
+ _.buildArrows();
+
+ _.buildDots();
+
+ _.updateDots();
+
+
+ _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
+
+ if (_.options.draggable === true) {
+ _.$list.addClass('draggable');
+ }
+
+ };
+
+ Slick.prototype.buildRows = function() {
+
+ var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
+
+ newSlides = document.createDocumentFragment();
+ originalSlides = _.$slider.children();
+
+ if(_.options.rows > 0) {
+
+ slidesPerSection = _.options.slidesPerRow * _.options.rows;
+ numOfSlides = Math.ceil(
+ originalSlides.length / slidesPerSection
+ );
+
+ for(a = 0; a < numOfSlides; a++){
+ var slide = document.createElement('div');
+ for(b = 0; b < _.options.rows; b++) {
+ var row = document.createElement('div');
+ for(c = 0; c < _.options.slidesPerRow; c++) {
+ var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
+ if (originalSlides.get(target)) {
+ row.appendChild(originalSlides.get(target));
+ }
+ }
+ slide.appendChild(row);
+ }
+ newSlides.appendChild(slide);
+ }
+
+ _.$slider.empty().append(newSlides);
+ _.$slider.children().children().children()
+ .css({
+ 'width':(100 / _.options.slidesPerRow) + '%',
+ 'display': 'inline-block'
+ });
+
+ }
+
+ };
+
+ Slick.prototype.checkResponsive = function(initial, forceUpdate) {
+
+ var _ = this,
+ breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
+ var sliderWidth = _.$slider.width();
+ var windowWidth = window.innerWidth || $(window).width();
+
+ if (_.respondTo === 'window') {
+ respondToWidth = windowWidth;
+ } else if (_.respondTo === 'slider') {
+ respondToWidth = sliderWidth;
+ } else if (_.respondTo === 'min') {
+ respondToWidth = Math.min(windowWidth, sliderWidth);
+ }
+
+ if ( _.options.responsive &&
+ _.options.responsive.length &&
+ _.options.responsive !== null) {
+
+ targetBreakpoint = null;
+
+ for (breakpoint in _.breakpoints) {
+ if (_.breakpoints.hasOwnProperty(breakpoint)) {
+ if (_.originalSettings.mobileFirst === false) {
+ if (respondToWidth < _.breakpoints[breakpoint]) {
+ targetBreakpoint = _.breakpoints[breakpoint];
+ }
+ } else {
+ if (respondToWidth > _.breakpoints[breakpoint]) {
+ targetBreakpoint = _.breakpoints[breakpoint];
+ }
+ }
+ }
+ }
+
+ if (targetBreakpoint !== null) {
+ if (_.activeBreakpoint !== null) {
+ if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
+ _.activeBreakpoint =
+ targetBreakpoint;
+ if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
+ _.unslick(targetBreakpoint);
+ } else {
+ _.options = $.extend({}, _.originalSettings,
+ _.breakpointSettings[
+ targetBreakpoint]);
+ if (initial === true) {
+ _.currentSlide = _.options.initialSlide;
+ }
+ _.refresh(initial);
+ }
+ triggerBreakpoint = targetBreakpoint;
+ }
+ } else {
+ _.activeBreakpoint = targetBreakpoint;
+ if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
+ _.unslick(targetBreakpoint);
+ } else {
+ _.options = $.extend({}, _.originalSettings,
+ _.breakpointSettings[
+ targetBreakpoint]);
+ if (initial === true) {
+ _.currentSlide = _.options.initialSlide;
+ }
+ _.refresh(initial);
+ }
+ triggerBreakpoint = targetBreakpoint;
+ }
+ } else {
+ if (_.activeBreakpoint !== null) {
+ _.activeBreakpoint = null;
+ _.options = _.originalSettings;
+ if (initial === true) {
+ _.currentSlide = _.options.initialSlide;
+ }
+ _.refresh(initial);
+ triggerBreakpoint = targetBreakpoint;
+ }
+ }
+
+ // only trigger breakpoints during an actual break. not on initialize.
+ if( !initial && triggerBreakpoint !== false ) {
+ _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
+ }
+ }
+
+ };
+
+ Slick.prototype.changeSlide = function(event, dontAnimate) {
+
+ var _ = this,
+ $target = $(event.currentTarget),
+ indexOffset, slideOffset, unevenOffset;
+
+ // If target is a link, prevent default action.
+ if($target.is('a')) {
+ event.preventDefault();
+ }
+
+ // If target is not the <li> element (ie: a child), find the <li>.
+ if(!$target.is('li')) {
+ $target = $target.closest('li');
+ }
+
+ unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
+ indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
+
+ switch (event.data.message) {
+
+ case 'previous':
+ slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
+ if (_.slideCount > _.options.slidesToShow) {
+ _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
+ }
+ break;
+
+ case 'next':
+ slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
+ if (_.slideCount > _.options.slidesToShow) {
+ _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
+ }
+ break;
+
+ case 'index':
+ var index = event.data.index === 0 ? 0 :
+ event.data.index || $target.index() * _.options.slidesToScroll;
+
+ _.slideHandler(_.checkNavigable(index), false, dontAnimate);
+ $target.children().trigger('focus');
+ break;
+
+ default:
+ return;
+ }
+
+ };
+
+ Slick.prototype.checkNavigable = function(index) {
+
+ var _ = this,
+ navigables, prevNavigable;
+
+ navigables = _.getNavigableIndexes();
+ prevNavigable = 0;
+ if (index > navigables[navigables.length - 1]) {
+ index = navigables[navigables.length - 1];
+ } else {
+ for (var n in navigables) {
+ if (index < navigables[n]) {
+ index = prevNavigable;
+ break;
+ }
+ prevNavigable = navigables[n];
+ }
+ }
+
+ return index;
+ };
+
+ Slick.prototype.cleanUpEvents = function() {
+
+ var _ = this;
+
+ if (_.options.dots && _.$dots !== null) {
+
+ $('li', _.$dots)
+ .off('click.slick', _.changeSlide)
+ .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
+ .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+ if (_.options.accessibility === true) {
+ _.$dots.off('keydown.slick', _.keyHandler);
+ }
+ }
+
+ _.$slider.off('focus.slick blur.slick');
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+ _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
+ _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
+
+ if (_.options.accessibility === true) {
+ _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
+ _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
+ }
+ }
+
+ _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
+ _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
+ _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
+ _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
+
+ _.$list.off('click.slick', _.clickHandler);
+
+ $(document).off(_.visibilityChange, _.visibility);
+
+ _.cleanUpSlideEvents();
+
+ if (_.options.accessibility === true) {
+ _.$list.off('keydown.slick', _.keyHandler);
+ }
+
+ if (_.options.focusOnSelect === true) {
+ $(_.$slideTrack).children().off('click.slick', _.selectHandler);
+ }
+
+ $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
+
+ $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
+
+ $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
+
+ $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
+
+ };
+
+ Slick.prototype.cleanUpSlideEvents = function() {
+
+ var _ = this;
+
+ _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
+ _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+ };
+
+ Slick.prototype.cleanUpRows = function() {
+
+ var _ = this, originalSlides;
+
+ if(_.options.rows > 0) {
+ originalSlides = _.$slides.children().children();
+ originalSlides.removeAttr('style');
+ _.$slider.empty().append(originalSlides);
+ }
+
+ };
+
+ Slick.prototype.clickHandler = function(event) {
+
+ var _ = this;
+
+ if (_.shouldClick === false) {
+ event.stopImmediatePropagation();
+ event.stopPropagation();
+ event.preventDefault();
+ }
+
+ };
+
+ Slick.prototype.destroy = function(refresh) {
+
+ var _ = this;
+
+ _.autoPlayClear();
+
+ _.touchObject = {};
+
+ _.cleanUpEvents();
+
+ $('.slick-cloned', _.$slider).detach();
+
+ if (_.$dots) {
+ _.$dots.remove();
+ }
+
+ if ( _.$prevArrow && _.$prevArrow.length ) {
+
+ _.$prevArrow
+ .removeClass('slick-disabled slick-arrow slick-hidden')
+ .removeAttr('aria-hidden aria-disabled tabindex')
+ .css('display','');
+
+ if ( _.htmlExpr.test( _.options.prevArrow )) {
+ _.$prevArrow.remove();
+ }
+ }
+
+ if ( _.$nextArrow && _.$nextArrow.length ) {
+
+ _.$nextArrow
+ .removeClass('slick-disabled slick-arrow slick-hidden')
+ .removeAttr('aria-hidden aria-disabled tabindex')
+ .css('display','');
+
+ if ( _.htmlExpr.test( _.options.nextArrow )) {
+ _.$nextArrow.remove();
+ }
+ }
+
+
+ if (_.$slides) {
+
+ _.$slides
+ .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
+ .removeAttr('aria-hidden')
+ .removeAttr('data-slick-index')
+ .each(function(){
+ $(this).attr('style', $(this).data('originalStyling'));
+ });
+
+ _.$slideTrack.children(this.options.slide).detach();
+
+ _.$slideTrack.detach();
+
+ _.$list.detach();
+
+ _.$slider.append(_.$slides);
+ }
+
+ _.cleanUpRows();
+
+ _.$slider.removeClass('slick-slider');
+ _.$slider.removeClass('slick-initialized');
+ _.$slider.removeClass('slick-dotted');
+
+ _.unslicked = true;
+
+ if(!refresh) {
+ _.$slider.trigger('destroy', [_]);
+ }
+
+ };
+
+ Slick.prototype.disableTransition = function(slide) {
+
+ var _ = this,
+ transition = {};
+
+ transition[_.transitionType] = '';
+
+ if (_.options.fade === false) {
+ _.$slideTrack.css(transition);
+ } else {
+ _.$slides.eq(slide).css(transition);
+ }
+
+ };
+
+ Slick.prototype.fadeSlide = function(slideIndex, callback) {
+
+ var _ = this;
+
+ if (_.cssTransitions === false) {
+
+ _.$slides.eq(slideIndex).css({
+ zIndex: _.options.zIndex
+ });
+
+ _.$slides.eq(slideIndex).animate({
+ opacity: 1
+ }, _.options.speed, _.options.easing, callback);
+
+ } else {
+
+ _.applyTransition(slideIndex);
+
+ _.$slides.eq(slideIndex).css({
+ opacity: 1,
+ zIndex: _.options.zIndex
+ });
+
+ if (callback) {
+ setTimeout(function() {
+
+ _.disableTransition(slideIndex);
+
+ callback.call();
+ }, _.options.speed);
+ }
+
+ }
+
+ };
+
+ Slick.prototype.fadeSlideOut = function(slideIndex) {
+
+ var _ = this;
+
+ if (_.cssTransitions === false) {
+
+ _.$slides.eq(slideIndex).animate({
+ opacity: 0,
+ zIndex: _.options.zIndex - 2
+ }, _.options.speed, _.options.easing);
+
+ } else {
+
+ _.applyTransition(slideIndex);
+
+ _.$slides.eq(slideIndex).css({
+ opacity: 0,
+ zIndex: _.options.zIndex - 2
+ });
+
+ }
+
+ };
+
+ Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
+
+ var _ = this;
+
+ if (filter !== null) {
+
+ _.$slidesCache = _.$slides;
+
+ _.unload();
+
+ _.$slideTrack.children(this.options.slide).detach();
+
+ _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
+
+ _.reinit();
+
+ }
+
+ };
+
+ Slick.prototype.focusHandler = function() {
+
+ var _ = this;
+
+ _.$slider
+ .off('focus.slick blur.slick')
+ .on('focus.slick blur.slick', '*', function(event) {
+
+ event.stopImmediatePropagation();
+ var $sf = $(this);
+
+ setTimeout(function() {
+
+ if( _.options.pauseOnFocus ) {
+ _.focussed = $sf.is(':focus');
+ _.autoPlay();
+ }
+
+ }, 0);
+
+ });
+ };
+
+ Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
+
+ var _ = this;
+ return _.currentSlide;
+
+ };
+
+ Slick.prototype.getDotCount = function() {
+
+ var _ = this;
+
+ var breakPoint = 0;
+ var counter = 0;
+ var pagerQty = 0;
+
+ if (_.options.infinite === true) {
+ if (_.slideCount <= _.options.slidesToShow) {
+ ++pagerQty;
+ } else {
+ while (breakPoint < _.slideCount) {
+ ++pagerQty;
+ breakPoint = counter + _.options.slidesToScroll;
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+ }
+ }
+ } else if (_.options.centerMode === true) {
+ pagerQty = _.slideCount;
+ } else if(!_.options.asNavFor) {
+ pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
+ }else {
+ while (breakPoint < _.slideCount) {
+ ++pagerQty;
+ breakPoint = counter + _.options.slidesToScroll;
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+ }
+ }
+
+ return pagerQty - 1;
+
+ };
+
+ Slick.prototype.getLeft = function(slideIndex) {
+
+ var _ = this,
+ targetLeft,
+ verticalHeight,
+ verticalOffset = 0,
+ targetSlide,
+ coef;
+
+ _.slideOffset = 0;
+ verticalHeight = _.$slides.first().outerHeight(true);
+
+ if (_.options.infinite === true) {
+ if (_.slideCount > _.options.slidesToShow) {
+ _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
+ coef = -1
+
+ if (_.options.vertical === true && _.options.centerMode === true) {
+ if (_.options.slidesToShow === 2) {
+ coef = -1.5;
+ } else if (_.options.slidesToShow === 1) {
+ coef = -2
+ }
+ }
+ verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
+ }
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
+ if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
+ if (slideIndex > _.slideCount) {
+ _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
+ verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
+ } else {
+ _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
+ verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
+ }
+ }
+ }
+ } else {
+ if (slideIndex + _.options.slidesToShow > _.slideCount) {
+ _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
+ verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
+ }
+ }
+
+ if (_.slideCount <= _.options.slidesToShow) {
+ _.slideOffset = 0;
+ verticalOffset = 0;
+ }
+
+ if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
+ _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
+ } else if (_.options.centerMode === true && _.options.infinite === true) {
+ _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
+ } else if (_.options.centerMode === true) {
+ _.slideOffset = 0;
+ _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
+ }
+
+ if (_.options.vertical === false) {
+ targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
+ } else {
+ targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
+ }
+
+ if (_.options.variableWidth === true) {
+
+ if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
+ } else {
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
+ }
+
+ if (_.options.rtl === true) {
+ if (targetSlide[0]) {
+ targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
+ } else {
+ targetLeft = 0;
+ }
+ } else {
+ targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
+ }
+
+ if (_.options.centerMode === true) {
+ if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
+ } else {
+ targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
+ }
+
+ if (_.options.rtl === true) {
+ if (targetSlide[0]) {
+ targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
+ } else {
+ targetLeft = 0;
+ }
+ } else {
+ targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
+ }
+
+ targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
+ }
+ }
+
+ return targetLeft;
+
+ };
+
+ Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
+
+ var _ = this;
+
+ return _.options[option];
+
+ };
+
+ Slick.prototype.getNavigableIndexes = function() {
+
+ var _ = this,
+ breakPoint = 0,
+ counter = 0,
+ indexes = [],
+ max;
+
+ if (_.options.infinite === false) {
+ max = _.slideCount;
+ } else {
+ breakPoint = _.options.slidesToScroll * -1;
+ counter = _.options.slidesToScroll * -1;
+ max = _.slideCount * 2;
+ }
+
+ while (breakPoint < max) {
+ indexes.push(breakPoint);
+ breakPoint = counter + _.options.slidesToScroll;
+ counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
+ }
+
+ return indexes;
+
+ };
+
+ Slick.prototype.getSlick = function() {
+
+ return this;
+
+ };
+
+ Slick.prototype.getSlideCount = function() {
+
+ var _ = this,
+ slidesTraversed, swipedSlide, centerOffset;
+
+ centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
+
+ if (_.options.swipeToSlide === true) {
+ _.$slideTrack.find('.slick-slide').each(function(index, slide) {
+ if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
+ swipedSlide = slide;
+ return false;
+ }
+ });
+
+ slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
+
+ return slidesTraversed;
+
+ } else {
+ return _.options.slidesToScroll;
+ }
+
+ };
+
+ Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
+
+ var _ = this;
+
+ _.changeSlide({
+ data: {
+ message: 'index',
+ index: parseInt(slide)
+ }
+ }, dontAnimate);
+
+ };
+
+ Slick.prototype.init = function(creation) {
+
+ var _ = this;
+
+ if (!$(_.$slider).hasClass('slick-initialized')) {
+
+ $(_.$slider).addClass('slick-initialized');
+
+ _.buildRows();
+ _.buildOut();
+ _.setProps();
+ _.startLoad();
+ _.loadSlider();
+ _.initializeEvents();
+ _.updateArrows();
+ _.updateDots();
+ _.checkResponsive(true);
+ _.focusHandler();
+
+ }
+
+ if (creation) {
+ _.$slider.trigger('init', [_]);
+ }
+
+ if (_.options.accessibility === true) {
+ _.initADA();
+ }
+
+ if ( _.options.autoplay ) {
+
+ _.paused = false;
+ _.autoPlay();
+
+ }
+
+ };
+
+ Slick.prototype.initADA = function() {
+ var _ = this,
+ numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
+ tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
+ return (val >= 0) && (val < _.slideCount);
+ });
+
+ _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
+ 'aria-hidden': 'true',
+ 'tabindex': '-1'
+ }).find('a, input, button, select').attr({
+ 'tabindex': '-1'
+ });
+
+ if (_.$dots !== null) {
+ _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
+ var slideControlIndex = tabControlIndexes.indexOf(i);
+
+ $(this).attr({
+ 'role': 'tabpanel',
+ 'id': 'slick-slide' + _.instanceUid + i,
+ 'tabindex': -1
+ });
+
+ if (slideControlIndex !== -1) {
+ var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex
+ if ($('#' + ariaButtonControl).length) {
+ $(this).attr({
+ 'aria-describedby': ariaButtonControl
+ });
+ }
+ }
+ });
+
+ _.$dots.attr('role', 'tablist').find('li').each(function(i) {
+ var mappedSlideIndex = tabControlIndexes[i];
+
+ $(this).attr({
+ 'role': 'presentation'
+ });
+
+ $(this).find('a').first().attr({
+ 'role': 'tab',
+ 'id': 'slick-slide-control' + _.instanceUid + i,
+ 'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
+ 'aria-label': (i + 1) + ' of ' + numDotGroups,
+ 'aria-selected': null,
+ 'tabindex': '0'
+ });
+
+ }).eq(_.currentSlide).find('a').attr({
+ 'aria-selected': 'true',
+ 'tabindex': '0'
+ }).end();
+ }
+
+ for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
+ if (_.options.focusOnChange) {
+ _.$slides.eq(i).attr({'tabindex': '0'});
+ } else {
+ _.$slides.eq(i).removeAttr('tabindex');
+ }
+ }
+
+ _.activateADA();
+
+ };
+
+ Slick.prototype.initArrowEvents = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+ _.$prevArrow
+ .off('click.slick')
+ .on('click.slick', {
+ message: 'previous'
+ }, _.changeSlide);
+ _.$nextArrow
+ .off('click.slick')
+ .on('click.slick', {
+ message: 'next'
+ }, _.changeSlide);
+
+ if (_.options.accessibility === true) {
+ _.$prevArrow.on('keydown.slick', _.keyHandler);
+ _.$nextArrow.on('keydown.slick', _.keyHandler);
+ }
+ }
+
+ };
+
+ Slick.prototype.initDotEvents = function() {
+
+ var _ = this;
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+ $('li', _.$dots).on('click.slick', {
+ message: 'index'
+ }, _.changeSlide);
+
+ if (_.options.accessibility === true) {
+ _.$dots.on('keydown.slick', _.keyHandler);
+ }
+ }
+
+ if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {
+
+ $('li', _.$dots)
+ .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
+ .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+ }
+
+ };
+
+ Slick.prototype.initSlideEvents = function() {
+
+ var _ = this;
+
+ if ( _.options.pauseOnHover ) {
+
+ _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
+ _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
+
+ }
+
+ };
+
+ Slick.prototype.initializeEvents = function() {
+
+ var _ = this;
+
+ _.initArrowEvents();
+
+ _.initDotEvents();
+ _.initSlideEvents();
+
+ _.$list.on('touchstart.slick mousedown.slick', {
+ action: 'start'
+ }, _.swipeHandler);
+ _.$list.on('touchmove.slick mousemove.slick', {
+ action: 'move'
+ }, _.swipeHandler);
+ _.$list.on('touchend.slick mouseup.slick', {
+ action: 'end'
+ }, _.swipeHandler);
+ _.$list.on('touchcancel.slick mouseleave.slick', {
+ action: 'end'
+ }, _.swipeHandler);
+
+ _.$list.on('click.slick', _.clickHandler);
+
+ $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
+
+ if (_.options.accessibility === true) {
+ _.$list.on('keydown.slick', _.keyHandler);
+ }
+
+ if (_.options.focusOnSelect === true) {
+ $(_.$slideTrack).children().on('click.slick', _.selectHandler);
+ }
+
+ $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
+
+ $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
+
+ $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
+
+ $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
+ $(_.setPosition);
+
+ };
+
+ Slick.prototype.initUI = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$prevArrow.show();
+ _.$nextArrow.show();
+
+ }
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$dots.show();
+
+ }
+
+ };
+
+ Slick.prototype.keyHandler = function(event) {
+
+ var _ = this;
+ //Dont slide if the cursor is inside the form fields and arrow keys are pressed
+ if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
+ if (event.keyCode === 37 && _.options.accessibility === true) {
+ _.changeSlide({
+ data: {
+ message: _.options.rtl === true ? 'next' : 'previous'
+ }
+ });
+ } else if (event.keyCode === 39 && _.options.accessibility === true) {
+ _.changeSlide({
+ data: {
+ message: _.options.rtl === true ? 'previous' : 'next'
+ }
+ });
+ }
+ }
+
+ };
+
+ Slick.prototype.lazyLoad = function() {
+
+ var _ = this,
+ loadRange, cloneRange, rangeStart, rangeEnd;
+
+ function loadImages(imagesScope) {
+
+ $('img[data-lazy]', imagesScope).each(function() {
+
+ var image = $(this),
+ imageSource = $(this).attr('data-lazy'),
+ imageSrcSet = $(this).attr('data-srcset'),
+ imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
+ imageToLoad = document.createElement('img');
+
+ imageToLoad.onload = function() {
+
+ image
+ .animate({ opacity: 0 }, 100, function() {
+
+ if (imageSrcSet) {
+ image
+ .attr('srcset', imageSrcSet );
+
+ if (imageSizes) {
+ image
+ .attr('sizes', imageSizes );
+ }
+ }
+
+ image
+ .attr('src', imageSource)
+ .animate({ opacity: 1 }, 200, function() {
+ image
+ .removeAttr('data-lazy data-srcset data-sizes')
+ .removeClass('slick-loading');
+ });
+ _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
+ });
+
+ };
+
+ imageToLoad.onerror = function() {
+
+ image
+ .removeAttr( 'data-lazy' )
+ .removeClass( 'slick-loading' )
+ .addClass( 'slick-lazyload-error' );
+
+ _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
+
+ };
+
+ imageToLoad.src = imageSource;
+
+ });
+
+ }
+
+ if (_.options.centerMode === true) {
+ if (_.options.infinite === true) {
+ rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
+ rangeEnd = rangeStart + _.options.slidesToShow + 2;
+ } else {
+ rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
+ rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
+ }
+ } else {
+ rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
+ rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
+ if (_.options.fade === true) {
+ if (rangeStart > 0) rangeStart--;
+ if (rangeEnd <= _.slideCount) rangeEnd++;
+ }
+ }
+
+ loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
+
+ if (_.options.lazyLoad === 'anticipated') {
+ var prevSlide = rangeStart - 1,
+ nextSlide = rangeEnd,
+ $slides = _.$slider.find('.slick-slide');
+
+ for (var i = 0; i < _.options.slidesToScroll; i++) {
+ if (prevSlide < 0) prevSlide = _.slideCount - 1;
+ loadRange = loadRange.add($slides.eq(prevSlide));
+ loadRange = loadRange.add($slides.eq(nextSlide));
+ prevSlide--;
+ nextSlide++;
+ }
+ }
+
+ loadImages(loadRange);
+
+ if (_.slideCount <= _.options.slidesToShow) {
+ cloneRange = _.$slider.find('.slick-slide');
+ loadImages(cloneRange);
+ } else
+ if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
+ cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
+ loadImages(cloneRange);
+ } else if (_.currentSlide === 0) {
+ cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
+ loadImages(cloneRange);
+ }
+
+ };
+
+ Slick.prototype.loadSlider = function() {
+
+ var _ = this;
+
+ _.setPosition();
+
+ _.$slideTrack.css({
+ opacity: 1
+ });
+
+ _.$slider.removeClass('slick-loading');
+
+ _.initUI();
+
+ if (_.options.lazyLoad === 'progressive') {
+ _.progressiveLazyLoad();
+ }
+
+ };
+
+ Slick.prototype.next = Slick.prototype.slickNext = function() {
+
+ var _ = this;
+
+ _.changeSlide({
+ data: {
+ message: 'next'
+ }
+ });
+
+ };
+
+ Slick.prototype.orientationChange = function() {
+
+ var _ = this;
+
+ _.checkResponsive();
+ _.setPosition();
+
+ };
+
+ Slick.prototype.pause = Slick.prototype.slickPause = function() {
+
+ var _ = this;
+
+ _.autoPlayClear();
+ _.paused = true;
+
+ };
+
+ Slick.prototype.play = Slick.prototype.slickPlay = function() {
+
+ var _ = this;
+
+ _.autoPlay();
+ _.options.autoplay = true;
+ _.paused = false;
+ _.focussed = false;
+ _.interrupted = false;
+
+ };
+
+ Slick.prototype.postSlide = function(index) {
+
+ var _ = this;
+
+ if( !_.unslicked ) {
+
+ _.$slider.trigger('afterChange', [_, index]);
+
+ _.animating = false;
+
+ if (_.slideCount > _.options.slidesToShow) {
+ _.setPosition();
+ }
+
+ _.swipeLeft = null;
+
+ if ( _.options.autoplay ) {
+ _.autoPlay();
+ }
+
+ if (_.options.accessibility === true) {
+ _.initADA();
+
+ if (_.options.focusOnChange) {
+ var $currentSlide = $(_.$slides.get(_.currentSlide));
+ $currentSlide.attr('tabindex', 0).focus();
+ }
+ }
+
+ }
+
+ };
+
+ Slick.prototype.prev = Slick.prototype.slickPrev = function() {
+
+ var _ = this;
+
+ _.changeSlide({
+ data: {
+ message: 'previous'
+ }
+ });
+
+ };
+
+ Slick.prototype.preventDefault = function(event) {
+
+ event.preventDefault();
+
+ };
+
+ Slick.prototype.progressiveLazyLoad = function( tryCount ) {
+
+ tryCount = tryCount || 1;
+
+ var _ = this,
+ $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
+ image,
+ imageSource,
+ imageSrcSet,
+ imageSizes,
+ imageToLoad;
+
+ if ( $imgsToLoad.length ) {
+
+ image = $imgsToLoad.first();
+ imageSource = image.attr('data-lazy');
+ imageSrcSet = image.attr('data-srcset');
+ imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');
+ imageToLoad = document.createElement('img');
+
+ imageToLoad.onload = function() {
+
+ if (imageSrcSet) {
+ image
+ .attr('srcset', imageSrcSet );
+
+ if (imageSizes) {
+ image
+ .attr('sizes', imageSizes );
+ }
+ }
+
+ image
+ .attr( 'src', imageSource )
+ .removeAttr('data-lazy data-srcset data-sizes')
+ .removeClass('slick-loading');
+
+ if ( _.options.adaptiveHeight === true ) {
+ _.setPosition();
+ }
+
+ _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
+ _.progressiveLazyLoad();
+
+ };
+
+ imageToLoad.onerror = function() {
+
+ if ( tryCount < 3 ) {
+
+ /**
+ * try to load the image 3 times,
+ * leave a slight delay so we don't get
+ * servers blocking the request.
+ */
+ setTimeout( function() {
+ _.progressiveLazyLoad( tryCount + 1 );
+ }, 500 );
+
+ } else {
+
+ image
+ .removeAttr( 'data-lazy' )
+ .removeClass( 'slick-loading' )
+ .addClass( 'slick-lazyload-error' );
+
+ _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
+
+ _.progressiveLazyLoad();
+
+ }
+
+ };
+
+ imageToLoad.src = imageSource;
+
+ } else {
+
+ _.$slider.trigger('allImagesLoaded', [ _ ]);
+
+ }
+
+ };
+
+ Slick.prototype.refresh = function( initializing ) {
+
+ var _ = this, currentSlide, lastVisibleIndex;
+
+ lastVisibleIndex = _.slideCount - _.options.slidesToShow;
+
+ // in non-infinite sliders, we don't want to go past the
+ // last visible index.
+ if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
+ _.currentSlide = lastVisibleIndex;
+ }
+
+ // if less slides than to show, go to start.
+ if ( _.slideCount <= _.options.slidesToShow ) {
+ _.currentSlide = 0;
+
+ }
+
+ currentSlide = _.currentSlide;
+
+ _.destroy(true);
+
+ $.extend(_, _.initials, { currentSlide: currentSlide });
+
+ _.init();
+
+ if( !initializing ) {
+
+ _.changeSlide({
+ data: {
+ message: 'index',
+ index: currentSlide
+ }
+ }, false);
+
+ }
+
+ };
+
+ Slick.prototype.registerBreakpoints = function() {
+
+ var _ = this, breakpoint, currentBreakpoint, l,
+ responsiveSettings = _.options.responsive || null;
+
+ if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
+
+ _.respondTo = _.options.respondTo || 'window';
+
+ for ( breakpoint in responsiveSettings ) {
+
+ l = _.breakpoints.length-1;
+
+ if (responsiveSettings.hasOwnProperty(breakpoint)) {
+ currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
+
+ // loop through the breakpoints and cut out any existing
+ // ones with the same breakpoint number, we don't want dupes.
+ while( l >= 0 ) {
+ if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
+ _.breakpoints.splice(l,1);
+ }
+ l--;
+ }
+
+ _.breakpoints.push(currentBreakpoint);
+ _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
+
+ }
+
+ }
+
+ _.breakpoints.sort(function(a, b) {
+ return ( _.options.mobileFirst ) ? a-b : b-a;
+ });
+
+ }
+
+ };
+
+ Slick.prototype.reinit = function() {
+
+ var _ = this;
+
+ _.$slides =
+ _.$slideTrack
+ .children(_.options.slide)
+ .addClass('slick-slide');
+
+ _.slideCount = _.$slides.length;
+
+ if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
+ _.currentSlide = _.currentSlide - _.options.slidesToScroll;
+ }
+
+ if (_.slideCount <= _.options.slidesToShow) {
+ _.currentSlide = 0;
+ }
+
+ _.registerBreakpoints();
+
+ _.setProps();
+ _.setupInfinite();
+ _.buildArrows();
+ _.updateArrows();
+ _.initArrowEvents();
+ _.buildDots();
+ _.updateDots();
+ _.initDotEvents();
+ _.cleanUpSlideEvents();
+ _.initSlideEvents();
+
+ _.checkResponsive(false, true);
+
+ if (_.options.focusOnSelect === true) {
+ $(_.$slideTrack).children().on('click.slick', _.selectHandler);
+ }
+
+ _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
+
+ _.setPosition();
+ _.focusHandler();
+
+ _.paused = !_.options.autoplay;
+ _.autoPlay();
+
+ _.$slider.trigger('reInit', [_]);
+
+ };
+
+ Slick.prototype.resize = function() {
+
+ var _ = this;
+
+ if ($(window).width() !== _.windowWidth) {
+ clearTimeout(_.windowDelay);
+ _.windowDelay = window.setTimeout(function() {
+ _.windowWidth = $(window).width();
+ _.checkResponsive();
+ if( !_.unslicked ) { _.setPosition(); }
+ }, 50);
+ }
+ };
+
+ Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
+
+ var _ = this;
+
+ if (typeof(index) === 'boolean') {
+ removeBefore = index;
+ index = removeBefore === true ? 0 : _.slideCount - 1;
+ } else {
+ index = removeBefore === true ? --index : index;
+ }
+
+ if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
+ return false;
+ }
+
+ _.unload();
+
+ if (removeAll === true) {
+ _.$slideTrack.children().remove();
+ } else {
+ _.$slideTrack.children(this.options.slide).eq(index).remove();
+ }
+
+ _.$slides = _.$slideTrack.children(this.options.slide);
+
+ _.$slideTrack.children(this.options.slide).detach();
+
+ _.$slideTrack.append(_.$slides);
+
+ _.$slidesCache = _.$slides;
+
+ _.reinit();
+
+ };
+
+ Slick.prototype.setCSS = function(position) {
+
+ var _ = this,
+ positionProps = {},
+ x, y;
+
+ if (_.options.rtl === true) {
+ position = -position;
+ }
+ x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
+ y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
+
+ positionProps[_.positionProp] = position;
+
+ if (_.transformsEnabled === false) {
+ _.$slideTrack.css(positionProps);
+ } else {
+ positionProps = {};
+ if (_.cssTransitions === false) {
+ positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
+ _.$slideTrack.css(positionProps);
+ } else {
+ positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
+ _.$slideTrack.css(positionProps);
+ }
+ }
+
+ };
+
+ Slick.prototype.setDimensions = function() {
+
+ var _ = this;
+
+ if (_.options.vertical === false) {
+ if (_.options.centerMode === true) {
+ _.$list.css({
+ padding: ('0px ' + _.options.centerPadding)
+ });
+ }
+ } else {
+ _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
+ if (_.options.centerMode === true) {
+ _.$list.css({
+ padding: (_.options.centerPadding + ' 0px')
+ });
+ }
+ }
+
+ _.listWidth = _.$list.width();
+ _.listHeight = _.$list.height();
+
+
+ if (_.options.vertical === false && _.options.variableWidth === false) {
+ _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
+ _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
+
+ } else if (_.options.variableWidth === true) {
+ _.$slideTrack.width(5000 * _.slideCount);
+ } else {
+ _.slideWidth = Math.ceil(_.listWidth);
+ _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
+ }
+
+ var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
+ if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
+
+ };
+
+ Slick.prototype.setFade = function() {
+
+ var _ = this,
+ targetLeft;
+
+ _.$slides.each(function(index, element) {
+ targetLeft = (_.slideWidth * index) * -1;
+ if (_.options.rtl === true) {
+ $(element).css({
+ position: 'relative',
+ right: targetLeft,
+ top: 0,
+ zIndex: _.options.zIndex - 2,
+ opacity: 0
+ });
+ } else {
+ $(element).css({
+ position: 'relative',
+ left: targetLeft,
+ top: 0,
+ zIndex: _.options.zIndex - 2,
+ opacity: 0
+ });
+ }
+ });
+
+ _.$slides.eq(_.currentSlide).css({
+ zIndex: _.options.zIndex - 1,
+ opacity: 1
+ });
+
+ };
+
+ Slick.prototype.setHeight = function() {
+
+ var _ = this;
+
+ if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
+ var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
+ _.$list.css('height', targetHeight);
+ }
+
+ };
+
+ Slick.prototype.setOption =
+ Slick.prototype.slickSetOption = function() {
+
+ /**
+ * accepts arguments in format of:
+ *
+ * - for changing a single option's value:
+ * .slick("setOption", option, value, refresh )
+ *
+ * - for changing a set of responsive options:
+ * .slick("setOption", 'responsive', [{}, ...], refresh )
+ *
+ * - for updating multiple values at once (not responsive)
+ * .slick("setOption", { 'option': value, ... }, refresh )
+ */
+
+ var _ = this, l, item, option, value, refresh = false, type;
+
+ if( $.type( arguments[0] ) === 'object' ) {
+
+ option = arguments[0];
+ refresh = arguments[1];
+ type = 'multiple';
+
+ } else if ( $.type( arguments[0] ) === 'string' ) {
+
+ option = arguments[0];
+ value = arguments[1];
+ refresh = arguments[2];
+
+ if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
+
+ type = 'responsive';
+
+ } else if ( typeof arguments[1] !== 'undefined' ) {
+
+ type = 'single';
+
+ }
+
+ }
+
+ if ( type === 'single' ) {
+
+ _.options[option] = value;
+
+
+ } else if ( type === 'multiple' ) {
+
+ $.each( option , function( opt, val ) {
+
+ _.options[opt] = val;
+
+ });
+
+
+ } else if ( type === 'responsive' ) {
+
+ for ( item in value ) {
+
+ if( $.type( _.options.responsive ) !== 'array' ) {
+
+ _.options.responsive = [ value[item] ];
+
+ } else {
+
+ l = _.options.responsive.length-1;
+
+ // loop through the responsive object and splice out duplicates.
+ while( l >= 0 ) {
+
+ if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
+
+ _.options.responsive.splice(l,1);
+
+ }
+
+ l--;
+
+ }
+
+ _.options.responsive.push( value[item] );
+
+ }
+
+ }
+
+ }
+
+ if ( refresh ) {
+
+ _.unload();
+ _.reinit();
+
+ }
+
+ };
+
+ Slick.prototype.setPosition = function() {
+
+ var _ = this;
+
+ _.setDimensions();
+
+ _.setHeight();
+
+ if (_.options.fade === false) {
+ _.setCSS(_.getLeft(_.currentSlide));
+ } else {
+ _.setFade();
+ }
+
+ _.$slider.trigger('setPosition', [_]);
+
+ };
+
+ Slick.prototype.setProps = function() {
+
+ var _ = this,
+ bodyStyle = document.body.style;
+
+ _.positionProp = _.options.vertical === true ? 'top' : 'left';
+
+ if (_.positionProp === 'top') {
+ _.$slider.addClass('slick-vertical');
+ } else {
+ _.$slider.removeClass('slick-vertical');
+ }
+
+ if (bodyStyle.WebkitTransition !== undefined ||
+ bodyStyle.MozTransition !== undefined ||
+ bodyStyle.msTransition !== undefined) {
+ if (_.options.useCSS === true) {
+ _.cssTransitions = true;
+ }
+ }
+
+ if ( _.options.fade ) {
+ if ( typeof _.options.zIndex === 'number' ) {
+ if( _.options.zIndex < 3 ) {
+ _.options.zIndex = 3;
+ }
+ } else {
+ _.options.zIndex = _.defaults.zIndex;
+ }
+ }
+
+ if (bodyStyle.OTransform !== undefined) {
+ _.animType = 'OTransform';
+ _.transformType = '-o-transform';
+ _.transitionType = 'OTransition';
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
+ }
+ if (bodyStyle.MozTransform !== undefined) {
+ _.animType = 'MozTransform';
+ _.transformType = '-moz-transform';
+ _.transitionType = 'MozTransition';
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
+ }
+ if (bodyStyle.webkitTransform !== undefined) {
+ _.animType = 'webkitTransform';
+ _.transformType = '-webkit-transform';
+ _.transitionType = 'webkitTransition';
+ if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
+ }
+ if (bodyStyle.msTransform !== undefined) {
+ _.animType = 'msTransform';
+ _.transformType = '-ms-transform';
+ _.transitionType = 'msTransition';
+ if (bodyStyle.msTransform === undefined) _.animType = false;
+ }
+ if (bodyStyle.transform !== undefined && _.animType !== false) {
+ _.animType = 'transform';
+ _.transformType = 'transform';
+ _.transitionType = 'transition';
+ }
+ _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
+ };
+
+
+ Slick.prototype.setSlideClasses = function(index) {
+
+ var _ = this,
+ centerOffset, allSlides, indexOffset, remainder;
+
+ allSlides = _.$slider
+ .find('.slick-slide')
+ .removeClass('slick-active slick-center slick-current')
+ .attr('aria-hidden', 'true');
+
+ _.$slides
+ .eq(index)
+ .addClass('slick-current');
+
+ if (_.options.centerMode === true) {
+
+ var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
+
+ centerOffset = Math.floor(_.options.slidesToShow / 2);
+
+ if (_.options.infinite === true) {
+
+ if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
+ _.$slides
+ .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
+ .addClass('slick-active')
+ .attr('aria-hidden', 'false');
+
+ } else {
+
+ indexOffset = _.options.slidesToShow + index;
+ allSlides
+ .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
+ .addClass('slick-active')
+ .attr('aria-hidden', 'false');
+
+ }
+
+ if (index === 0) {
+
+ allSlides
+ .eq(allSlides.length - 1 - _.options.slidesToShow)
+ .addClass('slick-center');
+
+ } else if (index === _.slideCount - 1) {
+
+ allSlides
+ .eq(_.options.slidesToShow)
+ .addClass('slick-center');
+
+ }
+
+ }
+
+ _.$slides
+ .eq(index)
+ .addClass('slick-center');
+
+ } else {
+
+ if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
+
+ _.$slides
+ .slice(index, index + _.options.slidesToShow)
+ .addClass('slick-active')
+ .attr('aria-hidden', 'false');
+
+ } else if (allSlides.length <= _.options.slidesToShow) {
+
+ allSlides
+ .addClass('slick-active')
+ .attr('aria-hidden', 'false');
+
+ } else {
+
+ remainder = _.slideCount % _.options.slidesToShow;
+ indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
+
+ if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
+
+ allSlides
+ .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
+ .addClass('slick-active')
+ .attr('aria-hidden', 'false');
+
+ } else {
+
+ allSlides
+ .slice(indexOffset, indexOffset + _.options.slidesToShow)
+ .addClass('slick-active')
+ .attr('aria-hidden', 'false');
+
+ }
+
+ }
+
+ }
+
+ if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
+ _.lazyLoad();
+ }
+ };
+
+ Slick.prototype.setupInfinite = function() {
+
+ var _ = this,
+ i, slideIndex, infiniteCount;
+
+ if (_.options.fade === true) {
+ _.options.centerMode = false;
+ }
+
+ if (_.options.infinite === true && _.options.fade === false) {
+
+ slideIndex = null;
+
+ if (_.slideCount > _.options.slidesToShow) {
+
+ if (_.options.centerMode === true) {
+ infiniteCount = _.options.slidesToShow + 1;
+ } else {
+ infiniteCount = _.options.slidesToShow;
+ }
+
+ for (i = _.slideCount; i > (_.slideCount -
+ infiniteCount); i -= 1) {
+ slideIndex = i - 1;
+ $(_.$slides[slideIndex]).clone(true).attr('id', '')
+ .attr('data-slick-index', slideIndex - _.slideCount)
+ .prependTo(_.$slideTrack).addClass('slick-cloned');
+ }
+ for (i = 0; i < infiniteCount + _.slideCount; i += 1) {
+ slideIndex = i;
+ $(_.$slides[slideIndex]).clone(true).attr('id', '')
+ .attr('data-slick-index', slideIndex + _.slideCount)
+ .appendTo(_.$slideTrack).addClass('slick-cloned');
+ }
+ _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
+ $(this).attr('id', '');
+ });
+
+ }
+
+ }
+
+ };
+
+ Slick.prototype.interrupt = function( toggle ) {
+
+ var _ = this;
+
+ if( !toggle ) {
+ _.autoPlay();
+ }
+ _.interrupted = toggle;
+
+ };
+
+ Slick.prototype.selectHandler = function(event) {
+
+ var _ = this;
+
+ var targetElement =
+ $(event.target).is('.slick-slide') ?
+ $(event.target) :
+ $(event.target).parents('.slick-slide');
+
+ var index = parseInt(targetElement.attr('data-slick-index'));
+
+ if (!index) index = 0;
+
+ if (_.slideCount <= _.options.slidesToShow) {
+
+ _.slideHandler(index, false, true);
+ return;
+
+ }
+
+ _.slideHandler(index);
+
+ };
+
+ Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
+
+ var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
+ _ = this, navTarget;
+
+ sync = sync || false;
+
+ if (_.animating === true && _.options.waitForAnimate === true) {
+ return;
+ }
+
+ if (_.options.fade === true && _.currentSlide === index) {
+ return;
+ }
+
+ if (sync === false) {
+ _.asNavFor(index);
+ }
+
+ targetSlide = index;
+ targetLeft = _.getLeft(targetSlide);
+ slideLeft = _.getLeft(_.currentSlide);
+
+ _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
+
+ if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
+ if (_.options.fade === false) {
+ targetSlide = _.currentSlide;
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
+ _.animateSlide(slideLeft, function() {
+ _.postSlide(targetSlide);
+ });
+ } else {
+ _.postSlide(targetSlide);
+ }
+ }
+ return;
+ } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
+ if (_.options.fade === false) {
+ targetSlide = _.currentSlide;
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
+ _.animateSlide(slideLeft, function() {
+ _.postSlide(targetSlide);
+ });
+ } else {
+ _.postSlide(targetSlide);
+ }
+ }
+ return;
+ }
+
+ if ( _.options.autoplay ) {
+ clearInterval(_.autoPlayTimer);
+ }
+
+ if (targetSlide < 0) {
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
+ animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
+ } else {
+ animSlide = _.slideCount + targetSlide;
+ }
+ } else if (targetSlide >= _.slideCount) {
+ if (_.slideCount % _.options.slidesToScroll !== 0) {
+ animSlide = 0;
+ } else {
+ animSlide = targetSlide - _.slideCount;
+ }
+ } else {
+ animSlide = targetSlide;
+ }
+
+ _.animating = true;
+
+ _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
+
+ oldSlide = _.currentSlide;
+ _.currentSlide = animSlide;
+
+ _.setSlideClasses(_.currentSlide);
+
+ if ( _.options.asNavFor ) {
+
+ navTarget = _.getNavTarget();
+ navTarget = navTarget.slick('getSlick');
+
+ if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
+ navTarget.setSlideClasses(_.currentSlide);
+ }
+
+ }
+
+ _.updateDots();
+ _.updateArrows();
+
+ if (_.options.fade === true) {
+ if (dontAnimate !== true) {
+
+ _.fadeSlideOut(oldSlide);
+
+ _.fadeSlide(animSlide, function() {
+ _.postSlide(animSlide);
+ });
+
+ } else {
+ _.postSlide(animSlide);
+ }
+ _.animateHeight();
+ return;
+ }
+
+ if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
+ _.animateSlide(targetLeft, function() {
+ _.postSlide(animSlide);
+ });
+ } else {
+ _.postSlide(animSlide);
+ }
+
+ };
+
+ Slick.prototype.startLoad = function() {
+
+ var _ = this;
+
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$prevArrow.hide();
+ _.$nextArrow.hide();
+
+ }
+
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
+
+ _.$dots.hide();
+
+ }
+
+ _.$slider.addClass('slick-loading');
+
+ };
+
+ Slick.prototype.swipeDirection = function() {
+
+ var xDist, yDist, r, swipeAngle, _ = this;
+
+ xDist = _.touchObject.startX - _.touchObject.curX;
+ yDist = _.touchObject.startY - _.touchObject.curY;
+ r = Math.atan2(yDist, xDist);
+
+ swipeAngle = Math.round(r * 180 / Math.PI);
+ if (swipeAngle < 0) {
+ swipeAngle = 360 - Math.abs(swipeAngle);
+ }
+
+ if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
+ return (_.options.rtl === false ? 'left' : 'right');
+ }
+ if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
+ return (_.options.rtl === false ? 'left' : 'right');
+ }
+ if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
+ return (_.options.rtl === false ? 'right' : 'left');
+ }
+ if (_.options.verticalSwiping === true) {
+ if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
+ return 'down';
+ } else {
+ return 'up';
+ }
+ }
+
+ return 'vertical';
+
+ };
+
+ Slick.prototype.swipeEnd = function(event) {
+
+ var _ = this,
+ slideCount,
+ direction;
+
+ _.dragging = false;
+ _.swiping = false;
+
+ if (_.scrolling) {
+ _.scrolling = false;
+ return false;
+ }
+
+ _.interrupted = false;
+ _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
+
+ if ( _.touchObject.curX === undefined ) {
+ return false;
+ }
+
+ if ( _.touchObject.edgeHit === true ) {
+ _.$slider.trigger('edge', [_, _.swipeDirection() ]);
+ }
+
+ if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
+
+ direction = _.swipeDirection();
+
+ switch ( direction ) {
+
+ case 'left':
+ case 'down':
+
+ slideCount =
+ _.options.swipeToSlide ?
+ _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
+ _.currentSlide + _.getSlideCount();
+
+ _.currentDirection = 0;
+
+ break;
+
+ case 'right':
+ case 'up':
+
+ slideCount =
+ _.options.swipeToSlide ?
+ _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
+ _.currentSlide - _.getSlideCount();
+
+ _.currentDirection = 1;
+
+ break;
+
+ default:
+
+
+ }
+
+ if( direction != 'vertical' ) {
+
+ _.slideHandler( slideCount );
+ _.touchObject = {};
+ _.$slider.trigger('swipe', [_, direction ]);
+
+ }
+
+ } else {
+
+ if ( _.touchObject.startX !== _.touchObject.curX ) {
+
+ _.slideHandler( _.currentSlide );
+ _.touchObject = {};
+
+ }
+
+ }
+
+ };
+
+ Slick.prototype.swipeHandler = function(event) {
+
+ var _ = this;
+
+ if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
+ return;
+ } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
+ return;
+ }
+
+ _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
+ event.originalEvent.touches.length : 1;
+
+ _.touchObject.minSwipe = _.listWidth / _.options
+ .touchThreshold;
+
+ if (_.options.verticalSwiping === true) {
+ _.touchObject.minSwipe = _.listHeight / _.options
+ .touchThreshold;
+ }
+
+ switch (event.data.action) {
+
+ case 'start':
+ _.swipeStart(event);
+ break;
+
+ case 'move':
+ _.swipeMove(event);
+ break;
+
+ case 'end':
+ _.swipeEnd(event);
+ break;
+
+ }
+
+ };
+
+ Slick.prototype.swipeMove = function(event) {
+
+ var _ = this,
+ edgeWasHit = false,
+ curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
+
+ touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
+
+ if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
+ return false;
+ }
+
+ curLeft = _.getLeft(_.currentSlide);
+
+ _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
+ _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
+
+ _.touchObject.swipeLength = Math.round(Math.sqrt(
+ Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
+
+ verticalSwipeLength = Math.round(Math.sqrt(
+ Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
+
+ if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
+ _.scrolling = true;
+ return false;
+ }
+
+ if (_.options.verticalSwiping === true) {
+ _.touchObject.swipeLength = verticalSwipeLength;
+ }
+
+ swipeDirection = _.swipeDirection();
+
+ if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
+ _.swiping = true;
+ event.preventDefault();
+ }
+
+ positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
+ if (_.options.verticalSwiping === true) {
+ positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
+ }
+
+
+ swipeLength = _.touchObject.swipeLength;
+
+ _.touchObject.edgeHit = false;
+
+ if (_.options.infinite === false) {
+ if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
+ swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
+ _.touchObject.edgeHit = true;
+ }
+ }
+
+ if (_.options.vertical === false) {
+ _.swipeLeft = curLeft + swipeLength * positionOffset;
+ } else {
+ _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
+ }
+ if (_.options.verticalSwiping === true) {
+ _.swipeLeft = curLeft + swipeLength * positionOffset;
+ }
+
+ if (_.options.fade === true || _.options.touchMove === false) {
+ return false;
+ }
+
+ if (_.animating === true) {
+ _.swipeLeft = null;
+ return false;
+ }
+
+ _.setCSS(_.swipeLeft);
+
+ };
+
+ Slick.prototype.swipeStart = function(event) {
+
+ var _ = this,
+ touches;
+
+ _.interrupted = true;
+
+ if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
+ _.touchObject = {};
+ return false;
+ }
+
+ if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
+ touches = event.originalEvent.touches[0];
+ }
+
+ _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
+ _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
+
+ _.dragging = true;
+
+ };
+
+ Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
+
+ var _ = this;
+
+ if (_.$slidesCache !== null) {
+
+ _.unload();
+
+ _.$slideTrack.children(this.options.slide).detach();
+
+ _.$slidesCache.appendTo(_.$slideTrack);
+
+ _.reinit();
+
+ }
+
+ };
+
+ Slick.prototype.unload = function() {
+
+ var _ = this;
+
+ $('.slick-cloned', _.$slider).remove();
+
+ if (_.$dots) {
+ _.$dots.remove();
+ }
+
+ if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
+ _.$prevArrow.remove();
+ }
+
+ if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
+ _.$nextArrow.remove();
+ }
+
+ _.$slides
+ .removeClass('slick-slide slick-active slick-visible slick-current')
+ .attr('aria-hidden', 'true')
+ .css('width', '');
+
+ };
+
+ Slick.prototype.unslick = function(fromBreakpoint) {
+
+ var _ = this;
+ _.$slider.trigger('unslick', [_, fromBreakpoint]);
+ _.destroy();
+
+ };
+
+ Slick.prototype.updateArrows = function() {
+
+ var _ = this,
+ centerOffset;
+
+ centerOffset = Math.floor(_.options.slidesToShow / 2);
+
+ if ( _.options.arrows === true &&
+ _.slideCount > _.options.slidesToShow &&
+ !_.options.infinite ) {
+
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+ _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+ if (_.currentSlide === 0) {
+
+ _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+ _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+ } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
+
+ _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+ } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
+
+ _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
+ _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
+
+ }
+
+ }
+
+ };
+
+ Slick.prototype.updateDots = function() {
+
+ var _ = this;
+
+ if (_.$dots !== null) {
+
+ _.$dots
+ .find('li')
+ .removeClass('slick-active')
+ .end();
+
+ _.$dots
+ .find('li')
+ .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
+ .addClass('slick-active');
+
+ }
+
+ };
+
+ Slick.prototype.visibility = function() {
+
+ var _ = this;
+
+ if ( _.options.autoplay ) {
+
+ if ( document[_.hidden] ) {
+
+ _.interrupted = true;
+
+ } else {
+
+ _.interrupted = false;
+
+ }
+
+ }
+
+ };
+
+ $.fn.slick = function() {
+ var _ = this,
+ opt = arguments[0],
+ args = Array.prototype.slice.call(arguments, 1),
+ l = _.length,
+ i,
+ ret;
+ for (i = 0; i < l; i++) {
+ if (typeof opt == 'object' || typeof opt == 'undefined')
+ _[i].slick = new Slick(_[i], opt);
+ else
+ ret = _[i].slick[opt].apply(_[i].slick, args);
+ if (typeof ret != 'undefined') return ret;
+ }
+ return _;
+ };
+
+}));
Property changes on: base3.10/src/main/webapp/js/com/slick.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/colResizable-1.6.js
===================================================================
--- base3.10/src/main/webapp/js/com/colResizable-1.6.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/colResizable-1.6.js (revision 7)
@@ -0,0 +1,415 @@
+/**
+ _ _____ _ _ _
+ | | __ \ (_) | | | |
+ ___ ___ | | |__) |___ ___ _ ______ _| |__ | | ___
+ / __/ _ \| | _ // _ \/ __| |_ / _` | '_ \| |/ _ \
+ | (_| (_) | | | \ \ __/\__ \ |/ / (_| | |_) | | __/
+ \___\___/|_|_| \_\___||___/_/___\__,_|_.__/|_|\___|
+
+ v1.6 - jQuery plugin created by Alvaro Prieto Lauroba
+
+ Licences: MIT & GPL
+ Feel free to use or modify this plugin as far as my full name is kept
+
+ If you are going to use this plug-in in production environments it is
+ strongly recommended to use its minified version: colResizable.min.js
+
+*/
+
+(function($){
+
+ var d = $(document); //window object
+ var h = $("head"); //head object
+ var drag = null; //reference to the current grip that is being dragged
+ var tables = {}; //object of the already processed tables (table.id as key)
+ var count = 0; //internal count to create unique IDs when needed.
+
+ //common strings for packing
+ var ID = "id";
+ var PX = "px";
+ var SIGNATURE ="JColResizer";
+ var FLEX = "JCLRFlex";
+
+ //short-cuts
+ var I = parseInt;
+ var M = Math;
+ var ie = navigator.userAgent.indexOf('Trident/4.0')>0;
+ var S;
+ try{S = sessionStorage;}catch(e){} //Firefox crashes when executed as local file system
+
+ //append required CSS rules
+ h.append("<style type='text/css'> .JColResizer{table-layout:fixed;} .JColResizer > tbody > tr > td, .JColResizer > tbody > tr > th{overflow:hidden;padding-left:0!important; padding-right:0!important;} .JCLRgrips{ height:0px; position:relative;} .JCLRgrip{margin-left:-5px; position:absolute; z-index:5; } .JCLRgrip .JColResizer{position:absolute;background-color:red;filter:alpha(opacity=1);opacity:0;width:10px;height:100%;cursor: e-resize;top:0px} .JCLRLastGrip{position:absolute; width:1px; } .JCLRgripDrag{ border-left:1px dotted black; } .JCLRFlex{width:auto!important;} .JCLRgrip.JCLRdisabledGrip .JColResizer{cursor:default; display:none;}</style>");
+
+
+ /**
+ * Function to allow column resizing for table objects. It is the starting point to apply the plugin.
+ * @param {DOM node} tb - reference to the DOM table object to be enhanced
+ * @param {Object} options - some customization values
+ */
+ var init = function( tb, options){
+ var t = $(tb); //the table object is wrapped
+ t.opt = options; //each table has its own options available at anytime
+ t.mode = options.resizeMode; //shortcuts
+ t.dc = t.opt.disabledColumns;
+ if(t.opt.disable) return destroy(t); //the user is asking to destroy a previously colResized table
+ var id = t.id = t.attr(ID) || SIGNATURE+count++; //its id is obtained, if null new one is generated
+ t.p = t.opt.postbackSafe; //short-cut to detect postback safe
+ if(!t.is("table") || tables[id] && !t.opt.partialRefresh) return; //if the object is not a table or if it was already processed then it is ignored.
+ if (t.opt.hoverCursor !== 'e-resize') h.append("<style type='text/css'>.JCLRgrip .JColResizer:hover{cursor:"+ t.opt.hoverCursor +"!important}</style>"); //if hoverCursor has been set, append the style
+ t.addClass(SIGNATURE).attr(ID, id).before('<div class="JCLRgrips"/>'); //the grips container object is added. Signature class forces table rendering in fixed-layout mode to prevent column's min-width
+ t.g = []; t.c = []; t.w = t.width(); t.gc = t.prev(); t.f=t.opt.fixed; //t.c and t.g are arrays of columns and grips respectively
+ if(options.marginLeft) t.gc.css("marginLeft", options.marginLeft); //if the table contains margins, it must be specified
+ if(options.marginRight) t.gc.css("marginRight", options.marginRight); //since there is no (direct) way to obtain margin values in its original units (%, em, ...)
+ t.cs = I(ie? tb.cellSpacing || tb.currentStyle.borderSpacing :t.css('border-spacing'))||2; //table cellspacing (not even jQuery is fully cross-browser)
+ t.b = I(ie? tb.border || tb.currentStyle.borderLeftWidth :t.css('border-left-width'))||1; //outer border width (again cross-browser issues)
+ // if(!(tb.style.width || tb.width)) t.width(t.width()); //I am not an IE fan at all, but it is a pity that only IE has the currentStyle attribute working as expected. For this reason I can not check easily if the table has an explicit width or if it is rendered as "auto"
+ tables[id] = t; //the table object is stored using its id as key
+ createGrips(t); //grips are created
+
+ };
+
+
+ /**
+ * This function allows to remove any enhancements performed by this plugin on a previously processed table.
+ * @param {jQuery ref} t - table object
+ */
+ var destroy = function(t){
+ var id=t.attr(ID), t=tables[id]; //its table object is found
+ if(!t||!t.is("table")) return; //if none, then it wasn't processed
+ t.removeClass(SIGNATURE+" "+FLEX).gc.remove(); //class and grips are removed
+ delete tables[id]; //clean up data
+ };
+
+
+ /**
+ * Function to create all the grips associated with the table given by parameters
+ * @param {jQuery ref} t - table object
+ */
+ var createGrips = function(t){
+
+ var th = t.find(">thead>tr:first>th,>thead>tr:first>td"); //table headers are obtained
+ if(!th.length) th = t.find(">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td"); //but headers can also be included in different ways
+ th = th.filter(":visible"); //filter invisible columns
+ t.cg = t.find("col"); //a table can also contain a colgroup with col elements
+ t.ln = th.length; //table length is stored
+ if(t.p && S && S[t.id])memento(t,th); //if 'postbackSafe' is enabled and there is data for the current table, its coloumn layout is restored
+ th.each(function(i){ //iterate through the table column headers
+ var c = $(this); //jquery wrap for the current column
+ var dc = t.dc.indexOf(i)!=-1; //is this a disabled column?
+ var g = $(t.gc.append('<div class="JCLRgrip"></div>')[0].lastChild); //add the visual node to be used as grip
+ g.append(dc ? "": t.opt.gripInnerHtml).append('<div class="'+SIGNATURE+'"></div>');
+ if(i == t.ln-1){ //if the current grip is the las one
+ g.addClass("JCLRLastGrip"); //add a different css class to stlye it in a different way if needed
+ if(t.f) g.html(""); //if the table resizing mode is set to fixed, the last grip is removed since table with can not change
+ }
+ g.bind('touchstart mousedown', onGripMouseDown); //bind the mousedown event to start dragging
+
+ if (!dc){
+ //if normal column bind the mousedown event to start dragging, if disabled then apply its css class
+ g.removeClass('JCLRdisabledGrip').bind('touchstart mousedown', onGripMouseDown);
+ }else{
+ g.addClass('JCLRdisabledGrip');
+ }
+
+ g.t = t; g.i = i; g.c = c; c.w =c.width(); //some values are stored in the grip's node data as shortcut
+ t.g.push(g); t.c.push(c); //the current grip and column are added to its table object
+ c.width(c.w).removeAttr("width"); //the width of the column is converted into pixel-based measurements
+ g.data(SIGNATURE, {i:i, t:t.attr(ID), last: i == t.ln-1}); //grip index and its table name are stored in the HTML
+ });
+ t.cg.removeAttr("width"); //remove the width attribute from elements in the colgroup
+
+ t.find('td, th').not(th).not('table th, table td').each(function(){
+ $(this).removeAttr('width'); //the width attribute is removed from all table cells which are not nested in other tables and dont belong to the header
+ });
+ if(!t.f){
+ t.removeAttr('width').addClass(FLEX); //if not fixed, let the table grow as needed
+ }
+ syncGrips(t); //the grips are positioned according to the current table layout
+ //there is a small problem, some cells in the table could contain dimension values interfering with the
+ //width value set by this plugin. Those values are removed
+
+ };
+
+
+ /**
+ * Function to allow the persistence of columns dimensions after a browser postback. It is based in
+ * the HTML5 sessionStorage object, which can be emulated for older browsers using sessionstorage.js
+ * @param {jQuery ref} t - table object
+ * @param {jQuery ref} th - reference to the first row elements (only set in deserialization)
+ */
+ var memento = function(t, th){
+ var w,m=0,i=0,aux =[],tw;
+ if(th){ //in deserialization mode (after a postback)
+ t.cg.removeAttr("width");
+ if(t.opt.flush){ S[t.id] =""; return;} //if flush is activated, stored data is removed
+ w = S[t.id].split(";"); //column widths is obtained
+ tw = w[t.ln+1];
+ if(!t.f && tw){ //if not fixed and table width data available its size is restored
+ t.width(tw*=1);
+ if(t.opt.overflow) { //if overfolw flag is set, restore table width also as table min-width
+ t.css('min-width', tw + PX);
+ t.w = tw;
+ }
+ }
+ for(;i<t.ln;i++){ //for each column
+ aux.push(100*w[i]/w[t.ln]+"%"); //width is stored in an array since it will be required again a couple of lines ahead
+ th.eq(i).css("width", aux[i] ); //each column width in % is restored
+ }
+ for(i=0;i<t.ln;i++)
+ t.cg.eq(i).css("width", aux[i]); //this code is required in order to create an inline CSS rule with higher precedence than an existing CSS class in the "col" elements
+ }else{ //in serialization mode (after resizing a column)
+ S[t.id] =""; //clean up previous data
+ for(;i < t.c.length; i++){ //iterate through columns
+ w = t.c[i].width(); //width is obtained
+ S[t.id] += w+";"; //width is appended to the sessionStorage object using ID as key
+ m+=w; //carriage is updated to obtain the full size used by columns
+ }
+ S[t.id]+=m; //the last item of the serialized string is the table's active area (width),
+ //to be able to obtain % width value of each columns while deserializing
+ if(!t.f) S[t.id] += ";"+t.width(); //if not fixed, table width is stored
+ }
+ };
+
+
+ /**
+ * Function that places each grip in the correct position according to the current table layout
+ * @param {jQuery ref} t - table object
+ */
+ var syncGrips = function (t){
+ t.gc.width(t.w); //the grip's container width is updated
+ for(var i=0; i<t.ln; i++){ //for each column
+ var c = t.c[i];
+ t.g[i].css({ //height and position of the grip is updated according to the table layout
+ left: c.offset().left - t.offset().left + c.outerWidth(false) + t.cs / 2 + PX,
+ height: t.opt.headerOnly? t.c[0].outerHeight(false) : t.outerHeight(false)
+ });
+ }
+ };
+
+
+
+ /**
+ * This function updates column's width according to the horizontal position increment of the grip being
+ * dragged. The function can be called while dragging if liveDragging is enabled and also from the onGripDragOver
+ * event handler to synchronize grip's position with their related columns.
+ * @param {jQuery ref} t - table object
+ * @param {number} i - index of the grip being dragged
+ * @param {bool} isOver - to identify when the function is being called from the onGripDragOver event
+ */
+ var syncCols = function(t,i,isOver){
+ var inc = drag.x-drag.l, c = t.c[i], c2 = t.c[i+1];
+ var w = c.w + inc; var w2= c2.w- inc; //their new width is obtained
+ c.width( w + PX);
+ t.cg.eq(i).width( w + PX);
+ if(t.f){ //if fixed mode
+ c2.width(w2 + PX);
+ t.cg.eq(i+1).width( w2 + PX);
+ }else if(t.opt.overflow) { //if overflow is set, incriment min-width to force overflow
+ t.css('min-width', t.w + inc);
+ }
+ if(isOver){
+ c.w=w;
+ c2.w= t.f ? w2 : c2.w;
+ }
+ };
+
+
+ /**
+ * This function updates all columns width according to its real width. It must be taken into account that the
+ * sum of all columns can exceed the table width in some cases (if fixed is set to false and table has some kind
+ * of max-width).
+ * @param {jQuery ref} t - table object
+ */
+ var applyBounds = function(t){
+ var w = $.map(t.c, function(c){ //obtain real widths
+ return c.width();
+ });
+ t.width(t.w = t.width()).removeClass(FLEX); //prevent table width changes
+ $.each(t.c, function(i,c){
+ c.width(w[i]).w = w[i]; //set column widths applying bounds (table's max-width)
+ });
+ t.addClass(FLEX); //allow table width changes
+ };
+
+
+ /**
+ * Event handler used while dragging a grip. It checks if the next grip's position is valid and updates it.
+ * @param {event} e - mousemove event binded to the window object
+ */
+ var onGripDrag = function(e){
+ if(!drag) return;
+ var t = drag.t; //table object reference
+ var oe = e.originalEvent.touches;
+ var ox = oe ? oe[0].pageX : e.pageX; //original position (touch or mouse)
+ var x = ox - drag.ox + drag.l; //next position according to horizontal mouse position increment
+ var mw = t.opt.minWidth, i = drag.i ; //cell's min width
+ var l = t.cs*1.5 + mw + t.b;
+ var last = i == t.ln-1; //check if it is the last column's grip (usually hidden)
+ var min = i? t.g[i-1].position().left+t.cs+mw: l; //min position according to the contiguous cells
+ var max = t.f ? //fixed mode?
+ i == t.ln-1?
+ t.w-l:
+ t.g[i+1].position().left-t.cs-mw:
+ Infinity; //max position according to the contiguous cells
+ x = M.max(min, M.min(max, x)); //apply bounding
+ drag.x = x; drag.css("left", x + PX); //apply position increment
+ if(last){ //if it is the last grip
+ var c = t.c[drag.i]; //width of the last column is obtained
+ drag.w = c.w + x- drag.l;
+ }
+ if(t.opt.liveDrag){ //if liveDrag is enabled
+ if(last){
+ c.width(drag.w);
+ if(!t.f && t.opt.overflow){ //if overflow is set, incriment min-width to force overflow
+ t.css('min-width', t.w + x - drag.l);
+ }else {
+ t.w = t.width();
+ }
+ }else{
+ syncCols(t,i); //columns are synchronized
+ }
+ syncGrips(t);
+ var cb = t.opt.onDrag; //check if there is an onDrag callback
+ if (cb) { e.currentTarget = t[0]; cb(e); } //if any, it is fired
+ }
+ return false; //prevent text selection while dragging
+ };
+
+
+ /**
+ * Event handler fired when the dragging is over, updating table layout
+ * @param {event} e - grip's drag over event
+ */
+ var onGripDragOver = function(e){
+
+ d.unbind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE).unbind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE);
+ $("head :last-child").remove(); //remove the dragging cursor style
+ if(!drag) return;
+ drag.removeClass(drag.t.opt.draggingClass); //remove the grip's dragging css-class
+ if (!(drag.x - drag.l == 0)) {
+ var t = drag.t;
+ var cb = t.opt.onResize; //get some values
+ var i = drag.i; //column index
+ var last = i == t.ln-1; //check if it is the last column's grip (usually hidden)
+ var c = t.g[i].c; //the column being dragged
+ if(last){
+ c.width(drag.w);
+ c.w = drag.w;
+ }else{
+ syncCols(t, i, true); //the columns are updated
+ }
+ if(!t.f) applyBounds(t); //if not fixed mode, then apply bounds to obtain real width values
+ syncGrips(t); //the grips are updated
+ if (cb) { e.currentTarget = t[0]; cb(e); } //if there is a callback function, it is fired
+ if(t.p && S) memento(t); //if postbackSafe is enabled and there is sessionStorage support, the new layout is serialized and stored
+ }
+ drag = null; //since the grip's dragging is over
+ };
+
+
+ /**
+ * Event handler fired when the grip's dragging is about to start. Its main goal is to set up events
+ * and store some values used while dragging.
+ * @param {event} e - grip's mousedown event
+ */
+ var onGripMouseDown = function(e){
+ var o = $(this).data(SIGNATURE); //retrieve grip's data
+ var t = tables[o.t], g = t.g[o.i]; //shortcuts for the table and grip objects
+ var oe = e.originalEvent.touches; //touch or mouse event?
+ g.ox = oe? oe[0].pageX: e.pageX; //the initial position is kept
+ g.l = g.position().left;
+ g.x = g.l;
+
+ d.bind('touchmove.'+SIGNATURE+' mousemove.'+SIGNATURE, onGripDrag ).bind('touchend.'+SIGNATURE+' mouseup.'+SIGNATURE, onGripDragOver); //mousemove and mouseup events are bound
+ h.append("<style type='text/css'>*{cursor:"+ t.opt.dragCursor +"!important}</style>"); //change the mouse cursor
+ g.addClass(t.opt.draggingClass); //add the dragging class (to allow some visual feedback)
+ drag = g; //the current grip is stored as the current dragging object
+ if(t.c[o.i].l) for(var i=0,c; i<t.ln; i++){ c=t.c[i]; c.l = false; c.w= c.width(); } //if the colum is locked (after browser resize), then c.w must be updated
+ return false; //prevent text selection
+ };
+
+
+ /**
+ * Event handler fired when the browser is resized. The main purpose of this function is to update
+ * table layout according to the browser's size synchronizing related grips
+ */
+ var onResize = function(){
+ for(var t in tables){
+ if( tables.hasOwnProperty( t ) ) {
+ t = tables[t];
+ var i, mw=0;
+ t.removeClass(SIGNATURE); //firefox doesn't like layout-fixed in some cases
+ if (t.f) { //in fixed mode
+ t.w = t.width(); //its new width is kept
+ for(i=0; i<t.ln; i++) mw+= t.c[i].w;
+ //cell rendering is not as trivial as it might seem, and it is slightly different for
+ //each browser. In the beginning i had a big switch for each browser, but since the code
+ //was extremely ugly now I use a different approach with several re-flows. This works
+ //pretty well but it's a bit slower. For now, lets keep things simple...
+ for(i=0; i<t.ln; i++) t.c[i].css("width", M.round(1000*t.c[i].w/mw)/10 + "%").l=true;
+ //c.l locks the column, telling us that its c.w is outdated
+ }else{ //in non fixed-sized tables
+ applyBounds(t); //apply the new bounds
+ if(t.mode == 'flex' && t.p && S){ //if postbackSafe is enabled and there is sessionStorage support,
+ memento(t); //the new layout is serialized and stored for 'flex' tables
+ }
+ }
+ syncGrips(t.addClass(SIGNATURE));
+ }
+ }
+
+ };
+
+
+ //bind resize event, to update grips position
+ $(window).bind('resize.'+SIGNATURE, onResize);
+
+
+ /**
+ * The plugin is added to the jQuery library
+ * @param {Object} options - an object that holds some basic customization values
+ */
+ $.fn.extend({
+ colResizable: function(options) {
+ var defaults = {
+
+ //attributes:
+
+ resizeMode: 'fit', //mode can be 'fit', 'flex' or 'overflow'
+ draggingClass: 'JCLRgripDrag', //css-class used when a grip is being dragged (for visual feedback purposes)
+ gripInnerHtml: '', //if it is required to use a custom grip it can be done using some custom HTML
+ liveDrag: false, //enables table-layout updating while dragging
+ minWidth: 15, //minimum width value in pixels allowed for a column
+ headerOnly: false, //specifies that the size of the the column resizing anchors will be bounded to the size of the first row
+ hoverCursor: "e-resize", //cursor to be used on grip hover
+ dragCursor: "e-resize", //cursor to be used while dragging
+ postbackSafe: false, //when it is enabled, table layout can persist after postback or page refresh. It requires browsers with sessionStorage support (it can be emulated with sessionStorage.js).
+ flush: false, //when postbakSafe is enabled, and it is required to prevent layout restoration after postback, 'flush' will remove its associated layout data
+ marginLeft: null, //in case the table contains any margins, colResizable needs to know the values used, e.g. "10%", "15em", "5px" ...
+ marginRight: null, //in case the table contains any margins, colResizable needs to know the values used, e.g. "10%", "15em", "5px" ...
+ disable: false, //disables all the enhancements performed in a previously colResized table
+ partialRefresh: false, //can be used in combination with postbackSafe when the table is inside of an updatePanel,
+ disabledColumns: [], //column indexes to be excluded
+
+ //events:
+ onDrag: null, //callback function to be fired during the column resizing process if liveDrag is enabled
+ onResize: null //callback function fired when the dragging process is over
+ }
+ var options = $.extend(defaults, options);
+
+ //since now there are 3 different ways of resizing columns, I changed the external interface to make it clear
+ //calling it 'resizeMode' but also to remove the "fixed" attribute which was confusing for many people
+ options.fixed = true;
+ options.overflow = false;
+ switch(options.resizeMode){
+ case 'flex': options.fixed = false; break;
+ case 'overflow': options.fixed = false; options.overflow = true; break;
+ }
+
+ return this.each(function() {
+ init( this, options);
+ });
+ }
+ });
+})(jQuery);
+
Property changes on: base3.10/src/main/webapp/js/com/colResizable-1.6.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/excel.js
===================================================================
--- base3.10/src/main/webapp/js/com/excel.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/excel.js (revision 7)
@@ -0,0 +1,288 @@
+function TXLManager($table){
+ var $this = this;
+ $this.$table = $table;
+
+ if(typeof window.jQuery == 'undefined')
+ throw "TXLManager Error - jQuery must be required!"
+
+ $this.addTopRowInTable = function(data, style, colspan){
+ if(data == null) data = "";
+ var css = {
+ border: "0",
+ background: "inherit"
+ };
+ if(style && !style.length){
+ $.each(Object.keys(style), function(index, key){
+ css[key] = style[key];
+ });
+ }
+ if(typeof data != "string" && data.length){
+ if((style && !style.length) || typeof style == "string")
+ throw "Cannot use style of object type with multiple data!";
+ else if(style && data.length != style.length)
+ throw "Missmatched style array! style.length must equals to data.length!";
+ else if((colspan && !colspan.length) || typeof colspan == "string")
+ throw "Cannot use colspan of object type with multiple data!";
+ else if(colspan && data.length != colspan.length)
+ throw "Missmatched colspan array! colspan.length must equals to data.length!";
+ }
+ var tr = $this.$table.find("tbody tr");
+ if(tr.length){
+ var $tr = $(tr[0]);
+ var cols = $tr.children("td");
+ if(!cols) return false;
+ cols = cols.length;
+
+ var $newTr = $("<tr/>");
+ if(typeof data != "string" && data.length){
+ $.each(data, function(index, data){
+ var tmpCSS = {};
+ $.each(Object.keys(css), function(idx, key){
+ tmpCSS[key] = css[key];
+ });
+ $.each(Object.keys(style[index]), function(idx, key){
+ tmpCSS[key] = style[index][key];
+ });
+ var $newTd = null;
+ if(colspan)
+ $newTd = $("<td/>", { colspan: colspan[index] });
+ else $newTd = $("<td/>");
+ $newTd.text(data);
+ $newTd.css(tmpCSS);
+ $newTr.append($newTd);
+ });
+ }else{
+ var $newTd = $("<td/>",{
+ colspan: cols
+ });
+ $newTd.text(data);
+ $newTd.css(css);
+ $newTr.append($newTd);
+ }
+ var html = $newTr.wrap("<div>").parent().html();
+ $newTr.unwrap();
+ $newTr.remove();
+ if($this.$table.children("thead").length){
+ $this.$table.children("thead").html(
+ html
+ + $this.$table.children("thead").html()
+ );
+ }else{
+ $this.$table.children("tbody").html(
+ html
+ + $this.$table.children("tbody").html()
+ );
+ }
+ }
+ return $this;
+ }
+
+ $this.addLeftColInTable = function(data, style){
+ if(data == null) data = "";
+ var css = {
+ border: "0",
+ background: "inherit",
+ width: "10px"
+ };
+ if(style){
+ $.each(Object.keys(style), function(index, key){
+ css[key] = style[key];
+ });
+ }
+ if($this.$table.find("colgroup").length){
+ var $colgroup = $table.children("colgroup");
+ var $col = $("<col/>");
+ $col.css(css);
+ var html = $col.wrap("<div>").parent().html();
+ $col.unwrap();
+ $col.remove();
+ $colgroup.html(html + $colgroup.html());
+ }
+ if($this.$table.find("thead").length){
+ $.each($($this.$table.find("thead")).children("tr"), function(index, tr){
+ var $tr = $(tr);
+ var $newTd = $("<td>");
+ $newTd.text(data);
+ $newTd.css(css);
+ var html = $newTd.wrap("<div>").parent().html();
+ $newTd.unwrap();
+ $newTd.remove();
+ $tr.html(html + $tr.html());
+ });
+ }
+ if($this.$table.find("tbody").length){
+ $.each($($this.$table.find("tbody")).children("tr"), function(index, tr){
+ var $tr = $(tr);
+ var $newTd = $("<td>");
+ $newTd.text(data);
+ $newTd.css(css);
+ var html = $newTd.wrap("<div>").parent().html();
+ $newTd.unwrap();
+ $newTd.remove();
+ $tr.html(html + $tr.html());
+ });
+ }
+ return $this;
+ }
+
+ $this.wrapTable = function(data, style){
+ if(data == null) data = "";
+ var css = {
+ border: "0",
+ background: "inherit",
+ width: "10px"
+ };
+ if(style){
+ $.each(Object.keys(style), function(index, key){
+ css[key] = style[key];
+ });
+ }
+ var tr = $this.$table.find("tbody tr");
+ if(!tr.length) return;
+ var $tr = $(tr[0]);
+ var cols = $tr.children("td");
+ if(!cols) return false;
+ cols = cols.length;
+
+ if($this.$table.find("colgroup").length){
+ var $colgroup = $table.children("colgroup");
+ var $col = $("<col/>");
+ $col.css(css);
+ $colgroup.append($col);
+ }
+ if($this.$table.find("thead").length){
+ $.each($($this.$table.find("thead")).children("tr"), function(index, tr){
+ var $tr = $(tr);
+ var $newTd = $("<td>");
+ $newTd.text(data);
+ $newTd.css(css);
+ $tr.append($newTd);
+ });
+ }
+ if($this.$table.find("tbody").length){
+ $.each($($this.$table.find("tbody")).children("tr"), function(index, tr){
+ var $tr = $(tr);
+ var $newTd = $("<td>");
+ $newTd.text(data);
+ $newTd.css(css);
+ $tr.append($newTd);
+ });
+ var $tbody = $($this.$table.find("tbody")[0]);
+ var $newTr = $("<tr/>");
+ for(var i = 0; i < cols + 1; i++){
+ var $newTd = $("<td>");
+ $newTd.text(data);
+ $newTd.css({
+ border: "0",
+ background: "inherit"
+ });
+ $newTr.append($newTd);
+ }
+ $tbody.append($newTr);
+ }
+ return $this;
+ }
+
+ $this.removeAllColumnAt = function(idx){
+ var colgroup = $this.$table.find("colgroup col");
+ var thead = $this.$table.find("thead tr");
+ var tbody = $this.$table.find("tbody tr");
+ if(colgroup && colgroup.length && colgroup.length > idx)
+ $(colgroup[idx]).remove();
+ if(thead && thead.length){
+ var tr = $(thead[0]).children("th");
+ if(tr && tr.length && tr.length > idx) $(tr[idx]).remove();
+ }
+ if(tbody && tbody.length){
+ $.each(tbody, function(index, tr){
+ var td = $(tr).children("td");
+ if(td && td.length && td.length > idx) $(td[idx]).remove();
+ });
+ }
+ return $this;
+ }
+
+ $this.setCSSToTable = function(selector, style){
+ var $elements = $($this.$table.find(selector));
+ $.each($elements, function(index, element){
+ $(element).css(style);
+ });
+ return $this;
+ }
+
+ $this.exportTableToExcel = function(filename, splitter){
+ var tab_text='<table style="display: none; border: 0; border-collapse:collapse;">';
+ var textRange; var j=0;
+ tab = $this.$table[0]; // id of table
+ for(j = 0 ; j < tab.rows.length ; j++)
+ tab_text=tab_text+tab.rows[j].innerHTML+"</tr>";
+ tab_text=tab_text+"</table>";
+ tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//remove if u want links in your table
+ tab_text= tab_text.replace(/<img[^>]*>/gi,""); // remove if u want images in your table
+ tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params
+ if(splitter) tab_text= tab_text.replace(/<br\s*[\/]?>/gi, splitter);//"\r\n");
+
+ var ua = window.navigator.userAgent;
+ var msie = ua.indexOf("MSIE ");
+
+ if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer
+ {
+ var userAgent = navigator.userAgent.toLowerCase();
+ var ie_Version = parseFloat((userAgent.match(/.*(?:rv|ie)[\/: ](.+?)([ \);]|$)/) || [])[1]);
+ if(ie_Version <= 9){
+ var txtArea1 = window.open("#", "_blank", "toolbar=no,status=no,menubar=no,scrollbars=no,resizable=no, width=10, height=10, visible=none", '');
+ txtArea1.document.open("txt/html","replace");
+ txtArea1.document.write(tab_text);
+ txtArea1.document.close();
+ txtArea1.focus();
+ txtArea1.document.execCommand("SaveAs", true, filename + ".xls");
+ txtArea1.close();
+ } else {
+ var uri = 'data:application/vnd.ms-excel;base64,'
+ var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>{table}</body></html>';
+ var ctx = {worksheet: filename || 'Worksheet', table: tab_text};
+ var blob = new Blob([TXLManager.utils.format(template, ctx)],
+ {type:"application/vnd.ms-excel;charset=utf-8"});
+ window.navigator.msSaveOrOpenBlob(blob, filename + '.xls');
+ }
+ }
+ else{ //other browser not tested on IE 11
+ var uri = 'data:application/vnd.ms-excel,' + encodeURIComponent(tab_text);
+ var link = document.createElement("a");
+ link.href = uri;
+
+ //set the visibility hidden so it will not effect on your web-layout
+ link.style = "visibility:hidden";
+ link.download = filename + ".xls";
+
+ //this part will append the anchor tag and remove it after automatic click
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ }
+
+ return $this;
+ };
+
+ $this.getHTML = function(){
+ var $temp = $("<div/>");
+ var html = $this.$table.wrap($temp).parent().html();
+ $this.$table.unwrap();
+ $temp.remove();
+ return html;
+ }
+
+ return {
+ addTopRowInTable: $this.addTopRowInTable,
+ addLeftColInTable: $this.addLeftColInTable,
+ wrapTable: $this.wrapTable,
+ removeAllColumnAt: $this.removeAllColumnAt,
+ setCSSToTable: $this.setCSSToTable,
+ exportTableToExcel: $this.exportTableToExcel,
+ getHTML: $this.getHTML
+ };
+}
+
+TXLManager.utils = {};
+TXLManager.utils.base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) };
+TXLManager.utils.format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) };
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/excel.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery-1.12.4.min.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery-1.12.4.min.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery-1.12.4.min.js (revision 7)
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
+marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
+padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
Property changes on: base3.10/src/main/webapp/js/com/jquery-1.12.4.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/ColReorderWithResize.js
===================================================================
--- base3.10/src/main/webapp/js/com/ColReorderWithResize.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/ColReorderWithResize.js (revision 7)
@@ -0,0 +1,1757 @@
+/**
+ * @license
+ * File: ColReorderWithResize.js
+ * Version: 3.0
+ * CVS: $Id$
+ * Description: Allow columns to be reordered in a DataTable
+ * Author: Allan Jardine (www.sprymedia.co.uk)
+ * Author: Christophe Battarel (www.altairis.fr)
+ * Created: Wed Sep 15 18:23:29 BST 2010
+ * Modified: July 2011 by Christophe Battarel - christophe.battarel@altairis.fr (columns resizable)
+ * Modified: February 2012 by Martin Marchetta - martin.marchetta@gmail.com
+ * 1. Made the "hot area" for resizing a little wider (it was a little difficult to hit the exact border of a column for resizing)
+ * 2. Resizing didn't work at all when using scroller (that plugin splits the table into 2 different tables: one for the header and another one for the body, so when you resized the header, the data columns didn't follow)
+ * 3. Fixed collateral effects of sorting feature
+ * 4. If sScrollX is enabled (i.e. horizontal scrolling), when resizing a column the width of the other columns is not changed, but the whole
+ * table is resized to give an Excel-like behavior (good suggestion by Allan)
+ * Modified: February 2012 by Christophe Battarel - christophe.battarel@altairis.fr (ColReorder v1.0.5 adaptation)
+ * Modified: September 16th 2012 by Hassan Kamara - h@phrmc.com
+ * Modified: June 2017 by Jeff Walter - jeffreydwalter@gmail.com
+ * 1. ColReorder v1.3.3 adaptation.
+ * 2. Fixed issues with column width calculations which allowed column headers to become misaligned with table body when using scroller plugin.
+ * Modified: June 2018 by Jeff Walter - jeffreydwalter@gmail.com
+ * 1. Took a second stab at this plugin. Made things work for both scroller and non-scroller tables.
+ * Language: Javascript
+ * License: MIT
+ * Project: DataTables
+ *
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net')(root, $).$;
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+/**
+ * Switch the key value pairing of an index array to be value key (i.e. the old value is now the
+ * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ].
+ * @method fnInvertKeyValues
+ * @param array aIn Array to switch around
+ * @returns array
+ */
+function fnInvertKeyValues( aIn )
+{
+ var aRet=[];
+ for ( var i=0, iLen=aIn.length ; i<iLen ; i++ )
+ {
+ aRet[ aIn[i] ] = i;
+ }
+ return aRet;
+}
+
+/**
+ * Modify an array by switching the position of two elements
+ * @method fnArraySwitch
+ * @param array aArray Array to consider, will be modified by reference (i.e. no return)
+ * @param int iFrom From point
+ * @param int iTo Insert point
+ * @returns void
+ */
+function fnArraySwitch( aArray, iFrom, iTo )
+{
+ var mStore = aArray.splice( iFrom, 1 )[0];
+ aArray.splice( iTo, 0, mStore );
+}
+
+/**
+ * Switch the positions of nodes in a parent node (note this is specifically designed for
+ * table rows). Note this function considers all element nodes under the parent!
+ * @method fnDomSwitch
+ * @param string sTag Tag to consider
+ * @param int iFrom Element to move
+ * @param int Point to element the element to (before this point), can be null for append
+ * @returns void
+ */
+function fnDomSwitch( nParent, iFrom, iTo )
+{
+ var anTags = [];
+ for ( var i=0, iLen=nParent.childNodes.length ; i<iLen ; i++ )
+ {
+ if ( nParent.childNodes[i].nodeType == 1 )
+ {
+ anTags.push( nParent.childNodes[i] );
+ }
+ }
+ var nStore = anTags[ iFrom ];
+
+ if ( iTo !== null )
+ {
+ nParent.insertBefore( nStore, anTags[iTo] );
+ }
+ else
+ {
+ nParent.appendChild( nStore );
+ }
+}
+
+/**
+ * Plug-in for DataTables which will reorder the internal column structure by taking the column
+ * from one position (iFrom) and insert it into a given point (iTo).
+ * @method $.fn.dataTableExt.oApi.fnColReorder
+ * @param object oSettings DataTables settings object - automatically added by DataTables!
+ * @param int iFrom Take the column to be repositioned from this point
+ * @param int iTo and insert it into this point
+ * @param bool drop Indicate if the reorder is the final one (i.e. a drop)
+ * not a live reorder
+ * @param bool invalidateRows speeds up processing if false passed
+ * @returns void
+ */
+$.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo, drop, invalidateRows )
+{
+ var i, iLen, j, jLen, jen, iCols=oSettings.aoColumns.length, nTrs, oCol;
+ var attrMap = function ( obj, prop, mapping ) {
+ if ( ! obj[ prop ] || typeof obj[ prop ] === 'function' ) {
+ return;
+ }
+
+ var a = obj[ prop ].split('.');
+ var num = a.shift();
+
+ if ( isNaN( num*1 ) ) {
+ return;
+ }
+
+ obj[ prop ] = mapping[ num*1 ]+'.'+a.join('.');
+ };
+
+ /* Sanity check in the input */
+ if ( iFrom == iTo )
+ {
+ /* Pointless reorder */
+ return;
+ }
+
+ if ( iFrom < 0 || iFrom >= iCols )
+ {
+ this.oApi._fnLog( oSettings, 1, "ColReorder 'from' index is out of bounds: "+iFrom );
+ return;
+ }
+
+ if ( iTo < 0 || iTo >= iCols )
+ {
+ this.oApi._fnLog( oSettings, 1, "ColReorder 'to' index is out of bounds: "+iTo );
+ return;
+ }
+
+ /*
+ * Calculate the new column array index, so we have a mapping between the old and new
+ */
+ var aiMapping = [];
+ for ( i=0, iLen=iCols ; i<iLen ; i++ )
+ {
+ aiMapping[i] = i;
+ }
+ fnArraySwitch( aiMapping, iFrom, iTo );
+ var aiInvertMapping = fnInvertKeyValues( aiMapping );
+
+
+ /*
+ * Convert all internal indexing to the new column order indexes
+ */
+ /* Sorting */
+ for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )
+ {
+ oSettings.aaSorting[i][0] = aiInvertMapping[ oSettings.aaSorting[i][0] ];
+ }
+
+ /* Fixed sorting */
+ if ( oSettings.aaSortingFixed !== null )
+ {
+ for ( i=0, iLen=oSettings.aaSortingFixed.length ; i<iLen ; i++ )
+ {
+ oSettings.aaSortingFixed[i][0] = aiInvertMapping[ oSettings.aaSortingFixed[i][0] ];
+ }
+ }
+
+ /* Data column sorting (the column which the sort for a given column should take place on) */
+ for ( i=0, iLen=iCols ; i<iLen ; i++ )
+ {
+ oCol = oSettings.aoColumns[i];
+ for ( j=0, jLen=oCol.aDataSort.length ; j<jLen ; j++ )
+ {
+ oCol.aDataSort[j] = aiInvertMapping[ oCol.aDataSort[j] ];
+ }
+
+ // Update the column indexes
+ oCol.idx = aiInvertMapping[ oCol.idx ];
+ }
+
+ // Update 1.10 optimised sort class removal variable
+ $.each( oSettings.aLastSort, function (i, val) {
+ oSettings.aLastSort[i].src = aiInvertMapping[ val.src ];
+ } );
+
+ /* Update the Get and Set functions for each column */
+ for ( i=0, iLen=iCols ; i<iLen ; i++ )
+ {
+ oCol = oSettings.aoColumns[i];
+
+ if ( typeof oCol.mData == 'number' ) {
+ oCol.mData = aiInvertMapping[ oCol.mData ];
+ }
+ else if ( $.isPlainObject( oCol.mData ) ) {
+ // HTML5 data sourced
+ attrMap( oCol.mData, '_', aiInvertMapping );
+ attrMap( oCol.mData, 'filter', aiInvertMapping );
+ attrMap( oCol.mData, 'sort', aiInvertMapping );
+ attrMap( oCol.mData, 'type', aiInvertMapping );
+ }
+ }
+
+ /*
+ * Move the DOM elements
+ */
+ if ( oSettings.aoColumns[iFrom].bVisible )
+ {
+ /* Calculate the current visible index and the point to insert the node before. The insert
+ * before needs to take into account that there might not be an element to insert before,
+ * in which case it will be null, and an appendChild should be used
+ */
+ var iVisibleIndex = this.oApi._fnColumnIndexToVisible( oSettings, iFrom );
+ var iInsertBeforeIndex = null;
+
+ i = iTo < iFrom ? iTo : iTo + 1;
+ while ( iInsertBeforeIndex === null && i < iCols )
+ {
+ iInsertBeforeIndex = this.oApi._fnColumnIndexToVisible( oSettings, i );
+ i++;
+ }
+
+ /* Header */
+ nTrs = oSettings.nTHead.getElementsByTagName('tr');
+ for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
+ {
+ fnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );
+ }
+
+ /* Footer */
+ if ( oSettings.nTFoot !== null )
+ {
+ nTrs = oSettings.nTFoot.getElementsByTagName('tr');
+ for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
+ {
+ fnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );
+ }
+ }
+
+ /* Body */
+ for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
+ {
+ if ( oSettings.aoData[i].nTr !== null )
+ {
+ fnDomSwitch( oSettings.aoData[i].nTr, iVisibleIndex, iInsertBeforeIndex );
+ }
+ }
+ }
+
+ /*
+ * Move the internal array elements
+ */
+ /* Columns */
+ fnArraySwitch( oSettings.aoColumns, iFrom, iTo );
+
+ // regenerate the get / set functions
+ for ( i=0, iLen=iCols ; i<iLen ; i++ ) {
+ oSettings.oApi._fnColumnOptions( oSettings, i, {} );
+ }
+
+ /* Search columns */
+ fnArraySwitch( oSettings.aoPreSearchCols, iFrom, iTo );
+
+ /* Array array - internal data anodes cache */
+ for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )
+ {
+ var data = oSettings.aoData[i];
+ var cells = data.anCells;
+
+ if ( cells ) {
+ fnArraySwitch( cells, iFrom, iTo );
+
+ // Longer term, should this be moved into the DataTables' invalidate
+ // methods?
+ for ( j=0, jen=cells.length ; j<jen ; j++ ) {
+ if ( cells[j] && cells[j]._DT_CellIndex ) {
+ cells[j]._DT_CellIndex.column = j;
+ }
+ }
+ }
+
+ // For DOM sourced data, the invalidate will reread the cell into
+ // the data array, but for data sources as an array, they need to
+ // be flipped
+ if ( data.src !== 'dom' && $.isArray( data._aData ) ) {
+ fnArraySwitch( data._aData, iFrom, iTo );
+ }
+ }
+
+ /* Reposition the header elements in the header layout array */
+ for ( i=0, iLen=oSettings.aoHeader.length ; i<iLen ; i++ )
+ {
+ fnArraySwitch( oSettings.aoHeader[i], iFrom, iTo );
+ }
+
+ if ( oSettings.aoFooter !== null )
+ {
+ for ( i=0, iLen=oSettings.aoFooter.length ; i<iLen ; i++ )
+ {
+ fnArraySwitch( oSettings.aoFooter[i], iFrom, iTo );
+ }
+ }
+
+ if ( invalidateRows || invalidateRows === undefined )
+ {
+ $.fn.dataTable.Api( oSettings ).rows().invalidate();
+ }
+
+ /*
+ * Update DataTables' event handlers
+ */
+
+ /* Sort listener */
+ for ( i=0, iLen=iCols ; i<iLen ; i++ )
+ {
+ $(oSettings.aoColumns[i].nTh).off('click.DT');
+ this.oApi._fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );
+ }
+
+ /* Fire an event so other plug-ins can update */
+ $(oSettings.oInstance).trigger( 'column-reorder.dt', [ oSettings, {
+ from: iFrom,
+ to: iTo,
+ mapping: aiInvertMapping,
+ drop: drop,
+
+ // Old style parameters for compatibility
+ iFrom: iFrom,
+ iTo: iTo,
+ aiInvertMapping: aiInvertMapping
+ } ] );
+};
+
+/**
+ * ColReorder provides column visibility control for DataTables
+ * @class ColReorder
+ * @constructor
+ * @param {object} dt DataTables settings object
+ * @param {object} opts ColReorder options
+ */
+var ColReorder = function( dt, opts )
+{
+ var settings = new $.fn.dataTable.Api( dt ).settings()[0];
+
+ // Ensure that we can't initialise on the same table twice
+ if ( settings._colReorder ) {
+ return settings._colReorder;
+ }
+
+ // Allow the options to be a boolean for defaults
+ if ( opts === true ) {
+ opts = {};
+ }
+
+ // Convert from camelCase to Hungarian, just as DataTables does
+ var camelToHungarian = $.fn.dataTable.camelToHungarian;
+ if ( camelToHungarian ) {
+ camelToHungarian( ColReorder.defaults, ColReorder.defaults, true );
+ camelToHungarian( ColReorder.defaults, opts || {} );
+ }
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Public class variables
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+ /**
+ * @namespace Settings object which contains customisable information for ColReorder instance
+ */
+ this.s = {
+ /**
+ * DataTables settings object
+ * @property dt
+ * @type Object
+ * @default null
+ */
+ "dt": null,
+
+ /**
+ * Initialisation object used for this instance
+ * @property init
+ * @type object
+ * @default {}
+ */
+ "init": $.extend( true, {}, ColReorder.defaults, opts ),
+
+ /**
+ * Allow Reorder functionnality
+ * @property allowReorder
+ * @type boolean
+ * @default true
+ */
+ "allowReorder": true,
+
+ /**
+ * Allow Resize functionnality
+ * @property allowResize
+ * @type boolean
+ * @default true
+ */
+ "allowResize": true,
+
+ /**
+ * Number of columns to fix (not allow to be reordered)
+ * @property fixed
+ * @type int
+ * @default 0
+ */
+ "fixed": 0,
+
+ /**
+ * Number of columns to fix counting from right (not allow to be reordered)
+ * @property fixedRight
+ * @type int
+ * @default 0
+ */
+ "fixedRight": 0,
+
+ /**
+ * Callback function for once the reorder has been done
+ * @property reorderCallback
+ * @type function
+ * @default null
+ */
+ "reorderCallback": null,
+
+ /**
+ * Callback function for once the resize has been done
+ * @property resizeCallback
+ * @type function
+ * @default null
+ */
+ "resizeCallback": null,
+
+ /**
+ * @namespace Information used for the mouse drag
+ */
+ "mouse": {
+ "startX": -1,
+ "startY": -1,
+ "offsetX": -1,
+ "offsetY": -1,
+ "target": -1,
+ "targetIndex": -1,
+ "fromIndex": -1
+ },
+
+ /**
+ * Information which is used for positioning the insert cusor and knowing where to do the
+ * insert. Array of objects with the properties:
+ * x: x-axis position
+ * to: insert point
+ * @property aoTargets
+ * @type array
+ * @default []
+ */
+ "aoTargets": []
+ };
+
+
+ /**
+ * @namespace Common and useful DOM elements for the class instance
+ */
+ this.dom = {
+ /**
+ * Dragging element (the one the mouse is moving)
+ * @property drag
+ * @type element
+ * @default null
+ */
+ "drag": null,
+
+ /**
+ * Resizing a column
+ * @property drag
+ * @type element
+ * @default null
+ */
+ "resize": null,
+
+ /**
+ * The insert cursor
+ * @property pointer
+ * @type element
+ * @default null
+ */
+ "pointer": null
+ };
+
+ /* Constructor logic */
+ this.s.dt = settings;
+
+ // Keep the current table's size in order to resize it if columns are resized and scrollX is enabled.
+ if(this.s.dt.oInit.sScrollX === undefined) {
+ this.table_size = -1;
+ }
+
+ this.s.dt._colReorder = this;
+ this._fnConstruct();
+
+ return this;
+};
+
+
+
+$.extend( ColReorder.prototype, {
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Public methods
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+ /**
+ * Reset the column ordering to the original ordering that was detected on
+ * start up.
+ * @return {this} Returns `this` for chaining.
+ *
+ * @example
+ * // DataTables initialisation with ColReorder
+ * var table = $('#example').dataTable( {
+ * "sDom": 'Rlfrtip'
+ * } );
+ *
+ * // Add click event to a button to reset the ordering
+ * $('#resetOrdering').click( function (e) {
+ * e.preventDefault();
+ * $.fn.dataTable.ColReorder( table ).fnReset();
+ * } );
+ */
+ "fnReset": function ()
+ {
+ this._fnOrderColumns( this.fnOrder() );
+
+ return this;
+ },
+
+ /**
+ * `Deprecated` - Get the current order of the columns, as an array.
+ * @return {array} Array of column identifiers
+ * @deprecated `fnOrder` should be used in preference to this method.
+ * `fnOrder` acts as a getter/setter.
+ */
+ "fnGetCurrentOrder": function ()
+ {
+ return this.fnOrder();
+ },
+
+ /**
+ * Get the current order of the columns, as an array. Note that the values
+ * given in the array are unique identifiers for each column. Currently
+ * these are the original ordering of the columns that was detected on
+ * start up, but this could potentially change in future.
+ * @return {array} Array of column identifiers
+ *
+ * @example
+ * // Get column ordering for the table
+ * var order = $.fn.dataTable.ColReorder( dataTable ).fnOrder();
+ *//**
+ * Set the order of the columns, from the positions identified in the
+ * ordering array given. Note that ColReorder takes a brute force approach
+ * to reordering, so it is possible multiple reordering events will occur
+ * before the final order is settled upon.
+ * @param {array} [set] Array of column identifiers in the new order. Note
+ * that every column must be included, uniquely, in this array.
+ * @return {this} Returns `this` for chaining.
+ *
+ * @example
+ * // Swap the first and second columns
+ * $.fn.dataTable.ColReorder( dataTable ).fnOrder( [1, 0, 2, 3, 4] );
+ *
+ * @example
+ * // Move the first column to the end for the table `#example`
+ * var curr = $.fn.dataTable.ColReorder( '#example' ).fnOrder();
+ * var first = curr.shift();
+ * curr.push( first );
+ * $.fn.dataTable.ColReorder( '#example' ).fnOrder( curr );
+ *
+ * @example
+ * // Reverse the table's order
+ * $.fn.dataTable.ColReorder( '#example' ).fnOrder(
+ * $.fn.dataTable.ColReorder( '#example' ).fnOrder().reverse()
+ * );
+ */
+ "fnOrder": function ( set, original )
+ {
+ var a = [], i, ien, j, jen;
+ var columns = this.s.dt.aoColumns;
+
+ if ( set === undefined ){
+ for ( i=0, ien=columns.length ; i<ien ; i++ ) {
+ a.push( columns[i]._ColReorder_iOrigCol );
+ }
+
+ return a;
+ }
+
+ // The order given is based on the original indexes, rather than the
+ // existing ones, so we need to translate from the original to current
+ // before then doing the order
+ if ( original ) {
+ var order = this.fnOrder();
+
+ for ( i=0, ien=set.length ; i<ien ; i++ ) {
+ a.push( $.inArray( set[i], order ) );
+ }
+
+ set = a;
+ }
+
+ this._fnOrderColumns( fnInvertKeyValues( set ) );
+
+ return this;
+ },
+
+ /**
+ * Convert from the original column index, to the original
+ *
+ * @param {int|array} idx Index(es) to convert
+ * @param {string} dir Transpose direction - `fromOriginal` / `toCurrent`
+ * or `'toOriginal` / `fromCurrent`
+ * @return {int|array} Converted values
+ */
+ fnTranspose: function ( idx, dir )
+ {
+ if ( ! dir ) {
+ dir = 'toCurrent';
+ }
+
+ var order = this.fnOrder();
+ var columns = this.s.dt.aoColumns;
+
+ if ( dir === 'toCurrent' ) {
+ // Given an original index, want the current
+ return ! $.isArray( idx ) ?
+ $.inArray( idx, order ) :
+ $.map( idx, function ( index ) {
+ return $.inArray( index, order );
+ } );
+ }
+ else {
+ // Given a current index, want the original
+ return ! $.isArray( idx ) ?
+ columns[idx]._ColReorder_iOrigCol :
+ $.map( idx, function ( index ) {
+ return columns[index]._ColReorder_iOrigCol;
+ } );
+ }
+ },
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Private methods (they are of course public in JS, but recommended as private)
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+ /**
+ * Constructor logic
+ * @method _fnConstruct
+ * @returns void
+ * @private
+ */
+ "_fnConstruct": function ()
+ {
+ var that = this;
+ var iLen = this.s.dt.aoColumns.length;
+ var table = this.s.dt.nTable;
+ var i;
+
+ /* allow reorder */
+ if ( this.s.init.allowReorder != undefined)
+ {
+ this.s.allowReorder = this.s.init.allowReorder;
+ }
+
+ /* allow resize */
+ if ( this.s.init.allowResize != undefined )
+ {
+ this.s.allowResize = this.s.init.allowResize;
+ }
+
+ /* Columns discounted from reordering - counting left to right */
+ if ( this.s.init.iFixedColumns )
+ {
+ this.s.fixed = this.s.init.iFixedColumns;
+ }
+
+ if ( this.s.init.iFixedColumnsLeft )
+ {
+ this.s.fixed = this.s.init.iFixedColumnsLeft;
+ }
+
+ /* Classnames added to elements */
+ if ( this.s.init.classNameClonedTable )
+ {
+ this.s.classNameClonedTable = this.s.init.classNameClonedTable;
+ }
+
+ if ( this.s.init.classNamePointer )
+ {
+ this.s.classNamePointer = this.s.init.classNamePointer;
+ }
+
+ if ( this.s.init.classNameTableHeader )
+ {
+ this.s.classNameTableHeader = this.s.init.classNameTableHeader;
+ }
+
+ if ( this.s.init.classNameTableHeaderHover )
+ {
+ this.s.classNameTableHeaderHover = this.s.init.classNameTableHeaderHover;
+ }
+
+ /* Columns discounted from reordering - counting right to left */
+ this.s.fixedRight = this.s.init.iFixedColumnsRight ?
+ this.s.init.iFixedColumnsRight :
+ 0;
+
+ /* Drop callback initialisation option */
+ if ( this.s.init.fnReorderCallback )
+ {
+ this.s.reorderCallback = this.s.init.fnReorderCallback;
+ }
+
+ /* Reorder callback initialisation option */
+ if ( this.s.init.fnResizeCallback )
+ {
+ this.s.resizeCallback = this.s.init.fnResizeCallback;
+ }
+
+ /* Add event handlers for the drag and drop, and also mark the original column order */
+ for ( i = 0; i < iLen; i++ )
+ {
+ if ( i > this.s.fixed-1 && i < iLen - this.s.fixedRight )
+ {
+ this._fnMouseListener( i, this.s.dt.aoColumns[i].nTh );
+ }
+
+ /* Mark the original column order for later reference */
+ this.s.dt.aoColumns[i]._ColReorder_iOrigCol = i;
+ }
+
+ /* State saving */
+ this.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) {
+ that._fnStateSave.call( that, oData );
+ }, "ColReorder_State" );
+
+ /* An initial column order has been specified */
+ var aiOrder = null;
+ if ( this.s.init.aiOrder )
+ {
+ aiOrder = this.s.init.aiOrder.slice();
+ }
+
+ /* State loading, overrides the column order given */
+ if ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' &&
+ this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length )
+ {
+ aiOrder = this.s.dt.oLoadedState.ColReorder;
+ }
+
+ /* If we have an order to apply - do so */
+ if ( aiOrder )
+ {
+ /* We might be called during or after the DataTables initialisation. If before, then we need
+ * to wait until the draw is done, if after, then do what we need to do right away
+ */
+ if ( !that.s.dt._bInitComplete )
+ {
+ var bDone = false;
+ $(table).on( 'draw.dt.colReorder', function () {
+ if ( !that.s.dt._bInitComplete && !bDone )
+ {
+ bDone = true;
+ var resort = fnInvertKeyValues( aiOrder );
+ that._fnOrderColumns.call( that, resort );
+ }
+ } );
+ }
+ else
+ {
+ var resort = fnInvertKeyValues( aiOrder );
+ that._fnOrderColumns.call( that, resort );
+ }
+ }
+ else {
+ this._fnSetColumnIndexes();
+ }
+
+ // Destroy clean up
+ $(table).on( 'destroy.dt.colReorder', function () {
+ $(table).off( 'destroy.dt.colReorder draw.dt.colReorder' );
+ $(that.s.dt.nTHead).find( '*' ).off( '.ColReorder' );
+
+ $.each( that.s.dt.aoColumns, function (i, column) {
+ $(column.nTh).removeAttr('data-column-index');
+ } );
+
+ that.s.dt._colReorder = null;
+ that.s = null;
+ } );
+ },
+
+
+ /**
+ * Set the column order from an array
+ * @method _fnOrderColumns
+ * @param array a An array of integers which dictate the column order that should be applied
+ * @returns void
+ * @private
+ */
+ "_fnOrderColumns": function ( a )
+ {
+ var changed = false;
+
+ if ( a.length != this.s.dt.aoColumns.length )
+ {
+ this.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, "ColReorder - array reorder does not "+
+ "match known number of columns. Skipping." );
+ return;
+ }
+
+ for ( var i=0, iLen=a.length ; i<iLen ; i++ )
+ {
+ var currIndex = $.inArray( i, a );
+ if ( i != currIndex )
+ {
+ /* Reorder our switching array */
+ fnArraySwitch( a, currIndex, i );
+
+ /* Do the column reorder in the table */
+ this.s.dt.oInstance.fnColReorder( currIndex, i, true, false );
+
+ changed = true;
+ }
+ }
+
+ $.fn.dataTable.Api( this.s.dt ).rows().invalidate();
+
+ this._fnSetColumnIndexes();
+
+ // Has anything actually changed? If not, then nothing else to do
+ if ( ! changed ) {
+ return;
+ }
+
+ /* When scrolling we need to recalculate the column sizes to allow for the shift */
+ if ( this.s.dt.oScroll.sX !== "" || this.s.dt.oScroll.sY !== "" )
+ {
+ this.s.dt.oInstance.fnAdjustColumnSizing( false );
+ }
+
+ /* Save the state */
+ this.s.dt.oInstance.oApi._fnSaveState( this.s.dt );
+
+ if ( this.s.reorderCallback !== null )
+ {
+ this.s.reorderCallback.call( this );
+ }
+ },
+
+
+ /**
+ * Because we change the indexes of columns in the table, relative to their starting point
+ * we need to reorder the state columns to what they are at the starting point so we can
+ * then rearrange them again on state load!
+ * @method _fnStateSave
+ * @param object oState DataTables state
+ * @returns string JSON encoded cookie string for DataTables
+ * @private
+ */
+ "_fnStateSave": function ( oState )
+ {
+ var i, iLen, aCopy, iOrigColumn;
+ var oSettings = this.s.dt;
+ var columns = oSettings.aoColumns;
+
+ oState.ColReorder = [];
+
+ /* Sorting */
+ if ( oState.aaSorting ) {
+ // 1.10.0-
+ for ( i=0 ; i<oState.aaSorting.length ; i++ ) {
+ oState.aaSorting[i][0] = columns[ oState.aaSorting[i][0] ]._ColReorder_iOrigCol;
+ }
+
+ var aSearchCopy = $.extend( true, [], oState.aoSearchCols );
+
+ for ( i=0, iLen=columns.length ; i<iLen ; i++ )
+ {
+ iOrigColumn = columns[i]._ColReorder_iOrigCol;
+
+ /* Column filter */
+ oState.aoSearchCols[ iOrigColumn ] = aSearchCopy[i];
+
+ /* Visibility */
+ oState.abVisCols[ iOrigColumn ] = columns[i].bVisible;
+
+ /* Column reordering */
+ oState.ColReorder.push( iOrigColumn );
+ }
+ }
+ else if ( oState.order ) {
+ // 1.10.1+
+ for ( i=0 ; i<oState.order.length ; i++ ) {
+ oState.order[i][0] = columns[ oState.order[i][0] ]._ColReorder_iOrigCol;
+ }
+
+ var stateColumnsCopy = $.extend( true, [], oState.columns );
+
+ for ( i=0, iLen=columns.length ; i<iLen ; i++ )
+ {
+ iOrigColumn = columns[i]._ColReorder_iOrigCol;
+
+ /* Columns */
+ oState.columns[ iOrigColumn ] = stateColumnsCopy[i];
+
+ /* Column reordering */
+ oState.ColReorder.push( iOrigColumn );
+ }
+ }
+ },
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Mouse drop and drag
+ */
+
+ /**
+ * Add a mouse down listener to a particluar TH element
+ * @method _fnMouseListener
+ * @param int i Column index
+ * @param element nTh TH element clicked on
+ * @returns void
+ * @private
+ */
+ "_fnMouseListener": function ( i, nTh )
+ {
+ var that = this;
+ var aoColumns = this.s.dt.aoColumns;
+ var bSort = that.s.dt.oFeatures.bSort
+
+ var tableHeaderHoverClassname = this.s.classNameTableHeaderHover;
+ var tableHeaderClassname = this.s.classNameTableHeader;
+
+ // Rebind events since after column re-order they use wrong column indices.
+ $(nTh).off('.ColReorder');
+
+ // listen to mousemove event for resize
+ if (this.s.allowResize) {
+ $(nTh).on( 'mousemove.ColReorder', function (e) {
+ if (that.dom.drag === null && that.dom.resize === null)
+ {
+ /* Store information about the mouse position */
+ var nThTarget = e.target.nodeName == "TH" ? e.target : $(e.target).parents('TH')[0];
+ var offset = $(nThTarget).offset();
+ var nLength = $(nThTarget).innerWidth();
+
+ /* are we on the col border (if so, resize col) */
+ if (Math.abs(e.pageX - Math.round(offset.left + nLength)) <= 5)
+ {
+ $(nThTarget).css({'cursor': 'col-resize'});
+ $(nThTarget).removeClass( tableHeaderClassname );
+ $(nThTarget).addClass( tableHeaderHoverClassname );
+ }
+ else {
+ $(nThTarget).css({'cursor': 'pointer'});
+ $(nThTarget).removeClass( tableHeaderHoverClassname );
+ $(nThTarget).addClass( tableHeaderClassname );
+ }
+ }
+ } );
+ }
+
+ $(nTh)
+ .on( 'mousedown.ColReorder', function (e) {
+ e.preventDefault();
+ if (e.which == 1) {
+ that._fnMouseDown.call( that, e, nTh, i );
+ }
+ } )
+ .on( 'touchstart.ColReorder', function (e) {
+ that._fnMouseDown.call( that, e, nTh, i );
+ } );
+ },
+
+
+ /**
+ * Mouse down on a TH element in the table header
+ * @method _fnMouseDown
+ * @param event e Mouse event
+ * @param element nTh TH element to be dragged
+ * @param i The column that's resized/dragged
+ * @returns void
+ * @private
+ */
+ "_fnMouseDown": function ( e, nTh, i )
+ {
+ var
+ that = this,
+ aoColumns = this.s.dt.aoColumns;
+
+
+ function addEventsHandler() {
+ /* Add event handlers to the document */
+ $(document)
+ .on( 'mousemove.ColReorder touchmove.ColReorder', function (e) {
+ // Added index of the call being dragged or resized.
+ that._fnMouseMove.call( that, e, i);
+ } )
+ .on( 'mouseup.ColReorder touchend.ColReorder', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ that._fnMouseUp.call( that, e, i );
+ } );
+ }
+
+ /* are we resizing a column ? */
+ if ($(nTh).css('cursor') == 'col-resize') {
+ this.s.mouse.startX = e.pageX;
+ this.s.mouse.startWidth = $(nTh).width();
+ this.s.mouse.resizeElem = $(nTh);
+
+ var nThNext = $(nTh).next();
+ this.s.mouse.nextStartWidth = $(nThNext).width();
+ that.dom.resize = true;
+ // Disable column sorting in order to avoid issues when finishing column resizing.
+ aoColumns[i].CRbSortableCache = aoColumns[i].bSortable;
+ aoColumns[i].bSortable = false;
+ // Disable Autowidth feature (now the user is in charge of setting column width so keeping this enabled looses changes after operations).
+ this.s.dt.oFeatures.bAutoWidth = false;
+ addEventsHandler();
+ }
+ else if (this.s.allowReorder) {
+ if (aoColumns[i].bReorderable === false) {
+ return false;
+ }
+
+ that.dom.resize = null;
+ /* Store information about the mouse position */
+ var target = $(e.target).closest('th, td');
+ var offset = target.offset();
+ var idx = parseInt( $(nTh).attr('data-column-index'), 10 );
+
+ if ( idx === undefined ) {
+ return;
+ }
+
+ this.s.mouse.startX = this._fnCursorPosition( e, 'pageX' );
+ this.s.mouse.startY = this._fnCursorPosition( e, 'pageY' );
+ this.s.mouse.offsetX = this._fnCursorPosition( e, 'pageX' ) - offset.left;
+ this.s.mouse.offsetY = this._fnCursorPosition( e, 'pageY' ) - offset.top;
+ this.s.mouse.target = this.s.dt.aoColumns[ idx ].nTh;
+ this.s.mouse.targetIndex = idx;
+ this.s.mouse.fromIndex = idx;
+
+ this._fnRegions();
+ addEventsHandler();
+ }
+
+ },
+
+
+ /**
+ * Deal with a mouse move event while dragging a node
+ * @method _fnMouseMove
+ * @param event e Mouse event
+ * @param colResized Index of the column that's being dragged or resized (index within the internal model, not the visible order)
+ * @returns void
+ * @private
+ */
+ "_fnMouseMove": function ( e, colResized )
+ {
+ var that = this;
+
+ // Handle column resizing.
+ if(this.dom.resize) {
+ // Since some columns might have been hidden, find the correct one to resize in the table's body
+ var currentColumnIndex;
+ var visibleColumnIndex = -1;
+ for(currentColumnIndex=-1; currentColumnIndex < this.s.dt.aoColumns.length-1 && currentColumnIndex != colResized; currentColumnIndex++) {
+ if(this.s.dt.aoColumns[currentColumnIndex+1].bVisible) {
+ visibleColumnIndex++;
+ }
+ }
+ visibleColumnIndex++;
+
+ var $nTh = $(this.s.mouse.resizeElem);
+ var $nThNext = $($nTh.next('th'));
+ var $body = $(this.s.dt.nTBody);
+ var $head = $(this.s.dt.nTHead);
+
+ var nThInnerWidth = $nTh.first().innerWidth();
+ var nThNextInnerWidth = $nThNext.first().innerWidth();
+
+ var moveLength = e.pageX-this.s.mouse.startX;
+ var nThWidth = parseInt(this.s.mouse.startWidth + moveLength);
+ var nThNextWidth = parseInt(this.s.mouse.nextStartWidth - moveLength);
+
+ var scrollXEnabled = this.s.dt.oInit.sScrollX !== undefined;
+ var scrollYEnabled = this.s.dt.oInit.sScrollY !== undefined;
+
+ // Smart scrolling is not enabled.
+ if(!scrollXEnabled && !scrollYEnabled) {
+ if(moveLength < 0) {
+ // Hack to calculate the minimum width of the column based on contents.
+ $nTh.width('1%');
+ var minNThWidth = $nTh.width();
+ $nTh.width(this.s.mouse.startWidth);
+
+ if(nThWidth >= minNThWidth) {
+ $nTh.width(nThWidth);
+ }
+ else {
+ $nTh.width(minNThWidth);
+ }
+ }
+ else {
+ // Hack to calculate the minimum width of the column based on contents.
+ $nThNext.width('1%');
+ var minNThNextWidth = $nThNext.width();
+ $nThNext.width(this.s.mouse.nextStartWidth);
+
+ if(nThNextInnerWidth <= minNThNextWidth) { return; }
+
+ $nTh.width(nThWidth);
+ }
+ }
+ // Smart scrolling is enabled.
+ else {
+ // Keep the current table's width (used in case sScrollX is enabled to resize the whole table, giving an Excel-like behavior)
+ var $scrollHead = $(this.s.dt.nScrollHead);
+ var $scrollBody = $(this.s.dt.nScrollBody);
+
+ // Keep the current table's width (used in case sScrollX is enabled to resize the whole table, giving an Excel-like behavior)
+ if(scrollXEnabled) {
+ var $scrollHeadInner = $scrollHead.find('div.dataTables_scrollHeadInner');
+ var $scrollHeadTableWrapper = $(this.s.dt.nTableWrapper);
+ if((this.table_size === undefined || this.table_size < 0) && $scrollHeadTableWrapper.length > 0) {
+ this.table_size = $($scrollHead[0].childNodes[0].childNodes[0]).width();
+ }
+
+ if(this.table_size + moveLength > $scrollHeadTableWrapper.width()) {
+ // Resize the header too (if sScrollX is enabled).
+ if($scrollHeadTableWrapper.length) {
+ $($scrollHeadTableWrapper[0].childNodes[0].childNodes[0]).width(this.table_size + moveLength);
+ }
+ $($scrollHeadInner).width(this.table_size + moveLength);
+
+ // Resize the table too (if sScrollX is enabled).
+ var new_table_size = this.table_size;
+ if(this.table_size + moveLength > $scrollHeadTableWrapper.width()) {
+ new_table_size += moveLength;
+ }
+ $scrollBody.closest('.dataTables_scroll').find('.dataTables_scrollHead table').first().width(new_table_size);
+ $scrollBody.closest('.dataTables_scroll').find('.dataTables_scrollBody table').first().width(new_table_size);
+ }
+ }
+
+ // When resizing the header, also resize the table's body (when enabling the Scroller, the table's header and
+ // body are split into different tables, so the column resizing doesn't work anymore).
+ // Since some columns might have been hidden, find the correct one to resize in the table's body
+
+ // Get the first row in the scrollBody thead.
+ var $scrollBodyTheadTr = $scrollBody.find('thead').first('tr');
+ var $scrollBodyNTh = $scrollBodyTheadTr.find('th:nth-child('+visibleColumnIndex+')');
+ var $scrollBodyNThNext = $scrollBodyTheadTr.find('th:nth-child('+(visibleColumnIndex+1)+')');
+ var $scrollBodyThSizing = $scrollBodyNTh.find('.dataTables_sizing');
+ var $scrollBodyThNextSizing = $scrollBodyNThNext.find('.dataTables_sizing');
+
+ // Get the first row in the scrollBody tbody.
+ var $scrollBodyTbodyTr = $scrollBody.find('tbody').first('tr');
+ var $scrollBodyNTd = $scrollBodyTbodyTr.find('td:nth-child('+visibleColumnIndex+')');
+ var $scrollBodyNTdNext = $scrollBodyTbodyTr.find('td:nth-child('+(visibleColumnIndex+1)+')');
+
+ if(moveLength < 0) {
+ // Hack to calculate the minimum width of the column based on contents.
+ $scrollBodyNTh.width('1%');
+ var minNThWidth = $scrollBodyNTh.width();
+ $scrollBodyNTh.width(this.s.mouse.startWidth);
+
+ if(nThWidth >= minNThWidth) {
+ $nTh.width(nThWidth);
+ $scrollBodyNTh.width(nThWidth);
+ }
+ else {
+ $nTh.width(minNThWidth);
+ $scrollBodyNTh.width(minNThWidth);
+ }
+ }
+ else {
+ // Hack to calculate the minimum width of the column based on contents.
+ $scrollBodyNThNext.width('1%');
+ var minNThNextWidth = $scrollBodyNThNext.width();
+ $scrollBodyNThNext.width(this.s.mouse.nextStartWidth);
+
+ if($scrollBodyNThNext.width() <= minNThNextWidth) { return; }
+
+ $nTh.width(nThWidth);
+ $scrollBodyNTh.width(nThWidth);
+ }
+ }
+ }
+ else if(this.s.allowReorder) {
+ if( this.dom.drag === null ) {
+ /* Only create the drag element if the mouse has moved a specific distance from the start
+ * point - this allows the user to make small mouse movements when sorting and not have a
+ * possibly confusing drag element showing up
+ */
+ if ( Math.pow(
+ Math.pow(this._fnCursorPosition( e, 'pageX') - this.s.mouse.startX, 2) +
+ Math.pow(this._fnCursorPosition( e, 'pageY') - this.s.mouse.startY, 2), 0.5 ) < 5 )
+ {
+ return;
+ }
+ this._fnCreateDragNode();
+ }
+
+ /* Position the element - we respect where in the element the click occured */
+ this.dom.drag.css( {
+ left: this._fnCursorPosition( e, 'pageX' ) - this.s.mouse.offsetX,
+ top: this._fnCursorPosition( e, 'pageY' ) - this.s.mouse.offsetY
+ } );
+
+ /* Based on the current mouse position, calculate where the insert should go */
+ var bSet = false;
+ var lastToIndex = this.s.mouse.toIndex;
+
+ for ( var i=1, iLen=this.s.aoTargets.length ; i<iLen ; i++ )
+ {
+ if ( this._fnCursorPosition(e, 'pageX') < this.s.aoTargets[i-1].x + ((this.s.aoTargets[i].x-this.s.aoTargets[i-1].x)/2) )
+ {
+ this.dom.pointer.css( 'left', this.s.aoTargets[i-1].x );
+ this.s.mouse.toIndex = this.s.aoTargets[i-1].to;
+ bSet = true;
+ break;
+ }
+ }
+
+ // The insert element wasn't positioned in the array (less than
+ // operator), so we put it at the end
+ if ( !bSet )
+ {
+ this.dom.pointer.css( 'left', this.s.aoTargets[this.s.aoTargets.length-1].x );
+ this.s.mouse.toIndex = this.s.aoTargets[this.s.aoTargets.length-1].to;
+ }
+
+ // Perform reordering if realtime updating is on and the column has moved
+ if ( this.s.init.bRealtime && lastToIndex !== this.s.mouse.toIndex ) {
+ this.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex, false );
+ this.s.mouse.fromIndex = this.s.mouse.toIndex;
+ this._fnRegions();
+ }
+ }
+ },
+
+
+ /**
+ * Finish off the mouse drag and insert the column where needed
+ * @method _fnMouseUp
+ * @param event e Mouse event
+ * @param colResized The index of the column that was just dragged or resized (index within the internal model, not the visible order).
+ * @returns void
+ * @private
+ */
+ "_fnMouseUp": function ( e, colResized)
+ {
+ var that = this;
+
+ $(document).off('.ColReorder');
+
+ if ( this.dom.drag !== null )
+ {
+ /* Remove the guide elements */
+ this.dom.drag.remove();
+ this.dom.pointer.remove();
+ this.dom.drag = null;
+ this.dom.pointer = null;
+
+ /* Actually do the reorder */
+ this.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex, true );
+ this._fnSetColumnIndexes();
+
+ /* When scrolling we need to recalculate the column sizes to allow for the shift */
+ if ( this.s.dt.oScroll.sX !== "" || this.s.dt.oScroll.sY !== "" )
+ {
+ this.s.dt.oInstance.fnAdjustColumnSizing( false );
+ }
+
+ this.s.dt.oInstance.trigger('column-reorder.dt.mouseup', [ this.s.dt ] );
+
+ /* Save the state */
+ this.s.dt.oInstance.oApi._fnSaveState( this.s.dt );
+
+ if ( this.s.reorderCallback !== null )
+ {
+ this.s.reorderCallback.call( this );
+ }
+ }
+ else if(this.dom.resize !== null) {
+ var i;
+ var j;
+ var currentColumn;
+ var nextVisibleColumnIndex;
+ var previousVisibleColumnIndex;
+ var scrollXEnabled;
+
+ //Re-enable column sorting
+ this.s.dt.aoColumns[colResized].bSortable = this.s.dt.aoColumns[colResized].CRbSortableCache;
+
+ //Save the new resized column's width
+ this.s.dt.aoColumns[colResized].sWidth = $(this.s.mouse.resizeElem).width() + "px";
+
+ //If other columns might have changed their size, save their size too
+ scrollXEnabled = this.s.dt.oInit.sScrollX === "" ? false : true;
+ if(!scrollXEnabled) {
+ //The colResized index (internal model) here might not match the visible index since some columns might have been hidden
+ for(nextVisibleColumnIndex=colResized+1; nextVisibleColumnIndex < this.s.dt.aoColumns.length; nextVisibleColumnIndex++) {
+ if(this.s.dt.aoColumns[nextVisibleColumnIndex].bVisible) {
+ break;
+ }
+ }
+
+ for(previousVisibleColumnIndex=colResized-1; previousVisibleColumnIndex >= 0; previousVisibleColumnIndex--) {
+ if(this.s.dt.aoColumns[previousVisibleColumnIndex].bVisible) {
+ break;
+ }
+ }
+
+ if(this.s.dt.aoColumns.length > nextVisibleColumnIndex) {
+ this.s.dt.aoColumns[nextVisibleColumnIndex].sWidth = $(this.s.mouse.resizeElem).next().width() + "px";
+ }
+ // The column resized is the right-most, so save the sizes of all the columns at the left
+ else {
+ currentColumn = this.s.mouse.resizeElem;
+ for(i = previousVisibleColumnIndex; i > 0; i--) {
+ if(this.s.dt.aoColumns[i].bVisible) {
+ currentColumn = $(currentColumn).prev();
+ this.s.dt.aoColumns[i].sWidth = $(currentColumn).width() + "px";
+ }
+ }
+ }
+ }
+
+ // Update the internal storage of the table's width (in case we changed it because the user resized some column and scrollX was enabled
+ if(scrollXEnabled && $(this.s.dt.nScrollHead, this.s.dt.nTableWrapper) != undefined){
+ if($(this.s.dt.nScrollHead, this.s.dt.nTableWrapper).length > 0)
+ this.table_size = $($(this.s.dt.nScrollHead, this.s.dt.nTableWrapper)[0].childNodes[0].childNodes[0]).width();
+ }
+
+ this.s.dt.oInstance.trigger('column-resize.dt.mouseup', [ this.s.dt ] );
+
+ /* Save the state */
+ this.s.dt.oInstance.oApi._fnSaveState( this.s.dt );
+
+ /* When scrolling we need to recalculate the column sizes to allow for the shift */
+ if (scrollXEnabled && (this.s.dt.oScroll.sX !== "" || this.s.dt.oScroll.sY !== "" ))
+ {
+ this.s.dt.oInstance.fnAdjustColumnSizing( false );
+ }
+
+ if ( this.s.resizeCallback !== null )
+ {
+ this.s.resizeCallback.call( this );
+ }
+ }
+
+ this.dom.resize = null;
+ return false;
+ },
+
+
+ /**
+ * Calculate a cached array with the points of the column inserts, and the
+ * 'to' points
+ * @method _fnRegions
+ * @returns void
+ * @private
+ */
+ "_fnRegions": function ()
+ {
+ var aoColumns = this.s.dt.aoColumns;
+
+ this.s.aoTargets.splice( 0, this.s.aoTargets.length );
+
+ this.s.aoTargets.push( {
+ "x": $(this.s.dt.nTable).offset().left,
+ "to": 0
+ } );
+
+ var iToPoint = 0;
+ var total = this.s.aoTargets[0].x;
+
+ for ( var i=0, iLen=aoColumns.length ; i<iLen ; i++ )
+ {
+ /* For the column / header in question, we want it's position to remain the same if the
+ * position is just to it's immediate left or right, so we only increment the counter for
+ * other columns
+ */
+ if ( i != this.s.mouse.fromIndex )
+ {
+ iToPoint++;
+ }
+
+ if ( aoColumns[i].bVisible && aoColumns[i].nTh.style.display !=='none' )
+ {
+ total += $(aoColumns[i].nTh).outerWidth();
+
+ this.s.aoTargets.push( {
+ "x": total,
+ "to": iToPoint
+ } );
+ }
+ }
+
+ /* Disallow columns for being reordered by drag and drop, counting right to left */
+ if ( this.s.fixedRight !== 0 )
+ {
+ this.s.aoTargets.splice( this.s.aoTargets.length - this.s.fixedRight );
+ }
+
+ /* Disallow columns for being reordered by drag and drop, counting left to right */
+ if ( this.s.fixed !== 0 )
+ {
+ this.s.aoTargets.splice( 0, this.s.fixed );
+ }
+ },
+
+
+ /**
+ * Copy the TH element that is being drags so the user has the idea that they are actually
+ * moving it around the page.
+ * @method _fnCreateDragNode
+ * @returns void
+ * @private
+ */
+ "_fnCreateDragNode": function ()
+ {
+ var scrolling = this.s.dt.oScroll.sX !== "" || this.s.dt.oScroll.sY !== "";
+
+ var origCell = this.s.dt.aoColumns[ this.s.mouse.targetIndex ].nTh;
+ var origTr = origCell.parentNode;
+ var origThead = origTr.parentNode;
+ var origTable = origThead.parentNode;
+ var cloneCell = $(origCell).clone();
+
+ // This is a slightly odd combination of jQuery and DOM, but it is the
+ // fastest and least resource intensive way I could think of cloning
+ // the table with just a single header cell in it.
+ this.dom.drag = $(origTable.cloneNode(false))
+ .addClass( this.s.classNameClonedTable )
+ .append(
+ $(origThead.cloneNode(false)).append(
+ $(origTr.cloneNode(false)).append(
+ cloneCell[0]
+ )
+ )
+ )
+ .css( {
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ width: $(origCell).outerWidth(),
+ height: $(origCell).outerHeight()
+ } )
+ .appendTo( 'body' );
+
+ this.dom.pointer = $('<div></div>')
+ .addClass( this.s.classNamePointer )
+ .css( {
+ position: 'absolute',
+ top: scrolling ?
+ $('div.dataTables_scroll', this.s.dt.nTableWrapper).offset().top :
+ $(this.s.dt.nTable).offset().top,
+ height : scrolling ?
+ $('div.dataTables_scroll', this.s.dt.nTableWrapper).height() :
+ $(this.s.dt.nTable).height()
+ } )
+ .appendTo( 'body' );
+ },
+
+
+ /**
+ * Add a data attribute to the column headers, so we know the index of
+ * the row to be reordered. This allows fast detection of the index, and
+ * for this plug-in to work with FixedHeader which clones the nodes.
+ * @private
+ */
+ "_fnSetColumnIndexes": function ()
+ {
+ $.each( this.s.dt.aoColumns, function (i, column) {
+ $(column.nTh).attr('data-column-index', i);
+ } );
+ },
+
+
+ /**
+ * Get cursor position regardless of mouse or touch input
+ * @param {Event} e jQuery Event
+ * @param {string} prop Property to get
+ * @return {number} Value
+ */
+ _fnCursorPosition: function ( e, prop ) {
+ if ( e.type.indexOf('touch') !== -1 ) {
+ return e.originalEvent.touches[0][ prop ];
+ }
+ return e[ prop ];
+ }
+} );
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Static parameters
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/**
+ * ColReorder default settings for initialisation
+ * @namespace
+ * @static
+ */
+ColReorder.defaults = {
+ /**
+ * Predefined ordering for the columns that will be applied automatically
+ * on initialisation. If not specified then the order that the columns are
+ * found to be in the HTML is the order used.
+ * @type array
+ * @default null
+ * @static
+ */
+ aiOrder: null,
+
+ /**
+ * Redraw the table's column ordering as the end user draws the column
+ * (`true`) or wait until the mouse is released (`false` - default). Note
+ * that this will perform a redraw on each reordering, which involves an
+ * Ajax request each time if you are using server-side processing in
+ * DataTables.
+ * @type boolean
+ * @default false
+ * @static
+ */
+ bRealtime: true,
+
+ /**
+ * Indicate how many columns should be fixed in position (counting from the
+ * left). This will typically be 1 if used, but can be as high as you like.
+ * @type int
+ * @default 0
+ * @static
+ */
+ iFixedColumnsLeft: 0,
+
+ /**
+ * As `iFixedColumnsRight` but counting from the right.
+ * @type int
+ * @default 0
+ * @static
+ */
+ iFixedColumnsRight: 0,
+
+ /**
+ * Callback function that is fired when columns are reordered. The `column-
+ * reorder` event is preferred over this callback
+ * @type function():void
+ * @default null
+ * @static
+ */
+ fnReorderCallback: null,
+
+ /**
+ * Callback function that is fired when columns are resized. The `column-
+ * resize` event is preferred over this callback
+ * @type function():void
+ * @default null
+ * @static
+ */
+ fnResizeCallback: null,
+
+ /**
+ * Allow Reorder functionnality
+ * @property allowReorder
+ * @type boolean
+ * @default true
+ */
+ allowReorder: true,
+
+ /**
+ * Allow Resize functionnality
+ * @property allowResize
+ * @type boolean
+ * @default true
+ */
+ allowResize: true,
+
+ /**
+ * Classname added to cloned element
+ * @type string
+ * @default 'DTCR_clonedTable'
+ * @static
+ */
+ classNameClonedTable: 'DTCR_clonedTable',
+
+ /**
+ * Classname added to the cloned element wrapper
+ * @type string
+ * @default 'DTCR_pointer'
+ * @static
+ */
+ classNamePointer: 'DTCR_pointer',
+
+ /**
+ * Classname added to the resizable th
+ * @type string
+ * @default 'DTCR_tableHeader'
+ * @static
+ */
+ classNameTableHeader: 'DTCR_tableHeader',
+
+ /**
+ * Classname added to the resizable th when hovered
+ * @type string
+ * @default 'DTCR_tableHeaderHover'
+ * @static
+ */
+ classNameTableHeaderHover: 'DTCR_tableHeaderHover'
+};
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Constants
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/**
+ * ColReorder version
+ * @constant version
+ * @type String
+ * @default As code
+ */
+ColReorder.version = "1.3.3";
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables interfaces
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Expose
+$.fn.dataTable.ColReorder = ColReorder;
+$.fn.DataTable.ColReorder = ColReorder;
+
+
+// Register a new feature with DataTables
+if ( typeof $.fn.dataTable == "function" &&
+ typeof $.fn.dataTableExt.fnVersionCheck == "function" &&
+ $.fn.dataTableExt.fnVersionCheck('1.10.8') )
+{
+ $.fn.dataTableExt.aoFeatures.push( {
+ "fnInit": function( settings ) {
+ var table = settings.oInstance;
+
+ if ( ! settings._colReorder ) {
+ var dtInit = settings.oInit;
+ var opts = dtInit.colReorder || dtInit.oColReorder || {};
+
+ new ColReorder( settings, opts );
+ }
+ else {
+ table.oApi._fnLog( settings, 1, "ColReorder attempted to initialise twice. Ignoring second" );
+ }
+
+ return null; /* No node for DataTables to insert */
+ },
+ "cFeature": "R",
+ "sFeature": "ColReorder"
+ } );
+}
+else {
+ alert( "Warning: ColReorder requires DataTables 1.10.8 or greater - www.datatables.net/download");
+}
+
+
+// Attach a listener to the document which listens for DataTables initialisation
+// events so we can automatically initialise
+$(document).on( 'preInit.dt.colReorder', function (e, settings) {
+ if ( e.namespace !== 'dt' ) {
+ return;
+ }
+
+ var init = settings.oInit.colReorder;
+ var defaults = DataTable.defaults.colReorder;
+
+ if ( init || defaults ) {
+ var opts = $.extend( {}, init, defaults );
+
+ if ( init !== false ) {
+ new ColReorder( settings, opts );
+ }
+ }
+} );
+
+
+// API augmentation
+$.fn.dataTable.Api.register( 'colReorder.reset()', function () {
+ return this.iterator( 'table', function ( ctx ) {
+ ctx._colReorder.fnReset();
+ } );
+} );
+
+$.fn.dataTable.Api.register( 'colReorder.order()', function ( set, original ) {
+ if ( set ) {
+ return this.iterator( 'table', function ( ctx ) {
+ ctx._colReorder.fnOrder( set, original );
+ } );
+ }
+
+ return this.context.length ?
+ this.context[0]._colReorder.fnOrder() :
+ null;
+} );
+
+$.fn.dataTable.Api.register( 'colReorder.transpose()', function ( idx, dir ) {
+ return this.context.length && this.context[0]._colReorder ?
+ this.context[0]._colReorder.fnTranspose( idx, dir ) :
+ idx;
+} );
+
+
+return ColReorder;
+}));
Property changes on: base3.10/src/main/webapp/js/com/ColReorderWithResize.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/socket.js
===================================================================
--- base3.10/src/main/webapp/js/com/socket.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/socket.js (revision 7)
@@ -0,0 +1,110 @@
+/**
+ * socket 설정
+ */
+
+//전역변수 선언-모든 홈페이지에서 사용 할 수 있게 index에 저장
+var socket = null;
+$(function() {
+ connectWs();
+
+ // 결재문서 알림
+ $(".approval em").click(function() {
+ var emCnt = $(this).html();
+ $('.message em').html('새로운 알림이 <strong>' + emCnt + '</strong>건 있습니다.');
+ $('.message .message_btn a').off('click').on('click', function() {
+ fncPopupOpen("/ntcn/pop/list.do", 800, 700, null, "Y");
+ });
+ $(".message").addClass("show");
+ });
+ $(".message p").click(function() {
+ $(".message").removeClass("show");
+ });
+});
+
+function connectWs() {
+ sock = new SockJS('/socket');
+ socket = sock;
+
+ sock.onopen = function() {
+ };
+ // 메시지 받았을 때
+ sock.onmessage = function(evt) {
+ // 알림 창
+ var data = evt.data.split('||');
+ var ntcnId = data[0];
+ var msg = data[1];
+ var url = data[2];
+ // 알림 카운트 증가
+ var emCnt = parseInt($(".approval em").html());
+ $(".approval em").html(emCnt+1);
+
+ $('.message em').html(msg);
+ $('.message .message_btn a').off('click').on('click', function() {
+ // 알림 메시지 확인
+ confirmSocketMsg(ntcnId, url);
+ });
+ $('.message').addClass('show');
+ setTimeout(function() {
+ $('.message').removeClass('show');
+ }, 30000);
+ };
+
+ sock.onclose = function() {
+ /* setTimeout(function(){conntectWs();} , 1000); */
+ };
+
+ sock.onerror = function(err) {
+ };
+}
+
+/**
+ * 알림 메시지 보내기
+ * @param cmd 메시지 유형
+ * @param caller 보내는 사람 uniqId
+ * @param receiver 받는 사람 uniqId 배열
+ * @param url 바로가기 url
+ * @param msg 보낼 메시지
+ * @returns
+ */
+function sendSocketMsg(cmd, caller, receiver, url, msg) {
+ var receiverList = receiver;
+ if( typeof receiver == "string" ) {
+ receiverList = receiver.split(',');
+ }
+ if (socket) {
+ var params = {
+ cmd: cmd
+ , caller: caller
+ , receiver: receiverList
+ , url: url
+ , param1: msg
+ };
+ var socketMsg = JSON.stringify(params);
+ socket.send(socketMsg);
+ }
+}
+
+/**
+ * 알림 메시지 확인
+ * @param arrNtcnId 알람ID 배열
+ * @param returnUrl 확인 후 이동 할 URL
+ * @returns
+ */
+function confirmSocketMsg(arrNtcnId, returnUrl) {
+ var ntcnIdList = arrNtcnId;
+ if( typeof arrNtcnId == "string" ) {
+ ntcnIdList = arrNtcnId.split(',');
+ }
+
+ var url = '/ntcn/cnfirm/updateJson.do';
+ var params = {};
+ for( var i=0; i < ntcnIdList.length; i++ ) {
+ params['ntcnList[' + i + '].ntcnId'] = ntcnIdList[i];
+ params['ntcnList[' + i + '].cnfirmAt'] = 'Y';
+ }
+ $.post(url, params, function(data) {
+ if( returnUrl != null && returnUrl != '' ) {
+ location.href = returnUrl;
+ }
+ });
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/socket.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/sockjs.min.js
===================================================================
--- base3.10/src/main/webapp/js/com/sockjs.min.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/sockjs.min.js (revision 7)
@@ -0,0 +1,3 @@
+/* sockjs-client v1.4.0 | http://sockjs.org | MIT license */
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).SockJS=t()}}(function(){return function i(s,a,l){function c(e,t){if(!a[e]){if(!s[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(u)return u(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var o=a[e]={exports:{}};s[e][0].call(o.exports,function(t){return c(s[e][1][t]||t)},o,o.exports,i,s,a,l)}return a[e].exports}for(var u="function"==typeof require&&require,t=0;t<l.length;t++)c(l[t]);return c}({1:[function(n,r,t){(function(t){"use strict";var e=n("./transport-list");r.exports=n("./main")(e),"_sockjs_onload"in t&&setTimeout(t._sockjs_onload,1)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./main":14,"./transport-list":16}],2:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./event");function i(){o.call(this),this.initEvent("close",!1,!1),this.wasClean=!1,this.code=0,this.reason=""}r(i,o),e.exports=i},{"./event":4,"inherits":54}],3:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./eventtarget");function i(){o.call(this)}r(i,o),i.prototype.removeAllListeners=function(t){t?delete this._listeners[t]:this._listeners={}},i.prototype.once=function(e,n){var r=this,o=!1;this.on(e,function t(){r.removeListener(e,t),o||(o=!0,n.apply(this,arguments))})},i.prototype.emit=function(){var t=arguments[0],e=this._listeners[t];if(e){for(var n=arguments.length,r=new Array(n-1),o=1;o<n;o++)r[o-1]=arguments[o];for(var i=0;i<e.length;i++)e[i].apply(this,r)}},i.prototype.on=i.prototype.addListener=o.prototype.addEventListener,i.prototype.removeListener=o.prototype.removeEventListener,e.exports.EventEmitter=i},{"./eventtarget":5,"inherits":54}],4:[function(t,e,n){"use strict";function r(t){this.type=t}r.prototype.initEvent=function(t,e,n){return this.type=t,this.bubbles=e,this.cancelable=n,this.timeStamp=+new Date,this},r.prototype.stopPropagation=function(){},r.prototype.preventDefault=function(){},r.CAPTURING_PHASE=1,r.AT_TARGET=2,r.BUBBLING_PHASE=3,e.exports=r},{}],5:[function(t,e,n){"use strict";function r(){this._listeners={}}r.prototype.addEventListener=function(t,e){t in this._listeners||(this._listeners[t]=[]);var n=this._listeners[t];-1===n.indexOf(e)&&(n=n.concat([e])),this._listeners[t]=n},r.prototype.removeEventListener=function(t,e){var n=this._listeners[t];if(n){var r=n.indexOf(e);-1===r||(1<n.length?this._listeners[t]=n.slice(0,r).concat(n.slice(r+1)):delete this._listeners[t])}},r.prototype.dispatchEvent=function(){var t=arguments[0],e=t.type,n=1===arguments.length?[t]:Array.apply(null,arguments);if(this["on"+e]&&this["on"+e].apply(this,n),e in this._listeners)for(var r=this._listeners[e],o=0;o<r.length;o++)r[o].apply(this,n)},e.exports=r},{}],6:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./event");function i(t){o.call(this),this.initEvent("message",!1,!1),this.data=t}r(i,o),e.exports=i},{"./event":4,"inherits":54}],7:[function(t,e,n){"use strict";var r=t("json3"),o=t("./utils/iframe");function i(t){(this._transport=t).on("message",this._transportMessage.bind(this)),t.on("close",this._transportClose.bind(this))}i.prototype._transportClose=function(t,e){o.postMessage("c",r.stringify([t,e]))},i.prototype._transportMessage=function(t){o.postMessage("t",t)},i.prototype._send=function(t){this._transport.send(t)},i.prototype._close=function(){this._transport.close(),this._transport.removeAllListeners()},e.exports=i},{"./utils/iframe":47,"json3":55}],8:[function(t,e,n){"use strict";var f=t("./utils/url"),r=t("./utils/event"),h=t("json3"),d=t("./facade"),o=t("./info-iframe-receiver"),p=t("./utils/iframe"),m=t("./location"),v=function(){};e.exports=function(l,t){var c,u={};t.forEach(function(t){t.facadeTransport&&(u[t.facadeTransport.transportName]=t.facadeTransport)}),u[o.transportName]=o,l.bootstrap_iframe=function(){var a;p.currentWindowId=m.hash.slice(1);r.attachEvent("message",function(e){if(e.source===parent&&(void 0===c&&(c=e.origin),e.origin===c)){var n;try{n=h.parse(e.data)}catch(t){return void v("bad json",e.data)}if(n.windowId===p.currentWindowId)switch(n.type){case"s":var t;try{t=h.parse(n.data)}catch(t){v("bad json",n.data);break}var r=t[0],o=t[1],i=t[2],s=t[3];if(v(r,o,i,s),r!==l.version)throw new Error('Incompatible SockJS! Main site uses: "'+r+'", the iframe: "'+l.version+'".');if(!f.isOriginEqual(i,m.href)||!f.isOriginEqual(s,m.href))throw new Error("Can't connect to different domain from within an iframe. ("+m.href+", "+i+", "+s+")");a=new d(new u[o](i,s));break;case"m":a._send(n.data);break;case"c":a&&a._close(),a=null}}}),p.postMessage("s")}}},{"./facade":7,"./info-iframe-receiver":10,"./location":13,"./utils/event":46,"./utils/iframe":47,"./utils/url":52,"debug":void 0,"json3":55}],9:[function(t,e,n){"use strict";var r=t("events").EventEmitter,o=t("inherits"),s=t("json3"),a=t("./utils/object"),l=function(){};function i(t,e){r.call(this);var o=this,i=+new Date;this.xo=new e("GET",t),this.xo.once("finish",function(t,e){var n,r;if(200===t){if(r=+new Date-i,e)try{n=s.parse(e)}catch(t){l("bad json",e)}a.isObject(n)||(n={})}o.emit("finish",n,r),o.removeAllListeners()})}o(i,r),i.prototype.close=function(){this.removeAllListeners(),this.xo.close()},e.exports=i},{"./utils/object":49,"debug":void 0,"events":3,"inherits":54,"json3":55}],10:[function(t,e,n){"use strict";var r=t("inherits"),o=t("events").EventEmitter,i=t("json3"),s=t("./transport/sender/xhr-local"),a=t("./info-ajax");function l(t){var n=this;o.call(this),this.ir=new a(t,s),this.ir.once("finish",function(t,e){n.ir=null,n.emit("message",i.stringify([t,e]))})}r(l,o),l.transportName="iframe-info-receiver",l.prototype.close=function(){this.ir&&(this.ir.close(),this.ir=null),this.removeAllListeners()},e.exports=l},{"./info-ajax":9,"./transport/sender/xhr-local":37,"events":3,"inherits":54,"json3":55}],11:[function(n,o,t){(function(r){"use strict";var i=n("events").EventEmitter,t=n("inherits"),s=n("json3"),a=n("./utils/event"),l=n("./transport/iframe"),c=n("./info-iframe-receiver"),u=function(){};function e(e,n){var o=this;i.call(this);function t(){var t=o.ifr=new l(c.transportName,n,e);t.once("message",function(e){if(e){var t;try{t=s.parse(e)}catch(t){return u("bad json",e),o.emit("finish"),void o.close()}var n=t[0],r=t[1];o.emit("finish",n,r)}o.close()}),t.once("close",function(){o.emit("finish"),o.close()})}r.document.body?t():a.attachEvent("load",t)}t(e,i),e.enabled=function(){return l.enabled()},e.prototype.close=function(){this.ifr&&this.ifr.close(),this.removeAllListeners(),this.ifr=null},o.exports=e}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./info-iframe-receiver":10,"./transport/iframe":22,"./utils/event":46,"debug":void 0,"events":3,"inherits":54,"json3":55}],12:[function(t,e,n){"use strict";var r=t("events").EventEmitter,o=t("inherits"),i=t("./utils/url"),s=t("./transport/sender/xdr"),a=t("./transport/sender/xhr-cors"),l=t("./transport/sender/xhr-local"),c=t("./transport/sender/xhr-fake"),u=t("./info-iframe"),f=t("./info-ajax"),h=function(){};function d(t,e){h(t);var n=this;r.call(this),setTimeout(function(){n.doXhr(t,e)},0)}o(d,r),d._getReceiver=function(t,e,n){return n.sameOrigin?new f(e,l):a.enabled?new f(e,a):s.enabled&&n.sameScheme?new f(e,s):u.enabled()?new u(t,e):new f(e,c)},d.prototype.doXhr=function(t,e){var n=this,r=i.addPath(t,"/info");h("doXhr",r),this.xo=d._getReceiver(t,r,e),this.timeoutRef=setTimeout(function(){h("timeout"),n._cleanup(!1),n.emit("finish")},d.timeout),this.xo.once("finish",function(t,e){h("finish",t,e),n._cleanup(!0),n.emit("finish",t,e)})},d.prototype._cleanup=function(t){h("_cleanup"),clearTimeout(this.timeoutRef),this.timeoutRef=null,!t&&this.xo&&this.xo.close(),this.xo=null},d.prototype.close=function(){h("close"),this.removeAllListeners(),this._cleanup(!1)},d.timeout=8e3,e.exports=d},{"./info-ajax":9,"./info-iframe":11,"./transport/sender/xdr":34,"./transport/sender/xhr-cors":35,"./transport/sender/xhr-fake":36,"./transport/sender/xhr-local":37,"./utils/url":52,"debug":void 0,"events":3,"inherits":54}],13:[function(t,e,n){(function(t){"use strict";e.exports=t.location||{origin:"http://localhost:80",protocol:"http:",host:"localhost",port:80,href:"http://localhost/",hash:""}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],14:[function(_,E,t){(function(i){"use strict";_("./shims");var r,l=_("url-parse"),t=_("inherits"),s=_("json3"),c=_("./utils/random"),e=_("./utils/escape"),u=_("./utils/url"),a=_("./utils/event"),n=_("./utils/transport"),o=_("./utils/object"),f=_("./utils/browser"),h=_("./utils/log"),d=_("./event/event"),p=_("./event/eventtarget"),m=_("./location"),v=_("./event/close"),b=_("./event/trans-message"),y=_("./info-receiver"),g=function(){};function w(t,e,n){if(!(this instanceof w))return new w(t,e,n);if(arguments.length<1)throw new TypeError("Failed to construct 'SockJS: 1 argument required, but only 0 present");p.call(this),this.readyState=w.CONNECTING,this.extensions="",this.protocol="",(n=n||{}).protocols_whitelist&&h.warn("'protocols_whitelist' is DEPRECATED. Use 'transports' instead."),this._transportsWhitelist=n.transports,this._transportOptions=n.transportOptions||{},this._timeout=n.timeout||0;var r=n.sessionId||8;if("function"==typeof r)this._generateSessionId=r;else{if("number"!=typeof r)throw new TypeError("If sessionId is used in the options, it needs to be a number or a function.");this._generateSessionId=function(){return c.string(r)}}this._server=n.server||c.numberString(1e3);var o=new l(t);if(!o.host||!o.protocol)throw new SyntaxError("The URL '"+t+"' is invalid");if(o.hash)throw new SyntaxError("The URL must not contain a fragment");if("http:"!==o.protocol&&"https:"!==o.protocol)throw new SyntaxError("The URL's scheme must be either 'http:' or 'https:'. '"+o.protocol+"' is not allowed.");var i="https:"===o.protocol;if("https:"===m.protocol&&!i)throw new Error("SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS");e?Array.isArray(e)||(e=[e]):e=[];var s=e.sort();s.forEach(function(t,e){if(!t)throw new SyntaxError("The protocols entry '"+t+"' is invalid.");if(e<s.length-1&&t===s[e+1])throw new SyntaxError("The protocols entry '"+t+"' is duplicated.")});var a=u.getOrigin(m.href);this._origin=a?a.toLowerCase():null,o.set("pathname",o.pathname.replace(/\/+$/,"")),this.url=o.href,g("using url",this.url),this._urlInfo={nullOrigin:!f.hasDomain(),sameOrigin:u.isOriginEqual(this.url,m.href),sameScheme:u.isSchemeEqual(this.url,m.href)},this._ir=new y(this.url,this._urlInfo),this._ir.once("finish",this._receiveInfo.bind(this))}function x(t){return 1e3===t||3e3<=t&&t<=4999}t(w,p),w.prototype.close=function(t,e){if(t&&!x(t))throw new Error("InvalidAccessError: Invalid code");if(e&&123<e.length)throw new SyntaxError("reason argument has an invalid length");if(this.readyState!==w.CLOSING&&this.readyState!==w.CLOSED){this._close(t||1e3,e||"Normal closure",!0)}},w.prototype.send=function(t){if("string"!=typeof t&&(t=""+t),this.readyState===w.CONNECTING)throw new Error("InvalidStateError: The connection has not been established yet");this.readyState===w.OPEN&&this._transport.send(e.quote(t))},w.version=_("./version"),w.CONNECTING=0,w.OPEN=1,w.CLOSING=2,w.CLOSED=3,w.prototype._receiveInfo=function(t,e){if(g("_receiveInfo",e),this._ir=null,t){this._rto=this.countRTO(e),this._transUrl=t.base_url?t.base_url:this.url,t=o.extend(t,this._urlInfo),g("info",t);var n=r.filterToEnabled(this._transportsWhitelist,t);this._transports=n.main,g(this._transports.length+" enabled transports"),this._connect()}else this._close(1002,"Cannot connect to server")},w.prototype._connect=function(){for(var t=this._transports.shift();t;t=this._transports.shift()){if(g("attempt",t.transportName),t.needBody&&(!i.document.body||void 0!==i.document.readyState&&"complete"!==i.document.readyState&&"interactive"!==i.document.readyState))return g("waiting for body"),this._transports.unshift(t),void a.attachEvent("load",this._connect.bind(this));var e=Math.max(this._timeout,this._rto*t.roundTrips||5e3);this._transportTimeoutId=setTimeout(this._transportTimeout.bind(this),e),g("using timeout",e);var n=u.addPath(this._transUrl,"/"+this._server+"/"+this._generateSessionId()),r=this._transportOptions[t.transportName];g("transport url",n);var o=new t(n,this._transUrl,r);return o.on("message",this._transportMessage.bind(this)),o.once("close",this._transportClose.bind(this)),o.transportName=t.transportName,void(this._transport=o)}this._close(2e3,"All transports failed",!1)},w.prototype._transportTimeout=function(){g("_transportTimeout"),this.readyState===w.CONNECTING&&(this._transport&&this._transport.close(),this._transportClose(2007,"Transport timed out"))},w.prototype._transportMessage=function(t){g("_transportMessage",t);var e,n=this,r=t.slice(0,1),o=t.slice(1);switch(r){case"o":return void this._open();case"h":return this.dispatchEvent(new d("heartbeat")),void g("heartbeat",this.transport)}if(o)try{e=s.parse(o)}catch(t){g("bad json",o)}if(void 0!==e)switch(r){case"a":Array.isArray(e)&&e.forEach(function(t){g("message",n.transport,t),n.dispatchEvent(new b(t))});break;case"m":g("message",this.transport,e),this.dispatchEvent(new b(e));break;case"c":Array.isArray(e)&&2===e.length&&this._close(e[0],e[1],!0)}else g("empty payload",o)},w.prototype._transportClose=function(t,e){g("_transportClose",this.transport,t,e),this._transport&&(this._transport.removeAllListeners(),this._transport=null,this.transport=null),x(t)||2e3===t||this.readyState!==w.CONNECTING?this._close(t,e):this._connect()},w.prototype._open=function(){g("_open",this._transport&&this._transport.transportName,this.readyState),this.readyState===w.CONNECTING?(this._transportTimeoutId&&(clearTimeout(this._transportTimeoutId),this._transportTimeoutId=null),this.readyState=w.OPEN,this.transport=this._transport.transportName,this.dispatchEvent(new d("open")),g("connected",this.transport)):this._close(1006,"Server lost session")},w.prototype._close=function(e,n,r){g("_close",this.transport,e,n,r,this.readyState);var o=!1;if(this._ir&&(o=!0,this._ir.close(),this._ir=null),this._transport&&(this._transport.close(),this._transport=null,this.transport=null),this.readyState===w.CLOSED)throw new Error("InvalidStateError: SockJS has already been closed");this.readyState=w.CLOSING,setTimeout(function(){this.readyState=w.CLOSED,o&&this.dispatchEvent(new d("error"));var t=new v("close");t.wasClean=r||!1,t.code=e||1e3,t.reason=n,this.dispatchEvent(t),this.onmessage=this.onclose=this.onerror=null,g("disconnected")}.bind(this),0)},w.prototype.countRTO=function(t){return 100<t?4*t:300+t},E.exports=function(t){return r=n(t),_("./iframe-bootstrap")(w,t),w}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./event/close":2,"./event/event":4,"./event/eventtarget":5,"./event/trans-message":6,"./iframe-bootstrap":8,"./info-receiver":12,"./location":13,"./shims":15,"./utils/browser":44,"./utils/escape":45,"./utils/event":46,"./utils/log":48,"./utils/object":49,"./utils/random":50,"./utils/transport":51,"./utils/url":52,"./version":53,"debug":void 0,"inherits":54,"json3":55,"url-parse":58}],15:[function(t,e,n){"use strict";function a(t){return"[object Function]"===i.toString.call(t)}function l(t){return"[object String]"===f.call(t)}var o,u=Array.prototype,i=Object.prototype,r=Function.prototype,s=String.prototype,c=u.slice,f=i.toString,h=Object.defineProperty&&function(){try{return Object.defineProperty({},"x",{}),!0}catch(t){return!1}}();o=h?function(t,e,n,r){!r&&e in t||Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:!0,value:n})}:function(t,e,n,r){!r&&e in t||(t[e]=n)};function d(t,e,n){for(var r in e)i.hasOwnProperty.call(e,r)&&o(t,r,e[r],n)}function p(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return Object(t)}function m(){}d(r,{bind:function(e){var n=this;if(!a(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var r=c.call(arguments,1),t=Math.max(0,n.length-r.length),o=[],i=0;i<t;i++)o.push("$"+i);var s=Function("binder","return function ("+o.join(",")+"){ return binder.apply(this, arguments); }")(function(){if(this instanceof s){var t=n.apply(this,r.concat(c.call(arguments)));return Object(t)===t?t:this}return n.apply(e,r.concat(c.call(arguments)))});return n.prototype&&(m.prototype=n.prototype,s.prototype=new m,m.prototype=null),s}}),d(Array,{isArray:function(t){return"[object Array]"===f.call(t)}});var v,b,y,g=Object("a"),w="a"!==g[0]||!(0 in g);d(u,{forEach:function(t,e){var n=p(this),r=w&&l(this)?this.split(""):n,o=e,i=-1,s=r.length>>>0;if(!a(t))throw new TypeError;for(;++i<s;)i in r&&t.call(o,r[i],i,n)}},(v=u.forEach,y=b=!0,v&&(v.call("foo",function(t,e,n){"object"!=typeof n&&(b=!1)}),v.call([1],function(){y="string"==typeof this},"x")),!(v&&b&&y)));var x=Array.prototype.indexOf&&-1!==[0,1].indexOf(1,2);d(u,{indexOf:function(t,e){var n=w&&l(this)?this.split(""):p(this),r=n.length>>>0;if(!r)return-1;var o=0;for(1<arguments.length&&(o=function(t){var e=+t;return e!=e?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(0<e||-1)*Math.floor(Math.abs(e))),e}(e)),o=0<=o?o:Math.max(0,r+o);o<r;o++)if(o in n&&n[o]===t)return o;return-1}},x);var _,E=s.split;2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||1<".".split(/()()/).length?(_=void 0===/()??/.exec("")[1],s.split=function(t,e){var n=this;if(void 0===t&&0===e)return[];if("[object RegExp]"!==f.call(t))return E.call(this,t,e);var r,o,i,s,a=[],l=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.extended?"x":"")+(t.sticky?"y":""),c=0;for(t=new RegExp(t.source,l+"g"),n+="",_||(r=new RegExp("^"+t.source+"$(?!\\s)",l)),e=void 0===e?-1>>>0:function(t){return t>>>0}(e);(o=t.exec(n))&&!(c<(i=o.index+o[0].length)&&(a.push(n.slice(c,o.index)),!_&&1<o.length&&o[0].replace(r,function(){for(var t=1;t<arguments.length-2;t++)void 0===arguments[t]&&(o[t]=void 0)}),1<o.length&&o.index<n.length&&u.push.apply(a,o.slice(1)),s=o[0].length,c=i,a.length>=e));)t.lastIndex===o.index&&t.lastIndex++;return c===n.length?!s&&t.test("")||a.push(""):a.push(n.slice(c)),a.length>e?a.slice(0,e):a}):"0".split(void 0,0).length&&(s.split=function(t,e){return void 0===t&&0===e?[]:E.call(this,t,e)});var j=s.substr,S="".substr&&"b"!=="0b".substr(-1);d(s,{substr:function(t,e){return j.call(this,t<0&&(t=this.length+t)<0?0:t,e)}},S)},{}],16:[function(t,e,n){"use strict";e.exports=[t("./transport/websocket"),t("./transport/xhr-streaming"),t("./transport/xdr-streaming"),t("./transport/eventsource"),t("./transport/lib/iframe-wrap")(t("./transport/eventsource")),t("./transport/htmlfile"),t("./transport/lib/iframe-wrap")(t("./transport/htmlfile")),t("./transport/xhr-polling"),t("./transport/xdr-polling"),t("./transport/lib/iframe-wrap")(t("./transport/xhr-polling")),t("./transport/jsonp-polling")]},{"./transport/eventsource":20,"./transport/htmlfile":21,"./transport/jsonp-polling":23,"./transport/lib/iframe-wrap":26,"./transport/websocket":38,"./transport/xdr-polling":39,"./transport/xdr-streaming":40,"./transport/xhr-polling":41,"./transport/xhr-streaming":42}],17:[function(o,f,t){(function(t){"use strict";var i=o("events").EventEmitter,e=o("inherits"),s=o("../../utils/event"),a=o("../../utils/url"),l=t.XMLHttpRequest,c=function(){};function u(t,e,n,r){c(t,e);var o=this;i.call(this),setTimeout(function(){o._start(t,e,n,r)},0)}e(u,i),u.prototype._start=function(t,e,n,r){var o=this;try{this.xhr=new l}catch(t){}if(!this.xhr)return c("no xhr"),this.emit("finish",0,"no xhr support"),void this._cleanup();e=a.addQuery(e,"t="+ +new Date),this.unloadRef=s.unloadAdd(function(){c("unload cleanup"),o._cleanup(!0)});try{this.xhr.open(t,e,!0),this.timeout&&"timeout"in this.xhr&&(this.xhr.timeout=this.timeout,this.xhr.ontimeout=function(){c("xhr timeout"),o.emit("finish",0,""),o._cleanup(!1)})}catch(t){return c("exception",t),this.emit("finish",0,""),void this._cleanup(!1)}if(r&&r.noCredentials||!u.supportsCORS||(c("withCredentials"),this.xhr.withCredentials=!0),r&&r.headers)for(var i in r.headers)this.xhr.setRequestHeader(i,r.headers[i]);this.xhr.onreadystatechange=function(){if(o.xhr){var t,e,n=o.xhr;switch(c("readyState",n.readyState),n.readyState){case 3:try{e=n.status,t=n.responseText}catch(t){}c("status",e),1223===e&&(e=204),200===e&&t&&0<t.length&&(c("chunk"),o.emit("chunk",e,t));break;case 4:e=n.status,c("status",e),1223===e&&(e=204),12005!==e&&12029!==e||(e=0),c("finish",e,n.responseText),o.emit("finish",e,n.responseText),o._cleanup(!1)}}};try{o.xhr.send(n)}catch(t){o.emit("finish",0,""),o._cleanup(!1)}},u.prototype._cleanup=function(t){if(c("cleanup"),this.xhr){if(this.removeAllListeners(),s.unloadDel(this.unloadRef),this.xhr.onreadystatechange=function(){},this.xhr.ontimeout&&(this.xhr.ontimeout=null),t)try{this.xhr.abort()}catch(t){}this.unloadRef=this.xhr=null}},u.prototype.close=function(){c("close"),this._cleanup(!0)},u.enabled=!!l;var n=["Active"].concat("Object").join("X");!u.enabled&&n in t&&(c("overriding xmlhttprequest"),u.enabled=!!new(l=function(){try{return new t[n]("Microsoft.XMLHTTP")}catch(t){return null}}));var r=!1;try{r="withCredentials"in new l}catch(t){}u.supportsCORS=r,f.exports=u}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/event":46,"../../utils/url":52,"debug":void 0,"events":3,"inherits":54}],18:[function(t,e,n){(function(t){e.exports=t.EventSource}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,e){(function(t){"use strict";var e=t.WebSocket||t.MozWebSocket;n.exports=e?function(t){return new e(t)}:void 0}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],20:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./lib/ajax-based"),i=t("./receiver/eventsource"),s=t("./sender/xhr-cors"),a=t("eventsource");function l(t){if(!l.enabled())throw new Error("Transport created when disabled");o.call(this,t,"/eventsource",i,s)}r(l,o),l.enabled=function(){return!!a},l.transportName="eventsource",l.roundTrips=2,e.exports=l},{"./lib/ajax-based":24,"./receiver/eventsource":29,"./sender/xhr-cors":35,"eventsource":18,"inherits":54}],21:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./receiver/htmlfile"),i=t("./sender/xhr-local"),s=t("./lib/ajax-based");function a(t){if(!o.enabled)throw new Error("Transport created when disabled");s.call(this,t,"/htmlfile",o,i)}r(a,s),a.enabled=function(t){return o.enabled&&t.sameOrigin},a.transportName="htmlfile",a.roundTrips=2,e.exports=a},{"./lib/ajax-based":24,"./receiver/htmlfile":30,"./sender/xhr-local":37,"inherits":54}],22:[function(t,e,n){"use strict";var r=t("inherits"),o=t("json3"),i=t("events").EventEmitter,s=t("../version"),a=t("../utils/url"),l=t("../utils/iframe"),c=t("../utils/event"),u=t("../utils/random"),f=function(){};function h(t,e,n){if(!h.enabled())throw new Error("Transport created when disabled");i.call(this);var r=this;this.origin=a.getOrigin(n),this.baseUrl=n,this.transUrl=e,this.transport=t,this.windowId=u.string(8);var o=a.addPath(n,"/iframe.html")+"#"+this.windowId;f(t,e,o),this.iframeObj=l.createIframe(o,function(t){f("err callback"),r.emit("close",1006,"Unable to load an iframe ("+t+")"),r.close()}),this.onmessageCallback=this._message.bind(this),c.attachEvent("message",this.onmessageCallback)}r(h,i),h.prototype.close=function(){if(f("close"),this.removeAllListeners(),this.iframeObj){c.detachEvent("message",this.onmessageCallback);try{this.postMessage("c")}catch(t){}this.iframeObj.cleanup(),this.iframeObj=null,this.onmessageCallback=this.iframeObj=null}},h.prototype._message=function(e){if(f("message",e.data),a.isOriginEqual(e.origin,this.origin)){var n;try{n=o.parse(e.data)}catch(t){return void f("bad json",e.data)}if(n.windowId===this.windowId)switch(n.type){case"s":this.iframeObj.loaded(),this.postMessage("s",o.stringify([s,this.transport,this.transUrl,this.baseUrl]));break;case"t":this.emit("message",n.data);break;case"c":var t;try{t=o.parse(n.data)}catch(t){return void f("bad json",n.data)}this.emit("close",t[0],t[1]),this.close()}else f("mismatched window id",n.windowId,this.windowId)}else f("not same origin",e.origin,this.origin)},h.prototype.postMessage=function(t,e){f("postMessage",t,e),this.iframeObj.post(o.stringify({windowId:this.windowId,type:t,data:e||""}),this.origin)},h.prototype.send=function(t){f("send",t),this.postMessage("m",t)},h.enabled=function(){return l.iframeEnabled},h.transportName="iframe",h.roundTrips=2,e.exports=h},{"../utils/event":46,"../utils/iframe":47,"../utils/random":50,"../utils/url":52,"../version":53,"debug":void 0,"events":3,"inherits":54,"json3":55}],23:[function(s,a,t){(function(t){"use strict";var e=s("inherits"),n=s("./lib/sender-receiver"),r=s("./receiver/jsonp"),o=s("./sender/jsonp");function i(t){if(!i.enabled())throw new Error("Transport created when disabled");n.call(this,t,"/jsonp",o,r)}e(i,n),i.enabled=function(){return!!t.document},i.transportName="jsonp-polling",i.roundTrips=1,i.needBody=!0,a.exports=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./lib/sender-receiver":28,"./receiver/jsonp":31,"./sender/jsonp":33,"inherits":54}],24:[function(t,e,n){"use strict";var r=t("inherits"),a=t("../../utils/url"),o=t("./sender-receiver"),l=function(){};function i(t,e,n,r){o.call(this,t,e,function(s){return function(t,e,n){l("create ajax sender",t,e);var r={};"string"==typeof e&&(r.headers={"Content-type":"text/plain"});var o=a.addPath(t,"/xhr_send"),i=new s("POST",o,e,r);return i.once("finish",function(t){if(l("finish",t),i=null,200!==t&&204!==t)return n(new Error("http status "+t));n()}),function(){l("abort"),i.close(),i=null;var t=new Error("Aborted");t.code=1e3,n(t)}}}(r),n,r)}r(i,o),e.exports=i},{"../../utils/url":52,"./sender-receiver":28,"debug":void 0,"inherits":54}],25:[function(t,e,n){"use strict";var r=t("inherits"),o=t("events").EventEmitter,i=function(){};function s(t,e){i(t),o.call(this),this.sendBuffer=[],this.sender=e,this.url=t}r(s,o),s.prototype.send=function(t){i("send",t),this.sendBuffer.push(t),this.sendStop||this.sendSchedule()},s.prototype.sendScheduleWait=function(){i("sendScheduleWait");var t,e=this;this.sendStop=function(){i("sendStop"),e.sendStop=null,clearTimeout(t)},t=setTimeout(function(){i("timeout"),e.sendStop=null,e.sendSchedule()},25)},s.prototype.sendSchedule=function(){i("sendSchedule",this.sendBuffer.length);var e=this;if(0<this.sendBuffer.length){var t="["+this.sendBuffer.join(",")+"]";this.sendStop=this.sender(this.url,t,function(t){e.sendStop=null,t?(i("error",t),e.emit("close",t.code||1006,"Sending error: "+t),e.close()):e.sendScheduleWait()}),this.sendBuffer=[]}},s.prototype._cleanup=function(){i("_cleanup"),this.removeAllListeners()},s.prototype.close=function(){i("close"),this._cleanup(),this.sendStop&&(this.sendStop(),this.sendStop=null)},e.exports=s},{"debug":void 0,"events":3,"inherits":54}],26:[function(t,n,e){(function(o){"use strict";var e=t("inherits"),i=t("../iframe"),s=t("../../utils/object");n.exports=function(r){function t(t,e){i.call(this,r.transportName,t,e)}return e(t,i),t.enabled=function(t,e){if(!o.document)return!1;var n=s.extend({},e);return n.sameOrigin=!0,r.enabled(n)&&i.enabled()},t.transportName="iframe-"+r.transportName,t.needBody=!0,t.roundTrips=i.roundTrips+r.roundTrips-1,t.facadeTransport=r,t}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/object":49,"../iframe":22,"inherits":54}],27:[function(t,e,n){"use strict";var r=t("inherits"),o=t("events").EventEmitter,i=function(){};function s(t,e,n){i(e),o.call(this),this.Receiver=t,this.receiveUrl=e,this.AjaxObject=n,this._scheduleReceiver()}r(s,o),s.prototype._scheduleReceiver=function(){i("_scheduleReceiver");var n=this,r=this.poll=new this.Receiver(this.receiveUrl,this.AjaxObject);r.on("message",function(t){i("message",t),n.emit("message",t)}),r.once("close",function(t,e){i("close",t,e,n.pollIsClosing),n.poll=r=null,n.pollIsClosing||("network"===e?n._scheduleReceiver():(n.emit("close",t||1006,e),n.removeAllListeners()))})},s.prototype.abort=function(){i("abort"),this.removeAllListeners(),this.pollIsClosing=!0,this.poll&&this.poll.abort()},e.exports=s},{"debug":void 0,"events":3,"inherits":54}],28:[function(t,e,n){"use strict";var r=t("inherits"),a=t("../../utils/url"),l=t("./buffered-sender"),c=t("./polling"),u=function(){};function o(t,e,n,r,o){var i=a.addPath(t,e);u(i);var s=this;l.call(this,t,n),this.poll=new c(r,i,o),this.poll.on("message",function(t){u("poll message",t),s.emit("message",t)}),this.poll.once("close",function(t,e){u("poll close",t,e),s.poll=null,s.emit("close",t,e),s.close()})}r(o,l),o.prototype.close=function(){l.prototype.close.call(this),u("close"),this.removeAllListeners(),this.poll&&(this.poll.abort(),this.poll=null)},e.exports=o},{"../../utils/url":52,"./buffered-sender":25,"./polling":27,"debug":void 0,"inherits":54}],29:[function(t,e,n){"use strict";var r=t("inherits"),o=t("events").EventEmitter,i=t("eventsource"),s=function(){};function a(t){s(t),o.call(this);var n=this,r=this.es=new i(t);r.onmessage=function(t){s("message",t.data),n.emit("message",decodeURI(t.data))},r.onerror=function(t){s("error",r.readyState,t);var e=2!==r.readyState?"network":"permanent";n._cleanup(),n._close(e)}}r(a,o),a.prototype.abort=function(){s("abort"),this._cleanup(),this._close("user")},a.prototype._cleanup=function(){s("cleanup");var t=this.es;t&&(t.onmessage=t.onerror=null,t.close(),this.es=null)},a.prototype._close=function(t){s("close",t);var e=this;setTimeout(function(){e.emit("close",null,t),e.removeAllListeners()},200)},e.exports=a},{"debug":void 0,"events":3,"eventsource":18,"inherits":54}],30:[function(n,u,t){(function(r){"use strict";var t=n("inherits"),o=n("../../utils/iframe"),i=n("../../utils/url"),s=n("events").EventEmitter,a=n("../../utils/random"),l=function(){};function c(t){l(t),s.call(this);var e=this;o.polluteGlobalNamespace(),this.id="a"+a.string(6),t=i.addQuery(t,"c="+decodeURIComponent(o.WPrefix+"."+this.id)),l("using htmlfile",c.htmlfileEnabled);var n=c.htmlfileEnabled?o.createHtmlfile:o.createIframe;r[o.WPrefix][this.id]={start:function(){l("start"),e.iframeObj.loaded()},message:function(t){l("message",t),e.emit("message",t)},stop:function(){l("stop"),e._cleanup(),e._close("network")}},this.iframeObj=n(t,function(){l("callback"),e._cleanup(),e._close("permanent")})}t(c,s),c.prototype.abort=function(){l("abort"),this._cleanup(),this._close("user")},c.prototype._cleanup=function(){l("_cleanup"),this.iframeObj&&(this.iframeObj.cleanup(),this.iframeObj=null),delete r[o.WPrefix][this.id]},c.prototype._close=function(t){l("_close",t),this.emit("close",null,t),this.removeAllListeners()},c.htmlfileEnabled=!1;var e=["Active"].concat("Object").join("X");if(e in r)try{c.htmlfileEnabled=!!new r[e]("htmlfile")}catch(t){}c.enabled=c.htmlfileEnabled||o.iframeEnabled,u.exports=c}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/iframe":47,"../../utils/random":50,"../../utils/url":52,"debug":void 0,"events":3,"inherits":54}],31:[function(e,n,t){(function(i){"use strict";var r=e("../../utils/iframe"),s=e("../../utils/random"),a=e("../../utils/browser"),o=e("../../utils/url"),t=e("inherits"),l=e("events").EventEmitter,c=function(){};function u(t){c(t);var e=this;l.call(this),r.polluteGlobalNamespace(),this.id="a"+s.string(6);var n=o.addQuery(t,"c="+encodeURIComponent(r.WPrefix+"."+this.id));i[r.WPrefix][this.id]=this._callback.bind(this),this._createScript(n),this.timeoutId=setTimeout(function(){c("timeout"),e._abort(new Error("JSONP script loaded abnormally (timeout)"))},u.timeout)}t(u,l),u.prototype.abort=function(){if(c("abort"),i[r.WPrefix][this.id]){var t=new Error("JSONP user aborted read");t.code=1e3,this._abort(t)}},u.timeout=35e3,u.scriptErrorTimeout=1e3,u.prototype._callback=function(t){c("_callback",t),this._cleanup(),this.aborting||(t&&(c("message",t),this.emit("message",t)),this.emit("close",null,"network"),this.removeAllListeners())},u.prototype._abort=function(t){c("_abort",t),this._cleanup(),this.aborting=!0,this.emit("close",t.code,t.message),this.removeAllListeners()},u.prototype._cleanup=function(){if(c("_cleanup"),clearTimeout(this.timeoutId),this.script2&&(this.script2.parentNode.removeChild(this.script2),this.script2=null),this.script){var t=this.script;t.parentNode.removeChild(t),t.onreadystatechange=t.onerror=t.onload=t.onclick=null,this.script=null}delete i[r.WPrefix][this.id]},u.prototype._scriptError=function(){c("_scriptError");var t=this;this.errorTimer||(this.errorTimer=setTimeout(function(){t.loadedOkay||t._abort(new Error("JSONP script loaded abnormally (onerror)"))},u.scriptErrorTimeout))},u.prototype._createScript=function(t){c("_createScript",t);var e,n=this,r=this.script=i.document.createElement("script");if(r.id="a"+s.string(8),r.src=t,r.type="text/javascript",r.charset="UTF-8",r.onerror=this._scriptError.bind(this),r.onload=function(){c("onload"),n._abort(new Error("JSONP script loaded abnormally (onload)"))},r.onreadystatechange=function(){if(c("onreadystatechange",r.readyState),/loaded|closed/.test(r.readyState)){if(r&&r.htmlFor&&r.onclick){n.loadedOkay=!0;try{r.onclick()}catch(t){}}r&&n._abort(new Error("JSONP script loaded abnormally (onreadystatechange)"))}},void 0===r.async&&i.document.attachEvent)if(a.isOpera())(e=this.script2=i.document.createElement("script")).text="try{var a = document.getElementById('"+r.id+"'); if(a)a.onerror();}catch(x){};",r.async=e.async=!1;else{try{r.htmlFor=r.id,r.event="onclick"}catch(t){}r.async=!0}void 0!==r.async&&(r.async=!0);var o=i.document.getElementsByTagName("head")[0];o.insertBefore(r,o.firstChild),e&&o.insertBefore(e,o.firstChild)},n.exports=u}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/browser":44,"../../utils/iframe":47,"../../utils/random":50,"../../utils/url":52,"debug":void 0,"events":3,"inherits":54}],32:[function(t,e,n){"use strict";var r=t("inherits"),o=t("events").EventEmitter,i=function(){};function s(t,e){i(t),o.call(this);var r=this;this.bufferPosition=0,this.xo=new e("POST",t,null),this.xo.on("chunk",this._chunkHandler.bind(this)),this.xo.once("finish",function(t,e){i("finish",t,e),r._chunkHandler(t,e),r.xo=null;var n=200===t?"network":"permanent";i("close",n),r.emit("close",null,n),r._cleanup()})}r(s,o),s.prototype._chunkHandler=function(t,e){if(i("_chunkHandler",t),200===t&&e)for(var n=-1;;this.bufferPosition+=n+1){var r=e.slice(this.bufferPosition);if(-1===(n=r.indexOf("\n")))break;var o=r.slice(0,n);o&&(i("message",o),this.emit("message",o))}},s.prototype._cleanup=function(){i("_cleanup"),this.removeAllListeners()},s.prototype.abort=function(){i("abort"),this.xo&&(this.xo.close(),i("close"),this.emit("close",null,"user"),this.xo=null),this._cleanup()},e.exports=s},{"debug":void 0,"events":3,"inherits":54}],33:[function(t,e,n){(function(s){"use strict";var a,l,c=t("../../utils/random"),u=t("../../utils/url"),f=function(){};e.exports=function(t,e,n){f(t,e),a||(f("createForm"),(a=s.document.createElement("form")).style.display="none",a.style.position="absolute",a.method="POST",a.enctype="application/x-www-form-urlencoded",a.acceptCharset="UTF-8",(l=s.document.createElement("textarea")).name="d",a.appendChild(l),s.document.body.appendChild(a));var r="a"+c.string(8);a.target=r,a.action=u.addQuery(u.addPath(t,"/jsonp_send"),"i="+r);var o=function(e){f("createIframe",e);try{return s.document.createElement('<iframe name="'+e+'">')}catch(t){var n=s.document.createElement("iframe");return n.name=e,n}}(r);o.id=r,o.style.display="none",a.appendChild(o);try{l.value=e}catch(t){}a.submit();function i(t){f("completed",r,t),o.onerror&&(o.onreadystatechange=o.onerror=o.onload=null,setTimeout(function(){f("cleaning up",r),o.parentNode.removeChild(o),o=null},500),l.value="",n(t))}return o.onerror=function(){f("onerror",r),i()},o.onload=function(){f("onload",r),i()},o.onreadystatechange=function(t){f("onreadystatechange",r,o.readyState,t),"complete"===o.readyState&&i()},function(){f("aborted",r),i(new Error("Aborted"))}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/random":50,"../../utils/url":52,"debug":void 0}],34:[function(r,c,t){(function(i){"use strict";var o=r("events").EventEmitter,t=r("inherits"),s=r("../../utils/event"),e=r("../../utils/browser"),a=r("../../utils/url"),l=function(){};function n(t,e,n){l(t,e);var r=this;o.call(this),setTimeout(function(){r._start(t,e,n)},0)}t(n,o),n.prototype._start=function(t,e,n){l("_start");var r=this,o=new i.XDomainRequest;e=a.addQuery(e,"t="+ +new Date),o.onerror=function(){l("onerror"),r._error()},o.ontimeout=function(){l("ontimeout"),r._error()},o.onprogress=function(){l("progress",o.responseText),r.emit("chunk",200,o.responseText)},o.onload=function(){l("load"),r.emit("finish",200,o.responseText),r._cleanup(!1)},this.xdr=o,this.unloadRef=s.unloadAdd(function(){r._cleanup(!0)});try{this.xdr.open(t,e),this.timeout&&(this.xdr.timeout=this.timeout),this.xdr.send(n)}catch(t){this._error()}},n.prototype._error=function(){this.emit("finish",0,""),this._cleanup(!1)},n.prototype._cleanup=function(t){if(l("cleanup",t),this.xdr){if(this.removeAllListeners(),s.unloadDel(this.unloadRef),this.xdr.ontimeout=this.xdr.onerror=this.xdr.onprogress=this.xdr.onload=null,t)try{this.xdr.abort()}catch(t){}this.unloadRef=this.xdr=null}},n.prototype.close=function(){l("close"),this._cleanup(!0)},n.enabled=!(!i.XDomainRequest||!e.hasDomain()),c.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../utils/browser":44,"../../utils/event":46,"../../utils/url":52,"debug":void 0,"events":3,"inherits":54}],35:[function(t,e,n){"use strict";var r=t("inherits"),o=t("../driver/xhr");function i(t,e,n,r){o.call(this,t,e,n,r)}r(i,o),i.enabled=o.enabled&&o.supportsCORS,e.exports=i},{"../driver/xhr":17,"inherits":54}],36:[function(t,e,n){"use strict";var r=t("events").EventEmitter;function o(){var t=this;r.call(this),this.to=setTimeout(function(){t.emit("finish",200,"{}")},o.timeout)}t("inherits")(o,r),o.prototype.close=function(){clearTimeout(this.to)},o.timeout=2e3,e.exports=o},{"events":3,"inherits":54}],37:[function(t,e,n){"use strict";var r=t("inherits"),o=t("../driver/xhr");function i(t,e,n){o.call(this,t,e,n,{noCredentials:!0})}r(i,o),i.enabled=o.enabled,e.exports=i},{"../driver/xhr":17,"inherits":54}],38:[function(t,e,n){"use strict";var i=t("../utils/event"),s=t("../utils/url"),r=t("inherits"),a=t("events").EventEmitter,l=t("./driver/websocket"),c=function(){};function u(t,e,n){if(!u.enabled())throw new Error("Transport created when disabled");a.call(this),c("constructor",t);var r=this,o=s.addPath(t,"/websocket");o="https"===o.slice(0,5)?"wss"+o.slice(5):"ws"+o.slice(4),this.url=o,this.ws=new l(this.url,[],n),this.ws.onmessage=function(t){c("message event",t.data),r.emit("message",t.data)},this.unloadRef=i.unloadAdd(function(){c("unload"),r.ws.close()}),this.ws.onclose=function(t){c("close event",t.code,t.reason),r.emit("close",t.code,t.reason),r._cleanup()},this.ws.onerror=function(t){c("error event",t),r.emit("close",1006,"WebSocket connection broken"),r._cleanup()}}r(u,a),u.prototype.send=function(t){var e="["+t+"]";c("send",e),this.ws.send(e)},u.prototype.close=function(){c("close");var t=this.ws;this._cleanup(),t&&t.close()},u.prototype._cleanup=function(){c("_cleanup");var t=this.ws;t&&(t.onmessage=t.onclose=t.onerror=null),i.unloadDel(this.unloadRef),this.unloadRef=this.ws=null,this.removeAllListeners()},u.enabled=function(){return c("enabled"),!!l},u.transportName="websocket",u.roundTrips=2,e.exports=u},{"../utils/event":46,"../utils/url":52,"./driver/websocket":19,"debug":void 0,"events":3,"inherits":54}],39:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./lib/ajax-based"),i=t("./xdr-streaming"),s=t("./receiver/xhr"),a=t("./sender/xdr");function l(t){if(!a.enabled)throw new Error("Transport created when disabled");o.call(this,t,"/xhr",s,a)}r(l,o),l.enabled=i.enabled,l.transportName="xdr-polling",l.roundTrips=2,e.exports=l},{"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xdr":34,"./xdr-streaming":40,"inherits":54}],40:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./lib/ajax-based"),i=t("./receiver/xhr"),s=t("./sender/xdr");function a(t){if(!s.enabled)throw new Error("Transport created when disabled");o.call(this,t,"/xhr_streaming",i,s)}r(a,o),a.enabled=function(t){return!t.cookie_needed&&!t.nullOrigin&&(s.enabled&&t.sameScheme)},a.transportName="xdr-streaming",a.roundTrips=2,e.exports=a},{"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xdr":34,"inherits":54}],41:[function(t,e,n){"use strict";var r=t("inherits"),o=t("./lib/ajax-based"),i=t("./receiver/xhr"),s=t("./sender/xhr-cors"),a=t("./sender/xhr-local");function l(t){if(!a.enabled&&!s.enabled)throw new Error("Transport created when disabled");o.call(this,t,"/xhr",i,s)}r(l,o),l.enabled=function(t){return!t.nullOrigin&&(!(!a.enabled||!t.sameOrigin)||s.enabled)},l.transportName="xhr-polling",l.roundTrips=2,e.exports=l},{"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xhr-cors":35,"./sender/xhr-local":37,"inherits":54}],42:[function(l,c,t){(function(t){"use strict";var e=l("inherits"),n=l("./lib/ajax-based"),r=l("./receiver/xhr"),o=l("./sender/xhr-cors"),i=l("./sender/xhr-local"),s=l("../utils/browser");function a(t){if(!i.enabled&&!o.enabled)throw new Error("Transport created when disabled");n.call(this,t,"/xhr_streaming",r,o)}e(a,n),a.enabled=function(t){return!t.nullOrigin&&(!s.isOpera()&&o.enabled)},a.transportName="xhr-streaming",a.roundTrips=2,a.needBody=!!t.document,c.exports=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../utils/browser":44,"./lib/ajax-based":24,"./receiver/xhr":32,"./sender/xhr-cors":35,"./sender/xhr-local":37,"inherits":54}],43:[function(t,e,n){(function(n){"use strict";n.crypto&&n.crypto.getRandomValues?e.exports.randomBytes=function(t){var e=new Uint8Array(t);return n.crypto.getRandomValues(e),e}:e.exports.randomBytes=function(t){for(var e=new Array(t),n=0;n<t;n++)e[n]=Math.floor(256*Math.random());return e}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],44:[function(t,e,n){(function(t){"use strict";e.exports={isOpera:function(){return t.navigator&&/opera/i.test(t.navigator.userAgent)},isKonqueror:function(){return t.navigator&&/konqueror/i.test(t.navigator.userAgent)},hasDomain:function(){if(!t.document)return!0;try{return!!t.document.domain}catch(t){return!1}}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],45:[function(t,e,n){"use strict";var r,o=t("json3"),i=/[\x00-\x1f\ud800-\udfff\ufffe\uffff\u0300-\u0333\u033d-\u0346\u034a-\u034c\u0350-\u0352\u0357-\u0358\u035c-\u0362\u0374\u037e\u0387\u0591-\u05af\u05c4\u0610-\u0617\u0653-\u0654\u0657-\u065b\u065d-\u065e\u06df-\u06e2\u06eb-\u06ec\u0730\u0732-\u0733\u0735-\u0736\u073a\u073d\u073f-\u0741\u0743\u0745\u0747\u07eb-\u07f1\u0951\u0958-\u095f\u09dc-\u09dd\u09df\u0a33\u0a36\u0a59-\u0a5b\u0a5e\u0b5c-\u0b5d\u0e38-\u0e39\u0f43\u0f4d\u0f52\u0f57\u0f5c\u0f69\u0f72-\u0f76\u0f78\u0f80-\u0f83\u0f93\u0f9d\u0fa2\u0fa7\u0fac\u0fb9\u1939-\u193a\u1a17\u1b6b\u1cda-\u1cdb\u1dc0-\u1dcf\u1dfc\u1dfe\u1f71\u1f73\u1f75\u1f77\u1f79\u1f7b\u1f7d\u1fbb\u1fbe\u1fc9\u1fcb\u1fd3\u1fdb\u1fe3\u1feb\u1fee-\u1fef\u1ff9\u1ffb\u1ffd\u2000-\u2001\u20d0-\u20d1\u20d4-\u20d7\u20e7-\u20e9\u2126\u212a-\u212b\u2329-\u232a\u2adc\u302b-\u302c\uaab2-\uaab3\uf900-\ufa0d\ufa10\ufa12\ufa15-\ufa1e\ufa20\ufa22\ufa25-\ufa26\ufa2a-\ufa2d\ufa30-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4e\ufff0-\uffff]/g;e.exports={quote:function(t){var e=o.stringify(t);return i.lastIndex=0,i.test(e)?(r=r||function(t){var e,n={},r=[];for(e=0;e<65536;e++)r.push(String.fromCharCode(e));return t.lastIndex=0,r.join("").replace(t,function(t){return n[t]="\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4),""}),t.lastIndex=0,n}(i),e.replace(i,function(t){return r[t]})):e}}},{"json3":55}],46:[function(t,e,n){(function(n){"use strict";var r=t("./random"),o={},i=!1,s=n.chrome&&n.chrome.app&&n.chrome.app.runtime;e.exports={attachEvent:function(t,e){void 0!==n.addEventListener?n.addEventListener(t,e,!1):n.document&&n.attachEvent&&(n.document.attachEvent("on"+t,e),n.attachEvent("on"+t,e))},detachEvent:function(t,e){void 0!==n.addEventListener?n.removeEventListener(t,e,!1):n.document&&n.detachEvent&&(n.document.detachEvent("on"+t,e),n.detachEvent("on"+t,e))},unloadAdd:function(t){if(s)return null;var e=r.string(8);return o[e]=t,i&&setTimeout(this.triggerUnloadCallbacks,0),e},unloadDel:function(t){t in o&&delete o[t]},triggerUnloadCallbacks:function(){for(var t in o)o[t](),delete o[t]}};s||e.exports.attachEvent("unload",function(){i||(i=!0,e.exports.triggerUnloadCallbacks())})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./random":50}],47:[function(e,p,t){(function(f){"use strict";var h=e("./event"),n=e("json3"),t=e("./browser"),d=function(){};p.exports={WPrefix:"_jp",currentWindowId:null,polluteGlobalNamespace:function(){p.exports.WPrefix in f||(f[p.exports.WPrefix]={})},postMessage:function(t,e){f.parent!==f?f.parent.postMessage(n.stringify({windowId:p.exports.currentWindowId,type:t,data:e||""}),"*"):d("Cannot postMessage, no parent window.",t,e)},createIframe:function(t,e){function n(){d("unattach"),clearTimeout(i);try{a.onload=null}catch(t){}a.onerror=null}function r(){d("cleanup"),a&&(n(),setTimeout(function(){a&&a.parentNode.removeChild(a),a=null},0),h.unloadDel(s))}function o(t){d("onerror",t),a&&(r(),e(t))}var i,s,a=f.document.createElement("iframe");return a.src=t,a.style.display="none",a.style.position="absolute",a.onerror=function(){o("onerror")},a.onload=function(){d("onload"),clearTimeout(i),i=setTimeout(function(){o("onload timeout")},2e3)},f.document.body.appendChild(a),i=setTimeout(function(){o("timeout")},15e3),s=h.unloadAdd(r),{post:function(t,e){d("post",t,e),setTimeout(function(){try{a&&a.contentWindow&&a.contentWindow.postMessage(t,e)}catch(t){}},0)},cleanup:r,loaded:n}},createHtmlfile:function(t,e){function n(){clearTimeout(i),a.onerror=null}function r(){c&&(n(),h.unloadDel(s),a.parentNode.removeChild(a),a=c=null,CollectGarbage())}function o(t){d("onerror",t),c&&(r(),e(t))}var i,s,a,l=["Active"].concat("Object").join("X"),c=new f[l]("htmlfile");c.open(),c.write('<html><script>document.domain="'+f.document.domain+'";<\/script></html>'),c.close(),c.parentWindow[p.exports.WPrefix]=f[p.exports.WPrefix];var u=c.createElement("div");return c.body.appendChild(u),a=c.createElement("iframe"),u.appendChild(a),a.src=t,a.onerror=function(){o("onerror")},i=setTimeout(function(){o("timeout")},15e3),s=h.unloadAdd(r),{post:function(t,e){try{setTimeout(function(){a&&a.contentWindow&&a.contentWindow.postMessage(t,e)},0)}catch(t){}},cleanup:r,loaded:n}}},p.exports.iframeEnabled=!1,f.document&&(p.exports.iframeEnabled=("function"==typeof f.postMessage||"object"==typeof f.postMessage)&&!t.isKonqueror())}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./browser":44,"./event":46,"debug":void 0,"json3":55}],48:[function(t,e,n){(function(n){"use strict";var r={};["log","debug","warn"].forEach(function(t){var e;try{e=n.console&&n.console[t]&&n.console[t].apply}catch(t){}r[t]=e?function(){return n.console[t].apply(n.console,arguments)}:"log"===t?function(){}:r.log}),e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],49:[function(t,e,n){"use strict";e.exports={isObject:function(t){var e=typeof t;return"function"==e||"object"==e&&!!t},extend:function(t){if(!this.isObject(t))return t;for(var e,n,r=1,o=arguments.length;r<o;r++)for(n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}}},{}],50:[function(t,e,n){"use strict";var i=t("crypto"),s="abcdefghijklmnopqrstuvwxyz012345";e.exports={string:function(t){for(var e=s.length,n=i.randomBytes(t),r=[],o=0;o<t;o++)r.push(s.substr(n[o]%e,1));return r.join("")},number:function(t){return Math.floor(Math.random()*t)},numberString:function(t){var e=(""+(t-1)).length;return(new Array(e+1).join("0")+this.number(t)).slice(-e)}}},{"crypto":43}],51:[function(t,e,n){"use strict";var o=function(){};e.exports=function(t){return{filterToEnabled:function(e,n){var r={main:[],facade:[]};return e?"string"==typeof e&&(e=[e]):e=[],t.forEach(function(t){t&&("websocket"!==t.transportName||!1!==n.websocket?e.length&&-1===e.indexOf(t.transportName)?o("not in whitelist",t.transportName):t.enabled(n)?(o("enabled",t.transportName),r.main.push(t),t.facadeTransport&&r.facade.push(t.facadeTransport)):o("disabled",t.transportName):o("disabled from server","websocket"))}),r}}}},{"debug":void 0}],52:[function(t,e,n){"use strict";var r=t("url-parse"),o=function(){};e.exports={getOrigin:function(t){if(!t)return null;var e=new r(t);if("file:"===e.protocol)return null;var n=e.port;return n=n||("https:"===e.protocol?"443":"80"),e.protocol+"//"+e.hostname+":"+n},isOriginEqual:function(t,e){var n=this.getOrigin(t)===this.getOrigin(e);return o("same",t,e,n),n},isSchemeEqual:function(t,e){return t.split(":")[0]===e.split(":")[0]},addPath:function(t,e){var n=t.split("?");return n[0]+e+(n[1]?"?"+n[1]:"")},addQuery:function(t,e){return t+(-1===t.indexOf("?")?"?"+e:"&"+e)}}},{"debug":void 0,"url-parse":58}],53:[function(t,e,n){e.exports="1.4.0"},{}],54:[function(t,e,n){"function"==typeof Object.create?e.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(t,e){t.super_=e;function n(){}n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},{}],55:[function(t,a,l){(function(s){(function(){var q={"function":!0,"object":!0},t=q[typeof l]&&l&&!l.nodeType&&l,D=q[typeof window]&&window||this,e=t&&q[typeof a]&&a&&!a.nodeType&&"object"==typeof s&&s;function W(t,l){t=t||D.Object(),l=l||D.Object();var c=t.Number||D.Number,u=t.String||D.String,e=t.Object||D.Object,f=t.Date||D.Date,n=t.SyntaxError||D.SyntaxError,E=t.TypeError||D.TypeError,r=t.Math||D.Math,o=t.JSON||D.JSON;"object"==typeof o&&o&&(l.stringify=o.stringify,l.parse=o.parse);var j,S,T,i=e.prototype,O=i.toString,h=new f(-0xc782b5b800cec);try{h=-109252==h.getUTCFullYear()&&0===h.getUTCMonth()&&1===h.getUTCDate()&&10==h.getUTCHours()&&37==h.getUTCMinutes()&&6==h.getUTCSeconds()&&708==h.getUTCMilliseconds()}catch(t){}function d(t){if(d[t]!==T)return d[t];var e;if("bug-string-char-index"==t)e="a"!="a"[0];else if("json"==t)e=d("json-stringify")&&d("json-parse");else{var n,r='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==t){var o=l.stringify,i="function"==typeof o&&h;if(i){(n=function(){return 1}).toJSON=n;try{i="0"===o(0)&&"0"===o(new c)&&'""'==o(new u)&&o(O)===T&&o(T)===T&&o()===T&&"1"===o(n)&&"[1]"==o([n])&&"[null]"==o([T])&&"null"==o(null)&&"[null,null,null]"==o([T,O,null])&&o({"a":[n,!0,!1,null,"\0\b\n\f\r\t"]})==r&&"1"===o(null,n)&&"[\n 1,\n 2\n]"==o([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==o(new f(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==o(new f(864e13))&&'"-000001-01-01T00:00:00.000Z"'==o(new f(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==o(new f(-1))}catch(t){i=!1}}e=i}if("json-parse"==t){var s=l.parse;if("function"==typeof s)try{if(0===s("0")&&!s(!1)){var a=5==(n=s(r)).a.length&&1===n.a[0];if(a){try{a=!s('"\t"')}catch(t){}if(a)try{a=1!==s("01")}catch(t){}if(a)try{a=1!==s("1.")}catch(t){}}}}catch(t){a=!1}e=a}}return d[t]=!!e}if(!d("json")){var p="[object Function]",C="[object Number]",N="[object String]",A="[object Array]",a=d("bug-string-char-index");if(!h)var k=r.floor,s=[0,31,59,90,120,151,181,212,243,273,304,334],I=function(t,e){return s[e]+365*(t-1970)+k((t-1969+(e=+(1<e)))/4)-k((t-1901+e)/100)+k((t-1601+e)/400)};if((j=i.hasOwnProperty)||(j=function(t){var n,e={};return j=(e.__proto__=null,e.__proto__={"toString":1},e).toString!=O?function(t){var e=this.__proto__,n=t in(this.__proto__=null,this);return this.__proto__=e,n}:(n=e.constructor,function(t){var e=(this.constructor||n).prototype;return t in this&&!(t in e&&this[t]===e[t])}),e=null,j.call(this,t)}),S=function(t,e){var n,s,r,o=0;for(r in(n=function(){this.valueOf=0}).prototype.valueOf=0,s=new n)j.call(s,r)&&o++;return n=s=null,(S=o?2==o?function(t,e){var n,r={},o=O.call(t)==p;for(n in t)o&&"prototype"==n||j.call(r,n)||!(r[n]=1)||!j.call(t,n)||e(n)}:function(t,e){var n,r,o=O.call(t)==p;for(n in t)o&&"prototype"==n||!j.call(t,n)||(r="constructor"===n)||e(n);(r||j.call(t,n="constructor"))&&e(n)}:(s=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],function(t,e){var n,r,o=O.call(t)==p,i=!o&&"function"!=typeof t.constructor&&q[typeof t.hasOwnProperty]&&t.hasOwnProperty||j;for(n in t)o&&"prototype"==n||!i.call(t,n)||e(n);for(r=s.length;n=s[--r];i.call(t,n)&&e(n));}))(t,e)},!d("json-stringify")){function P(t,e){return("000000"+(e||0)).slice(-t)}function L(t){for(var e='"',n=0,r=t.length,o=!a||10<r,i=o&&(a?t.split(""):t);n<r;n++){var s=t.charCodeAt(n);switch(s){case 8:case 9:case 10:case 12:case 13:case 34:case 92:e+=m[s];break;default:if(s<32){e+="\\u00"+P(2,s.toString(16));break}e+=o?i[n]:t.charAt(n)}}return e+'"'}var m={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},R=function(t,e,n,r,o,i,s){var a,l,c,u,f,h,d,p,m,v,b,y,g,w,x,_;try{a=e[t]}catch(t){}if("object"==typeof a&&a)if("[object Date]"!=(l=O.call(a))||j.call(a,"toJSON"))"function"==typeof a.toJSON&&(l!=C&&l!=N&&l!=A||j.call(a,"toJSON"))&&(a=a.toJSON(t));else if(-1/0<a&&a<1/0){if(I){for(f=k(a/864e5),c=k(f/365.2425)+1970-1;I(c+1,0)<=f;c++);for(u=k((f-I(c,0))/30.42);I(c,u+1)<=f;u++);f=1+f-I(c,u),d=k((h=(a%864e5+864e5)%864e5)/36e5)%24,p=k(h/6e4)%60,m=k(h/1e3)%60,v=h%1e3}else c=a.getUTCFullYear(),u=a.getUTCMonth(),f=a.getUTCDate(),d=a.getUTCHours(),p=a.getUTCMinutes(),m=a.getUTCSeconds(),v=a.getUTCMilliseconds();a=(c<=0||1e4<=c?(c<0?"-":"+")+P(6,c<0?-c:c):P(4,c))+"-"+P(2,u+1)+"-"+P(2,f)+"T"+P(2,d)+":"+P(2,p)+":"+P(2,m)+"."+P(3,v)+"Z"}else a=null;if(n&&(a=n.call(e,t,a)),null===a)return"null";if("[object Boolean]"==(l=O.call(a)))return""+a;if(l==C)return-1/0<a&&a<1/0?""+a:"null";if(l==N)return L(""+a);if("object"==typeof a){for(w=s.length;w--;)if(s[w]===a)throw E();if(s.push(a),b=[],x=i,i+=o,l==A){for(g=0,w=a.length;g<w;g++)y=R(g,a,n,r,o,i,s),b.push(y===T?"null":y);_=b.length?o?"[\n"+i+b.join(",\n"+i)+"\n"+x+"]":"["+b.join(",")+"]":"[]"}else S(r||a,function(t){var e=R(t,a,n,r,o,i,s);e!==T&&b.push(L(t)+":"+(o?" ":"")+e)}),_=b.length?o?"{\n"+i+b.join(",\n"+i)+"\n"+x+"}":"{"+b.join(",")+"}":"{}";return s.pop(),_}};l.stringify=function(t,e,n){var r,o,i,s;if(q[typeof e]&&e)if((s=O.call(e))==p)o=e;else if(s==A){i={};for(var a,l=0,c=e.length;l<c;a=e[l++],(s=O.call(a))!=N&&s!=C||(i[a]=1));}if(n)if((s=O.call(n))==C){if(0<(n-=n%1))for(r="",10<n&&(n=10);r.length<n;r+=" ");}else s==N&&(r=n.length<=10?n:n.slice(0,10));return R("",((a={})[""]=t,a),o,i,r,"",[])}}if(!d("json-parse")){function v(){throw g=w=null,n()}function b(){for(var t,e,n,r,o,i=w,s=i.length;g<s;)switch(o=i.charCodeAt(g)){case 9:case 10:case 13:case 32:g++;break;case 123:case 125:case 91:case 93:case 58:case 44:return t=a?i.charAt(g):i[g],g++,t;case 34:for(t="@",g++;g<s;)if((o=i.charCodeAt(g))<32)v();else if(92==o)switch(o=i.charCodeAt(++g)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:t+=_[o],g++;break;case 117:for(e=++g,n=g+4;g<n;g++)48<=(o=i.charCodeAt(g))&&o<=57||97<=o&&o<=102||65<=o&&o<=70||v();t+=x("0x"+i.slice(e,g));break;default:v()}else{if(34==o)break;for(o=i.charCodeAt(g),e=g;32<=o&&92!=o&&34!=o;)o=i.charCodeAt(++g);t+=i.slice(e,g)}if(34==i.charCodeAt(g))return g++,t;v();default:if(e=g,45==o&&(r=!0,o=i.charCodeAt(++g)),48<=o&&o<=57){for(48==o&&(48<=(o=i.charCodeAt(g+1))&&o<=57)&&v(),r=!1;g<s&&(48<=(o=i.charCodeAt(g))&&o<=57);g++);if(46==i.charCodeAt(g)){for(n=++g;n<s&&(48<=(o=i.charCodeAt(n))&&o<=57);n++);n==g&&v(),g=n}if(101==(o=i.charCodeAt(g))||69==o){for(43!=(o=i.charCodeAt(++g))&&45!=o||g++,n=g;n<s&&(48<=(o=i.charCodeAt(n))&&o<=57);n++);n==g&&v(),g=n}return+i.slice(e,g)}if(r&&v(),"true"==i.slice(g,g+4))return g+=4,!0;if("false"==i.slice(g,g+5))return g+=5,!1;if("null"==i.slice(g,g+4))return g+=4,null;v()}return"$"}function y(t,e,n){var r=M(t,e,n);r===T?delete t[e]:t[e]=r}var g,w,x=u.fromCharCode,_={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"},U=function(t){var e,n;if("$"==t&&v(),"string"==typeof t){if("@"==(a?t.charAt(0):t[0]))return t.slice(1);if("["==t){for(e=[];"]"!=(t=b());n=n||!0)n&&(","==t?"]"==(t=b())&&v():v()),","==t&&v(),e.push(U(t));return e}if("{"==t){for(e={};"}"!=(t=b());n=n||!0)n&&(","==t?"}"==(t=b())&&v():v()),","!=t&&"string"==typeof t&&"@"==(a?t.charAt(0):t[0])&&":"==b()||v(),e[t.slice(1)]=U(b());return e}v()}return t},M=function(t,e,n){var r,o=t[e];if("object"==typeof o&&o)if(O.call(o)==A)for(r=o.length;r--;)y(o,r,n);else S(o,function(t){y(o,t,n)});return n.call(t,e,o)};l.parse=function(t,e){var n,r;return g=0,w=""+t,n=U(b()),"$"!=b()&&v(),g=w=null,e&&O.call(e)==p?M(((r={})[""]=n,r),"",e):n}}}return l.runInContext=W,l}if(!e||e.global!==e&&e.window!==e&&e.self!==e||(D=e),t)W(D,t);else{var n=D.JSON,r=D.JSON3,o=!1,i=W(D,D.JSON3={"noConflict":function(){return o||(o=!0,D.JSON=n,D.JSON3=r,n=r=null),i}});D.JSON={"parse":i.parse,"stringify":i.stringify}}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],56:[function(t,e,n){"use strict";var o=Object.prototype.hasOwnProperty;function s(t){return decodeURIComponent(t.replace(/\+/g," "))}n.stringify=function(t,e){e=e||"";var n=[];for(var r in"string"!=typeof e&&(e="?"),t)o.call(t,r)&&n.push(encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return n.length?e+n.join("&"):""},n.parse=function(t){for(var e,n=/([^=?&]+)=?([^&]*)/g,r={};e=n.exec(t);){var o=s(e[1]),i=s(e[2]);o in r||(r[o]=i)}return r}},{}],57:[function(t,e,n){"use strict";e.exports=function(t,e){if(e=e.split(":")[0],!(t=+t))return!1;switch(e){case"http":case"ws":return 80!==t;case"https":case"wss":return 443!==t;case"ftp":return 21!==t;case"gopher":return 70!==t;case"file":return!1}return 0!==t}},{}],58:[function(t,e,n){(function(i){"use strict";var d=t("requires-port"),p=t("querystringify"),n=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\S\s]*)/i,s=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,m=[["#","hash"],["?","query"],function(t){return t.replace("\\","/")},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d+)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],a={hash:1,query:1};function v(t){var e,n=i&&i.location||{},r={},o=typeof(t=t||n);if("blob:"===t.protocol)r=new y(unescape(t.pathname),{});else if("string"==o)for(e in r=new y(t,{}),a)delete r[e];else if("object"==o){for(e in t)e in a||(r[e]=t[e]);void 0===r.slashes&&(r.slashes=s.test(t.href))}return r}function b(t){var e=n.exec(t);return{protocol:e[1]?e[1].toLowerCase():"",slashes:!!e[2],rest:e[3]}}function y(t,e,n){if(!(this instanceof y))return new y(t,e,n);var r,o,i,s,a,l,c=m.slice(),u=typeof e,f=this,h=0;for("object"!=u&&"string"!=u&&(n=e,e=null),n&&"function"!=typeof n&&(n=p.parse),e=v(e),r=!(o=b(t||"")).protocol&&!o.slashes,f.slashes=o.slashes||r&&e.slashes,f.protocol=o.protocol||e.protocol||"",t=o.rest,o.slashes||(c[3]=[/(.*)/,"pathname"]);h<c.length;h++)"function"!=typeof(s=c[h])?(i=s[0],l=s[1],i!=i?f[l]=t:"string"==typeof i?~(a=t.indexOf(i))&&(t="number"==typeof s[2]?(f[l]=t.slice(0,a),t.slice(a+s[2])):(f[l]=t.slice(a),t.slice(0,a))):(a=i.exec(t))&&(f[l]=a[1],t=t.slice(0,a.index)),f[l]=f[l]||r&&s[3]&&e[l]||"",s[4]&&(f[l]=f[l].toLowerCase())):t=s(t);n&&(f.query=n(f.query)),r&&e.slashes&&"/"!==f.pathname.charAt(0)&&(""!==f.pathname||""!==e.pathname)&&(f.pathname=function(t,e){for(var n=(e||"/").split("/").slice(0,-1).concat(t.split("/")),r=n.length,o=n[r-1],i=!1,s=0;r--;)"."===n[r]?n.splice(r,1):".."===n[r]?(n.splice(r,1),s++):s&&(0===r&&(i=!0),n.splice(r,1),s--);return i&&n.unshift(""),"."!==o&&".."!==o||n.push(""),n.join("/")}(f.pathname,e.pathname)),d(f.port,f.protocol)||(f.host=f.hostname,f.port=""),f.username=f.password="",f.auth&&(s=f.auth.split(":"),f.username=s[0]||"",f.password=s[1]||""),f.origin=f.protocol&&f.host&&"file:"!==f.protocol?f.protocol+"//"+f.host:"null",f.href=f.toString()}y.prototype={set:function(t,e,n){var r=this;switch(t){case"query":"string"==typeof e&&e.length&&(e=(n||p.parse)(e)),r[t]=e;break;case"port":r[t]=e,d(e,r.protocol)?e&&(r.host=r.hostname+":"+e):(r.host=r.hostname,r[t]="");break;case"hostname":r[t]=e,r.port&&(e+=":"+r.port),r.host=e;break;case"host":r[t]=e,/:\d+$/.test(e)?(e=e.split(":"),r.port=e.pop(),r.hostname=e.join(":")):(r.hostname=e,r.port="");break;case"protocol":r.protocol=e.toLowerCase(),r.slashes=!n;break;case"pathname":case"hash":if(e){var o="pathname"===t?"/":"#";r[t]=e.charAt(0)!==o?o+e:e}else r[t]=e;break;default:r[t]=e}for(var i=0;i<m.length;i++){var s=m[i];s[4]&&(r[s[1]]=r[s[1]].toLowerCase())}return r.origin=r.protocol&&r.host&&"file:"!==r.protocol?r.protocol+"//"+r.host:"null",r.href=r.toString(),r},toString:function(t){t&&"function"==typeof t||(t=p.stringify);var e,n=this,r=n.protocol;r&&":"!==r.charAt(r.length-1)&&(r+=":");var o=r+(n.slashes?"//":"");return n.username&&(o+=n.username,n.password&&(o+=":"+n.password),o+="@"),o+=n.host+n.pathname,(e="object"==typeof n.query?t(n.query):n.query)&&(o+="?"!==e.charAt(0)?"?"+e:e),n.hash&&(o+=n.hash),o}},y.extractProtocol=b,y.location=v,y.qs=p,e.exports=y}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"querystringify":56,"requires-port":57}]},{},[1])(1)});
+//# sourceMappingURL=sockjs.min.js.map
Property changes on: base3.10/src/main/webapp/js/com/sockjs.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/clasTestManage.js
===================================================================
--- base3.10/src/main/webapp/js/com/clasTestManage.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/clasTestManage.js (revision 7)
@@ -0,0 +1,358 @@
+/**
+ * 콘크리트시험실 시험관리 공통 JS
+ */
+$(function($) {
+ // remark 데이터
+ var remark = $('#remark');
+ var remarkVal = $('input[name="remark"]').val();
+ remark.val(remarkVal);
+ // remark 데이터
+
+ //신규 입력
+ $('#testSploreSearch').on('click', function() {
+ var selectLength = $('input[name="selectLength"]').val();
+ var sploreSe = $('input[name="sploreSe"]').val();
+ var param = {
+ selectLength : selectLength,
+ sploreSe : sploreSe
+ }
+ $.testSplorePopup(param);
+ });
+
+ // 시험대상시료 삭제
+ $('#testSploreDelete').on('click', function() {
+ var selectLength = $('input[name="selectLength"]').val();
+ var param = {
+ selectLength : selectLength
+ }
+ var returnVal = $.testSploreDelete(param);
+
+ var flag = returnVal.flag;
+ if (flag) {
+ var array = returnVal.splitArray;
+ var params = {
+ sploreId : array[0],
+ sploreNo : array[1],
+ sploreKnd : array[2],
+ }
+
+ testManageDeleteCallback(params);
+ }
+ });
+
+ // 시험대상시료 선택시 정보 조회
+ $('#sploreTbody').on('change', 'input[type="radio"]', function() {
+ var $radio = $(this).val();
+ var param = {
+ radio : $radio
+ }
+
+ $.testSploreInfo(param);
+ });
+
+ // 콘크리트 시험실 - 시험관리 - 마스터 저장
+ $.testManageMastr = function(param) {
+ // 디자인 공통화 되면 table에서 찾기
+ var $tbody = $('#sploreTbody');
+ var $tr = $tbody.find('tr');
+
+ var array = Array();
+ // 시료ID, 시료번호
+ $tr.each(function() {
+ var sploreId = $(this).find('input[name="sploreId"]').val();
+ var splitArray = sploreId.split('||');
+ array.push({
+ sploreId : splitArray[0],
+ sploreNo : splitArray[1],
+ sploreKnd : splitArray[2],
+ testNo : splitArray[3]
+ });
+ });
+
+ // 결재ID
+ var sanctnId = param.sanctnId;
+ // 보고서 종류
+ var reprtKndId = param.reprtKndId;
+ var testMastrId = $('#testMastrId').val();
+ var testCl = $('#testCl').val();
+ var testDe = $('#testDe').val();
+ var remark = $('#remark').val();
+ var param = {
+ 'testMastrId' : testMastrId,
+ 'reprtKndId' : reprtKndId,
+ 'testCl' : testCl,
+ 'testDe' : testDe,
+ 'remark' : remark,
+ 'sanctnId' : sanctnId,
+ 'mastrSploreList' : JSON.stringify(array)
+ }
+
+ var returnVal = '';
+ $.ajax({
+ type : "POST",
+ url : "/clas/testManage/mastr/insertJson.do",
+ data : param,
+ dataType : 'json',
+ async : false,
+ success : function(result) {
+ returnVal = result;
+ },
+ error : function(request, error) {
+ console.log("콘크리트시험실_시험마스터 저장 :" + request.status + "\n" + "error:" + error);
+ }
+ });
+
+ return returnVal;
+ }
+
+ // 콘크리트 시험실 - 시험관리 공통 테이블 생성
+ $.createTable = function(params) {
+ var $tbody = $('#sploreTbody');
+ $tbody.empty();
+ var $tr = $tbody.find('tr');
+ var $trLength = $('#sploreTbody').find('tr').length;
+
+ var array = Array();
+ $tr.each(function() {
+ var sploreId = $(this).find('input[name="sploreId"]').val();
+ var splitArray = sploreId.split('||');
+ array.push({
+ sploreId : splitArray[0],
+ sploreNo : splitArray[1],
+ sploreKnd : splitArray[2]
+ });
+ });
+
+ var dom = '';
+ var cnt = $trLength;
+ var flagCnt = 0;
+ for (var i = 0; i < params.list.length; i++) {
+ var flag = true;
+ var list = params.list[i];
+ var checked = '';
+ for (var j = 0; j < array.length; j++) {
+ var listSploreId = list.sploreId;
+ var listSploreNo = list.sploreNo;
+ if (listSploreId == array[j].sploreId && listSploreNo == array[j].sploreNo) {
+ flag = false;
+ }
+ }
+
+ if (flag) {
+ cnt = cnt + 1;
+ if (flagCnt == 0) {
+ checked = 'checked=checked';
+ // 시료구분
+ $('#sploreSeNm').val(list.sploreSeNm);
+ // 시료 종류
+ $('#sploreKndNm').val(list.sploreKndNm);
+ // 시료원
+ $('#sploreArea').val(list.sploreArea);
+ // 시료채취장소
+ $('#splorePickPlace').val(list.splorePickPlace);
+ // 시료 채취자
+ $('#splorePickNm').val(list.splorePickNm);
+ // 시료 채취일자
+ $('#splorePickDe').val(list.splorePickDe);
+ // Lot No.
+ $('#lotNo').val(list.lotNo);
+ // 시료 제작일자
+ $('#sploreMnfctDe').val(list.sploreMnfctDe);
+ // 실험실 온도
+ $('#lbrtryTp').val(list.lbrtryTp);
+ // 시료제작시간
+ $('#sploreMnfctTime').val(list.sploreMnfctTime);
+ // 기타 시료 정보
+ $('#etcSplore').val(list.etcSplore);
+
+ flagCnt++;
+ }
+
+ dom += '<tr>';
+ dom += '<td>';
+ dom += '<input type="radio" name="sploreId" id="sploreId_' + cnt + '" value="' + list.sploreId + '||' + list.sploreNo + '||' + list.sploreKnd + '||" ' + checked + '><label for="sploreId_' + cnt + '"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += cnt;
+ dom += '</td>';
+ dom += '<td>';
+ dom += list.sploreId;
+ dom += '</td>';
+ dom += '<td>';
+ dom += list.sploreNo;
+ dom += '</td>';
+ dom += '<td>';
+ dom += list.sploreSeNm;
+ dom += '</td>';
+ dom += '<td>';
+ dom += list.sploreKndNm;
+ dom += '</td>';
+ dom += '</tr>';
+ }
+ }
+
+ $tbody.append(dom);
+
+ // 선택가능 개수가 같을 시 버튼 비활성화
+// var selectLength = params.selectLength;
+// $trLength = $('#sploreTbody').find('tr').length;
+// if (selectLength == $trLength) {
+// $('#testSploreSearch').off();
+// }
+ }
+
+ $.testSplorePopup = function(param) {
+ var selectLength = param.selectLength;
+ var sploreSe = param.sploreSe;
+ // 배열형태로 생성 후 JSON 문자열로 변환
+ var $tbody = $('#sploreTbody');
+ var $tr = $tbody.find('tr');
+ $trLength = $('#sploreTbody').find('tr').length;
+
+ if (selectLength == $trLength) {
+ alert(selectLength + "개의 시험대상시료를 선택할 수 있습니다.\n삭제 후 추가해주세요.");
+ return false;
+ } else {
+ var array = Array();
+ // 시료ID, 시료번호
+ $tr.each(function() {
+ var sploreId = $(this).find('input[name="sploreId"]').val();
+ var splitArray = sploreId.split('||');
+ array.push({
+ sploreId : splitArray[0],
+ sploreNo : splitArray[1]
+ });
+ });
+
+ /**
+ * **********************************
+ * parameter
+ * 1. selectLength : 선택 가능 개수
+ * 2. idArray : 현재 선택되어 있는 시험시료에 대한 배열
+ * ex) var array = [
+ {"sploreId" : 'CE-0000001', "sploreNo" : '004'},
+ {"sploreId" : 'CE-0000001', "sploreNo" : '003'}
+ ];
+ * **********************************
+ */
+ var params = {
+ "selectLength" : selectLength,
+ "sploreSe" : sploreSe,
+ "idArray" : JSON.stringify(array)
+ }
+
+ fncPopupOpen("/clas/stdr/testSplore/pop/list.do", 1200, 700, params);
+ }
+ }
+
+ // 시험대상 시료 삭제
+ $.testSploreDelete = function(param) {
+ var returnVal = {};
+ var $tbody = $('#sploreTbody');
+ var $tr = $tbody.find('tr');
+ var $checkedRadio = $tr.find('input[type="radio"]:checked');
+ var $checkedRadioLength = $checkedRadio.length;
+ var flag = true;
+ var val = $checkedRadio.val();
+ var splitArray = '';
+ if ($checkedRadioLength != 0) {
+ splitArray = val.split('||');
+
+ $checkedRadio.closest('tr').remove();
+ // 시료구분
+ $('#sploreSeNm').val('');
+ // 시료 종류
+ $('#sploreKndNm').val('');
+ // 시료원
+ $('#sploreArea').val('');
+ // 시료채취장소
+ $('#splorePickPlace').val('');
+ // 시료 채취자
+ $('#splorePickNm').val('');
+ // 시료 채취일자
+ $('#splorePickDe').val('');
+ // Lot No.
+ $('#lotNo').val('');
+ // 시료 제작일자
+ $('#sploreMnfctDe').val('');
+ // 실험실 온도
+ $('#lbrtryTp').val('');
+ // 시료제작시간
+ $('#sploreMnfctTime').val('');
+ // 기타 시료 정보
+ $('#etcSplore').val('');
+
+ $tr = $tbody.find('tr');
+ $tr.each(function(i) {
+ $(this).find('td:eq(1)').text(parseInt(i) + 1);
+ });
+
+ // 선택가능 개수가 같을 시 버튼 활성화
+// var selectLength = param.selectLength;
+// $trLength = $('#sploreTbody').find('tr').length;
+// if (selectLength != $('#sploreTbody').find('tr').length) {
+// $('#testSploreSearch').on('click', function() {
+// var param = {
+// selectLength : selectLength
+// }
+// $.testSplorePopup(param);
+// });
+// }
+ } else {
+ alert("삭제할 시험대상시료가 없습니다.");
+ flag = false;
+ }
+
+ returnVal = {
+ flag : flag,
+ splitArray : splitArray
+ }
+
+ return returnVal;
+ }
+
+ // 시험대상시료 라디오 선택 시 시험대상시료 정보 조회
+ $.testSploreInfo = function(param) {
+ var sploreId = param.radio;
+ var splitArray = sploreId.split('||');
+
+ var params = {
+ sploreId : splitArray[0],
+ sploreNo : splitArray[1]
+ }
+
+ $.ajax({
+ type : "POST",
+ url : "/clas/testManage/mastr/sploreInfo/selectJson.do",
+ data : params,
+ dataType : 'json',
+ success : function(result) {
+ // 시료구분
+ $('#sploreSeNm').val(result.sploreSeNm);
+ // 시료 종류
+ $('#sploreKndNm').val(result.sploreKndNm);
+ // 시료원
+ $('#sploreArea').val(result.sploreArea);
+ // 시료채취장소
+ $('#splorePickPlace').val(result.splorePickPlace);
+ // 시료 채취자
+ $('#splorePickNm').val(result.splorePickNm);
+ // 시료 채취일자
+ $('#splorePickDe').val(result.splorePickDe);
+ // Lot No.
+ $('#lotNo').val(result.lotNo);
+ // 시료 제작일자
+ $('#sploreMnfctDe').val(result.sploreMnfctDe);
+ // 실험실 온도
+ $('#lbrtryTp').val(result.lbrtryTp);
+ // 시료제작시간
+ $('#sploreMnfctTime').val(result.sploreMnfctTime);
+ // 기타 시료 정보
+ $('#etcSplore').val(result.etcSplore);
+ },
+ error : function(request, error) {
+ console.log("콘크리트시험실_시험대상시료 정보 조회 :" + request.status + "\n" + "error:" + error);
+ }
+ });
+ }
+});
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/clasTestManage.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery.fullPage.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery.fullPage.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery.fullPage.js (revision 7)
@@ -0,0 +1,2911 @@
+/*!
+ * fullPage 2.9.7
+ * https://github.com/alvarotrigo/fullPage.js
+ * @license MIT licensed
+ *
+ * Copyright (C) 2015 alvarotrigo.com - A project by Alvaro Trigo
+ */
+(function(global, factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], function($) {
+ return factory($, global, global.document, global.Math);
+ });
+ } else if (typeof exports === "object" && exports) {
+ module.exports = factory(require('jquery'), global, global.document, global.Math);
+ } else {
+ factory(jQuery, global, global.document, global.Math);
+ }
+})(typeof window !== 'undefined' ? window : this, function($, window, document, Math, undefined) {
+ 'use strict';
+
+ // keeping central set of classnames and selectors
+ var WRAPPER = 'fullpage-wrapper';
+ var WRAPPER_SEL = '.' + WRAPPER;
+
+ // slimscroll
+ var SCROLLABLE = 'fp-scrollable';
+ var SCROLLABLE_SEL = '.' + SCROLLABLE;
+
+ // util
+ var RESPONSIVE = 'fp-responsive';
+ var NO_TRANSITION = 'fp-notransition';
+ var DESTROYED = 'fp-destroyed';
+ var ENABLED = 'fp-enabled';
+ var VIEWING_PREFIX = 'fp-viewing';
+ var ACTIVE = 'active';
+ var ACTIVE_SEL = '.' + ACTIVE;
+ var COMPLETELY = 'fp-completely';
+ var COMPLETELY_SEL = '.' + COMPLETELY;
+
+ // section
+ var SECTION_DEFAULT_SEL = '.section';
+ var SECTION = 'fp-section';
+ var SECTION_SEL = '.' + SECTION;
+ var SECTION_ACTIVE_SEL = SECTION_SEL + ACTIVE_SEL;
+ var SECTION_FIRST_SEL = SECTION_SEL + ':first';
+ var SECTION_LAST_SEL = SECTION_SEL + ':last';
+ var TABLE_CELL = 'fp-tableCell';
+ var TABLE_CELL_SEL = '.' + TABLE_CELL;
+ var AUTO_HEIGHT = 'fp-auto-height';
+ var AUTO_HEIGHT_SEL = '.fp-auto-height';
+ var NORMAL_SCROLL = 'fp-normal-scroll';
+ var NORMAL_SCROLL_SEL = '.fp-normal-scroll';
+
+ // section nav
+ var SECTION_NAV = 'fp-nav';
+ var SECTION_NAV_SEL = '#' + SECTION_NAV;
+ var SECTION_NAV_TOOLTIP = 'fp-tooltip';
+ var SECTION_NAV_TOOLTIP_SEL='.'+SECTION_NAV_TOOLTIP;
+ var SHOW_ACTIVE_TOOLTIP = 'fp-show-active';
+
+ // slide
+ var SLIDE_DEFAULT_SEL = '.slide';
+ var SLIDE = 'fp-slide';
+ var SLIDE_SEL = '.' + SLIDE;
+ var SLIDE_ACTIVE_SEL = SLIDE_SEL + ACTIVE_SEL;
+ var SLIDES_WRAPPER = 'fp-slides';
+ var SLIDES_WRAPPER_SEL = '.' + SLIDES_WRAPPER;
+ var SLIDES_CONTAINER = 'fp-slidesContainer';
+ var SLIDES_CONTAINER_SEL = '.' + SLIDES_CONTAINER;
+ var TABLE = 'fp-table';
+
+ // slide nav
+ var SLIDES_NAV = 'fp-slidesNav';
+ var SLIDES_NAV_SEL = '.' + SLIDES_NAV;
+ var SLIDES_NAV_LINK_SEL = SLIDES_NAV_SEL + ' a';
+ var SLIDES_ARROW = 'fp-controlArrow';
+ var SLIDES_ARROW_SEL = '.' + SLIDES_ARROW;
+ var SLIDES_PREV = 'fp-prev';
+ var SLIDES_PREV_SEL = '.' + SLIDES_PREV;
+ var SLIDES_ARROW_PREV = SLIDES_ARROW + ' ' + SLIDES_PREV;
+ var SLIDES_ARROW_PREV_SEL = SLIDES_ARROW_SEL + SLIDES_PREV_SEL;
+ var SLIDES_NEXT = 'fp-next';
+ var SLIDES_NEXT_SEL = '.' + SLIDES_NEXT;
+ var SLIDES_ARROW_NEXT = SLIDES_ARROW + ' ' + SLIDES_NEXT;
+ var SLIDES_ARROW_NEXT_SEL = SLIDES_ARROW_SEL + SLIDES_NEXT_SEL;
+
+ var $window = $(window);
+ var $document = $(document);
+
+ $.fn.fullpage = function(options) {
+ //only once my friend!
+ if($('html').hasClass(ENABLED)){ displayWarnings(); return; }
+
+ // common jQuery objects
+ var $htmlBody = $('html, body');
+ var $body = $('body');
+
+ var FP = $.fn.fullpage;
+
+ // Creating some defaults, extending them with any options that were provided
+ options = $.extend({
+ //navigation
+ menu: false,
+ anchors:[],
+ lockAnchors: false,
+ navigation: false,
+ navigationPosition: 'right',
+ navigationTooltips: [],
+ showActiveTooltip: false,
+ slidesNavigation: false,
+ slidesNavPosition: 'bottom',
+ scrollBar: false,
+ hybrid: false,
+
+ //scrolling
+ css3: true,
+ scrollingSpeed: 700,
+ autoScrolling: true,
+ fitToSection: true,
+ fitToSectionDelay: 1000,
+ easing: 'easeInOutCubic',
+ easingcss3: 'ease',
+ loopBottom: false,
+ loopTop: false,
+ loopHorizontal: true,
+ continuousVertical: false,
+ continuousHorizontal: false,
+ scrollHorizontally: false,
+ interlockedSlides: false,
+ dragAndMove: false,
+ offsetSections: false,
+ resetSliders: false,
+ fadingEffect: false,
+ normalScrollElements: null,
+ scrollOverflow: false,
+ scrollOverflowReset: false,
+ scrollOverflowHandler: $.fn.fp_scrolloverflow ? $.fn.fp_scrolloverflow.iscrollHandler : null,
+ scrollOverflowOptions: null,
+ touchSensitivity: 5,
+ normalScrollElementTouchThreshold: 5,
+ bigSectionsDestination: null,
+
+ //Accessibility
+ keyboardScrolling: true,
+ animateAnchor: true,
+ recordHistory: true,
+
+ //design
+ controlArrows: true,
+ controlArrowColor: '#fff',
+ verticalCentered: true,
+ sectionsColor : [],
+ paddingTop: 0,
+ paddingBottom: 0,
+ fixedElements: null,
+ responsive: 0, //backwards compabitility with responsiveWiddth
+ responsiveWidth: 0,
+ responsiveHeight: 0,
+ responsiveSlides: false,
+ parallax: false,
+ parallaxOptions: {
+ type: 'reveal',
+ percentage: 62,
+ property: 'translate'
+ },
+
+ //Custom selectors
+ sectionSelector: SECTION_DEFAULT_SEL,
+ slideSelector: SLIDE_DEFAULT_SEL,
+
+ //events
+ afterLoad: null,
+ onLeave: null,
+ afterRender: null,
+ afterResize: null,
+ afterReBuild: null,
+ afterSlideLoad: null,
+ onSlideLeave: null,
+ afterResponsive: null,
+
+ lazyLoading: true
+ }, options);
+
+ //flag to avoid very fast sliding for landscape sliders
+ var slideMoving = false;
+
+ var isTouchDevice = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/);
+ var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0) || (navigator.maxTouchPoints));
+ var container = $(this);
+ var windowsHeight = $window.height();
+ var isResizing = false;
+ var isWindowFocused = true;
+ var lastScrolledDestiny;
+ var lastScrolledSlide;
+ var canScroll = true;
+ var scrollings = [];
+ var controlPressed;
+ var startingSection;
+ var isScrollAllowed = {};
+ isScrollAllowed.m = { 'up':true, 'down':true, 'left':true, 'right':true };
+ isScrollAllowed.k = $.extend(true,{}, isScrollAllowed.m);
+ var MSPointer = getMSPointer();
+ var events = {
+ touchmove: 'ontouchmove' in window ? 'touchmove' : MSPointer.move,
+ touchstart: 'ontouchstart' in window ? 'touchstart' : MSPointer.down
+ };
+ var scrollBarHandler;
+
+ // taken from https://github.com/udacity/ud891/blob/gh-pages/lesson2-focus/07-modals-and-keyboard-traps/solution/modal.js
+ var focusableElementsString = ' iframe, object, embed, [tabindex="0"], [contenteditable]';
+
+ //timeouts
+ var resizeId;
+ var afterSectionLoadsId;
+ var afterSlideLoadsId;
+ var scrollId;
+ var scrollId2;
+ var keydownId;
+ var originals = $.extend(true, {}, options); //deep copy
+
+ displayWarnings();
+
+ //easeInOutCubic animation included in the plugin
+ $.extend($.easing,{ easeInOutCubic: function (x, t, b, c, d) {if ((t/=d/2) < 1) return c/2*t*t*t + b;return c/2*((t-=2)*t*t + 2) + b;}});
+
+ /**
+ * Sets the autoScroll option.
+ * It changes the scroll bar visibility and the history of the site as a result.
+ */
+ function setAutoScrolling(value, type){
+ //removing the transformation
+ if(!value){
+ silentScroll(0);
+ }
+
+ setVariableState('autoScrolling', value, type);
+
+ var element = $(SECTION_ACTIVE_SEL);
+
+ if(options.autoScrolling && !options.scrollBar){
+ $htmlBody.css({
+ 'overflow' : 'hidden',
+ 'height' : '100%'
+ });
+
+ setRecordHistory(originals.recordHistory, 'internal');
+
+ //for IE touch devices
+ container.css({
+ '-ms-touch-action': 'none',
+ 'touch-action': 'none'
+ });
+
+ if(element.length){
+ //moving the container up
+ silentScroll(element.position().top);
+ }
+
+ }else{
+ $htmlBody.css({
+ 'overflow' : 'visible',
+ 'height' : 'initial'
+ });
+
+ setRecordHistory(false, 'internal');
+
+ //for IE touch devices
+ container.css({
+ '-ms-touch-action': '',
+ 'touch-action': ''
+ });
+
+ //scrolling the page to the section with no animation
+ if (element.length) {
+ $htmlBody.scrollTop(element.position().top);
+ }
+ }
+ }
+
+ /**
+ * Defines wheter to record the history for each hash change in the URL.
+ */
+ function setRecordHistory(value, type){
+ setVariableState('recordHistory', value, type);
+ }
+
+ /**
+ * Defines the scrolling speed
+ */
+ function setScrollingSpeed(value, type){
+ setVariableState('scrollingSpeed', value, type);
+ }
+
+ /**
+ * Sets fitToSection
+ */
+ function setFitToSection(value, type){
+ setVariableState('fitToSection', value, type);
+ }
+
+ /**
+ * Sets lockAnchors
+ */
+ function setLockAnchors(value){
+ options.lockAnchors = value;
+ }
+
+ /**
+ * Adds or remove the possibility of scrolling through sections by using the mouse wheel or the trackpad.
+ */
+ function setMouseWheelScrolling(value){
+ if(value){
+ addMouseWheelHandler();
+ addMiddleWheelHandler();
+ }else{
+ removeMouseWheelHandler();
+ removeMiddleWheelHandler();
+ }
+ }
+
+ /**
+ * Adds or remove the possibility of scrolling through sections by using the mouse wheel/trackpad or touch gestures.
+ * Optionally a second parameter can be used to specify the direction for which the action will be applied.
+ *
+ * @param directions string containing the direction or directions separated by comma.
+ */
+ function setAllowScrolling(value, directions){
+ if(typeof directions !== 'undefined'){
+ directions = directions.replace(/ /g,'').split(',');
+
+ $.each(directions, function (index, direction){
+ setIsScrollAllowed(value, direction, 'm');
+ });
+ }
+ else{
+ setIsScrollAllowed(value, 'all', 'm');
+
+ if(value){
+ setMouseWheelScrolling(true);
+ addTouchHandler();
+ }else{
+ setMouseWheelScrolling(false);
+ removeTouchHandler();
+ }
+ }
+ }
+
+ /**
+ * Adds or remove the possibility of scrolling through sections by using the keyboard arrow keys
+ */
+ function setKeyboardScrolling(value, directions){
+ if(typeof directions !== 'undefined'){
+ directions = directions.replace(/ /g,'').split(',');
+
+ $.each(directions, function (index, direction){
+ setIsScrollAllowed(value, direction, 'k');
+ });
+ }else{
+ setIsScrollAllowed(value, 'all', 'k');
+ options.keyboardScrolling = value;
+ }
+ }
+
+ /**
+ * Moves the page up one section.
+ */
+ function moveSectionUp(){
+ var prev = $(SECTION_ACTIVE_SEL).prev(SECTION_SEL);
+
+ //looping to the bottom if there's no more sections above
+ if (!prev.length && (options.loopTop || options.continuousVertical)) {
+ prev = $(SECTION_SEL).last();
+ }
+
+ if (prev.length) {
+ scrollPage(prev, null, true);
+ }
+ }
+
+ /**
+ * Moves the page down one section.
+ */
+ function moveSectionDown(){
+ var next = $(SECTION_ACTIVE_SEL).next(SECTION_SEL);
+
+ //looping to the top if there's no more sections below
+ if(!next.length &&
+ (options.loopBottom || options.continuousVertical)){
+ next = $(SECTION_SEL).first();
+ }
+
+ if(next.length){
+ scrollPage(next, null, false);
+ }
+ }
+
+ /**
+ * Moves the page to the given section and slide with no animation.
+ * Anchors or index positions can be used as params.
+ */
+ function silentMoveTo(sectionAnchor, slideAnchor){
+ setScrollingSpeed (0, 'internal');
+ moveTo(sectionAnchor, slideAnchor);
+ setScrollingSpeed (originals.scrollingSpeed, 'internal');
+ }
+
+ /**
+ * Moves the page to the given section and slide.
+ * Anchors or index positions can be used as params.
+ */
+ function moveTo(sectionAnchor, slideAnchor){
+ var destiny = getSectionByAnchor(sectionAnchor);
+
+ if (typeof slideAnchor !== 'undefined'){
+ scrollPageAndSlide(sectionAnchor, slideAnchor);
+ }else if(destiny.length > 0){
+ scrollPage(destiny);
+ }
+ }
+
+ /**
+ * Slides right the slider of the active section.
+ * Optional `section` param.
+ */
+ function moveSlideRight(section){
+ moveSlide('right', section);
+ }
+
+ /**
+ * Slides left the slider of the active section.
+ * Optional `section` param.
+ */
+ function moveSlideLeft(section){
+ moveSlide('left', section);
+ }
+
+ /**
+ * When resizing is finished, we adjust the slides sizes and positions
+ */
+ function reBuild(resizing){
+ if(container.hasClass(DESTROYED)){ return; } //nothing to do if the plugin was destroyed
+
+ isResizing = true;
+
+ windowsHeight = $window.height(); //updating global var
+
+ $(SECTION_SEL).each(function(){
+ var slidesWrap = $(this).find(SLIDES_WRAPPER_SEL);
+ var slides = $(this).find(SLIDE_SEL);
+
+ //adjusting the height of the table-cell for IE and Firefox
+ if(options.verticalCentered){
+ $(this).find(TABLE_CELL_SEL).css('height', getTableHeight($(this)) + 'px');
+ }
+
+ $(this).css('height', windowsHeight + 'px');
+
+ //adjusting the position fo the FULL WIDTH slides...
+ if (slides.length > 1) {
+ landscapeScroll(slidesWrap, slidesWrap.find(SLIDE_ACTIVE_SEL));
+ }
+ });
+
+ if(options.scrollOverflow){
+ scrollBarHandler.createScrollBarForAll();
+ }
+
+ var activeSection = $(SECTION_ACTIVE_SEL);
+ var sectionIndex = activeSection.index(SECTION_SEL);
+
+ //isn't it the first section?
+ if(sectionIndex){
+ //adjusting the position for the current section
+ silentMoveTo(sectionIndex + 1);
+ }
+
+ isResizing = false;
+ $.isFunction( options.afterResize ) && resizing && options.afterResize.call(container);
+ $.isFunction( options.afterReBuild ) && !resizing && options.afterReBuild.call(container);
+ }
+
+ /**
+ * Turns fullPage.js to normal scrolling mode when the viewport `width` or `height`
+ * are smaller than the set limit values.
+ */
+ function setResponsive(active){
+ var isResponsive = $body.hasClass(RESPONSIVE);
+
+ if(active){
+ if(!isResponsive){
+ setAutoScrolling(false, 'internal');
+ setFitToSection(false, 'internal');
+ $(SECTION_NAV_SEL).hide();
+ $body.addClass(RESPONSIVE);
+ $.isFunction( options.afterResponsive ) && options.afterResponsive.call( container, active);
+ }
+ }
+ else if(isResponsive){
+ setAutoScrolling(originals.autoScrolling, 'internal');
+ setFitToSection(originals.autoScrolling, 'internal');
+ $(SECTION_NAV_SEL).show();
+ $body.removeClass(RESPONSIVE);
+ $.isFunction( options.afterResponsive ) && options.afterResponsive.call( container, active);
+ }
+ }
+
+ if($(this).length){
+ //public functions
+ FP.version = '2.9.7';
+ FP.setAutoScrolling = setAutoScrolling;
+ FP.setRecordHistory = setRecordHistory;
+ FP.setScrollingSpeed = setScrollingSpeed;
+ FP.setFitToSection = setFitToSection;
+ FP.setLockAnchors = setLockAnchors;
+ FP.setMouseWheelScrolling = setMouseWheelScrolling;
+ FP.setAllowScrolling = setAllowScrolling;
+ FP.setKeyboardScrolling = setKeyboardScrolling;
+ FP.moveSectionUp = moveSectionUp;
+ FP.moveSectionDown = moveSectionDown;
+ FP.silentMoveTo = silentMoveTo;
+ FP.moveTo = moveTo;
+ FP.moveSlideRight = moveSlideRight;
+ FP.moveSlideLeft = moveSlideLeft;
+ FP.fitToSection = fitToSection;
+ FP.reBuild = reBuild;
+ FP.setResponsive = setResponsive;
+ FP.destroy = destroy;
+
+ //functions we want to share across files but which are not
+ //mean to be used on their own by developers
+ FP.shared ={
+ afterRenderActions: afterRenderActions
+ };
+
+ init();
+
+ bindEvents();
+ }
+
+ function init(){
+ //if css3 is not supported, it will use jQuery animations
+ if(options.css3){
+ options.css3 = support3d();
+ }
+
+ options.scrollBar = options.scrollBar || options.hybrid;
+
+ setOptionsFromDOM();
+ prepareDom();
+ setAllowScrolling(true);
+ setAutoScrolling(options.autoScrolling, 'internal');
+ responsive();
+
+ //setting the class for the body element
+ setBodyClass();
+
+ if(document.readyState === 'complete'){
+ scrollToAnchor();
+ }
+ $window.on('load', scrollToAnchor);
+ }
+
+ function bindEvents(){
+ $window
+ //when scrolling...
+ .on('scroll', scrollHandler)
+
+ //detecting any change on the URL to scroll to the given anchor link
+ //(a way to detect back history button as we play with the hashes on the URL)
+ .on('hashchange', hashChangeHandler)
+
+ //when opening a new tab (ctrl + t), `control` won't be pressed when coming back.
+ .blur(blurHandler)
+
+ //when resizing the site, we adjust the heights of the sections, slimScroll...
+ .resize(resizeHandler);
+
+ $document
+ //Sliding with arrow keys, both, vertical and horizontal
+ .keydown(keydownHandler)
+
+ //to prevent scrolling while zooming
+ .keyup(keyUpHandler)
+
+ //Scrolls to the section when clicking the navigation bullet
+ .on('click touchstart', SECTION_NAV_SEL + ' a', sectionBulletHandler)
+
+ //Scrolls the slider to the given slide destination for the given section
+ .on('click touchstart', SLIDES_NAV_LINK_SEL, slideBulletHandler)
+
+ .on('click', SECTION_NAV_TOOLTIP_SEL, tooltipTextHandler);
+
+ //Scrolling horizontally when clicking on the slider controls.
+ $(SECTION_SEL).on('click touchstart', SLIDES_ARROW_SEL, slideArrowHandler);
+
+
+ /**
+ * Applying normalScroll elements.
+ * Ignoring the scrolls over the specified selectors.
+ */
+ if(options.normalScrollElements){
+ $document.on('mouseenter touchstart', options.normalScrollElements, function () {
+ setAllowScrolling(false);
+ });
+
+ $document.on('mouseleave touchend', options.normalScrollElements, function(){
+ setAllowScrolling(true);
+ });
+ }
+ }
+
+ /**
+ * Setting options from DOM elements if they are not provided.
+ */
+ function setOptionsFromDOM(){
+ var sections = container.find(options.sectionSelector);
+
+ //no anchors option? Checking for them in the DOM attributes
+ if(!options.anchors.length){
+ options.anchors = sections.filter('[data-anchor]').map(function(){
+ return $(this).data('anchor').toString();
+ }).get();
+ }
+
+ //no tooltips option? Checking for them in the DOM attributes
+ if(!options.navigationTooltips.length){
+ options.navigationTooltips = sections.filter('[data-tooltip]').map(function(){
+ return $(this).data('tooltip').toString();
+ }).get();
+ }
+ }
+
+ /**
+ * Works over the DOM structure to set it up for the current fullpage options.
+ */
+ function prepareDom(){
+ container.css({
+ 'height': '100%',
+ 'position': 'relative'
+ });
+
+ //adding a class to recognize the container internally in the code
+ container.addClass(WRAPPER);
+ $('html').addClass(ENABLED);
+
+ //due to https://github.com/alvarotrigo/fullPage.js/issues/1502
+ windowsHeight = $window.height();
+
+ container.removeClass(DESTROYED); //in case it was destroyed before initializing it again
+
+ addInternalSelectors();
+
+ //styling the sections / slides / menu
+ $(SECTION_SEL).each(function(index){
+ var section = $(this);
+ var slides = section.find(SLIDE_SEL);
+ var numSlides = slides.length;
+
+ //caching the original styles to add them back on destroy('all')
+ section.data('fp-styles', section.attr('style'));
+
+ styleSection(section, index);
+ styleMenu(section, index);
+
+ // if there's any slide
+ if (numSlides > 0) {
+ styleSlides(section, slides, numSlides);
+ }else{
+ if(options.verticalCentered){
+ addTableClass(section);
+ }
+ }
+ });
+
+ //fixed elements need to be moved out of the plugin container due to problems with CSS3.
+ if(options.fixedElements && options.css3){
+ $(options.fixedElements).appendTo($body);
+ }
+
+ //vertical centered of the navigation + active bullet
+ if(options.navigation){
+ addVerticalNavigation();
+ }
+
+ enableYoutubeAPI();
+
+ if(options.scrollOverflow){
+ scrollBarHandler = options.scrollOverflowHandler.init(options);
+ }else{
+ afterRenderActions();
+ }
+ }
+
+ /**
+ * Styles the horizontal slides for a section.
+ */
+ function styleSlides(section, slides, numSlides){
+ var sliderWidth = numSlides * 100;
+ var slideWidth = 100 / numSlides;
+
+ slides.wrapAll('<div class="' + SLIDES_CONTAINER + '" />');
+ slides.parent().wrap('<div class="' + SLIDES_WRAPPER + '" />');
+
+ section.find(SLIDES_CONTAINER_SEL).css('width', sliderWidth + '%');
+
+ if(numSlides > 1){
+ if(options.controlArrows){
+ createSlideArrows(section);
+ }
+
+ if(options.slidesNavigation){
+ addSlidesNavigation(section, numSlides);
+ }
+ }
+
+ slides.each(function(index) {
+ $(this).css('width', slideWidth + '%');
+
+ if(options.verticalCentered){
+ addTableClass($(this));
+ }
+ });
+
+ var startingSlide = section.find(SLIDE_ACTIVE_SEL);
+
+ //if the slide won't be an starting point, the default will be the first one
+ //the active section isn't the first one? Is not the first slide of the first section? Then we load that section/slide by default.
+ if( startingSlide.length && ($(SECTION_ACTIVE_SEL).index(SECTION_SEL) !== 0 || ($(SECTION_ACTIVE_SEL).index(SECTION_SEL) === 0 && startingSlide.index() !== 0))){
+ silentLandscapeScroll(startingSlide, 'internal');
+ }else{
+ slides.eq(0).addClass(ACTIVE);
+ }
+ }
+
+ /**
+ * Styling vertical sections
+ */
+ function styleSection(section, index){
+ //if no active section is defined, the 1st one will be the default one
+ if(!index && $(SECTION_ACTIVE_SEL).length === 0) {
+ section.addClass(ACTIVE);
+ }
+ startingSection = $(SECTION_ACTIVE_SEL);
+
+ section.css('height', windowsHeight + 'px');
+
+ if(options.paddingTop){
+ section.css('padding-top', options.paddingTop);
+ }
+
+ if(options.paddingBottom){
+ section.css('padding-bottom', options.paddingBottom);
+ }
+
+ if (typeof options.sectionsColor[index] !== 'undefined') {
+ section.css('background-color', options.sectionsColor[index]);
+ }
+
+ if (typeof options.anchors[index] !== 'undefined') {
+ section.attr('data-anchor', options.anchors[index]);
+ }
+ }
+
+ /**
+ * Sets the data-anchor attributes to the menu elements and activates the current one.
+ */
+ function styleMenu(section, index){
+ if (typeof options.anchors[index] !== 'undefined') {
+ //activating the menu / nav element on load
+ if(section.hasClass(ACTIVE)){
+ activateMenuAndNav(options.anchors[index], index);
+ }
+ }
+
+ //moving the menu outside the main container if it is inside (avoid problems with fixed positions when using CSS3 tranforms)
+ if(options.menu && options.css3 && $(options.menu).closest(WRAPPER_SEL).length){
+ $(options.menu).appendTo($body);
+ }
+ }
+
+ /**
+ * Adds internal classes to be able to provide customizable selectors
+ * keeping the link with the style sheet.
+ */
+ function addInternalSelectors(){
+ container.find(options.sectionSelector).addClass(SECTION);
+ container.find(options.slideSelector).addClass(SLIDE);
+ }
+
+ /**
+ * Creates the control arrows for the given section
+ */
+ function createSlideArrows(section){
+ section.find(SLIDES_WRAPPER_SEL).after('<div class="' + SLIDES_ARROW_PREV + '"></div><div class="' + SLIDES_ARROW_NEXT + '"></div>');
+
+ if(options.controlArrowColor!='#fff'){
+ section.find(SLIDES_ARROW_NEXT_SEL).css('border-color', 'transparent transparent transparent '+options.controlArrowColor);
+ section.find(SLIDES_ARROW_PREV_SEL).css('border-color', 'transparent '+ options.controlArrowColor + ' transparent transparent');
+ }
+
+ if(!options.loopHorizontal){
+ section.find(SLIDES_ARROW_PREV_SEL).hide();
+ }
+ }
+
+ /**
+ * Creates a vertical navigation bar.
+ */
+ function addVerticalNavigation(){
+ $body.append('<div id="' + SECTION_NAV + '"><ul></ul></div>');
+ var nav = $(SECTION_NAV_SEL);
+
+ nav.addClass(function() {
+ return options.showActiveTooltip ? SHOW_ACTIVE_TOOLTIP + ' ' + options.navigationPosition : options.navigationPosition;
+ });
+
+ for (var i = 0; i < $(SECTION_SEL).length; i++) {
+ var link = '';
+ if (options.anchors.length) {
+ link = options.anchors[i];
+ }
+
+ var li = '<li><a href="#' + link + '"><span></span></a>';
+
+ // Only add tooltip if needed (defined by user)
+ var tooltip = options.navigationTooltips[i];
+
+ if (typeof tooltip !== 'undefined' && tooltip !== '') {
+ li += '<div class="' + SECTION_NAV_TOOLTIP + ' ' + options.navigationPosition + '">' + tooltip + '</div>';
+ }
+
+ li += '</li>';
+
+ nav.find('ul').append(li);
+ }
+
+ //centering it vertically
+ $(SECTION_NAV_SEL).css('margin-top', '-' + ($(SECTION_NAV_SEL).height()/2) + 'px');
+
+ //activating the current active section
+ $(SECTION_NAV_SEL).find('li').eq($(SECTION_ACTIVE_SEL).index(SECTION_SEL)).find('a').addClass(ACTIVE);
+ }
+
+ /*
+ * Enables the Youtube videos API so we can control their flow if necessary.
+ */
+ function enableYoutubeAPI(){
+ container.find('iframe[src*="youtube.com/embed/"]').each(function(){
+ addURLParam($(this), 'enablejsapi=1');
+ });
+ }
+
+ /**
+ * Adds a new parameter and its value to the `src` of a given element
+ */
+ function addURLParam(element, newParam){
+ var originalSrc = element.attr('src');
+ element.attr('src', originalSrc + getUrlParamSign(originalSrc) + newParam);
+ }
+
+ /*
+ * Returns the prefix sign to use for a new parameter in an existen URL.
+ *
+ * @return {String} ? | &
+ */
+ function getUrlParamSign(url){
+ return ( !/\?/.test( url ) ) ? '?' : '&';
+ }
+
+ /**
+ * Actions and callbacks to fire afterRender
+ */
+ function afterRenderActions(){
+ var section = $(SECTION_ACTIVE_SEL);
+
+ section.addClass(COMPLETELY);
+
+ lazyLoad(section);
+ playMedia(section);
+
+ if(options.scrollOverflow){
+ options.scrollOverflowHandler.afterLoad();
+ }
+
+ if(isDestinyTheStartingSection()){
+ $.isFunction( options.afterLoad ) && options.afterLoad.call(section, section.data('anchor'), (section.index(SECTION_SEL) + 1));
+ }
+
+ $.isFunction( options.afterRender ) && options.afterRender.call(container);
+ }
+
+ /**
+ * Determines if the URL anchor destiny is the starting section (the one using 'active' class before initialization)
+ */
+ function isDestinyTheStartingSection(){
+ var destinationSection = getSectionByAnchor(getAnchorsURL().section);
+ return !destinationSection || destinationSection.length && destinationSection.index() === startingSection.index();
+ }
+
+
+ var isScrolling = false;
+ var lastScroll = 0;
+
+ //when scrolling...
+ function scrollHandler(){
+ var currentSection;
+
+ if(!options.autoScrolling || options.scrollBar){
+ var currentScroll = $window.scrollTop();
+ var scrollDirection = getScrollDirection(currentScroll);
+ var visibleSectionIndex = 0;
+ var screen_mid = currentScroll + ($window.height() / 2.0);
+ var isAtBottom = $body.height() - $window.height() === currentScroll;
+ var sections = document.querySelectorAll(SECTION_SEL);
+
+ //when using `auto-height` for a small last section it won't be centered in the viewport
+ if(isAtBottom){
+ visibleSectionIndex = sections.length - 1;
+ }
+ //is at top? when using `auto-height` for a small first section it won't be centered in the viewport
+ else if(!currentScroll){
+ visibleSectionIndex = 0;
+ }
+
+ //taking the section which is showing more content in the viewport
+ else{
+ for (var i = 0; i < sections.length; ++i) {
+ var section = sections[i];
+
+ // Pick the the last section which passes the middle line of the screen.
+ if (section.offsetTop <= screen_mid)
+ {
+ visibleSectionIndex = i;
+ }
+ }
+ }
+
+ if(isCompletelyInViewPort(scrollDirection)){
+ if(!$(SECTION_ACTIVE_SEL).hasClass(COMPLETELY)){
+ $(SECTION_ACTIVE_SEL).addClass(COMPLETELY).siblings().removeClass(COMPLETELY);
+ }
+ }
+
+ //geting the last one, the current one on the screen
+ currentSection = $(sections).eq(visibleSectionIndex);
+
+ //setting the visible section as active when manually scrolling
+ //executing only once the first time we reach the section
+ if(!currentSection.hasClass(ACTIVE)){
+ isScrolling = true;
+ var leavingSection = $(SECTION_ACTIVE_SEL);
+ var leavingSectionIndex = leavingSection.index(SECTION_SEL) + 1;
+ var yMovement = getYmovement(currentSection);
+ var anchorLink = currentSection.data('anchor');
+ var sectionIndex = currentSection.index(SECTION_SEL) + 1;
+ var activeSlide = currentSection.find(SLIDE_ACTIVE_SEL);
+ var slideIndex;
+ var slideAnchorLink;
+
+ if(activeSlide.length){
+ slideAnchorLink = activeSlide.data('anchor');
+ slideIndex = activeSlide.index();
+ }
+
+ if(canScroll){
+ currentSection.addClass(ACTIVE).siblings().removeClass(ACTIVE);
+
+ $.isFunction( options.onLeave ) && options.onLeave.call( leavingSection, leavingSectionIndex, sectionIndex, yMovement);
+ $.isFunction( options.afterLoad ) && options.afterLoad.call( currentSection, anchorLink, sectionIndex);
+
+ stopMedia(leavingSection);
+ lazyLoad(currentSection);
+ playMedia(currentSection);
+
+ activateMenuAndNav(anchorLink, sectionIndex - 1);
+
+ if(options.anchors.length){
+ //needed to enter in hashChange event when using the menu with anchor links
+ lastScrolledDestiny = anchorLink;
+ }
+ setState(slideIndex, slideAnchorLink, anchorLink, sectionIndex);
+ }
+
+ //small timeout in order to avoid entering in hashChange event when scrolling is not finished yet
+ clearTimeout(scrollId);
+ scrollId = setTimeout(function(){
+ isScrolling = false;
+ }, 100);
+ }
+
+ if(options.fitToSection){
+ //for the auto adjust of the viewport to fit a whole section
+ clearTimeout(scrollId2);
+
+ scrollId2 = setTimeout(function(){
+ //checking it again in case it changed during the delay
+ if(options.fitToSection &&
+
+ //is the destination element bigger than the viewport?
+ $(SECTION_ACTIVE_SEL).outerHeight() <= windowsHeight
+ ){
+ fitToSection();
+ }
+ }, options.fitToSectionDelay);
+ }
+ }
+ }
+
+ /**
+ * Fits the site to the nearest active section
+ */
+ function fitToSection(){
+ //checking fitToSection again in case it was set to false before the timeout delay
+ if(canScroll){
+ //allows to scroll to an active section and
+ //if the section is already active, we prevent firing callbacks
+ isResizing = true;
+
+ scrollPage($(SECTION_ACTIVE_SEL));
+ isResizing = false;
+ }
+ }
+
+ /**
+ * Determines whether the active section has seen in its whole or not.
+ */
+ function isCompletelyInViewPort(movement){
+ var top = $(SECTION_ACTIVE_SEL).position().top;
+ var bottom = top + $window.height();
+
+ if(movement == 'up'){
+ return bottom >= ($window.scrollTop() + $window.height());
+ }
+ return top <= $window.scrollTop();
+ }
+
+ /**
+ * Gets the directon of the the scrolling fired by the scroll event.
+ */
+ function getScrollDirection(currentScroll){
+ var direction = currentScroll > lastScroll ? 'down' : 'up';
+
+ lastScroll = currentScroll;
+
+ //needed for auto-height sections to determine if we want to scroll to the top or bottom of the destination
+ previousDestTop = currentScroll;
+
+ return direction;
+ }
+
+ /**
+ * Determines the way of scrolling up or down:
+ * by 'automatically' scrolling a section or by using the default and normal scrolling.
+ */
+ function scrolling(type){
+ if (!isScrollAllowed.m[type]){
+ return;
+ }
+
+ var scrollSection = (type === 'down') ? moveSectionDown : moveSectionUp;
+
+ if(options.scrollOverflow){
+ var scrollable = options.scrollOverflowHandler.scrollable($(SECTION_ACTIVE_SEL));
+ var check = (type === 'down') ? 'bottom' : 'top';
+
+ if(scrollable.length > 0 ){
+ //is the scrollbar at the start/end of the scroll?
+ if(options.scrollOverflowHandler.isScrolled(check, scrollable)){
+ scrollSection();
+ }else{
+ return true;
+ }
+ }else{
+ // moved up/down
+ scrollSection();
+ }
+ }else{
+ // moved up/down
+ scrollSection();
+ }
+ }
+
+ /*
+ * Preventing bouncing in iOS #2285
+ */
+ function preventBouncing(event){
+ var e = event.originalEvent;
+ if(options.autoScrolling && isReallyTouch(e)){
+ //preventing the easing on iOS devices
+ event.preventDefault();
+ }
+ }
+
+ var touchStartY = 0;
+ var touchStartX = 0;
+ var touchEndY = 0;
+ var touchEndX = 0;
+
+ /* Detecting touch events
+
+ * As we are changing the top property of the page on scrolling, we can not use the traditional way to detect it.
+ * This way, the touchstart and the touch moves shows an small difference between them which is the
+ * used one to determine the direction.
+ */
+ function touchMoveHandler(event){
+ var e = event.originalEvent;
+ var activeSection = $(e.target).closest(SECTION_SEL);
+
+ // additional: if one of the normalScrollElements isn't within options.normalScrollElementTouchThreshold hops up the DOM chain
+ if (isReallyTouch(e) ) {
+
+ if(options.autoScrolling){
+ //preventing the easing on iOS devices
+ event.preventDefault();
+ }
+
+ var touchEvents = getEventsPage(e);
+
+ touchEndY = touchEvents.y;
+ touchEndX = touchEvents.x;
+
+ //if movement in the X axys is greater than in the Y and the currect section has slides...
+ if (activeSection.find(SLIDES_WRAPPER_SEL).length && Math.abs(touchStartX - touchEndX) > (Math.abs(touchStartY - touchEndY))) {
+
+ //is the movement greater than the minimum resistance to scroll?
+ if (!slideMoving && Math.abs(touchStartX - touchEndX) > ($window.outerWidth() / 100 * options.touchSensitivity)) {
+ if (touchStartX > touchEndX) {
+ if(isScrollAllowed.m.right){
+ moveSlideRight(activeSection); //next
+ }
+ } else {
+ if(isScrollAllowed.m.left){
+ moveSlideLeft(activeSection); //prev
+ }
+ }
+ }
+ }
+
+ //vertical scrolling (only when autoScrolling is enabled)
+ else if(options.autoScrolling && canScroll){
+
+ //is the movement greater than the minimum resistance to scroll?
+ if (Math.abs(touchStartY - touchEndY) > ($window.height() / 100 * options.touchSensitivity)) {
+ if (touchStartY > touchEndY) {
+ scrolling('down');
+ } else if (touchEndY > touchStartY) {
+ scrolling('up');
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * As IE >= 10 fires both touch and mouse events when using a mouse in a touchscreen
+ * this way we make sure that is really a touch event what IE is detecting.
+ */
+ function isReallyTouch(e){
+ //if is not IE || IE is detecting `touch` or `pen`
+ return typeof e.pointerType === 'undefined' || e.pointerType != 'mouse';
+ }
+
+ /**
+ * Handler for the touch start event.
+ */
+ function touchStartHandler(event){
+ var e = event.originalEvent;
+
+ //stopping the auto scroll to adjust to a section
+ if(options.fitToSection){
+ $htmlBody.stop();
+ }
+
+ if(isReallyTouch(e)){
+ var touchEvents = getEventsPage(e);
+ touchStartY = touchEvents.y;
+ touchStartX = touchEvents.x;
+ }
+ }
+
+ /**
+ * Gets the average of the last `number` elements of the given array.
+ */
+ function getAverage(elements, number){
+ var sum = 0;
+
+ //taking `number` elements from the end to make the average, if there are not enought, 1
+ var lastElements = elements.slice(Math.max(elements.length - number, 1));
+
+ for(var i = 0; i < lastElements.length; i++){
+ sum = sum + lastElements[i];
+ }
+
+ return Math.ceil(sum/number);
+ }
+
+ /**
+ * Detecting mousewheel scrolling
+ *
+ * http://blogs.sitepointstatic.com/examples/tech/mouse-wheel/index.html
+ * http://www.sitepoint.com/html5-javascript-mouse-wheel/
+ */
+ var prevTime = new Date().getTime();
+
+ function MouseWheelHandler(e) {
+
+ var curTime = new Date().getTime();
+ var isNormalScroll = $(COMPLETELY_SEL).hasClass(NORMAL_SCROLL);
+
+ //autoscrolling and not zooming?
+ if(options.autoScrolling && !controlPressed && !isNormalScroll){
+ // cross-browser wheel delta
+ e = e || window.event;
+ var value = e.wheelDelta || -e.deltaY || -e.detail;
+ var delta = Math.max(-1, Math.min(1, value));
+
+ var horizontalDetection = typeof e.wheelDeltaX !== 'undefined' || typeof e.deltaX !== 'undefined';
+ var isScrollingVertically = (Math.abs(e.wheelDeltaX) < Math.abs(e.wheelDelta)) || (Math.abs(e.deltaX ) < Math.abs(e.deltaY) || !horizontalDetection);
+
+ //Limiting the array to 150 (lets not waste memory!)
+ if(scrollings.length > 149){
+ scrollings.shift();
+ }
+
+ //keeping record of the previous scrollings
+ scrollings.push(Math.abs(value));
+
+ //preventing to scroll the site on mouse wheel when scrollbar is present
+ if(options.scrollBar){
+ e.preventDefault ? e.preventDefault() : e.returnValue = false;
+ }
+
+ //time difference between the last scroll and the current one
+ var timeDiff = curTime-prevTime;
+ prevTime = curTime;
+
+ //haven't they scrolled in a while?
+ //(enough to be consider a different scrolling action to scroll another section)
+ if(timeDiff > 200){
+ //emptying the array, we dont care about old scrollings for our averages
+ scrollings = [];
+ }
+
+ if(canScroll){
+ var averageEnd = getAverage(scrollings, 10);
+ var averageMiddle = getAverage(scrollings, 70);
+ var isAccelerating = averageEnd >= averageMiddle;
+
+ //to avoid double swipes...
+ if(isAccelerating && isScrollingVertically){
+ //scrolling down?
+ if (delta < 0) {
+ scrolling('down');
+
+ //scrolling up?
+ }else {
+ scrolling('up');
+ }
+ }
+ }
+
+ return false;
+ }
+
+ if(options.fitToSection){
+ //stopping the auto scroll to adjust to a section
+ $htmlBody.stop();
+ }
+ }
+
+ /**
+ * Slides a slider to the given direction.
+ * Optional `section` param.
+ */
+ function moveSlide(direction, section){
+ var activeSection = typeof section === 'undefined' ? $(SECTION_ACTIVE_SEL) : section;
+ var slides = activeSection.find(SLIDES_WRAPPER_SEL);
+ var numSlides = slides.find(SLIDE_SEL).length;
+
+ // more than one slide needed and nothing should be sliding
+ if (!slides.length || slideMoving || numSlides < 2) {
+ return;
+ }
+
+ var currentSlide = slides.find(SLIDE_ACTIVE_SEL);
+ var destiny = null;
+
+ if(direction === 'left'){
+ destiny = currentSlide.prev(SLIDE_SEL);
+ }else{
+ destiny = currentSlide.next(SLIDE_SEL);
+ }
+
+ //isn't there a next slide in the secuence?
+ if(!destiny.length){
+ //respect loopHorizontal settin
+ if (!options.loopHorizontal) return;
+
+ if(direction === 'left'){
+ destiny = currentSlide.siblings(':last');
+ }else{
+ destiny = currentSlide.siblings(':first');
+ }
+ }
+
+ slideMoving = true;
+
+ landscapeScroll(slides, destiny, direction);
+ }
+
+ /**
+ * Maintains the active slides in the viewport
+ * (Because the `scroll` animation might get lost with some actions, such as when using continuousVertical)
+ */
+ function keepSlidesPosition(){
+ $(SLIDE_ACTIVE_SEL).each(function(){
+ silentLandscapeScroll($(this), 'internal');
+ });
+ }
+
+ var previousDestTop = 0;
+ /**
+ * Returns the destination Y position based on the scrolling direction and
+ * the height of the section.
+ */
+ function getDestinationPosition(element){
+ var elemPosition = element.position();
+
+ //top of the desination will be at the top of the viewport
+ var position = elemPosition.top;
+ var isScrollingDown = elemPosition.top > previousDestTop;
+ var sectionBottom = position - windowsHeight + element.outerHeight();
+ var bigSectionsDestination = options.bigSectionsDestination;
+
+ //is the destination element bigger than the viewport?
+ if(element.outerHeight() > windowsHeight){
+ //scrolling up?
+ if(!isScrollingDown && !bigSectionsDestination || bigSectionsDestination === 'bottom' ){
+ position = sectionBottom;
+ }
+ }
+
+ //sections equal or smaller than the viewport height && scrolling down? || is resizing and its in the last section
+ else if(isScrollingDown || (isResizing && element.is(':last-child')) ){
+ //The bottom of the destination will be at the bottom of the viewport
+ position = sectionBottom;
+ }
+
+ /*
+ Keeping record of the last scrolled position to determine the scrolling direction.
+ No conventional methods can be used as the scroll bar might not be present
+ AND the section might not be active if it is auto-height and didnt reach the middle
+ of the viewport.
+ */
+ previousDestTop = position;
+ return position;
+ }
+
+ /**
+ * Scrolls the site to the given element and scrolls to the slide if a callback is given.
+ */
+ function scrollPage(element, callback, isMovementUp){
+ if(typeof element === 'undefined'){ return; } //there's no element to scroll, leaving the function
+
+ var dtop = getDestinationPosition(element);
+ var slideAnchorLink;
+ var slideIndex;
+
+ //local variables
+ var v = {
+ element: element,
+ callback: callback,
+ isMovementUp: isMovementUp,
+ dtop: dtop,
+ yMovement: getYmovement(element),
+ anchorLink: element.data('anchor'),
+ sectionIndex: element.index(SECTION_SEL),
+ activeSlide: element.find(SLIDE_ACTIVE_SEL),
+ activeSection: $(SECTION_ACTIVE_SEL),
+ leavingSection: $(SECTION_ACTIVE_SEL).index(SECTION_SEL) + 1,
+
+ //caching the value of isResizing at the momment the function is called
+ //because it will be checked later inside a setTimeout and the value might change
+ localIsResizing: isResizing
+ };
+
+ //quiting when destination scroll is the same as the current one
+ if((v.activeSection.is(element) && !isResizing) || (options.scrollBar && $window.scrollTop() === v.dtop && !element.hasClass(AUTO_HEIGHT) )){ return; }
+
+ if(v.activeSlide.length){
+ slideAnchorLink = v.activeSlide.data('anchor');
+ slideIndex = v.activeSlide.index();
+ }
+
+ //callback (onLeave) if the site is not just resizing and readjusting the slides
+ if($.isFunction(options.onLeave) && !v.localIsResizing){
+ var direction = v.yMovement;
+
+ //required for continousVertical
+ if(typeof isMovementUp !== 'undefined'){
+ direction = isMovementUp ? 'up' : 'down';
+ }
+
+ if(options.onLeave.call(v.activeSection, v.leavingSection, (v.sectionIndex + 1), direction) === false){
+ return;
+ }
+ }
+
+ // If continuousVertical && we need to wrap around
+ if (options.autoScrolling && options.continuousVertical && typeof (v.isMovementUp) !== "undefined" &&
+ ((!v.isMovementUp && v.yMovement == 'up') || // Intending to scroll down but about to go up or
+ (v.isMovementUp && v.yMovement == 'down'))) { // intending to scroll up but about to go down
+
+ v = createInfiniteSections(v);
+ }
+
+ //pausing media of the leaving section (if we are not just resizing, as destinatino will be the same one)
+ if(!v.localIsResizing){
+ stopMedia(v.activeSection);
+ }
+
+ if(options.scrollOverflow){
+ options.scrollOverflowHandler.beforeLeave();
+ }
+
+ element.addClass(ACTIVE).siblings().removeClass(ACTIVE);
+ lazyLoad(element);
+
+ if(options.scrollOverflow){
+ options.scrollOverflowHandler.onLeave();
+ }
+
+ //preventing from activating the MouseWheelHandler event
+ //more than once if the page is scrolling
+ canScroll = false;
+
+ setState(slideIndex, slideAnchorLink, v.anchorLink, v.sectionIndex);
+
+ performMovement(v);
+
+ //flag to avoid callingn `scrollPage()` twice in case of using anchor links
+ lastScrolledDestiny = v.anchorLink;
+
+ //avoid firing it twice (as it does also on scroll)
+ activateMenuAndNav(v.anchorLink, v.sectionIndex);
+ }
+
+ /**
+ * Performs the vertical movement (by CSS3 or by jQuery)
+ */
+ function performMovement(v){
+ // using CSS3 translate functionality
+ if (options.css3 && options.autoScrolling && !options.scrollBar) {
+
+ // The first section can have a negative value in iOS 10. Not quite sure why: -0.0142822265625
+ // that's why we round it to 0.
+ var translate3d = 'translate3d(0px, -' + Math.round(v.dtop) + 'px, 0px)';
+ transformContainer(translate3d, true);
+
+ //even when the scrollingSpeed is 0 there's a little delay, which might cause the
+ //scrollingSpeed to change in case of using silentMoveTo();
+ if(options.scrollingSpeed){
+ clearTimeout(afterSectionLoadsId);
+ afterSectionLoadsId = setTimeout(function () {
+ afterSectionLoads(v);
+ }, options.scrollingSpeed);
+ }else{
+ afterSectionLoads(v);
+ }
+ }
+
+ // using jQuery animate
+ else{
+ var scrollSettings = getScrollSettings(v);
+
+ $(scrollSettings.element).animate(
+ scrollSettings.options,
+ options.scrollingSpeed, options.easing).promise().done(function () { //only one single callback in case of animating `html, body`
+ if(options.scrollBar){
+
+ /* Hack!
+ The timeout prevents setting the most dominant section in the viewport as "active" when the user
+ scrolled to a smaller section by using the mousewheel (auto scrolling) rather than draging the scroll bar.
+
+ When using scrollBar:true It seems like the scroll events still getting propagated even after the scrolling animation has finished.
+ */
+ setTimeout(function(){
+ afterSectionLoads(v);
+ },30);
+ }else{
+ afterSectionLoads(v);
+ }
+ });
+ }
+ }
+
+ /**
+ * Gets the scrolling settings depending on the plugin autoScrolling option
+ */
+ function getScrollSettings(v){
+ var scroll = {};
+
+ if(options.autoScrolling && !options.scrollBar){
+ scroll.options = { 'top': -v.dtop};
+ scroll.element = WRAPPER_SEL;
+ }else{
+ scroll.options = { 'scrollTop': v.dtop};
+ scroll.element = 'html, body';
+ }
+
+ return scroll;
+ }
+
+ /**
+ * Adds sections before or after the current one to create the infinite effect.
+ */
+ function createInfiniteSections(v){
+ // Scrolling down
+ if (!v.isMovementUp) {
+ // Move all previous sections to after the active section
+ $(SECTION_ACTIVE_SEL).after(v.activeSection.prevAll(SECTION_SEL).get().reverse());
+ }
+ else { // Scrolling up
+ // Move all next sections to before the active section
+ $(SECTION_ACTIVE_SEL).before(v.activeSection.nextAll(SECTION_SEL));
+ }
+
+ // Maintain the displayed position (now that we changed the element order)
+ silentScroll($(SECTION_ACTIVE_SEL).position().top);
+
+ // Maintain the active slides visible in the viewport
+ keepSlidesPosition();
+
+ // save for later the elements that still need to be reordered
+ v.wrapAroundElements = v.activeSection;
+
+ // Recalculate animation variables
+ v.dtop = v.element.position().top;
+ v.yMovement = getYmovement(v.element);
+
+ //sections will temporally have another position in the DOM
+ //updating this values in case we need them
+ v.leavingSection = v.activeSection.index(SECTION_SEL) + 1;
+ v.sectionIndex = v.element.index(SECTION_SEL);
+
+ return v;
+ }
+
+ /**
+ * Fix section order after continuousVertical changes have been animated
+ */
+ function continuousVerticalFixSectionOrder (v) {
+ // If continuousVertical is in effect (and autoScrolling would also be in effect then),
+ // finish moving the elements around so the direct navigation will function more simply
+ if (!v.wrapAroundElements || !v.wrapAroundElements.length) {
+ return;
+ }
+
+ if (v.isMovementUp) {
+ $(SECTION_FIRST_SEL).before(v.wrapAroundElements);
+ }
+ else {
+ $(SECTION_LAST_SEL).after(v.wrapAroundElements);
+ }
+
+ silentScroll($(SECTION_ACTIVE_SEL).position().top);
+
+ // Maintain the active slides visible in the viewport
+ keepSlidesPosition();
+ }
+
+
+ /**
+ * Actions to do once the section is loaded.
+ */
+ function afterSectionLoads (v){
+ continuousVerticalFixSectionOrder(v);
+
+ //callback (afterLoad) if the site is not just resizing and readjusting the slides
+ $.isFunction(options.afterLoad) && !v.localIsResizing && options.afterLoad.call(v.element, v.anchorLink, (v.sectionIndex + 1));
+
+ if(options.scrollOverflow){
+ options.scrollOverflowHandler.afterLoad();
+ }
+
+ if(!v.localIsResizing){
+ playMedia(v.element);
+ }
+
+ v.element.addClass(COMPLETELY).siblings().removeClass(COMPLETELY);
+
+ canScroll = true;
+
+ $.isFunction(v.callback) && v.callback.call(this);
+ }
+
+ /**
+ * Sets the value for the given attribute from the `data-` attribute with the same suffix
+ * ie: data-srcset ==> srcset | data-src ==> src
+ */
+ function setSrc(element, attribute){
+ element
+ .attr(attribute, element.data(attribute))
+ .removeAttr('data-' + attribute);
+ }
+
+ /**
+ * Lazy loads image, video and audio elements.
+ */
+ function lazyLoad(destiny){
+ if (!options.lazyLoading){
+ return;
+ }
+
+ var panel = getSlideOrSection(destiny);
+ var element;
+
+ panel.find('img[data-src], img[data-srcset], source[data-src], source[data-srcset], video[data-src], audio[data-src], iframe[data-src]').each(function(){
+ element = $(this);
+
+ $.each(['src', 'srcset'], function(index, type){
+ var attribute = element.attr('data-' + type);
+ if(typeof attribute !== 'undefined' && attribute){
+ setSrc(element, type);
+ }
+ });
+
+ if(element.is('source')){
+ var typeToPlay = element.closest('video').length ? 'video' : 'audio';
+ element.closest(typeToPlay).get(0).load();
+ }
+ });
+ }
+
+ /**
+ * Plays video and audio elements.
+ */
+ function playMedia(destiny){
+ var panel = getSlideOrSection(destiny);
+
+ //playing HTML5 media elements
+ panel.find('video, audio').each(function(){
+ var element = $(this).get(0);
+
+ if( element.hasAttribute('data-autoplay') && typeof element.play === 'function' ) {
+ element.play();
+ }
+ });
+
+ //youtube videos
+ panel.find('iframe[src*="youtube.com/embed/"]').each(function(){
+ var element = $(this).get(0);
+
+ if ( element.hasAttribute('data-autoplay') ){
+ playYoutube(element);
+ }
+
+ //in case the URL was not loaded yet. On page load we need time for the new URL (with the API string) to load.
+ element.onload = function() {
+ if ( element.hasAttribute('data-autoplay') ){
+ playYoutube(element);
+ }
+ };
+ });
+ }
+
+ /**
+ * Plays a youtube video
+ */
+ function playYoutube(element){
+ element.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
+ }
+
+ /**
+ * Stops video and audio elements.
+ */
+ function stopMedia(destiny){
+ var panel = getSlideOrSection(destiny);
+
+ //stopping HTML5 media elements
+ panel.find('video, audio').each(function(){
+ var element = $(this).get(0);
+
+ if( !element.hasAttribute('data-keepplaying') && typeof element.pause === 'function' ) {
+ element.pause();
+ }
+ });
+
+ //youtube videos
+ panel.find('iframe[src*="youtube.com/embed/"]').each(function(){
+ var element = $(this).get(0);
+
+ if( /youtube\.com\/embed\//.test($(this).attr('src')) && !element.hasAttribute('data-keepplaying')){
+ $(this).get(0).contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}','*');
+ }
+ });
+ }
+
+ /**
+ * Gets the active slide (or section) for the given section
+ */
+ function getSlideOrSection(destiny){
+ var slide = destiny.find(SLIDE_ACTIVE_SEL);
+ if( slide.length ) {
+ destiny = $(slide);
+ }
+
+ return destiny;
+ }
+
+ /**
+ * Scrolls to the anchor in the URL when loading the site
+ */
+ function scrollToAnchor(){
+ var anchors = getAnchorsURL();
+ var sectionAnchor = anchors.section;
+ var slideAnchor = anchors.slide;
+
+ if(sectionAnchor){ //if theres any #
+ if(options.animateAnchor){
+ scrollPageAndSlide(sectionAnchor, slideAnchor);
+ }else{
+ silentMoveTo(sectionAnchor, slideAnchor);
+ }
+ }
+ }
+
+ /**
+ * Detecting any change on the URL to scroll to the given anchor link
+ * (a way to detect back history button as we play with the hashes on the URL)
+ */
+ function hashChangeHandler(){
+ if(!isScrolling && !options.lockAnchors){
+ var anchors = getAnchorsURL();
+ var sectionAnchor = anchors.section;
+ var slideAnchor = anchors.slide;
+
+ //when moving to a slide in the first section for the first time (first time to add an anchor to the URL)
+ var isFirstSlideMove = (typeof lastScrolledDestiny === 'undefined');
+ var isFirstScrollMove = (typeof lastScrolledDestiny === 'undefined' && typeof slideAnchor === 'undefined' && !slideMoving);
+
+ if(sectionAnchor && sectionAnchor.length){
+ /*in order to call scrollpage() only once for each destination at a time
+ It is called twice for each scroll otherwise, as in case of using anchorlinks `hashChange`
+ event is fired on every scroll too.*/
+ if ((sectionAnchor && sectionAnchor !== lastScrolledDestiny) && !isFirstSlideMove
+ || isFirstScrollMove
+ || (!slideMoving && lastScrolledSlide != slideAnchor )){
+
+ scrollPageAndSlide(sectionAnchor, slideAnchor);
+ }
+ }
+ }
+ }
+
+ //gets the URL anchors (section and slide)
+ function getAnchorsURL(){
+ var section;
+ var slide;
+ var hash = window.location.hash;
+
+ if(hash.length){
+ //getting the anchor link in the URL and deleting the `#`
+ var anchorsParts = hash.replace('#', '').split('/');
+
+ //using / for visual reasons and not as a section/slide separator #2803
+ var isFunkyAnchor = hash.indexOf('#/') > -1;
+
+ section = isFunkyAnchor ? '/' + anchorsParts[1] : decodeURIComponent(anchorsParts[0]);
+
+ var slideAnchor = isFunkyAnchor ? anchorsParts[2] : anchorsParts[1];
+ if(slideAnchor && slideAnchor.length){
+ slide = decodeURIComponent(slideAnchor);
+ }
+ }
+
+ return {
+ section: section,
+ slide: slide
+ }
+ }
+
+ //when opening a new tab (ctrl + t), `control` won't be pressed when comming back.
+ $(window).blur(function() {
+ isWindowFocused = false;
+ controlPressed = false;
+ });
+
+ var keydownId;
+ function keydownHandler(e) {
+
+ clearTimeout(keydownId);
+
+
+ var activeElement = $(':focus');
+
+ if(!activeElement.is('textarea') && !activeElement.is('input') && !activeElement.is('select') &&
+ options.keyboardScrolling && options.autoScrolling){
+ var keyCode = e.which;
+
+ //preventing the scroll with arrow keys & spacebar & Page Up & Down keys
+ var keyControls = [40, 38, 32, 33, 34];
+ if($.inArray(keyCode, keyControls) > -1){
+ e.preventDefault();
+ }
+
+ controlPressed = e.ctrlKey;
+
+ keydownId = setTimeout(function(){
+ onkeydown(e);
+ },150);
+ }
+ }
+
+ function tooltipTextHandler(){
+ $(this).prev().trigger('click');
+ }
+
+ //to prevent scrolling while zooming
+ function keyUpHandler(e){
+ if(isWindowFocused){ //the keyup gets fired on new tab ctrl + t in Firefox
+ controlPressed = e.ctrlKey;
+ }
+ }
+
+ //binding the mousemove when the mouse's middle button is released
+ function mouseDownHandler(e){
+ //middle button
+ if (e.which == 2){
+ oldPageY = e.pageY;
+ container.on('mousemove', mouseMoveHandler);
+ }
+ }
+
+ //unbinding the mousemove when the mouse's middle button is released
+ function mouseUpHandler(e){
+ //middle button
+ if (e.which == 2){
+ container.off('mousemove');
+ }
+ }
+
+ //Scrolling horizontally when clicking on the slider controls.
+ function slideArrowHandler(){
+ var section = $(this).closest(SECTION_SEL);
+
+ if ($(this).hasClass(SLIDES_PREV)) {
+ if(isScrollAllowed.m.left){
+ moveSlideLeft(section);
+ }
+ } else {
+ if(isScrollAllowed.m.right){
+ moveSlideRight(section);
+ }
+ }
+ }
+
+ //when opening a new tab (ctrl + t), `control` won't be pressed when coming back.
+ function blurHandler(){
+ isWindowFocused = false;
+ controlPressed = false;
+ }
+
+ //Scrolls to the section when clicking the navigation bullet
+ function sectionBulletHandler(e){
+ e.preventDefault();
+ var index = $(this).parent().index();
+ scrollPage($(SECTION_SEL).eq(index));
+ }
+
+ //Scrolls the slider to the given slide destination for the given section
+ function slideBulletHandler(e){
+ e.preventDefault();
+ var slides = $(this).closest(SECTION_SEL).find(SLIDES_WRAPPER_SEL);
+ var destiny = slides.find(SLIDE_SEL).eq($(this).closest('li').index());
+
+ landscapeScroll(slides, destiny);
+ }
+
+ /**
+ * Keydown event
+ */
+ function onkeydown(e){
+ var shiftPressed = e.shiftKey;
+
+ switch (e.which) {
+ //up
+ case 38:
+ case 33:
+ if(isScrollAllowed.k.up){
+ FP.moveSectionUp();
+ }
+ break;
+
+ //down
+ case 32: //spacebar
+ if(shiftPressed && isScrollAllowed.k.up){
+ FP.moveSectionUp();
+ break;
+ }
+ case 40:
+ case 34:
+ if(isScrollAllowed.k.down){
+ FP.moveSectionDown();
+ }
+ break;
+
+ //Home
+ case 36:
+ if(isScrollAllowed.k.up){
+ FP.moveTo(1);
+ }
+ break;
+
+ //End
+ case 35:
+ if(isScrollAllowed.k.down){
+ FP.moveTo( $(SECTION_SEL).length );
+ }
+ break;
+
+ //left
+ case 37:
+ if(isScrollAllowed.k.left){
+ FP.moveSlideLeft();
+ }
+ break;
+
+ //right
+ case 39:
+ if(isScrollAllowed.k.right){
+ FP.moveSlideRight();
+ }
+ break;
+
+ default:
+ return; // exit this handler for other keys
+ }
+ }
+
+ //binding the mousemove when the mouse's middle button is released
+ container.mousedown(function(e){
+ //middle button
+ if (e.which == 2){
+ oldPageY = e.pageY;
+ container.on('mousemove', mouseMoveHandler);
+ }
+ });
+
+ //unbinding the mousemove when the mouse's middle button is released
+ container.mouseup(function(e){
+ //middle button
+ if (e.which == 2){
+ container.off('mousemove');
+ }
+ });
+
+ /**
+ * Detecting the direction of the mouse movement.
+ * Used only for the middle button of the mouse.
+ */
+ var oldPageY = 0;
+ function mouseMoveHandler(e){
+ // moving up
+ if(canScroll){
+ if (e.pageY < oldPageY){
+ FP.moveSectionUp();
+
+ // moving downw
+ }else if(e.pageY > oldPageY){
+ FP.moveSectionDown();
+ }
+ }
+ oldPageY = e.pageY;
+ }
+
+ /**
+ * Scrolls to the section when clicking the navigation bullet
+ */
+ $document.on('click touchstart', SECTION_NAV_SEL + ' a', function(e){
+ e.preventDefault();
+ var index = $(this).parent().index();
+ scrollPage($(SECTION_SEL).eq(index));
+ });
+
+ /**
+ * Scrolls the slider to the given slide destination for the given section
+ */
+ $document.on('click touchstart', SLIDES_NAV_LINK_SEL, function(e){
+ e.preventDefault();
+ var slides = $(this).closest(SECTION_SEL).find(SLIDES_WRAPPER_SEL);
+ var destiny = slides.find(SLIDE_SEL).eq($(this).closest('li').index());
+
+ landscapeScroll(slides, destiny);
+ });
+
+ /**
+ * Applying normalScroll elements.
+ * Ignoring the scrolls over the specified selectors.
+ */
+ if(options.normalScrollElements){
+ $document.on('mouseenter', options.normalScrollElements, function () {
+ FP.setMouseWheelScrolling(false);
+ });
+
+ $document.on('mouseleave', options.normalScrollElements, function(){
+ FP.setMouseWheelScrolling(true);
+ });
+ }
+
+ /**
+ * Scrolling horizontally when clicking on the slider controls.
+ */
+ $(SECTION_SEL).on('click touchstart', SLIDES_ARROW_SEL, function() {
+ if ($(this).hasClass(SLIDES_PREV)) {
+ if(isScrollAllowed.m.left){
+ FP.moveSlideLeft();
+ }
+ } else {
+ if(isScrollAllowed.m.right){
+ FP.moveSlideRight();
+ }
+ }
+ });
+
+ /**
+ * Scrolls horizontal sliders.
+ */
+ function landscapeScroll(slides, destiny){
+ var destinyPos = destiny.position();
+ var slideIndex = destiny.index();
+ var section = slides.closest(SECTION_SEL);
+ var sectionIndex = section.index(SECTION_SEL);
+ var anchorLink = section.data('anchor');
+ var slidesNav = section.find(SLIDES_NAV_SEL);
+ var slideAnchor = getAnchor(destiny);
+
+ //caching the value of isResizing at the momment the function is called
+ //because it will be checked later inside a setTimeout and the value might change
+ var localIsResizing = isResizing;
+
+ if(options.onSlideLeave){
+ var prevSlide = section.find(SLIDE_ACTIVE_SEL);
+ var prevSlideIndex = prevSlide.index();
+ var xMovement = getXmovement(prevSlideIndex, slideIndex);
+
+ //if the site is not just resizing and readjusting the slides
+ if(!localIsResizing && xMovement!=='none'){
+ if($.isFunction( options.onSlideLeave )){
+ if(options.onSlideLeave.call( prevSlide, anchorLink, (sectionIndex + 1), prevSlideIndex, xMovement, slideIndex ) === false){
+ slideMoving = false;
+ return;
+ }
+ }
+ }
+ }
+
+ destiny.addClass(ACTIVE).siblings().removeClass(ACTIVE);
+ if(!localIsResizing){
+ lazyLoad(destiny);
+ }
+
+ if(!options.loopHorizontal && options.controlArrows){
+ //hidding it for the fist slide, showing for the rest
+ section.find(SLIDES_ARROW_PREV_SEL).toggle(slideIndex!==0);
+
+ //hidding it for the last slide, showing for the rest
+ section.find(SLIDES_ARROW_NEXT_SEL).toggle(!destiny.is(':last-child'));
+ }
+
+ //only changing the URL if the slides are in the current section (not for resize re-adjusting)
+ if(section.hasClass(ACTIVE)){
+ setState(slideIndex, slideAnchor, anchorLink, sectionIndex);
+ }
+
+ var afterSlideLoads = function(){
+ //if the site is not just resizing and readjusting the slides
+ if(!localIsResizing){
+ $.isFunction( options.afterSlideLoad ) && options.afterSlideLoad.call( destiny, anchorLink, (sectionIndex + 1), slideAnchor, slideIndex);
+ }
+ //letting them slide again
+ slideMoving = false;
+ };
+
+ if(options.css3){
+ var translate3d = 'translate3d(-' + Math.round(destinyPos.left) + 'px, 0px, 0px)';
+
+ addAnimation(slides.find(SLIDES_CONTAINER_SEL), options.scrollingSpeed>0).css(getTransforms(translate3d));
+
+ afterSlideLoadsId = setTimeout(function(){
+ afterSlideLoads();
+ }, options.scrollingSpeed, options.easing);
+ }else{
+ slides.animate({
+ scrollLeft : Math.round(destinyPos.left)
+ }, options.scrollingSpeed, options.easing, function() {
+
+ afterSlideLoads();
+ });
+ }
+
+ slidesNav.find(ACTIVE_SEL).removeClass(ACTIVE);
+ slidesNav.find('li').eq(slideIndex).find('a').addClass(ACTIVE);
+ }
+
+ //when resizing the site, we adjust the heights of the sections, slimScroll...
+ $window.resize(resizeHandler);
+
+ var previousHeight = windowsHeight;
+ function resizeHandler(){
+ //checking if it needs to get responsive
+ responsive();
+
+ // rebuild immediately on touch devices
+ if (isTouchDevice) {
+ var activeElement = $(document.activeElement);
+
+ //if the keyboard is NOT visible
+ if (!activeElement.is('textarea') && !activeElement.is('input') && !activeElement.is('select')) {
+ var currentHeight = $window.height();
+
+ //making sure the change in the viewport size is enough to force a rebuild. (20 % of the window to avoid problems when hidding scroll bars)
+ if( Math.abs(currentHeight - previousHeight) > (20 * Math.max(previousHeight, currentHeight) / 100) ){
+ FP.reBuild(true);
+ previousHeight = currentHeight;
+ }
+ }
+ }else{
+ //in order to call the functions only when the resize is finished
+ //http://stackoverflow.com/questions/4298612/jquery-how-to-call-resize-event-only-once-its-finished-resizing
+ clearTimeout(resizeId);
+
+ resizeId = setTimeout(function(){
+ FP.reBuild(true);
+ }, 350);
+ }
+ }
+
+ /**
+ * Checks if the site needs to get responsive and disables autoScrolling if so.
+ * A class `fp-responsive` is added to the plugin's container in case the user wants to use it for his own responsive CSS.
+ */
+ function responsive(){
+ var widthLimit = options.responsive || options.responsiveWidth; //backwards compatiblity
+ var heightLimit = options.responsiveHeight;
+
+ //only calculating what we need. Remember its called on the resize event.
+ var isBreakingPointWidth = widthLimit && $window.outerWidth() < widthLimit;
+ var isBreakingPointHeight = heightLimit && $window.height() < heightLimit;
+
+ if(widthLimit && heightLimit){
+ setResponsive(isBreakingPointWidth || isBreakingPointHeight);
+ }
+ else if(widthLimit){
+ setResponsive(isBreakingPointWidth);
+ }
+ else if(heightLimit){
+ setResponsive(isBreakingPointHeight);
+ }
+ }
+
+ /**
+ * Adds transition animations for the given element
+ */
+ function addAnimation(element){
+ var transition = 'all ' + options.scrollingSpeed + 'ms ' + options.easingcss3;
+
+ element.removeClass(NO_TRANSITION);
+ return element.css({
+ '-webkit-transition': transition,
+ 'transition': transition
+ });
+ }
+
+ /**
+ * Remove transition animations for the given element
+ */
+ function removeAnimation(element){
+ return element.addClass(NO_TRANSITION);
+ }
+
+ /**
+ * Activating the vertical navigation bullets according to the given slide name.
+ */
+ function activateNavDots(name, sectionIndex){
+ if(options.navigation){
+ $(SECTION_NAV_SEL).find(ACTIVE_SEL).removeClass(ACTIVE);
+ if(name){
+ $(SECTION_NAV_SEL).find('a[href="#' + name + '"]').addClass(ACTIVE);
+ }else{
+ $(SECTION_NAV_SEL).find('li').eq(sectionIndex).find('a').addClass(ACTIVE);
+ }
+ }
+ }
+
+ /**
+ * Activating the website main menu elements according to the given slide name.
+ */
+ function activateMenuElement(name){
+ if(options.menu){
+ $(options.menu).find(ACTIVE_SEL).removeClass(ACTIVE);
+ $(options.menu).find('[data-menuanchor="'+name+'"]').addClass(ACTIVE);
+ }
+ }
+
+ /**
+ * Sets to active the current menu and vertical nav items.
+ */
+ function activateMenuAndNav(anchor, index){
+ activateMenuElement(anchor);
+ activateNavDots(anchor, index);
+ }
+
+ /**
+ * Retuns `up` or `down` depending on the scrolling movement to reach its destination
+ * from the current section.
+ */
+ function getYmovement(destiny){
+ var fromIndex = $(SECTION_ACTIVE_SEL).index(SECTION_SEL);
+ var toIndex = destiny.index(SECTION_SEL);
+ if( fromIndex == toIndex){
+ return 'none';
+ }
+ if(fromIndex > toIndex){
+ return 'up';
+ }
+ return 'down';
+ }
+
+ /**
+ * Retuns `right` or `left` depending on the scrolling movement to reach its destination
+ * from the current slide.
+ */
+ function getXmovement(fromIndex, toIndex){
+ if( fromIndex == toIndex){
+ return 'none';
+ }
+ if(fromIndex > toIndex){
+ return 'left';
+ }
+ return 'right';
+ }
+
+ function addTableClass(element){
+ //In case we are styling for the 2nd time as in with reponsiveSlides
+ if(!element.hasClass(TABLE)){
+ var wrapper = $('<div class="' + TABLE_CELL + '" />').height(getTableHeight(element));
+ element.addClass(TABLE).wrapInner(wrapper);
+ }
+ }
+
+ function getTableHeight(element){
+ var sectionHeight = windowsHeight;
+
+ if(options.paddingTop || options.paddingBottom){
+ var section = element;
+ if(!section.hasClass(SECTION)){
+ section = element.closest(SECTION_SEL);
+ }
+
+ var paddings = parseInt(section.css('padding-top')) + parseInt(section.css('padding-bottom'));
+ sectionHeight = (windowsHeight - paddings);
+ }
+
+ return sectionHeight;
+ }
+
+ /**
+ * Adds a css3 transform property to the container class with or without animation depending on the animated param.
+ */
+ function transformContainer(translate3d, animated){
+ if(animated){
+ addAnimation(container);
+ }else{
+ removeAnimation(container);
+ }
+
+ container.css(getTransforms(translate3d));
+
+ //syncronously removing the class after the animation has been applied.
+ setTimeout(function(){
+ container.removeClass(NO_TRANSITION);
+ },10);
+ }
+
+ /**
+ * Gets a section by its anchor / index
+ */
+ function getSectionByAnchor(sectionAnchor){
+ var section = container.find(SECTION_SEL + '[data-anchor="'+sectionAnchor+'"]');
+ if(!section.length){
+ var sectionIndex = typeof sectionAnchor !== 'undefined' ? sectionAnchor -1 : 0;
+ section = $(SECTION_SEL).eq(sectionIndex);
+ }
+
+ return section;
+ }
+
+ /**
+ * Gets a slide inside a given section by its anchor / index
+ */
+ function getSlideByAnchor(slideAnchor, section){
+ var slide = section.find(SLIDE_SEL + '[data-anchor="'+slideAnchor+'"]');
+ if(!slide.length){
+ slideAnchor = typeof slideAnchor !== 'undefined' ? slideAnchor : 0;
+ slide = section.find(SLIDE_SEL).eq(slideAnchor);
+ }
+
+ return slide;
+ }
+
+ /**
+ * Scrolls to the given section and slide anchors
+ */
+ function scrollPageAndSlide(sectionAnchor, slideAnchor){
+ var section = getSectionByAnchor(sectionAnchor);
+
+ //do nothing if there's no section with the given anchor name
+ if(!section.length) return;
+
+ var slide = getSlideByAnchor(slideAnchor, section);
+
+ //we need to scroll to the section and then to the slide
+ if (sectionAnchor !== lastScrolledDestiny && !section.hasClass(ACTIVE)){
+ scrollPage(section, function(){
+ scrollSlider(slide);
+ });
+ }
+ //if we were already in the section
+ else{
+ scrollSlider(slide);
+ }
+ }
+
+ /**
+ * Scrolls the slider to the given slide destination for the given section
+ */
+ function scrollSlider(slide){
+ if(slide.length){
+ landscapeScroll(slide.closest(SLIDES_WRAPPER_SEL), slide);
+ }
+ }
+
+ /**
+ * Creates a landscape navigation bar with dots for horizontal sliders.
+ */
+ function addSlidesNavigation(section, numSlides){
+ section.append('<div class="' + SLIDES_NAV + '"><ul></ul></div>');
+ var nav = section.find(SLIDES_NAV_SEL);
+
+ //top or bottom
+ nav.addClass(options.slidesNavPosition);
+
+ for(var i=0; i< numSlides; i++){
+ nav.find('ul').append('<li><a href="#"><span></span></a></li>');
+ }
+
+ //centering it
+ nav.css('margin-left', '-' + (nav.width()/2) + 'px');
+
+ nav.find('li').first().find('a').addClass(ACTIVE);
+ }
+
+
+ /**
+ * Sets the state of the website depending on the active section/slide.
+ * It changes the URL hash when needed and updates the body class.
+ */
+ function setState(slideIndex, slideAnchor, anchorLink, sectionIndex){
+ var sectionHash = '';
+
+ if(options.anchors.length && !options.lockAnchors){
+
+ //isn't it the first slide?
+ if(slideIndex){
+ if(typeof anchorLink !== 'undefined'){
+ sectionHash = anchorLink;
+ }
+
+ //slide without anchor link? We take the index instead.
+ if(typeof slideAnchor === 'undefined'){
+ slideAnchor = slideIndex;
+ }
+
+ lastScrolledSlide = slideAnchor;
+ setUrlHash(sectionHash + '/' + slideAnchor);
+
+ //first slide won't have slide anchor, just the section one
+ }else if(typeof slideIndex !== 'undefined'){
+ lastScrolledSlide = slideAnchor;
+ setUrlHash(anchorLink);
+ }
+
+ //section without slides
+ else{
+ setUrlHash(anchorLink);
+ }
+ }
+
+ setBodyClass();
+ }
+
+ /*DDDDDDDDDDDDDDDDDDDDDD*/
+
+ /**
+ * Sets the URL hash.
+ */
+ function setUrlHash(url){
+ if(options.recordHistory){
+ location.hash = url;
+ }else{
+ //Mobile Chrome doesn't work the normal way, so... lets use HTML5 for phones :)
+ if(isTouchDevice || isTouch){
+ window.history.replaceState(undefined, undefined, '#' + url);
+ }else{
+ var baseUrl = window.location.href.split('#')[0];
+ window.location.replace( baseUrl + '#' + url );
+ }
+ }
+ }
+
+ /**
+ * Gets the anchor for the given slide / section. Its index will be used if there's none.
+ */
+ function getAnchor(element){
+ var anchor = element.data('anchor');
+ var index = element.index();
+
+ //Slide without anchor link? We take the index instead.
+ if(typeof anchor === 'undefined'){
+ anchor = index;
+ }
+
+ return anchor;
+ }
+
+ /**
+ * Sets a class for the body of the page depending on the active section / slide
+ */
+ function setBodyClass(){
+ var section = $(SECTION_ACTIVE_SEL);
+ var slide = section.find(SLIDE_ACTIVE_SEL);
+
+ var sectionAnchor = getAnchor(section);
+ var slideAnchor = getAnchor(slide);
+
+ var text = String(sectionAnchor);
+
+ if(slide.length){
+ text = text + '-' + slideAnchor;
+ }
+
+ //changing slash for dash to make it a valid CSS style
+ text = text.replace('/', '-').replace('#','');
+
+ //removing previous anchor classes
+ var classRe = new RegExp('\\b\\s?' + VIEWING_PREFIX + '-[^\\s]+\\b', "g");
+ $body[0].className = $body[0].className.replace(classRe, '');
+
+ //adding the current anchor
+ $body.addClass(VIEWING_PREFIX + '-' + text);
+ }
+
+ /**
+ * Checks for translate3d support
+ * @return boolean
+ * http://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support
+ */
+ function support3d() {
+ var el = document.createElement('p'),
+ has3d,
+ transforms = {
+ 'webkitTransform':'-webkit-transform',
+ 'OTransform':'-o-transform',
+ 'msTransform':'-ms-transform',
+ 'MozTransform':'-moz-transform',
+ 'transform':'transform'
+ };
+
+ // Add it to the body to get the computed style.
+ document.body.insertBefore(el, null);
+
+ for (var t in transforms) {
+ if (el.style[t] !== undefined) {
+ el.style[t] = 'translate3d(1px,1px,1px)';
+ has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);
+ }
+ }
+
+ document.body.removeChild(el);
+
+ return (has3d !== undefined && has3d.length > 0 && has3d !== 'none');
+ }
+
+ /**
+ * Removes the auto scrolling action fired by the mouse wheel and trackpad.
+ * After this function is called, the mousewheel and trackpad movements won't scroll through sections.
+ */
+ function removeMouseWheelHandler(){
+ if (document.addEventListener) {
+ document.removeEventListener('mousewheel', MouseWheelHandler, false); //IE9, Chrome, Safari, Oper
+ document.removeEventListener('wheel', MouseWheelHandler, false); //Firefox
+ document.removeEventListener('MozMousePixelScroll', MouseWheelHandler, false); //old Firefox
+ } else {
+ document.detachEvent('onmousewheel', MouseWheelHandler); //IE 6/7/8
+ }
+ }
+
+ /**
+ * Adds the auto scrolling action for the mouse wheel and trackpad.
+ * After this function is called, the mousewheel and trackpad movements will scroll through sections
+ * https://developer.mozilla.org/en-US/docs/Web/Events/wheel
+ */
+ function addMouseWheelHandler(){
+ var prefix = '';
+ var _addEventListener;
+
+ if (window.addEventListener){
+ _addEventListener = "addEventListener";
+ }else{
+ _addEventListener = "attachEvent";
+ prefix = 'on';
+ }
+
+ // detect available wheel event
+ var support = 'onwheel' in document.createElement('div') ? 'wheel' : // Modern browsers support "wheel"
+ document.onmousewheel !== undefined ? 'mousewheel' : // Webkit and IE support at least "mousewheel"
+ 'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox
+
+
+ if(support == 'DOMMouseScroll'){
+ document[ _addEventListener ](prefix + 'MozMousePixelScroll', MouseWheelHandler, false);
+ }
+
+ //handle MozMousePixelScroll in older Firefox
+ else{
+ document[ _addEventListener ](prefix + support, MouseWheelHandler, false);
+ }
+ }
+
+ /**
+ * Binding the mousemove when the mouse's middle button is pressed
+ */
+ function addMiddleWheelHandler(){
+ container
+ .on('mousedown', mouseDownHandler)
+ .on('mouseup', mouseUpHandler);
+ }
+
+ /**
+ * Unbinding the mousemove when the mouse's middle button is released
+ */
+ function removeMiddleWheelHandler(){
+ container
+ .off('mousedown', mouseDownHandler)
+ .off('mouseup', mouseUpHandler);
+ }
+
+ /**
+ * Adds the possibility to auto scroll through sections on touch devices.
+ */
+ function addTouchHandler(){
+ if(isTouchDevice || isTouch){
+ if(options.autoScrolling){
+ $body.off(events.touchmove).on(events.touchmove, preventBouncing);
+ }
+
+ $(WRAPPER_SEL)
+ .off(events.touchstart).on(events.touchstart, touchStartHandler)
+ .off(events.touchmove).on(events.touchmove, touchMoveHandler);
+ }
+ }
+
+ /**
+ * Removes the auto scrolling for touch devices.
+ */
+ function removeTouchHandler(){
+ if(isTouchDevice || isTouch){
+ if(options.autoScrolling){
+ $body.off(events.touchmove);
+ }
+
+ $(WRAPPER_SEL)
+ .off(events.touchstart)
+ .off(events.touchmove);
+ }
+ }
+
+ /*
+ * Returns and object with Microsoft pointers (for IE<11 and for IE >= 11)
+ * http://msdn.microsoft.com/en-us/library/ie/dn304886(v=vs.85).aspx
+ */
+ function getMSPointer(){
+ var pointer;
+
+ //IE >= 11 & rest of browsers
+ if(window.PointerEvent){
+ pointer = { down: 'pointerdown', move: 'pointermove'};
+ }
+
+ //IE < 11
+ else{
+ pointer = { down: 'MSPointerDown', move: 'MSPointerMove'};
+ }
+
+ return pointer;
+ }
+
+ /**
+ * Gets the pageX and pageY properties depending on the browser.
+ * https://github.com/alvarotrigo/fullPage.js/issues/194#issuecomment-34069854
+ */
+ function getEventsPage(e){
+ var events = [];
+
+ events.y = (typeof e.pageY !== 'undefined' && (e.pageY || e.pageX) ? e.pageY : e.touches[0].pageY);
+ events.x = (typeof e.pageX !== 'undefined' && (e.pageY || e.pageX) ? e.pageX : e.touches[0].pageX);
+
+ //in touch devices with scroll bar, e.pageY is detected, but we have to deal with touch events. #1008
+ if(isTouch && isReallyTouch(e) && (options.scrollBar || !options.autoScrolling)){
+ events.y = e.touches[0].pageY;
+ events.x = e.touches[0].pageX;
+ }
+
+ return events;
+ }
+
+ /**
+ * Slides silently (with no animation) the active slider to the given slide.
+ * @param noCallback {bool} true or defined -> no callbacks
+ */
+ function silentLandscapeScroll(activeSlide, noCallbacks){
+ setScrollingSpeed (0, 'internal');
+
+ if(typeof noCallbacks !== 'undefined'){
+ //preventing firing callbacks afterSlideLoad etc.
+ isResizing = true;
+ }
+
+ landscapeScroll(activeSlide.closest(SLIDES_WRAPPER_SEL), activeSlide);
+
+ if(typeof noCallbacks !== 'undefined'){
+ isResizing = false;
+ }
+
+ setScrollingSpeed(originals.scrollingSpeed, 'internal');
+ }
+
+ /**
+ * Scrolls silently (with no animation) the page to the given Y position.
+ */
+ function silentScroll(top){
+ // The first section can have a negative value in iOS 10. Not quite sure why: -0.0142822265625
+ // that's why we round it to 0.
+ var roundedTop = Math.round(top);
+
+ if (options.css3 && options.autoScrolling && !options.scrollBar){
+ var translate3d = 'translate3d(0px, -' + roundedTop + 'px, 0px)';
+ transformContainer(translate3d, false);
+ }
+ else if(options.autoScrolling && !options.scrollBar){
+ container.css('top', -roundedTop);
+ }
+ else{
+ $htmlBody.scrollTop(roundedTop);
+ }
+ }
+
+ /**
+ * Returns the cross-browser transform string.
+ */
+ function getTransforms(translate3d){
+ return {
+ '-webkit-transform': translate3d,
+ '-moz-transform': translate3d,
+ '-ms-transform':translate3d,
+ 'transform': translate3d
+ };
+ }
+
+ /**
+ * Allowing or disallowing the mouse/swipe scroll in a given direction. (not for keyboard)
+ * @type m (mouse) or k (keyboard)
+ */
+ function setIsScrollAllowed(value, direction, type){
+ //up, down, left, right
+ if(direction !== 'all'){
+ isScrollAllowed[type][direction] = value;
+ }
+
+ //all directions?
+ else{
+ $.each(Object.keys(isScrollAllowed[type]), function(index, key){
+ isScrollAllowed[type][key] = value;
+ });
+ }
+ }
+
+ /*DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD*/
+
+ /*
+ * Destroys fullpage.js plugin events and optinally its html markup and styles
+ */
+ function destroy(all){
+ setAutoScrolling(false, 'internal');
+ setAllowScrolling(false);
+ setKeyboardScrolling(false);
+ container.addClass(DESTROYED);
+
+ clearTimeout(afterSlideLoadsId);
+ clearTimeout(afterSectionLoadsId);
+ clearTimeout(resizeId);
+ clearTimeout(scrollId);
+ clearTimeout(scrollId2);
+
+ $window
+ .off('scroll', scrollHandler)
+ .off('hashchange', hashChangeHandler)
+ .off('resize', resizeHandler);
+
+ $document
+ .off('keydown', keydownHandler)
+ .off('keyup', keyUpHandler)
+ .off('click touchstart', SECTION_NAV_SEL + ' a')
+ .off('mouseenter', SECTION_NAV_SEL + ' li')
+ .off('mouseleave', SECTION_NAV_SEL + ' li')
+ .off('click touchstart', SLIDES_NAV_LINK_SEL)
+ .off('mouseover', options.normalScrollElements)
+ .off('mouseout', options.normalScrollElements);
+
+ $(SECTION_SEL)
+ .off('click touchstart', SLIDES_ARROW_SEL);
+
+ clearTimeout(afterSlideLoadsId);
+ clearTimeout(afterSectionLoadsId);
+
+ //lets make a mess!
+ if(all){
+ destroyStructure();
+ }
+ }
+
+ /*
+ * Removes inline styles added by fullpage.js
+ */
+ function destroyStructure(){
+ //reseting the `top` or `translate` properties to 0
+ silentScroll(0);
+
+ //loading all the lazy load content
+ container.find('img[data-src], source[data-src], audio[data-src], iframe[data-src]').each(function(){
+ setSrc($(this), 'src');
+ });
+
+ container.find('img[data-srcset]').each(function(){
+ setSrc($(this), 'srcset');
+ });
+
+ $(SECTION_NAV_SEL + ', ' + SLIDES_NAV_SEL + ', ' + SLIDES_ARROW_SEL).remove();
+
+ //removing inline styles
+ $(SECTION_SEL).css( {
+ 'height': '',
+ 'background-color' : '',
+ 'padding': ''
+ });
+
+ $(SLIDE_SEL).css( {
+ 'width': ''
+ });
+
+ container.css({
+ 'height': '',
+ 'position': '',
+ '-ms-touch-action': '',
+ 'touch-action': ''
+ });
+
+ $htmlBody.css({
+ 'overflow': '',
+ 'height': ''
+ });
+
+ // remove .fp-enabled class
+ $('html').removeClass(ENABLED);
+
+ // remove .fp-responsive class
+ $body.removeClass(RESPONSIVE);
+
+ // remove all of the .fp-viewing- classes
+ $.each($body.get(0).className.split(/\s+/), function (index, className) {
+ if (className.indexOf(VIEWING_PREFIX) === 0) {
+ $body.removeClass(className);
+ }
+ });
+
+ //removing added classes
+ $(SECTION_SEL + ', ' + SLIDE_SEL).each(function(){
+ if(options.scrollOverflowHandler){
+ options.scrollOverflowHandler.remove($(this));
+ }
+ $(this).removeClass(TABLE + ' ' + ACTIVE);
+ $(this).attr('style', $(this).data('fp-styles'));
+ });
+
+ removeAnimation(container);
+
+ //Unwrapping content
+ container.find(TABLE_CELL_SEL + ', ' + SLIDES_CONTAINER_SEL + ', ' + SLIDES_WRAPPER_SEL).each(function(){
+ //unwrap not being use in case there's no child element inside and its just text
+ $(this).replaceWith(this.childNodes);
+ });
+
+ //removing the applied transition from the fullpage wrapper
+ container.css({
+ '-webkit-transition': 'none',
+ 'transition': 'none'
+ });
+
+ //scrolling the page to the top with no animation
+ $htmlBody.scrollTop(0);
+
+ //removing selectors
+ var usedSelectors = [SECTION, SLIDE, SLIDES_CONTAINER];
+ $.each(usedSelectors, function(index, value){
+ $('.' + value).removeClass(value);
+ });
+ }
+
+ /*
+ * Sets the state for a variable with multiple states (original, and temporal)
+ * Some variables such as `autoScrolling` or `recordHistory` might change automatically its state when using `responsive` or `autoScrolling:false`.
+ * This function is used to keep track of both states, the original and the temporal one.
+ * If type is not 'internal', then we assume the user is globally changing the variable.
+ */
+ function setVariableState(variable, value, type){
+ options[variable] = value;
+ if(type !== 'internal'){
+ originals[variable] = value;
+ }
+ }
+
+ /**
+ * Displays warnings
+ */
+ function displayWarnings(){
+ var extensions = ['fadingEffect', 'continuousHorizontal', 'scrollHorizontally', 'interlockedSlides', 'resetSliders', 'responsiveSlides', 'offsetSections', 'dragAndMove', 'scrollOverflowReset', 'parallax'];
+ if($('html').hasClass(ENABLED)){
+ showError('error', 'Fullpage.js can only be initialized once and you are doing it multiple times!');
+ return;
+ }
+
+ // Disable mutually exclusive settings
+ if (options.continuousVertical &&
+ (options.loopTop || options.loopBottom)) {
+ options.continuousVertical = false;
+ showError('warn', 'Option `loopTop/loopBottom` is mutually exclusive with `continuousVertical`; `continuousVertical` disabled');
+ }
+
+ if(options.scrollBar && options.scrollOverflow){
+ showError('warn', 'Option `scrollBar` is mutually exclusive with `scrollOverflow`. Sections with scrollOverflow might not work well in Firefox');
+ }
+
+ if(options.continuousVertical && (options.scrollBar || !options.autoScrolling)){
+ options.continuousVertical = false;
+ showError('warn', 'Scroll bars (`scrollBar:true` or `autoScrolling:false`) are mutually exclusive with `continuousVertical`; `continuousVertical` disabled');
+ }
+
+ if(options.scrollOverflow && !options.scrollOverflowHandler){
+ options.scrollOverflow = false;
+ showError('error', 'The option `scrollOverflow:true` requires the file `scrolloverflow.min.js`. Please include it before fullPage.js.');
+ }
+
+ //using extensions? Wrong file!
+ $.each(extensions, function(index, extension){
+ //is the option set to true?
+ if(options[extension]){
+ showError('warn', 'fullpage.js extensions require jquery.fullpage.extensions.min.js file instead of the usual jquery.fullpage.js. Requested: '+ extension);
+ }
+ });
+
+ //anchors can not have the same value as any element ID or NAME
+ $.each(options.anchors, function(index, name){
+
+ //case insensitive selectors (http://stackoverflow.com/a/19465187/1081396)
+ var nameAttr = $document.find('[name]').filter(function() {
+ return $(this).attr('name') && $(this).attr('name').toLowerCase() == name.toLowerCase();
+ });
+
+ var idAttr = $document.find('[id]').filter(function() {
+ return $(this).attr('id') && $(this).attr('id').toLowerCase() == name.toLowerCase();
+ });
+
+ if(idAttr.length || nameAttr.length ){
+ showError('error', 'data-anchor tags can not have the same value as any `id` element on the site (or `name` element for IE).');
+ idAttr.length && showError('error', '"' + name + '" is is being used by another element `id` property');
+ nameAttr.length && showError('error', '"' + name + '" is is being used by another element `name` property');
+ }
+ });
+ }
+
+ /**
+ * Shows a message in the console of the given type.
+ */
+ function showError(type, text){
+ console && console[type] && console[type]('fullPage: ' + text);
+ }
+
+ }; //end of $.fn.fullpage
+});
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/jquery.fullPage.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/common.js
===================================================================
--- base3.10/src/main/webapp/js/com/common.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/common.js (revision 7)
@@ -0,0 +1,1311 @@
+/**
+ * 공통 JS
+ */
+//$(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
+$(document).ajaxError(function(event, jqxhr, settings, thrownError) {
+ $.unblockUI();
+// console.log(event, jqxhr, settings, thrownError);
+});
+/*
+ * 로딩
+ */
+//$(function() {
+// jQuery('form').submit(function() {
+// $.blockUI({baseZ:99999});
+// });
+//});
+
+//BackSpace 키 방지 이벤트
+//$(document).keydown(function(e){
+// if(e.target.nodeName != "INPUT" && e.target.nodeName != "TEXTAREA"){
+// if(e.keyCode === 8){
+// if( confirm("이전 페이지로 이동 하시겠습니까?") ) {
+// window.histroy.go(-1);
+// } else {
+// return false;
+// }
+// }
+// }
+//});
+
+$(function() {
+ // 달력 선언
+ initDatePicker();
+
+ var $inputCheckbox = $('.inputCheckbox');
+ var $onlyNumber = $('.onlyNumber');
+ var $onlyStopPointNumber = $('.onlyStopPointNumber');
+ var $onlyApostrophePointNumber = $('.onlyApostrophePointNumber');
+ var $onlyNumberComma = $('.onlyNumberComma');
+
+ // 체크박스
+ if ($inputCheckbox.length > 0) {
+ $inputCheckbox.toggleCheckbox([
+ '<i class="fa fa-square-o" style="font-size:17px; color:#666;" aria-hidden="true"></i>',
+ '<i class="fa fa-check-square" style="font-size:17px; color:#666;" aria-hidden="true"></i>'
+ ]);
+ }
+
+ /* 숫자만 입력 */
+ if ($onlyNumber.length > 0) {
+ $onlyNumber.on('keydown keyup focusout', function() {
+ onlyNumber(this);
+ });
+ }
+
+ /* 숫자만 입력 */
+ if ($onlyStopPointNumber.length > 0) {
+ $onlyStopPointNumber.on('keydown keyup focusout', function() {
+ onlyStopPointNumber(this);
+ });
+ }
+
+ /* 숫자 . ' " 입력 */
+ if ($onlyApostrophePointNumber.length > 0) {
+ $onlyApostrophePointNumber.on('keydown keyup focusout', function() {
+ onlyApostrophePointNumber(this);
+ });
+ }
+
+ /* 숫자만 입력(세자리 콤마) */
+ if ($onlyNumberComma.length > 0) {
+ $onlyNumberComma.on('keydown keyup focusout', function() {
+ onlyNumberComma(this);
+ });
+ $onlyNumberComma.each(function() {
+ $(this).val(setComma($(this).val()));
+ });
+ }
+
+ // 권한 체크
+ fncAuthoChecker();
+
+ /**
+ * input 24Hours 시간 Mask
+ * class - inputTime
+ */
+ initInputTimeMask();
+});
+
+//달력 선언
+function initDatePicker() {
+ var $datepicker = $(".datepicker");
+ if ($datepicker.length < 1) {
+ return;
+ }
+
+ $datepicker.prop("autocomplete", "off").datepicker({
+ dateFormat: "yy-mm-dd",
+ changeYear: true,
+ changeMonth: true,
+ showMonthAfterYear: true,
+ selectOtherMonths: true,
+ showOtherMonths: true,
+ showButtonPanel: true,
+ nextText: '다음 달',
+ prevText: '이전 달',
+ dayNames: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],
+ dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],
+ monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+ monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
+ beforeShow: function() {
+ setTimeout(function(){
+ $('.ui-datepicker').css('z-index', 9999999);
+ }, 0);
+ }
+ }).inputmask("9999-99-99");
+
+ $datepicker.focusout(function(){
+ var date = $(this).val();
+ if(date != '') {
+ var year = date.split("-")[0].replace(/[^0-9]/g,"");
+ var month = date.split("-")[1].replace(/[^0-9]/g,"");
+ var day = date.split("-")[2].replace(/[^0-9]/g,"");
+
+ if(year != '') {
+ for(var i = year.length; i < 4; i++) {
+ year = "0" + year;
+ }
+ }
+
+ if(month != '') {
+ if(month > 12) {
+ month = "12";
+ }else if(month < 1) {
+ month = "01";
+ }
+
+ for(var i = month.length; i < 2; i++) {
+ month = "0" + month;
+ }
+ }else {
+ month = "01";
+ }
+
+ if(day != '') {
+ if(month == "01" || month == "03" || month == "05" || month == "07" || month == "08" || month == "10" || month == "12") {
+ if(day > 31) {
+ day = "31";
+ }else if(day < 1) {
+ day = "01";
+ }
+ }else if(month == "04" || month == "06" || month == "09" || month == "11") {
+ if(day > 30) {
+ day = "30";
+ }else if(day < 1) {
+ day = "01";
+ }
+ }else if(month == "02") {
+ if(day > 29) {
+ day = "28";
+ }else if(day < 1) {
+ day = "01";
+ }
+ }
+
+ for(var i = day.length; i < 2; i++) {
+ day = "0" + day;
+ }
+ }else {
+ day = "01";
+ }
+
+ date = year + "-" + month + "-" + day;
+ $(this).val(date);
+ }
+ });
+}
+
+// minDate, maxDate 필요할 때
+// 시작일 셀렉터 : bgnde , 종료일 셀렉터 : endde, 시작 종료 상위 셀렉터 : groupTag
+function initDatePickerMulti(start, end, groupTag) {
+ var $start = $(start);
+ var $end = $(end);
+ var $startEnd = $(start + "," + end);
+ if ($start.length < 1) {
+ return;
+ }
+ $start.prop("autocomplete", "off").datepicker({
+ dateFormat: "yy-mm-dd",
+ changeYear: true,
+ changeMonth: true,
+ showMonthAfterYear: true,
+ selectOtherMonths: true,
+ showOtherMonths: true,
+ showButtonPanel: true,
+ nextText: '다음 달',
+ prevText: '이전 달',
+ dayNames: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],
+ dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],
+ monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+ monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
+ beforeShow: function() {
+ setTimeout(function(){
+ $('.ui-datepicker').css('z-index', 9999999);
+ }, 0);
+ },
+ onClose: function (selectedDate) {
+ $(this).closest(groupTag).find(end).datepicker( "option", "minDate", selectedDate );
+ },
+ });
+
+ var minDate = $(start).closest(groupTag).find(start).val();
+ $end.prop("autocomplete", "off").datepicker({
+ dateFormat: "yy-mm-dd",
+ changeYear: true,
+ changeMonth: true,
+ showMonthAfterYear: true,
+ selectOtherMonths: true,
+ showOtherMonths: true,
+ showButtonPanel: true,
+ nextText: '다음 달',
+ prevText: '이전 달',
+ dayNames: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],
+ dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],
+ monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+ monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
+ beforeShow: function() {
+ setTimeout(function(){
+ $('.ui-datepicker').css('z-index', 9999999);
+ }, 0);
+ },
+ minDate: minDate
+ });
+
+ $startEnd.focusout(function(){
+ var date = $(this).val();
+ if(date != '') {
+ var year = date.split("-")[0].replace(/[^0-9]/g,"");
+ var month = date.split("-")[1].replace(/[^0-9]/g,"");
+ var day = date.split("-")[2].replace(/[^0-9]/g,"");
+
+ if(year != '') {
+ for(var i = year.length; i < 4; i++) {
+ year = "0" + year;
+ }
+ }
+
+ if(month != '') {
+ if(month > 12) {
+ month = "12";
+ }else if(month < 1) {
+ month = "01";
+ }
+
+ for(var i = month.length; i < 2; i++) {
+ month = "0" + month;
+ }
+ }else {
+ month = "01";
+ }
+
+ if(day != '') {
+ if(month == "01" || month == "03" || month == "05" || month == "07" || month == "08" || month == "10" || month == "12") {
+ if(day > 31) {
+ day = "31";
+ }else if(day < 1) {
+ day = "01";
+ }
+ }else if(month == "04" || month == "06" || month == "09" || month == "11") {
+ if(day > 30) {
+ day = "30";
+ }else if(day < 1) {
+ day = "01";
+ }
+ }else if(month == "02") {
+ if(day > 29) {
+ day = "28";
+ }else if(day < 1) {
+ day = "01";
+ }
+ }
+
+ for(var i = day.length; i < 2; i++) {
+ day = "0" + day;
+ }
+ }else {
+ day = "01";
+ }
+
+ date = year + "-" + month + "-" + day;
+ $(this).val(date);
+ }
+ });
+}
+
+// input 시간 마스크 설정
+function initInputTimeMask() {
+ var $inputTime = $('.inputTime');
+ var $inputTimeSec = $('.inputTimeSec');
+ if ($inputTime.length < 1 && $inputTimeSec.length < 1) {
+ return;
+ }
+
+ $inputTime.inputmask('datetime',{'inputFormat':'HH:MM', 'hourFormat' : '24', 'showMaskOnHover' : false, 'placeholder' : "__:__"});
+ $inputTimeSec.inputmask('datetime',{'inputFormat':'HH:MM:ss', 'hourFormat' : '24', 'showMaskOnHover' : false, 'placeholder' : "__:__:__"});
+
+ //시간 자동 완성
+ $inputTime.focusout(function(){
+ var time = $(this).val();
+ if(time != "") {
+ var hour = time.split(":")[0];
+ var minute = time.split(":")[1];
+ if(hour != "") {
+ if(hour.replace(/[^0-9]/g,"") >= 24) {
+ hour = "";
+ }else{
+ var first = hour.substring(0,1).replace(/[^0-9]/g,"");
+ var second = hour.substring(1,2).replace(/[^0-9]/g,"");
+
+ if(first == "") {
+ first = 0;
+ }
+
+ if(second == "") {
+ second = 0;
+ }
+
+ hour = first + second;
+ }
+ }
+
+ if(minute.replace(/[^0-9]/g,"") != "") {
+ if(minute.replace(/[^0-9]/g,"") >= 60) {
+ minute = "";
+ }else{
+ var first = minute.substring(0,1).replace(/[^0-9]/g,"");
+ var second = minute.substring(1,2).replace(/[^0-9]/g,"");
+
+ if(first == "") {
+ first = 0;
+ }
+
+ if(second == "") {
+ second = 0;
+ }
+
+ minute = first + second;
+ }
+ }else {
+ if(hour != "") {
+ minute = "00";
+ }
+ }
+
+ $(this).val(hour + ":" + minute);
+ }
+ });
+
+ //시간 자동 완성 시:분:초
+ $inputTimeSec.focusout(function(){
+ var time = $(this).val();
+ if(time != "") {
+ var hour = time.split(":")[0];
+ var minute = time.split(":")[1];
+ var sec = time.split(":")[2];
+ if(hour != "") {
+ if(hour.replace(/[^0-9]/g,"") >= 24) {
+ hour = "";
+ }else{
+ var first = hour.substring(0,1).replace(/[^0-9]/g,"");
+ var second = hour.substring(1,2).replace(/[^0-9]/g,"");
+
+ if(first == "") {
+ first = 0;
+ }
+
+ if(second == "") {
+ second = 0;
+ }
+
+ hour = first + second;
+ }
+ }
+
+ if(minute.replace(/[^0-9]/g,"") != "") {
+ if(minute.replace(/[^0-9]/g,"") >= 60) {
+ minute = "";
+ }else{
+ var first = minute.substring(0,1).replace(/[^0-9]/g,"");
+ var second = minute.substring(1,2).replace(/[^0-9]/g,"");
+
+ if(first == "") {
+ first = 0;
+ }
+
+ if(second == "") {
+ second = 0;
+ }
+
+ minute = first + second;
+ }
+ }else {
+ if(hour != "") {
+ minute = "00";
+ }
+ }
+
+ if(sec.replace(/[^0-9]/g,"") != "") {
+ if(sec.replace(/[^0-9]/g,"") >= 60) {
+ sec = "";
+ }else{
+ var first = sec.substring(0,1).replace(/[^0-9]/g,"");
+ var second = sec.substring(1,2).replace(/[^0-9]/g,"");
+
+ if(first == "") {
+ first = 0;
+ }
+
+ if(second == "") {
+ second = 0;
+ }
+
+ sec = first + second;
+ }
+ }else {
+ if(minute != "") {
+ sec = "00";
+ }
+ }
+
+
+ $(this).val(hour + ":" + minute + ":" + sec);
+ }
+ });
+}
+
+/*
+ * 서브밋시 콤마제외
+ */
+function submitNummberComma() {
+ $('.onlyNumberComma').each(function() {
+ $(this).val($(this).val().replace(/[^0-9-]/g,""));
+ });
+}
+function submitNummberComma(str) {
+
+ var result = parseInt(str.replace(/[^0-9-]/g,""));
+ if(isNaN(result)){
+ result = null;
+ }
+ return result;
+}
+/*
+ * 숫자만 입력
+ */
+function onlyNumber(obj){
+ $(obj).val($(obj).val().replace(/[^0-9]/g,""));
+}
+
+/*
+ * 숫자만 입력
+ */
+function onlyStopPointNumber(obj){
+ $(obj).val($(obj).val().replace(/[^0-9.]/g,""));
+}
+function onlyApostrophePointNumber(obj){
+ $(obj).val($(obj).val().replace(/[^0-9.\"\'Φ/*]/g,""));
+}
+/*
+ * 숫자만 입력(세자리 콤마)
+ */
+function onlyNumberComma(obj){
+ $(obj).val(setComma($(obj).val().replace(/[^0-9-]/g,"")));
+}
+function setComma(number) {
+ // 정규표현식 : (+- 존재하거나 존재 안함, 숫자가 1개 이상), (숫자가 3개씩 반복)
+ var reg = /(^[+-]?\d+)(\d{3})/;
+
+ // 스트링변환
+ number += '';
+ while (reg.test(number)) {
+ // replace 정규표현식으로 3자리씩 콤마 처리
+ number = number.replace(reg,'$1'+','+'$2');
+ }
+
+ return number;
+}
+
+/*
+ * object의 name 속성을 재정의한다.(배열로 만들기 위함)
+ */
+function fncRename(obj, i) {
+ var names = $(obj).attr('name').split('.');
+ var rname = names[0] + '[' + i + '].' + names[1];
+ $(obj).attr('name', rname);
+}
+
+// formSerializeObject Json 변환
+$.fn.serializeObject = function () {
+ "use strict";
+ var result = {};
+ var extend = function (i, element) {
+ var node = result[element.name];
+ if ('undefined' !== typeof node && node !== null) {
+ if ($.isArray(node)) {
+ node.push(element.value);
+ } else {
+ result[element.name] = [node, element.value];
+ }
+ } else {
+ result[element.name] = element.value;
+ }
+ };
+
+ $.each(this.serializeArray(), extend);
+ return result;
+};
+
+//-- 프린트 설정 시작
+var beforePrint = function() {
+// $('button').css('display', 'none');
+ $('#printSection button').css('display', 'none');
+}
+
+var afterPrint = function() {
+// setTimeout(function() {
+// if( this.opener != null ) {
+// this.close();
+// }
+// $('button').css('display', '');
+// }, 50);
+
+ setTimeout(function() {
+ if( this.opener != null ) {
+ this.close();
+ }
+ $('#printSection').remove();
+ }, 50);
+ // 인쇄 취소나 완료시 팝업창 닫기
+}
+// chrome 63이후 부터 onbeforeprint 이벤트가 지원됨에 따라 아래 주석
+// firefox for android 빼고 모든 브라우저 지원
+//if( window.matchMedia ) {
+// var mQuery = window.matchMedia('print');
+// mQuery.addListener(function(mql) {
+// if( mql.matches ) {
+// beforePrint();
+// } else {
+// afterPrint();
+// }
+// });
+//}
+
+window.onbeforeprint = beforePrint;
+window.onafterprint = afterPrint;
+//-- 프린트 설정 완료
+
+//-- 팝업 프린트 영역 dom 생성
+function printElement(elem) {
+ var domClone = elem.cloneNode(true);
+ var id = domClone.getAttribute('id');
+ $(domClone).removeAttr('id');
+
+ var $printSection = document.getElementById("printSection");
+ if (!$printSection) {
+ var $printSection = document.createElement("div");
+ $printSection.id = "printSection";
+ document.body.appendChild($printSection);
+ }
+ $printSection.innerHTML = "";
+ $printSection.appendChild(domClone);
+ window.print();
+}
+
+// Dom 데이터 초기화
+function resetDomData(obj) {
+ obj.each(function() {
+ $(this).find('input[type="text"], textarea').val('');
+ });
+}
+
+function itoStr($num)
+{
+ $num < 10 ? $num = '0'+$num : $num;
+ return $num.toString();
+}
+
+/*
+ * 엑셀다운로드
+ * tblId : $(tableId)
+ * fileNm : 다운로드 파일명
+ */
+function excelDownloads(tblId, fileNm) {
+ var dt = new Date();
+ var year = itoStr( dt.getFullYear() );
+ var month = itoStr( dt.getMonth() + 1 );
+ var day = itoStr( dt.getDate() );
+ var hour = itoStr( dt.getHours() );
+ var mins = itoStr( dt.getMinutes() );
+
+ var postfix = year + month + day + "_" + hour + mins;
+ var fileName = fileNm + postfix + ".xls";
+
+ TXLManager(tblId).exportTableToExcel(fileNm + postfix);
+}
+
+/* 이미지 preImgView
+ * img : img tag Id
+ * input : input file tag object
+ * hidden : hidden input Id
+ */
+function preImgView(img, input, hidden) {
+ var preview = document.getElementById(img);
+ var hiddenInput = document.getElementById(hidden);
+ var file = input.files[0];
+ var reader = new FileReader();
+
+ reader.addEventListener("load", function () {
+ preview.src = reader.result;
+ if( hiddenInput != null ) {
+ hiddenInput.innerHTML = reader.result;
+ }
+ }, false);
+
+ if (file) {
+ reader.readAsDataURL(file);
+ }
+}
+
+/*
+ * replaceALl 함수
+ * str 문자열
+ * searchStr 찾을문자열
+ * replaceStr 바꿀문자열
+ */
+function replaceAll(str, searchStr, replaceStr) {
+ return str.split(searchStr).join(replaceStr);
+}
+
+/*
+ * enter(\r\n)를 br로 치환
+ */
+function changeEnterBr(str) {
+ return replaceAll(str.replace(/(?:\r\n|\r|\n)/g, "<br>"), ' ', ' ')
+}
+/*
+ * br을 enter(\r\n)로 치환
+ */
+function changeBrEnter(str) {
+ return replaceAll(str, "<br>", "\r\n");
+}
+/*
+ * 팝업 프로그래스 바
+ * ctx 컨텍스트패스
+ * popupId 팝업ID
+ * url 리다이렉트할 url(한글파라메터시 encodeURI("한글", "UTF-8"))
+ */
+function popupProgress(ctx, popupId, url) {
+ var retVal;
+ retVal = window.open("", popupId, "width=1000, height=800, left=100, top=100");
+ var data = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
+ data += '<script src="'+ctx+'/js/egovframework/com/cmm/jquery-1.12.4.min.js"><\/script>';
+ data += '<script src="'+ctx+'/js/com/jquery.blockUI.js" ><\/script>';
+ data += '<body><script>$.blockUI({baseZ:2000});location.href="'+url+'";<\/script><\/body>';
+ retVal.document.write(data);
+}
+
+//날짜 포맷 변경 (yyyy-MM-dd)
+function formatDate (date) {
+ var d;
+ if (date != "") {
+ d = new Date(date);
+ } else {
+ d = new Date();
+ }
+ var month = d.getMonth() + 1;
+ var day = d.getDate();
+ var year = d.getFullYear();
+
+ if (month < 10) {
+ month = '0' + month;
+ }
+
+ if (day < 10) {
+ day = '0' + day;
+ }
+
+ return [year, month, day].join('-');
+}
+
+//날짜 포맷 변경 시간 (yyyy-MM-dd hh24:mi:ss)
+function formatDateTime (date) {
+ var d;
+ if (date != "") {
+ d = new Date(date);
+ } else {
+ d = new Date();
+ }
+ var month = d.getMonth() + 1;
+ var day = d.getDate();
+ var year = d.getFullYear();
+ var hours = d.getHours();
+ var minutes = d.getMinutes();
+ var seconds = d.getSeconds();
+
+ if (month < 10) {
+ month = '0' + month;
+ }
+
+ if (day < 10) {
+ day = '0' + day;
+ }
+
+ return [year, month, day].join('-') + ' ' + hours + ':' + minutes + ':' + seconds;
+}
+
+//값 비어있는지 체크
+function isEmpty(str) {
+ if (typeof str == "undefined" || str == null || str == "")
+ return true;
+ else
+ return false;
+}
+
+/**
+ * 팝업
+ */
+function fn_popupOpen(url, width, height, params, loadingYn, callback) {
+ // 호출한 객체
+ var targetEl = event.target || event.srcElement;
+ // 팝업 일련번호 생성
+ var today = new Date();
+ var popUID = today.getDate() + '' + today.getHours() + '' + today.getMinutes() + '' + today.getSeconds();
+ let popupId = 'popup' + popUID;
+
+ // 팝업 wrapper dom
+ var dom = '<div id="'+popupId+'" class="modal">'
+ + ' <div class="modal_wrap">'
+ + ' <div class="modal_box width'+width+' height'+height+'"></div>'
+ + ' </div>'
+ + '</div>';
+ var $popupWrapper = null;
+ $popupWrapper = $(dom).appendTo('body');
+
+ // 팝업 div dom
+ var $popDom = $popupWrapper.find('.modal_box');
+ // 팝업 생성
+ $popDom.fncLoad(url, params, loadingYn, function( response, status, xhr ) {
+ if( status == 'success' ) {
+ // 팝업오픈
+ $popupWrapper.addClass('open');
+ // 팝업 닫기 이벤트 등록
+ $popDom.on('click', '.close', function() {
+ // 팝업이 없을 때
+ $popupWrapper.remove();
+ // 호출한 객체로 포커스
+ targetEl.focus();
+ });
+ // 마지막 텝
+ $popDom.on('keydown', 'button.btn_s.close', function() {
+ if (event.keyCode === 9) {
+ event.preventDefault();
+ $popDom.find('button.btn_close').focus();
+ }
+ });
+ // 팝업 첫 포커스
+ $popDom.find('button.btn_close').focus();
+ // 팝업 콜백 함수
+ if (typeof callback == 'function') {
+ callback(popupId);
+ }
+ } else {
+ alert('에러가 발생하였습니다. \n' + xhr.status + '\n' + xhr.statusText);
+ }
+ });
+}
+
+
+/**
+ * jQuery load 공통함수
+ * $(element).fncLoad(url, params, [callback])
+ */
+$.fn.fncLoad = function(url, params, loadingYn, callback) {
+
+ if (loadingYn == null || loadingYn == 'Y') {
+ $.blockUI();
+ }
+
+ $(this).load(url, params, function(response, status, xhr) {
+ // 권한 체크
+ fncAuthoChecker();
+ if( callback ) callback(response, status, xhr);
+
+ if (loadingYn == null || loadingYn == 'Y') {
+ $.unblockUI();
+ }
+ });
+}
+/**
+ * 권한 체크
+ * @returns
+ */
+function fncAuthoChecker(element) {
+ if (typeof FUNCTION_AUTHO) { // 변수 존재 여부 확인.
+ return;
+ }
+
+ if( element != undefined && element != null ) {
+ var autho = element.data('autho');
+ if (autho == null) {
+ return;
+ }
+ if(FUNCTION_AUTHO.indexOf('ROLE_ADMIN') > -1 ) {
+ return;
+ }
+ if(FUNCTION_AUTHO.indexOf(autho) == -1 ) {
+ element.off().prop('disabled', true).addClass("disabled");
+ }
+ } else {
+ var $checkList = $('[data-autho]'); // 권한 속성 확인.
+ $.each($checkList, function() {
+ var $this = $(this);
+ var autho = $this.data('autho');
+ if(FUNCTION_AUTHO.indexOf('ROLE_ADMIN') > -1 ) {
+ return;
+ }
+ if(FUNCTION_AUTHO.indexOf(autho) == -1 ) {
+ $this.off().prop('disabled', true).addClass("disabled");
+ }
+ });
+
+ }
+}
+
+/**
+ * 배열의 요소를 모두 조합한 경우의 수를 뽑아내는 경우
+ * @returns
+ */
+function permute(permutation) {
+ var length = permutation.length,
+ result = [permutation.slice()],
+ c = new Array(length).fill(0),
+ i = 1, k, p;
+
+ while (i < length) {
+ if (c[i] < i) {
+ k = i % 2 && c[i];
+ p = permutation[i];
+ permutation[i] = permutation[k];
+ permutation[k] = p;
+ ++c[i];
+ i = 1;
+ result.push(permutation.slice());
+ } else {
+ c[i] = 0;
+ ++i;
+ }
+ }
+ return result;
+}
+
+//multi Input 검색조건 만들기
+function createSplitSearch(data) {
+ var searchVal = '';
+ for (var i = 0; i < data.length; i++) {
+ searchVal += '(';
+ for (var j = 0; j < data[i].length; j++) {
+ if (j == data[i].length-1) {
+ searchVal += '(' + data[i][j] + ')+';
+ } else {
+ searchVal += '(' + data[i][j] + ')+.*';
+ }
+ }
+ searchVal += ')';
+
+ if (i != data.length-1) {
+ searchVal += '|';
+ }
+ }
+
+ return searchVal;
+}
+
+/**
+ * 브라우저 확인
+ * @returns
+ */
+function browserInfo() {
+ var browser = "";
+ var userAgent = window.navigator.userAgent.toLowerCase();
+ var isChrome = userAgent.indexOf('chrome');
+ var isEdge = userAgent.indexOf('edge');
+ var isEdge2 = userAgent.indexOf('edg');
+ var isWhale = userAgent.indexOf('whale');
+ var isFirefox = userAgent.indexOf('firefox');
+ //Edge는 Chrome과 Edge 모두의 값을 가지고 있기 때문에
+ if (isChrome > -1) {
+ if(isEdge > -1 || isEdge2 > -1) {
+ browser = "edge";
+ } else if(isWhale > -1) {
+ browser = "whale";
+ } else {
+ browser = "chrome";
+ }
+ } else if(isFirefox > -1){
+ browser = "firefox";
+ } else {
+ browser = "ie";
+ }
+ return browser;
+}
+
+/**
+ * 다운로드 프로그래스
+ * @returns
+ */
+function progressDownload() {
+ $.blockUI();
+ $.removeCookie('fileDownloadToken', {path : '/'});
+ FILEDOWNLOAD_INTERVAL = setInterval(function() {
+ if ($.cookie("fileDownloadToken") != null) {
+ clearInterval(FILEDOWNLOAD_INTERVAL);
+ $.unblockUI();
+ }
+ }, 500);
+}
+
+/**
+ * 계산 후 데이터 길이 확인
+ * @param obj
+ * @param result
+ * @returns
+ */
+function fncChkCalDataLength(obj, result) {
+ var length = result.attr('maxlength');
+ // maxlength에 따른 정수 범위 표시 변수
+ var plusMaxValue = "";
+ var minusMinValue = "-";
+
+ // 0 이상의 최댓값
+ for(var i = 0; i < length; i++){
+ plusMaxValue += "9";
+ }
+
+ // 0 이하의 최솟값
+ for(var i = 0; i < length - 1; i++){
+ minusMinValue += "9";
+ }
+
+ if((length != "" && typeof length != "undefined" && result.val() != "" && typeof result.val() != "undefined" && result.val().length > length)
+ || Number(result.val()) > Number(plusMaxValue)+1 || Number(result.val()) < Number(minusMinValue)-1){
+ alert("결과값의 데이터 길이를 초과하였습니다.");
+ $.each(obj, function(i) {
+ $(this).val("");
+ });
+ result.val("");
+
+ return false;
+ }
+ return true;
+}
+
+/**
+ * 개인정보 체크 함수.
+ */
+function fnPrivacyCheck(str) {
+ var result = 0;
+ str = str.replace(/\s/gi, ''); // 공백제거.
+
+ var reg = /[01][0-9]{5}[~-]+[1-4][0-9]{6}|[2-9][0-9]{5}[~-]+[1-2][0-9]{6}/; // 주민등록번호
+ var reg2 = /([a-zA-Z]{1}|[a-zA-Z]{2})\d{8}/; // 여권번호
+ var reg3 = /[0-9]{2}[-~.][0-9]{6}[-~.[0-9]{2}/; // 운전면허번호
+ var reg4 = /01[016789][-~.][0-9]{3,4}[-~.][0-9]{4}/; // 핸드폰번호
+ var reg5 = /[34569][0-9]{3}[-~.][0-9]{4}[-~.][0-9]{4}[-~.][0-9]{4}/; // 신용카드번호
+ var reg6 = /[1257][-~.][0-9]{10}/; // 건강보험번호
+ var reg7 = /[0-9]{2}[-~.][0-9]{2}[-~.][0-9]{6}|[0-9]{3}[-~.]([0-9]{5,6}[-~][0-9]{3}|[0-9]{6}[-~.][0-9]{5}|[0-9]{2,3}[-~.][0-9]{6}|[0-9]{2}[-~.][0-9]{7}|[0-9]{2}[-~.][0-9]{4,6}[-~.][0-9]|[0-9]{5}[-~.][0-9]{3}[-~.][0-9]{2}|[0-9]{2}[-~.][0-9]{5}[-~.][0-9]{3}|[0-9]{4}[-~.][0-9]{4}[-~.][0-9]{3}|[0-9]{6}[-~.][0-9]{2}[-~.][0-9]{3}|[0-9]{2}[-~.][0-9]{2}[-~.][0-9]{7})|[0-9]{4}[-~.]([0-9]{3}[-~.][0-9]{6}|[0-9]{2}[-~.][0-9]{6}[-~.][0-9])|[0-9]{5}[-~.][0-9]{2}[-~.][0-9]{6}|[0-9]{6}[-~.][0-9]{2}[-~.][0-9]{5,6}/; // 계좌번호
+ var reg8 = /[0-9]{11}/; // 핸드폰 번호 추가
+ var reg9 = /[0-9]{13}/; // 주민 번호 추가
+
+ str = str.replace(/\s/g, ''); // 모든 공백 제거
+ str = str.replace(/(<([^>]+)>)/gi, ''); // 모든 태그 제거
+
+ if (reg.test(str) || reg9.test(str)) {
+ if (confirm('주민등록번호를 입력하셨는지 확인 바랍니다. 저장하시겠습니까?')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ if (reg2.test(str)) {
+ if (confirm('여권번호를 입력하셨는지 확인 바랍니다. 저장하시겠습니까?')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ if (reg3.test(str)) {
+ if (confirm('운전면허번호를 입력하셨는지 확인 바랍니다. 저장하시겠습니까?')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ if (reg4.test(str) || reg8.test(str)) {
+ if (confirm('핸드폰 번호를 입력하셨는지 확인 바랍니다. 저장하시겠습니까?')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ if (reg5.test(str)) {
+ if (confirm('신용카드 번호를 입력하셨는지 확인 바랍니다. 저장하시겠습니까?')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ if (reg6.test(str)) {
+ if (confirm('건강보험번호를 입력하셨는지 확인 바랍니다. 저장하시겠습니까?')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ if (reg7.test(str)) {
+ if (confirm('계좌번호를 입력하셨는지 확인 바랍니다. 저장하시겠습니까?')) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * 글자 확대 축소
+ * 사용법 zoomInOut('in');
+ * param : in, out, init
+ */
+var nowZoom = 100;
+var maxZoom = 120;
+var minZoom = 90;
+function zoomInOut(how) {
+ var browser = navigator.userAgent;
+ var Browser = {
+ chk : navigator.userAgent.toLowerCase()
+ }
+
+ Browser = {
+ ie : Browser.chk.indexOf('msie') != -1,
+ ie6 : Browser.chk.indexOf('msie 6') != -1,
+ ie7 : Browser.chk.indexOf('msie 7') != -1,
+ ie8 : Browser.chk.indexOf('msie 8') != -1,
+ ie9 : Browser.chk.indexOf('msie 9') != -1,
+ ie10 : Browser.chk.indexOf('msie 10') != -1,
+
+ opera : !!window.opera,
+ safari : Browser.chk.indexOf('safari') != -1,
+ safari3 : Browser.chk.indexOf('applewebkir/5') != -1,
+ mac : Browser.chk.indexOf('mac') != -1,
+ chrome : Browser.chk.indexOf('chrome') != -1,
+ firefox : Browser.chk.indexOf('firefox') != -1
+ }
+
+
+
+ if (how == 'in' && nowZoom < maxZoom) {
+ nowZoom += 5;
+ } else if (how == 'out' && nowZoom > minZoom) {
+ nowZoom -= 5;
+ } else if (how == 'init') {
+ nowZoom = 100;
+ }else {
+ return false;
+ }
+
+ document.body.style.zoom = nowZoom + "%";
+ if ((Browser.ie6) || (Browser.ie7)) {
+ document.body.style.position = "absolute";
+ }else if(Browser.ie8 || Browser.ie10 || Browser.chrome || Browser.safari){
+ //document.body.style.width = "100%";
+ //document.body.style.position = "absolute";
+ }else if(Browser.opera || Browser.firefox){
+ tmpZoom = nowZoom/100;
+ $('body').css('-webkit-transform','scale(' + (tmpZoom) + ')');
+ $('body').css('-webkit-transform-origin','0 0');
+ $('body').css('-moz-transform','scale(' + (tmpZoom) + ')');
+ $('body').css('-moz-transform-origin','0 0');
+ $('body').css('-o-transform','scale(' + (tmpZoom) + ')');
+ $('body').css('-o-transform-origin','0 0');
+ }
+
+
+if((navigator.appName == 'Netscape' && navigator.userAgent.search('Trident') != -1) && (agent.indexOf("msie") != -1)){
+}
+ return false;
+}
+
+/**
+ * 카테고리 출력
+ * 사용법 selectLclasList('대분류 셀렉터', '소분류 셀렉터', '카테고리유형')
+ * param : lclas, sclas, clasType
+ * 수정 화면 시 select태그에 data-id로 값 매칭
+ */
+function selectLclasList($lclas, $sclas, clasType){
+ if(clasType != '' && typeof clasType != 'undefined'){
+ if( $.blockUI != null ) {
+ $.blockUI();
+ }
+ var url = CONTEXT_PATH + "/cmm/code/unityCodeList/selectJson.do";
+ var lclasVal = $lclas.data('id');
+
+ $.post(url , {'unityCodeNm' : clasType, 'useAt' : 'Y'}, function(data){
+ if(data.sttus = 'success'){
+ var result = data.result;
+ var option = '';
+ var i = 0;
+ for(i=0; i < result.length; i++ ){
+ option += '<option value="'+result[i].unityCode+'">'+result[i].unityCodeNm+'</option>';
+ }
+ $lclas.append(option);
+ }
+ })
+ .done(function() {
+ $lclas.on('change', function(){
+ $sclas.find('option:not(:first)').remove();
+ var searchSclas = $lclas.val();
+ if(searchSclas != '' && typeof searchSclas != 'undefined' && searchSclas != 0){
+ $.post(url, { 'unityCode' : searchSclas ,'useAt' : 'Y', 'unityCodeNm' : ''}, function(data){
+ if(data.sttus = 'success'){
+ var result = data.result;
+ var option = '';
+ var i = 0;
+ for(i=0; i < result.length; i++ ){
+ option += '<option value="'+result[i].unityCode+'">'+result[i].unityCodeNm+'</option>';
+ }
+ $sclas.append(option);
+ }
+ })
+ .done(function() {
+ var sclasVal = $sclas.data('id');
+ if (sclasVal != null) {
+ // 소분류 값이 있을 경우 값 셋팅 후 강제 이벤트 발생
+ $sclas.val(sclasVal).trigger('change');
+ $sclas.data('id', null)
+ }
+ });
+ }
+ });
+ // 대분류 값이 있을 경우 값 셋팅 후 강제 이벤트 발생
+ if (lclasVal != null && lclasVal != '') {
+ $lclas.val(lclasVal).trigger('change');
+ }
+ })
+ .always(function() {
+ if( $.unblockUI != null ) {
+ $.unblockUI();
+ }
+ });
+ }
+}
+/**
+ * 클립보드 복사
+ * 사용법 copyToClipboard('복사할 input')
+ * 복사할 input type은 text나 textArea만 가능 (hidden X, visiblity X)
+ * -->input에 style="position:absolute; left:-9999px" 속성추가
+ */
+function copyToClipboard($copyInputTxt){
+
+ $copyInputTxt.focus();
+ $copyInputTxt.select();
+
+ document.execCommand('copy');
+ alert('클립보드로 복사되었습니다.');
+}
+
+/**
+ * 주소API 팝업 호출
+ * 사용법: 사용자 - <button onclick="openAdresPopup();">, 관리자 - <button onclick="openAdresPopup('Y');">
+ * 콜백함수: adresCallback(zipNo, roadAddrPart1, roadAddrPart2, addrDetail);
+ * */
+function openAdresPopup(isMng){
+ window.name="jusoPopup";
+ var url = CONTEXT_PATH + "/searchapi/jusoPopup.jsp";
+ if (isMng != null) {
+ url += "?isMng=" + isMng;
+ }
+ var pop = window.open(url,"pop","width=570,height=420, scrollbars=yes, resizable=yes");
+}
+
+/**
+ * 크로스사이트 스크립트 대응
+ * @Author : 임종호
+ * @Date : 2021. 11. 16.
+ * @Method Name : XSSCheck
+ * @return : any
+ */
+function XSSCheck(str, level) {
+ if (level == undefined || level == 0) {
+ str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+\-/g, "");
+ } else if (level != undefined && level == 1) {
+ str = str.replace(/\</g, "<");
+ str = str.replace(/\>/g, ">");
+ }
+ return str;
+}
+
+/**
+ * 동영상 공유링크
+ * @Author : 임종호
+ * @Date : 2021. 11. 29.
+ * @Method Name : insertByVideoURL(e), e:element혹은string, 유튜브, 네이버, 카카오 가능
+ * @return : str
+ */
+function insertByVideoURL($el) {
+ var e;
+ if (typeof $el == 'object') {
+ e = $el.val().trim();
+ } else {
+ e = $el;
+ }
+ if (e == '') {
+ alert('영상링크를 복사해 주세요.\n영상은 유튜브, 네이버티비, 카카오티비만 가능합니다.');
+ $el.focus();
+ return false;
+ }
+ const VIDEO_PROVIDERS = [
+ {
+ test_regex: /^.*((youtu.be)|(youtube.com))\/((v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))?\??v?=?([^#\&\?]*).*/,
+ url_regex: /(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=|embed\/)?([0-9a-zA-Z_\-]+)(.+)?/g,
+ url_text: "https://www.youtube.com/embed/$1",
+ html: '<iframe width="640" height="360" src="{url}?wmode=opaque" frameborder="0" allowfullscreen></iframe>',
+ provider: "youtube",
+ },
+ {
+ test_regex: /^.*(?:vimeo.com)\/(?:channels(\/\w+\/)?|groups\/*\/videos\/\u200b\d+\/|video\/|)(\d+)(?:$|\/|\?)/,
+ url_regex: /(?:https?:\/\/)?(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^\/]*)\/videos\/|album\/(?:\d+)\/video\/|video\/|)(\d+)(?:[a-zA-Z0-9_\-]+)?(\/[a-zA-Z0-9_\-]+)?/i,
+ url_text: "https://player.vimeo.com/video/$1",
+ html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>',
+ provider: "vimeo",
+ },
+ {
+ test_regex: /^.+(dailymotion.com|dai.ly)\/(video|hub)?\/?([^_]+)[^#]*(#video=([^_&]+))?/,
+ url_regex: /(?:https?:\/\/)?(?:www\.)?(?:dailymotion\.com|dai\.ly)\/(?:video|hub)?\/?(.+)/g,
+ url_text: "https://www.dailymotion.com/embed/video/$1",
+ html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>',
+ provider: "dailymotion",
+ },
+ {
+ test_regex: /^.+(screen.yahoo.com)\/[^_&]+/,
+ url_regex: "",
+ url_text: "",
+ html: '<iframe width="640" height="360" src="{url}?format=embed" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>',
+ provider: "yahoo",
+ },
+ {
+ test_regex: /^.+(rutube.ru)\/[^_&]+/,
+ url_regex: /(?:https?:\/\/)?(?:www\.)?(?:rutube\.ru)\/(?:video)?\/?(.+)/g,
+ url_text: "https://rutube.ru/play/embed/$1",
+ html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>',
+ provider: "rutube",
+ },
+ {
+ test_regex: /^(?:.+)vidyard.com\/(?:watch)?\/?([^.&/]+)\/?(?:[^_.&]+)?/,
+ url_regex: /^(?:.+)vidyard.com\/(?:watch)?\/?([^.&/]+)\/?(?:[^_.&]+)?/g,
+ url_text: "https://play.vidyard.com/$1",
+ html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>',
+ provider: "vidyard",
+ },
+ {
+ test_regex: /^.*(naver.com)\/[^_&]+/,
+ url_regex: /(?:https?:\/\/)?(?:tv\.)?(?:m\.)?naver.com\/v\/?([0-9a-zA-Z_\-]+)(.+)?/g,
+ url_text: "https://tv.naver.com/embed/$1",
+ html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>',
+ provider: "naver",
+ },
+ {
+ test_regex: /^.*(kakao.com)\/[^_&]+/,
+ url_regex: /(?:https?:\/\/)?(?:tv\.)?(?:m\.)?kakao.com\/v\/?([0-9a-zA-Z_\-]+)(.+)?/g,
+ url_text: "https://play-tv.kakao.com/embed/player/cliplink/$1",
+ html: '<iframe width="640" height="360" src="{url}?service=player_share" frameborder="0" allowfullscreen></iframe>',
+ provider: "kakao",
+ },
+ ];
+ function isURL(e) {
+ const LinkRegExCommon = "[a-z\\u0080-\\u009f\\u00a1-\\uffff0-9-_.]{1,}"
+ , LinkRegExEnd = "((:[0-9]{1,5})|)(((\\/|\\?|#)[a-z\\u00a1-\\uffff0-9@?\\|!^=%&/~+#-\\'*-_{}]*)|())"
+ , LinkRegExHTTP = "((ftp|http|https):\\/\\/" + LinkRegExCommon + ")";
+ return (
+ !!/^(https?:|ftps?:|)\/\//i.test(e) &&
+ ((e = String(e).replace(/</g, "%3C").replace(/>/g, "%3E").replace(/"/g, "%22").replace(/ /g, "%20")), new RegExp("^" + LinkRegExHTTP + LinkRegExEnd + "$", "gi").test(e))
+ );
+ };
+ var t = null;
+ if ((/^http/.test(e) || (e = "https://" + e), isURL(e)))
+ for (var n = 0; n < VIDEO_PROVIDERS.length; n++) {
+ var r = VIDEO_PROVIDERS[n];
+ if (r.test_regex.test(e)) {
+ (t = e.replace(r.url_regex, r.url_text)), (t = r.html.replace(/\{url\}/, t));
+ break;
+ }
+ }
+ if (t == null) {
+ alert('허용되지 않은 URL 입니다.');
+ $el.val('');
+ $el.focus();
+ return false;
+ }
+ return t;
+};
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/common.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery.inputmask.min.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery.inputmask.min.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery.inputmask.min.js (revision 7)
@@ -0,0 +1,8 @@
+/*!
+ * dist/jquery.inputmask.min
+ * https://github.com/RobinHerbots/Inputmask
+ * Copyright (c) 2010 - 2020 Robin Herbots
+ * Licensed under the MIT license
+ * Version: 5.0.6-beta.12
+ */
+!function webpackUniversalModuleDefinition(root,factory){if("object"==typeof exports&&"object"==typeof module)module.exports=factory(require("jquery"));else if("function"==typeof define&&define.amd)define(["jquery"],factory);else{var a="object"==typeof exports?factory(require("jquery")):factory(root.jQuery);for(var i in a)("object"==typeof exports?exports:root)[i]=a[i]}}(window,function(__WEBPACK_EXTERNAL_MODULE__8__){return modules=[function(module){module.exports=JSON.parse('{"BACKSPACE":8,"BACKSPACE_SAFARI":127,"DELETE":46,"DOWN":40,"END":35,"ENTER":13,"ESCAPE":27,"HOME":36,"INSERT":45,"LEFT":37,"PAGE_DOWN":34,"PAGE_UP":33,"RIGHT":39,"SPACE":32,"TAB":9,"UP":38,"X":88,"CONTROL":17,"KEY_229":229}')},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,__webpack_require__(16),__webpack_require__(17);var _mask=__webpack_require__(9),_inputmask=_interopRequireDefault(__webpack_require__(11)),_window=_interopRequireDefault(__webpack_require__(12)),_maskLexer=__webpack_require__(18),_validationTests=__webpack_require__(3),_positioning=__webpack_require__(2),_validation=__webpack_require__(4),_inputHandling=__webpack_require__(5),_eventruler=__webpack_require__(10),_definitions=_interopRequireDefault(__webpack_require__(19)),_defaults=_interopRequireDefault(__webpack_require__(20));function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var document=_window.default.document,dataKey="_inputmask_opts";function Inputmask(alias,options,internal){if(!(this instanceof Inputmask))return new Inputmask(alias,options,internal);this.dependencyLib=_inputmask.default,this.el=void 0,this.events={},this.maskset=void 0,!0!==internal&&("[object Object]"===Object.prototype.toString.call(alias)?options=alias:(options=options||{},alias&&(options.alias=alias)),this.opts=_inputmask.default.extend(!0,{},this.defaults,options),this.noMasksCache=options&&void 0!==options.definitions,this.userOptions=options||{},resolveAlias(this.opts.alias,options,this.opts)),this.refreshValue=!1,this.undoValue=void 0,this.$el=void 0,this.skipKeyPressEvent=!1,this.skipInputEvent=!1,this.validationEvent=!1,this.ignorable=!1,this.maxLength,this.mouseEnter=!1,this.originalPlaceholder=void 0,this.isComposing=!1}function resolveAlias(aliasStr,options,opts){var aliasDefinition=Inputmask.prototype.aliases[aliasStr];return aliasDefinition?(aliasDefinition.alias&&resolveAlias(aliasDefinition.alias,void 0,opts),_inputmask.default.extend(!0,opts,aliasDefinition),_inputmask.default.extend(!0,opts,options),!0):(null===opts.mask&&(opts.mask=aliasStr),!1)}function importAttributeOptions(npt,opts,userOptions,dataAttribute){function importOption(option,optionData){var attrOption=""===dataAttribute?option:dataAttribute+"-"+option;optionData=void 0!==optionData?optionData:npt.getAttribute(attrOption),null!==optionData&&("string"==typeof optionData&&(0===option.indexOf("on")?optionData=_window.default[optionData]:"false"===optionData?optionData=!1:"true"===optionData&&(optionData=!0)),userOptions[option]=optionData)}if(!0===opts.importDataAttributes){var attrOptions=npt.getAttribute(dataAttribute),option,dataoptions,optionData,p;if(attrOptions&&""!==attrOptions&&(attrOptions=attrOptions.replace(/'/g,'"'),dataoptions=JSON.parse("{"+attrOptions+"}")),dataoptions)for(p in optionData=void 0,dataoptions)if("alias"===p.toLowerCase()){optionData=dataoptions[p];break}for(option in importOption("alias",optionData),userOptions.alias&&resolveAlias(userOptions.alias,userOptions,opts),opts){if(dataoptions)for(p in optionData=void 0,dataoptions)if(p.toLowerCase()===option.toLowerCase()){optionData=dataoptions[p];break}importOption(option,optionData)}}return _inputmask.default.extend(!0,opts,userOptions),"rtl"!==npt.dir&&!opts.rightAlign||(npt.style.textAlign="right"),"rtl"!==npt.dir&&!opts.numericInput||(npt.dir="ltr",npt.removeAttribute("dir"),opts.isRTL=!0),Object.keys(userOptions).length}Inputmask.prototype={dataAttribute:"data-inputmask",defaults:_defaults.default,definitions:_definitions.default,aliases:{},masksCache:{},get isRTL(){return this.opts.isRTL||this.opts.numericInput},mask:function mask(elems){var that=this;return"string"==typeof elems&&(elems=document.getElementById(elems)||document.querySelectorAll(elems)),elems=elems.nodeName?[elems]:Array.isArray(elems)?elems:Array.from(elems),elems.forEach(function(el,ndx){var scopedOpts=_inputmask.default.extend(!0,{},that.opts);if(importAttributeOptions(el,scopedOpts,_inputmask.default.extend(!0,{},that.userOptions),that.dataAttribute)){var maskset=(0,_maskLexer.generateMaskSet)(scopedOpts,that.noMasksCache);void 0!==maskset&&(void 0!==el.inputmask&&(el.inputmask.opts.autoUnmask=!0,el.inputmask.remove()),el.inputmask=new Inputmask(void 0,void 0,!0),el.inputmask.opts=scopedOpts,el.inputmask.noMasksCache=that.noMasksCache,el.inputmask.userOptions=_inputmask.default.extend(!0,{},that.userOptions),el.inputmask.el=el,el.inputmask.$el=(0,_inputmask.default)(el),el.inputmask.maskset=maskset,_inputmask.default.data(el,dataKey,that.userOptions),_mask.mask.call(el.inputmask))}}),elems&&elems[0]&&elems[0].inputmask||this},option:function option(options,noremask){return"string"==typeof options?this.opts[options]:"object"===_typeof(options)?(_inputmask.default.extend(this.userOptions,options),this.el&&!0!==noremask&&this.mask(this.el),this):void 0},unmaskedvalue:function unmaskedvalue(value){if(this.maskset=this.maskset||(0,_maskLexer.generateMaskSet)(this.opts,this.noMasksCache),void 0===this.el||void 0!==value){var valueBuffer=("function"==typeof this.opts.onBeforeMask&&this.opts.onBeforeMask.call(this,value,this.opts)||value).split("");_inputHandling.checkVal.call(this,void 0,!1,!1,valueBuffer),"function"==typeof this.opts.onBeforeWrite&&this.opts.onBeforeWrite.call(this,void 0,_positioning.getBuffer.call(this),0,this.opts)}return _inputHandling.unmaskedvalue.call(this,this.el)},remove:function remove(){if(this.el){_inputmask.default.data(this.el,dataKey,null);var cv=this.opts.autoUnmask?(0,_inputHandling.unmaskedvalue)(this.el):this._valueGet(this.opts.autoUnmask),valueProperty;cv!==_positioning.getBufferTemplate.call(this).join("")?this._valueSet(cv,this.opts.autoUnmask):this._valueSet(""),_eventruler.EventRuler.off(this.el),Object.getOwnPropertyDescriptor&&Object.getPrototypeOf?(valueProperty=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.el),"value"),valueProperty&&this.__valueGet&&Object.defineProperty(this.el,"value",{get:this.__valueGet,set:this.__valueSet,configurable:!0})):document.__lookupGetter__&&this.el.__lookupGetter__("value")&&this.__valueGet&&(this.el.__defineGetter__("value",this.__valueGet),this.el.__defineSetter__("value",this.__valueSet)),this.el.inputmask=void 0}return this.el},getemptymask:function getemptymask(){return this.maskset=this.maskset||(0,_maskLexer.generateMaskSet)(this.opts,this.noMasksCache),_positioning.getBufferTemplate.call(this).join("")},hasMaskedValue:function hasMaskedValue(){return!this.opts.autoUnmask},isComplete:function isComplete(){return this.maskset=this.maskset||(0,_maskLexer.generateMaskSet)(this.opts,this.noMasksCache),_validation.isComplete.call(this,_positioning.getBuffer.call(this))},getmetadata:function getmetadata(){if(this.maskset=this.maskset||(0,_maskLexer.generateMaskSet)(this.opts,this.noMasksCache),Array.isArray(this.maskset.metadata)){var maskTarget=_validationTests.getMaskTemplate.call(this,!0,0,!1).join("");return this.maskset.metadata.forEach(function(mtdt){return mtdt.mask!==maskTarget||(maskTarget=mtdt,!1)}),maskTarget}return this.maskset.metadata},isValid:function isValid(value){if(this.maskset=this.maskset||(0,_maskLexer.generateMaskSet)(this.opts,this.noMasksCache),value){var valueBuffer=("function"==typeof this.opts.onBeforeMask&&this.opts.onBeforeMask.call(this,value,this.opts)||value).split("");_inputHandling.checkVal.call(this,void 0,!0,!1,valueBuffer)}else value=this.isRTL?_positioning.getBuffer.call(this).slice().reverse().join(""):_positioning.getBuffer.call(this).join("");for(var buffer=_positioning.getBuffer.call(this),rl=_positioning.determineLastRequiredPosition.call(this),lmib=buffer.length-1;rl<lmib&&!_positioning.isMask.call(this,lmib);lmib--);return buffer.splice(rl,lmib+1-rl),_validation.isComplete.call(this,buffer)&&value===(this.isRTL?_positioning.getBuffer.call(this).slice().reverse().join(""):_positioning.getBuffer.call(this).join(""))},format:function format(value,metadata){this.maskset=this.maskset||(0,_maskLexer.generateMaskSet)(this.opts,this.noMasksCache);var valueBuffer=("function"==typeof this.opts.onBeforeMask&&this.opts.onBeforeMask.call(this,value,this.opts)||value).split("");_inputHandling.checkVal.call(this,void 0,!0,!1,valueBuffer);var formattedValue=this.isRTL?_positioning.getBuffer.call(this).slice().reverse().join(""):_positioning.getBuffer.call(this).join("");return metadata?{value:formattedValue,metadata:this.getmetadata()}:formattedValue},setValue:function setValue(value){this.el&&(0,_inputmask.default)(this.el).trigger("setvalue",[value])},analyseMask:_maskLexer.analyseMask},Inputmask.extendDefaults=function(options){_inputmask.default.extend(!0,Inputmask.prototype.defaults,options)},Inputmask.extendDefinitions=function(definition){_inputmask.default.extend(!0,Inputmask.prototype.definitions,definition)},Inputmask.extendAliases=function(alias){_inputmask.default.extend(!0,Inputmask.prototype.aliases,alias)},Inputmask.format=function(value,options,metadata){return Inputmask(options).format(value,metadata)},Inputmask.unmask=function(value,options){return Inputmask(options).unmaskedvalue(value)},Inputmask.isValid=function(value,options){return Inputmask(options).isValid(value)},Inputmask.remove=function(elems){"string"==typeof elems&&(elems=document.getElementById(elems)||document.querySelectorAll(elems)),elems=elems.nodeName?[elems]:elems,elems.forEach(function(el){el.inputmask&&el.inputmask.remove()})},Inputmask.setValue=function(elems,value){"string"==typeof elems&&(elems=document.getElementById(elems)||document.querySelectorAll(elems)),elems=elems.nodeName?[elems]:elems,elems.forEach(function(el){el.inputmask?el.inputmask.setValue(value):(0,_inputmask.default)(el).trigger("setvalue",[value])})},Inputmask.dependencyLib=_inputmask.default,_window.default.Inputmask=Inputmask;var _default=Inputmask;exports.default=_default},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.caret=caret,exports.determineLastRequiredPosition=determineLastRequiredPosition,exports.determineNewCaretPosition=determineNewCaretPosition,exports.getBuffer=getBuffer,exports.getBufferTemplate=getBufferTemplate,exports.getLastValidPosition=getLastValidPosition,exports.isMask=isMask,exports.resetMaskSet=resetMaskSet,exports.seekNext=seekNext,exports.seekPrevious=seekPrevious,exports.translatePosition=translatePosition;var _validationTests=__webpack_require__(3),_validation=__webpack_require__(4),_mask=__webpack_require__(9);function caret(input,begin,end,notranslate,isDelete){var inputmask=this,opts=this.opts,range;if(void 0===begin)return"selectionStart"in input&&"selectionEnd"in input?(begin=input.selectionStart,end=input.selectionEnd):window.getSelection?(range=window.getSelection().getRangeAt(0),range.commonAncestorContainer.parentNode!==input&&range.commonAncestorContainer!==input||(begin=range.startOffset,end=range.endOffset)):document.selection&&document.selection.createRange&&(range=document.selection.createRange(),begin=0-range.duplicate().moveStart("character",-input.inputmask._valueGet().length),end=begin+range.text.length),{begin:notranslate?begin:translatePosition.call(this,begin),end:notranslate?end:translatePosition.call(this,end)};if(Array.isArray(begin)&&(end=this.isRTL?begin[0]:begin[1],begin=this.isRTL?begin[1]:begin[0]),void 0!==begin.begin&&(end=this.isRTL?begin.begin:begin.end,begin=this.isRTL?begin.end:begin.begin),"number"==typeof begin){begin=notranslate?begin:translatePosition.call(this,begin),end=notranslate?end:translatePosition.call(this,end),end="number"==typeof end?end:begin;var scrollCalc=parseInt(((input.ownerDocument.defaultView||window).getComputedStyle?(input.ownerDocument.defaultView||window).getComputedStyle(input,null):input.currentStyle).fontSize)*end;if(input.scrollLeft=scrollCalc>input.scrollWidth?scrollCalc:0,input.inputmask.caretPos={begin:begin,end:end},opts.insertModeVisual&&!1===opts.insertMode&&begin===end&&(isDelete||end++),input===(input.inputmask.shadowRoot||document).activeElement)if("setSelectionRange"in input)input.setSelectionRange(begin,end);else if(window.getSelection){if(range=document.createRange(),void 0===input.firstChild||null===input.firstChild){var textNode=document.createTextNode("");input.appendChild(textNode)}range.setStart(input.firstChild,begin<input.inputmask._valueGet().length?begin:input.inputmask._valueGet().length),range.setEnd(input.firstChild,end<input.inputmask._valueGet().length?end:input.inputmask._valueGet().length),range.collapse(!0);var sel=window.getSelection();sel.removeAllRanges(),sel.addRange(range)}else input.createTextRange&&(range=input.createTextRange(),range.collapse(!0),range.moveEnd("character",end),range.moveStart("character",begin),range.select())}}function determineLastRequiredPosition(returnDefinition){var inputmask=this,maskset=this.maskset,$=this.dependencyLib,buffer=_validationTests.getMaskTemplate.call(this,!0,getLastValidPosition.call(this),!0,!0),bl=buffer.length,pos,lvp=getLastValidPosition.call(this),positions={},lvTest=maskset.validPositions[lvp],ndxIntlzr=void 0!==lvTest?lvTest.locator.slice():void 0,testPos;for(pos=lvp+1;pos<buffer.length;pos++)testPos=_validationTests.getTestTemplate.call(this,pos,ndxIntlzr,pos-1),ndxIntlzr=testPos.locator.slice(),positions[pos]=$.extend(!0,{},testPos);var lvTestAlt=lvTest&&void 0!==lvTest.alternation?lvTest.locator[lvTest.alternation]:void 0;for(pos=bl-1;lvp<pos&&(testPos=positions[pos],(testPos.match.optionality||testPos.match.optionalQuantifier&&testPos.match.newBlockMarker||lvTestAlt&&(lvTestAlt!==positions[pos].locator[lvTest.alternation]&&1!=testPos.match.static||!0===testPos.match.static&&testPos.locator[lvTest.alternation]&&_validation.checkAlternationMatch.call(this,testPos.locator[lvTest.alternation].toString().split(","),lvTestAlt.toString().split(","))&&""!==_validationTests.getTests.call(this,pos)[0].def))&&buffer[pos]===_validationTests.getPlaceholder.call(this,pos,testPos.match));pos--)bl--;return returnDefinition?{l:bl,def:positions[bl]?positions[bl].match:void 0}:bl}function determineNewCaretPosition(selectedCaret,tabbed){var inputmask=this,maskset=this.maskset,opts=this.opts;function doRadixFocus(clickPos){if(""!==opts.radixPoint&&0!==opts.digits){var vps=maskset.validPositions;if(void 0===vps[clickPos]||vps[clickPos].input===_validationTests.getPlaceholder.call(inputmask,clickPos)){if(clickPos<seekNext.call(inputmask,-1))return!0;var radixPos=getBuffer.call(inputmask).indexOf(opts.radixPoint);if(-1!==radixPos){for(var vp in vps)if(vps[vp]&&radixPos<vp&&vps[vp].input!==_validationTests.getPlaceholder.call(inputmask,vp))return!1;return!0}}}return!1}if(tabbed&&(inputmask.isRTL?selectedCaret.end=selectedCaret.begin:selectedCaret.begin=selectedCaret.end),selectedCaret.begin===selectedCaret.end){switch(opts.positionCaretOnClick){case"none":break;case"select":selectedCaret={begin:0,end:getBuffer.call(inputmask).length};break;case"ignore":selectedCaret.end=selectedCaret.begin=seekNext.call(inputmask,getLastValidPosition.call(inputmask));break;case"radixFocus":if(doRadixFocus(selectedCaret.begin)){var radixPos=getBuffer.call(inputmask).join("").indexOf(opts.radixPoint);selectedCaret.end=selectedCaret.begin=opts.numericInput?seekNext.call(inputmask,radixPos):radixPos;break}default:var clickPosition=selectedCaret.begin,lvclickPosition=getLastValidPosition.call(inputmask,clickPosition,!0),lastPosition=seekNext.call(inputmask,-1!==lvclickPosition||isMask.call(inputmask,0)?lvclickPosition:-1);if(clickPosition<=lastPosition)selectedCaret.end=selectedCaret.begin=isMask.call(inputmask,clickPosition,!1,!0)?clickPosition:seekNext.call(inputmask,clickPosition);else{var lvp=maskset.validPositions[lvclickPosition],tt=_validationTests.getTestTemplate.call(inputmask,lastPosition,lvp?lvp.match.locator:void 0,lvp),placeholder=_validationTests.getPlaceholder.call(inputmask,lastPosition,tt.match);if(""!==placeholder&&getBuffer.call(inputmask)[lastPosition]!==placeholder&&!0!==tt.match.optionalQuantifier&&!0!==tt.match.newBlockMarker||!isMask.call(inputmask,lastPosition,opts.keepStatic,!0)&&tt.match.def===placeholder){var newPos=seekNext.call(inputmask,lastPosition);(newPos<=clickPosition||clickPosition===lastPosition)&&(lastPosition=newPos)}selectedCaret.end=selectedCaret.begin=lastPosition}}return selectedCaret}}function getBuffer(noCache){var inputmask=this,maskset=this.maskset;return void 0!==maskset.buffer&&!0!==noCache||(maskset.buffer=_validationTests.getMaskTemplate.call(this,!0,getLastValidPosition.call(this),!0),void 0===maskset._buffer&&(maskset._buffer=maskset.buffer.slice())),maskset.buffer}function getBufferTemplate(){var inputmask=this,maskset=this.maskset;return void 0===maskset._buffer&&(maskset._buffer=_validationTests.getMaskTemplate.call(this,!1,1),void 0===maskset.buffer&&(maskset.buffer=maskset._buffer.slice())),maskset._buffer}function getLastValidPosition(closestTo,strict,validPositions){var maskset=this.maskset,before=-1,after=-1,valids=validPositions||maskset.validPositions;for(var posNdx in void 0===closestTo&&(closestTo=-1),valids){var psNdx=parseInt(posNdx);valids[psNdx]&&(strict||!0!==valids[psNdx].generatedInput)&&(psNdx<=closestTo&&(before=psNdx),closestTo<=psNdx&&(after=psNdx))}return-1===before||before==closestTo?after:-1==after?before:closestTo-before<after-closestTo?before:after}function isMask(pos,strict,fuzzy){var inputmask=this,maskset=this.maskset,test=_validationTests.getTestTemplate.call(this,pos).match;if(""===test.def&&(test=_validationTests.getTest.call(this,pos).match),!0!==test.static)return test.fn;if(!0===fuzzy&&void 0!==maskset.validPositions[pos]&&!0!==maskset.validPositions[pos].generatedInput)return!0;if(!0!==strict&&-1<pos){if(fuzzy){var tests=_validationTests.getTests.call(this,pos);return tests.length>1+(""===tests[tests.length-1].match.def?1:0)}var testTemplate=_validationTests.determineTestTemplate.call(this,pos,_validationTests.getTests.call(this,pos)),testPlaceHolder=_validationTests.getPlaceholder.call(this,pos,testTemplate.match);return testTemplate.match.def!==testPlaceHolder}return!1}function resetMaskSet(soft){var maskset=this.maskset;maskset.buffer=void 0,!0!==soft&&(maskset.validPositions={},maskset.p=0)}function seekNext(pos,newBlock,fuzzy){var inputmask=this;void 0===fuzzy&&(fuzzy=!0);for(var position=pos+1;""!==_validationTests.getTest.call(this,position).match.def&&(!0===newBlock&&(!0!==_validationTests.getTest.call(this,position).match.newBlockMarker||!isMask.call(this,position,void 0,!0))||!0!==newBlock&&!isMask.call(this,position,void 0,fuzzy));)position++;return position}function seekPrevious(pos,newBlock){var inputmask=this,position=pos-1;if(pos<=0)return 0;for(;0<position&&(!0===newBlock&&(!0!==_validationTests.getTest.call(this,position).match.newBlockMarker||!isMask.call(this,position,void 0,!0))||!0!==newBlock&&!isMask.call(this,position,void 0,!0));)position--;return position}function translatePosition(pos){var inputmask=this,opts=this.opts,el=this.el;return!this.isRTL||"number"!=typeof pos||opts.greedy&&""===opts.placeholder||!el||(pos=this._valueGet().length-pos),pos}},function(module,exports,__webpack_require__){"use strict";function getLocator(tst,align){var locator=(null!=tst.alternation?tst.mloc[getDecisionTaker(tst)]:tst.locator).join("");if(""!==locator)for(;locator.length<align;)locator+="0";return locator}function getDecisionTaker(tst){var decisionTaker=tst.locator[tst.alternation];return"string"==typeof decisionTaker&&0<decisionTaker.length&&(decisionTaker=decisionTaker.split(",")[0]),void 0!==decisionTaker?decisionTaker.toString():""}function getPlaceholder(pos,test,returnPL){var inputmask=this,opts=this.opts,maskset=this.maskset;if(test=test||getTest.call(this,pos).match,void 0!==test.placeholder||!0===returnPL)return"function"==typeof test.placeholder?test.placeholder(opts):test.placeholder;if(!0!==test.static)return opts.placeholder.charAt(pos%opts.placeholder.length);if(-1<pos&&void 0===maskset.validPositions[pos]){var tests=getTests.call(this,pos),staticAlternations=[],prevTest;if(tests.length>1+(""===tests[tests.length-1].match.def?1:0))for(var i=0;i<tests.length;i++)if(""!==tests[i].match.def&&!0!==tests[i].match.optionality&&!0!==tests[i].match.optionalQuantifier&&(!0===tests[i].match.static||void 0===prevTest||!1!==tests[i].match.fn.test(prevTest.match.def,maskset,pos,!0,opts))&&(staticAlternations.push(tests[i]),!0===tests[i].match.static&&(prevTest=tests[i]),1<staticAlternations.length&&/[0-9a-bA-Z]/.test(staticAlternations[0].match.def)))return opts.placeholder.charAt(pos%opts.placeholder.length)}return test.def}function getMaskTemplate(baseOnInput,minimalPos,includeMode,noJit,clearOptionalTail){var inputmask=this,opts=this.opts,maskset=this.maskset,greedy=opts.greedy;clearOptionalTail&&(opts.greedy=!1),minimalPos=minimalPos||0;var maskTemplate=[],ndxIntlzr,pos=0,test,testPos,jitRenderStatic;do{if(!0===baseOnInput&&maskset.validPositions[pos])testPos=clearOptionalTail&&!0===maskset.validPositions[pos].match.optionality&&void 0===maskset.validPositions[pos+1]&&(!0===maskset.validPositions[pos].generatedInput||maskset.validPositions[pos].input==opts.skipOptionalPartCharacter&&0<pos)?determineTestTemplate.call(this,pos,getTests.call(this,pos,ndxIntlzr,pos-1)):maskset.validPositions[pos],test=testPos.match,ndxIntlzr=testPos.locator.slice(),maskTemplate.push(!0===includeMode?testPos.input:!1===includeMode?test.nativeDef:getPlaceholder.call(this,pos,test));else{testPos=getTestTemplate.call(this,pos,ndxIntlzr,pos-1),test=testPos.match,ndxIntlzr=testPos.locator.slice();var jitMasking=!0!==noJit&&(!1!==opts.jitMasking?opts.jitMasking:test.jit);jitRenderStatic=jitRenderStatic&&test.static&&test.def!==opts.groupSeparator&&null===test.fn||maskset.validPositions[pos-1]&&test.static&&test.def!==opts.groupSeparator&&null===test.fn,jitRenderStatic||!1===jitMasking||void 0===jitMasking||"number"==typeof jitMasking&&isFinite(jitMasking)&&pos<jitMasking?maskTemplate.push(!1===includeMode?test.nativeDef:getPlaceholder.call(this,pos,test)):jitRenderStatic=!1}pos++}while((void 0===this.maxLength||pos<this.maxLength)&&(!0!==test.static||""!==test.def)||pos<minimalPos);return""===maskTemplate[maskTemplate.length-1]&&maskTemplate.pop(),!1===includeMode&&void 0!==maskset.maskLength||(maskset.maskLength=pos-1),opts.greedy=greedy,maskTemplate}function getTestTemplate(pos,ndxIntlzr,tstPs){var inputmask=this,maskset=this.maskset;return maskset.validPositions[pos]||determineTestTemplate.call(this,pos,getTests.call(this,pos,ndxIntlzr?ndxIntlzr.slice():ndxIntlzr,tstPs))}function determineTestTemplate(pos,tests){var inputmask=this,opts=this.opts;pos=0<pos?pos-1:0;for(var altTest=getTest.call(this,pos),targetLocator=getLocator(altTest),tstLocator,closest,bestMatch,ndx=0;ndx<tests.length;ndx++){var tst=tests[ndx];tstLocator=getLocator(tst,targetLocator.length);var distance=Math.abs(tstLocator-targetLocator);(void 0===closest||""!==tstLocator&&distance<closest||bestMatch&&!opts.greedy&&bestMatch.match.optionality&&"master"===bestMatch.match.newBlockMarker&&(!tst.match.optionality||!tst.match.newBlockMarker)||bestMatch&&bestMatch.match.optionalQuantifier&&!tst.match.optionalQuantifier)&&(closest=distance,bestMatch=tst)}return bestMatch}function getTest(pos,tests){var inputmask=this,maskset=this.maskset;return maskset.validPositions[pos]?maskset.validPositions[pos]:(tests||getTests.call(this,pos))[0]}function getTests(pos,ndxIntlzr,tstPs){var inputmask=this,$=this.dependencyLib,maskset=this.maskset,opts=this.opts,el=this.el,maskTokens=maskset.maskToken,testPos=ndxIntlzr?tstPs:0,ndxInitializer=ndxIntlzr?ndxIntlzr.slice():[0],matches=[],insertStop=!1,latestMatch,cacheDependency=ndxIntlzr?ndxIntlzr.join(""):"";function resolveTestFromToken(maskToken,ndxInitializer,loopNdx,quantifierRecurse){function handleMatch(match,loopNdx,quantifierRecurse){function isFirstMatch(latestMatch,tokenGroup){var firstMatch=0===tokenGroup.matches.indexOf(latestMatch);return firstMatch||tokenGroup.matches.every(function(match,ndx){return!0===match.isQuantifier?firstMatch=isFirstMatch(latestMatch,tokenGroup.matches[ndx-1]):Object.prototype.hasOwnProperty.call(match,"matches")&&(firstMatch=isFirstMatch(latestMatch,match)),!firstMatch}),firstMatch}function resolveNdxInitializer(pos,alternateNdx,targetAlternation){var bestMatch,indexPos;if((maskset.tests[pos]||maskset.validPositions[pos])&&(maskset.tests[pos]||[maskset.validPositions[pos]]).every(function(lmnt,ndx){if(lmnt.mloc[alternateNdx])return bestMatch=lmnt,!1;var alternation=void 0!==targetAlternation?targetAlternation:lmnt.alternation,ndxPos=void 0!==lmnt.locator[alternation]?lmnt.locator[alternation].toString().indexOf(alternateNdx):-1;return(void 0===indexPos||ndxPos<indexPos)&&-1!==ndxPos&&(bestMatch=lmnt,indexPos=ndxPos),!0}),bestMatch){var bestMatchAltIndex=bestMatch.locator[bestMatch.alternation],locator=bestMatch.mloc[alternateNdx]||bestMatch.mloc[bestMatchAltIndex]||bestMatch.locator;return locator.slice((void 0!==targetAlternation?targetAlternation:bestMatch.alternation)+1)}return void 0!==targetAlternation?resolveNdxInitializer(pos,alternateNdx):void 0}function isSubsetOf(source,target){function expand(pattern){for(var expanded=[],start=-1,end,i=0,l=pattern.length;i<l;i++)if("-"===pattern.charAt(i))for(end=pattern.charCodeAt(i+1);++start<end;)expanded.push(String.fromCharCode(start));else start=pattern.charCodeAt(i),expanded.push(pattern.charAt(i));return expanded.join("")}return source.match.def===target.match.nativeDef||!(!(opts.regex||source.match.fn instanceof RegExp&&target.match.fn instanceof RegExp)||!0===source.match.static||!0===target.match.static)&&-1!==expand(target.match.fn.toString().replace(/[[\]/]/g,"")).indexOf(expand(source.match.fn.toString().replace(/[[\]/]/g,"")))}function staticCanMatchDefinition(source,target){return!0===source.match.static&&!0!==target.match.static&&target.match.fn.test(source.match.def,maskset,pos,!1,opts,!1)}function setMergeLocators(targetMatch,altMatch){var alternationNdx=targetMatch.alternation,shouldMerge=void 0===altMatch||alternationNdx===altMatch.alternation&&-1===targetMatch.locator[alternationNdx].toString().indexOf(altMatch.locator[alternationNdx]);if(!shouldMerge&&alternationNdx>altMatch.alternation)for(var i=altMatch.alternation;i<alternationNdx;i++)if(targetMatch.locator[i]!==altMatch.locator[i]){alternationNdx=i,shouldMerge=!0;break}if(shouldMerge){targetMatch.mloc=targetMatch.mloc||{};var locNdx=targetMatch.locator[alternationNdx];if(void 0!==locNdx){if("string"==typeof locNdx&&(locNdx=locNdx.split(",")[0]),void 0===targetMatch.mloc[locNdx]&&(targetMatch.mloc[locNdx]=targetMatch.locator.slice()),void 0!==altMatch){for(var ndx in altMatch.mloc)"string"==typeof ndx&&(ndx=ndx.split(",")[0]),void 0===targetMatch.mloc[ndx]&&(targetMatch.mloc[ndx]=altMatch.mloc[ndx]);targetMatch.locator[alternationNdx]=Object.keys(targetMatch.mloc).join(",")}return!0}targetMatch.alternation=void 0}return!1}function isSameLevel(targetMatch,altMatch){if(targetMatch.locator.length!==altMatch.locator.length)return!1;for(var locNdx=targetMatch.alternation+1;locNdx<targetMatch.locator.length;locNdx++)if(targetMatch.locator[locNdx]!==altMatch.locator[locNdx])return!1;return!0}if(testPos>pos+opts._maxTestPos)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+maskset.mask;if(testPos===pos&&void 0===match.matches)return matches.push({match:match,locator:loopNdx.reverse(),cd:cacheDependency,mloc:{}}),!0;if(void 0!==match.matches){if(match.isGroup&&quantifierRecurse!==match){if(match=handleMatch(maskToken.matches[maskToken.matches.indexOf(match)+1],loopNdx,quantifierRecurse),match)return!0}else if(match.isOptional){var optionalToken=match,mtchsNdx=matches.length;if(match=resolveTestFromToken(match,ndxInitializer,loopNdx,quantifierRecurse),match){if(matches.forEach(function(mtch,ndx){mtchsNdx<=ndx&&(mtch.match.optionality=!0)}),latestMatch=matches[matches.length-1].match,void 0!==quantifierRecurse||!isFirstMatch(latestMatch,optionalToken))return!0;insertStop=!0,testPos=pos}}else if(match.isAlternator){var alternateToken=match,malternateMatches=[],maltMatches,currentMatches=matches.slice(),loopNdxCnt=loopNdx.length,altIndex=0<ndxInitializer.length?ndxInitializer.shift():-1;if(-1===altIndex||"string"==typeof altIndex){var currentPos=testPos,ndxInitializerClone=ndxInitializer.slice(),altIndexArr=[],amndx;if("string"==typeof altIndex)altIndexArr=altIndex.split(",");else for(amndx=0;amndx<alternateToken.matches.length;amndx++)altIndexArr.push(amndx.toString());if(void 0!==maskset.excludes[pos]){for(var altIndexArrClone=altIndexArr.slice(),i=0,exl=maskset.excludes[pos].length;i<exl;i++){var excludeSet=maskset.excludes[pos][i].toString().split(":");loopNdx.length==excludeSet[1]&&altIndexArr.splice(altIndexArr.indexOf(excludeSet[0]),1)}0===altIndexArr.length&&(delete maskset.excludes[pos],altIndexArr=altIndexArrClone)}(!0===opts.keepStatic||isFinite(parseInt(opts.keepStatic))&¤tPos>=opts.keepStatic)&&(altIndexArr=altIndexArr.slice(0,1));for(var unMatchedAlternation=!1,ndx=0;ndx<altIndexArr.length;ndx++){amndx=parseInt(altIndexArr[ndx]),matches=[],ndxInitializer="string"==typeof altIndex&&resolveNdxInitializer(testPos,amndx,loopNdxCnt)||ndxInitializerClone.slice(),alternateToken.matches[amndx]&&handleMatch(alternateToken.matches[amndx],[amndx].concat(loopNdx),quantifierRecurse)?match=!0:0===ndx&&(unMatchedAlternation=!0),maltMatches=matches.slice(),testPos=currentPos,matches=[];for(var ndx1=0;ndx1<maltMatches.length;ndx1++){var altMatch=maltMatches[ndx1],dropMatch=!1;altMatch.match.jit=altMatch.match.jit||unMatchedAlternation,altMatch.alternation=altMatch.alternation||loopNdxCnt,setMergeLocators(altMatch);for(var ndx2=0;ndx2<malternateMatches.length;ndx2++){var altMatch2=malternateMatches[ndx2];if("string"!=typeof altIndex||void 0!==altMatch.alternation&&altIndexArr.includes(altMatch.locator[altMatch.alternation].toString())){if(altMatch.match.nativeDef===altMatch2.match.nativeDef){dropMatch=!0,setMergeLocators(altMatch2,altMatch);break}if(isSubsetOf(altMatch,altMatch2)){setMergeLocators(altMatch,altMatch2)&&(dropMatch=!0,malternateMatches.splice(malternateMatches.indexOf(altMatch2),0,altMatch));break}if(isSubsetOf(altMatch2,altMatch)){setMergeLocators(altMatch2,altMatch);break}if(staticCanMatchDefinition(altMatch,altMatch2)){isSameLevel(altMatch,altMatch2)||void 0!==el.inputmask.userOptions.keepStatic?setMergeLocators(altMatch,altMatch2)&&(dropMatch=!0,malternateMatches.splice(malternateMatches.indexOf(altMatch2),0,altMatch)):opts.keepStatic=!0;break}}}dropMatch||malternateMatches.push(altMatch)}}matches=currentMatches.concat(malternateMatches),testPos=pos,insertStop=0<matches.length,match=0<malternateMatches.length,ndxInitializer=ndxInitializerClone.slice()}else match=handleMatch(alternateToken.matches[altIndex]||maskToken.matches[altIndex],[altIndex].concat(loopNdx),quantifierRecurse);if(match)return!0}else if(match.isQuantifier&&quantifierRecurse!==maskToken.matches[maskToken.matches.indexOf(match)-1])for(var qt=match,qndx=0<ndxInitializer.length?ndxInitializer.shift():0;qndx<(isNaN(qt.quantifier.max)?qndx+1:qt.quantifier.max)&&testPos<=pos;qndx++){var tokenGroup=maskToken.matches[maskToken.matches.indexOf(qt)-1];if(match=handleMatch(tokenGroup,[qndx].concat(loopNdx),tokenGroup),match){if(latestMatch=matches[matches.length-1].match,latestMatch.optionalQuantifier=qndx>=qt.quantifier.min,latestMatch.jit=(qndx||1)*tokenGroup.matches.indexOf(latestMatch)>=qt.quantifier.jit,latestMatch.optionalQuantifier&&isFirstMatch(latestMatch,tokenGroup)){insertStop=!0,testPos=pos;break}return latestMatch.jit&&(maskset.jitOffset[pos]=tokenGroup.matches.length-tokenGroup.matches.indexOf(latestMatch)),!0}}else if(match=resolveTestFromToken(match,ndxInitializer,loopNdx,quantifierRecurse),match)return!0}else testPos++}for(var tndx=0<ndxInitializer.length?ndxInitializer.shift():0;tndx<maskToken.matches.length;tndx++)if(!0!==maskToken.matches[tndx].isQuantifier){var match=handleMatch(maskToken.matches[tndx],[tndx].concat(loopNdx),quantifierRecurse);if(match&&testPos===pos)return match;if(pos<testPos)break}}function mergeLocators(pos,tests){var locator=[],alternation;return Array.isArray(tests)||(tests=[tests]),0<tests.length&&(void 0===tests[0].alternation||!0===opts.keepStatic?(locator=determineTestTemplate.call(inputmask,pos,tests.slice()).locator.slice(),0===locator.length&&(locator=tests[0].locator.slice())):tests.forEach(function(tst){""!==tst.def&&(0===locator.length?(alternation=tst.alternation,locator=tst.locator.slice()):tst.locator[alternation]&&-1===locator[alternation].toString().indexOf(tst.locator[alternation])&&(locator[alternation]+=","+tst.locator[alternation]))})),locator}if(-1<pos&&(void 0===inputmask.maxLength||pos<inputmask.maxLength)){if(void 0===ndxIntlzr){for(var previousPos=pos-1,test;void 0===(test=maskset.validPositions[previousPos]||maskset.tests[previousPos])&&-1<previousPos;)previousPos--;void 0!==test&&-1<previousPos&&(ndxInitializer=mergeLocators(previousPos,test),cacheDependency=ndxInitializer.join(""),testPos=previousPos)}if(maskset.tests[pos]&&maskset.tests[pos][0].cd===cacheDependency)return maskset.tests[pos];for(var mtndx=ndxInitializer.shift();mtndx<maskTokens.length;mtndx++){var match=resolveTestFromToken(maskTokens[mtndx],ndxInitializer,[mtndx]);if(match&&testPos===pos||pos<testPos)break}}return 0!==matches.length&&!insertStop||matches.push({match:{fn:null,static:!0,optionality:!1,casing:null,def:"",placeholder:""},locator:[],mloc:{},cd:cacheDependency}),void 0!==ndxIntlzr&&maskset.tests[pos]?$.extend(!0,[],matches):(maskset.tests[pos]=$.extend(!0,[],matches),maskset.tests[pos])}Object.defineProperty(exports,"__esModule",{value:!0}),exports.determineTestTemplate=determineTestTemplate,exports.getDecisionTaker=getDecisionTaker,exports.getMaskTemplate=getMaskTemplate,exports.getPlaceholder=getPlaceholder,exports.getTest=getTest,exports.getTests=getTests,exports.getTestTemplate=getTestTemplate},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.alternate=alternate,exports.checkAlternationMatch=checkAlternationMatch,exports.isComplete=isComplete,exports.isValid=isValid,exports.refreshFromBuffer=refreshFromBuffer,exports.revalidateMask=revalidateMask,exports.handleRemove=handleRemove;var _validationTests=__webpack_require__(3),_keycode=_interopRequireDefault(__webpack_require__(0)),_positioning=__webpack_require__(2),_eventhandlers=__webpack_require__(6);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function alternate(maskPos,c,strict,fromIsValid,rAltPos,selection){var inputmask=this,$=this.dependencyLib,opts=this.opts,maskset=this.maskset,validPsClone=$.extend(!0,{},maskset.validPositions),tstClone=$.extend(!0,{},maskset.tests),lastAlt,alternation,isValidRslt=!1,returnRslt=!1,altPos,prevAltPos,i,validPos,decisionPos,lAltPos=void 0!==rAltPos?rAltPos:_positioning.getLastValidPosition.call(this),nextPos,input,begin,end;if(selection&&(begin=selection.begin,end=selection.end,selection.begin>selection.end&&(begin=selection.end,end=selection.begin)),-1===lAltPos&&void 0===rAltPos)lastAlt=0,prevAltPos=_validationTests.getTest.call(this,lastAlt),alternation=prevAltPos.alternation;else for(;0<=lAltPos;lAltPos--)if(altPos=maskset.validPositions[lAltPos],altPos&&void 0!==altPos.alternation){if(prevAltPos&&prevAltPos.locator[altPos.alternation]!==altPos.locator[altPos.alternation])break;lastAlt=lAltPos,alternation=maskset.validPositions[lastAlt].alternation,prevAltPos=altPos}if(void 0!==alternation){decisionPos=parseInt(lastAlt),maskset.excludes[decisionPos]=maskset.excludes[decisionPos]||[],!0!==maskPos&&maskset.excludes[decisionPos].push((0,_validationTests.getDecisionTaker)(prevAltPos)+":"+prevAltPos.alternation);var validInputs=[],resultPos=-1;for(i=decisionPos;i<_positioning.getLastValidPosition.call(this,void 0,!0)+1;i++)-1===resultPos&&maskPos<=i&&void 0!==c&&(validInputs.push(c),resultPos=validInputs.length-1),validPos=maskset.validPositions[i],validPos&&!0!==validPos.generatedInput&&(void 0===selection||i<begin||end<=i)&&validInputs.push(validPos.input),delete maskset.validPositions[i];for(-1===resultPos&&void 0!==c&&(validInputs.push(c),resultPos=validInputs.length-1);void 0!==maskset.excludes[decisionPos]&&maskset.excludes[decisionPos].length<10;){for(maskset.tests={},_positioning.resetMaskSet.call(this,!0),isValidRslt=!0,i=0;i<validInputs.length&&(nextPos=isValidRslt.caret||_positioning.getLastValidPosition.call(this,void 0,!0)+1,input=validInputs[i],isValidRslt=isValid.call(this,nextPos,input,!1,fromIsValid,!0));i++)i===resultPos&&(returnRslt=isValidRslt),1==maskPos&&isValidRslt&&(returnRslt={caretPos:i});if(isValidRslt)break;if(_positioning.resetMaskSet.call(this),prevAltPos=_validationTests.getTest.call(this,decisionPos),maskset.validPositions=$.extend(!0,{},validPsClone),maskset.tests=$.extend(!0,{},tstClone),!maskset.excludes[decisionPos]){returnRslt=alternate.call(this,maskPos,c,strict,fromIsValid,decisionPos-1,selection);break}var decisionTaker=(0,_validationTests.getDecisionTaker)(prevAltPos);if(-1!==maskset.excludes[decisionPos].indexOf(decisionTaker+":"+prevAltPos.alternation)){returnRslt=alternate.call(this,maskPos,c,strict,fromIsValid,decisionPos-1,selection);break}for(maskset.excludes[decisionPos].push(decisionTaker+":"+prevAltPos.alternation),i=decisionPos;i<_positioning.getLastValidPosition.call(this,void 0,!0)+1;i++)delete maskset.validPositions[i]}}return returnRslt&&!1===opts.keepStatic||delete maskset.excludes[decisionPos],returnRslt}function casing(elem,test,pos){var opts=this.opts,maskset=this.maskset;switch(opts.casing||test.casing){case"upper":elem=elem.toUpperCase();break;case"lower":elem=elem.toLowerCase();break;case"title":var posBefore=maskset.validPositions[pos-1];elem=0===pos||posBefore&&posBefore.input===String.fromCharCode(_keycode.default.SPACE)?elem.toUpperCase():elem.toLowerCase();break;default:if("function"==typeof opts.casing){var args=Array.prototype.slice.call(arguments);args.push(maskset.validPositions),elem=opts.casing.apply(this,args)}}return elem}function checkAlternationMatch(altArr1,altArr2,na){for(var opts=this.opts,altArrC=opts.greedy?altArr2:altArr2.slice(0,1),isMatch=!1,naArr=void 0!==na?na.split(","):[],naNdx,i=0;i<naArr.length;i++)-1!==(naNdx=altArr1.indexOf(naArr[i]))&&altArr1.splice(naNdx,1);for(var alndx=0;alndx<altArr1.length;alndx++)if(altArrC.includes(altArr1[alndx])){isMatch=!0;break}return isMatch}function handleRemove(input,k,pos,strict,fromIsValid){var inputmask=this,maskset=this.maskset,opts=this.opts;if((opts.numericInput||this.isRTL)&&(k===_keycode.default.BACKSPACE?k=_keycode.default.DELETE:k===_keycode.default.DELETE&&(k=_keycode.default.BACKSPACE),this.isRTL)){var pend=pos.end;pos.end=pos.begin,pos.begin=pend}var lvp=_positioning.getLastValidPosition.call(this,void 0,!0),offset;if(pos.end>=_positioning.getBuffer.call(this).length&&lvp>=pos.end&&(pos.end=lvp+1),k===_keycode.default.BACKSPACE?pos.end-pos.begin<1&&(pos.begin=_positioning.seekPrevious.call(this,pos.begin)):k===_keycode.default.DELETE&&pos.begin===pos.end&&(pos.end=_positioning.isMask.call(this,pos.end,!0,!0)?pos.end+1:_positioning.seekNext.call(this,pos.end)+1),!1!==(offset=revalidateMask.call(this,pos))){if(!0!==strict&&!1!==opts.keepStatic||null!==opts.regex&&-1!==_validationTests.getTest.call(this,pos.begin).match.def.indexOf("|")){var result=alternate.call(this,!0);if(result){var newPos=void 0!==result.caret?result.caret:result.pos?_positioning.seekNext.call(this,result.pos.begin?result.pos.begin:result.pos):_positioning.getLastValidPosition.call(this,-1,!0);(k!==_keycode.default.DELETE||pos.begin>newPos)&&pos.begin}}!0!==strict&&(maskset.p=k===_keycode.default.DELETE?pos.begin+offset:pos.begin)}}function isComplete(buffer){var inputmask=this,opts=this.opts,maskset=this.maskset;if("function"==typeof opts.isComplete)return opts.isComplete(buffer,opts);if("*"!==opts.repeat){var complete=!1,lrp=_positioning.determineLastRequiredPosition.call(this,!0),aml=_positioning.seekPrevious.call(this,lrp.l);if(void 0===lrp.def||lrp.def.newBlockMarker||lrp.def.optionality||lrp.def.optionalQuantifier){complete=!0;for(var i=0;i<=aml;i++){var test=_validationTests.getTestTemplate.call(this,i).match;if(!0!==test.static&&void 0===maskset.validPositions[i]&&!0!==test.optionality&&!0!==test.optionalQuantifier||!0===test.static&&buffer[i]!==_validationTests.getPlaceholder.call(this,i,test)){complete=!1;break}}}return complete}}function isValid(pos,c,strict,fromIsValid,fromAlternate,validateOnly,fromCheckval){var inputmask=this,$=this.dependencyLib,opts=this.opts,el=inputmask.el,maskset=inputmask.maskset;function isSelection(posObj){return inputmask.isRTL?1<posObj.begin-posObj.end||posObj.begin-posObj.end==1:1<posObj.end-posObj.begin||posObj.end-posObj.begin==1}strict=!0===strict;var maskPos=pos;function processCommandObject(commandObj){if(void 0!==commandObj){if(void 0!==commandObj.remove&&(Array.isArray(commandObj.remove)||(commandObj.remove=[commandObj.remove]),commandObj.remove.sort(function(a,b){return b.pos-a.pos}).forEach(function(lmnt){revalidateMask.call(inputmask,{begin:lmnt,end:lmnt+1})}),commandObj.remove=void 0),void 0!==commandObj.insert&&(Array.isArray(commandObj.insert)||(commandObj.insert=[commandObj.insert]),commandObj.insert.sort(function(a,b){return a.pos-b.pos}).forEach(function(lmnt){""!==lmnt.c&&isValid.call(inputmask,lmnt.pos,lmnt.c,void 0===lmnt.strict||lmnt.strict,void 0!==lmnt.fromIsValid?lmnt.fromIsValid:fromIsValid)}),commandObj.insert=void 0),commandObj.refreshFromBuffer&&commandObj.buffer){var refresh=commandObj.refreshFromBuffer;refreshFromBuffer.call(inputmask,!0===refresh?refresh:refresh.start,refresh.end,commandObj.buffer),commandObj.refreshFromBuffer=void 0}void 0!==commandObj.rewritePosition&&(maskPos=commandObj.rewritePosition,commandObj=!0)}return commandObj}function _isValid(position,c,strict){var rslt=!1;return _validationTests.getTests.call(inputmask,position).every(function(tst,ndx){var test=tst.match;if(_positioning.getBuffer.call(inputmask,!0),rslt=null!=test.fn?test.fn.test(c,maskset,position,strict,opts,isSelection(pos)):(c===test.def||c===opts.skipOptionalPartCharacter)&&""!==test.def&&{c:_validationTests.getPlaceholder.call(inputmask,position,test,!0)||test.def,pos:position},!1===rslt)return!0;var elem=void 0!==rslt.c?rslt.c:c,validatedPos=position;return elem=elem===opts.skipOptionalPartCharacter&&!0===test.static?_validationTests.getPlaceholder.call(inputmask,position,test,!0)||test.def:elem,rslt=processCommandObject(rslt),!0!==rslt&&void 0!==rslt.pos&&rslt.pos!==position&&(validatedPos=rslt.pos),!0!==rslt&&void 0===rslt.pos&&void 0===rslt.c||!1===revalidateMask.call(inputmask,pos,$.extend({},tst,{input:casing.call(inputmask,elem,test,validatedPos)}),fromIsValid,validatedPos)&&(rslt=!1),!1}),rslt}void 0!==pos.begin&&(maskPos=inputmask.isRTL?pos.end:pos.begin);var result=!0,positionsClone=$.extend(!0,{},maskset.validPositions);if(!1===opts.keepStatic&&void 0!==maskset.excludes[maskPos]&&!0!==fromAlternate&&!0!==fromIsValid)for(var i=maskPos;i<(inputmask.isRTL?pos.begin:pos.end);i++)void 0!==maskset.excludes[i]&&(maskset.excludes[i]=void 0,delete maskset.tests[i]);if("function"==typeof opts.preValidation&&!0!==fromIsValid&&!0!==validateOnly&&(result=opts.preValidation.call(inputmask,_positioning.getBuffer.call(inputmask),maskPos,c,isSelection(pos),opts,maskset,pos,strict||fromAlternate),result=processCommandObject(result)),!0===result){if(void 0===inputmask.maxLength||maskPos<inputmask.maxLength){if(result=_isValid(maskPos,c,strict),(!strict||!0===fromIsValid)&&!1===result&&!0!==validateOnly){var currentPosValid=maskset.validPositions[maskPos];if(!currentPosValid||!0!==currentPosValid.match.static||currentPosValid.match.def!==c&&c!==opts.skipOptionalPartCharacter){if(opts.insertMode||void 0===maskset.validPositions[_positioning.seekNext.call(inputmask,maskPos)]||pos.end>maskPos){var skip=!1;if(maskset.jitOffset[maskPos]&&void 0===maskset.validPositions[_positioning.seekNext.call(inputmask,maskPos)]&&(result=isValid.call(inputmask,maskPos+maskset.jitOffset[maskPos],c,!0),!1!==result&&(!0!==fromAlternate&&(result.caret=maskPos),skip=!0)),pos.end>maskPos&&(maskset.validPositions[maskPos]=void 0),!skip&&!_positioning.isMask.call(inputmask,maskPos,opts.keepStatic&&0===maskPos))for(var nPos=maskPos+1,snPos=_positioning.seekNext.call(inputmask,maskPos,!1,0!==maskPos);nPos<=snPos;nPos++)if(result=_isValid(nPos,c,strict),!1!==result){result=trackbackPositions.call(inputmask,maskPos,void 0!==result.pos?result.pos:nPos)||result,maskPos=nPos;break}}}else result={caret:_positioning.seekNext.call(inputmask,maskPos)}}}else result=!1;!1!==result||!opts.keepStatic||!isComplete.call(inputmask,_positioning.getBuffer.call(inputmask))&&0!==maskPos||strict||!0===fromAlternate?isSelection(pos)&&maskset.tests[maskPos]&&1<maskset.tests[maskPos].length&&opts.keepStatic&&!strict&&!0!==fromAlternate&&(result=alternate.call(inputmask,!0)):result=alternate.call(inputmask,maskPos,c,strict,fromIsValid,void 0,pos),!0===result&&(result={pos:maskPos})}if("function"==typeof opts.postValidation&&!0!==fromIsValid&&!0!==validateOnly){var postResult=opts.postValidation.call(inputmask,_positioning.getBuffer.call(inputmask,!0),void 0!==pos.begin?inputmask.isRTL?pos.end:pos.begin:pos,c,result,opts,maskset,strict,fromCheckval);void 0!==postResult&&(result=!0===postResult?result:postResult)}result&&void 0===result.pos&&(result.pos=maskPos),!1===result||!0===validateOnly?(_positioning.resetMaskSet.call(inputmask,!0),maskset.validPositions=$.extend(!0,{},positionsClone)):trackbackPositions.call(inputmask,void 0,maskPos,!0);var endResult=processCommandObject(result);return endResult}function positionCanMatchDefinition(pos,testDefinition,opts){for(var inputmask=this,maskset=this.maskset,valid=!1,tests=_validationTests.getTests.call(this,pos),tndx=0;tndx<tests.length;tndx++){if(tests[tndx].match&&(!(tests[tndx].match.nativeDef!==testDefinition.match[opts.shiftPositions?"def":"nativeDef"]||opts.shiftPositions&&testDefinition.match.static)||tests[tndx].match.nativeDef===testDefinition.match.nativeDef)){valid=!0;break}if(tests[tndx].match&&tests[tndx].match.def===testDefinition.match.nativeDef){valid=void 0;break}}return!1===valid&&void 0!==maskset.jitOffset[pos]&&(valid=positionCanMatchDefinition.call(this,pos+maskset.jitOffset[pos],testDefinition,opts)),valid}function refreshFromBuffer(start,end,buffer){var inputmask=this,maskset=this.maskset,opts=this.opts,$=this.dependencyLib,el=this.el,i,p,skipOptionalPartCharacter=opts.skipOptionalPartCharacter,bffr=this.isRTL?buffer.slice().reverse():buffer;if(opts.skipOptionalPartCharacter="",!0===start)_positioning.resetMaskSet.call(this),maskset.tests={},start=0,end=buffer.length,p=_positioning.determineNewCaretPosition.call(this,{begin:0,end:0},!1).begin;else{for(i=start;i<end;i++)delete maskset.validPositions[i];p=start}var keypress=new $.Event("keypress");for(i=start;i<end;i++){keypress.which=bffr[i].toString().charCodeAt(0),this.ignorable=!1;var valResult=_eventhandlers.EventHandlers.keypressEvent.call(el,keypress,!0,!1,!1,p);!1!==valResult&&(p=valResult.forwardPosition)}opts.skipOptionalPartCharacter=skipOptionalPartCharacter}function trackbackPositions(originalPos,newPos,fillOnly){var inputmask=this,maskset=this.maskset,$=this.dependencyLib;if(void 0===originalPos)for(originalPos=newPos-1;0<originalPos&&!maskset.validPositions[originalPos];originalPos--);for(var ps=originalPos;ps<newPos;ps++)if(void 0===maskset.validPositions[ps]&&!_positioning.isMask.call(this,ps,!0)){var vp=0==ps?_validationTests.getTest.call(this,ps):maskset.validPositions[ps-1];if(vp){var tests=_validationTests.getTests.call(this,ps).slice();""===tests[tests.length-1].match.def&&tests.pop();var bestMatch=_validationTests.determineTestTemplate.call(this,ps,tests),np;if(bestMatch&&(!0!==bestMatch.match.jit||"master"===bestMatch.match.newBlockMarker&&(np=maskset.validPositions[ps+1])&&!0===np.match.optionalQuantifier)&&(bestMatch=$.extend({},bestMatch,{input:_validationTests.getPlaceholder.call(this,ps,bestMatch.match,!0)||bestMatch.match.def}),bestMatch.generatedInput=!0,revalidateMask.call(this,ps,bestMatch,!0),!0!==fillOnly)){var cvpInput=maskset.validPositions[newPos].input;return maskset.validPositions[newPos]=void 0,isValid.call(this,newPos,cvpInput,!0,!0)}}}}function revalidateMask(pos,validTest,fromIsValid,validatedPos){var inputmask=this,maskset=this.maskset,opts=this.opts,$=this.dependencyLib;function IsEnclosedStatic(pos,valids,selection){var posMatch=valids[pos];if(void 0===posMatch||!0!==posMatch.match.static||!0===posMatch.match.optionality||void 0!==valids[0]&&void 0!==valids[0].alternation)return!1;var prevMatch=selection.begin<=pos-1?valids[pos-1]&&!0===valids[pos-1].match.static&&valids[pos-1]:valids[pos-1],nextMatch=selection.end>pos+1?valids[pos+1]&&!0===valids[pos+1].match.static&&valids[pos+1]:valids[pos+1];return prevMatch&&nextMatch}var offset=0,begin=void 0!==pos.begin?pos.begin:pos,end=void 0!==pos.end?pos.end:pos;if(pos.begin>pos.end&&(begin=pos.end,end=pos.begin),validatedPos=void 0!==validatedPos?validatedPos:begin,begin!==end||opts.insertMode&&void 0!==maskset.validPositions[validatedPos]&&void 0===fromIsValid||void 0===validTest){var positionsClone=$.extend(!0,{},maskset.validPositions),lvp=_positioning.getLastValidPosition.call(this,void 0,!0),i;for(maskset.p=begin,i=lvp;begin<=i;i--)delete maskset.validPositions[i],void 0===validTest&&delete maskset.tests[i+1];var valid=!0,j=validatedPos,posMatch=j,t,canMatch;for(validTest&&(maskset.validPositions[validatedPos]=$.extend(!0,{},validTest),posMatch++,j++),i=validTest?end:end-1;i<=lvp;i++){if(void 0!==(t=positionsClone[i])&&!0!==t.generatedInput&&(end<=i||begin<=i&&IsEnclosedStatic(i,positionsClone,{begin:begin,end:end}))){for(;""!==_validationTests.getTest.call(this,posMatch).match.def;){if(!1!==(canMatch=positionCanMatchDefinition.call(this,posMatch,t,opts))||"+"===t.match.def){"+"===t.match.def&&_positioning.getBuffer.call(this,!0);var result=isValid.call(this,posMatch,t.input,"+"!==t.match.def,"+"!==t.match.def);if(valid=!1!==result,j=(result.pos||posMatch)+1,!valid&&canMatch)break}else valid=!1;if(valid){void 0===validTest&&t.match.static&&i===pos.begin&&offset++;break}if(!valid&&posMatch>maskset.maskLength)break;posMatch++}""==_validationTests.getTest.call(this,posMatch).match.def&&(valid=!1),posMatch=j}if(!valid)break}if(!valid)return maskset.validPositions=$.extend(!0,{},positionsClone),_positioning.resetMaskSet.call(this,!0),!1}else validTest&&_validationTests.getTest.call(this,validatedPos).match.cd===validTest.match.cd&&(maskset.validPositions[validatedPos]=$.extend(!0,{},validTest));return _positioning.resetMaskSet.call(this,!0),offset}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.applyInputValue=applyInputValue,exports.clearOptionalTail=clearOptionalTail,exports.checkVal=checkVal,exports.HandleNativePlaceholder=HandleNativePlaceholder,exports.unmaskedvalue=unmaskedvalue,exports.writeBuffer=writeBuffer;var _keycode=_interopRequireDefault(__webpack_require__(0)),_validationTests=__webpack_require__(3),_positioning=__webpack_require__(2),_validation=__webpack_require__(4),_environment=__webpack_require__(7),_eventhandlers=__webpack_require__(6);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function applyInputValue(input,value){var inputmask=input?input.inputmask:this,opts=inputmask.opts;input.inputmask.refreshValue=!1,"function"==typeof opts.onBeforeMask&&(value=opts.onBeforeMask.call(inputmask,value,opts)||value),value=value.toString().split(""),checkVal(input,!0,!1,value),inputmask.undoValue=_positioning.getBuffer.call(inputmask).join(""),(opts.clearMaskOnLostFocus||opts.clearIncomplete)&&input.inputmask._valueGet()===_positioning.getBufferTemplate.call(inputmask).join("")&&-1===_positioning.getLastValidPosition.call(inputmask)&&input.inputmask._valueSet("")}function clearOptionalTail(buffer){var inputmask=this;buffer.length=0;for(var template=_validationTests.getMaskTemplate.call(this,!0,0,!0,void 0,!0),lmnt;void 0!==(lmnt=template.shift());)buffer.push(lmnt);return buffer}function checkVal(input,writeOut,strict,nptvl,initiatingEvent){var inputmask=input?input.inputmask:this,maskset=inputmask.maskset,opts=inputmask.opts,$=inputmask.dependencyLib,inputValue=nptvl.slice(),charCodes="",initialNdx=-1,result=void 0,skipOptionalPartCharacter=opts.skipOptionalPartCharacter;function isTemplateMatch(ndx,charCodes){for(var targetTemplate=_validationTests.getMaskTemplate.call(inputmask,!0,0).slice(ndx,_positioning.seekNext.call(inputmask,ndx,!1,!1)).join("").replace(/'/g,""),charCodeNdx=targetTemplate.indexOf(charCodes);0<charCodeNdx&&" "===targetTemplate[charCodeNdx-1];)charCodeNdx--;var match=0===charCodeNdx&&!_positioning.isMask.call(inputmask,ndx)&&(_validationTests.getTest.call(inputmask,ndx).match.nativeDef===charCodes.charAt(0)||!0===_validationTests.getTest.call(inputmask,ndx).match.static&&_validationTests.getTest.call(inputmask,ndx).match.nativeDef==="'"+charCodes.charAt(0)||" "===_validationTests.getTest.call(inputmask,ndx).match.nativeDef&&(_validationTests.getTest.call(inputmask,ndx+1).match.nativeDef===charCodes.charAt(0)||!0===_validationTests.getTest.call(inputmask,ndx+1).match.static&&_validationTests.getTest.call(inputmask,ndx+1).match.nativeDef==="'"+charCodes.charAt(0)));if(!match&&0<charCodeNdx&&!_positioning.isMask.call(inputmask,ndx,!1,!0)){var nextPos=_positioning.seekNext.call(inputmask,ndx);inputmask.caretPos.begin<nextPos&&(inputmask.caretPos={begin:nextPos})}return match}opts.skipOptionalPartCharacter="",_positioning.resetMaskSet.call(inputmask),maskset.tests={},initialNdx=opts.radixPoint?_positioning.determineNewCaretPosition.call(inputmask,{begin:0,end:0}).begin:0,maskset.p=initialNdx,inputmask.caretPos={begin:initialNdx};var staticMatches=[],prevCaretPos=inputmask.caretPos;if(inputValue.forEach(function(charCode,ndx){if(void 0!==charCode)if(void 0===maskset.validPositions[ndx]&&inputValue[ndx]===_validationTests.getPlaceholder.call(inputmask,ndx)&&_positioning.isMask.call(inputmask,ndx,!0)&&!1===_validation.isValid.call(inputmask,ndx,inputValue[ndx],!0,void 0,void 0,!0))maskset.p++;else{var keypress=new $.Event("_checkval");keypress.which=charCode.toString().charCodeAt(0),charCodes+=charCode;var lvp=_positioning.getLastValidPosition.call(inputmask,void 0,!0);isTemplateMatch(initialNdx,charCodes)?result=_eventhandlers.EventHandlers.keypressEvent.call(inputmask,keypress,!0,!1,strict,lvp+1):(result=_eventhandlers.EventHandlers.keypressEvent.call(inputmask,keypress,!0,!1,strict,inputmask.caretPos.begin),result&&(initialNdx=inputmask.caretPos.begin+1,charCodes="")),result?(void 0!==result.pos&&maskset.validPositions[result.pos]&&!0===maskset.validPositions[result.pos].match.static&&void 0===maskset.validPositions[result.pos].alternation&&(staticMatches.push(result.pos),inputmask.isRTL||(result.forwardPosition=result.pos+1)),writeBuffer.call(inputmask,void 0,_positioning.getBuffer.call(inputmask),result.forwardPosition,keypress,!1),inputmask.caretPos={begin:result.forwardPosition,end:result.forwardPosition},prevCaretPos=inputmask.caretPos):inputmask.caretPos=prevCaretPos}}),0<staticMatches.length){var sndx,validPos,nextValid=_positioning.seekNext.call(inputmask,-1,void 0,!1);if(!_validation.isComplete.call(inputmask,_positioning.getBuffer.call(inputmask))&&staticMatches.length<=nextValid||_validation.isComplete.call(inputmask,_positioning.getBuffer.call(inputmask))&&0<staticMatches.length&&staticMatches.length!==nextValid&&0===staticMatches[0])for(var nextSndx=nextValid;void 0!==(sndx=staticMatches.shift());){var keypress=new $.Event("_checkval");if(validPos=maskset.validPositions[sndx],validPos.generatedInput=!0,keypress.which=validPos.input.charCodeAt(0),result=_eventhandlers.EventHandlers.keypressEvent.call(inputmask,keypress,!0,!1,strict,nextSndx),result&&void 0!==result.pos&&result.pos!==sndx&&maskset.validPositions[result.pos]&&!0===maskset.validPositions[result.pos].match.static)staticMatches.push(result.pos);else if(!result)break;nextSndx++}}writeOut&&writeBuffer.call(inputmask,input,_positioning.getBuffer.call(inputmask),result?result.forwardPosition:inputmask.caretPos.begin,initiatingEvent||new $.Event("checkval"),initiatingEvent&&"input"===initiatingEvent.type&&inputmask.undoValue!==_positioning.getBuffer.call(inputmask).join("")),opts.skipOptionalPartCharacter=skipOptionalPartCharacter}function HandleNativePlaceholder(npt,value){var inputmask=npt?npt.inputmask:this;if(_environment.ie){if(npt.inputmask._valueGet()!==value&&(npt.placeholder!==value||""===npt.placeholder)){var buffer=_positioning.getBuffer.call(inputmask).slice(),nptValue=npt.inputmask._valueGet();if(nptValue!==value){var lvp=_positioning.getLastValidPosition.call(inputmask);-1===lvp&&nptValue===_positioning.getBufferTemplate.call(inputmask).join("")?buffer=[]:-1!==lvp&&clearOptionalTail.call(inputmask,buffer),writeBuffer(npt,buffer)}}}else npt.placeholder!==value&&(npt.placeholder=value,""===npt.placeholder&&npt.removeAttribute("placeholder"))}function unmaskedvalue(input){var inputmask=input?input.inputmask:this,opts=inputmask.opts,maskset=inputmask.maskset;if(input){if(void 0===input.inputmask)return input.value;input.inputmask&&input.inputmask.refreshValue&&applyInputValue(input,input.inputmask._valueGet(!0))}var umValue=[],vps=maskset.validPositions;for(var pndx in vps)vps[pndx]&&vps[pndx].match&&(1!=vps[pndx].match.static||Array.isArray(maskset.metadata)&&!0!==vps[pndx].generatedInput)&&umValue.push(vps[pndx].input);var unmaskedValue=0===umValue.length?"":(inputmask.isRTL?umValue.reverse():umValue).join("");if("function"==typeof opts.onUnMask){var bufferValue=(inputmask.isRTL?_positioning.getBuffer.call(inputmask).slice().reverse():_positioning.getBuffer.call(inputmask)).join("");unmaskedValue=opts.onUnMask.call(inputmask,bufferValue,unmaskedValue,opts)}return unmaskedValue}function writeBuffer(input,buffer,caretPos,event,triggerEvents){var inputmask=input?input.inputmask:this,opts=inputmask.opts,$=inputmask.dependencyLib;if(event&&"function"==typeof opts.onBeforeWrite){var result=opts.onBeforeWrite.call(inputmask,event,buffer,caretPos,opts);if(result){if(result.refreshFromBuffer){var refresh=result.refreshFromBuffer;_validation.refreshFromBuffer.call(inputmask,!0===refresh?refresh:refresh.start,refresh.end,result.buffer||buffer),buffer=_positioning.getBuffer.call(inputmask,!0)}void 0!==caretPos&&(caretPos=void 0!==result.caret?result.caret:caretPos)}}if(void 0!==input&&(input.inputmask._valueSet(buffer.join("")),void 0===caretPos||void 0!==event&&"blur"===event.type||_positioning.caret.call(inputmask,input,caretPos,void 0,void 0,void 0!==event&&"keydown"===event.type&&(event.keyCode===_keycode.default.DELETE||event.keyCode===_keycode.default.BACKSPACE)),!0===triggerEvents)){var $input=$(input),nptVal=input.inputmask._valueGet();input.inputmask.skipInputEvent=!0,$input.trigger("input"),setTimeout(function(){nptVal===_positioning.getBufferTemplate.call(inputmask).join("")?$input.trigger("cleared"):!0===_validation.isComplete.call(inputmask,buffer)&&$input.trigger("complete")},0)}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.EventHandlers=void 0;var _positioning=__webpack_require__(2),_keycode=_interopRequireDefault(__webpack_require__(0)),_environment=__webpack_require__(7),_validation=__webpack_require__(4),_inputHandling=__webpack_require__(5),_validationTests=__webpack_require__(3);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var EventHandlers={keydownEvent:function keydownEvent(e){var inputmask=this.inputmask,opts=inputmask.opts,$=inputmask.dependencyLib,maskset=inputmask.maskset,input=this,$input=$(input),k=e.keyCode,pos=_positioning.caret.call(inputmask,input),kdResult=opts.onKeyDown.call(this,e,_positioning.getBuffer.call(inputmask),pos,opts);if(void 0!==kdResult)return kdResult;if(k===_keycode.default.BACKSPACE||k===_keycode.default.DELETE||_environment.iphone&&k===_keycode.default.BACKSPACE_SAFARI||e.ctrlKey&&k===_keycode.default.X&&!("oncut"in input))e.preventDefault(),_validation.handleRemove.call(inputmask,input,k,pos),(0,_inputHandling.writeBuffer)(input,_positioning.getBuffer.call(inputmask,!0),maskset.p,e,input.inputmask._valueGet()!==_positioning.getBuffer.call(inputmask).join(""));else if(k===_keycode.default.END||k===_keycode.default.PAGE_DOWN){e.preventDefault();var caretPos=_positioning.seekNext.call(inputmask,_positioning.getLastValidPosition.call(inputmask));_positioning.caret.call(inputmask,input,e.shiftKey?pos.begin:caretPos,caretPos,!0)}else k===_keycode.default.HOME&&!e.shiftKey||k===_keycode.default.PAGE_UP?(e.preventDefault(),_positioning.caret.call(inputmask,input,0,e.shiftKey?pos.begin:0,!0)):(opts.undoOnEscape&&k===_keycode.default.ESCAPE||90===k&&e.ctrlKey)&&!0!==e.altKey?((0,_inputHandling.checkVal)(input,!0,!1,inputmask.undoValue.split("")),$input.trigger("click")):!0===opts.tabThrough&&k===_keycode.default.TAB?!0===e.shiftKey?(pos.end=_positioning.seekPrevious.call(inputmask,pos.end,!0),!0===_validationTests.getTest.call(inputmask,pos.end-1).match.static&&pos.end--,pos.begin=_positioning.seekPrevious.call(inputmask,pos.end,!0),0<=pos.begin&&0<pos.end&&(e.preventDefault(),_positioning.caret.call(inputmask,input,pos.begin,pos.end))):(pos.begin=_positioning.seekNext.call(inputmask,pos.begin,!0),pos.end=_positioning.seekNext.call(inputmask,pos.begin,!0),pos.end<maskset.maskLength&&pos.end--,pos.begin<=maskset.maskLength&&(e.preventDefault(),_positioning.caret.call(inputmask,input,pos.begin,pos.end))):e.shiftKey||opts.insertModeVisual&&!1===opts.insertMode&&(k===_keycode.default.RIGHT?setTimeout(function(){var caretPos=_positioning.caret.call(inputmask,input);_positioning.caret.call(inputmask,input,caretPos.begin)},0):k===_keycode.default.LEFT&&setTimeout(function(){var caretPos_begin=_positioning.translatePosition.call(inputmask,input.inputmask.caretPos.begin),caretPos_end=_positioning.translatePosition.call(inputmask,input.inputmask.caretPos.end);inputmask.isRTL?_positioning.caret.call(inputmask,input,caretPos_begin+(caretPos_begin===maskset.maskLength?0:1)):_positioning.caret.call(inputmask,input,caretPos_begin-(0===caretPos_begin?0:1))},0));inputmask.ignorable=opts.ignorables.includes(k)},keypressEvent:function keypressEvent(e,checkval,writeOut,strict,ndx){var inputmask=this.inputmask||this,opts=inputmask.opts,$=inputmask.dependencyLib,maskset=inputmask.maskset,input=inputmask.el,$input=$(input),k=e.which||e.charCode||e.keyCode;if(!(!0===checkval||e.ctrlKey&&e.altKey)&&(e.ctrlKey||e.metaKey||inputmask.ignorable))return k===_keycode.default.ENTER&&inputmask.undoValue!==_positioning.getBuffer.call(inputmask).join("")&&(inputmask.undoValue=_positioning.getBuffer.call(inputmask).join(""),setTimeout(function(){$input.trigger("change")},0)),inputmask.skipInputEvent=!0,!0;if(k){44!==k&&46!==k||3!==e.location||""===opts.radixPoint||(k=opts.radixPoint.charCodeAt(0));var pos=checkval?{begin:ndx,end:ndx}:_positioning.caret.call(inputmask,input),forwardPosition,c=String.fromCharCode(k);maskset.writeOutBuffer=!0;var valResult=_validation.isValid.call(inputmask,pos,c,strict,void 0,void 0,void 0,checkval);if(!1!==valResult&&(_positioning.resetMaskSet.call(inputmask,!0),forwardPosition=void 0!==valResult.caret?valResult.caret:_positioning.seekNext.call(inputmask,valResult.pos.begin?valResult.pos.begin:valResult.pos),maskset.p=forwardPosition),forwardPosition=opts.numericInput&&void 0===valResult.caret?_positioning.seekPrevious.call(inputmask,forwardPosition):forwardPosition,!1!==writeOut&&(setTimeout(function(){opts.onKeyValidation.call(input,k,valResult)},0),maskset.writeOutBuffer&&!1!==valResult)){var buffer=_positioning.getBuffer.call(inputmask);(0,_inputHandling.writeBuffer)(input,buffer,forwardPosition,e,!0!==checkval)}if(e.preventDefault(),checkval)return!1!==valResult&&(valResult.forwardPosition=forwardPosition),valResult}},keyupEvent:function keyupEvent(e){var inputmask=this.inputmask;!inputmask.isComposing||e.keyCode!==_keycode.default.KEY_229&&e.keyCode!==_keycode.default.ENTER||inputmask.$el.trigger("input")},pasteEvent:function pasteEvent(e){var inputmask=this.inputmask,opts=inputmask.opts,input=this,inputValue=inputmask._valueGet(!0),caretPos=_positioning.caret.call(inputmask,this),tempValue;inputmask.isRTL&&(tempValue=caretPos.end,caretPos.end=caretPos.begin,caretPos.begin=tempValue);var valueBeforeCaret=inputValue.substr(0,caretPos.begin),valueAfterCaret=inputValue.substr(caretPos.end,inputValue.length);if(valueBeforeCaret==(inputmask.isRTL?_positioning.getBufferTemplate.call(inputmask).slice().reverse():_positioning.getBufferTemplate.call(inputmask)).slice(0,caretPos.begin).join("")&&(valueBeforeCaret=""),valueAfterCaret==(inputmask.isRTL?_positioning.getBufferTemplate.call(inputmask).slice().reverse():_positioning.getBufferTemplate.call(inputmask)).slice(caretPos.end).join("")&&(valueAfterCaret=""),window.clipboardData&&window.clipboardData.getData)inputValue=valueBeforeCaret+window.clipboardData.getData("Text")+valueAfterCaret;else{if(!e.clipboardData||!e.clipboardData.getData)return!0;inputValue=valueBeforeCaret+e.clipboardData.getData("text/plain")+valueAfterCaret}var pasteValue=inputValue;if("function"==typeof opts.onBeforePaste){if(pasteValue=opts.onBeforePaste.call(inputmask,inputValue,opts),!1===pasteValue)return e.preventDefault();pasteValue=pasteValue||inputValue}return(0,_inputHandling.checkVal)(this,!0,!1,pasteValue.toString().split(""),e),e.preventDefault()},inputFallBackEvent:function inputFallBackEvent(e){var inputmask=this.inputmask,opts=inputmask.opts,$=inputmask.dependencyLib;function ieMobileHandler(input,inputValue,caretPos){if(_environment.iemobile){var inputChar=inputValue.replace(_positioning.getBuffer.call(inputmask).join(""),"");if(1===inputChar.length){var iv=inputValue.split("");iv.splice(caretPos.begin,0,inputChar),inputValue=iv.join("")}}return inputValue}function analyseChanges(inputValue,buffer,caretPos){for(var frontPart=inputValue.substr(0,caretPos.begin).split(""),backPart=inputValue.substr(caretPos.begin).split(""),frontBufferPart=buffer.substr(0,caretPos.begin).split(""),backBufferPart=buffer.substr(caretPos.begin).split(""),fpl=frontPart.length>=frontBufferPart.length?frontPart.length:frontBufferPart.length,bpl=backPart.length>=backBufferPart.length?backPart.length:backBufferPart.length,bl,i,action="",data=[],marker="~",placeholder;frontPart.length<fpl;)frontPart.push("~");for(;frontBufferPart.length<fpl;)frontBufferPart.push("~");for(;backPart.length<bpl;)backPart.unshift("~");for(;backBufferPart.length<bpl;)backBufferPart.unshift("~");var newBuffer=frontPart.concat(backPart),oldBuffer=frontBufferPart.concat(backBufferPart);for(i=0,bl=newBuffer.length;i<bl;i++)switch(placeholder=_validationTests.getPlaceholder.call(inputmask,_positioning.translatePosition.call(inputmask,i)),action){case"insertText":oldBuffer[i-1]===newBuffer[i]&&caretPos.begin==newBuffer.length-1&&data.push(newBuffer[i]),i=bl;break;case"insertReplacementText":"~"===newBuffer[i]?caretPos.end++:i=bl;break;case"deleteContentBackward":"~"===newBuffer[i]?caretPos.end++:i=bl;break;default:newBuffer[i]!==oldBuffer[i]&&("~"!==newBuffer[i+1]&&newBuffer[i+1]!==placeholder&&void 0!==newBuffer[i+1]||(oldBuffer[i]!==placeholder||"~"!==oldBuffer[i+1])&&"~"!==oldBuffer[i]?"~"===oldBuffer[i+1]&&oldBuffer[i]===newBuffer[i+1]?(action="insertText",data.push(newBuffer[i]),caretPos.begin--,caretPos.end--):newBuffer[i]!==placeholder&&"~"!==newBuffer[i]&&("~"===newBuffer[i+1]||oldBuffer[i]!==newBuffer[i]&&oldBuffer[i+1]===newBuffer[i+1])?(action="insertReplacementText",data.push(newBuffer[i]),caretPos.begin--):"~"===newBuffer[i]?(action="deleteContentBackward",!_positioning.isMask.call(inputmask,_positioning.translatePosition.call(inputmask,i),!0)&&oldBuffer[i]!==opts.radixPoint||caretPos.end++):i=bl:(action="insertText",data.push(newBuffer[i]),caretPos.begin--,caretPos.end--));break}return{action:action,data:data,caret:caretPos}}var input=this,inputValue=input.inputmask._valueGet(!0),buffer=(inputmask.isRTL?_positioning.getBuffer.call(inputmask).slice().reverse():_positioning.getBuffer.call(inputmask)).join(""),caretPos=_positioning.caret.call(inputmask,input,void 0,void 0,!0);if(buffer!==inputValue){inputValue=ieMobileHandler(input,inputValue,caretPos);var changes=analyseChanges(inputValue,buffer,caretPos);switch((input.inputmask.shadowRoot||document).activeElement!==input&&input.focus(),(0,_inputHandling.writeBuffer)(input,_positioning.getBuffer.call(inputmask)),_positioning.caret.call(inputmask,input,caretPos.begin,caretPos.end,!0),changes.action){case"insertText":case"insertReplacementText":changes.data.forEach(function(entry,ndx){var keypress=new $.Event("keypress");keypress.which=entry.charCodeAt(0),inputmask.ignorable=!1,EventHandlers.keypressEvent.call(input,keypress)}),setTimeout(function(){inputmask.$el.trigger("keyup")},0);break;case"deleteContentBackward":var keydown=new $.Event("keydown");keydown.keyCode=_keycode.default.BACKSPACE,EventHandlers.keydownEvent.call(input,keydown);break;default:(0,_inputHandling.applyInputValue)(input,inputValue);break}e.preventDefault()}},compositionendEvent:function compositionendEvent(e){var inputmask=this.inputmask;inputmask.isComposing=!1,inputmask.$el.trigger("input")},setValueEvent:function setValueEvent(e,argument_1,argument_2){var inputmask=this.inputmask,input=this,value=e&&e.detail?e.detail[0]:argument_1;void 0===value&&(value=this.inputmask._valueGet(!0)),(0,_inputHandling.applyInputValue)(this,value),(e.detail&&void 0!==e.detail[1]||void 0!==argument_2)&&_positioning.caret.call(inputmask,this,e.detail?e.detail[1]:argument_2)},focusEvent:function focusEvent(e){var inputmask=this.inputmask,opts=inputmask.opts,input=this,nptValue=this.inputmask._valueGet();opts.showMaskOnFocus&&nptValue!==_positioning.getBuffer.call(inputmask).join("")&&(0,_inputHandling.writeBuffer)(this,_positioning.getBuffer.call(inputmask),_positioning.seekNext.call(inputmask,_positioning.getLastValidPosition.call(inputmask))),!0!==opts.positionCaretOnTab||!1!==inputmask.mouseEnter||_validation.isComplete.call(inputmask,_positioning.getBuffer.call(inputmask))&&-1!==_positioning.getLastValidPosition.call(inputmask)||EventHandlers.clickEvent.apply(this,[e,!0]),inputmask.undoValue=_positioning.getBuffer.call(inputmask).join("")},invalidEvent:function invalidEvent(e){this.inputmask.validationEvent=!0},mouseleaveEvent:function mouseleaveEvent(){var inputmask=this.inputmask,opts=inputmask.opts,input=this;inputmask.mouseEnter=!1,opts.clearMaskOnLostFocus&&(this.inputmask.shadowRoot||document).activeElement!==this&&(0,_inputHandling.HandleNativePlaceholder)(this,inputmask.originalPlaceholder)},clickEvent:function clickEvent(e,tabbed){var inputmask=this.inputmask,input=this;if((this.inputmask.shadowRoot||document).activeElement===this){var newCaretPosition=_positioning.determineNewCaretPosition.call(inputmask,_positioning.caret.call(inputmask,this),tabbed);void 0!==newCaretPosition&&_positioning.caret.call(inputmask,this,newCaretPosition)}},cutEvent:function cutEvent(e){var inputmask=this.inputmask,maskset=inputmask.maskset,input=this,pos=_positioning.caret.call(inputmask,this),clipboardData=window.clipboardData||e.clipboardData,clipData=inputmask.isRTL?_positioning.getBuffer.call(inputmask).slice(pos.end,pos.begin):_positioning.getBuffer.call(inputmask).slice(pos.begin,pos.end);clipboardData.setData("text",inputmask.isRTL?clipData.reverse().join(""):clipData.join("")),document.execCommand&&document.execCommand("copy"),_validation.handleRemove.call(inputmask,this,_keycode.default.DELETE,pos),(0,_inputHandling.writeBuffer)(this,_positioning.getBuffer.call(inputmask),maskset.p,e,inputmask.undoValue!==_positioning.getBuffer.call(inputmask).join(""))},blurEvent:function blurEvent(e){var inputmask=this.inputmask,opts=inputmask.opts,$=inputmask.dependencyLib,$input=$(this),input=this;if(this.inputmask){(0,_inputHandling.HandleNativePlaceholder)(this,inputmask.originalPlaceholder);var nptValue=this.inputmask._valueGet(),buffer=_positioning.getBuffer.call(inputmask).slice();""!==nptValue&&(opts.clearMaskOnLostFocus&&(-1===_positioning.getLastValidPosition.call(inputmask)&&nptValue===_positioning.getBufferTemplate.call(inputmask).join("")?buffer=[]:_inputHandling.clearOptionalTail.call(inputmask,buffer)),!1===_validation.isComplete.call(inputmask,buffer)&&(setTimeout(function(){$input.trigger("incomplete")},0),opts.clearIncomplete&&(_positioning.resetMaskSet.call(inputmask),buffer=opts.clearMaskOnLostFocus?[]:_positioning.getBufferTemplate.call(inputmask).slice())),(0,_inputHandling.writeBuffer)(this,buffer,void 0,e)),inputmask.undoValue!==_positioning.getBuffer.call(inputmask).join("")&&(inputmask.undoValue=_positioning.getBuffer.call(inputmask).join(""),$input.trigger("change"))}},mouseenterEvent:function mouseenterEvent(){var inputmask=this.inputmask,opts=inputmask.opts,input=this;inputmask.mouseEnter=!0,(this.inputmask.shadowRoot||document).activeElement!==this&&(null==inputmask.originalPlaceholder&&this.placeholder!==inputmask.originalPlaceholder&&(inputmask.originalPlaceholder=this.placeholder),opts.showMaskOnHover&&(0,_inputHandling.HandleNativePlaceholder)(this,(inputmask.isRTL?_positioning.getBufferTemplate.call(inputmask).slice().reverse():_positioning.getBufferTemplate.call(inputmask)).join("")))},submitEvent:function submitEvent(){var inputmask=this.inputmask,opts=inputmask.opts;inputmask.undoValue!==_positioning.getBuffer.call(inputmask).join("")&&inputmask.$el.trigger("change"),opts.clearMaskOnLostFocus&&-1===_positioning.getLastValidPosition.call(inputmask)&&inputmask._valueGet&&inputmask._valueGet()===_positioning.getBufferTemplate.call(inputmask).join("")&&inputmask._valueSet(""),opts.clearIncomplete&&!1===_validation.isComplete.call(inputmask,_positioning.getBuffer.call(inputmask))&&inputmask._valueSet(""),opts.removeMaskOnSubmit&&(inputmask._valueSet(inputmask.unmaskedvalue(),!0),setTimeout(function(){(0,_inputHandling.writeBuffer)(inputmask.el,_positioning.getBuffer.call(inputmask))},0))},resetEvent:function resetEvent(){var inputmask=this.inputmask;inputmask.refreshValue=!0,setTimeout(function(){(0,_inputHandling.applyInputValue)(inputmask.el,inputmask._valueGet(!0))},0)}};exports.EventHandlers=EventHandlers},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.iphone=exports.iemobile=exports.mobile=exports.ie=exports.ua=void 0;var ua=window.navigator&&window.navigator.userAgent||"",ie=0<ua.indexOf("MSIE ")||0<ua.indexOf("Trident/"),mobile="ontouchstart"in window,iemobile=/iemobile/i.test(ua),iphone=/iphone/i.test(ua)&&!iemobile;exports.iphone=iphone,exports.iemobile=iemobile,exports.mobile=mobile,exports.ie=ie,exports.ua=ua},function(module,exports){module.exports=__WEBPACK_EXTERNAL_MODULE__8__},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mask=mask;var _keycode=_interopRequireDefault(__webpack_require__(0)),_positioning=__webpack_require__(2),_inputHandling=__webpack_require__(5),_eventruler=__webpack_require__(10),_environment=__webpack_require__(7),_validation=__webpack_require__(4),_eventhandlers=__webpack_require__(6);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function mask(){var inputmask=this,opts=this.opts,el=this.el,$=this.dependencyLib;function isElementTypeSupported(input,opts){function patchValueProperty(npt){var valueGet,valueSet;function patchValhook(type){if($.valHooks&&(void 0===$.valHooks[type]||!0!==$.valHooks[type].inputmaskpatch)){var valhookGet=$.valHooks[type]&&$.valHooks[type].get?$.valHooks[type].get:function(elem){return elem.value},valhookSet=$.valHooks[type]&&$.valHooks[type].set?$.valHooks[type].set:function(elem,value){return elem.value=value,elem};$.valHooks[type]={get:function get(elem){if(elem.inputmask){if(elem.inputmask.opts.autoUnmask)return elem.inputmask.unmaskedvalue();var result=valhookGet(elem);return-1!==_positioning.getLastValidPosition.call(inputmask,void 0,void 0,elem.inputmask.maskset.validPositions)||!0!==opts.nullable?result:""}return valhookGet(elem)},set:function set(elem,value){var result=valhookSet(elem,value);return elem.inputmask&&(0,_inputHandling.applyInputValue)(elem,value),result},inputmaskpatch:!0}}}function getter(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():-1!==_positioning.getLastValidPosition.call(inputmask)||!0!==opts.nullable?(this.inputmask.shadowRoot||document.activeElement)===this&&opts.clearMaskOnLostFocus?(inputmask.isRTL?_inputHandling.clearOptionalTail.call(inputmask,_positioning.getBuffer.call(inputmask).slice()).reverse():_inputHandling.clearOptionalTail.call(inputmask,_positioning.getBuffer.call(inputmask).slice())).join(""):valueGet.call(this):"":valueGet.call(this)}function setter(value){valueSet.call(this,value),this.inputmask&&(0,_inputHandling.applyInputValue)(this,value)}function installNativeValueSetFallback(npt){_eventruler.EventRuler.on(npt,"mouseenter",function(){var input=this,value=this.inputmask._valueGet(!0);value!==(inputmask.isRTL?_positioning.getBuffer.call(inputmask).reverse():_positioning.getBuffer.call(inputmask)).join("")&&(0,_inputHandling.applyInputValue)(this,value)})}if(!npt.inputmask.__valueGet){if(!0!==opts.noValuePatching){if(Object.getOwnPropertyDescriptor){var valueProperty=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt),"value"):void 0;valueProperty&&valueProperty.get&&valueProperty.set?(valueGet=valueProperty.get,valueSet=valueProperty.set,Object.defineProperty(npt,"value",{get:getter,set:setter,configurable:!0})):"input"!==npt.tagName.toLowerCase()&&(valueGet=function valueGet(){return this.textContent},valueSet=function valueSet(value){this.textContent=value},Object.defineProperty(npt,"value",{get:getter,set:setter,configurable:!0}))}else document.__lookupGetter__&&npt.__lookupGetter__("value")&&(valueGet=npt.__lookupGetter__("value"),valueSet=npt.__lookupSetter__("value"),npt.__defineGetter__("value",getter),npt.__defineSetter__("value",setter));npt.inputmask.__valueGet=valueGet,npt.inputmask.__valueSet=valueSet}npt.inputmask._valueGet=function(overruleRTL){return inputmask.isRTL&&!0!==overruleRTL?valueGet.call(this.el).split("").reverse().join(""):valueGet.call(this.el)},npt.inputmask._valueSet=function(value,overruleRTL){valueSet.call(this.el,null==value?"":!0!==overruleRTL&&inputmask.isRTL?value.split("").reverse().join(""):value)},void 0===valueGet&&(valueGet=function valueGet(){return this.value},valueSet=function valueSet(value){this.value=value},patchValhook(npt.type),installNativeValueSetFallback(npt))}}"textarea"!==input.tagName.toLowerCase()&&opts.ignorables.push(_keycode.default.ENTER);var elementType=input.getAttribute("type"),isSupported="input"===input.tagName.toLowerCase()&&opts.supportsInputType.includes(elementType)||input.isContentEditable||"textarea"===input.tagName.toLowerCase();if(!isSupported)if("input"===input.tagName.toLowerCase()){var el=document.createElement("input");el.setAttribute("type",elementType),isSupported="text"===el.type,el=null}else isSupported="partial";return!1!==isSupported?patchValueProperty(input):input.inputmask=void 0,isSupported}_eventruler.EventRuler.off(el);var isSupported=isElementTypeSupported(el,opts);if(!1!==isSupported){inputmask.originalPlaceholder=el.placeholder,inputmask.maxLength=void 0!==el?el.maxLength:void 0,-1===inputmask.maxLength&&(inputmask.maxLength=void 0),"inputMode"in el&&null===el.getAttribute("inputmode")&&(el.inputMode=opts.inputmode,el.setAttribute("inputmode",opts.inputmode)),!0===isSupported&&(opts.showMaskOnFocus=opts.showMaskOnFocus&&-1===["cc-number","cc-exp"].indexOf(el.autocomplete),_environment.iphone&&(opts.insertModeVisual=!1),_eventruler.EventRuler.on(el,"submit",_eventhandlers.EventHandlers.submitEvent),_eventruler.EventRuler.on(el,"reset",_eventhandlers.EventHandlers.resetEvent),_eventruler.EventRuler.on(el,"blur",_eventhandlers.EventHandlers.blurEvent),_eventruler.EventRuler.on(el,"focus",_eventhandlers.EventHandlers.focusEvent),_eventruler.EventRuler.on(el,"invalid",_eventhandlers.EventHandlers.invalidEvent),_eventruler.EventRuler.on(el,"click",_eventhandlers.EventHandlers.clickEvent),_eventruler.EventRuler.on(el,"mouseleave",_eventhandlers.EventHandlers.mouseleaveEvent),_eventruler.EventRuler.on(el,"mouseenter",_eventhandlers.EventHandlers.mouseenterEvent),_eventruler.EventRuler.on(el,"paste",_eventhandlers.EventHandlers.pasteEvent),_eventruler.EventRuler.on(el,"cut",_eventhandlers.EventHandlers.cutEvent),_eventruler.EventRuler.on(el,"complete",opts.oncomplete),_eventruler.EventRuler.on(el,"incomplete",opts.onincomplete),_eventruler.EventRuler.on(el,"cleared",opts.oncleared),!0!==opts.inputEventOnly&&(_eventruler.EventRuler.on(el,"keydown",_eventhandlers.EventHandlers.keydownEvent),_eventruler.EventRuler.on(el,"keypress",_eventhandlers.EventHandlers.keypressEvent),_eventruler.EventRuler.on(el,"keyup",_eventhandlers.EventHandlers.keyupEvent)),(_environment.mobile||opts.inputEventOnly)&&el.removeAttribute("maxLength"),_eventruler.EventRuler.on(el,"input",_eventhandlers.EventHandlers.inputFallBackEvent),_eventruler.EventRuler.on(el,"compositionend",_eventhandlers.EventHandlers.compositionendEvent)),_eventruler.EventRuler.on(el,"setvalue",_eventhandlers.EventHandlers.setValueEvent),inputmask.undoValue=_positioning.getBufferTemplate.call(inputmask).join("");var activeElement=(el.inputmask.shadowRoot||document).activeElement;if(""!==el.inputmask._valueGet(!0)||!1===opts.clearMaskOnLostFocus||activeElement===el){(0,_inputHandling.applyInputValue)(el,el.inputmask._valueGet(!0),opts);var buffer=_positioning.getBuffer.call(inputmask).slice();!1===_validation.isComplete.call(inputmask,buffer)&&opts.clearIncomplete&&_positioning.resetMaskSet.call(inputmask),opts.clearMaskOnLostFocus&&activeElement!==el&&(-1===_positioning.getLastValidPosition.call(inputmask)?buffer=[]:_inputHandling.clearOptionalTail.call(inputmask,buffer)),(!1===opts.clearMaskOnLostFocus||opts.showMaskOnFocus&&activeElement===el||""!==el.inputmask._valueGet(!0))&&(0,_inputHandling.writeBuffer)(el,buffer),activeElement===el&&_positioning.caret.call(inputmask,el,_positioning.seekNext.call(inputmask,_positioning.getLastValidPosition.call(inputmask)))}}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.EventRuler=void 0;var _inputmask=_interopRequireDefault(__webpack_require__(1)),_keycode=_interopRequireDefault(__webpack_require__(0)),_positioning=__webpack_require__(2),_inputHandling=__webpack_require__(5);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var EventRuler={on:function on(input,eventName,eventHandler){var $=input.inputmask.dependencyLib,ev=function ev(e){e.originalEvent&&(e=e.originalEvent||e,arguments[0]=e);var that=this,args,inputmask=that.inputmask,opts=inputmask?inputmask.opts:void 0;if(void 0===inputmask&&"FORM"!==this.nodeName){var imOpts=$.data(that,"_inputmask_opts");$(that).off(),imOpts&&new _inputmask.default(imOpts).mask(that)}else{if("setvalue"===e.type||"FORM"===this.nodeName||!(that.disabled||that.readOnly&&!("keydown"===e.type&&e.ctrlKey&&67===e.keyCode||!1===opts.tabThrough&&e.keyCode===_keycode.default.TAB))){switch(e.type){case"input":if(!0===inputmask.skipInputEvent||e.inputType&&"insertCompositionText"===e.inputType)return inputmask.skipInputEvent=!1,e.preventDefault();break;case"keydown":inputmask.skipKeyPressEvent=!1,inputmask.skipInputEvent=inputmask.isComposing=e.keyCode===_keycode.default.KEY_229;break;case"keyup":case"compositionend":inputmask.isComposing&&(inputmask.skipInputEvent=!1);break;case"keypress":if(!0===inputmask.skipKeyPressEvent)return e.preventDefault();inputmask.skipKeyPressEvent=!0;break;case"click":case"focus":return inputmask.validationEvent?(inputmask.validationEvent=!1,input.blur(),(0,_inputHandling.HandleNativePlaceholder)(input,(inputmask.isRTL?_positioning.getBufferTemplate.call(inputmask).slice().reverse():_positioning.getBufferTemplate.call(inputmask)).join("")),setTimeout(function(){input.focus()},3e3)):(args=arguments,setTimeout(function(){input.inputmask&&eventHandler.apply(that,args)},0)),!1}var returnVal=eventHandler.apply(that,arguments);return!1===returnVal&&(e.preventDefault(),e.stopPropagation()),returnVal}e.preventDefault()}};input.inputmask.events[eventName]=input.inputmask.events[eventName]||[],input.inputmask.events[eventName].push(ev),["submit","reset"].includes(eventName)?null!==input.form&&$(input.form).on(eventName,ev.bind(input)):$(input).on(eventName,ev)},off:function off(input,event){if(input.inputmask&&input.inputmask.events){var $=input.inputmask.dependencyLib,events=input.inputmask.events;for(var eventName in event&&(events=[],events[event]=input.inputmask.events[event]),events){for(var evArr=events[eventName];0<evArr.length;){var ev=evArr.pop();["submit","reset"].includes(eventName)?null!==input.form&&$(input.form).off(eventName,ev):$(input).off(eventName,ev)}delete input.inputmask.events[eventName]}}}};exports.EventRuler=EventRuler},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _jquery=_interopRequireDefault(__webpack_require__(8));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}if(void 0===_jquery.default)throw"jQuery not loaded!";var _default=_jquery.default;exports.default=_default},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _default="undefined"!=typeof window?window:new(eval("require('jsdom').JSDOM"))("").window;exports.default=_default},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=_default;var escapeRegexRegex=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"].join("|\\")+")","gim");function _default(str){return str.replace(escapeRegexRegex,"\\$1")}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,__webpack_require__(15),__webpack_require__(21),__webpack_require__(23),__webpack_require__(24);var _inputmask2=_interopRequireDefault(__webpack_require__(1));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var _default=_inputmask2.default;exports.default=_default},function(module,exports,__webpack_require__){"use strict";var _inputmask=_interopRequireDefault(__webpack_require__(1));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}_inputmask.default.extendDefinitions({A:{validator:"[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",casing:"upper"},"&":{validator:"[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",casing:"upper"},"#":{validator:"[0-9A-Fa-f]",casing:"upper"}});var ipValidatorRegex=new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]");function ipValidator(chrs,maskset,pos,strict,opts){return chrs=-1<pos-1&&"."!==maskset.buffer[pos-1]?(chrs=maskset.buffer[pos-1]+chrs,-1<pos-2&&"."!==maskset.buffer[pos-2]?maskset.buffer[pos-2]+chrs:"0"+chrs):"00"+chrs,ipValidatorRegex.test(chrs)}_inputmask.default.extendAliases({cssunit:{regex:"[+-]?[0-9]+\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)"},url:{regex:"(https?|ftp)://.*",autoUnmask:!1,keepStatic:!1,tabThrough:!0},ip:{mask:"i[i[i]].j[j[j]].k[k[k]].l[l[l]]",definitions:{i:{validator:ipValidator},j:{validator:ipValidator},k:{validator:ipValidator},l:{validator:ipValidator}},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){return maskedValue},inputmode:"numeric"},email:{mask:"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",greedy:!1,casing:"lower",onBeforePaste:function onBeforePaste(pastedValue,opts){return pastedValue=pastedValue.toLowerCase(),pastedValue.replace("mailto:","")},definitions:{"*":{validator:"[0-9\uff11-\uff19A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5!#$%&'*+/=?^_`{|}~-]"},"-":{validator:"[0-9A-Za-z-]"}},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){return maskedValue},inputmode:"email"},mac:{mask:"##:##:##:##:##:##"},vin:{mask:"V{13}9{4}",definitions:{V:{validator:"[A-HJ-NPR-Za-hj-npr-z\\d]",casing:"upper"}},clearIncomplete:!0,autoUnmask:!0},ssn:{mask:"999-99-9999",postValidation:function postValidation(buffer,pos,c,currentResult,opts,maskset,strict){return/^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(buffer.join(""))}}})},function(module,exports,__webpack_require__){"use strict";function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===_typeof("test".__proto__)?function(object){return object.__proto__}:function(object){return object.constructor.prototype})},function(module,exports,__webpack_require__){"use strict";Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function value(searchElement,fromIndex){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),len=o.length>>>0;if(0==len)return!1;for(var n=0|fromIndex,k=Math.max(0<=n?n:len-Math.abs(n),0);k<len;){if(o[k]===searchElement)return!0;k++}return!1}})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.generateMaskSet=generateMaskSet,exports.analyseMask=analyseMask;var _inputmask=_interopRequireDefault(__webpack_require__(11));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function generateMaskSet(opts,nocache){var ms;function generateMask(mask,metadata,opts){var regexMask=!1,masksetDefinition,maskdefKey;if(null!==mask&&""!==mask||(regexMask=null!==opts.regex,mask=regexMask?(mask=opts.regex,mask.replace(/^(\^)(.*)(\$)$/,"$2")):(regexMask=!0,".*")),1===mask.length&&!1===opts.greedy&&0!==opts.repeat&&(opts.placeholder=""),0<opts.repeat||"*"===opts.repeat||"+"===opts.repeat){var repeatStart="*"===opts.repeat?0:"+"===opts.repeat?1:opts.repeat;mask=opts.groupmarker[0]+mask+opts.groupmarker[1]+opts.quantifiermarker[0]+repeatStart+","+opts.repeat+opts.quantifiermarker[1]}return maskdefKey=regexMask?"regex_"+opts.regex:opts.numericInput?mask.split("").reverse().join(""):mask,!1!==opts.keepStatic&&(maskdefKey="ks_"+maskdefKey),void 0===Inputmask.prototype.masksCache[maskdefKey]||!0===nocache?(masksetDefinition={mask:mask,maskToken:Inputmask.prototype.analyseMask(mask,regexMask,opts),validPositions:{},_buffer:void 0,buffer:void 0,tests:{},excludes:{},metadata:metadata,maskLength:void 0,jitOffset:{}},!0!==nocache&&(Inputmask.prototype.masksCache[maskdefKey]=masksetDefinition,masksetDefinition=_inputmask.default.extend(!0,{},Inputmask.prototype.masksCache[maskdefKey]))):masksetDefinition=_inputmask.default.extend(!0,{},Inputmask.prototype.masksCache[maskdefKey]),masksetDefinition}if("function"==typeof opts.mask&&(opts.mask=opts.mask(opts)),Array.isArray(opts.mask)){if(1<opts.mask.length){null===opts.keepStatic&&(opts.keepStatic=!0);var altMask=opts.groupmarker[0];return(opts.isRTL?opts.mask.reverse():opts.mask).forEach(function(msk){1<altMask.length&&(altMask+=opts.groupmarker[1]+opts.alternatormarker+opts.groupmarker[0]),void 0!==msk.mask&&"function"!=typeof msk.mask?altMask+=msk.mask:altMask+=msk}),altMask+=opts.groupmarker[1],generateMask(altMask,opts.mask,opts)}opts.mask=opts.mask.pop()}return null===opts.keepStatic&&(opts.keepStatic=!1),ms=opts.mask&&void 0!==opts.mask.mask&&"function"!=typeof opts.mask.mask?generateMask(opts.mask.mask,opts.mask,opts):generateMask(opts.mask,opts.mask,opts),ms}function analyseMask(mask,regexMask,opts){var tokenizer=/(?:[?*+]|\{[0-9+*]+(?:,[0-9+*]*)?(?:\|[0-9+*]*)?\})|[^.?*+^${[]()|\\]+|./g,regexTokenizer=/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,escaped=!1,currentToken=new MaskToken,match,m,openenings=[],maskTokens=[],openingToken,currentOpeningToken,alternator,lastMatch,closeRegexGroup=!1;function MaskToken(isGroup,isOptional,isQuantifier,isAlternator){this.matches=[],this.openGroup=isGroup||!1,this.alternatorGroup=!1,this.isGroup=isGroup||!1,this.isOptional=isOptional||!1,this.isQuantifier=isQuantifier||!1,this.isAlternator=isAlternator||!1,this.quantifier={min:1,max:1}}function insertTestDefinition(mtoken,element,position){position=void 0!==position?position:mtoken.matches.length;var prevMatch=mtoken.matches[position-1];if(regexMask)0===element.indexOf("[")||escaped&&/\\d|\\s|\\w]/i.test(element)||"."===element?mtoken.matches.splice(position++,0,{fn:new RegExp(element,opts.casing?"i":""),static:!1,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==element,casing:null,def:element,placeholder:void 0,nativeDef:element}):(escaped&&(element=element[element.length-1]),element.split("").forEach(function(lmnt,ndx){prevMatch=mtoken.matches[position-1],mtoken.matches.splice(position++,0,{fn:/[a-z]/i.test(opts.staticDefinitionSymbol||lmnt)?new RegExp("["+(opts.staticDefinitionSymbol||lmnt)+"]",opts.casing?"i":""):null,static:!0,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==lmnt&&!0!==prevMatch.static,casing:null,def:opts.staticDefinitionSymbol||lmnt,placeholder:void 0!==opts.staticDefinitionSymbol?lmnt:void 0,nativeDef:(escaped?"'":"")+lmnt})})),escaped=!1;else{var maskdef=opts.definitions&&opts.definitions[element]||opts.usePrototypeDefinitions&&Inputmask.prototype.definitions[element];maskdef&&!escaped?mtoken.matches.splice(position++,0,{fn:maskdef.validator?"string"==typeof maskdef.validator?new RegExp(maskdef.validator,opts.casing?"i":""):new function(){this.test=maskdef.validator}:new RegExp("."),static:maskdef.static||!1,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==(maskdef.definitionSymbol||element),casing:maskdef.casing,def:maskdef.definitionSymbol||element,placeholder:maskdef.placeholder,nativeDef:element,generated:maskdef.generated}):(mtoken.matches.splice(position++,0,{fn:/[a-z]/i.test(opts.staticDefinitionSymbol||element)?new RegExp("["+(opts.staticDefinitionSymbol||element)+"]",opts.casing?"i":""):null,static:!0,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==element&&!0!==prevMatch.static,casing:null,def:opts.staticDefinitionSymbol||element,placeholder:void 0!==opts.staticDefinitionSymbol?element:void 0,nativeDef:(escaped?"'":"")+element}),escaped=!1)}}function verifyGroupMarker(maskToken){maskToken&&maskToken.matches&&maskToken.matches.forEach(function(token,ndx){var nextToken=maskToken.matches[ndx+1];(void 0===nextToken||void 0===nextToken.matches||!1===nextToken.isQuantifier)&&token&&token.isGroup&&(token.isGroup=!1,regexMask||(insertTestDefinition(token,opts.groupmarker[0],0),!0!==token.openGroup&&insertTestDefinition(token,opts.groupmarker[1]))),verifyGroupMarker(token)})}function defaultCase(){if(0<openenings.length){if(currentOpeningToken=openenings[openenings.length-1],insertTestDefinition(currentOpeningToken,m),currentOpeningToken.isAlternator){alternator=openenings.pop();for(var mndx=0;mndx<alternator.matches.length;mndx++)alternator.matches[mndx].isGroup&&(alternator.matches[mndx].isGroup=!1);0<openenings.length?(currentOpeningToken=openenings[openenings.length-1],currentOpeningToken.matches.push(alternator)):currentToken.matches.push(alternator)}}else insertTestDefinition(currentToken,m)}function reverseTokens(maskToken){function reverseStatic(st){return st===opts.optionalmarker[0]?st=opts.optionalmarker[1]:st===opts.optionalmarker[1]?st=opts.optionalmarker[0]:st===opts.groupmarker[0]?st=opts.groupmarker[1]:st===opts.groupmarker[1]&&(st=opts.groupmarker[0]),st}for(var match in maskToken.matches=maskToken.matches.reverse(),maskToken.matches)if(Object.prototype.hasOwnProperty.call(maskToken.matches,match)){var intMatch=parseInt(match);if(maskToken.matches[match].isQuantifier&&maskToken.matches[intMatch+1]&&maskToken.matches[intMatch+1].isGroup){var qt=maskToken.matches[match];maskToken.matches.splice(match,1),maskToken.matches.splice(intMatch+1,0,qt)}void 0!==maskToken.matches[match].matches?maskToken.matches[match]=reverseTokens(maskToken.matches[match]):maskToken.matches[match]=reverseStatic(maskToken.matches[match])}return maskToken}function groupify(matches){var groupToken=new MaskToken(!0);return groupToken.openGroup=!1,groupToken.matches=matches,groupToken}function closeGroup(){if(openingToken=openenings.pop(),openingToken.openGroup=!1,void 0!==openingToken)if(0<openenings.length){if(currentOpeningToken=openenings[openenings.length-1],currentOpeningToken.matches.push(openingToken),currentOpeningToken.isAlternator){alternator=openenings.pop();for(var mndx=0;mndx<alternator.matches.length;mndx++)alternator.matches[mndx].isGroup=!1,alternator.matches[mndx].alternatorGroup=!1;0<openenings.length?(currentOpeningToken=openenings[openenings.length-1],currentOpeningToken.matches.push(alternator)):currentToken.matches.push(alternator)}}else currentToken.matches.push(openingToken);else defaultCase()}function groupQuantifier(matches){var lastMatch=matches.pop();return lastMatch.isQuantifier&&(lastMatch=groupify([matches.pop(),lastMatch])),lastMatch}for(regexMask&&(opts.optionalmarker[0]=void 0,opts.optionalmarker[1]=void 0);match=regexMask?regexTokenizer.exec(mask):tokenizer.exec(mask);){if(m=match[0],regexMask)switch(m.charAt(0)){case"?":m="{0,1}";break;case"+":case"*":m="{"+m+"}";break;case"|":if(0===openenings.length){var altRegexGroup=groupify(currentToken.matches);altRegexGroup.openGroup=!0,openenings.push(altRegexGroup),currentToken.matches=[],closeRegexGroup=!0}break}if(escaped)defaultCase();else switch(m.charAt(0)){case"$":case"^":regexMask||defaultCase();break;case"(?=":break;case"(?!":break;case"(?<=":break;case"(?<!":break;case opts.escapeChar:escaped=!0,regexMask&&defaultCase();break;case opts.optionalmarker[1]:case opts.groupmarker[1]:closeGroup();break;case opts.optionalmarker[0]:openenings.push(new MaskToken(!1,!0));break;case opts.groupmarker[0]:openenings.push(new MaskToken(!0));break;case opts.quantifiermarker[0]:var quantifier=new MaskToken(!1,!1,!0);m=m.replace(/[{}]/g,"");var mqj=m.split("|"),mq=mqj[0].split(","),mq0=isNaN(mq[0])?mq[0]:parseInt(mq[0]),mq1=1===mq.length?mq0:isNaN(mq[1])?mq[1]:parseInt(mq[1]);"*"!==mq0&&"+"!==mq0||(mq0="*"===mq1?0:1),quantifier.quantifier={min:mq0,max:mq1,jit:mqj[1]};var matches=0<openenings.length?openenings[openenings.length-1].matches:currentToken.matches;if(match=matches.pop(),match.isAlternator){matches.push(match),matches=match.matches;var groupToken=new MaskToken(!0),tmpMatch=matches.pop();matches.push(groupToken),matches=groupToken.matches,match=tmpMatch}match.isGroup||(match=groupify([match])),matches.push(match),matches.push(quantifier);break;case opts.alternatormarker:if(0<openenings.length){currentOpeningToken=openenings[openenings.length-1];var subToken=currentOpeningToken.matches[currentOpeningToken.matches.length-1];lastMatch=currentOpeningToken.openGroup&&(void 0===subToken.matches||!1===subToken.isGroup&&!1===subToken.isAlternator)?openenings.pop():groupQuantifier(currentOpeningToken.matches)}else lastMatch=groupQuantifier(currentToken.matches);if(lastMatch.isAlternator)openenings.push(lastMatch);else if(lastMatch.alternatorGroup?(alternator=openenings.pop(),lastMatch.alternatorGroup=!1):alternator=new MaskToken(!1,!1,!1,!0),alternator.matches.push(lastMatch),openenings.push(alternator),lastMatch.openGroup){lastMatch.openGroup=!1;var alternatorGroup=new MaskToken(!0);alternatorGroup.alternatorGroup=!0,openenings.push(alternatorGroup)}break;default:defaultCase()}}for(closeRegexGroup&&closeGroup();0<openenings.length;)openingToken=openenings.pop(),currentToken.matches.push(openingToken);return 0<currentToken.matches.length&&(verifyGroupMarker(currentToken),maskTokens.push(currentToken)),(opts.numericInput||opts.isRTL)&&reverseTokens(maskTokens[0]),maskTokens}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _default={9:{validator:"[0-9\uff10-\uff19]",definitionSymbol:"*"},a:{validator:"[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",definitionSymbol:"*"},"*":{validator:"[0-9\uff10-\uff19A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]"}};exports.default=_default},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _default={_maxTestPos:500,placeholder:"_",optionalmarker:["[","]"],quantifiermarker:["{","}"],groupmarker:["(",")"],alternatormarker:"|",escapeChar:"\\",mask:null,regex:null,oncomplete:function oncomplete(){},onincomplete:function onincomplete(){},oncleared:function oncleared(){},repeat:0,greedy:!1,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,insertModeVisual:!0,clearIncomplete:!1,alias:null,onKeyDown:function onKeyDown(){},onBeforeMask:null,onBeforePaste:function onBeforePaste(pastedValue,opts){return"function"==typeof opts.onBeforeMask?opts.onBeforeMask.call(this,pastedValue,opts):pastedValue},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:function onKeyValidation(){},skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",_radixDance:!1,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","url","password","search"],ignorables:[8,9,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123,0,229],isComplete:null,preValidation:null,postValidation:null,staticDefinitionSymbol:void 0,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"text",importDataAttributes:!0,shiftPositions:!0,usePrototypeDefinitions:!0};exports.default=_default},function(module,exports,__webpack_require__){"use strict";var _inputmask=_interopRequireDefault(__webpack_require__(1)),_keycode=_interopRequireDefault(__webpack_require__(0)),_escapeRegex=_interopRequireDefault(__webpack_require__(13)),_positioning=__webpack_require__(2),_data=_interopRequireDefault(__webpack_require__(22));function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var $=_inputmask.default.dependencyLib,currentYear=(new Date).getFullYear(),formatCode={d:["[1-9]|[12][0-9]|3[01]",Date.prototype.setDate,"day",Date.prototype.getDate],dd:["0[1-9]|[12][0-9]|3[01]",Date.prototype.setDate,"day",function(){return pad(Date.prototype.getDate.call(this),2)}],ddd:[""],dddd:[""],m:["[1-9]|1[012]",Date.prototype.setMonth,"month",function(){return Date.prototype.getMonth.call(this)+1}],mm:["0[1-9]|1[012]",Date.prototype.setMonth,"month",function(){return pad(Date.prototype.getMonth.call(this)+1,2)}],mmm:[""],mmmm:[""],yy:["[0-9]{2}",Date.prototype.setFullYear,"year",function(){return pad(Date.prototype.getFullYear.call(this),2)}],yyyy:["[0-9]{4}",Date.prototype.setFullYear,"year",function(){return pad(Date.prototype.getFullYear.call(this),4)}],h:["[1-9]|1[0-2]",Date.prototype.setHours,"hours",Date.prototype.getHours],hh:["0[1-9]|1[0-2]",Date.prototype.setHours,"hours",function(){return pad(Date.prototype.getHours.call(this),2)}],hx:[function(x){return"[0-9]{".concat(x,"}")},Date.prototype.setHours,"hours",function(x){return Date.prototype.getHours}],H:["1?[0-9]|2[0-3]",Date.prototype.setHours,"hours",Date.prototype.getHours],HH:["0[0-9]|1[0-9]|2[0-3]",Date.prototype.setHours,"hours",function(){return pad(Date.prototype.getHours.call(this),2)}],Hx:[function(x){return"[0-9]{".concat(x,"}")},Date.prototype.setHours,"hours",function(x){return function(){return pad(Date.prototype.getHours.call(this),x)}}],M:["[1-5]?[0-9]",Date.prototype.setMinutes,"minutes",Date.prototype.getMinutes],MM:["0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]",Date.prototype.setMinutes,"minutes",function(){return pad(Date.prototype.getMinutes.call(this),2)}],s:["[1-5]?[0-9]",Date.prototype.setSeconds,"seconds",Date.prototype.getSeconds],ss:["0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]",Date.prototype.setSeconds,"seconds",function(){return pad(Date.prototype.getSeconds.call(this),2)}],l:["[0-9]{3}",Date.prototype.setMilliseconds,"milliseconds",function(){return pad(Date.prototype.getMilliseconds.call(this),3)}],L:["[0-9]{2}",Date.prototype.setMilliseconds,"milliseconds",function(){return pad(Date.prototype.getMilliseconds.call(this),2)}],t:["[ap]"],tt:["[ap]m"],T:["[AP]"],TT:["[AP]M"],Z:[""],o:[""],S:[""]},formatAlias={isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:ss",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"};function formatcode(match){var dynMatches=new RegExp("\\d+$").exec(match[0]);if(dynMatches&&void 0!==dynMatches[0]){var fcode=formatCode[match[0][0]+"x"].slice("");return fcode[0]=fcode[0](dynMatches[0]),fcode[3]=fcode[3](dynMatches[0]),fcode}if(formatCode[match[0]])return formatCode[match[0]]}function getTokenizer(opts){if(!opts.tokenizer){var tokens=[],dyntokens=[];for(var ndx in formatCode)if(/\.*x$/.test(ndx)){var dynToken=ndx[0]+"\\d+";-1===dyntokens.indexOf(dynToken)&&dyntokens.push(dynToken)}else-1===tokens.indexOf(ndx[0])&&tokens.push(ndx[0]);opts.tokenizer="("+(0<dyntokens.length?dyntokens.join("|")+"|":"")+tokens.join("+|")+")+?|.",opts.tokenizer=new RegExp(opts.tokenizer,"g")}return opts.tokenizer}function prefillYear(dateParts,currentResult,opts){if(dateParts.year!==dateParts.rawyear){var crrntyear=currentYear.toString(),enteredPart=dateParts.rawyear.replace(/[^0-9]/g,""),currentYearPart=crrntyear.slice(0,enteredPart.length),currentYearNextPart=crrntyear.slice(enteredPart.length);if(2===enteredPart.length&&enteredPart===currentYearPart){var entryCurrentYear=new Date(currentYear,dateParts.month-1,dateParts.day);dateParts.day==entryCurrentYear.getDate()&&(!opts.max||opts.max.date.getTime()>=entryCurrentYear.getTime())&&(dateParts.date.setFullYear(currentYear),dateParts.year=crrntyear,currentResult.insert=[{pos:currentResult.pos+1,c:currentYearNextPart[0]},{pos:currentResult.pos+2,c:currentYearNextPart[1]}])}}return currentResult}function isValidDate(dateParts,currentResult,opts){if(void 0===dateParts.rawday||!isFinite(dateParts.rawday)&&new Date(dateParts.date.getFullYear(),isFinite(dateParts.rawmonth)?dateParts.month:dateParts.date.getMonth()+1,0).getDate()>=dateParts.day||"29"==dateParts.day&&!isFinite(dateParts.rawyear)||new Date(dateParts.date.getFullYear(),isFinite(dateParts.rawmonth)?dateParts.month:dateParts.date.getMonth()+1,0).getDate()>=dateParts.day)return currentResult;if("29"==dateParts.day){var tokenMatch=getTokenMatch(currentResult.pos,opts);if("yyyy"===tokenMatch.targetMatch[0]&¤tResult.pos-tokenMatch.targetMatchIndex==2)return currentResult.remove=currentResult.pos+1,currentResult}else if("02"==dateParts.month&&"30"==dateParts.day)return dateParts.day="03",dateParts.date.setDate(3),dateParts.date.setMonth(1),currentResult.insert=[{pos:currentResult.pos,c:"0"},{pos:currentResult.pos+1,c:currentResult.c}],currentResult.caret=_positioning.seekNext.call(this,currentResult.pos+1),currentResult;return!1}function isDateInRange(dateParts,result,opts,maskset,fromCheckval){if(!result)return result;if(opts.min){if(dateParts.rawyear){var rawYear=dateParts.rawyear.replace(/[^0-9]/g,""),minYear=opts.min.year.substr(0,rawYear.length),maxYear;if(rawYear<minYear){var tokenMatch=getTokenMatch(result.pos,opts);if(rawYear=dateParts.rawyear.substr(0,result.pos-tokenMatch.targetMatchIndex+1).replace(/[^0-9]/g,"0"),minYear=opts.min.year.substr(0,rawYear.length),minYear<=rawYear)return result.remove=tokenMatch.targetMatchIndex+rawYear.length,result;if(rawYear="yyyy"===tokenMatch.targetMatch[0]?dateParts.rawyear.substr(1,1):dateParts.rawyear.substr(0,1),minYear=opts.min.year.substr(2,1),maxYear=opts.max?opts.max.year.substr(2,1):rawYear,1===rawYear.length&&minYear<=rawYear&&rawYear<=maxYear&&!0!==fromCheckval)return"yyyy"===tokenMatch.targetMatch[0]?(result.insert=[{pos:result.pos+1,c:rawYear,strict:!0}],result.caret=result.pos+2,maskset.validPositions[result.pos].input=opts.min.year[1]):(result.insert=[{pos:result.pos+1,c:opts.min.year[1],strict:!0},{pos:result.pos+2,c:rawYear,strict:!0}],result.caret=result.pos+3,maskset.validPositions[result.pos].input=opts.min.year[0]),result;result=!1}}result&&dateParts.year&&dateParts.year===dateParts.rawyear&&opts.min.date.getTime()==opts.min.date.getTime()&&(result=opts.min.date.getTime()<=dateParts.date.getTime())}return result&&opts.max&&opts.max.date.getTime()==opts.max.date.getTime()&&(result=opts.max.date.getTime()>=dateParts.date.getTime()),result}function parse(format,dateObjValue,opts,raw){var mask="",match,fcode;for(getTokenizer(opts).lastIndex=0;match=getTokenizer(opts).exec(format);)if(void 0===dateObjValue)if(fcode=formatcode(match))mask+="("+fcode[0]+")";else switch(match[0]){case"[":mask+="(";break;case"]":mask+=")?";break;default:mask+=(0,_escapeRegex.default)(match[0])}else if(fcode=formatcode(match))if(!0!==raw&&fcode[3]){var getFn=fcode[3];mask+=getFn.call(dateObjValue.date)}else fcode[2]?mask+=dateObjValue["raw"+fcode[2]]:mask+=match[0];else mask+=match[0];return mask}function pad(val,len){for(val=String(val),len=len||2;val.length<len;)val="0"+val;return val}function analyseMask(maskString,format,opts){var dateObj={date:new Date(1,0,1)},targetProp,mask=maskString,match,dateOperation;function setValue(dateObj,value,opts){if(dateObj[targetProp]=value.replace(/[^0-9]/g,"0"),dateObj["raw"+targetProp]=value,void 0!==dateOperation){var datavalue=dateObj[targetProp];"day"===targetProp&&0===parseInt(datavalue)&&(datavalue=1),"month"===targetProp&&(datavalue=parseInt(datavalue),0<datavalue)&&(datavalue-=1),dateOperation.call(dateObj.date,datavalue)}}if("string"==typeof mask){for(getTokenizer(opts).lastIndex=0;match=getTokenizer(opts).exec(format);){var dynMatches=new RegExp("\\d+$").exec(match[0]),fcode=dynMatches?match[0][0]+"x":match[0],value=void 0;if(dynMatches){var lastIndex=getTokenizer(opts).lastIndex,tokanMatch=getTokenMatch(match.index,opts);getTokenizer(opts).lastIndex=lastIndex,value=mask.slice(0,mask.indexOf(tokanMatch.nextMatch[0]))}else value=mask.slice(0,fcode.length);Object.prototype.hasOwnProperty.call(formatCode,fcode)&&(targetProp=formatCode[fcode][2],dateOperation=formatCode[fcode][1],setValue(dateObj,value,opts)),mask=mask.slice(value.length)}return dateObj}if(mask&&"object"===_typeof(mask)&&Object.prototype.hasOwnProperty.call(mask,"date"))return mask}function importDate(dateObj,opts){return parse(opts.inputFormat,{date:dateObj},opts)}function getTokenMatch(pos,opts){var calcPos=0,targetMatch,match,matchLength=0;for(getTokenizer(opts).lastIndex=0;match=getTokenizer(opts).exec(opts.inputFormat);){var dynMatches=new RegExp("\\d+$").exec(match[0]);if(matchLength=dynMatches?parseInt(dynMatches[0]):match[0].length,calcPos+=matchLength,pos<=calcPos){targetMatch=match,match=getTokenizer(opts).exec(opts.inputFormat);break}}return{targetMatchIndex:calcPos-matchLength,nextMatch:match,targetMatch:targetMatch}}_inputmask.default.extendAliases({datetime:{mask:function mask(opts){return opts.numericInput=!1,formatCode.S=opts.i18n.ordinalSuffix.join("|"),opts.inputFormat=formatAlias[opts.inputFormat]||opts.inputFormat,opts.displayFormat=formatAlias[opts.displayFormat]||opts.displayFormat||opts.inputFormat,opts.outputFormat=formatAlias[opts.outputFormat]||opts.outputFormat||opts.inputFormat,opts.placeholder=""!==opts.placeholder?opts.placeholder:opts.inputFormat.replace(/[[\]]/,""),opts.regex=parse(opts.inputFormat,void 0,opts),opts.min=analyseMask(opts.min,opts.inputFormat,opts),opts.max=analyseMask(opts.max,opts.inputFormat,opts),null},placeholder:"",inputFormat:"isoDateTime",displayFormat:void 0,outputFormat:void 0,min:null,max:null,skipOptionalPartCharacter:"",i18n:{dayNames:["Mon","Tue","Wed","Thu","Fri","Sat","Sun","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],ordinalSuffix:["st","nd","rd","th"]},preValidation:function preValidation(buffer,pos,c,isSelection,opts,maskset,caretPos,strict){if(strict)return!0;if(isNaN(c)&&buffer[pos]!==c){var tokenMatch=getTokenMatch(pos,opts);if(tokenMatch.nextMatch&&tokenMatch.nextMatch[0]===c&&1<tokenMatch.targetMatch[0].length){var validator=formatCode[tokenMatch.targetMatch[0]][0];if(new RegExp(validator).test("0"+buffer[pos-1]))return buffer[pos]=buffer[pos-1],buffer[pos-1]="0",{fuzzy:!0,buffer:buffer,refreshFromBuffer:{start:pos-1,end:pos+1},pos:pos+1}}}return!0},postValidation:function postValidation(buffer,pos,c,currentResult,opts,maskset,strict,fromCheckval){var inputmask=this,tokenMatch,validator;if(strict)return!0;if(!1===currentResult)return tokenMatch=getTokenMatch(pos+1,opts),tokenMatch.targetMatch&&tokenMatch.targetMatchIndex===pos&&1<tokenMatch.targetMatch[0].length&&void 0!==formatCode[tokenMatch.targetMatch[0]]&&(validator=formatCode[tokenMatch.targetMatch[0]][0],new RegExp(validator).test("0"+c))?{insert:[{pos:pos,c:"0"},{pos:pos+1,c:c}],pos:pos+1}:currentResult;if(currentResult.fuzzy&&(buffer=currentResult.buffer,pos=currentResult.pos),tokenMatch=getTokenMatch(pos,opts),tokenMatch.targetMatch&&tokenMatch.targetMatch[0]&&void 0!==formatCode[tokenMatch.targetMatch[0]]){validator=formatCode[tokenMatch.targetMatch[0]][0];var part=buffer.slice(tokenMatch.targetMatchIndex,tokenMatch.targetMatchIndex+tokenMatch.targetMatch[0].length);!1===new RegExp(validator).test(part.join(""))&&2===tokenMatch.targetMatch[0].length&&maskset.validPositions[tokenMatch.targetMatchIndex]&&maskset.validPositions[tokenMatch.targetMatchIndex+1]&&(maskset.validPositions[tokenMatch.targetMatchIndex+1].input="0")}var result=currentResult,dateParts=analyseMask(buffer.join(""),opts.inputFormat,opts);return result&&dateParts.date.getTime()==dateParts.date.getTime()&&(result=prefillYear(dateParts,result,opts),result=isValidDate.call(this,dateParts,result,opts),result=isDateInRange(dateParts,result,opts,maskset,fromCheckval)),pos&&result&¤tResult.pos!==pos?{buffer:parse(opts.inputFormat,dateParts,opts).split(""),refreshFromBuffer:{start:pos,end:currentResult.pos}}:result},onKeyDown:function onKeyDown(e,buffer,caretPos,opts){var input=this;e.ctrlKey&&e.keyCode===_keycode.default.RIGHT&&(this.inputmask._valueSet(importDate(new Date,opts)),$(this).trigger("setvalue"))},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){return unmaskedValue?parse(opts.outputFormat,analyseMask(maskedValue,opts.inputFormat,opts),opts,!0):unmaskedValue},casing:function casing(elem,test,pos,validPositions){return 0==test.nativeDef.indexOf("[ap]")?elem.toLowerCase():0==test.nativeDef.indexOf("[AP]")?elem.toUpperCase():elem},onBeforeMask:function onBeforeMask(initialValue,opts){return"[object Date]"===Object.prototype.toString.call(initialValue)&&(initialValue=importDate(initialValue,opts)),initialValue},insertMode:!1,shiftPositions:!1,keepStatic:!1,inputmode:"numeric"}})},function(module,exports,__webpack_require__){"use strict";function _default(owner,key,value){if(void 0===value)return owner.__data?owner.__data[key]:null;owner.__data=owner.__data||{},owner.__data[key]=value}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=_default},function(module,exports,__webpack_require__){"use strict";var _inputmask=_interopRequireDefault(__webpack_require__(1)),_keycode=_interopRequireDefault(__webpack_require__(0)),_escapeRegex=_interopRequireDefault(__webpack_require__(13));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var $=_inputmask.default.dependencyLib;function autoEscape(txt,opts){for(var escapedTxt="",i=0;i<txt.length;i++)_inputmask.default.prototype.definitions[txt.charAt(i)]||opts.definitions[txt.charAt(i)]||opts.optionalmarker[0]===txt.charAt(i)||opts.optionalmarker[1]===txt.charAt(i)||opts.quantifiermarker[0]===txt.charAt(i)||opts.quantifiermarker[1]===txt.charAt(i)||opts.groupmarker[0]===txt.charAt(i)||opts.groupmarker[1]===txt.charAt(i)||opts.alternatormarker===txt.charAt(i)?escapedTxt+="\\"+txt.charAt(i):escapedTxt+=txt.charAt(i);return escapedTxt}function alignDigits(buffer,digits,opts,force){if(0<buffer.length&&0<digits&&(!opts.digitsOptional||force)){var radixPosition=buffer.indexOf(opts.radixPoint),negationBack=!1;opts.negationSymbol.back===buffer[buffer.length-1]&&(negationBack=!0,buffer.length--),-1===radixPosition&&(buffer.push(opts.radixPoint),radixPosition=buffer.length-1);for(var i=1;i<=digits;i++)isFinite(buffer[radixPosition+i])||(buffer[radixPosition+i]="0")}return negationBack&&buffer.push(opts.negationSymbol.back),buffer}function findValidator(symbol,maskset){var posNdx=0;if("+"===symbol){for(posNdx in maskset.validPositions);posNdx=parseInt(posNdx)}for(var tstNdx in maskset.tests)if(tstNdx=parseInt(tstNdx),posNdx<=tstNdx)for(var ndx=0,ndxl=maskset.tests[tstNdx].length;ndx<ndxl;ndx++)if((void 0===maskset.validPositions[tstNdx]||"-"===symbol)&&maskset.tests[tstNdx][ndx].match.def===symbol)return tstNdx+(void 0!==maskset.validPositions[tstNdx]&&"-"!==symbol?1:0);return posNdx}function findValid(symbol,maskset){var ret=-1;for(var ndx in maskset.validPositions){var tst=maskset.validPositions[ndx];if(tst&&tst.match.def===symbol){ret=parseInt(ndx);break}}return ret}function parseMinMaxOptions(opts){void 0===opts.parseMinMaxOptions&&(null!==opts.min&&(opts.min=opts.min.toString().replace(new RegExp((0,_escapeRegex.default)(opts.groupSeparator),"g"),""),","===opts.radixPoint&&(opts.min=opts.min.replace(opts.radixPoint,".")),opts.min=isFinite(opts.min)?parseFloat(opts.min):NaN,isNaN(opts.min)&&(opts.min=Number.MIN_VALUE)),null!==opts.max&&(opts.max=opts.max.toString().replace(new RegExp((0,_escapeRegex.default)(opts.groupSeparator),"g"),""),","===opts.radixPoint&&(opts.max=opts.max.replace(opts.radixPoint,".")),opts.max=isFinite(opts.max)?parseFloat(opts.max):NaN,isNaN(opts.max)&&(opts.max=Number.MAX_VALUE)),opts.parseMinMaxOptions="done")}function genMask(opts){opts.repeat=0,opts.groupSeparator===opts.radixPoint&&opts.digits&&"0"!==opts.digits&&("."===opts.radixPoint?opts.groupSeparator=",":","===opts.radixPoint?opts.groupSeparator=".":opts.groupSeparator="")," "===opts.groupSeparator&&(opts.skipOptionalPartCharacter=void 0),1<opts.placeholder.length&&(opts.placeholder=opts.placeholder.charAt(0)),"radixFocus"===opts.positionCaretOnClick&&""===opts.placeholder&&(opts.positionCaretOnClick="lvp");var decimalDef="0",radixPointDef=opts.radixPoint;!0===opts.numericInput&&void 0===opts.__financeInput?(decimalDef="1",opts.positionCaretOnClick="radixFocus"===opts.positionCaretOnClick?"lvp":opts.positionCaretOnClick,opts.digitsOptional=!1,isNaN(opts.digits)&&(opts.digits=2),opts._radixDance=!1,radixPointDef=","===opts.radixPoint?"?":"!",""!==opts.radixPoint&&void 0===opts.definitions[radixPointDef]&&(opts.definitions[radixPointDef]={},opts.definitions[radixPointDef].validator="["+opts.radixPoint+"]",opts.definitions[radixPointDef].placeholder=opts.radixPoint,opts.definitions[radixPointDef].static=!0,opts.definitions[radixPointDef].generated=!0)):(opts.__financeInput=!1,opts.numericInput=!0);var mask="[+]",altMask;if(mask+=autoEscape(opts.prefix,opts),""!==opts.groupSeparator?(void 0===opts.definitions[opts.groupSeparator]&&(opts.definitions[opts.groupSeparator]={},opts.definitions[opts.groupSeparator].validator="["+opts.groupSeparator+"]",opts.definitions[opts.groupSeparator].placeholder=opts.groupSeparator,opts.definitions[opts.groupSeparator].static=!0,opts.definitions[opts.groupSeparator].generated=!0),mask+=opts._mask(opts)):mask+="9{+}",void 0!==opts.digits&&0!==opts.digits){var dq=opts.digits.toString().split(",");isFinite(dq[0])&&dq[1]&&isFinite(dq[1])?mask+=radixPointDef+decimalDef+"{"+opts.digits+"}":(isNaN(opts.digits)||0<parseInt(opts.digits))&&(opts.digitsOptional?(altMask=mask+radixPointDef+decimalDef+"{0,"+opts.digits+"}",opts.keepStatic=!0):mask+=radixPointDef+decimalDef+"{"+opts.digits+"}")}return mask+=autoEscape(opts.suffix,opts),mask+="[-]",altMask&&(mask=[altMask+autoEscape(opts.suffix,opts)+"[-]",mask]),opts.greedy=!1,parseMinMaxOptions(opts),mask}function hanndleRadixDance(pos,c,radixPos,maskset,opts){return opts._radixDance&&opts.numericInput&&c!==opts.negationSymbol.back&&pos<=radixPos&&(0<radixPos||c==opts.radixPoint)&&(void 0===maskset.validPositions[pos-1]||maskset.validPositions[pos-1].input!==opts.negationSymbol.back)&&(pos-=1),pos}function decimalValidator(chrs,maskset,pos,strict,opts){var radixPos=maskset.buffer?maskset.buffer.indexOf(opts.radixPoint):-1,result=-1!==radixPos&&new RegExp("[0-9\uff11-\uff19]").test(chrs);return opts._radixDance&&result&&null==maskset.validPositions[radixPos]?{insert:{pos:radixPos===pos?radixPos+1:radixPos,c:opts.radixPoint},pos:pos}:result}function checkForLeadingZeroes(buffer,opts){var numberMatches=new RegExp("(^"+(""!==opts.negationSymbol.front?(0,_escapeRegex.default)(opts.negationSymbol.front)+"?":"")+(0,_escapeRegex.default)(opts.prefix)+")(.*)("+(0,_escapeRegex.default)(opts.suffix)+(""!=opts.negationSymbol.back?(0,_escapeRegex.default)(opts.negationSymbol.back)+"?":"")+"$)").exec(buffer.slice().reverse().join("")),number=numberMatches?numberMatches[2]:"",leadingzeroes=!1;return number&&(number=number.split(opts.radixPoint.charAt(0))[0],leadingzeroes=new RegExp("^[0"+opts.groupSeparator+"]*").exec(number)),!(!leadingzeroes||!(1<leadingzeroes[0].length||0<leadingzeroes[0].length&&leadingzeroes[0].length<number.length))&&leadingzeroes}_inputmask.default.extendAliases({numeric:{mask:genMask,_mask:function _mask(opts){return"("+opts.groupSeparator+"999){+|1}"},digits:"*",digitsOptional:!0,enforceDigitsOnBlur:!1,radixPoint:".",positionCaretOnClick:"radixFocus",_radixDance:!0,groupSeparator:"",allowMinus:!0,negationSymbol:{front:"-",back:""},prefix:"",suffix:"",min:null,max:null,SetMaxOnOverflow:!1,step:1,inputType:"text",unmaskAsNumber:!1,roundingFN:Math.round,inputmode:"numeric",shortcuts:{k:"000",m:"000000"},placeholder:"0",greedy:!1,rightAlign:!0,insertMode:!0,autoUnmask:!1,skipOptionalPartCharacter:"",definitions:{0:{validator:decimalValidator},1:{validator:decimalValidator,definitionSymbol:"9"},"+":{validator:function validator(chrs,maskset,pos,strict,opts){return opts.allowMinus&&("-"===chrs||chrs===opts.negationSymbol.front)}},"-":{validator:function validator(chrs,maskset,pos,strict,opts){return opts.allowMinus&&chrs===opts.negationSymbol.back}}},preValidation:function preValidation(buffer,pos,c,isSelection,opts,maskset,caretPos,strict){if(!1!==opts.__financeInput&&c===opts.radixPoint)return!1;var pattern;if(pattern=opts.shortcuts&&opts.shortcuts[c]){if(1<pattern.length)for(var inserts=[],i=0;i<pattern.length;i++)inserts.push({pos:pos+i,c:pattern[i],strict:!1});return{insert:inserts}}var radixPos=buffer.indexOf(opts.radixPoint),initPos=pos;if(pos=hanndleRadixDance(pos,c,radixPos,maskset,opts),"-"===c||c===opts.negationSymbol.front){if(!0!==opts.allowMinus)return!1;var isNegative=!1,front=findValid("+",maskset),back=findValid("-",maskset);return-1!==front&&(isNegative=[front,back]),!1!==isNegative?{remove:isNegative,caret:initPos-opts.negationSymbol.front.length}:{insert:[{pos:findValidator("+",maskset),c:opts.negationSymbol.front,fromIsValid:!0},{pos:findValidator("-",maskset),c:opts.negationSymbol.back,fromIsValid:void 0}],caret:initPos+opts.negationSymbol.back.length}}if(c===opts.groupSeparator)return{caret:initPos};if(strict)return!0;if(-1!==radixPos&&!0===opts._radixDance&&!1===isSelection&&c===opts.radixPoint&&void 0!==opts.digits&&(isNaN(opts.digits)||0<parseInt(opts.digits))&&radixPos!==pos)return{caret:opts._radixDance&&pos===radixPos-1?radixPos+1:radixPos};if(!1===opts.__financeInput)if(isSelection){if(opts.digitsOptional)return{rewritePosition:caretPos.end};if(!opts.digitsOptional){if(caretPos.begin>radixPos&&caretPos.end<=radixPos)return c===opts.radixPoint?{insert:{pos:radixPos+1,c:"0",fromIsValid:!0},rewritePosition:radixPos}:{rewritePosition:radixPos+1};if(caretPos.begin<radixPos)return{rewritePosition:caretPos.begin-1}}}else if(!opts.showMaskOnHover&&!opts.showMaskOnFocus&&!opts.digitsOptional&&0<opts.digits&&""===this.inputmask.__valueGet.call(this))return{rewritePosition:radixPos};return{rewritePosition:pos}},postValidation:function postValidation(buffer,pos,c,currentResult,opts,maskset,strict){if(!1===currentResult)return currentResult;if(strict)return!0;if(null!==opts.min||null!==opts.max){var unmasked=opts.onUnMask(buffer.slice().reverse().join(""),void 0,$.extend({},opts,{unmaskAsNumber:!0}));if(null!==opts.min&&unmasked<opts.min&&(unmasked.toString().length>opts.min.toString().length||unmasked<0))return!1;if(null!==opts.max&&unmasked>opts.max)return!!opts.SetMaxOnOverflow&&{refreshFromBuffer:!0,buffer:alignDigits(opts.max.toString().replace(".",opts.radixPoint).split(""),opts.digits,opts).reverse()}}return currentResult},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){if(""===unmaskedValue&&!0===opts.nullable)return unmaskedValue;var processValue=maskedValue.replace(opts.prefix,"");return processValue=processValue.replace(opts.suffix,""),processValue=processValue.replace(new RegExp((0,_escapeRegex.default)(opts.groupSeparator),"g"),""),""!==opts.placeholder.charAt(0)&&(processValue=processValue.replace(new RegExp(opts.placeholder.charAt(0),"g"),"0")),opts.unmaskAsNumber?(""!==opts.radixPoint&&-1!==processValue.indexOf(opts.radixPoint)&&(processValue=processValue.replace(_escapeRegex.default.call(this,opts.radixPoint),".")),processValue=processValue.replace(new RegExp("^"+(0,_escapeRegex.default)(opts.negationSymbol.front)),"-"),processValue=processValue.replace(new RegExp((0,_escapeRegex.default)(opts.negationSymbol.back)+"$"),""),Number(processValue)):processValue},isComplete:function isComplete(buffer,opts){var maskedValue=(opts.numericInput?buffer.slice().reverse():buffer).join("");return maskedValue=maskedValue.replace(new RegExp("^"+(0,_escapeRegex.default)(opts.negationSymbol.front)),"-"),maskedValue=maskedValue.replace(new RegExp((0,_escapeRegex.default)(opts.negationSymbol.back)+"$"),""),maskedValue=maskedValue.replace(opts.prefix,""),maskedValue=maskedValue.replace(opts.suffix,""),maskedValue=maskedValue.replace(new RegExp((0,_escapeRegex.default)(opts.groupSeparator)+"([0-9]{3})","g"),"$1"),","===opts.radixPoint&&(maskedValue=maskedValue.replace((0,_escapeRegex.default)(opts.radixPoint),".")),isFinite(maskedValue)},onBeforeMask:function onBeforeMask(initialValue,opts){var radixPoint=opts.radixPoint||",";isFinite(opts.digits)&&(opts.digits=parseInt(opts.digits)),"number"!=typeof initialValue&&"number"!==opts.inputType||""===radixPoint||(initialValue=initialValue.toString().replace(".",radixPoint));var isNagtive="-"===initialValue.charAt(0)||initialValue.charAt(0)===opts.negationSymbol.front,valueParts=initialValue.split(radixPoint),integerPart=valueParts[0].replace(/[^\-0-9]/g,""),decimalPart=1<valueParts.length?valueParts[1].replace(/[^0-9]/g,""):"",forceDigits=1<valueParts.length;initialValue=integerPart+(""!==decimalPart?radixPoint+decimalPart:decimalPart);var digits=0;if(""!==radixPoint&&(digits=opts.digitsOptional?opts.digits<decimalPart.length?opts.digits:decimalPart.length:opts.digits,""!==decimalPart||!opts.digitsOptional)){var digitsFactor=Math.pow(10,digits||1);initialValue=initialValue.replace((0,_escapeRegex.default)(radixPoint),"."),isNaN(parseFloat(initialValue))||(initialValue=(opts.roundingFN(parseFloat(initialValue)*digitsFactor)/digitsFactor).toFixed(digits)),initialValue=initialValue.toString().replace(".",radixPoint)}if(0===opts.digits&&-1!==initialValue.indexOf(radixPoint)&&(initialValue=initialValue.substring(0,initialValue.indexOf(radixPoint))),null!==opts.min||null!==opts.max){var numberValue=initialValue.toString().replace(radixPoint,".");null!==opts.min&&numberValue<opts.min?initialValue=opts.min.toString().replace(".",radixPoint):null!==opts.max&&numberValue>opts.max&&(initialValue=opts.max.toString().replace(".",radixPoint))}return isNagtive&&"-"!==initialValue.charAt(0)&&(initialValue="-"+initialValue),alignDigits(initialValue.toString().split(""),digits,opts,forceDigits).join("")},onBeforeWrite:function onBeforeWrite(e,buffer,caretPos,opts){function stripBuffer(buffer,stripRadix){if(!1!==opts.__financeInput||stripRadix){var position=buffer.indexOf(opts.radixPoint);-1!==position&&buffer.splice(position,1)}if(""!==opts.groupSeparator)for(;-1!==(position=buffer.indexOf(opts.groupSeparator));)buffer.splice(position,1);return buffer}var result,leadingzeroes=checkForLeadingZeroes(buffer,opts);if(leadingzeroes)for(var caretNdx=buffer.join("").lastIndexOf(leadingzeroes[0].split("").reverse().join(""))-(leadingzeroes[0]==leadingzeroes.input?0:1),offset=leadingzeroes[0]==leadingzeroes.input?1:0,i=leadingzeroes[0].length-offset;0<i;i--)delete this.maskset.validPositions[caretNdx+i],delete buffer[caretNdx+i];if(e)switch(e.type){case"blur":case"checkval":if(null!==opts.min){var unmasked=opts.onUnMask(buffer.slice().reverse().join(""),void 0,$.extend({},opts,{unmaskAsNumber:!0}));if(null!==opts.min&&unmasked<opts.min)return{refreshFromBuffer:!0,buffer:alignDigits(opts.min.toString().replace(".",opts.radixPoint).split(""),opts.digits,opts).reverse()}}if(buffer[buffer.length-1]===opts.negationSymbol.front){var nmbrMtchs=new RegExp("(^"+(""!=opts.negationSymbol.front?(0,_escapeRegex.default)(opts.negationSymbol.front)+"?":"")+(0,_escapeRegex.default)(opts.prefix)+")(.*)("+(0,_escapeRegex.default)(opts.suffix)+(""!=opts.negationSymbol.back?(0,_escapeRegex.default)(opts.negationSymbol.back)+"?":"")+"$)").exec(stripBuffer(buffer.slice(),!0).reverse().join("")),number=nmbrMtchs?nmbrMtchs[2]:"";0==number&&(result={refreshFromBuffer:!0,buffer:[0]})}else""!==opts.radixPoint&&buffer[0]===opts.radixPoint&&(result&&result.buffer?result.buffer.shift():(buffer.shift(),result={refreshFromBuffer:!0,buffer:stripBuffer(buffer)}));if(opts.enforceDigitsOnBlur){result=result||{};var bffr=result&&result.buffer||buffer.slice().reverse();result.refreshFromBuffer=!0,result.buffer=alignDigits(bffr,opts.digits,opts,!0).reverse()}}return result},onKeyDown:function onKeyDown(e,buffer,caretPos,opts){var $input=$(this),bffr;if(e.ctrlKey)switch(e.keyCode){case _keycode.default.UP:return this.inputmask.__valueSet.call(this,parseFloat(this.inputmask.unmaskedvalue())+parseInt(opts.step)),$input.trigger("setvalue"),!1;case _keycode.default.DOWN:return this.inputmask.__valueSet.call(this,parseFloat(this.inputmask.unmaskedvalue())-parseInt(opts.step)),$input.trigger("setvalue"),!1}if(!e.shiftKey&&(e.keyCode===_keycode.default.DELETE||e.keyCode===_keycode.default.BACKSPACE||e.keyCode===_keycode.default.BACKSPACE_SAFARI)&&caretPos.begin!==buffer.length){if(buffer[e.keyCode===_keycode.default.DELETE?caretPos.begin-1:caretPos.end]===opts.negationSymbol.front)return bffr=buffer.slice().reverse(),""!==opts.negationSymbol.front&&bffr.shift(),""!==opts.negationSymbol.back&&bffr.pop(),$input.trigger("setvalue",[bffr.join(""),caretPos.begin]),!1;if(!0===opts._radixDance){var radixPos=buffer.indexOf(opts.radixPoint);if(opts.digitsOptional){if(0===radixPos)return bffr=buffer.slice().reverse(),bffr.pop(),$input.trigger("setvalue",[bffr.join(""),caretPos.begin>=bffr.length?bffr.length:caretPos.begin]),!1}else if(-1!==radixPos&&(caretPos.begin<radixPos||caretPos.end<radixPos||e.keyCode===_keycode.default.DELETE&&caretPos.begin===radixPos))return caretPos.begin!==caretPos.end||e.keyCode!==_keycode.default.BACKSPACE&&e.keyCode!==_keycode.default.BACKSPACE_SAFARI||caretPos.begin++,bffr=buffer.slice().reverse(),bffr.splice(bffr.length-caretPos.begin,caretPos.begin-caretPos.end+1),bffr=alignDigits(bffr,opts.digits,opts).join(""),$input.trigger("setvalue",[bffr,caretPos.begin>=bffr.length?radixPos+1:caretPos.begin]),!1}}}},currency:{prefix:"",groupSeparator:",",alias:"numeric",digits:2,digitsOptional:!1},decimal:{alias:"numeric"},integer:{alias:"numeric",digits:0},percentage:{alias:"numeric",min:0,max:100,suffix:" %",digits:0,allowMinus:!1},indianns:{alias:"numeric",_mask:function _mask(opts){return"("+opts.groupSeparator+"99){*|1}("+opts.groupSeparator+"999){1|1}"},groupSeparator:",",radixPoint:".",placeholder:"0",digits:2,digitsOptional:!1}})},function(module,exports,__webpack_require__){"use strict";var _window=_interopRequireDefault(__webpack_require__(12)),_inputmask=_interopRequireDefault(__webpack_require__(1));function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&_setPrototypeOf(subClass,superClass)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else result=Super.apply(this,arguments);return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){return!call||"object"!==_typeof(call)&&"function"!=typeof call?_assertThisInitialized(self):call}function _assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function _wrapNativeSuper(Class){var _cache="function"==typeof Map?new Map:void 0;return _wrapNativeSuper=function _wrapNativeSuper(Class){if(null===Class||!_isNativeFunction(Class))return Class;if("function"!=typeof Class)throw new TypeError("Super expression must either be null or a function");if("undefined"!=typeof _cache){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}return Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(Wrapper,Class)},_wrapNativeSuper(Class)}function _construct(Parent,args,Class){return _construct=_isNativeReflectConstruct()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a),instance=new Constructor;return Class&&_setPrototypeOf(instance,Class.prototype),instance},_construct.apply(null,arguments)}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function _isNativeFunction(fn){return-1!==Function.toString.call(fn).indexOf("[native code]")}function _setPrototypeOf(o,p){return _setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o},_setPrototypeOf(o,p)}function _getPrototypeOf(o){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)},_getPrototypeOf(o)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var document=_window.default.document;if(document&&document.head&&document.head.attachShadow&&_window.default.customElements&&void 0===_window.default.customElements.get("input-mask")){var InputmaskElement=function(_HTMLElement){_inherits(InputmaskElement,_HTMLElement);var _super=_createSuper(InputmaskElement);function InputmaskElement(){var _this;_classCallCheck(this,InputmaskElement),_this=_super.call(this);var attributeNames=_this.getAttributeNames(),shadow=_this.attachShadow({mode:"closed"}),input=document.createElement("input");for(var attr in input.type="text",shadow.appendChild(input),attributeNames)Object.prototype.hasOwnProperty.call(attributeNames,attr)&&input.setAttribute(attributeNames[attr],_this.getAttribute(attributeNames[attr]));var im=new _inputmask.default;return im.dataAttribute="",im.mask(input),input.inputmask.shadowRoot=shadow,_this}return InputmaskElement}(_wrapNativeSuper(HTMLElement));_window.default.customElements.define("input-mask",InputmaskElement)}},function(module,exports,__webpack_require__){"use strict";var _jquery=_interopRequireDefault(__webpack_require__(8)),_inputmask=_interopRequireDefault(__webpack_require__(1));function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}void 0===_jquery.default.fn.inputmask&&(_jquery.default.fn.inputmask=function(fn,options){var nptmask,input=this[0];if(void 0===options&&(options={}),"string"==typeof fn)switch(fn){case"unmaskedvalue":return input&&input.inputmask?input.inputmask.unmaskedvalue():(0,_jquery.default)(input).val();case"remove":return this.each(function(){this.inputmask&&this.inputmask.remove()});case"getemptymask":return input&&input.inputmask?input.inputmask.getemptymask():"";case"hasMaskedValue":return!(!input||!input.inputmask)&&input.inputmask.hasMaskedValue();case"isComplete":return!input||!input.inputmask||input.inputmask.isComplete();case"getmetadata":return input&&input.inputmask?input.inputmask.getmetadata():void 0;case"setvalue":_inputmask.default.setValue(input,options);break;case"option":if("string"!=typeof options)return this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(options)});if(input&&void 0!==input.inputmask)return input.inputmask.option(options);break;default:return options.alias=fn,nptmask=new _inputmask.default(options),this.each(function(){nptmask.mask(this)})}else{if(Array.isArray(fn))return options.alias=fn,nptmask=new _inputmask.default(options),this.each(function(){nptmask.mask(this)});if("object"==_typeof(fn))return nptmask=new _inputmask.default(fn),void 0===fn.mask&&void 0===fn.alias?this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(fn);nptmask.mask(this)}):this.each(function(){nptmask.mask(this)});if(void 0===fn)return this.each(function(){nptmask=new _inputmask.default(options),nptmask.mask(this)})}})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _bundle=_interopRequireDefault(__webpack_require__(14));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}__webpack_require__(25);var _default=_bundle.default;exports.default=_default}],installedModules={},__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=26);function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}var modules,installedModules});
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/jquery.inputmask.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/html2pdf.bundle.js
===================================================================
--- base3.10/src/main/webapp/js/com/html2pdf.bundle.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/html2pdf.bundle.js (revision 7)
@@ -0,0 +1,9358 @@
+/**
+ * html2pdf.js v0.9.2
+ * Copyright (c) 2020 Erik Koopmans
+ * Released under the MIT License.
+ */
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.html2pdf = factory());
+}(this, (function () { 'use strict';
+
+var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function commonjsRequire () {
+ throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');
+}
+
+function unwrapExports (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+}
+
+function createCommonjsModule(fn, module) {
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
+}
+
+var jspdf_min = createCommonjsModule(function (module, exports) {
+!function(t,e){module.exports=e();}(commonjsGlobal,function(){var t,y,e,I,i,o,a,h,C,T,d,p,F,n,r,s,c,P,E,q,g,m,w,l,v,b,x,S,u,k,_,f,A,O,B,R,j,D,M,U,N,z,L,H,W,G,V,Y,X,J,K,Q,Z,vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$=function(pt){var gt="1.3",mt={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};function wt(o){var a={};this.subscribe=function(t,e,n){if("function"!=typeof e)return!1;a.hasOwnProperty(t)||(a[t]={});var r=Math.random().toString(35);return a[t][r]=[e,!!n], r}, this.unsubscribe=function(t){for(var e in a)if(a[e][t])return delete a[e][t], !0;return!1}, this.publish=function(t){if(a.hasOwnProperty(t)){var e=Array.prototype.slice.call(arguments,1),n=[];for(var r in a[t]){var i=a[t][r];try{i[0].apply(o,e);}catch(t){pt.console&&console.error("jsPDF PubSub Error",t.message,t);}i[1]&&n.push(r);}n.length&&n.forEach(this.unsubscribe);}};}function yt(t,e,n,r){var i={};"object"===(void 0===t?"undefined":vt(t))&&(t=(i=t).orientation, e=i.unit||e, n=i.format||n, r=i.compress||i.compressPdf||r), e=e||"mm", n=n||"a4", t=(""+(t||"P")).toLowerCase();(""+n).toLowerCase();var K,w,y,o,u,v,a,s,h,c,l,f=!!r&&"function"==typeof Uint8Array,Q=i.textColor||"0 g",d=i.drawColor||"0 G",Z=i.fontSize||16,$=i.charSpace||0,tt=i.R2L||!1,et=i.lineHeight||1.15,p=i.lineWidth||.200025,g="00000000000000000000000000000000",m=2,b=!1,x=[],nt={},S={},k=0,_=[],A=[],I=[],C=[],T=[],F=0,P=0,E=0,q={title:"",subject:"",author:"",keywords:"",creator:""},O={},rt=new wt(O),B=i.hotfixes||[],R=function(t){var e,n=t.ch1,r=t.ch2,i=t.ch3,o=t.ch4,a=(t.precision, "draw"===t.pdfColorType?["G","RG","K"]:["g","rg","k"]);if("string"==typeof n&&"#"!==n.charAt(0)){var s=new RGBColor(n);s.ok&&(n=s.toHex());}if("string"==typeof n&&/^#[0-9A-Fa-f]{3}$/.test(n)&&(n="#"+n[1]+n[1]+n[2]+n[2]+n[3]+n[3]), "string"==typeof n&&/^#[0-9A-Fa-f]{6}$/.test(n)){var h=parseInt(n.substr(1),16);n=h>>16&255, r=h>>8&255, i=255&h;}if(void 0===r||void 0===o&&n===r&&r===i)if("string"==typeof n)e=n+" "+a[0];else switch(t.precision){case 2:e=N(n/255)+" "+a[0];break;case 3:default:e=z(n/255)+" "+a[0];}else if(void 0===o||"object"===(void 0===o?"undefined":vt(o))){if("string"==typeof n)e=[n,r,i,a[1]].join(" ");else switch(t.precision){case 2:e=[N(n/255),N(r/255),N(i/255),a[1]].join(" ");break;default:case 3:e=[z(n/255),z(r/255),z(i/255),a[1]].join(" ");}o&&0===o.a&&(e=["255","255","255",a[1]].join(" "));}else if("string"==typeof n)e=[n,r,i,o,a[2]].join(" ");else switch(t.precision){case 2:e=[N(n),N(r),N(i),N(o),a[2]].join(" ");break;case 3:default:e=[z(n),z(r),z(i),z(o),a[2]].join(" ");}return e},j=function(t){var e=function(t){return("0"+parseInt(t)).slice(-2)},n=t.getTimezoneOffset(),r=n<0?"+":"-",i=Math.floor(Math.abs(n/60)),o=Math.abs(n%60),a=[r,e(i),"'",e(o),"'"].join("");return["D:",t.getFullYear(),e(t.getMonth()+1),e(t.getDate()),e(t.getHours()),e(t.getMinutes()),e(t.getSeconds()),a].join("")},D=function(t){var e;return void 0===(void 0===t?"undefined":vt(t))&&(t=new Date), e="object"===(void 0===t?"undefined":vt(t))&&"[object Date]"===Object.prototype.toString.call(t)?j(t):/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|\-0[0-9]|\-1[0-1])\'(0[0-9]|[1-5][0-9])\'?$/.test(t)?t:j(new Date), c=e},M=function(t){var e=c;return"jsDate"===t&&(e=function(t){var e=parseInt(t.substr(2,4),10),n=parseInt(t.substr(6,2),10)-1,r=parseInt(t.substr(8,2),10),i=parseInt(t.substr(10,2),10),o=parseInt(t.substr(12,2),10),a=parseInt(t.substr(14,2),10);parseInt(t.substr(16,2),10), parseInt(t.substr(20,2),10);return new Date(e,n,r,i,o,a,0)}(c)), e},U=function(t){return t=t||"12345678901234567890123456789012".split("").map(function(){return"ABCDEF0123456789".charAt(Math.floor(16*Math.random()))}).join(""), g=t},N=function(t){return t.toFixed(2)},z=function(t){return t.toFixed(3)},it=function(t){t="string"==typeof t?t:t.toString(), b?_[o].push(t):(E+=t.length+1, C.push(t));},L=function(){return x[++m]=E, it(m+" 0 obj"), m},H=function(t){it("stream"), it(t), it("endstream");},W=function(){for(var t in it("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"), it("/Font <<"), nt)nt.hasOwnProperty(t)&&it("/"+t+" "+nt[t].objectNumber+" 0 R");it(">>"), it("/XObject <<"), rt.publish("putXobjectDict"), it(">>");},G=function(){!function(){for(var t in nt)nt.hasOwnProperty(t)&&(e=nt[t], rt.publish("putFont",{font:e,out:it,newObject:L}), !0!==e.isAlreadyPutted&&(e.objectNumber=L(), it("<<"), it("/Type /Font"), it("/BaseFont /"+e.postScriptName), it("/Subtype /Type1"), "string"==typeof e.encoding&&it("/Encoding /"+e.encoding), it("/FirstChar 32"), it("/LastChar 255"), it(">>"), it("endobj")));var e;}(), rt.publish("putResources"), x[2]=E, it("2 0 obj"), it("<<"), W(), it(">>"), it("endobj"), rt.publish("postPutResources");},V=function(t,e,n){S.hasOwnProperty(e)||(S[e]={}), S[e][n]=t;},Y=function(t,e,n,r){var i="F"+(Object.keys(nt).length+1).toString(10),o=nt[i]={id:i,postScriptName:t,fontName:e,fontStyle:n,encoding:r,metadata:{}};return V(i,e,n), rt.publish("addFont",o), i},ot=function(t,e){return function(t,e){var n,r,i,o,a,s,h,c,l;if(i=(e=e||{}).sourceEncoding||"Unicode", a=e.outputEncoding, (e.autoencode||a)&&nt[K].metadata&&nt[K].metadata[i]&&nt[K].metadata[i].encoding&&(o=nt[K].metadata[i].encoding, !a&&nt[K].encoding&&(a=nt[K].encoding), !a&&o.codePages&&(a=o.codePages[0]), "string"==typeof a&&(a=o[a]), a)){for(h=!1, s=[], n=0, r=t.length;n<r;n++)(c=a[t.charCodeAt(n)])?s.push(String.fromCharCode(c)):s.push(t[n]), s[n].charCodeAt(0)>>8&&(h=!0);t=s.join("");}for(n=t.length;void 0===h&&0!==n;)t.charCodeAt(n-1)>>8&&(h=!0), n--;if(!h)return t;for(s=e.noBOM?[]:[254,255], n=0, r=t.length;n<r;n++){if((l=(c=t.charCodeAt(n))>>8)>>8)throw new Error("Character at position "+n+" of string '"+t+"' exceeds 16bits. Cannot be encoded into UCS-2 BE");s.push(l), s.push(c-(l<<8));}return String.fromCharCode.apply(void 0,s)}(t,e).replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},X=function(){(function(t,e){var n="string"==typeof e&&e.toLowerCase();if("string"==typeof t){var r=t.toLowerCase();mt.hasOwnProperty(r)&&(t=mt[r][0]/w, e=mt[r][1]/w);}if(Array.isArray(t)&&(e=t[1], t=t[0]), n){switch(n.substr(0,1)){case"l":t<e&&(n="s");break;case"p":e<t&&(n="s");}"s"===n&&(y=t, t=e, e=y);}b=!0, _[++k]=[], I[k]={width:Number(t)||u,height:Number(e)||v}, A[k]={}, J(k);}).apply(this,arguments), it(N(p*w)+" w"), it(d), 0!==F&&it(F+" J"), 0!==P&&it(P+" j"), rt.publish("addPage",{pageNumber:k});},J=function(t){0<t&&t<=k&&(u=I[o=t].width, v=I[t].height);},at=function(t,e,n){var r,i=void 0;return n=n||{}, t=void 0!==t?t:nt[K].fontName, e=void 0!==e?e:nt[K].fontStyle, r=t.toLowerCase(), void 0!==S[r]&&void 0!==S[r][e]?i=S[r][e]:void 0!==S[t]&&void 0!==S[t][e]?i=S[t][e]:!1===n.disableWarning&&console.warn("Unable to look up font label for font '"+t+"', '"+e+"'. Refer to getFontList() for available fonts."), i||n.noFallback||null==(i=S.times[e])&&(i=S.times.normal), i},st=function(){b=!1, m=2, E=0, C=[], x=[], T=[], rt.publish("buildDocument"), it("%PDF-"+gt), it("%ºß¬à"), function(){var t,e,n,r,i,o,a,s,h,c=[];for(a=pt.adler32cs||yt.API.adler32cs, f&&void 0===a&&(f=!1), t=1;t<=k;t++){if(c.push(L()), s=(u=I[t].width)*w, h=(v=I[t].height)*w, it("<</Type /Page"), it("/Parent 1 0 R"), it("/Resources 2 0 R"), it("/MediaBox [0 0 "+N(s)+" "+N(h)+"]"), rt.publish("putPage",{pageNumber:t,page:_[t]}), it("/Contents "+(m+1)+" 0 R"), it(">>"), it("endobj"), e=_[t].join("\n"), L(), f){for(n=[], r=e.length;r--;)n[r]=e.charCodeAt(r);o=a.from(e), (i=new Deflater(6)).append(new Uint8Array(n)), e=i.flush(), (n=new Uint8Array(e.length+6)).set(new Uint8Array([120,156])), n.set(e,2), n.set(new Uint8Array([255&o,o>>8&255,o>>16&255,o>>24&255]),e.length+2), e=String.fromCharCode.apply(null,n), it("<</Length "+e.length+" /Filter [/FlateDecode]>>");}else it("<</Length "+e.length+">>");H(e), it("endobj");}x[1]=E, it("1 0 obj"), it("<</Type /Pages");var l="/Kids [";for(r=0;r<k;r++)l+=c[r]+" 0 R ";it(l+"]"), it("/Count "+k), it(">>"), it("endobj"), rt.publish("postPutPages");}(), function(){rt.publish("putAdditionalObjects");for(var t=0;t<T.length;t++){var e=T[t];x[e.objId]=E, it(e.objId+" 0 obj"), it(e.content), it("endobj");}m+=T.length, rt.publish("postPutAdditionalObjects");}(), G(), L(), it("<<"), function(){for(var t in it("/Producer (jsPDF "+yt.version+")"), q)q.hasOwnProperty(t)&&q[t]&&it("/"+t.substr(0,1).toUpperCase()+t.substr(1)+" ("+ot(q[t])+")");it("/CreationDate ("+c+")");}(), it(">>"), it("endobj"), L(), it("<<"), function(){switch(it("/Type /Catalog"), it("/Pages 1 0 R"), s||(s="fullwidth"), s){case"fullwidth":it("/OpenAction [3 0 R /FitH null]");break;case"fullheight":it("/OpenAction [3 0 R /FitV null]");break;case"fullpage":it("/OpenAction [3 0 R /Fit]");break;case"original":it("/OpenAction [3 0 R /XYZ null null 1]");break;default:var t=""+s;"%"===t.substr(t.length-1)&&(s=parseInt(s)/100), "number"==typeof s&&it("/OpenAction [3 0 R /XYZ null null "+N(s)+"]");}switch(h||(h="continuous"), h){case"continuous":it("/PageLayout /OneColumn");break;case"single":it("/PageLayout /SinglePage");break;case"two":case"twoleft":it("/PageLayout /TwoColumnLeft");break;case"tworight":it("/PageLayout /TwoColumnRight");}a&&it("/PageMode /"+a), rt.publish("putCatalog");}(), it(">>"), it("endobj");var t,e=E,n="0000000000";for(it("xref"), it("0 "+(m+1)), it(n+" 65535 f "), t=1;t<=m;t++){var r=x[t];it("function"==typeof r?(n+x[t]()).slice(-10)+" 00000 n ":(n+x[t]).slice(-10)+" 00000 n ");}return it("trailer"), it("<<"), it("/Size "+(m+1)), it("/Root "+m+" 0 R"), it("/Info "+(m-1)+" 0 R"), it("/ID [ <"+g+"> <"+g+"> ]"), it(">>"), it("startxref"), it(""+e), it("%%EOF"), b=!0, C.join("\n")},ht=function(t){var e="S";return"F"===t?e="f":"FD"===t||"DF"===t?e="B":"f"!==t&&"f*"!==t&&"B"!==t&&"B*"!==t||(e=t), e},ct=function(){for(var t=st(),e=t.length,n=new ArrayBuffer(e),r=new Uint8Array(n);e--;)r[e]=t.charCodeAt(e);return n},lt=function(){return new Blob([ct()],{type:"application/pdf"})},ut=((l=function(t,e){var n="dataur"===(""+t).substr(0,6)?"data:application/pdf;base64,"+btoa(st()):0;switch(t){case void 0:return st();case"save":if("object"===("undefined"==typeof navigator?"undefined":vt(navigator))&&navigator.getUserMedia&&(void 0===pt.URL||void 0===pt.URL.createObjectURL))return O.output("dataurlnewwindow");bt(lt(),e), "function"==typeof bt.unload&&pt.setTimeout&&setTimeout(bt.unload,911);break;case"arraybuffer":return ct();case"blob":return lt();case"bloburi":case"bloburl":return pt.URL&&pt.URL.createObjectURL(lt())||void 0;case"datauristring":case"dataurlstring":return n;case"dataurlnewwindow":var r=pt.open(n);if(r||"undefined"==typeof safari)return r;case"datauri":case"dataurl":return pt.document.location.href=n;default:throw new Error('Output type "'+t+'" is not supported.')}}).foo=function(){try{return l.apply(this,arguments)}catch(t){var e=t.stack||"";~e.indexOf(" at ")&&(e=e.split(" at ")[1]);var n="Error in function "+e.split("\n")[0].split("<")[0]+": "+t.message;if(!pt.console)throw new Error(n);pt.console.error(n,t), pt.alert&&alert(n);}}, (l.foo.bar=l).foo),ft=function(t){return!0===Array.isArray(B)&&-1<B.indexOf(t)};switch(e){case"pt":w=1;break;case"mm":w=72/25.4;break;case"cm":w=72/2.54;break;case"in":w=72;break;case"px":w=1==ft("px_scaling")?.75:96/72;break;case"pc":case"em":w=12;break;case"ex":w=6;break;default:throw"Invalid unit: "+e}for(var dt in D(), U(), O.internal={pdfEscape:ot,getStyle:ht,getFont:function(){return nt[at.apply(O,arguments)]},getFontSize:function(){return Z},getCharSpace:function(){return $},getTextColor:function(){var t=Q.split(" ");if(2===t.length&&"g"===t[1]){var e=parseFloat(t[0]);t=[e,e,e,"r"];}for(var n="#",r=0;r<3;r++)n+=("0"+Math.floor(255*parseFloat(t[r])).toString(16)).slice(-2);return n},getLineHeight:function(){return Z*et},write:function(t){it(1===arguments.length?t:Array.prototype.join.call(arguments," "));},getCoordinateString:function(t){return N(t*w)},getVerticalCoordinateString:function(t){return N((v-t)*w)},collections:{},newObject:L,newAdditionalObject:function(){var t=2*_.length+1,e={objId:t+=T.length,content:""};return T.push(e), e},newObjectDeferred:function(){return x[++m]=function(){return E}, m},newObjectDeferredBegin:function(t){x[t]=E;},putStream:H,events:rt,scaleFactor:w,pageSize:{getWidth:function(){return u},getHeight:function(){return v}},output:function(t,e){return ut(t,e)},getNumberOfPages:function(){return _.length-1},pages:_,out:it,f2:N,getPageInfo:function(t){return{objId:2*(t-1)+3,pageNumber:t,pageContext:A[t]}},getCurrentPageInfo:function(){return{objId:2*(o-1)+3,pageNumber:o,pageContext:A[o]}},getPDFVersion:function(){return gt},hasHotfix:ft}, O.addPage=function(){return X.apply(this,arguments), this}, O.setPage=function(){return J.apply(this,arguments), this}, O.insertPage=function(t){return this.addPage(), this.movePage(o,t), this}, O.movePage=function(t,e){if(e<t){for(var n=_[t],r=I[t],i=A[t],o=t;e<o;o--)_[o]=_[o-1], I[o]=I[o-1], A[o]=A[o-1];_[e]=n, I[e]=r, A[e]=i, this.setPage(e);}else if(t<e){for(n=_[t], r=I[t], i=A[t], o=t;o<e;o++)_[o]=_[o+1], I[o]=I[o+1], A[o]=A[o+1];_[e]=n, I[e]=r, A[e]=i, this.setPage(e);}return this}, O.deletePage=function(){return function(t){0<t&&t<=k&&(_.splice(t,1), I.splice(t,1), --k<o&&(o=k), this.setPage(o));}.apply(this,arguments), this}, O.setCreationDate=function(t){return D(t), this}, O.getCreationDate=function(t){return M(t)}, O.setFileId=function(t){return U(t), this}, O.getFileId=function(){return g}, O.setDisplayMode=function(t,e,n){if(s=t, h=e, -1==[void 0,null,"UseNone","UseOutlines","UseThumbs","FullScreen"].indexOf(a=n))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "'+n+'" is not recognized.');return this}, O.text=function(t,e,n,i){var r,o,a="",s=et,h=this;function c(t){for(var e,n=t.concat(),r=[],i=n.length;i--;)"string"==typeof(e=n.shift())?r.push(e):"[object Array]"===Object.prototype.toString.call(t)&&1===e.length?r.push(e[0]):r.push([e[0],e[1],e[2]]);return r}function l(t,e){var n;if("string"==typeof t)n=e(t)[0];else if("[object Array]"===Object.prototype.toString.call(t)){for(var r,i,o=t.concat(),a=[],s=o.length;s--;)"string"==typeof(r=o.shift())?a.push(e(r)[0]):"[object Array]"===Object.prototype.toString.call(r)&&"string"===r[0]&&(i=e(r[0],r[1],r[2]), a.push([i[0],i[1],i[2]]));n=a;}return n}"number"==typeof t&&(o=n, n=e, e=t, t=o);var u=i,f=arguments[4],d=arguments[5];"object"===(void 0===u?"undefined":vt(u))&&null!==u||("string"==typeof f&&(d=f, f=null), "string"==typeof u&&(d=u, u=null), "number"==typeof u&&(f=u, u=null), i={flags:u,angle:f,align:d});var p=!1,g=!0;if("string"==typeof t)p=!0;else if("[object Array]"===Object.prototype.toString.call(t)){for(var m,w=t.concat(),y=[],v=w.length;v--;)("string"!=typeof(m=w.shift())||"[object Array]"===Object.prototype.toString.call(m)&&"string"!=typeof m[0])&&(g=!1);p=g;}if(!1===p)throw new Error('Type of text must be string or Array. "'+t+'" is not recognized.');var b=nt[K].encoding;"WinAnsiEncoding"!==b&&"StandardEncoding"!==b||(t=l(t,function(t,e,n){return[(r=t, r=r.split("\t").join(Array(i.TabLen||9).join(" ")), ot(r,u)),e,n];var r;})), "string"==typeof t&&(t=t.match(/[\r?\n]/)?t.split(/\r\n|\r|\n/g):[t]), 0<(j=i.maxWidth||0)&&("string"==typeof t?t=h.splitTextToSize(t,j):"[object Array]"===Object.prototype.toString.call(t)&&(t=h.splitTextToSize(t.join(" "),j)));var x={text:t,x:e,y:n,options:i,mutex:{pdfEscape:ot,activeFontKey:K,fonts:nt,activeFontSize:Z}};rt.publish("preProcessText",x), t=x.text;f=(i=x.options).angle;var S=h.internal.scaleFactor,k=(h.internal.pageSize.getHeight(), []);if(f){f*=Math.PI/180;var _=Math.cos(f),A=Math.sin(f),I=function(t){return t.toFixed(2)};k=[I(_),I(A),I(-1*A),I(_)];}void 0!==(R=i.charSpace)&&(a+=R+" Tc\n");i.lang;var C=-1,T=i.renderingMode||i.stroke,F=h.internal.getCurrentPageInfo().pageContext;switch(T){case 0:case!1:case"fill":C=0;break;case 1:case!0:case"stroke":C=1;break;case 2:case"fillThenStroke":C=2;break;case 3:case"invisible":C=3;break;case 4:case"fillAndAddForClipping":C=4;break;case 5:case"strokeAndAddPathForClipping":C=5;break;case 6:case"fillThenStrokeAndAddToPathForClipping":C=6;break;case 7:case"addToPathForClipping":C=7;}var P=F.usedRenderingMode||-1;-1!==C?a+=C+" Tr\n":-1!==P&&(a+="0 Tr\n"), -1!==C&&(F.usedRenderingMode=C);d=i.align||"left";var E=Z*s,q=h.internal.pageSize.getHeight(),O=h.internal.pageSize.getWidth(),B=(S=h.internal.scaleFactor, nt[K]),R=i.charSpace||$,j=i.maxWidth||0,D=(u={}, []);if("[object Array]"===Object.prototype.toString.call(t)){var M,U;y=c(t);"left"!==d&&(U=y.map(function(t){return h.getStringUnitWidth(t,{font:B,charSpace:R,fontSize:Z})*Z/S}));var N,z=Math.max.apply(Math,U),L=0;if("right"===d){e-=U[0], t=[];var H=0;for(v=y.length;H<v;H++)z-U[H], 0===H?(N=e*S, M=(q-n)*S):(N=(L-U[H])*S, M=-E), t.push([y[H],N,M]), L=U[H];}else if("center"===d){e-=U[0]/2, t=[];for(H=0, v=y.length;H<v;H++)(z-U[H])/2, 0===H?(N=e*S, M=(q-n)*S):(N=(L-U[H])/2*S, M=-E), t.push([y[H],N,M]), L=U[H];}else if("left"===d){t=[];for(H=0, v=y.length;H<v;H++)M=0===H?(q-n)*S:-E, N=0===H?e*S:0, t.push(y[H]);}else{if("justify"!==d)throw new Error('Unrecognized alignment option, use "left", "center", "right" or "justify".');t=[];for(j=0!==j?j:O, H=0, v=y.length;H<v;H++)M=0===H?(q-n)*S:-E, N=0===H?e*S:0, H<v-1&&D.push(((j-U[H])/(y[H].split(" ").length-1)*S).toFixed(2)), t.push([y[H],N,M]);}}!0===("boolean"==typeof i.R2L?i.R2L:tt)&&(t=l(t,function(t,e,n){return[t.split("").reverse().join(""),e,n]}));x={text:t,x:e,y:n,options:i,mutex:{pdfEscape:ot,activeFontKey:K,fonts:nt,activeFontSize:Z}};rt.publish("postProcessText",x), t=x.text, r=x.mutex.isHex;y=c(t);t=[];var W,G,V,Y=0,X=(v=y.length, "");for(H=0;H<v;H++)X="", "[object Array]"!==Object.prototype.toString.call(y[H])?(W=parseFloat(e*S).toFixed(2), G=parseFloat((q-n)*S).toFixed(2), V=(r?"<":"(")+y[H]+(r?">":")")):"[object Array]"===Object.prototype.toString.call(y[H])&&(W=parseFloat(y[H][1]).toFixed(2), G=parseFloat(y[H][2]).toFixed(2), V=(r?"<":"(")+y[H][0]+(r?">":")"), Y=1), void 0!==D&&void 0!==D[H]&&(X=D[H]+" Tw\n"), 0!==k.length&&0===H?t.push(X+k.join(" ")+" "+W+" "+G+" Tm\n"+V):1===Y||0===Y&&0===H?t.push(X+W+" "+G+" Td\n"+V):t.push(X+V);t=0===Y?t.join(" Tj\nT* "):t.join(" Tj\n"), t+=" Tj\n";var J="BT\n/"+K+" "+Z+" Tf\n"+(Z*s).toFixed(2)+" TL\n"+Q+"\n";return J+=a, J+=t, it(J+="ET"), h}, O.lstext=function(t,e,n,r){console.warn("jsPDF.lstext is deprecated");for(var i=0,o=t.length;i<o;i++, e+=r)this.text(t[i],e,n);return this}, O.line=function(t,e,n,r){return this.lines([[n-t,r-e]],t,e)}, O.clip=function(){it("W"), it("S");}, O.clip_fixed=function(t){it("evenodd"===t?"W*":"W"), it("n");}, O.lines=function(t,e,n,r,i,o){var a,s,h,c,l,u,f,d,p,g,m;for("number"==typeof t&&(y=n, n=e, e=t, t=y), r=r||[1,1], it(z(e*w)+" "+z((v-n)*w)+" m "), a=r[0], s=r[1], c=t.length, g=e, m=n, h=0;h<c;h++)2===(l=t[h]).length?(g=l[0]*a+g, m=l[1]*s+m, it(z(g*w)+" "+z((v-m)*w)+" l")):(u=l[0]*a+g, f=l[1]*s+m, d=l[2]*a+g, p=l[3]*s+m, g=l[4]*a+g, m=l[5]*s+m, it(z(u*w)+" "+z((v-f)*w)+" "+z(d*w)+" "+z((v-p)*w)+" "+z(g*w)+" "+z((v-m)*w)+" c"));return o&&it(" h"), null!==i&&it(ht(i)), this}, O.rect=function(t,e,n,r,i){ht(i);return it([N(t*w),N((v-e)*w),N(n*w),N(-r*w),"re"].join(" ")), null!==i&&it(ht(i)), this}, O.triangle=function(t,e,n,r,i,o,a){return this.lines([[n-t,r-e],[i-n,o-r],[t-i,e-o]],t,e,[1,1],a,!0), this}, O.roundedRect=function(t,e,n,r,i,o,a){var s=4/3*(Math.SQRT2-1);return this.lines([[n-2*i,0],[i*s,0,i,o-o*s,i,o],[0,r-2*o],[0,o*s,-i*s,o,-i,o],[2*i-n,0],[-i*s,0,-i,-o*s,-i,-o],[0,2*o-r],[0,-o*s,i*s,-o,i,-o]],t+i,e,[1,1],a), this}, O.ellipse=function(t,e,n,r,i){var o=4/3*(Math.SQRT2-1)*n,a=4/3*(Math.SQRT2-1)*r;return it([N((t+n)*w),N((v-e)*w),"m",N((t+n)*w),N((v-(e-a))*w),N((t+o)*w),N((v-(e-r))*w),N(t*w),N((v-(e-r))*w),"c"].join(" ")), it([N((t-o)*w),N((v-(e-r))*w),N((t-n)*w),N((v-(e-a))*w),N((t-n)*w),N((v-e)*w),"c"].join(" ")), it([N((t-n)*w),N((v-(e+a))*w),N((t-o)*w),N((v-(e+r))*w),N(t*w),N((v-(e+r))*w),"c"].join(" ")), it([N((t+o)*w),N((v-(e+r))*w),N((t+n)*w),N((v-(e+a))*w),N((t+n)*w),N((v-e)*w),"c"].join(" ")), null!==i&&it(ht(i)), this}, O.circle=function(t,e,n,r){return this.ellipse(t,e,n,n,r)}, O.setProperties=function(t){for(var e in q)q.hasOwnProperty(e)&&t[e]&&(q[e]=t[e]);return this}, O.setFontSize=function(t){return Z=t, this}, O.setFont=function(t,e){return K=at(t,e), this}, O.setFontStyle=O.setFontType=function(t){return K=at(void 0,t), this}, O.getFontList=function(){var t,e,n,r={};for(t in S)if(S.hasOwnProperty(t))for(e in r[t]=n=[], S[t])S[t].hasOwnProperty(e)&&n.push(e);return r}, O.addFont=function(t,e,n,r){Y(t,e,n,r=r||"Identity-H");}, O.setLineWidth=function(t){return it((t*w).toFixed(2)+" w"), this}, O.setDrawColor=function(t,e,n,r){return it(R({ch1:t,ch2:e,ch3:n,ch4:r,pdfColorType:"draw",precision:2})), this}, O.setFillColor=function(t,e,n,r){return it(R({ch1:t,ch2:e,ch3:n,ch4:r,pdfColorType:"fill",precision:2})), this}, O.setTextColor=function(t,e,n,r){return Q=R({ch1:t,ch2:e,ch3:n,ch4:r,pdfColorType:"text",precision:3}), this}, O.setCharSpace=function(t){return $=t, this}, O.setR2L=function(t){return tt=t, this}, O.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2}, O.setLineCap=function(t){var e=this.CapJoinStyles[t];if(void 0===e)throw new Error("Line cap style of '"+t+"' is not recognized. See or extend .CapJoinStyles property for valid styles");return it((F=e)+" J"), this}, O.setLineJoin=function(t){var e=this.CapJoinStyles[t];if(void 0===e)throw new Error("Line join style of '"+t+"' is not recognized. See or extend .CapJoinStyles property for valid styles");return it((P=e)+" j"), this}, O.output=ut, O.save=function(t){O.output("save",t);}, yt.API)yt.API.hasOwnProperty(dt)&&("events"===dt&&yt.API.events.length?function(t,e){var n,r,i;for(i=e.length-1;-1!==i;i--)n=e[i][0], r=e[i][1], t.subscribe.apply(t,[n].concat("function"==typeof r?[r]:r));}(rt,yt.API.events):O[dt]=yt.API[dt]);return function(){for(var t="helvetica",e="times",n="courier",r="normal",i="bold",o="italic",a="bolditalic",s=[["Helvetica",t,r,"WinAnsiEncoding"],["Helvetica-Bold",t,i,"WinAnsiEncoding"],["Helvetica-Oblique",t,o,"WinAnsiEncoding"],["Helvetica-BoldOblique",t,a,"WinAnsiEncoding"],["Courier",n,r,"WinAnsiEncoding"],["Courier-Bold",n,i,"WinAnsiEncoding"],["Courier-Oblique",n,o,"WinAnsiEncoding"],["Courier-BoldOblique",n,a,"WinAnsiEncoding"],["Times-Roman",e,r,"WinAnsiEncoding"],["Times-Bold",e,i,"WinAnsiEncoding"],["Times-Italic",e,o,"WinAnsiEncoding"],["Times-BoldItalic",e,a,"WinAnsiEncoding"],["ZapfDingbats","zapfdingbats",r,null],["Symbol","symbol",r,null]],h=0,c=s.length;h<c;h++){var l=Y(s[h][0],s[h][1],s[h][2],s[h][3]),u=s[h][0].split("-");V(l,u[0],u[1]||"");}rt.publish("addFonts",{fonts:nt,dictionary:S});}(), K="F1", X(n,t), rt.publish("initialized"), O}return yt.API={events:[]}, yt.version="0.0.0", "function"==typeof undefined&&undefined.amd?undefined("jsPDF",function(){return yt}):"undefined"!='object'&&module.exports?(module.exports=yt, module.exports.jsPDF=yt):pt.jsPDF=yt, yt}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||Function('return typeof this === "object" && this.content')()||Function("return this")());
+/** @preserve
+ * jsPDF - PDF Document creation from JavaScript
+ * Version 1.4.1 Built on 2018-06-06T07:49:34.040Z
+ * CommitID 3233f44044
+ *
+ * Copyright (c) 2010-2016 James Hall <james@parall.ax>, https://github.com/MrRio/jsPDF
+ * 2010 Aaron Spike, https://github.com/acspike
+ * 2012 Willow Systems Corporation, willow-systems.com
+ * 2012 Pablo Hess, https://github.com/pablohess
+ * 2012 Florian Jenett, https://github.com/fjenett
+ * 2013 Warren Weckesser, https://github.com/warrenweckesser
+ * 2013 Youssef Beddad, https://github.com/lifof
+ * 2013 Lee Driscoll, https://github.com/lsdriscoll
+ * 2013 Stefan Slonevskiy, https://github.com/stefslon
+ * 2013 Jeremy Morel, https://github.com/jmorel
+ * 2013 Christoph Hartmann, https://github.com/chris-rock
+ * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria
+ * 2014 James Makes, https://github.com/dollaruw
+ * 2014 Diego Casorran, https://github.com/diegocr
+ * 2014 Steven Spungin, https://github.com/Flamenco
+ * 2014 Kenneth Glassey, https://github.com/Gavvers
+ *
+ * Licensed under the MIT License
+ *
+ * Contributor(s):
+ * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,
+ * kim3er, mfo, alnorth, Flamenco
+ */
+/**
+ * jsPDF AcroForm Plugin Copyright (c) 2016 Alexander Weidt,
+ * https://github.com/BiggA94
+ *
+ * Licensed under the MIT License. http://opensource.org/licenses/mit-license
+ */
+!function(n,t){var l,a,e=1,r=function(t,e){t.prototype=Object.create(e.prototype), t.prototype.constructor=t;},s=function(t){return t*(e/1)},h=function(t){var e=new I,n=N.internal.getHeight(t)||0,r=N.internal.getWidth(t)||0;return e.BBox=[0,0,r.toFixed(2),n.toFixed(2)], e},i=function(t,e,n){t=t||0;var r=1;if(r<<=e-1, 1==(n=n||1))t=t|r;else t=t&~r;return t},o=function(t,e,n){n=n||1.3, t=t||0;return 1==e.readOnly&&(t=i(t,1)), 1==e.required&&(t=i(t,2)), 1==e.noExport&&(t=i(t,3)), 1==e.multiline&&(t=i(t,13)), e.password&&(t=i(t,14)), e.noToggleToOff&&(t=i(t,15)), e.radio&&(t=i(t,16)), e.pushbutton&&(t=i(t,17)), e.combo&&(t=i(t,18)), e.edit&&(t=i(t,19)), e.sort&&(t=i(t,20)), e.fileSelect&&1.4<=n&&(t=i(t,21)), e.multiSelect&&1.4<=n&&(t=i(t,22)), e.doNotSpellCheck&&1.4<=n&&(t=i(t,23)), 1==e.doNotScroll&&1.4<=n&&(t=i(t,24)), e.richText&&1.4<=n&&(t=i(t,25)), t},u=function(t){var e=t[0],n=t[1],r=t[2],i=t[3],o={};return Array.isArray(e)?(e[0]=s(e[0]), e[1]=s(e[1]), e[2]=s(e[2]), e[3]=s(e[3])):(e=s(e), n=s(n), r=s(r), i=s(i)), o.lowerLeft_X=e||0, o.lowerLeft_Y=s(a)-n-i||0, o.upperRight_X=e+r||0, o.upperRight_Y=s(a)-n||0, [o.lowerLeft_X.toFixed(2),o.lowerLeft_Y.toFixed(2),o.upperRight_X.toFixed(2),o.upperRight_Y.toFixed(2)]},f=function(t){if(t.appearanceStreamContent)return t.appearanceStreamContent;if(t.V||t.DV){var e=[],n=t.V||t.DV,r=c(t,n);e.push("/Tx BMC"), e.push("q"), e.push("/F1 "+r.fontSize.toFixed(2)+" Tf"), e.push("1 0 0 1 0 0 Tm"), e.push("BT"), e.push(r.text), e.push("ET"), e.push("Q"), e.push("EMC");var i=new h(t);return i.stream=e.join("\n"), i}},c=function(t,e,i,n){n=n||12, i=i||"helvetica";var r={text:"",fontSize:""},o=(e=")"==(e="("==e.substr(0,1)?e.substr(1):e).substr(e.length-1)?e.substr(0,e.length-1):e).split(" "),a=n,s=N.internal.getHeight(t)||0;s=s<0?-s:s;var h=N.internal.getWidth(t)||0;h=h<0?-h:h;var c=function(t,e,n){if(t+1<o.length){var r=e+" "+o[t+1];return A(r,n+"px",i).width<=h-4}return!1};a++;t:for(;;){e="";var l=A("3",--a+"px",i).height,u=t.multiline?s-a:(s-l)/2,f=-2,d=u+=2,p=0,g=0,m=0;if(a<=0){a=12, e="(...) Tj\n", e+="% Width of Text: "+A(e,"1px").width+", FieldWidth:"+h+"\n";break}m=A(o[0]+" ",a+"px",i).width;var w="",y=0;for(var v in o){w=" "==(w+=o[v]+" ").substr(w.length-1)?w.substr(0,w.length-1):w;var b=parseInt(v);m=A(w+" ",a+"px",i).width;var x=c(b,w,a),S=v>=o.length-1;if(!x||S){if(x||S){if(S)g=b;else if(t.multiline&&s<(l+2)*(y+2)+2)continue t}else{if(!t.multiline)continue t;if(s<(l+2)*(y+2)+2)continue t;g=b;}for(var k="",_=p;_<=g;_++)k+=o[_]+" ";switch(k=" "==k.substr(k.length-1)?k.substr(0,k.length-1):k, m=A(k,a+"px",i).width, t.Q){case 2:f=h-m-2;break;case 1:f=(h-m)/2;break;case 0:default:f=2;}e+=f.toFixed(2)+" "+d.toFixed(2)+" Td\n", e+="("+k+") Tj\n", e+=-f.toFixed(2)+" 0 Td\n", d=-(a+2), m=0, p=g+1, y++, w="";}else w+=" ";}break}return r.text=e, r.fontSize=a, r},A=function(t,e,n){n=n||"helvetica";var r=l.internal.getFont(n),i=l.getStringUnitWidth(t,{font:r,fontSize:parseFloat(e),charSpace:0})*parseFloat(e);return{height:l.getStringUnitWidth("3",{font:r,fontSize:parseFloat(e),charSpace:0})*parseFloat(e)*1.5,width:i}},d={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},p=function(){for(var t in l.internal.acroformPlugin.acroFormDictionaryRoot.Fields){var e=l.internal.acroformPlugin.acroFormDictionaryRoot.Fields[t];e.hasAnnotation&&m.call(l,e);}},g=function(t){l.internal.acroformPlugin.printedOut&&(l.internal.acroformPlugin.printedOut=!1, l.internal.acroformPlugin.acroFormDictionaryRoot=null), l.internal.acroformPlugin.acroFormDictionaryRoot||x.call(l), l.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t);},m=function(t){var e={type:"reference",object:t};l.annotationPlugin.annotations[l.internal.getPageInfo(t.page).pageNumber].push(e);},w=function(){void 0!==l.internal.acroformPlugin.acroFormDictionaryRoot?l.internal.write("/AcroForm "+l.internal.acroformPlugin.acroFormDictionaryRoot.objId+" 0 R"):console.log("Root missing...");},y=function(){l.internal.events.unsubscribe(l.internal.acroformPlugin.acroFormDictionaryRoot._eventID), delete l.internal.acroformPlugin.acroFormDictionaryRoot._eventID, l.internal.acroformPlugin.printedOut=!0;},v=function(t){var e=!t;t||(l.internal.newObjectDeferredBegin(l.internal.acroformPlugin.acroFormDictionaryRoot.objId), l.internal.out(l.internal.acroformPlugin.acroFormDictionaryRoot.getString()));t=t||l.internal.acroformPlugin.acroFormDictionaryRoot.Kids;for(var n in t){var r=t[n],i=r.Rect;r.Rect&&(r.Rect=u.call(this,r.Rect)), l.internal.newObjectDeferredBegin(r.objId);var o=r.objId+" 0 obj\n<<\n";if("object"===(void 0===r?"undefined":vt(r))&&"function"==typeof r.getContent&&(o+=r.getContent()), r.Rect=i, r.hasAppearanceStream&&!r.appearanceStreamContent){var a=f.call(this,r);o+="/AP << /N "+a+" >>\n", l.internal.acroformPlugin.xForms.push(a);}if(r.appearanceStreamContent){for(var s in o+="/AP << ", r.appearanceStreamContent){var h=r.appearanceStreamContent[s];if(o+="/"+s+" ", o+="<< ", 1<=Object.keys(h).length||Array.isArray(h))for(var n in h){var c;"function"==typeof(c=h[n])&&(c=c.call(this,r)), o+="/"+n+" "+c+" ", 0<=l.internal.acroformPlugin.xForms.indexOf(c)||l.internal.acroformPlugin.xForms.push(c);}else"function"==typeof(c=h)&&(c=c.call(this,r)), o+="/"+n+" "+c+" \n", 0<=l.internal.acroformPlugin.xForms.indexOf(c)||l.internal.acroformPlugin.xForms.push(c);o+=" >>\n";}o+=">>\n";}o+=">>\nendobj\n", l.internal.out(o);}e&&b.call(this,l.internal.acroformPlugin.xForms);},b=function(t){for(var e in t){var n=e,r=t[e];l.internal.newObjectDeferredBegin(r&&r.objId);var i="";"object"===(void 0===r?"undefined":vt(r))&&"function"==typeof r.getString&&(i=r.getString()), l.internal.out(i), delete t[n];}},x=function(){if(void 0!==this.internal&&(void 0===this.internal.acroformPlugin||!1===this.internal.acroformPlugin.isInitialized)){if(l=this, T.FieldNum=0, this.internal.acroformPlugin=JSON.parse(JSON.stringify(d)), this.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error("Exception while creating AcroformDictionary");e=l.internal.scaleFactor, a=l.internal.pageSize.getHeight(), l.internal.acroformPlugin.acroFormDictionaryRoot=new C, l.internal.acroformPlugin.acroFormDictionaryRoot._eventID=l.internal.events.subscribe("postPutResources",y), l.internal.events.subscribe("buildDocument",p), l.internal.events.subscribe("putCatalog",w), l.internal.events.subscribe("postPutPages",v), l.internal.acroformPlugin.isInitialized=!0;}},S=function(t){if(Array.isArray(t)){var e=" [";for(var n in t){e+=t[n].toString(), e+=n<t.length-1?" ":"";}return e+="]"}},k=function(t){return 0!==(t=t||"").indexOf("(")&&(t="("+t), ")"!=t.substring(t.length-1)&&(t+=")"), t},_=function(){var t;Object.defineProperty(this,"objId",{get:function(){return t||(t=l.internal.newObjectDeferred()), t||console.log("Couldn't create Object ID"), t},configurable:!1});};_.prototype.toString=function(){return this.objId+" 0 R"}, _.prototype.getString=function(){var t=this.objId+" 0 obj\n<<";return t+=this.getContent()+">>\n", this.stream&&(t+="stream\n", t+=this.stream, t+="\nendstream\n"), t+="endobj\n"}, _.prototype.getContent=function(){var t="";return t+=function(t){var e="",n=Object.keys(t).filter(function(t){return"content"!=t&&"appearanceStreamContent"!=t&&"_"!=t.substring(0,1)});for(var r in n){var i=n[r],o=t[i];o&&(Array.isArray(o)?e+="/"+i+" "+S(o)+"\n":e+=o instanceof _?"/"+i+" "+o.objId+" 0 R\n":"/"+i+" "+o+"\n");}return e}(this)};var I=function(){var e;_.call(this), this.Type="/XObject", this.Subtype="/Form", this.FormType=1, this.BBox, this.Matrix, this.Resources="2 0 R", this.PieceInfo, Object.defineProperty(this,"Length",{enumerable:!0,get:function(){return void 0!==e?e.length:0}}), Object.defineProperty(this,"stream",{enumerable:!1,set:function(t){e=t.trim();},get:function(){return e||null}});};r(I,_);var C=function(){_.call(this);var t=[];Object.defineProperty(this,"Kids",{enumerable:!1,configurable:!0,get:function(){return 0<t.length?t:void 0}}), Object.defineProperty(this,"Fields",{enumerable:!0,configurable:!0,get:function(){return t}}), this.DA;};r(C,_);var T=function t(){var e;_.call(this), Object.defineProperty(this,"Rect",{enumerable:!0,configurable:!1,get:function(){if(e)return e},set:function(t){e=t;}});var n,r,i,o,a="";Object.defineProperty(this,"FT",{enumerable:!0,set:function(t){a=t;},get:function(){return a}}), Object.defineProperty(this,"T",{enumerable:!0,configurable:!1,set:function(t){n=t;},get:function(){if(!n||n.length<1){if(this instanceof j)return;return"(FieldObject"+t.FieldNum+++")"}return"("==n.substring(0,1)&&n.substring(n.length-1)?n:"("+n+")"}}), Object.defineProperty(this,"DA",{enumerable:!0,get:function(){if(r)return"("+r+")"},set:function(t){r=t;}}), Object.defineProperty(this,"DV",{enumerable:!0,configurable:!0,get:function(){if(i)return i},set:function(t){i=t;}}), Object.defineProperty(this,"V",{enumerable:!0,configurable:!0,get:function(){if(o)return o},set:function(t){o=t;}}), Object.defineProperty(this,"Type",{enumerable:!0,get:function(){return this.hasAnnotation?"/Annot":null}}), Object.defineProperty(this,"Subtype",{enumerable:!0,get:function(){return this.hasAnnotation?"/Widget":null}}), this.BG, Object.defineProperty(this,"hasAnnotation",{enumerable:!1,get:function(){return!!(this.Rect||this.BC||this.BG)}}), Object.defineProperty(this,"hasAppearanceStream",{enumerable:!1,configurable:!0,writable:!0}), Object.defineProperty(this,"page",{enumerable:!1,configurable:!0,writable:!0});};r(T,_);var F=function(){T.call(this), this.FT="/Ch", this.Opt=[], this.V="()", this.TI=0;var e=!1;Object.defineProperty(this,"combo",{enumerable:!1,get:function(){return e},set:function(t){e=t;}}), Object.defineProperty(this,"edit",{enumerable:!0,set:function(t){1==t?(this._edit=!0, this.combo=!0):this._edit=!1;},get:function(){return!!this._edit&&this._edit},configurable:!1}), this.hasAppearanceStream=!0;};r(F,T);var P=function(){F.call(this), this.combo=!1;};r(P,F);var E=function(){P.call(this), this.combo=!0;};r(E,P);var q=function(){E.call(this), this.edit=!0;};r(q,E);var O=function(){T.call(this), this.FT="/Btn";};r(O,T);var B=function(){O.call(this);var e=!0;Object.defineProperty(this,"pushbutton",{enumerable:!1,get:function(){return e},set:function(t){e=t;}});};r(B,O);var R=function(){O.call(this);var e=!0;Object.defineProperty(this,"radio",{enumerable:!1,get:function(){return e},set:function(t){e=t;}});var n,t=[];Object.defineProperty(this,"Kids",{enumerable:!0,get:function(){if(0<t.length)return t}}), Object.defineProperty(this,"__Kids",{get:function(){return t}}), Object.defineProperty(this,"noToggleToOff",{enumerable:!1,get:function(){return n},set:function(t){n=t;}});};r(R,O);var j=function(t,e){T.call(this), this.Parent=t, this._AppearanceType=N.RadioButton.Circle, this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(e), this.F=i(this.F,3,1), this.MK=this._AppearanceType.createMK(), this.AS="/Off", this._Name=e;};r(j,T), R.prototype.setAppearance=function(t){if("createAppearanceStream"in t&&"createMK"in t)for(var e in this.__Kids){var n=this.__Kids[e];n.appearanceStreamContent=t.createAppearanceStream(n._Name), n.MK=t.createMK();}else console.log("Couldn't assign Appearance to RadioButton. Appearance was Invalid!");}, R.prototype.createOption=function(t){this.__Kids.length;var e=new j(this,t);return this.__Kids.push(e), n.addField(e), e};var D=function(){O.call(this), this.appearanceStreamContent=N.CheckBox.createAppearanceStream(), this.MK=N.CheckBox.createMK(), this.AS="/On", this.V="/On";};r(D,O);var M=function(){var e,n;T.call(this), this.DA=N.createDefaultAppearanceStream(), this.F=4, Object.defineProperty(this,"V",{get:function(){return e?k(e):e},enumerable:!0,set:function(t){e=t;}}), Object.defineProperty(this,"DV",{get:function(){return n?k(n):n},enumerable:!0,set:function(t){n=t;}});var r=!1;Object.defineProperty(this,"multiline",{enumerable:!1,get:function(){return r},set:function(t){r=t;}});var i=!1;Object.defineProperty(this,"fileSelect",{enumerable:!1,get:function(){return i},set:function(t){i=t;}});var o=!1;Object.defineProperty(this,"doNotSpellCheck",{enumerable:!1,get:function(){return o},set:function(t){o=t;}});var a=!1;Object.defineProperty(this,"doNotScroll",{enumerable:!1,get:function(){return a},set:function(t){a=t;}});var s=!1;Object.defineProperty(this,"MaxLen",{enumerable:!0,get:function(){return s},set:function(t){s=t;}}), Object.defineProperty(this,"hasAppearanceStream",{enumerable:!1,get:function(){return this.V||this.DV}});};r(M,T);var U=function(){M.call(this);var e=!0;Object.defineProperty(this,"password",{enumerable:!1,get:function(){return e},set:function(t){e=t;}});};r(U,M);var N={CheckBox:{createAppearanceStream:function(){return{N:{On:N.CheckBox.YesNormal},D:{On:N.CheckBox.YesPushDown,Off:N.CheckBox.OffPushDown}}},createMK:function(){return"<< /CA (3)>>"},YesPushDown:function(t){var e=h(t),n=[],r=l.internal.getFont("zapfdingbats","normal").id;t.Q=1;var i=c(t,"3","ZapfDingbats",50);return n.push("0.749023 g"), n.push("0 0 "+N.internal.getWidth(t).toFixed(2)+" "+N.internal.getHeight(t).toFixed(2)+" re"), n.push("f"), n.push("BMC"), n.push("q"), n.push("0 0 1 rg"), n.push("/"+r+" "+i.fontSize.toFixed(2)+" Tf 0 g"), n.push("BT"), n.push(i.text), n.push("ET"), n.push("Q"), n.push("EMC"), e.stream=n.join("\n"), e},YesNormal:function(t){var e=h(t),n=l.internal.getFont("zapfdingbats","normal").id,r=[];t.Q=1;var i=N.internal.getHeight(t),o=N.internal.getWidth(t),a=c(t,"3","ZapfDingbats",.9*i);return r.push("1 g"), r.push("0 0 "+o.toFixed(2)+" "+i.toFixed(2)+" re"), r.push("f"), r.push("q"), r.push("0 0 1 rg"), r.push("0 0 "+(o-1).toFixed(2)+" "+(i-1).toFixed(2)+" re"), r.push("W"), r.push("n"), r.push("0 g"), r.push("BT"), r.push("/"+n+" "+a.fontSize.toFixed(2)+" Tf 0 g"), r.push(a.text), r.push("ET"), r.push("Q"), e.stream=r.join("\n"), e},OffPushDown:function(t){var e=h(t),n=[];return n.push("0.749023 g"), n.push("0 0 "+N.internal.getWidth(t).toFixed(2)+" "+N.internal.getHeight(t).toFixed(2)+" re"), n.push("f"), e.stream=n.join("\n"), e}},RadioButton:{Circle:{createAppearanceStream:function(t){var e={D:{Off:N.RadioButton.Circle.OffPushDown},N:{}};return e.N[t]=N.RadioButton.Circle.YesNormal, e.D[t]=N.RadioButton.Circle.YesPushDown, e},createMK:function(){return"<< /CA (l)>>"},YesNormal:function(t){var e=h(t),n=[],r=N.internal.getWidth(t)<=N.internal.getHeight(t)?N.internal.getWidth(t)/4:N.internal.getHeight(t)/4;r*=.9;var i=N.internal.Bezier_C;return n.push("q"), n.push("1 0 0 1 "+N.internal.getWidth(t)/2+" "+N.internal.getHeight(t)/2+" cm"), n.push(r+" 0 m"), n.push(r+" "+r*i+" "+r*i+" "+r+" 0 "+r+" c"), n.push("-"+r*i+" "+r+" -"+r+" "+r*i+" -"+r+" 0 c"), n.push("-"+r+" -"+r*i+" -"+r*i+" -"+r+" 0 -"+r+" c"), n.push(r*i+" -"+r+" "+r+" -"+r*i+" "+r+" 0 c"), n.push("f"), n.push("Q"), e.stream=n.join("\n"), e},YesPushDown:function(t){var e=h(t),n=[],r=N.internal.getWidth(t)<=N.internal.getHeight(t)?N.internal.getWidth(t)/4:N.internal.getHeight(t)/4,i=2*(r*=.9),o=i*N.internal.Bezier_C,a=r*N.internal.Bezier_C;return n.push("0.749023 g"), n.push("q"), n.push("1 0 0 1 "+(N.internal.getWidth(t)/2).toFixed(2)+" "+(N.internal.getHeight(t)/2).toFixed(2)+" cm"), n.push(i+" 0 m"), n.push(i+" "+o+" "+o+" "+i+" 0 "+i+" c"), n.push("-"+o+" "+i+" -"+i+" "+o+" -"+i+" 0 c"), n.push("-"+i+" -"+o+" -"+o+" -"+i+" 0 -"+i+" c"), n.push(o+" -"+i+" "+i+" -"+o+" "+i+" 0 c"), n.push("f"), n.push("Q"), n.push("0 g"), n.push("q"), n.push("1 0 0 1 "+(N.internal.getWidth(t)/2).toFixed(2)+" "+(N.internal.getHeight(t)/2).toFixed(2)+" cm"), n.push(r+" 0 m"), n.push(r+" "+a+" "+a+" "+r+" 0 "+r+" c"), n.push("-"+a+" "+r+" -"+r+" "+a+" -"+r+" 0 c"), n.push("-"+r+" -"+a+" -"+a+" -"+r+" 0 -"+r+" c"), n.push(a+" -"+r+" "+r+" -"+a+" "+r+" 0 c"), n.push("f"), n.push("Q"), e.stream=n.join("\n"), e},OffPushDown:function(t){var e=h(t),n=[],r=N.internal.getWidth(t)<=N.internal.getHeight(t)?N.internal.getWidth(t)/4:N.internal.getHeight(t)/4,i=2*(r*=.9),o=i*N.internal.Bezier_C;return n.push("0.749023 g"), n.push("q"), n.push("1 0 0 1 "+(N.internal.getWidth(t)/2).toFixed(2)+" "+(N.internal.getHeight(t)/2).toFixed(2)+" cm"), n.push(i+" 0 m"), n.push(i+" "+o+" "+o+" "+i+" 0 "+i+" c"), n.push("-"+o+" "+i+" -"+i+" "+o+" -"+i+" 0 c"), n.push("-"+i+" -"+o+" -"+o+" -"+i+" 0 -"+i+" c"), n.push(o+" -"+i+" "+i+" -"+o+" "+i+" 0 c"), n.push("f"), n.push("Q"), e.stream=n.join("\n"), e}},Cross:{createAppearanceStream:function(t){var e={D:{Off:N.RadioButton.Cross.OffPushDown},N:{}};return e.N[t]=N.RadioButton.Cross.YesNormal, e.D[t]=N.RadioButton.Cross.YesPushDown, e},createMK:function(){return"<< /CA (8)>>"},YesNormal:function(t){var e=h(t),n=[],r=N.internal.calculateCross(t);return n.push("q"), n.push("1 1 "+(N.internal.getWidth(t)-2).toFixed(2)+" "+(N.internal.getHeight(t)-2).toFixed(2)+" re"), n.push("W"), n.push("n"), n.push(r.x1.x.toFixed(2)+" "+r.x1.y.toFixed(2)+" m"), n.push(r.x2.x.toFixed(2)+" "+r.x2.y.toFixed(2)+" l"), n.push(r.x4.x.toFixed(2)+" "+r.x4.y.toFixed(2)+" m"), n.push(r.x3.x.toFixed(2)+" "+r.x3.y.toFixed(2)+" l"), n.push("s"), n.push("Q"), e.stream=n.join("\n"), e},YesPushDown:function(t){var e=h(t),n=N.internal.calculateCross(t),r=[];return r.push("0.749023 g"), r.push("0 0 "+N.internal.getWidth(t).toFixed(2)+" "+N.internal.getHeight(t).toFixed(2)+" re"), r.push("f"), r.push("q"), r.push("1 1 "+(N.internal.getWidth(t)-2).toFixed(2)+" "+(N.internal.getHeight(t)-2).toFixed(2)+" re"), r.push("W"), r.push("n"), r.push(n.x1.x.toFixed(2)+" "+n.x1.y.toFixed(2)+" m"), r.push(n.x2.x.toFixed(2)+" "+n.x2.y.toFixed(2)+" l"), r.push(n.x4.x.toFixed(2)+" "+n.x4.y.toFixed(2)+" m"), r.push(n.x3.x.toFixed(2)+" "+n.x3.y.toFixed(2)+" l"), r.push("s"), r.push("Q"), e.stream=r.join("\n"), e},OffPushDown:function(t){var e=h(t),n=[];return n.push("0.749023 g"), n.push("0 0 "+N.internal.getWidth(t).toFixed(2)+" "+N.internal.getHeight(t).toFixed(2)+" re"), n.push("f"), e.stream=n.join("\n"), e}}},createDefaultAppearanceStream:function(t){return"/F1 0 Tf 0 g"}};N.internal={Bezier_C:.551915024494,calculateCross:function(t){var e,n,r=N.internal.getWidth(t),i=N.internal.getHeight(t),o=(n=i)<(e=r)?n:e;return{x1:{x:(r-o)/2,y:(i-o)/2+o},x2:{x:(r-o)/2+o,y:(i-o)/2},x3:{x:(r-o)/2,y:(i-o)/2},x4:{x:(r-o)/2+o,y:(i-o)/2+o}}}}, N.internal.getWidth=function(t){var e=0;return"object"===(void 0===t?"undefined":vt(t))&&(e=s(t.Rect[2])), e}, N.internal.getHeight=function(t){var e=0;return"object"===(void 0===t?"undefined":vt(t))&&(e=s(t.Rect[3])), e}, n.addField=function(t){return x.call(this), t instanceof M?this.addTextField.call(this,t):t instanceof F?this.addChoiceField.call(this,t):t instanceof O?this.addButton.call(this,t):t instanceof j?g.call(this,t):t&&g.call(this,t), t.page=l.internal.getCurrentPageInfo().pageNumber, this}, n.addButton=function(t){x.call(this);var e=t||new T;e.FT="/Btn", e.Ff=o(e.Ff,t,l.internal.getPDFVersion()), g.call(this,e);}, n.addTextField=function(t){x.call(this);var e=t||new T;e.FT="/Tx", e.Ff=o(e.Ff,t,l.internal.getPDFVersion()), g.call(this,e);}, n.addChoiceField=function(t){x.call(this);var e=t||new T;e.FT="/Ch", e.Ff=o(e.Ff,t,l.internal.getPDFVersion()), g.call(this,e);}, "object"==(void 0===t?"undefined":vt(t))&&(t.ChoiceField=F, t.ListBox=P, t.ComboBox=E, t.EditBox=q, t.Button=O, t.PushButton=B, t.RadioButton=R, t.CheckBox=D, t.TextField=M, t.PasswordField=U, t.AcroForm={Appearance:N}), n.AcroFormChoiceField=F, n.AcroFormListBox=P, n.AcroFormComboBox=E, n.AcroFormEditBox=q, n.AcroFormButton=O, n.AcroFormPushButton=B, n.AcroFormRadioButton=R, n.AcroFormCheckBox=D, n.AcroFormTextField=M, n.AcroFormPasswordField=U, n.AcroForm={ChoiceField:F,ListBox:P,ComboBox:E,EditBox:q,Button:O,PushButton:B,RadioButton:R,CheckBox:D,TextField:M,PasswordField:U};}($.API,"undefined"!=typeof window&&window||"undefined"!=typeof commonjsGlobal&&commonjsGlobal), $.API.addHTML=function(t,p,g,s,m){if("undefined"==typeof html2canvas&&"undefined"==typeof rasterizeHTML)throw new Error("You need either https://github.com/niklasvh/html2canvas or https://github.com/cburgmer/rasterizeHTML.js");"number"!=typeof p&&(s=p, m=g), "function"==typeof s&&(m=s, s=null), "function"!=typeof m&&(m=function(){});var e=this.internal,w=e.scaleFactor,y=e.pageSize.getWidth(),v=e.pageSize.getHeight();if((s=s||{}).onrendered=function(h){p=parseInt(p)||0, g=parseInt(g)||0;var t=s.dim||{},c=Object.assign({top:0,right:0,bottom:0,left:0,useFor:"content"},s.margin),e=t.h||Math.min(v,h.height/w),l=t.w||Math.min(y,h.width/w)-p,u=s.format||"JPEG",f=s.imageCompression||"SLOW";if(h.height>v-c.top-c.bottom&&s.pagesplit){var d=function(t,e,n,r,i){var o=document.createElement("canvas");o.height=i, o.width=r;var a=o.getContext("2d");return a.mozImageSmoothingEnabled=!1, a.webkitImageSmoothingEnabled=!1, a.msImageSmoothingEnabled=!1, a.imageSmoothingEnabled=!1, a.fillStyle=s.backgroundColor||"#ffffff", a.fillRect(0,0,r,i), a.drawImage(t,e,n,r,i,0,0,r,i), o},n=function(){for(var t,e,n=0,r=0,i={},o=!1;;){var a;if(r=0, i.top=0!==n?c.top:g, i.left=0!==n?c.left:p, o=(y-c.left-c.right)*w<h.width, "content"===c.useFor?0===n?(t=Math.min((y-c.left)*w,h.width), e=Math.min((v-c.top)*w,h.height-n)):(t=Math.min(y*w,h.width), e=Math.min(v*w,h.height-n), i.top=0):(t=Math.min((y-c.left-c.right)*w,h.width), e=Math.min((v-c.bottom-c.top)*w,h.height-n)), o)for(;;){"content"===c.useFor&&(0===r?t=Math.min((y-c.left)*w,h.width):(t=Math.min(y*w,h.width-r), i.left=0));var s=[a=d(h,r,n,t,e),i.left,i.top,a.width/w,a.height/w,u,null,f];if(this.addImage.apply(this,s), (r+=t)>=h.width)break;this.addPage();}else s=[a=d(h,0,n,t,e),i.left,i.top,a.width/w,a.height/w,u,null,f], this.addImage.apply(this,s);if((n+=e)>=h.height)break;this.addPage();}m(l,n,null,s);}.bind(this);if("CANVAS"===h.nodeName){var r=new Image;r.onload=n, r.src=h.toDataURL("image/png"), h=r;}else n();}else{var i=Math.random().toString(35),o=[h,p,g,l,e,u,i,f];this.addImage.apply(this,o), m(l,e,i,o);}}.bind(this), "undefined"!=typeof html2canvas&&!s.rstz)return html2canvas(t,s);if("undefined"!=typeof rasterizeHTML){var n="drawDocument";return"string"==typeof t&&(n=/^http/.test(t)?"drawURL":"drawHTML"), s.width=s.width||y*w, rasterizeHTML[n](t,void 0,s).then(function(t){s.onrendered(t.image);},function(t){m(null,t);})}return null}, function(b){var x="addImage_",h={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]};b.getImageFileTypeByImageData=function(t,e){var n,r;e=e||"UNKNOWN";var i,o,a,s="UNKNOWN";for(a in h)for(i=h[a], n=0;n<i.length;n+=1){for(o=!0, r=0;r<i[n].length;r+=1)if(void 0!==i[n][r]&&i[n][r]!==t.charCodeAt(r)){o=!1;break}if(!0===o){s=a;break}}return"UNKOWN"===s&&"UNKNOWN"!==e&&(console.warn('FileType of Image not recognized. Processing image as "'+e+'".'), s=e), s};var n=function t(e){var n=this.internal.newObject(),r=this.internal.write,i=this.internal.putStream;if(e.n=n, r("<</Type /XObject"), r("/Subtype /Image"), r("/Width "+e.w), r("/Height "+e.h), e.cs===this.color_spaces.INDEXED?r("/ColorSpace [/Indexed /DeviceRGB "+(e.pal.length/3-1)+" "+("smask"in e?n+2:n+1)+" 0 R]"):(r("/ColorSpace /"+e.cs), e.cs===this.color_spaces.DEVICE_CMYK&&r("/Decode [1 0 1 0 1 0 1 0]")), r("/BitsPerComponent "+e.bpc), "f"in e&&r("/Filter /"+e.f), "dp"in e&&r("/DecodeParms <<"+e.dp+">>"), "trns"in e&&e.trns.constructor==Array){for(var o="",a=0,s=e.trns.length;a<s;a++)o+=e.trns[a]+" "+e.trns[a]+" ";r("/Mask ["+o+"]");}if("smask"in e&&r("/SMask "+(n+1)+" 0 R"), r("/Length "+e.data.length+">>"), i(e.data), r("endobj"), "smask"in e){var h="/Predictor "+e.p+" /Colors 1 /BitsPerComponent "+e.bpc+" /Columns "+e.w,c={w:e.w,h:e.h,cs:"DeviceGray",bpc:e.bpc,dp:h,data:e.smask};"f"in e&&(c.f=e.f), t.call(this,c);}e.cs===this.color_spaces.INDEXED&&(this.internal.newObject(), r("<< /Length "+e.pal.length+">>"), i(this.arrayBufferToBinaryString(new Uint8Array(e.pal))), r("endobj"));},S=function(){var t=this.internal.collections[x+"images"];for(var e in t)n.call(this,t[e]);},k=function(){var t,e=this.internal.collections[x+"images"],n=this.internal.write;for(var r in e)n("/I"+(t=e[r]).i,t.n,"0","R");},_=function(t){return"function"==typeof b["process"+t.toUpperCase()]},A=function(t){return"object"===(void 0===t?"undefined":vt(t))&&1===t.nodeType},I=function(t,e){if("IMG"===t.nodeName&&t.hasAttribute("src")){var n=""+t.getAttribute("src");if(0===n.indexOf("data:image/"))return n;!e&&/\.png(?:[?#].*)?$/i.test(n)&&(e="png");}if("CANVAS"===t.nodeName)var r=t;else{(r=document.createElement("canvas")).width=t.clientWidth||t.width, r.height=t.clientHeight||t.height;var i=r.getContext("2d");if(!i)throw"addImage requires canvas to be supported by browser.";i.drawImage(t,0,0,r.width,r.height);}return r.toDataURL("png"==(""+e).toLowerCase()?"image/png":"image/jpeg")},C=function(t,e){var n;if(e)for(var r in e)if(t===e[r].alias){n=e[r];break}return n};b.color_spaces={DEVICE_RGB:"DeviceRGB",DEVICE_GRAY:"DeviceGray",DEVICE_CMYK:"DeviceCMYK",CAL_GREY:"CalGray",CAL_RGB:"CalRGB",LAB:"Lab",ICC_BASED:"ICCBased",INDEXED:"Indexed",PATTERN:"Pattern",SEPARATION:"Separation",DEVICE_N:"DeviceN"}, b.decode={DCT_DECODE:"DCTDecode",FLATE_DECODE:"FlateDecode",LZW_DECODE:"LZWDecode",JPX_DECODE:"JPXDecode",JBIG2_DECODE:"JBIG2Decode",ASCII85_DECODE:"ASCII85Decode",ASCII_HEX_DECODE:"ASCIIHexDecode",RUN_LENGTH_DECODE:"RunLengthDecode",CCITT_FAX_DECODE:"CCITTFaxDecode"}, b.image_compression={NONE:"NONE",FAST:"FAST",MEDIUM:"MEDIUM",SLOW:"SLOW"}, b.sHashCode=function(t){return t=t||"", Array.prototype.reduce&&t.split("").reduce(function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t},0)}, b.isString=function(t){return"string"==typeof t}, b.validateStringAsBase64=function(t){var e=!0;return(t=t||"").length%4!=0&&(e=!1), !1===/[A-Za-z0-9\/]+/.test(t.substr(0,t.length-2))&&(e=!1), !1===/[A-Za-z0-9\/][A-Za-z0-9+\/]|[A-Za-z0-9+\/]=|==/.test(t.substr(-2))&&(e=!1), e}, b.extractInfoFromBase64DataURI=function(t){return/^data:([\w]+?\/([\w]+?));base64,(.+)$/g.exec(t)}, b.supportsArrayBuffer=function(){return"undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array}, b.isArrayBuffer=function(t){return!!this.supportsArrayBuffer()&&t instanceof ArrayBuffer}, b.isArrayBufferView=function(t){return!!this.supportsArrayBuffer()&&("undefined"!=typeof Uint32Array&&(t instanceof Int8Array||t instanceof Uint8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array))}, b.binaryStringToUint8Array=function(t){for(var e=t.length,n=new Uint8Array(e),r=0;r<e;r++)n[r]=t.charCodeAt(r);return n}, b.arrayBufferToBinaryString=function(t){if("function"==typeof atob)return atob(this.arrayBufferToBase64(t));if("function"==typeof TextDecoder){var e=new TextDecoder("ascii");if("ascii"===e.encoding)return e.decode(t)}for(var n=this.isArrayBuffer(t)?t:new Uint8Array(t),r=20480,i="",o=Math.ceil(n.byteLength/r),a=0;a<o;a++)i+=String.fromCharCode.apply(null,n.slice(a*r,a*r+r));return i}, b.arrayBufferToBase64=function(t){for(var e,n="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=new Uint8Array(t),o=i.byteLength,a=o%3,s=o-a,h=0;h<s;h+=3)n+=r[(16515072&(e=i[h]<<16|i[h+1]<<8|i[h+2]))>>18]+r[(258048&e)>>12]+r[(4032&e)>>6]+r[63&e];return 1==a?n+=r[(252&(e=i[s]))>>2]+r[(3&e)<<4]+"==":2==a&&(n+=r[(64512&(e=i[s]<<8|i[s+1]))>>10]+r[(1008&e)>>4]+r[(15&e)<<2]+"="), n}, b.createImageInfo=function(t,e,n,r,i,o,a,s,h,c,l,u,f){var d={alias:s,w:e,h:n,cs:r,bpc:i,i:a,data:t};return o&&(d.f=o), h&&(d.dp=h), c&&(d.trns=c), l&&(d.pal=l), u&&(d.smask=u), f&&(d.p=f), d}, b.addImage=function(t,e,n,r,i,o,a,s,h){var c="";if("string"!=typeof e){var l=o;o=i, i=r, r=n, n=e, e=l;}if("object"===(void 0===t?"undefined":vt(t))&&!A(t)&&"imageData"in t){var u=t;t=u.imageData, e=u.format||e, n=u.x||n||0, r=u.y||r||0, i=u.w||i, o=u.h||o, a=u.alias||a, s=u.compression||s, h=u.rotation||u.angle||h;}if(isNaN(n)||isNaN(r))throw console.error("jsPDF.addImage: Invalid coordinates",arguments), new Error("Invalid coordinates passed to jsPDF.addImage");var f,d,p,g,m,w,y,v=function(){var t=this.internal.collections[x+"images"];return t||(this.internal.collections[x+"images"]=t={}, this.internal.events.subscribe("putResources",S), this.internal.events.subscribe("putXobjectDict",k)), t}.call(this);if(!(f=C(t,v))&&(A(t)&&(t=I(t,e)), (null==(y=a)||0===y.length)&&(a="string"==typeof(w=t)&&b.sHashCode(w)), !(f=C(a,v)))){if(this.isString(t)&&(""!==(c=this.convertStringToImageData(t))?t=c:void 0!==(c=this.loadImageFile(t))&&(t=c)), e=this.getImageFileTypeByImageData(t,e), !_(e))throw new Error("addImage does not support files of type '"+e+"', please ensure that a plugin for '"+e+"' support is added.");if(this.supportsArrayBuffer()&&(t instanceof Uint8Array||(d=t, t=this.binaryStringToUint8Array(t))), !(f=this["process"+e.toUpperCase()](t,(m=0, (g=v)&&(m=Object.keys?Object.keys(g).length:function(t){var e=0;for(var n in t)t.hasOwnProperty(n)&&e++;return e}(g)), m),a,((p=s)&&"string"==typeof p&&(p=p.toUpperCase()), p in b.image_compression?p:b.image_compression.NONE),d)))throw new Error("An unkwown error occurred whilst processing the image")}return function(t,e,n,r,i,o,a,s){var h=function(t,e,n){return t||e||(e=t=-96), t<0&&(t=-1*n.w*72/t/this.internal.scaleFactor), e<0&&(e=-1*n.h*72/e/this.internal.scaleFactor), 0===t&&(t=e*n.w/n.h), 0===e&&(e=t*n.h/n.w), [t,e]}.call(this,n,r,i),c=this.internal.getCoordinateString,l=this.internal.getVerticalCoordinateString;if(n=h[0], r=h[1], a[o]=i, s){s*=Math.PI/180;var u=Math.cos(s),f=Math.sin(s),d=function(t){return t.toFixed(4)},p=[d(u),d(f),d(-1*f),d(u),0,0,"cm"];}this.internal.write("q"), s?(this.internal.write([1,"0","0",1,c(t),l(e+r),"cm"].join(" ")), this.internal.write(p.join(" ")), this.internal.write([c(n),"0","0",c(r),"0","0","cm"].join(" "))):this.internal.write([c(n),"0","0",c(r),c(t),l(e+r),"cm"].join(" ")), this.internal.write("/I"+i.i+" Do"), this.internal.write("Q");}.call(this,n,r,i,o,f,f.i,v,h), this}, b.convertStringToImageData=function(t){var e,n="";this.isString(t)&&(null!==(e=this.extractInfoFromBase64DataURI(t))?b.validateStringAsBase64(e[3])&&(n=atob(e[3])):b.validateStringAsBase64(t)&&(n=atob(t)));return n};var c=function(t,e){return t.subarray(e,e+5)};b.processJPEG=function(t,e,n,r,i,o){var a,s=this.decode.DCT_DECODE;if(!this.isString(t)&&!this.isArrayBuffer(t)&&!this.isArrayBufferView(t))return null;if(this.isString(t)&&(a=function(t){var e;if(255===!t.charCodeAt(0)||216===!t.charCodeAt(1)||255===!t.charCodeAt(2)||224===!t.charCodeAt(3)||!t.charCodeAt(6)==="J".charCodeAt(0)||!t.charCodeAt(7)==="F".charCodeAt(0)||!t.charCodeAt(8)==="I".charCodeAt(0)||!t.charCodeAt(9)==="F".charCodeAt(0)||0===!t.charCodeAt(10))throw new Error("getJpegSize requires a binary string jpeg file");for(var n=256*t.charCodeAt(4)+t.charCodeAt(5),r=4,i=t.length;r<i;){if(r+=n, 255!==t.charCodeAt(r))throw new Error("getJpegSize could not find the size of the image");if(192===t.charCodeAt(r+1)||193===t.charCodeAt(r+1)||194===t.charCodeAt(r+1)||195===t.charCodeAt(r+1)||196===t.charCodeAt(r+1)||197===t.charCodeAt(r+1)||198===t.charCodeAt(r+1)||199===t.charCodeAt(r+1))return e=256*t.charCodeAt(r+5)+t.charCodeAt(r+6), [256*t.charCodeAt(r+7)+t.charCodeAt(r+8),e,t.charCodeAt(r+9)];r+=2, n=256*t.charCodeAt(r)+t.charCodeAt(r+1);}}(t)), this.isArrayBuffer(t)&&(t=new Uint8Array(t)), this.isArrayBufferView(t)&&(a=function(t){if(65496!=(t[0]<<8|t[1]))throw new Error("Supplied data is not a JPEG");for(var e,n=t.length,r=(t[4]<<8)+t[5],i=4;i<n;){if(r=((e=c(t,i+=r))[2]<<8)+e[3], (192===e[1]||194===e[1])&&255===e[0]&&7<r)return{width:((e=c(t,i+5))[2]<<8)+e[3],height:(e[0]<<8)+e[1],numcomponents:e[4]};i+=2;}throw new Error("getJpegSizeFromBytes could not find the size of the image")}(t), t=i||this.arrayBufferToBinaryString(t)), void 0===o)switch(a.numcomponents){case 1:o=this.color_spaces.DEVICE_GRAY;break;case 4:o=this.color_spaces.DEVICE_CMYK;break;default:case 3:o=this.color_spaces.DEVICE_RGB;}return this.createImageInfo(t,a.width,a.height,o,8,s,e,n)}, b.processJPG=function(){return this.processJPEG.apply(this,arguments)}, b.loadImageFile=function(t,e,n){e=e||!0, n=n||function(){};Object.prototype.toString.call("undefined"!=typeof process?process:0);if(void 0!==("undefined"==typeof window?"undefined":vt(window))&&"object"===("undefined"==typeof location?"undefined":vt(location))&&"http"===location.protocol.substr(0,4))return function(t,e,n){var r=new XMLHttpRequest,i=[],o=0,a=function(t){var e=t.length,n=String.fromCharCode;for(o=0;o<e;o+=1)i.push(n(255&t.charCodeAt(o)));return i.join("")};if(r.open("GET",t,!e), r.overrideMimeType("text/plain; charset=x-user-defined"), !1===e&&(r.onload=function(){return a(this.responseText)}), r.send(null), 200===r.status)return e?a(r.responseText):void 0;console.warn('Unable to load file "'+t+'"');}(t,e)}, b.getImageProperties=function(t){var e,n,r="";if(A(t)&&(t=I(t)), this.isString(t)&&(""!==(r=this.convertStringToImageData(t))?t=r:void 0!==(r=this.loadImageFile(t))&&(t=r)), n=this.getImageFileTypeByImageData(t), !_(n))throw new Error("addImage does not support files of type '"+n+"', please ensure that a plugin for '"+n+"' support is added.");if(this.supportsArrayBuffer()&&(t instanceof Uint8Array||(t=this.binaryStringToUint8Array(t))), !(e=this["process"+n.toUpperCase()](t)))throw new Error("An unkwown error occurred whilst processing the image");return{fileType:n,width:e.w,height:e.h,colorSpace:e.cs,compressionMode:e.f,bitsPerComponent:e.bpc}};}($.API), t=$.API, y={annotations:[],f2:function(t){return t.toFixed(2)},notEmpty:function(t){if(void 0!==t&&""!=t)return!0}}, $.API.annotationPlugin=y, $.API.events.push(["addPage",function(t){this.annotationPlugin.annotations[t.pageNumber]=[];}]), t.events.push(["putPage",function(t){for(var e=this.annotationPlugin.annotations[t.pageNumber],n=!1,r=0;r<e.length&&!n;r++)switch((h=e[r]).type){case"link":if(y.notEmpty(h.options.url)||y.notEmpty(h.options.pageNumber)){n=!0;break}case"reference":case"text":case"freetext":n=!0;}if(0!=n){this.internal.write("/Annots [");var i=this.annotationPlugin.f2,o=this.internal.scaleFactor,a=this.internal.pageSize.getHeight(),s=this.internal.getPageInfo(t.pageNumber);for(r=0;r<e.length;r++){var h;switch((h=e[r]).type){case"reference":this.internal.write(" "+h.object.objId+" 0 R ");break;case"text":var c=this.internal.newAdditionalObject(),l=this.internal.newAdditionalObject(),u=h.title||"Note";m="<</Type /Annot /Subtype /Text "+(d="/Rect ["+i(h.bounds.x*o)+" "+i(a-(h.bounds.y+h.bounds.h)*o)+" "+i((h.bounds.x+h.bounds.w)*o)+" "+i((a-h.bounds.y)*o)+"] ")+"/Contents ("+h.contents+")", m+=" /Popup "+l.objId+" 0 R", m+=" /P "+s.objId+" 0 R", m+=" /T ("+u+") >>", c.content=m;var f=c.objId+" 0 R";m="<</Type /Annot /Subtype /Popup "+(d="/Rect ["+i((h.bounds.x+30)*o)+" "+i(a-(h.bounds.y+h.bounds.h)*o)+" "+i((h.bounds.x+h.bounds.w+30)*o)+" "+i((a-h.bounds.y)*o)+"] ")+" /Parent "+f, h.open&&(m+=" /Open true"), m+=" >>", l.content=m, this.internal.write(c.objId,"0 R",l.objId,"0 R");break;case"freetext":var d="/Rect ["+i(h.bounds.x*o)+" "+i((a-h.bounds.y)*o)+" "+i(h.bounds.x+h.bounds.w*o)+" "+i(a-(h.bounds.y+h.bounds.h)*o)+"] ",p=h.color||"#000000";m="<</Type /Annot /Subtype /FreeText "+d+"/Contents ("+h.contents+")", m+=" /DS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#"+p+")", m+=" /Border [0 0 0]", m+=" >>", this.internal.write(m);break;case"link":if(h.options.name){var g=this.annotations._nameMap[h.options.name];h.options.pageNumber=g.page, h.options.top=g.y;}else h.options.top||(h.options.top=0);d="/Rect ["+i(h.x*o)+" "+i((a-h.y)*o)+" "+i((h.x+h.w)*o)+" "+i((a-(h.y+h.h))*o)+"] ";var m="";if(h.options.url)m="<</Type /Annot /Subtype /Link "+d+"/Border [0 0 0] /A <</S /URI /URI ("+h.options.url+") >>";else if(h.options.pageNumber)switch(m="<</Type /Annot /Subtype /Link "+d+"/Border [0 0 0] /Dest ["+(t=this.internal.getPageInfo(h.options.pageNumber)).objId+" 0 R", h.options.magFactor=h.options.magFactor||"XYZ", h.options.magFactor){case"Fit":m+=" /Fit]";break;case"FitH":m+=" /FitH "+h.options.top+"]";break;case"FitV":h.options.left=h.options.left||0, m+=" /FitV "+h.options.left+"]";break;case"XYZ":default:var w=i((a-h.options.top)*o);h.options.left=h.options.left||0, void 0===h.options.zoom&&(h.options.zoom=0), m+=" /XYZ "+h.options.left+" "+w+" "+h.options.zoom+"]";}""!=m&&(m+=" >>", this.internal.write(m));}}this.internal.write("]");}}]), t.createAnnotation=function(t){switch(t.type){case"link":this.link(t.bounds.x,t.bounds.y,t.bounds.w,t.bounds.h,t);break;case"text":case"freetext":this.annotationPlugin.annotations[this.internal.getCurrentPageInfo().pageNumber].push(t);}}, t.link=function(t,e,n,r,i){this.annotationPlugin.annotations[this.internal.getCurrentPageInfo().pageNumber].push({x:t,y:e,w:n,h:r,options:i,type:"link"});}, t.textWithLink=function(t,e,n,r){var i=this.getTextWidth(t),o=this.internal.getLineHeight()/this.internal.scaleFactor;return this.text(t,e,n), n+=.2*o, this.link(e,n-o,i,o,r), i}, t.getTextWidth=function(t){var e=this.internal.getFontSize();return this.getStringUnitWidth(t)*e/this.internal.scaleFactor}, t.getLineHeight=function(){return this.internal.getLineHeight()}, function(t){var a=Object.keys({ar:"Arabic (Standard)","ar-DZ":"Arabic (Algeria)","ar-BH":"Arabic (Bahrain)","ar-EG":"Arabic (Egypt)","ar-IQ":"Arabic (Iraq)","ar-JO":"Arabic (Jordan)","ar-KW":"Arabic (Kuwait)","ar-LB":"Arabic (Lebanon)","ar-LY":"Arabic (Libya)","ar-MA":"Arabic (Morocco)","ar-OM":"Arabic (Oman)","ar-QA":"Arabic (Qatar)","ar-SA":"Arabic (Saudi Arabia)","ar-SY":"Arabic (Syria)","ar-TN":"Arabic (Tunisia)","ar-AE":"Arabic (U.A.E.)","ar-YE":"Arabic (Yemen)",fa:"Persian","fa-IR":"Persian/Iran",ur:"Urdu"}),u={1569:[65152],1570:[65153,65154,65153,65154],1571:[65155,65156,65155,65156],1572:[65157,65158],1573:[65159,65160,65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166,65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194,65193],1584:[65195,65196,65195],1585:[65197,65198,65197],1586:[65199,65200,65199],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262,65261],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395,64394],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},f={1570:[65269,65270,65269,65270],1571:[65271,65272,65271,65272],1573:[65273,65274,65273,65274],1575:[65275,65276,65275,65276]},d={1570:[65153,65154,65153,65154],1571:[65155,65156,65155,65156],1573:[65159,65160,65159,65160],1575:[65165,65166,65165,65166]},p={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},e=[1570,1571,1573,1575],n=[1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688],o=0,s=1,h=2,c=3;function g(t){return void 0!==t&&void 0!==u[t.charCodeAt(0)]}function l(t){return void 0!==t&&0<=n.indexOf(t.charCodeAt(0))}function m(t){return void 0!==t&&0<=e.indexOf(t.charCodeAt(0))}function w(t){return g(t)&&2<=u[t.charCodeAt(0)].length}function y(t,e,n,r){return g(t)?(r=r||{}, u=Object.assign(u,r), !w(t)||!g(e)&&!g(n)||!g(n)&&l(e)||l(t)&&!g(e)||l(t)&&m(e)||l(t)&&l(e)?(u=Object.assign(u,d), o):g(i=t)&&4==u[i.charCodeAt(0)].length&&g(e)&&!l(e)&&g(n)&&w(n)?(u=Object.assign(u,d), c):l(t)||!g(n)?(u=Object.assign(u,d), s):(u=Object.assign(u,d), h)):-1;var i;}var v=t.processArabic=function(t,e){t=t||"", e=e||!1;var n,r,i,o="",a=0,s=0,h="",c="",l="";for(a=0;a<t.length;a+=1)h=t[a], c=t[a-1], l=t[a+1], g(h)?void 0!==c&&1604===c.charCodeAt(0)&&m(h)?(s=y(h,t[a-2],t[a+1],f), n=String.fromCharCode(f[h.charCodeAt(0)][s]), o=o.substr(0,o.length-1)+n):void 0!==c&&1617===c.charCodeAt(0)&&(void 0!==(r=h)&&void 0!==p[r.charCodeAt(0)])?(s=y(h,t[a-2],t[a+1],d), n=String.fromCharCode(p[h.charCodeAt(0)][s]), o=o.substr(0,o.length-1)+n):(s=y(h,c,l,d), o+=String.fromCharCode(u[h.charCodeAt(0)][s])):o+=e?{"(":")",")":"("}[i=h]||i:h;return e?o.split("").reverse().join(""):o};t.events.push(["preProcessText",function(t){var e=t.text,n=(t.x, t.y, t.options||{}),r=(t.mutex, n.lang),i=[];if(0<=a.indexOf(r)){if("[object Array]"===Object.prototype.toString.call(e)){var o=0;for(i=[], o=0;o<e.length;o+=1)"[object Array]"===Object.prototype.toString.call(e[o])?i.push([v(e[o][0],!0),e[o][1],e[o][2]]):i.push([v(e[o],!0)]);t.text=i;}else t.text=v(e,!0);void 0===n.charSpace&&(t.options.charSpace=0), !0===n.R2L&&(t.options.R2L=!1);}}]);}($.API), $.API.autoPrint=function(t){var e;switch((t=t||{}).variant=t.variant||"non-conform", t.variant){case"javascript":this.addJS("print({});");break;case"non-conform":default:this.internal.events.subscribe("postPutResources",function(){e=this.internal.newObject(), this.internal.out("<<"), this.internal.out("/S /Named"), this.internal.out("/Type /Action"), this.internal.out("/N /Print"), this.internal.out(">>"), this.internal.out("endobj");}), this.internal.events.subscribe("putCatalog",function(){this.internal.out("/OpenAction "+e+" 0 R");});}return this}, (
+/**
+ * jsPDF Canvas PlugIn
+ * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv
+ *
+ * Licensed under the MIT License.
+ * http://opensource.org/licenses/mit-license
+ */
+e=$.API).events.push(["initialized",function(){this.canvas.pdf=this;}]), e.canvas={getContext:function(t){return(this.pdf.context2d._canvas=this).pdf.context2d},childNodes:[]}, Object.defineProperty(e.canvas,"width",{get:function(){return this._width},set:function(t){this._width=t, this.getContext("2d").pageWrapX=t+1;}}), Object.defineProperty(e.canvas,"height",{get:function(){return this._height},set:function(t){this._height=t, this.getContext("2d").pageWrapY=t+1;}}), I=$.API, C={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0}, T=1, d=function(t,e,n,r,i){C={x:t,y:e,w:n,h:r,ln:i};}, p=function(){return C}, F={left:0,top:0,bottom:0}, I.setHeaderFunction=function(t){h=t;}, I.getTextDimensions=function(e){i=this.internal.getFont().fontName, o=this.table_font_size||this.internal.getFontSize(), a=this.internal.getFont().fontStyle;var t,n,r=19.049976/25.4;(n=document.createElement("font")).id="jsPDFCell";try{n.style.fontStyle=a;}catch(t){n.style.fontWeight=a;}n.style.fontSize=o+"pt", n.style.fontFamily=i;try{n.textContent=e;}catch(t){n.innerText=e;}return document.body.appendChild(n), t={w:(n.offsetWidth+1)*r,h:(n.offsetHeight+1)*r}, document.body.removeChild(n), t}, I.cellAddPage=function(){var t=this.margins||F;this.addPage(), d(t.left,t.top,void 0,void 0), T+=1;}, I.cellInitialize=function(){C={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0}, T=1;}, I.cell=function(t,e,n,r,i,o,a){var s=p(),h=!1;if(void 0!==s.ln)if(s.ln===o)t=s.x+s.w, e=s.y;else{var c=this.margins||F;s.y+s.h+r+13>=this.internal.pageSize.getHeight()-c.bottom&&(this.cellAddPage(), h=!0, this.printHeaders&&this.tableHeaderRow&&this.printHeaderRow(o,!0)), e=p().y+p().h, h&&(e=23);}if(void 0!==i[0])if(this.printingHeaderRow?this.rect(t,e,n,r,"FD"):this.rect(t,e,n,r), "right"===a){i instanceof Array||(i=[i]);for(var l=0;l<i.length;l++){var u=i[l],f=this.getStringUnitWidth(u)*this.internal.getFontSize();this.text(u,t+n-f-3,e+this.internal.getLineHeight()*(l+1));}}else this.text(i,t+3,e+this.internal.getLineHeight());return d(t,e,n,r,o), this}, I.arrayMax=function(t,e){var n,r,i,o=t[0];for(n=0, r=t.length;n<r;n+=1)i=t[n], e?-1===e(o,i)&&(o=i):o<i&&(o=i);return o}, I.table=function(t,e,n,r,i){if(!n)throw"No data for PDF table";var o,a,s,h,c,l,u,f,d,p,g=[],m=[],w={},y={},v=[],b=[],x=!1,S=!0,k=12,_=F;if(_.width=this.internal.pageSize.getWidth(), i&&(!0===i.autoSize&&(x=!0), !1===i.printHeaders&&(S=!1), i.fontSize&&(k=i.fontSize), i.css&&void 0!==i.css["font-size"]&&(k=16*i.css["font-size"]), i.margins&&(_=i.margins)), this.lnMod=0, C={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0}, T=1, this.printHeaders=S, this.margins=_, this.setFontSize(k), this.table_font_size=k, null==r)g=Object.keys(n[0]);else if(r[0]&&"string"!=typeof r[0])for(a=0, s=r.length;a<s;a+=1)o=r[a], g.push(o.name), m.push(o.prompt), y[o.name]=o.width*(19.049976/25.4);else g=r;if(x)for(p=function(t){return t[o]}, a=0, s=g.length;a<s;a+=1){for(w[o=g[a]]=n.map(p), v.push(this.getTextDimensions(m[a]||o).w), u=0, h=(l=w[o]).length;u<h;u+=1)c=l[u], v.push(this.getTextDimensions(c).w);y[o]=I.arrayMax(v), v=[];}if(S){var A=this.calculateLineHeight(g,y,m.length?m:g);for(a=0, s=g.length;a<s;a+=1)o=g[a], b.push([t,e,y[o],A,String(m.length?m[a]:o)]);this.setTableHeaderRow(b), this.printHeaderRow(1,!1);}for(a=0, s=n.length;a<s;a+=1)for(f=n[a], A=this.calculateLineHeight(g,y,f), u=0, d=g.length;u<d;u+=1)o=g[u], this.cell(t,e,y[o],A,f[o],a+2,o.align);return this.lastCellPos=C, this.table_x=t, this.table_y=e, this}, I.calculateLineHeight=function(t,e,n){for(var r,i=0,o=0;o<t.length;o++){n[r=t[o]]=this.splitTextToSize(String(n[r]),e[r]-3);var a=this.internal.getLineHeight()*n[r].length+3;i<a&&(i=a);}return i}, I.setTableHeaderRow=function(t){this.tableHeaderRow=t;}, I.printHeaderRow=function(t,e){if(!this.tableHeaderRow)throw"Property tableHeaderRow does not exist.";var n,r,i,o;if(this.printingHeaderRow=!0, void 0!==h){var a=h(this,T);d(a[0],a[1],a[2],a[3],-1);}this.setFontStyle("bold");var s=[];for(i=0, o=this.tableHeaderRow.length;i<o;i+=1)this.setFillColor(200,200,200), n=this.tableHeaderRow[i], e&&(this.margins.top=13, n[1]=this.margins&&this.margins.top||0, s.push(n)), r=[].concat(n), this.cell.apply(this,r.concat(t));0<s.length&&this.setTableHeaderRow(s), this.setFontStyle("normal"), this.printingHeaderRow=!1;}, function(t){t.events.push(["initialized",function(){((this.context2d.pdf=this).context2d.internal.pdf=this).context2d.ctx=new e, this.context2d.ctxStack=[], this.context2d.path=[];}]), t.context2d={pageWrapXEnabled:!1,pageWrapYEnabled:!1,pageWrapX:9999999,pageWrapY:9999999,ctx:new e,f2:function(t){return t.toFixed(2)},fillRect:function(t,e,n,r){if(!this._isFillTransparent()){t=this._wrapX(t), e=this._wrapY(e);var i=this._matrix_map_rect(this.ctx._transform,{x:t,y:e,w:n,h:r});this.pdf.rect(i.x,i.y,i.w,i.h,"f");}},strokeRect:function(t,e,n,r){if(!this._isStrokeTransparent()){t=this._wrapX(t), e=this._wrapY(e);var i=this._matrix_map_rect(this.ctx._transform,{x:t,y:e,w:n,h:r});this.pdf.rect(i.x,i.y,i.w,i.h,"s");}},clearRect:function(t,e,n,r){if(!this.ctx.ignoreClearRect){t=this._wrapX(t), e=this._wrapY(e);var i=this._matrix_map_rect(this.ctx._transform,{x:t,y:e,w:n,h:r});this.save(), this.setFillStyle("#ffffff"), this.pdf.rect(i.x,i.y,i.w,i.h,"f"), this.restore();}},save:function(){this.ctx._fontSize=this.pdf.internal.getFontSize();var t=new e;t.copy(this.ctx), this.ctxStack.push(this.ctx), this.ctx=t;},restore:function(){this.ctx=this.ctxStack.pop(), this.setFillStyle(this.ctx.fillStyle), this.setStrokeStyle(this.ctx.strokeStyle), this.setFont(this.ctx.font), this.pdf.setFontSize(this.ctx._fontSize), this.setLineCap(this.ctx.lineCap), this.setLineWidth(this.ctx.lineWidth), this.setLineJoin(this.ctx.lineJoin);},rect:function(t,e,n,r){this.moveTo(t,e), this.lineTo(t+n,e), this.lineTo(t+n,e+r), this.lineTo(t,e+r), this.lineTo(t,e), this.closePath();},beginPath:function(){this.path=[];},closePath:function(){this.path.push({type:"close"});},_getRGBA:function(t){var e,n,r,i,o=new RGBColor(t);if(!t)return{r:0,g:0,b:0,a:0,style:t};if(this.internal.rxTransparent.test(t))i=r=n=e=0;else{var a=this.internal.rxRgb.exec(t);null!=a?(e=parseInt(a[1]), n=parseInt(a[2]), r=parseInt(a[3]), i=1):null!=(a=this.internal.rxRgba.exec(t))?(e=parseInt(a[1]), n=parseInt(a[2]), r=parseInt(a[3]), i=parseFloat(a[4])):(i=1, "#"!=t.charAt(0)&&(t=o.ok?o.toHex():"#000000"), 4===t.length?(e=t.substring(1,2), e+=e, n=t.substring(2,3), n+=n, r=t.substring(3,4), r+=r):(e=t.substring(1,3), n=t.substring(3,5), r=t.substring(5,7)), e=parseInt(e,16), n=parseInt(n,16), r=parseInt(r,16));}return{r:e,g:n,b:r,a:i,style:t}},setFillStyle:function(t){var e=this._getRGBA(t);this.ctx.fillStyle=t, this.ctx._isFillTransparent=0===e.a, this.ctx._fillOpacity=e.a, this.pdf.setFillColor(e.r,e.g,e.b,{a:e.a}), this.pdf.setTextColor(e.r,e.g,e.b,{a:e.a});},setStrokeStyle:function(t){var e=this._getRGBA(t);this.ctx.strokeStyle=e.style, this.ctx._isStrokeTransparent=0===e.a, this.ctx._strokeOpacity=e.a, 0===e.a?this.pdf.setDrawColor(255,255,255):(e.a, this.pdf.setDrawColor(e.r,e.g,e.b));},fillText:function(t,e,n,r){if(!this._isFillTransparent()){e=this._wrapX(e), n=this._wrapY(n);var i=this._matrix_map_point(this.ctx._transform,[e,n]);e=i[0], n=i[1];var o=57.2958*this._matrix_rotation(this.ctx._transform);if(0<this.ctx._clip_path.length){var a;(a=window.outIntercept?"group"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push("q");var s=this.path;this.path=this.ctx._clip_path, this.ctx._clip_path=[], this._fill(null,!0), this.ctx._clip_path=this.path, this.path=s;}var h=1;try{h=this._matrix_decompose(this._getTransform()).scale[0];}catch(t){console.warn(t);}if(h<.01)this.pdf.text(t,e,this._getBaseline(n),null,o);else{var c=this.pdf.internal.getFontSize();this.pdf.setFontSize(c*h), this.pdf.text(t,e,this._getBaseline(n),null,o), this.pdf.setFontSize(c);}0<this.ctx._clip_path.length&&a.push("Q");}},strokeText:function(t,e,n,r){if(!this._isStrokeTransparent()){e=this._wrapX(e), n=this._wrapY(n);var i=this._matrix_map_point(this.ctx._transform,[e,n]);e=i[0], n=i[1];var o=57.2958*this._matrix_rotation(this.ctx._transform);if(0<this.ctx._clip_path.length){var a;(a=window.outIntercept?"group"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push("q");var s=this.path;this.path=this.ctx._clip_path, this.ctx._clip_path=[], this._fill(null,!0), this.ctx._clip_path=this.path, this.path=s;}var h=1;try{h=this._matrix_decompose(this._getTransform()).scale[0];}catch(t){console.warn(t);}if(1===h)this.pdf.text(t,e,this._getBaseline(n),{stroke:!0},o);else{var c=this.pdf.internal.getFontSize();this.pdf.setFontSize(c*h), this.pdf.text(t,e,this._getBaseline(n),{stroke:!0},o), this.pdf.setFontSize(c);}0<this.ctx._clip_path.length&&a.push("Q");}},setFont:function(t){if(this.ctx.font=t, null!=(c=/\s*(\w+)\s+(\w+)\s+(\w+)\s+([\d\.]+)(px|pt|em)\s+(.*)?/.exec(t))){var e=c[1],n=(c[2], c[3]),r=c[4],i=c[5],o=c[6];r="px"===i?Math.floor(parseFloat(r)):"em"===i?Math.floor(parseFloat(r)*this.pdf.getFontSize()):Math.floor(parseFloat(r)), this.pdf.setFontSize(r), "bold"===n||"700"===n?this.pdf.setFontStyle("bold"):"italic"===e?this.pdf.setFontStyle("italic"):this.pdf.setFontStyle("normal"), l="bold"===n||"700"===n?"italic"===e?"bolditalic":"bold":"italic"===e?"italic":"normal";for(var a=o.toLowerCase().split(/\s*,\s*/),s="Times",h=0;h<a.length;h++){if(void 0!==this.pdf.internal.getFont(a[h],l,{noFallback:!0,disableWarning:!0})){s=a[h];break}if("bolditalic"===l&&void 0!==this.pdf.internal.getFont(a[h],"bold",{noFallback:!0,disableWarning:!0}))s=a[h], l="bold";else if(void 0!==this.pdf.internal.getFont(a[h],"normal",{noFallback:!0,disableWarning:!0})){s=a[h], l="normal";break}}this.pdf.setFont(s,l);}else{var c=/\s*(\d+)(pt|px|em)\s+([\w "]+)\s*([\w "]+)?/.exec(t);if(null!=c){var l,u=c[1],f=(c[2], c[3]);(l=c[4])||(l="normal"), u="em"===i?Math.floor(parseFloat(r)*this.pdf.getFontSize()):Math.floor(parseFloat(u)), this.pdf.setFontSize(u), this.pdf.setFont(f,l);}}},setTextBaseline:function(t){this.ctx.textBaseline=t;},getTextBaseline:function(){return this.ctx.textBaseline},setTextAlign:function(t){this.ctx.textAlign=t;},getTextAlign:function(){return this.ctx.textAlign},setLineWidth:function(t){this.ctx.lineWidth=t, this.pdf.setLineWidth(t);},setLineCap:function(t){this.ctx.lineCap=t, this.pdf.setLineCap(t);},setLineJoin:function(t){this.ctx.lineJoin=t, this.pdf.setLineJoin(t);},moveTo:function(t,e){t=this._wrapX(t), e=this._wrapY(e);var n=this._matrix_map_point(this.ctx._transform,[t,e]),r={type:"mt",x:t=n[0],y:e=n[1]};this.path.push(r);},_wrapX:function(t){return this.pageWrapXEnabled?t%this.pageWrapX:t},_wrapY:function(t){return this.pageWrapYEnabled?(this._gotoPage(this._page(t)), (t-this.lastBreak)%this.pageWrapY):t},transform:function(t,e,n,r,i,o){this.ctx._transform=this._matrix_multiply(this.ctx._transform,[t,e,n,r,i,o]);},setTransform:function(t,e,n,r,i,o){this.ctx._transform=[t,e,n,r,i,o];},_getTransform:function(){return this.ctx._transform},lastBreak:0,pageBreaks:[],_page:function(t){if(this.pageWrapYEnabled){for(var e=this.lastBreak=0,n=0,r=0;r<this.pageBreaks.length;r++)if(t>=this.pageBreaks[r]){e++, 0===this.lastBreak&&n++;var i=this.pageBreaks[r]-this.lastBreak;this.lastBreak=this.pageBreaks[r], n+=Math.floor(i/this.pageWrapY);}if(0===this.lastBreak)n+=Math.floor(t/this.pageWrapY)+1;return n+e}return this.pdf.internal.getCurrentPageInfo().pageNumber},_gotoPage:function(t){},lineTo:function(t,e){t=this._wrapX(t), e=this._wrapY(e);var n=this._matrix_map_point(this.ctx._transform,[t,e]),r={type:"lt",x:t=n[0],y:e=n[1]};this.path.push(r);},bezierCurveTo:function(t,e,n,r,i,o){var a;t=this._wrapX(t), e=this._wrapY(e), n=this._wrapX(n), r=this._wrapY(r), i=this._wrapX(i), o=this._wrapY(o), i=(a=this._matrix_map_point(this.ctx._transform,[i,o]))[0], o=a[1];var s={type:"bct",x1:t=(a=this._matrix_map_point(this.ctx._transform,[t,e]))[0],y1:e=a[1],x2:n=(a=this._matrix_map_point(this.ctx._transform,[n,r]))[0],y2:r=a[1],x:i,y:o};this.path.push(s);},quadraticCurveTo:function(t,e,n,r){var i;t=this._wrapX(t), e=this._wrapY(e), n=this._wrapX(n), r=this._wrapY(r), n=(i=this._matrix_map_point(this.ctx._transform,[n,r]))[0], r=i[1];var o={type:"qct",x1:t=(i=this._matrix_map_point(this.ctx._transform,[t,e]))[0],y1:e=i[1],x:n,y:r};this.path.push(o);},arc:function(t,e,n,r,i,o){if(t=this._wrapX(t), e=this._wrapY(e), !this._matrix_is_identity(this.ctx._transform)){var a=this._matrix_map_point(this.ctx._transform,[t,e]);t=a[0], e=a[1];var s=this._matrix_map_point(this.ctx._transform,[0,0]),h=this._matrix_map_point(this.ctx._transform,[0,n]);n=Math.sqrt(Math.pow(h[0]-s[0],2)+Math.pow(h[1]-s[1],2));}var c={type:"arc",x:t,y:e,radius:n,startAngle:r,endAngle:i,anticlockwise:o};this.path.push(c);},drawImage:function(t,e,n,r,i,o,a,s,h){void 0!==o&&(e=o, n=a, r=s, i=h), e=this._wrapX(e), n=this._wrapY(n);var c,l=this._matrix_map_rect(this.ctx._transform,{x:e,y:n,w:r,h:i}),u=(this._matrix_map_rect(this.ctx._transform,{x:o,y:a,w:s,h:h}), /data:image\/(\w+).*/i.exec(t));c=null!=u?u[1]:"png", this.pdf.addImage(t,c,l.x,l.y,l.w,l.h);},_matrix_multiply:function(t,e){var n=e[0],r=e[1],i=e[2],o=e[3],a=e[4],s=e[5],h=n*t[0]+r*t[2],c=i*t[0]+o*t[2],l=a*t[0]+s*t[2]+t[4];return r=n*t[1]+r*t[3], o=i*t[1]+o*t[3], s=a*t[1]+s*t[3]+t[5], [n=h,r,i=c,o,a=l,s]},_matrix_rotation:function(t){return Math.atan2(t[2],t[0])},_matrix_decompose:function(t){var e=t[0],n=t[1],r=t[2],i=t[3],o=Math.sqrt(e*e+n*n),a=(e/=o)*r+(n/=o)*i;r-=e*a, i-=n*a;var s=Math.sqrt(r*r+i*i);return a/=s, e*(i/=s)<n*(r/=s)&&(e=-e, n=-n, a=-a, o=-o), {scale:[o,0,0,s,0,0],translate:[1,0,0,1,t[4],t[5]],rotate:[e,n,-n,e,0,0],skew:[1,0,a,1,0,0]}},_matrix_map_point:function(t,e){var n=t[0],r=t[1],i=t[2],o=t[3],a=t[4],s=t[5],h=e[0],c=e[1];return[h*n+c*i+a,h*r+c*o+s]},_matrix_map_point_obj:function(t,e){var n=this._matrix_map_point(t,[e.x,e.y]);return{x:n[0],y:n[1]}},_matrix_map_rect:function(t,e){var n=this._matrix_map_point(t,[e.x,e.y]),r=this._matrix_map_point(t,[e.x+e.w,e.y+e.h]);return{x:n[0],y:n[1],w:r[0]-n[0],h:r[1]-n[1]}},_matrix_is_identity:function(t){return 1==t[0]&&(0==t[1]&&(0==t[2]&&(1==t[3]&&(0==t[4]&&0==t[5]))))},rotate:function(t){var e=[Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0];this.ctx._transform=this._matrix_multiply(this.ctx._transform,e);},scale:function(t,e){var n=[t,0,0,e,0,0];this.ctx._transform=this._matrix_multiply(this.ctx._transform,n);},translate:function(t,e){var n=[1,0,0,1,t,e];this.ctx._transform=this._matrix_multiply(this.ctx._transform,n);},stroke:function(){if(0<this.ctx._clip_path.length){var t;(t=window.outIntercept?"group"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push("q");var e=this.path;this.path=this.ctx._clip_path, this.ctx._clip_path=[], this._stroke(!0), this.ctx._clip_path=this.path, this.path=e, this._stroke(!1), t.push("Q");}else this._stroke(!1);},_stroke:function(t){if(t||!this._isStrokeTransparent()){for(var e=[],n=this.path,r=0;r<n.length;r++){var i=n[r];switch(i.type){case"mt":e.push({start:i,deltas:[],abs:[]});break;case"lt":var o=[i.x-n[r-1].x,i.y-n[r-1].y];e[e.length-1].deltas.push(o), e[e.length-1].abs.push(i);break;case"bct":o=[i.x1-n[r-1].x,i.y1-n[r-1].y,i.x2-n[r-1].x,i.y2-n[r-1].y,i.x-n[r-1].x,i.y-n[r-1].y];e[e.length-1].deltas.push(o);break;case"qct":var a=n[r-1].x+2/3*(i.x1-n[r-1].x),s=n[r-1].y+2/3*(i.y1-n[r-1].y),h=i.x+2/3*(i.x1-i.x),c=i.y+2/3*(i.y1-i.y),l=i.x,u=i.y;o=[a-n[r-1].x,s-n[r-1].y,h-n[r-1].x,c-n[r-1].y,l-n[r-1].x,u-n[r-1].y];e[e.length-1].deltas.push(o);break;case"arc":0==e.length&&e.push({start:{x:0,y:0},deltas:[],abs:[]}), e[e.length-1].arc=!0, Array.isArray(e[e.length-1].abs)&&e[e.length-1].abs.push(i);}}for(r=0;r<e.length;r++){var f;if(f=r==e.length-1?"s":null, e[r].arc)for(var d=e[r].abs,p=0;p<d.length;p++){var g=d[p],m=360*g.startAngle/(2*Math.PI),w=360*g.endAngle/(2*Math.PI),y=g.x,v=g.y;this.internal.arc2(this,y,v,g.radius,m,w,g.anticlockwise,f,t);}else{y=e[r].start.x, v=e[r].start.y;t?(this.pdf.lines(e[r].deltas,y,v,null,null), this.pdf.clip_fixed()):this.pdf.lines(e[r].deltas,y,v,null,f);}}}},_isFillTransparent:function(){return this.ctx._isFillTransparent||0==this.globalAlpha},_isStrokeTransparent:function(){return this.ctx._isStrokeTransparent||0==this.globalAlpha},fill:function(t){if(0<this.ctx._clip_path.length){var e;(e=window.outIntercept?"group"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage()).push("q");var n=this.path;this.path=this.ctx._clip_path, this.ctx._clip_path=[], this._fill(t,!0), this.ctx._clip_path=this.path, this.path=n, this._fill(t,!1), e.push("Q");}else this._fill(t,!1);},_fill:function(t,e){if(!this._isFillTransparent()){var n,r="function"==typeof this.pdf.internal.newObject2;n=window.outIntercept?"group"===window.outIntercept.type?window.outIntercept.stream:window.outIntercept:this.internal.getCurrentPage();var i=[],o=window.outIntercept;if(r)switch(this.ctx.globalCompositeOperation){case"normal":case"source-over":break;case"destination-in":case"destination-out":var a=this.pdf.internal.newStreamObject(),s=this.pdf.internal.newObject2();s.push("<</Type /ExtGState"), s.push("/SMask <</S /Alpha /G "+a.objId+" 0 R>>"), s.push(">>");var h="MASK"+s.objId;this.pdf.internal.addGraphicsState(h,s.objId);var c="/"+h+" gs";n.splice(0,0,"q"), n.splice(1,0,c), n.push("Q"), window.outIntercept=a;break;default:var l="/"+this.pdf.internal.blendModeMap[this.ctx.globalCompositeOperation.toUpperCase()];l&&this.pdf.internal.out(l+" gs");}var u=this.ctx.globalAlpha;if(this.ctx._fillOpacity<1&&(u=this.ctx._fillOpacity), r){var f=this.pdf.internal.newObject2();f.push("<</Type /ExtGState"), f.push("/CA "+u), f.push("/ca "+u), f.push(">>");h="GS_O_"+f.objId;this.pdf.internal.addGraphicsState(h,f.objId), this.pdf.internal.out("/"+h+" gs");}for(var d=this.path,p=0;p<d.length;p++){var g=d[p];switch(g.type){case"mt":i.push({start:g,deltas:[],abs:[]});break;case"lt":var m=[g.x-d[p-1].x,g.y-d[p-1].y];i[i.length-1].deltas.push(m), i[i.length-1].abs.push(g);break;case"bct":m=[g.x1-d[p-1].x,g.y1-d[p-1].y,g.x2-d[p-1].x,g.y2-d[p-1].y,g.x-d[p-1].x,g.y-d[p-1].y];i[i.length-1].deltas.push(m);break;case"qct":var w=d[p-1].x+2/3*(g.x1-d[p-1].x),y=d[p-1].y+2/3*(g.y1-d[p-1].y),v=g.x+2/3*(g.x1-g.x),b=g.y+2/3*(g.y1-g.y),x=g.x,S=g.y;m=[w-d[p-1].x,y-d[p-1].y,v-d[p-1].x,b-d[p-1].y,x-d[p-1].x,S-d[p-1].y];i[i.length-1].deltas.push(m);break;case"arc":0===i.length&&i.push({deltas:[],abs:[]}), i[i.length-1].arc=!0, Array.isArray(i[i.length-1].abs)&&i[i.length-1].abs.push(g);break;case"close":i.push({close:!0});}}for(p=0;p<i.length;p++){var k;if(p==i.length-1?(k="f", "evenodd"===t&&(k+="*")):k=null, i[p].close)this.pdf.internal.out("h"), k&&this.pdf.internal.out(k);else if(i[p].arc){i[p].start&&this.internal.move2(this,i[p].start.x,i[p].start.y);for(var _=i[p].abs,A=0;A<_.length;A++){var I=_[A];if(void 0!==I.startAngle){var C=360*I.startAngle/(2*Math.PI),T=360*I.endAngle/(2*Math.PI),F=I.x,P=I.y;if(0===A&&this.internal.move2(this,F,P), this.internal.arc2(this,F,P,I.radius,C,T,I.anticlockwise,null,e), A===_.length-1&&i[p].start){F=i[p].start.x, P=i[p].start.y;this.internal.line2(E,F,P);}}else this.internal.line2(E,I.x,I.y);}}else{F=i[p].start.x, P=i[p].start.y;e?(this.pdf.lines(i[p].deltas,F,P,null,null), this.pdf.clip_fixed()):this.pdf.lines(i[p].deltas,F,P,null,k);}}window.outIntercept=o;}},pushMask:function(){if("function"==typeof this.pdf.internal.newObject2){var t=this.pdf.internal.newStreamObject(),e=this.pdf.internal.newObject2();e.push("<</Type /ExtGState"), e.push("/SMask <</S /Alpha /G "+t.objId+" 0 R>>"), e.push(">>");var n="MASK"+e.objId;this.pdf.internal.addGraphicsState(n,e.objId);var r="/"+n+" gs";this.pdf.internal.out(r);}else console.log("jsPDF v2 not enabled");},clip:function(){if(0<this.ctx._clip_path.length)for(var t=0;t<this.path.length;t++)this.ctx._clip_path.push(this.path[t]);else this.ctx._clip_path=this.path;this.path=[];},measureText:function(n){var r=this.pdf;return{getWidth:function(){var t=r.internal.getFontSize(),e=r.getStringUnitWidth(n)*t/r.internal.scaleFactor;return e*=1.3333},get width(){return this.getWidth(n)}}},_getBaseline:function(t){var e=parseInt(this.pdf.internal.getFontSize()),n=.25*e;switch(this.ctx.textBaseline){case"bottom":return t-n;case"top":return t+e;case"hanging":return t+e-n;case"middle":return t+e/2-n;case"ideographic":return t;case"alphabetic":default:return t}}};var E=t.context2d;function e(){this._isStrokeTransparent=!1, this._strokeOpacity=1, this.strokeStyle="#000000", this.fillStyle="#000000", this._isFillTransparent=!1, this._fillOpacity=1, this.font="12pt times", this.textBaseline="alphabetic", this.textAlign="start", this.lineWidth=1, this.lineJoin="miter", this.lineCap="butt", this._transform=[1,0,0,1,0,0], this.globalCompositeOperation="normal", this.globalAlpha=1, this._clip_path=[], this.ignoreClearRect=!1, this.copy=function(t){this._isStrokeTransparent=t._isStrokeTransparent, this._strokeOpacity=t._strokeOpacity, this.strokeStyle=t.strokeStyle, this._isFillTransparent=t._isFillTransparent, this._fillOpacity=t._fillOpacity, this.fillStyle=t.fillStyle, this.font=t.font, this.lineWidth=t.lineWidth, this.lineJoin=t.lineJoin, this.lineCap=t.lineCap, this.textBaseline=t.textBaseline, this.textAlign=t.textAlign, this._fontSize=t._fontSize, this._transform=t._transform.slice(0), this.globalCompositeOperation=t.globalCompositeOperation, this.globalAlpha=t.globalAlpha, this._clip_path=t._clip_path.slice(0), this.ignoreClearRect=t.ignoreClearRect;};}Object.defineProperty(E,"fillStyle",{set:function(t){this.setFillStyle(t);},get:function(){return this.ctx.fillStyle}}), Object.defineProperty(E,"strokeStyle",{set:function(t){this.setStrokeStyle(t);},get:function(){return this.ctx.strokeStyle}}), Object.defineProperty(E,"lineWidth",{set:function(t){this.setLineWidth(t);},get:function(){return this.ctx.lineWidth}}), Object.defineProperty(E,"lineCap",{set:function(t){this.setLineCap(t);},get:function(){return this.ctx.lineCap}}), Object.defineProperty(E,"lineJoin",{set:function(t){this.setLineJoin(t);},get:function(){return this.ctx.lineJoin}}), Object.defineProperty(E,"miterLimit",{set:function(t){this.ctx.miterLimit=t;},get:function(){return this.ctx.miterLimit}}), Object.defineProperty(E,"textBaseline",{set:function(t){this.setTextBaseline(t);},get:function(){return this.getTextBaseline()}}), Object.defineProperty(E,"textAlign",{set:function(t){this.setTextAlign(t);},get:function(){return this.getTextAlign()}}), Object.defineProperty(E,"font",{set:function(t){this.setFont(t);},get:function(){return this.ctx.font}}), Object.defineProperty(E,"globalCompositeOperation",{set:function(t){this.ctx.globalCompositeOperation=t;},get:function(){return this.ctx.globalCompositeOperation}}), Object.defineProperty(E,"globalAlpha",{set:function(t){this.ctx.globalAlpha=t;},get:function(){return this.ctx.globalAlpha}}), Object.defineProperty(E,"canvas",{get:function(){return{parentNode:!1,style:!1}}}), Object.defineProperty(E,"ignoreClearRect",{set:function(t){this.ctx.ignoreClearRect=t;},get:function(){return this.ctx.ignoreClearRect}}), E.internal={}, E.internal.rxRgb=/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/, E.internal.rxRgba=/rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d\.]+)\s*\)/, E.internal.rxTransparent=/transparent|rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*0+\s*\)/, E.internal.arc=function(t,e,n,r,i,o,a,s){for(var h=this.pdf.internal.scaleFactor,c=this.pdf.internal.pageSize.getHeight(),l=this.pdf.internal.f2,u=i*(Math.PI/180),f=o*(Math.PI/180),d=this.createArc(r,u,f,a),p=0;p<d.length;p++){var g=d[p];0===p?this.pdf.internal.out([l((g.x1+e)*h),l((c-(g.y1+n))*h),"m",l((g.x2+e)*h),l((c-(g.y2+n))*h),l((g.x3+e)*h),l((c-(g.y3+n))*h),l((g.x4+e)*h),l((c-(g.y4+n))*h),"c"].join(" ")):this.pdf.internal.out([l((g.x2+e)*h),l((c-(g.y2+n))*h),l((g.x3+e)*h),l((c-(g.y3+n))*h),l((g.x4+e)*h),l((c-(g.y4+n))*h),"c"].join(" ")), t._lastPoint={x:e,y:n};}null!==s&&this.pdf.internal.out(this.pdf.internal.getStyle(s));}, E.internal.arc2=function(t,e,n,r,i,o,a,s,h){var c=e,l=n;h?(this.arc(t,c,l,r,i,o,a,null), this.pdf.clip_fixed()):this.arc(t,c,l,r,i,o,a,s);}, E.internal.move2=function(t,e,n){var r=this.pdf.internal.scaleFactor,i=this.pdf.internal.pageSize.getHeight(),o=this.pdf.internal.f2;this.pdf.internal.out([o(e*r),o((i-n)*r),"m"].join(" ")), t._lastPoint={x:e,y:n};}, E.internal.line2=function(t,e,n){var r=this.pdf.internal.scaleFactor,i=this.pdf.internal.pageSize.getHeight(),o=this.pdf.internal.f2,a={x:e,y:n};this.pdf.internal.out([o(a.x*r),o((i-a.y)*r),"l"].join(" ")), t._lastPoint=a;}, E.internal.createArc=function(t,e,n,r){var i=2*Math.PI,o=Math.PI/2,a=e;for((a<i||i<a)&&(a%=i), a<0&&(a=i+a);n<e;)e-=i;var s=Math.abs(n-e);s<i&&r&&(s=i-s);for(var h=[],c=r?-1:1,l=a;1e-5<s;){var u=l+c*Math.min(s,o);h.push(this.createSmallArc(t,l,u)), s-=Math.abs(u-l), l=u;}return h}, E.internal.getCurrentPage=function(){return this.pdf.internal.pages[this.pdf.internal.getCurrentPageInfo().pageNumber]}, E.internal.createSmallArc=function(t,e,n){var r=(n-e)/2,i=t*Math.cos(r),o=t*Math.sin(r),a=i,s=-o,h=a*a+s*s,c=h+a*i+s*o,l=4/3*(Math.sqrt(2*h*c)-c)/(a*o-s*i),u=a-l*s,f=s+l*a,d=u,p=-f,g=r+e,m=Math.cos(g),w=Math.sin(g);return{x1:t*Math.cos(e),y1:t*Math.sin(e),x2:u*m-f*w,y2:u*w+f*m,x3:d*m-p*w,y3:d*w+p*m,x4:t*Math.cos(n),y4:t*Math.sin(n)}};}($.API,"undefined"!=typeof self&&self||"undefined"!=typeof window&&window||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||Function('return typeof this === "object" && this.content')()||Function("return this")()), function(t){var T,F,i,a,s,h,c,l,P,v,f,u,d,n,E,q,p,g,m,O;T=function(){return function(t){return e.prototype=t, new e};function e(){}}(), v=function(t){var e,n,r,i,o,a,s;for(n=0, r=t.length, e=void 0, a=i=!1;!i&&n!==r;)(e=t[n]=t[n].trimLeft())&&(i=!0), n++;for(n=r-1;r&&!a&&-1!==n;)(e=t[n]=t[n].trimRight())&&(a=!0), n--;for(o=/\s+$/g, s=!0, n=0;n!==r;)"\u2028"!=t[n]&&(e=t[n].replace(/\s+/g," "), s&&(e=e.trimLeft()), e&&(s=o.test(e)), t[n]=e), n++;return t}, u=function(t){var e,n,r;for(e=void 0, n=(r=t.split(",")).shift();!e&&n;)e=i[n.trim().toLowerCase()], n=r.shift();return e}, d=function(t){var e;return-1<(t="auto"===t?"0px":t).indexOf("em")&&!isNaN(Number(t.replace("em","")))&&(t=18.719*Number(t.replace("em",""))+"px"), -1<t.indexOf("pt")&&!isNaN(Number(t.replace("pt","")))&&(t=1.333*Number(t.replace("pt",""))+"px"), (e=n[t])?e:void 0!==(e={"xx-small":9,"x-small":11,small:13,medium:16,large:19,"x-large":23,"xx-large":28,auto:0}[t])?n[t]=e/16:(e=parseFloat(t))?n[t]=e/16:(e=t.match(/([\d\.]+)(px)/), Array.isArray(e)&&3===e.length?n[t]=parseFloat(e[1])/16:n[t]=1)}, P=function(t){var e,n,r,i,o;return o=t, i=document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(o,null):o.currentStyle?o.currentStyle:o.style, n=void 0, (e={})["font-family"]=u((r=function(t){return t=t.replace(/-\D/g,function(t){return t.charAt(1).toUpperCase()}), i[t]})("font-family"))||"times", e["font-style"]=a[r("font-style")]||"normal", e["text-align"]=s[r("text-align")]||"left", "bold"===(n=h[r("font-weight")]||"normal")&&("normal"===e["font-style"]?e["font-style"]=n:e["font-style"]=n+e["font-style"]), e["font-size"]=d(r("font-size"))||1, e["line-height"]=d(r("line-height"))||1, e.display="inline"===r("display")?"inline":"block", n="block"===e.display, e["margin-top"]=n&&d(r("margin-top"))||0, e["margin-bottom"]=n&&d(r("margin-bottom"))||0, e["padding-top"]=n&&d(r("padding-top"))||0, e["padding-bottom"]=n&&d(r("padding-bottom"))||0, e["margin-left"]=n&&d(r("margin-left"))||0, e["margin-right"]=n&&d(r("margin-right"))||0, e["padding-left"]=n&&d(r("padding-left"))||0, e["padding-right"]=n&&d(r("padding-right"))||0, e["page-break-before"]=r("page-break-before")||"auto", e.float=c[r("cssFloat")]||"none", e.clear=l[r("clear")]||"none", e.color=r("color"), e}, E=function(t,e,n){var r,i,o,a,s;if(o=!1, a=i=void 0, r=n["#"+t.id])if("function"==typeof r)o=r(t,e);else for(i=0, a=r.length;!o&&i!==a;)o=r[i](t,e), i++;if(r=n[t.nodeName], !o&&r)if("function"==typeof r)o=r(t,e);else for(i=0, a=r.length;!o&&i!==a;)o=r[i](t,e), i++;for(s="string"==typeof t.className?t.className.split(" "):[], i=0;i<s.length;i++)if(r=n["."+s[i]], !o&&r)if("function"==typeof r)o=r(t,e);else for(i=0, a=r.length;!o&&i!==a;)o=r[i](t,e), i++;return o}, O=function(t,e){var n,r,i,o,a,s,h,c,l;for(n=[], r=[], i=0, l=t.rows[0].cells.length, h=t.clientWidth;i<l;)c=t.rows[0].cells[i], r[i]={name:c.textContent.toLowerCase().replace(/\s+/g,""),prompt:c.textContent.replace(/\r?\n/g,""),width:c.clientWidth/h*e.pdf.internal.pageSize.getWidth()}, i++;for(i=1;i<t.rows.length;){for(s=t.rows[i], a={}, o=0;o<s.cells.length;)a[r[o].name]=s.cells[o].textContent.replace(/\r?\n/g,""), o++;n.push(a), i++;}return{rows:n,headers:r}};var B={SCRIPT:1,STYLE:1,NOSCRIPT:1,OBJECT:1,EMBED:1,SELECT:1},R=1;F=function(t,i,e){var n,r,o,a,s,h,c,l;for(r=t.childNodes, n=void 0, (s="block"===(o=P(t)).display)&&(i.setBlockBoundary(), i.setBlockStyle(o)), a=0, h=r.length;a<h;){if("object"===(void 0===(n=r[a])?"undefined":vt(n))){if(i.executeWatchFunctions(n), 1===n.nodeType&&"HEADER"===n.nodeName){var u=n,f=i.pdf.margins_doc.top;i.pdf.internal.events.subscribe("addPage",function(t){i.y=f, F(u,i,e), i.pdf.margins_doc.top=i.y+10, i.y+=10;},!1);}if(8===n.nodeType&&"#comment"===n.nodeName)~n.textContent.indexOf("ADD_PAGE")&&(i.pdf.addPage(), i.y=i.pdf.margins_doc.top);else if(1!==n.nodeType||B[n.nodeName])if(3===n.nodeType){var d=n.nodeValue;if(n.nodeValue&&"LI"===n.parentNode.nodeName)if("OL"===n.parentNode.parentNode.nodeName)d=R+++". "+d;else{var p=o["font-size"],g=(3-.75*p)*i.pdf.internal.scaleFactor,m=.75*p*i.pdf.internal.scaleFactor,w=1.74*p/i.pdf.internal.scaleFactor;l=function(t,e){this.pdf.circle(t+g,e+m,w,"FD");};}16&n.ownerDocument.body.compareDocumentPosition(n)&&i.addText(d,o);}else"string"==typeof n&&i.addText(n,o);else{var y;if("IMG"===n.nodeName){var v=n.getAttribute("src");y=q[i.pdf.sHashCode(v)||v];}if(y){i.pdf.internal.pageSize.getHeight()-i.pdf.margins_doc.bottom<i.y+n.height&&i.y>i.pdf.margins_doc.top&&(i.pdf.addPage(), i.y=i.pdf.margins_doc.top, i.executeWatchFunctions(n));var b=P(n),x=i.x,S=12/i.pdf.internal.scaleFactor,k=(b["margin-left"]+b["padding-left"])*S,_=(b["margin-right"]+b["padding-right"])*S,A=(b["margin-top"]+b["padding-top"])*S,I=(b["margin-bottom"]+b["padding-bottom"])*S;void 0!==b.float&&"right"===b.float?x+=i.settings.width-n.width-_:x+=k, i.pdf.addImage(y,x,i.y+A,n.width,n.height), y=void 0, "right"===b.float||"left"===b.float?(i.watchFunctions.push(function(t,e,n,r){return i.y>=e?(i.x+=t, i.settings.width+=n, !0):!!(r&&1===r.nodeType&&!B[r.nodeName]&&i.x+r.width>i.pdf.margins_doc.left+i.pdf.margins_doc.width)&&(i.x+=t, i.y=e, i.settings.width+=n, !0)}.bind(this,"left"===b.float?-n.width-k-_:0,i.y+n.height+A+I,n.width)), i.watchFunctions.push(function(t,e,n){return!(i.y<t&&e===i.pdf.internal.getNumberOfPages())||1===n.nodeType&&"both"===P(n).clear&&(i.y=t, !0)}.bind(this,i.y+n.height,i.pdf.internal.getNumberOfPages())), i.settings.width-=n.width+k+_, "left"===b.float&&(i.x+=n.width+k+_)):i.y+=n.height+A+I;}else if("TABLE"===n.nodeName)c=O(n,i), i.y+=10, i.pdf.table(i.x,i.y,c.rows,c.headers,{autoSize:!1,printHeaders:e.printHeaders,margins:i.pdf.margins_doc,css:P(n)}), i.y=i.pdf.lastCellPos.y+i.pdf.lastCellPos.h+20;else if("OL"===n.nodeName||"UL"===n.nodeName)R=1, E(n,i,e)||F(n,i,e), i.y+=10;else if("LI"===n.nodeName){var C=i.x;i.x+=20/i.pdf.internal.scaleFactor, i.y+=3, E(n,i,e)||F(n,i,e), i.x=C;}else"BR"===n.nodeName?(i.y+=o["font-size"]*i.pdf.internal.scaleFactor, i.addText("\u2028",T(o))):E(n,i,e)||F(n,i,e);}}a++;}if(e.outY=i.y, s)return i.setBlockBoundary(l)}, q={}, p=function(t,o,e,n){var a,r=t.getElementsByTagName("img"),i=r.length,s=0;function h(){o.pdf.internal.events.publish("imagesLoaded"), n(a);}function c(e,n,r){if(e){var i=new Image;a=++s, i.crossOrigin="", i.onerror=i.onload=function(){if(i.complete&&(0===i.src.indexOf("data:image/")&&(i.width=n||i.width||0, i.height=r||i.height||0), i.width+i.height)){var t=o.pdf.sHashCode(e)||e;q[t]=q[t]||i;}--s||h();}, i.src=e;}}for(;i--;)c(r[i].getAttribute("src"),r[i].width,r[i].height);return s||h()}, g=function(t,o,a){var s=t.getElementsByTagName("footer");if(0<s.length){s=s[0];var e=o.pdf.internal.write,n=o.y;o.pdf.internal.write=function(){}, F(s,o,a);var h=Math.ceil(o.y-n)+5;o.y=n, o.pdf.internal.write=e, o.pdf.margins_doc.bottom+=h;for(var r=function(t){var e=void 0!==t?t.pageNumber:1,n=o.y;o.y=o.pdf.internal.pageSize.getHeight()-o.pdf.margins_doc.bottom, o.pdf.margins_doc.bottom-=h;for(var r=s.getElementsByTagName("span"),i=0;i<r.length;++i)-1<(" "+r[i].className+" ").replace(/[\n\t]/g," ").indexOf(" pageCounter ")&&(r[i].innerHTML=e), -1<(" "+r[i].className+" ").replace(/[\n\t]/g," ").indexOf(" totalPages ")&&(r[i].innerHTML="###jsPDFVarTotalPages###");F(s,o,a), o.pdf.margins_doc.bottom+=h, o.y=n;},i=s.getElementsByTagName("span"),c=0;c<i.length;++c)-1<(" "+i[c].className+" ").replace(/[\n\t]/g," ").indexOf(" totalPages ")&&o.pdf.internal.events.subscribe("htmlRenderingFinished",o.pdf.putTotalPages.bind(o.pdf,"###jsPDFVarTotalPages###"),!0);o.pdf.internal.events.subscribe("addPage",r,!1), r(), B.FOOTER=1;}}, m=function(t,e,n,r,i,o){if(!e)return!1;var a,s,h,c;"string"==typeof e||e.parentNode||(e=""+e.innerHTML), "string"==typeof e&&(a=e.replace(/<\/?script[^>]*?>/gi,""), c="jsPDFhtmlText"+Date.now().toString()+(1e3*Math.random()).toFixed(0), (h=document.createElement("div")).style.cssText="position: absolute !important;clip: rect(1px 1px 1px 1px); /* IE6, IE7 */clip: rect(1px, 1px, 1px, 1px);padding:0 !important;border:0 !important;height: 1px !important;width: 1px !important; top:auto;left:-100px;overflow: hidden;", h.innerHTML='<iframe style="height:1px;width:1px" name="'+c+'" />', document.body.appendChild(h), (s=window.frames[c]).document.open(), s.document.writeln(a), s.document.close(), e=s.document.body);var l,u=new f(t,n,r,i);return p.call(this,e,u,i.elementHandlers,function(t){g(e,u,i.elementHandlers), F(e,u,i.elementHandlers), u.pdf.internal.events.publish("htmlRenderingFinished"), l=u.dispose(), "function"==typeof o?o(l):t&&console.error("jsPDF Warning: rendering issues? provide a callback to fromHTML!");}), l||{x:u.x,y:u.y}}, (f=function(t,e,n,r){return this.pdf=t, this.x=e, this.y=n, this.settings=r, this.watchFunctions=[], this.init(), this}).prototype.init=function(){return this.paragraph={text:[],style:[]}, this.pdf.internal.write("q")}, f.prototype.dispose=function(){return this.pdf.internal.write("Q"), {x:this.x,y:this.y,ready:!0}}, f.prototype.executeWatchFunctions=function(t){var e=!1,n=[];if(0<this.watchFunctions.length){for(var r=0;r<this.watchFunctions.length;++r)!0===this.watchFunctions[r](t)?e=!0:n.push(this.watchFunctions[r]);this.watchFunctions=n;}return e}, f.prototype.splitFragmentsIntoLines=function(t,e){var n,r,i,o,a,s,h,c,l,u,f,d,p,g;for(u=this.pdf.internal.scaleFactor, o={}, s=h=c=g=a=i=l=r=void 0, d=[f=[]], n=0, p=this.settings.width;t.length;)if(a=t.shift(), g=e.shift(), a)if((i=o[(r=g["font-family"])+(l=g["font-style"])])||(i=this.pdf.internal.getFont(r,l).metadata.Unicode, o[r+l]=i), c={widths:i.widths,kerning:i.kerning,fontSize:12*g["font-size"],textIndent:n}, h=this.pdf.getStringUnitWidth(a,c)*c.fontSize/u, "\u2028"==a)f=[], d.push(f);else if(p<n+h){for(s=this.pdf.splitTextToSize(a,p,c), f.push([s.shift(),g]);s.length;)f=[[s.shift(),g]], d.push(f);n=this.pdf.getStringUnitWidth(f[0][0],c)*c.fontSize/u;}else f.push([a,g]), n+=h;if(void 0!==g["text-align"]&&("center"===g["text-align"]||"right"===g["text-align"]||"justify"===g["text-align"]))for(var m=0;m<d.length;++m){var w=this.pdf.getStringUnitWidth(d[m][0][0],c)*c.fontSize/u;0<m&&(d[m][0][1]=T(d[m][0][1]));var y=p-w;if("right"===g["text-align"])d[m][0][1]["margin-left"]=y;else if("center"===g["text-align"])d[m][0][1]["margin-left"]=y/2;else if("justify"===g["text-align"]){var v=d[m][0][0].split(" ").length-1;d[m][0][1]["word-spacing"]=y/v, m===d.length-1&&(d[m][0][1]["word-spacing"]=0);}}return d}, f.prototype.RenderTextFragment=function(t,e){var n,r;r=0, this.pdf.internal.pageSize.getHeight()-this.pdf.margins_doc.bottom<this.y+this.pdf.internal.getFontSize()&&(this.pdf.internal.write("ET","Q"), this.pdf.addPage(), this.y=this.pdf.margins_doc.top, this.pdf.internal.write("q","BT",this.getPdfColor(e.color),this.pdf.internal.getCoordinateString(this.x),this.pdf.internal.getVerticalCoordinateString(this.y),"Td"), r=Math.max(r,e["line-height"],e["font-size"]), this.pdf.internal.write(0,(-12*r).toFixed(2),"Td")), n=this.pdf.internal.getFont(e["font-family"],e["font-style"]);var i=this.getPdfColor(e.color);i!==this.lastTextColor&&(this.pdf.internal.write(i), this.lastTextColor=i), void 0!==e["word-spacing"]&&0<e["word-spacing"]&&this.pdf.internal.write(e["word-spacing"].toFixed(2),"Tw"), this.pdf.internal.write("/"+n.id,(12*e["font-size"]).toFixed(2),"Tf","("+this.pdf.internal.pdfEscape(t)+") Tj"), void 0!==e["word-spacing"]&&this.pdf.internal.write(0,"Tw");}, f.prototype.getPdfColor=function(t){var e,n,r,i=new RGBColor(t),o=/rgb\s*\(\s*(\d+),\s*(\d+),\s*(\d+\s*)\)/.exec(t);if(null!=o?(e=parseInt(o[1]), n=parseInt(o[2]), r=parseInt(o[3])):("#"!=t.charAt(0)&&(t=i.ok?i.toHex():"#000000"), e=t.substring(1,3), e=parseInt(e,16), n=t.substring(3,5), n=parseInt(n,16), r=t.substring(5,7), r=parseInt(r,16)), "string"==typeof e&&/^#[0-9A-Fa-f]{6}$/.test(e)){var a=parseInt(e.substr(1),16);e=a>>16&255, n=a>>8&255, r=255&a;}var s=this.f3;return 0===e&&0===n&&0===r||void 0===n?s(e/255)+" g":[s(e/255),s(n/255),s(r/255),"rg"].join(" ")}, f.prototype.f3=function(t){return t.toFixed(3)}, f.prototype.renderParagraph=function(t){var e,n,r,i,o,a,s,h,c,l,u,f,d;if(r=v(this.paragraph.text), f=this.paragraph.style, e=this.paragraph.blockstyle, this.paragraph.priorblockstyle||{}, this.paragraph={text:[],style:[],blockstyle:{},priorblockstyle:e}, r.join("").trim()){s=this.splitFragmentsIntoLines(r,f), h=a=void 0, n=12/this.pdf.internal.scaleFactor, this.priorMarginBottom=this.priorMarginBottom||0, u=(Math.max((e["margin-top"]||0)-this.priorMarginBottom,0)+(e["padding-top"]||0))*n, l=((e["margin-bottom"]||0)+(e["padding-bottom"]||0))*n, this.priorMarginBottom=e["margin-bottom"]||0, "always"===e["page-break-before"]&&(this.pdf.addPage(), this.y=0, u=((e["margin-top"]||0)+(e["padding-top"]||0))*n), c=this.pdf.internal.write, o=i=void 0, this.y+=u, c("q","BT 0 g",this.pdf.internal.getCoordinateString(this.x),this.pdf.internal.getVerticalCoordinateString(this.y),"Td");for(var p=0;s.length;){for(i=h=0, o=(a=s.shift()).length;i!==o;)a[i][0].trim()&&(h=Math.max(h,a[i][1]["line-height"],a[i][1]["font-size"]), d=7*a[i][1]["font-size"]), i++;var g=0,m=0;for(void 0!==a[0][1]["margin-left"]&&0<a[0][1]["margin-left"]&&(g=(m=this.pdf.internal.getCoordinateString(a[0][1]["margin-left"]))-p, p=m), c(g+Math.max(e["margin-left"]||0,0)*n,(-12*h).toFixed(2),"Td"), i=0, o=a.length;i!==o;)a[i][0]&&this.RenderTextFragment(a[i][0],a[i][1]), i++;if(this.y+=h*n, this.executeWatchFunctions(a[0][1])&&0<s.length){var w=[],y=[];s.forEach(function(t){for(var e=0,n=t.length;e!==n;)t[e][0]&&(w.push(t[e][0]+" "), y.push(t[e][1])), ++e;}), s=this.splitFragmentsIntoLines(v(w),y), c("ET","Q"), c("q","BT 0 g",this.pdf.internal.getCoordinateString(this.x),this.pdf.internal.getVerticalCoordinateString(this.y),"Td");}}return t&&"function"==typeof t&&t.call(this,this.x-9,this.y-d/2), c("ET","Q"), this.y+=l}}, f.prototype.setBlockBoundary=function(t){return this.renderParagraph(t)}, f.prototype.setBlockStyle=function(t){return this.paragraph.blockstyle=t}, f.prototype.addText=function(t,e){return this.paragraph.text.push(t), this.paragraph.style.push(e)}, i={helvetica:"helvetica","sans-serif":"helvetica","times new roman":"times",serif:"times",times:"times",monospace:"courier",courier:"courier"}, h={100:"normal",200:"normal",300:"normal",400:"normal",500:"bold",600:"bold",700:"bold",800:"bold",900:"bold",normal:"normal",bold:"bold",bolder:"bold",lighter:"normal"}, a={normal:"normal",italic:"italic",oblique:"italic"}, s={left:"left",right:"right",center:"center",justify:"justify"}, c={none:"none",right:"right",left:"left"}, l={none:"none",both:"both"}, n={normal:1}, t.fromHTML=function(t,e,n,r,i,o){return this.margins_doc=o||{top:0,bottom:0}, r||(r={}), r.elementHandlers||(r.elementHandlers={}), m(this,t,isNaN(e)?4:e,isNaN(n)?4:n,r,i)};}($.API), $.API.addJS=function(t){return s=t, this.internal.events.subscribe("postPutResources",function(t){n=this.internal.newObject(), this.internal.out("<<"), this.internal.out("/Names [(EmbeddedJS) "+(n+1)+" 0 R]"), this.internal.out(">>"), this.internal.out("endobj"), r=this.internal.newObject(), this.internal.out("<<"), this.internal.out("/S /JavaScript"), this.internal.out("/JS ("+s+")"), this.internal.out(">>"), this.internal.out("endobj");}), this.internal.events.subscribe("putCatalog",function(){void 0!==n&&void 0!==r&&this.internal.out("/Names <</JavaScript "+n+" 0 R>>");}), this}, (
+/**
+ * jsPDF Outline PlugIn
+ * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv
+ *
+ * Licensed under the MIT License.
+ * http://opensource.org/licenses/mit-license
+ */
+c=$.API).events.push(["postPutResources",function(){var t=this,e=/^(\d+) 0 obj$/;if(0<this.outline.root.children.length)for(var n=t.outline.render().split(/\r\n/),r=0;r<n.length;r++){var i=n[r],o=e.exec(i);if(null!=o){var a=o[1];t.internal.newObjectDeferredBegin(a);}t.internal.write(i);}if(this.outline.createNamedDestinations){var s=this.internal.pages.length,h=[];for(r=0;r<s;r++){var c=t.internal.newObject();h.push(c);var l=t.internal.getPageInfo(r+1);t.internal.write("<< /D["+l.objId+" 0 R /XYZ null null null]>> endobj");}var u=t.internal.newObject();for(t.internal.write("<< /Names [ "), r=0;r<h.length;r++)t.internal.write("(page_"+(r+1)+")"+h[r]+" 0 R");t.internal.write(" ] >>","endobj"), t.internal.newObject(), t.internal.write("<< /Dests "+u+" 0 R"), t.internal.write(">>","endobj");}}]), c.events.push(["putCatalog",function(){0<this.outline.root.children.length&&(this.internal.write("/Outlines",this.outline.makeRef(this.outline.root)), this.outline.createNamedDestinations&&this.internal.write("/Names "+namesOid+" 0 R"));}]), c.events.push(["initialized",function(){var o=this;o.outline={createNamedDestinations:!1,root:{children:[]}}, o.outline.add=function(t,e,n){var r={title:e,options:n,children:[]};return null==t&&(t=this.root), t.children.push(r), r}, o.outline.render=function(){return this.ctx={}, this.ctx.val="", this.ctx.pdf=o, this.genIds_r(this.root), this.renderRoot(this.root), this.renderItems(this.root), this.ctx.val}, o.outline.genIds_r=function(t){t.id=o.internal.newObjectDeferred();for(var e=0;e<t.children.length;e++)this.genIds_r(t.children[e]);}, o.outline.renderRoot=function(t){this.objStart(t), this.line("/Type /Outlines"), 0<t.children.length&&(this.line("/First "+this.makeRef(t.children[0])), this.line("/Last "+this.makeRef(t.children[t.children.length-1]))), this.line("/Count "+this.count_r({count:0},t)), this.objEnd();}, o.outline.renderItems=function(t){for(var e=0;e<t.children.length;e++){var n=t.children[e];this.objStart(n), this.line("/Title "+this.makeString(n.title)), this.line("/Parent "+this.makeRef(t)), 0<e&&this.line("/Prev "+this.makeRef(t.children[e-1])), e<t.children.length-1&&this.line("/Next "+this.makeRef(t.children[e+1])), 0<n.children.length&&(this.line("/First "+this.makeRef(n.children[0])), this.line("/Last "+this.makeRef(n.children[n.children.length-1])));var r=this.count=this.count_r({count:0},n);if(0<r&&this.line("/Count "+r), n.options&&n.options.pageNumber){var i=o.internal.getPageInfo(n.options.pageNumber);this.line("/Dest ["+i.objId+" 0 R /XYZ 0 "+this.ctx.pdf.internal.pageSize.getHeight()*this.ctx.pdf.internal.scaleFactor+" 0]");}this.objEnd();}for(e=0;e<t.children.length;e++)n=t.children[e], this.renderItems(n);}, o.outline.line=function(t){this.ctx.val+=t+"\r\n";}, o.outline.makeRef=function(t){return t.id+" 0 R"}, o.outline.makeString=function(t){return"("+o.internal.pdfEscape(t)+")"}, o.outline.objStart=function(t){this.ctx.val+="\r\n"+t.id+" 0 obj\r\n<<\r\n";}, o.outline.objEnd=function(t){this.ctx.val+=">> \r\nendobj\r\n";}, o.outline.count_r=function(t,e){for(var n=0;n<e.children.length;n++)t.count++, this.count_r(t,e.children[n]);return t.count};}]), P=$.API, E=function(){var t="function"==typeof Deflater;if(!t)throw new Error("requires deflate.js for compression");return t}, q=function(t,e,n,r){var i=5,o=b;switch(r){case P.image_compression.FAST:i=3, o=v;break;case P.image_compression.MEDIUM:i=6, o=x;break;case P.image_compression.SLOW:i=9, o=S;}t=w(t,e,n,o);var a=new Uint8Array(g(i)),s=m(t),h=new Deflater(i),c=h.append(t),l=h.flush(),u=a.length+c.length+l.length,f=new Uint8Array(u+4);return f.set(a), f.set(c,a.length), f.set(l,a.length+c.length), f[u++]=s>>>24&255, f[u++]=s>>>16&255, f[u++]=s>>>8&255, f[u++]=255&s, P.arrayBufferToBinaryString(f)}, g=function(t,e){var n=Math.LOG2E*Math.log(32768)-8<<4|8,r=n<<8;return r|=Math.min(3,(e-1&255)>>1)<<6, r|=0, [n,255&(r+=31-r%31)]}, m=function(t,e){for(var n,r=1,i=0,o=t.length,a=0;0<o;){for(o-=n=e<o?e:o;i+=r+=t[a++], --n;);r%=65521, i%=65521;}return(i<<16|r)>>>0}, w=function(t,e,n,r){for(var i,o,a,s=t.length/e,h=new Uint8Array(t.length+s),c=k(),l=0;l<s;l++){if(a=l*e, i=t.subarray(a,a+e), r)h.set(r(i,n,o),a+l);else{for(var u=0,f=c.length,d=[];u<f;u++)d[u]=c[u](i,n,o);var p=_(d.concat());h.set(d[p],a+l);}o=i;}return h}, l=function(t,e,n){var r=Array.apply([],t);return r.unshift(0), r}, v=function(t,e,n){var r,i=[],o=0,a=t.length;for(i[0]=1;o<a;o++)r=t[o-e]||0, i[o+1]=t[o]-r+256&255;return i}, b=function(t,e,n){var r,i=[],o=0,a=t.length;for(i[0]=2;o<a;o++)r=n&&n[o]||0, i[o+1]=t[o]-r+256&255;return i}, x=function(t,e,n){var r,i,o=[],a=0,s=t.length;for(o[0]=3;a<s;a++)r=t[a-e]||0, i=n&&n[a]||0, o[a+1]=t[a]+256-(r+i>>>1)&255;return o}, S=function(t,e,n){var r,i,o,a,s=[],h=0,c=t.length;for(s[0]=4;h<c;h++)r=t[h-e]||0, i=n&&n[h]||0, o=n&&n[h-e]||0, a=u(r,i,o), s[h+1]=t[h]-a+256&255;return s}, u=function(t,e,n){var r=t+e-n,i=Math.abs(r-t),o=Math.abs(r-e),a=Math.abs(r-n);return i<=o&&i<=a?t:o<=a?e:n}, k=function(){return[l,v,b,x,S]}, _=function(t){for(var e,n,r,i=0,o=t.length;i<o;)((e=f(t[i].slice(1)))<n||!n)&&(n=e, r=i), i++;return r}, f=function(t){for(var e=0,n=t.length,r=0;e<n;)r+=Math.abs(t[e++]);return r}, P.processPNG=function(t,e,n,r,i){var o,a,s,h,c,l,u=this.color_spaces.DEVICE_RGB,f=this.decode.FLATE_DECODE,d=8;if(this.isArrayBuffer(t)&&(t=new Uint8Array(t)), this.isArrayBufferView(t)){if("function"!=typeof PNG||"function"!=typeof kt)throw new Error("PNG support requires png.js and zlib.js");if(t=(o=new PNG(t)).imgData, d=o.bits, u=o.colorSpace, h=o.colors, -1!==[4,6].indexOf(o.colorType)){if(8===o.bits)for(var p,g=(I=32==o.pixelBitlength?new Uint32Array(o.decodePixels().buffer):16==o.pixelBitlength?new Uint16Array(o.decodePixels().buffer):new Uint8Array(o.decodePixels().buffer)).length,m=new Uint8Array(g*o.colors),w=new Uint8Array(g),y=o.pixelBitlength-o.bits,v=0,b=0;v<g;v++){for(x=I[v], p=0;p<y;)m[b++]=x>>>p&255, p+=o.bits;w[v]=x>>>p&255;}if(16===o.bits){g=(I=new Uint32Array(o.decodePixels().buffer)).length, m=new Uint8Array(g*(32/o.pixelBitlength)*o.colors), w=new Uint8Array(g*(32/o.pixelBitlength));for(var x,S=1<o.colors,k=b=v=0;v<g;)x=I[v++], m[b++]=x>>>0&255, S&&(m[b++]=x>>>16&255, x=I[v++], m[b++]=x>>>0&255), w[k++]=x>>>16&255;d=8;}r!==P.image_compression.NONE&&E()?(t=q(m,o.width*o.colors,o.colors,r), l=q(w,o.width,1,r)):(t=m, l=w, f=null);}if(3===o.colorType&&(u=this.color_spaces.INDEXED, c=o.palette, o.transparency.indexed)){var _=o.transparency.indexed,A=0;for(v=0, g=_.length;v<g;++v)A+=_[v];if((A/=255)==g-1&&-1!==_.indexOf(0))s=[_.indexOf(0)];else if(A!==g){var I=o.decodePixels();for(w=new Uint8Array(I.length), v=0, g=I.length;v<g;v++)w[v]=_[I[v]];l=q(w,o.width,1);}}var C=function(t){var e;switch(t){case P.image_compression.FAST:e=11;break;case P.image_compression.MEDIUM:e=13;break;case P.image_compression.SLOW:e=14;break;default:e=12;}return e}(r);return a=f===this.decode.FLATE_DECODE?"/Predictor "+C+" /Colors "+h+" /BitsPerComponent "+d+" /Columns "+o.width:"/Colors "+h+" /BitsPerComponent "+d+" /Columns "+o.width, (this.isArrayBuffer(t)||this.isArrayBufferView(t))&&(t=this.arrayBufferToBinaryString(t)), (l&&this.isArrayBuffer(l)||this.isArrayBufferView(l))&&(l=this.arrayBufferToBinaryString(l)), this.createImageInfo(t,o.width,o.height,u,d,f,e,n,a,s,c,l,C)}throw new Error("Unsupported PNG image data, try using JPEG instead.")}, (
+/**
+ * jsPDF gif Support PlugIn
+ * Copyright (c) 2017 Aras Abbasi
+ *
+ * Licensed under the MIT License.
+ * http://opensource.org/licenses/mit-license
+ */
+A=$.API).processGIF89A=function(t,e,n,r,i){var o=new mt(t),a=o.width,s=o.height,h=[];o.decodeAndBlitFrameRGBA(0,h);var c={data:h,width:a,height:s},l=new yt(100).encode(c,100);return A.processJPEG.call(this,l,e,n,r)}, A.processGIF87A=A.processGIF89A, (
+/**
+ * jsPDF bmp Support PlugIn
+ * Copyright (c) 2018 Aras Abbasi
+ *
+ * Licensed under the MIT License.
+ * http://opensource.org/licenses/mit-license
+ */
+O=$.API).processBMP=function(t,e,n,r,i){var o=new xt(t,!1),a=o.width,s=o.height,h={data:o.getData(),width:a,height:s},c=new yt(100).encode(h,100);return O.processJPEG.call(this,c,e,n,r)}, $.API.setLanguage=function(t){return void 0===this.internal.languageSettings&&(this.internal.languageSettings={}, this.internal.languageSettings.isSubscribed=!1), void 0!=={af:"Afrikaans",sq:"Albanian",ar:"Arabic (Standard)","ar-DZ":"Arabic (Algeria)","ar-BH":"Arabic (Bahrain)","ar-EG":"Arabic (Egypt)","ar-IQ":"Arabic (Iraq)","ar-JO":"Arabic (Jordan)","ar-KW":"Arabic (Kuwait)","ar-LB":"Arabic (Lebanon)","ar-LY":"Arabic (Libya)","ar-MA":"Arabic (Morocco)","ar-OM":"Arabic (Oman)","ar-QA":"Arabic (Qatar)","ar-SA":"Arabic (Saudi Arabia)","ar-SY":"Arabic (Syria)","ar-TN":"Arabic (Tunisia)","ar-AE":"Arabic (U.A.E.)","ar-YE":"Arabic (Yemen)",an:"Aragonese",hy:"Armenian",as:"Assamese",ast:"Asturian",az:"Azerbaijani",eu:"Basque",be:"Belarusian",bn:"Bengali",bs:"Bosnian",br:"Breton",bg:"Bulgarian",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",zh:"Chinese","zh-HK":"Chinese (Hong Kong)","zh-CN":"Chinese (PRC)","zh-SG":"Chinese (Singapore)","zh-TW":"Chinese (Taiwan)",cv:"Chuvash",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch (Standard)","nl-BE":"Dutch (Belgian)",en:"English","en-AU":"English (Australia)","en-BZ":"English (Belize)","en-CA":"English (Canada)","en-IE":"English (Ireland)","en-JM":"English (Jamaica)","en-NZ":"English (New Zealand)","en-PH":"English (Philippines)","en-ZA":"English (South Africa)","en-TT":"English (Trinidad & Tobago)","en-GB":"English (United Kingdom)","en-US":"English (United States)","en-ZW":"English (Zimbabwe)",eo:"Esperanto",et:"Estonian",fo:"Faeroese",fj:"Fijian",fi:"Finnish",fr:"French (Standard)","fr-BE":"French (Belgium)","fr-CA":"French (Canada)","fr-FR":"French (France)","fr-LU":"French (Luxembourg)","fr-MC":"French (Monaco)","fr-CH":"French (Switzerland)",fy:"Frisian",fur:"Friulian",gd:"Gaelic (Scots)","gd-IE":"Gaelic (Irish)",gl:"Galacian",ka:"Georgian",de:"German (Standard)","de-AT":"German (Austria)","de-DE":"German (Germany)","de-LI":"German (Liechtenstein)","de-LU":"German (Luxembourg)","de-CH":"German (Switzerland)",el:"Greek",gu:"Gujurati",ht:"Haitian",he:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",iu:"Inuktitut",ga:"Irish",it:"Italian (Standard)","it-CH":"Italian (Switzerland)",ja:"Japanese",kn:"Kannada",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ky:"Kirghiz",tlh:"Klingon",ko:"Korean","ko-KP":"Korean (North Korea)","ko-KR":"Korean (South Korea)",la:"Latin",lv:"Latvian",lt:"Lithuanian",lb:"Luxembourgish",mk:"FYRO Macedonian",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mo:"Moldavian",nv:"Navajo",ng:"Ndonga",ne:"Nepali",no:"Norwegian",nb:"Norwegian (Bokmal)",nn:"Norwegian (Nynorsk)",oc:"Occitan",or:"Oriya",om:"Oromo",fa:"Persian","fa-IR":"Persian/Iran",pl:"Polish",pt:"Portuguese","pt-BR":"Portuguese (Brazil)",pa:"Punjabi","pa-IN":"Punjabi (India)","pa-PK":"Punjabi (Pakistan)",qu:"Quechua",rm:"Rhaeto-Romanic",ro:"Romanian","ro-MO":"Romanian (Moldavia)",ru:"Russian","ru-MO":"Russian (Moldavia)",sz:"Sami (Lappish)",sg:"Sango",sa:"Sanskrit",sc:"Sardinian",sd:"Sindhi",si:"Singhalese",sr:"Serbian",sk:"Slovak",sl:"Slovenian",so:"Somani",sb:"Sorbian",es:"Spanish","es-AR":"Spanish (Argentina)","es-BO":"Spanish (Bolivia)","es-CL":"Spanish (Chile)","es-CO":"Spanish (Colombia)","es-CR":"Spanish (Costa Rica)","es-DO":"Spanish (Dominican Republic)","es-EC":"Spanish (Ecuador)","es-SV":"Spanish (El Salvador)","es-GT":"Spanish (Guatemala)","es-HN":"Spanish (Honduras)","es-MX":"Spanish (Mexico)","es-NI":"Spanish (Nicaragua)","es-PA":"Spanish (Panama)","es-PY":"Spanish (Paraguay)","es-PE":"Spanish (Peru)","es-PR":"Spanish (Puerto Rico)","es-ES":"Spanish (Spain)","es-UY":"Spanish (Uruguay)","es-VE":"Spanish (Venezuela)",sx:"Sutu",sw:"Swahili",sv:"Swedish","sv-FI":"Swedish (Finland)","sv-SV":"Swedish (Sweden)",ta:"Tamil",tt:"Tatar",te:"Teluga",th:"Thai",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"Turkish",tk:"Turkmen",uk:"Ukrainian",hsb:"Upper Sorbian",ur:"Urdu",ve:"Venda",vi:"Vietnamese",vo:"Volapuk",wa:"Walloon",cy:"Welsh",xh:"Xhosa",ji:"Yiddish",zu:"Zulu"}[t]&&(this.internal.languageSettings.languageCode=t, !1===this.internal.languageSettings.isSubscribed&&(this.internal.events.subscribe("putCatalog",function(){this.internal.write("/Lang ("+this.internal.languageSettings.languageCode+")");}), this.internal.languageSettings.isSubscribed=!0)), this}, B=$.API, R=B.getCharWidthsArray=function(t,e){var n,r,i,o=(e=e||{}).font||this.internal.getFont(),a=e.fontSize||this.internal.getFontSize(),s=e.charSpace||this.internal.getCharSpace(),h=e.widths?e.widths:o.metadata.Unicode.widths,c=h.fof?h.fof:1,l=e.kerning?e.kerning:o.metadata.Unicode.kerning,u=l.fof?l.fof:1,f=0,d=h[0]||c,p=[];for(n=0, r=t.length;n<r;n++)i=t.charCodeAt(n), "function"==typeof o.metadata.widthOfString?p.push((o.metadata.widthOfGlyph(o.metadata.characterToGlyph(i))+s*(1e3/a)||0)/1e3):p.push((h[i]||d)/c+(l[i]&&l[i][f]||0)/u), f=i;return p}, j=B.getArraySum=function(t){for(var e=t.length,n=0;e;)n+=t[--e];return n}, D=B.getStringUnitWidth=function(t,e){var n=(e=e||{}).fontSize||this.internal.getFontSize(),r=e.font||this.internal.getFont(),i=e.charSpace||this.internal.getCharSpace();return"function"==typeof r.metadata.widthOfString?r.metadata.widthOfString(t,n,i)/n:j(R.apply(this,arguments))}, M=function(t,e,n,r){for(var i=[],o=0,a=t.length,s=0;o!==a&&s+e[o]<n;)s+=e[o], o++;i.push(t.slice(0,o));var h=o;for(s=0;o!==a;)s+e[o]>r&&(i.push(t.slice(h,o)), s=0, h=o), s+=e[o], o++;return h!==o&&i.push(t.slice(h,o)), i}, U=function(t,e,n){n||(n={});var r,i,o,a,s,h,c=[],l=[c],u=n.textIndent||0,f=0,d=0,p=t.split(" "),g=R.apply(this,[" ",n])[0];if(h=-1===n.lineIndent?p[0].length+2:n.lineIndent||0){var m=Array(h).join(" "),w=[];p.map(function(t){1<(t=t.split(/\s*\n/)).length?w=w.concat(t.map(function(t,e){return(e&&t.length?"\n":"")+t})):w.push(t[0]);}), p=w, h=D.apply(this,[m,n]);}for(o=0, a=p.length;o<a;o++){var y=0;if(r=p[o], h&&"\n"==r[0]&&(r=r.substr(1), y=1), i=R.apply(this,[r,n]), e<u+f+(d=j(i))||y){if(e<d){for(s=M.apply(this,[r,i,e-(u+f),e]), c.push(s.shift()), c=[s.pop()];s.length;)l.push([s.shift()]);d=j(i.slice(r.length-(c[0]?c[0].length:0)));}else c=[r];l.push(c), u=d+h, f=g;}else c.push(r), u+=f+d, f=g;}if(h)var v=function(t,e){return(e?m:"")+t.join(" ")};else v=function(t){return t.join(" ")};return l.map(v)}, B.splitTextToSize=function(t,e,n){var r,i=(n=n||{}).fontSize||this.internal.getFontSize(),o=function(t){var e={0:1},n={};if(t.widths&&t.kerning)return{widths:t.widths,kerning:t.kerning};var r=this.internal.getFont(t.fontName,t.fontStyle),i="Unicode";return r.metadata[i]?{widths:r.metadata[i].widths||e,kerning:r.metadata[i].kerning||n}:{font:r.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,n);r=Array.isArray(t)?t:t.split(/\r?\n/);var a=1*this.internal.scaleFactor*e/i;o.textIndent=n.textIndent?1*n.textIndent*this.internal.scaleFactor/i:0, o.lineIndent=n.lineIndent;var s,h,c=[];for(s=0, h=r.length;s<h;s++)c=c.concat(U.apply(this,[r[s],a,o]));return c}, N=$.API, L={codePages:["WinAnsiEncoding"],WinAnsiEncoding:(z=function(t){for(var e="klmnopqrstuvwxyz",n={},r=0;r<e.length;r++)n[e[r]]="0123456789abcdef"[r];var i,o,a,s,h,c={},l=1,u=c,f=[],d="",p="",g=t.length-1;for(r=1;r!=g;)h=t[r], r+=1, "'"==h?o?(s=o.join(""), o=i):o=[]:o?o.push(h):"{"==h?(f.push([u,s]), u={}, s=i):"}"==h?((a=f.pop())[0][a[1]]=u, s=i, u=a[0]):"-"==h?l=-1:s===i?n.hasOwnProperty(h)?(d+=n[h], s=parseInt(d,16)*l, l=1, d=""):d+=h:n.hasOwnProperty(h)?(p+=n[h], u[s]=parseInt(p,16)*l, l=1, s=i, p=""):p+=h;return c})("{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}")}, H={Unicode:{Courier:L,"Courier-Bold":L,"Courier-BoldOblique":L,"Courier-Oblique":L,Helvetica:L,"Helvetica-Bold":L,"Helvetica-BoldOblique":L,"Helvetica-Oblique":L,"Times-Roman":L,"Times-Bold":L,"Times-BoldItalic":L,"Times-Italic":L}
+/**
+ Resources:
+ Font metrics data is reprocessed derivative of contents of
+ "Font Metrics for PDF Core 14 Fonts" package, which exhibits the following copyright and license:
+
+ Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.
+
+ This file and the 14 PostScript(R) AFM files it accompanies may be used,
+ copied, and distributed for any purpose and without charge, with or without
+ modification, provided that all copyright notices are retained; that the AFM
+ files are not distributed without this file; that all modifications to this
+ file or any of the AFM files are prominently noted in the modified file(s);
+ and that this paragraph is not modified. Adobe Systems has no responsibility
+ or obligation to support the use of the AFM files.
+
+ */}, W={Unicode:{"Courier-Oblique":z("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Times-BoldItalic":z("{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}"),"Helvetica-Bold":z("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"),Courier:z("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Courier-BoldOblique":z("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Times-Bold":z("{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}"),Symbol:z("{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}"),Helvetica:z("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}"),"Helvetica-BoldOblique":z("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"),ZapfDingbats:z("{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}"),"Courier-Bold":z("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"),"Times-Italic":z("{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}"),"Times-Roman":z("{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}"),"Helvetica-Oblique":z("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}")}}, N.events.push(["addFont",function(t){var e,n,r,i="Unicode";(e=W[i][t.postScriptName])&&((n=t.metadata[i]?t.metadata[i]:t.metadata[i]={}).widths=e.widths, n.kerning=e.kerning), (r=H[i][t.postScriptName])&&((n=t.metadata[i]?t.metadata[i]:t.metadata[i]={}).encoding=r).codePages&&r.codePages.length&&(t.encoding=r.codePages[0]);}]), G=$, "undefined"!=typeof self&&self||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||"undefined"!=typeof window&&window||Function("return this")(), G.API.events.push(["addFont",function(t){G.API.existsFileInVFS(t.postScriptName)?(t.metadata=G.API.TTFFont.open(t.postScriptName,t.fontName,G.API.getFileFromVFS(t.postScriptName),t.encoding), t.metadata.Unicode=t.metadata.Unicode||{encoding:{},kerning:{},widths:[]}):14<t.id.slice(1)&&console.error("Font does not exist in FileInVFS, import fonts or remove declaration doc.addFont('"+t.postScriptName+"').");}]), (
+/** @preserve
+ jsPDF SVG plugin
+ Copyright (c) 2012 Willow Systems Corporation, willow-systems.com
+ */
+V=$.API).addSvg=function(t,e,n,r,i){if(void 0===e||void 0===n)throw new Error("addSVG needs values for 'x' and 'y'");function o(t){for(var e=parseFloat(t[1]),n=parseFloat(t[2]),r=[],i=3,o=t.length;i<o;)"c"===t[i]?(r.push([parseFloat(t[i+1]),parseFloat(t[i+2]),parseFloat(t[i+3]),parseFloat(t[i+4]),parseFloat(t[i+5]),parseFloat(t[i+6])]), i+=7):"l"===t[i]?(r.push([parseFloat(t[i+1]),parseFloat(t[i+2])]), i+=3):i+=1;return[e,n,r]}var a,s,h,c,l,u,f,d,p=(c=document, d=c.createElement("iframe"), l=".jsPDF_sillysvg_iframe {display:none;position:absolute;}", (f=(u=c).createElement("style")).type="text/css", f.styleSheet?f.styleSheet.cssText=l:f.appendChild(u.createTextNode(l)), u.getElementsByTagName("head")[0].appendChild(f), d.name="childframe", d.setAttribute("width",0), d.setAttribute("height",0), d.setAttribute("frameborder","0"), d.setAttribute("scrolling","no"), d.setAttribute("seamless","seamless"), d.setAttribute("class","jsPDF_sillysvg_iframe"), c.body.appendChild(d), d),g=(a=t, (h=((s=p).contentWindow||s.contentDocument).document).write(a), h.close(), h.getElementsByTagName("svg")[0]),m=[1,1],w=parseFloat(g.getAttribute("width")),y=parseFloat(g.getAttribute("height"));w&&y&&(r&&i?m=[r/w,i/y]:r?m=[r/w,r/w]:i&&(m=[i/y,i/y]));var v,b,x,S,k=g.childNodes;for(v=0, b=k.length;v<b;v++)(x=k[v]).tagName&&"PATH"===x.tagName.toUpperCase()&&((S=o(x.getAttribute("d").split(" ")))[0]=S[0]*m[0]+e, S[1]=S[1]*m[1]+n, this.lines.call(this,S[2],S[0],S[1],m));return this}, V.addSVG=V.addSvg, V.addSvgAsImage=function(t,e,n,r,i,o,a,s){if(isNaN(e)||isNaN(n))throw console.error("jsPDF.addSvgAsImage: Invalid coordinates",arguments), new Error("Invalid coordinates passed to jsPDF.addSvgAsImage");if(isNaN(r)||isNaN(i))throw console.error("jsPDF.addSvgAsImage: Invalid measurements",arguments), new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage");var h=document.createElement("canvas");h.width=r, h.height=i;var c=h.getContext("2d");return c.fillStyle="#fff", c.fillRect(0,0,h.width,h.height), canvg(h,t,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0}), this.addImage(h.toDataURL("image/jpeg",1),e,n,r,i,a,s), this}, $.API.putTotalPages=function(t){for(var e=new RegExp(t,"g"),n=1;n<=this.internal.getNumberOfPages();n++)for(var r=0;r<this.internal.pages[n].length;r++)this.internal.pages[n][r]=this.internal.pages[n][r].replace(e,this.internal.getNumberOfPages());return this}, $.API.viewerPreferences=function(t,e){var n;t=t||{}, e=e||!1;var r,i,o={HideToolbar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:"UseNone",value:"UseNone",type:"name",explicitSet:!1,valueSet:["UseNone","UseOutlines","UseThumbs","UseOC"],pdfVersion:1.3},Direction:{defaultValue:"L2R",value:"L2R",type:"name",explicitSet:!1,valueSet:["L2R","R2L"],pdfVersion:1.3},ViewArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},ViewClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintScaling:{defaultValue:"AppDefault",value:"AppDefault",type:"name",explicitSet:!1,valueSet:["AppDefault","None"],pdfVersion:1.6},Duplex:{defaultValue:"",value:"none",type:"name",explicitSet:!1,valueSet:["Simplex","DuplexFlipShortEdge","DuplexFlipLongEdge","none"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:"",value:"",type:"array",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:"integer",explicitSet:!1,valueSet:null,pdfVersion:1.7}},a=Object.keys(o),s=[],h=0,c=0,l=0,u=!0;function f(t,e){var n,r=!1;for(n=0;n<t.length;n+=1)t[n]===e&&(r=!0);return r}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={}, this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(o)), this.internal.viewerpreferences.isSubscribed=!1), n=this.internal.viewerpreferences.configuration, "reset"===t||!0===e){var d=a.length;for(l=0;l<d;l+=1)n[a[l]].value=n[a[l]].defaultValue, n[a[l]].explicitSet=!1;}if("object"===(void 0===t?"undefined":vt(t)))for(r in t)if(i=t[r], f(a,r)&&void 0!==i){if("boolean"===n[r].type&&"boolean"==typeof i)n[r].value=i;else if("name"===n[r].type&&f(n[r].valueSet,i))n[r].value=i;else if("integer"===n[r].type&&Number.isInteger(i))n[r].value=i;else if("array"===n[r].type){for(h=0;h<i.length;h+=1)if(u=!0, 1===i[h].length&&"number"==typeof i[h][0])s.push(String(i[h]));else if(1<i[h].length){for(c=0;c<i[h].length;c+=1)"number"!=typeof i[h][c]&&(u=!1);!0===u&&s.push(String(i[h].join("-")));}n[r].value=String(s);}else n[r].value=n[r].defaultValue;n[r].explicitSet=!0;}return!1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe("putCatalog",function(){var t,e=[];for(t in n)!0===n[t].explicitSet&&("name"===n[t].type?e.push("/"+t+" /"+n[t].value):e.push("/"+t+" "+n[t].value));0!==e.length&&this.internal.write("/ViewerPreferences\n<<\n"+e.join("\n")+"\n>>");}), this.internal.viewerpreferences.isSubscribed=!0), this.internal.viewerpreferences.configuration=n, this}, Y=$.API, K=J=X="", Y.addMetadata=function(t,e){return J=e||"http://jspdf.default.namespaceuri/", X=t, this.internal.events.subscribe("postPutResources",function(){if(X){var t='<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><rdf:Description rdf:about="" xmlns:jspdf="'+J+'"><jspdf:metadata>',e=unescape(encodeURIComponent('<x:xmpmeta xmlns:x="adobe:ns:meta/">')),n=unescape(encodeURIComponent(t)),r=unescape(encodeURIComponent(X)),i=unescape(encodeURIComponent("</jspdf:metadata></rdf:Description></rdf:RDF>")),o=unescape(encodeURIComponent("</x:xmpmeta>")),a=n.length+r.length+i.length+e.length+o.length;K=this.internal.newObject(), this.internal.write("<< /Type /Metadata /Subtype /XML /Length "+a+" >>"), this.internal.write("stream"), this.internal.write(e+n+r+i+o), this.internal.write("endstream"), this.internal.write("endobj");}else K="";}), this.internal.events.subscribe("putCatalog",function(){K&&this.internal.write("/Metadata "+K+" 0 R");}), this}, function(l,t){var e=l.API,m=[0];e.events.push(["putFont",function(t){!function(t,e,n){if(t.metadata instanceof l.API.TTFFont&&"Identity-H"===t.encoding){for(var r=t.metadata.Unicode.widths,i=t.metadata.subset.encode(m),o="",a=0;a<i.length;a++)o+=String.fromCharCode(i[a]);var s=n();e("<<"), e("/Length "+o.length), e("/Length1 "+o.length), e(">>"), e("stream"), e(o), e("endstream"), e("endobj");var h=n();e("<<"), e("/Type /FontDescriptor"), e("/FontName /"+t.fontName), e("/FontFile2 "+s+" 0 R"), e("/FontBBox "+l.API.PDFObject.convert(t.metadata.bbox)), e("/Flags "+t.metadata.flags), e("/StemV "+t.metadata.stemV), e("/ItalicAngle "+t.metadata.italicAngle), e("/Ascent "+t.metadata.ascender), e("/Descent "+t.metadata.decender), e("/CapHeight "+t.metadata.capHeight), e(">>"), e("endobj");var c=n();e("<<"), e("/Type /Font"), e("/BaseFont /"+t.fontName), e("/FontDescriptor "+h+" 0 R"), e("/W "+l.API.PDFObject.convert(r)), e("/CIDToGIDMap /Identity"), e("/DW 1000"), e("/Subtype /CIDFontType2"), e("/CIDSystemInfo"), e("<<"), e("/Supplement 0"), e("/Registry (Adobe)"), e("/Ordering ("+t.encoding+")"), e(">>"), e(">>"), e("endobj"), t.objectNumber=n(), e("<<"), e("/Type /Font"), e("/Subtype /Type0"), e("/BaseFont /"+t.fontName), e("/Encoding /"+t.encoding), e("/DescendantFonts ["+c+" 0 R]"), e(">>"), e("endobj"), t.isAlreadyPutted=!0;}}(t.font,t.out,t.newObject);}]);e.events.push(["putFont",function(t){!function(t,e,n){if(t.metadata instanceof l.API.TTFFont&&"WinAnsiEncoding"===t.encoding){t.metadata.Unicode.widths;for(var r=t.metadata.rawData,i="",o=0;o<r.length;o++)i+=String.fromCharCode(r[o]);var a=n();e("<<"), e("/Length "+i.length), e("/Length1 "+i.length), e(">>"), e("stream"), e(i), e("endstream"), e("endobj");var s=n();for(e("<<"), e("/Descent "+t.metadata.decender), e("/CapHeight "+t.metadata.capHeight), e("/StemV "+t.metadata.stemV), e("/Type /FontDescriptor"), e("/FontFile2 "+a+" 0 R"), e("/Flags 96"), e("/FontBBox "+l.API.PDFObject.convert(t.metadata.bbox)), e("/FontName /"+t.fontName), e("/ItalicAngle "+t.metadata.italicAngle), e("/Ascent "+t.metadata.ascender), e(">>"), e("endobj"), t.objectNumber=n(), o=0;o<t.metadata.hmtx.widths.length;o++)t.metadata.hmtx.widths[o]=parseInt(t.metadata.hmtx.widths[o]*(1e3/t.metadata.head.unitsPerEm));e("<</Subtype/TrueType/Type/Font/BaseFont/"+t.fontName+"/FontDescriptor "+s+" 0 R/Encoding/"+t.encoding+" /FirstChar 29 /LastChar 255 /Widths "+l.API.PDFObject.convert(t.metadata.hmtx.widths)+">>"), e("endobj"), t.isAlreadyPutted=!0;}}(t.font,t.out,t.newObject);}]);var c=function(t){var e,n,r=t.text||"",i=t.x,o=t.y,a=t.options||{},s=t.mutex||{},h=s.pdfEscape,c=s.activeFontKey,l=s.fonts,u=(s.activeFontSize, ""),f=0,d="",p=l[n=c].encoding;if("Identity-H"!==l[n].encoding)return{text:r,x:i,y:o,options:a,mutex:s};for(d=r, n=c, "[object Array]"===Object.prototype.toString.call(r)&&(d=r[0]), f=0;f<d.length;f+=1)l[n].metadata.hasOwnProperty("cmap")&&(e=l[n].metadata.cmap.unicode.codeMap[d[f].charCodeAt(0)]), e?u+=d[f]:d[f].charCodeAt(0)<256&&l[n].metadata.hasOwnProperty("Unicode")?u+=d[f]:u+="";var g="";return parseInt(n.slice(1))<14||"WinAnsiEncoding"===p?g=function(t){for(var e="",n=0;n<t.length;n++)e+=""+t.charCodeAt(n).toString(16);return e}(h(u,n)):"Identity-H"===p&&(g=function(t,e){for(var n,r=e.metadata.Unicode.widths,i=["","0","00","000","0000"],o=[""],a=0,s=t.length;a<s;++a){if(n=e.metadata.characterToGlyph(t.charCodeAt(a)), m.push(n), -1==r.indexOf(n)&&(r.push(n), r.push([parseInt(e.metadata.widthOfGlyph(n),10)])), "0"==n)return o.join("");n=n.toString(16), o.push(i[4-n.length],n);}return o.join("")}(u,l[n])), s.isHex=!0, {text:g,x:i,y:o,options:a,mutex:s}};e.events.push(["postProcessText",function(t){var e=t.text||"",n=t.x,r=t.y,i=t.options,o=t.mutex,a=(i.lang, []),s={text:e,x:n,y:r,options:i,mutex:o};if("[object Array]"===Object.prototype.toString.call(e)){var h=0;for(h=0;h<e.length;h+=1)"[object Array]"===Object.prototype.toString.call(e[h])&&3===e[h].length?a.push([c(Object.assign({},s,{text:e[h][0]})).text,e[h][1],e[h][2]]):a.push(c(Object.assign({},s,{text:e[h]})).text);t.text=a;}else t.text=c(Object.assign({},s,{text:e})).text;}]);}($,"undefined"!=typeof self&&self||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||"undefined"!=typeof window&&window||Function("return this")()), Q=$.API, Z={}, Q.existsFileInVFS=function(t){return Z.hasOwnProperty(t)}, Q.addFileToVFS=function(t,e){return Z[t]=e, this}, Q.getFileFromVFS=function(t){return Z.hasOwnProperty(t)?Z[t]:null}, function(t){if(t.URL=t.URL||t.webkitURL, t.Blob&&t.URL)try{return new Blob}catch(t){}var s=t.BlobBuilder||t.WebKitBlobBuilder||t.MozBlobBuilder||function(t){var s=function(t){return Object.prototype.toString.call(t).match(/^\[object\s(.*)\]$/)[1]},e=function(){this.data=[];},h=function(t,e,n){this.data=t, this.size=t.length, this.type=e, this.encoding=n;},n=e.prototype,r=h.prototype,c=t.FileReaderSync,l=function(t){this.code=this[this.name=t];},i="NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR".split(" "),o=i.length,a=t.URL||t.webkitURL||t,u=a.createObjectURL,f=a.revokeObjectURL,d=a,p=t.btoa,g=t.atob,m=t.ArrayBuffer,w=t.Uint8Array,y=/^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/;for(h.fake=r.fake=!0;o--;)l.prototype[i[o]]=o+1;return a.createObjectURL||(d=t.URL=function(t){var e,n=document.createElementNS("http://www.w3.org/1999/xhtml","a");return n.href=t, "origin"in n||("data:"===n.protocol.toLowerCase()?n.origin=null:(e=t.match(y), n.origin=e&&e[1])), n}), d.createObjectURL=function(t){var e,n=t.type;return null===n&&(n="application/octet-stream"), t instanceof h?(e="data:"+n, "base64"===t.encoding?e+";base64,"+t.data:"URI"===t.encoding?e+","+decodeURIComponent(t.data):p?e+";base64,"+p(t.data):e+","+encodeURIComponent(t.data)):u?u.call(a,t):void 0}, d.revokeObjectURL=function(t){"data:"!==t.substring(0,5)&&f&&f.call(a,t);}, n.append=function(t){var e=this.data;if(w&&(t instanceof m||t instanceof w)){for(var n="",r=new w(t),i=0,o=r.length;i<o;i++)n+=String.fromCharCode(r[i]);e.push(n);}else if("Blob"===s(t)||"File"===s(t)){if(!c)throw new l("NOT_READABLE_ERR");var a=new c;e.push(a.readAsBinaryString(t));}else t instanceof h?"base64"===t.encoding&&g?e.push(g(t.data)):"URI"===t.encoding?e.push(decodeURIComponent(t.data)):"raw"===t.encoding&&e.push(t.data):("string"!=typeof t&&(t+=""), e.push(unescape(encodeURIComponent(t))));}, n.getBlob=function(t){return arguments.length||(t=null), new h(this.data.join(""),t,"raw")}, n.toString=function(){return"[object BlobBuilder]"}, r.slice=function(t,e,n){var r=arguments.length;return r<3&&(n=null), new h(this.data.slice(t,1<r?e:this.data.length),n,this.encoding)}, r.toString=function(){return"[object Blob]"}, r.close=function(){this.size=0, delete this.data;}, e}(t);t.Blob=function(t,e){var n=e&&e.type||"",r=new s;if(t)for(var i=0,o=t.length;i<o;i++)Uint8Array&&t[i]instanceof Uint8Array?r.append(t[i].buffer):r.append(t[i]);var a=r.getBlob(n);return!a.slice&&a.webkitSlice&&(a.slice=a.webkitSlice), a};var e=Object.getPrototypeOf||function(t){return t.__proto__};t.Blob.prototype=e(new t.Blob);}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||window.content||window);var tt,et,nt,rt,it,ot,at,st,ht,ct,lt,ut,ft,dt,pt,gt,bt=bt||function(s){if(!(void 0===s||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var t=s.document,h=function(){return s.URL||s.webkitURL||s},c=t.createElementNS("http://www.w3.org/1999/xhtml","a"),l="download"in c,u=/constructor/i.test(s.HTMLElement)||s.safari,f=/CriOS\/[\d]+/.test(navigator.userAgent),d=function(t){(s.setImmediate||s.setTimeout)(function(){throw t},0);},p=function(t){setTimeout(function(){"string"==typeof t?h().revokeObjectURL(t):t.remove();},4e4);},g=function(t){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t},r=function(t,n,e){e||(t=g(t));var r,i=this,o="application/octet-stream"===t.type,a=function(){!function(t,e,n){for(var r=(e=[].concat(e)).length;r--;){var i=t["on"+e[r]];if("function"==typeof i)try{i.call(t,n||t);}catch(t){d(t);}}}(i,"writestart progress write writeend".split(" "));};if(i.readyState=i.INIT, l)return r=h().createObjectURL(t), void setTimeout(function(){var t,e;c.href=r, c.download=n, t=c, e=new MouseEvent("click"), t.dispatchEvent(e), a(), p(r), i.readyState=i.DONE;});!function(){if((f||o&&u)&&s.FileReader){var e=new FileReader;return e.onloadend=function(){var t=f?e.result:e.result.replace(/^data:[^;]*;/,"data:attachment/file;");s.open(t,"_blank")||(s.location.href=t), t=void 0, i.readyState=i.DONE, a();}, e.readAsDataURL(t), i.readyState=i.INIT}r||(r=h().createObjectURL(t)), o?s.location.href=r:s.open(r,"_blank")||(s.location.href=r);i.readyState=i.DONE, a(), p(r);}();},e=r.prototype;return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(t,e,n){return e=e||t.name||"download", n||(t=g(t)), navigator.msSaveOrOpenBlob(t,e)}:(e.abort=function(){}, e.readyState=e.INIT=0, e.WRITING=1, e.DONE=2, e.error=e.onwritestart=e.onprogress=e.onwrite=e.onabort=e.onerror=e.onwriteend=null, function(t,e,n){return new r(t,e||t.name||"download",n)})}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||window.content);function mt(x){var t=0;if(71!==x[t++]||73!==x[t++]||70!==x[t++]||56!==x[t++]||56!=(x[t++]+1&253)||97!==x[t++])throw"Invalid GIF 87a/89a header.";var S=x[t++]|x[t++]<<8,e=x[t++]|x[t++]<<8,n=x[t++],r=n>>7,i=1<<(7&n)+1;x[t++];x[t++];var o=null;r&&(o=t, t+=3*i);var a=!0,s=[],h=0,c=null,l=0,u=null;for(this.width=S, this.height=e;a&&t<x.length;)switch(x[t++]){case 33:switch(x[t++]){case 255:if(11!==x[t]||78==x[t+1]&&69==x[t+2]&&84==x[t+3]&&83==x[t+4]&&67==x[t+5]&&65==x[t+6]&&80==x[t+7]&&69==x[t+8]&&50==x[t+9]&&46==x[t+10]&&48==x[t+11]&&3==x[t+12]&&1==x[t+13]&&0==x[t+16])t+=14, u=x[t++]|x[t++]<<8, t++;else for(t+=12;;){if(0===(_=x[t++]))break;t+=_;}break;case 249:if(4!==x[t++]||0!==x[t+4])throw"Invalid graphics extension block.";var f=x[t++];h=x[t++]|x[t++]<<8, c=x[t++], 0==(1&f)&&(c=null), l=f>>2&7, t++;break;case 254:for(;;){if(0===(_=x[t++]))break;t+=_;}break;default:throw"Unknown graphic control label: 0x"+x[t-1].toString(16)}break;case 44:var d=x[t++]|x[t++]<<8,p=x[t++]|x[t++]<<8,g=x[t++]|x[t++]<<8,m=x[t++]|x[t++]<<8,w=x[t++],y=w>>6&1,v=o,b=!1;if(w>>7){b=!0;v=t, t+=3*(1<<(7&w)+1);}var k=t;for(t++;;){var _;if(0===(_=x[t++]))break;t+=_;}s.push({x:d,y:p,width:g,height:m,has_local_palette:b,palette_offset:v,data_offset:k,data_length:t-k,transparent_index:c,interlaced:!!y,delay:h,disposal:l});break;case 59:a=!1;break;default:throw"Unknown gif block: 0x"+x[t-1].toString(16)}this.numFrames=function(){return s.length}, this.loopCount=function(){return u}, this.frameInfo=function(t){if(t<0||t>=s.length)throw"Frame index out of range.";return s[t]}, this.decodeAndBlitFrameBGRA=function(t,e){var n=this.frameInfo(t),r=n.width*n.height,i=new Uint8Array(r);wt(x,n.data_offset,i,r);var o=n.palette_offset,a=n.transparent_index;null===a&&(a=256);var s=n.width,h=S-s,c=s,l=4*(n.y*S+n.x),u=4*((n.y+n.height)*S+n.x),f=l,d=4*h;!0===n.interlaced&&(d+=4*(s+h)*7);for(var p=8,g=0,m=i.length;g<m;++g){var w=i[g];if(0===c&&(c=s, u<=(f+=d)&&(d=h+4*(s+h)*(p-1), f=l+(s+h)*(p<<1), p>>=1)), w===a)f+=4;else{var y=x[o+3*w],v=x[o+3*w+1],b=x[o+3*w+2];e[f++]=b, e[f++]=v, e[f++]=y, e[f++]=255;}--c;}}, this.decodeAndBlitFrameRGBA=function(t,e){var n=this.frameInfo(t),r=n.width*n.height,i=new Uint8Array(r);wt(x,n.data_offset,i,r);var o=n.palette_offset,a=n.transparent_index;null===a&&(a=256);var s=n.width,h=S-s,c=s,l=4*(n.y*S+n.x),u=4*((n.y+n.height)*S+n.x),f=l,d=4*h;!0===n.interlaced&&(d+=4*(s+h)*7);for(var p=8,g=0,m=i.length;g<m;++g){var w=i[g];if(0===c&&(c=s, u<=(f+=d)&&(d=h+4*(s+h)*(p-1), f=l+(s+h)*(p<<1), p>>=1)), w===a)f+=4;else{var y=x[o+3*w],v=x[o+3*w+1],b=x[o+3*w+2];e[f++]=y, e[f++]=v, e[f++]=b, e[f++]=255;}--c;}};}function wt(t,e,n,r){for(var i=t[e++],o=1<<i,a=o+1,s=a+1,h=i+1,c=(1<<h)-1,l=0,u=0,f=0,d=t[e++],p=new Int32Array(4096),g=null;;){for(;l<16&&0!==d;)u|=t[e++]<<l, l+=8, 1===d?d=t[e++]:--d;if(l<h)break;var m=u&c;if(u>>=h, l-=h, m!==o){if(m===a)break;for(var w=m<s?m:g,y=0,v=w;o<v;)v=p[v]>>8, ++y;var b=v;if(r<f+y+(w!==m?1:0))return void console.log("Warning, gif stream longer than expected.");n[f++]=b;var x=f+=y;for(w!==m&&(n[f++]=b), v=w;y--;)v=p[v], n[--x]=255&v, v>>=8;null!==g&&s<4096&&(p[s++]=g<<8|b, c+1<=s&&h<12&&(++h, c=c<<1|1)), g=m;}else s=a+1, c=(1<<(h=i+1))-1, g=null;}return f!==r&&console.log("Warning, gif stream shorter than expected."), n}"undefined"!='object'&&module.exports?module.exports.saveAs=bt:"undefined"!=typeof undefined&&null!==undefined&&null!==undefined.amd&&undefined("FileSaver.js",function(){return bt}), $.API.adler32cs=(ot="function"==typeof ArrayBuffer&&"function"==typeof Uint8Array, at=null, st=function(){if(!ot)return function(){return!1};try{var t={};"function"==typeof t.Buffer&&(at=t.Buffer);}catch(t){}return function(t){return t instanceof ArrayBuffer||null!==at&&t instanceof at}}(), ht=null!==at?function(t){return new at(t,"utf8").toString("binary")}:function(t){return unescape(encodeURIComponent(t))}, ct=65521, lt=function(t,e){for(var n=65535&t,r=t>>>16,i=0,o=e.length;i<o;i++)n=(n+(255&e.charCodeAt(i)))%ct, r=(r+n)%ct;return(r<<16|n)>>>0}, ut=function(t,e){for(var n=65535&t,r=t>>>16,i=0,o=e.length;i<o;i++)n=(n+e[i])%ct, r=(r+n)%ct;return(r<<16|n)>>>0}, dt=(ft={}).Adler32=(((it=(rt=function(t){if(!(this instanceof rt))throw new TypeError("Constructor cannot called be as a function.");if(!isFinite(t=null==t?1:+t))throw new Error("First arguments needs to be a finite number.");this.checksum=t>>>0;}).prototype={}).constructor=rt).from=((tt=function(t){if(!(this instanceof rt))throw new TypeError("Constructor cannot called be as a function.");if(null==t)throw new Error("First argument needs to be a string.");this.checksum=lt(1,t.toString());}).prototype=it, tt), rt.fromUtf8=((et=function(t){if(!(this instanceof rt))throw new TypeError("Constructor cannot called be as a function.");if(null==t)throw new Error("First argument needs to be a string.");var e=ht(t.toString());this.checksum=lt(1,e);}).prototype=it, et), ot&&(rt.fromBuffer=((nt=function(t){if(!(this instanceof rt))throw new TypeError("Constructor cannot called be as a function.");if(!st(t))throw new Error("First argument needs to be ArrayBuffer.");var e=new Uint8Array(t);return this.checksum=ut(1,e)}).prototype=it, nt)), it.update=function(t){if(null==t)throw new Error("First argument needs to be a string.");return t=t.toString(), this.checksum=lt(this.checksum,t)}, it.updateUtf8=function(t){if(null==t)throw new Error("First argument needs to be a string.");var e=ht(t.toString());return this.checksum=lt(this.checksum,e)}, ot&&(it.updateBuffer=function(t){if(!st(t))throw new Error("First argument needs to be ArrayBuffer.");var e=new Uint8Array(t);return this.checksum=ut(this.checksum,e)}), it.clone=function(){return new dt(this.checksum)}, rt), ft.from=function(t){if(null==t)throw new Error("First argument needs to be a string.");return lt(1,t.toString())}, ft.fromUtf8=function(t){if(null==t)throw new Error("First argument needs to be a string.");var e=ht(t.toString());return lt(1,e)}, ot&&(ft.fromBuffer=function(t){if(!st(t))throw new Error("First argument need to be ArrayBuffer.");var e=new Uint8Array(t);return ut(1,e)}), ft);try{exports.GifWriter=function(w,t,e,n){var y=0,r=void 0===(n=void 0===n?{}:n).loop?null:n.loop,v=void 0===n.palette?null:n.palette;if(t<=0||e<=0||65535<t||65535<e)throw"Width/Height invalid.";function b(t){var e=t.length;if(e<2||256<e||e&e-1)throw"Invalid code/color length, must be power of 2 and 2 .. 256.";return e}w[y++]=71, w[y++]=73, w[y++]=70, w[y++]=56, w[y++]=57, w[y++]=97;var i=0,o=0;if(null!==v){for(var a=b(v);a>>=1;)++i;if(a=1<<i, --i, void 0!==n.background){if(a<=(o=n.background))throw"Background index out of range.";if(0===o)throw"Background index explicitly passed as 0."}}if(w[y++]=255&t, w[y++]=t>>8&255, w[y++]=255&e, w[y++]=e>>8&255, w[y++]=(null!==v?128:0)|i, w[y++]=o, w[y++]=0, null!==v)for(var s=0,h=v.length;s<h;++s){var c=v[s];w[y++]=c>>16&255, w[y++]=c>>8&255, w[y++]=255&c;}if(null!==r){if(r<0||65535<r)throw"Loop count invalid.";w[y++]=33, w[y++]=255, w[y++]=11, w[y++]=78, w[y++]=69, w[y++]=84, w[y++]=83, w[y++]=67, w[y++]=65, w[y++]=80, w[y++]=69, w[y++]=50, w[y++]=46, w[y++]=48, w[y++]=3, w[y++]=1, w[y++]=255&r, w[y++]=r>>8&255, w[y++]=0;}var x=!1;this.addFrame=function(t,e,n,r,i,o){if(!0===x&&(--y, x=!1), o=void 0===o?{}:o, t<0||e<0||65535<t||65535<e)throw"x/y invalid.";if(n<=0||r<=0||65535<n||65535<r)throw"Width/Height invalid.";if(i.length<n*r)throw"Not enough pixels for the frame size.";var a=!0,s=o.palette;if(null==s&&(a=!1, s=v), null==s)throw"Must supply either a local or global palette.";for(var h=b(s),c=0;h>>=1;)++c;h=1<<c;var l=void 0===o.delay?0:o.delay,u=void 0===o.disposal?0:o.disposal;if(u<0||3<u)throw"Disposal out of range.";var f=!1,d=0;if(void 0!==o.transparent&&null!==o.transparent&&(f=!0, (d=o.transparent)<0||h<=d))throw"Transparent color index.";if((0!==u||f||0!==l)&&(w[y++]=33, w[y++]=249, w[y++]=4, w[y++]=u<<2|(!0===f?1:0), w[y++]=255&l, w[y++]=l>>8&255, w[y++]=d, w[y++]=0), w[y++]=44, w[y++]=255&t, w[y++]=t>>8&255, w[y++]=255&e, w[y++]=e>>8&255, w[y++]=255&n, w[y++]=n>>8&255, w[y++]=255&r, w[y++]=r>>8&255, w[y++]=!0===a?128|c-1:0, !0===a)for(var p=0,g=s.length;p<g;++p){var m=s[p];w[y++]=m>>16&255, w[y++]=m>>8&255, w[y++]=255&m;}y=function(e,n,t,r){e[n++]=t;var i=n++,o=1<<t,a=o-1,s=o+1,h=s+1,c=t+1,l=0,u=0;function f(t){for(;t<=l;)e[n++]=255&u, u>>=8, l-=8, n===i+256&&(e[i]=255, i=n++);}function d(t){u|=t<<l, l+=c, f(8);}var p=r[0]&a,g={};d(o);for(var m=1,w=r.length;m<w;++m){var y=r[m]&a,v=p<<8|y,b=g[v];if(void 0===b){for(u|=p<<l, l+=c;8<=l;)e[n++]=255&u, u>>=8, l-=8, n===i+256&&(e[i]=255, i=n++);4096===h?(d(o), h=s+1, c=t+1, g={}):(1<<c<=h&&++c, g[v]=h++), p=y;}else p=b;}return d(p), d(s), f(1), i+1===n?e[i]=0:(e[i]=n-i-1, e[n++]=0), n}(w,y,c<2?2:c,i);}, this.end=function(){return!1===x&&(w[y++]=59, x=!0), y};}, exports.GifReader=mt;}catch(t){}
+/*
+ Copyright (c) 2008, Adobe Systems Incorporated
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the name of Adobe Systems Incorporated nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */function yt(t){var S,k,_,A,e,u=Math.floor,I=new Array(64),C=new Array(64),T=new Array(64),F=new Array(64),w=new Array(65535),y=new Array(65535),Q=new Array(64),v=new Array(64),P=[],E=0,q=7,O=new Array(64),B=new Array(64),R=new Array(64),n=new Array(256),j=new Array(2048),b=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],D=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],M=[0,1,2,3,4,5,6,7,8,9,10,11],U=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],N=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],z=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],L=[0,1,2,3,4,5,6,7,8,9,10,11],H=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],W=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function r(t,e){for(var n=0,r=0,i=new Array,o=1;o<=16;o++){for(var a=1;a<=t[o];a++)i[e[r]]=[], i[e[r]][0]=n, i[e[r]][1]=o, r++, n++;n*=2;}return i}function G(t){for(var e=t[0],n=t[1]-1;0<=n;)e&1<<n&&(E|=1<<q), n--, --q<0&&(255==E?(V(255), V(0)):V(E), q=7, E=0);}function V(t){P.push(t);}function Y(t){V(t>>8&255), V(255&t);}function X(t,e,n,r,i){for(var o,a=i[0],s=i[240],h=function(t,e){var n,r,i,o,a,s,h,c,l,u,f=0;for(l=0;l<8;++l){n=t[f], r=t[f+1], i=t[f+2], o=t[f+3], a=t[f+4], s=t[f+5], h=t[f+6];var d=n+(c=t[f+7]),p=n-c,g=r+h,m=r-h,w=i+s,y=i-s,v=o+a,b=o-a,x=d+v,S=d-v,k=g+w,_=g-w;t[f]=x+k, t[f+4]=x-k;var A=.707106781*(_+S);t[f+2]=S+A, t[f+6]=S-A;var I=.382683433*((x=b+y)-(_=m+p)),C=.5411961*x+I,T=1.306562965*_+I,F=.707106781*(k=y+m),P=p+F,E=p-F;t[f+5]=E+C, t[f+3]=E-C, t[f+1]=P+T, t[f+7]=P-T, f+=8;}for(l=f=0;l<8;++l){n=t[f], r=t[f+8], i=t[f+16], o=t[f+24], a=t[f+32], s=t[f+40], h=t[f+48];var q=n+(c=t[f+56]),O=n-c,B=r+h,R=r-h,j=i+s,D=i-s,M=o+a,U=o-a,N=q+M,z=q-M,L=B+j,H=B-j;t[f]=N+L, t[f+32]=N-L;var W=.707106781*(H+z);t[f+16]=z+W, t[f+48]=z-W;var G=.382683433*((N=U+D)-(H=R+O)),V=.5411961*N+G,Y=1.306562965*H+G,X=.707106781*(L=D+R),J=O+X,K=O-X;t[f+40]=K+V, t[f+24]=K-V, t[f+8]=J+Y, t[f+56]=J-Y, f++;}for(l=0;l<64;++l)u=t[l]*e[l], Q[l]=0<u?u+.5|0:u-.5|0;return Q}(t,e),c=0;c<64;++c)v[b[c]]=h[c];var l=v[0]-n;n=v[0], 0==l?G(r[0]):(G(r[y[o=32767+l]]), G(w[o]));for(var u=63;0<u&&0==v[u];u--);if(0==u)return G(a), n;for(var f,d=1;d<=u;){for(var p=d;0==v[d]&&d<=u;++d);var g=d-p;if(16<=g){f=g>>4;for(var m=1;m<=f;++m)G(s);g&=15;}o=32767+v[d], G(i[(g<<4)+y[o]]), G(w[o]), d++;}return 63!=u&&G(a), n}function J(t){if(t<=0&&(t=1), 100<t&&(t=100), e!=t){(function(t){for(var e=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],n=0;n<64;n++){var r=u((e[n]*t+50)/100);r<1?r=1:255<r&&(r=255), I[b[n]]=r;}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],o=0;o<64;o++){var a=u((i[o]*t+50)/100);a<1?a=1:255<a&&(a=255), C[b[o]]=a;}for(var s=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],h=0,c=0;c<8;c++)for(var l=0;l<8;l++)T[h]=1/(I[b[h]]*s[c]*s[l]*8), F[h]=1/(C[b[h]]*s[c]*s[l]*8), h++;})(t<50?Math.floor(5e3/t):Math.floor(200-2*t)), e=t;}}this.encode=function(t,e){var n,r;(new Date).getTime();e&&J(e), P=new Array, E=0, q=7, Y(65496), Y(65504), Y(16), V(74), V(70), V(73), V(70), V(0), V(1), V(1), V(0), Y(1), Y(1), V(0), V(0), function(){Y(65499), Y(132), V(0);for(var t=0;t<64;t++)V(I[t]);V(1);for(var e=0;e<64;e++)V(C[e]);}(), n=t.width, r=t.height, Y(65472), Y(17), V(8), Y(r), Y(n), V(3), V(1), V(17), V(0), V(2), V(17), V(1), V(3), V(17), V(1), function(){Y(65476), Y(418), V(0);for(var t=0;t<16;t++)V(D[t+1]);for(var e=0;e<=11;e++)V(M[e]);V(16);for(var n=0;n<16;n++)V(U[n+1]);for(var r=0;r<=161;r++)V(N[r]);V(1);for(var i=0;i<16;i++)V(z[i+1]);for(var o=0;o<=11;o++)V(L[o]);V(17);for(var a=0;a<16;a++)V(H[a+1]);for(var s=0;s<=161;s++)V(W[s]);}(), Y(65498), Y(12), V(3), V(1), V(0), V(2), V(17), V(3), V(17), V(0), V(63), V(0);var i=0,o=0,a=0;E=0, q=7, this.encode.displayName="_encode_";for(var s,h,c,l,u,f,d,p,g,m=t.data,w=t.width,y=t.height,v=4*w,b=0;b<y;){for(s=0;s<v;){for(f=u=v*b+s, d=-1, g=p=0;g<64;g++)f=u+(p=g>>3)*v+(d=4*(7&g)), y<=b+p&&(f-=v*(b+1+p-y)), v<=s+d&&(f-=s+d-v+4), h=m[f++], c=m[f++], l=m[f++], O[g]=(j[h]+j[c+256>>0]+j[l+512>>0]>>16)-128, B[g]=(j[h+768>>0]+j[c+1024>>0]+j[l+1280>>0]>>16)-128, R[g]=(j[h+1280>>0]+j[c+1536>>0]+j[l+1792>>0]>>16)-128;i=X(O,T,i,S,_), o=X(B,F,o,k,A), a=X(R,F,a,k,A), s+=32;}b+=8;}if(0<=q){var x=[];x[1]=q+1, x[0]=(1<<q+1)-1, G(x);}return Y(65497), new Uint8Array(P)}, function(){(new Date).getTime();t||(t=50), function(){for(var t=String.fromCharCode,e=0;e<256;e++)n[e]=t(e);}(), S=r(D,M), k=r(z,L), _=r(U,N), A=r(H,W), function(){for(var t=1,e=2,n=1;n<=15;n++){for(var r=t;r<e;r++)y[32767+r]=n, w[32767+r]=[], w[32767+r][1]=n, w[32767+r][0]=r;for(var i=-(e-1);i<=-t;i++)y[32767+i]=n, w[32767+i]=[], w[32767+i][1]=n, w[32767+i][0]=e-1+i;t<<=1, e<<=1;}}(), function(){for(var t=0;t<256;t++)j[t]=19595*t, j[t+256>>0]=38470*t, j[t+512>>0]=7471*t+32768, j[t+768>>0]=-11059*t, j[t+1024>>0]=-21709*t, j[t+1280>>0]=32768*t+8421375, j[t+1536>>0]=-27439*t, j[t+1792>>0]=-5329*t;}(), J(t), (new Date).getTime();}();}try{module.exports=yt;}catch(t){}function xt(t,e){if(this.pos=0, this.buffer=t, this.datav=new DataView(t.buffer), this.is_with_alpha=!!e, this.bottom_up=!0, this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]), this.pos+=2, -1===["BM","BA","CI","CP","IC","PT"].indexOf(this.flag))throw new Error("Invalid BMP File");this.parseHeader(), this.parseBGR();}xt.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0), this.pos+=4, this.reserved=this.datav.getUint32(this.pos,!0), this.pos+=4, this.offset=this.datav.getUint32(this.pos,!0), this.pos+=4, this.headerSize=this.datav.getUint32(this.pos,!0), this.pos+=4, this.width=this.datav.getUint32(this.pos,!0), this.pos+=4, this.height=this.datav.getInt32(this.pos,!0), this.pos+=4, this.planes=this.datav.getUint16(this.pos,!0), this.pos+=2, this.bitPP=this.datav.getUint16(this.pos,!0), this.pos+=2, this.compress=this.datav.getUint32(this.pos,!0), this.pos+=4, this.rawSize=this.datav.getUint32(this.pos,!0), this.pos+=4, this.hr=this.datav.getUint32(this.pos,!0), this.pos+=4, this.vr=this.datav.getUint32(this.pos,!0), this.pos+=4, this.colors=this.datav.getUint32(this.pos,!0), this.pos+=4, this.importantColors=this.datav.getUint32(this.pos,!0), this.pos+=4, 16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15), this.bitPP<15){var t=0===this.colors?1<<this.bitPP:this.colors;this.palette=new Array(t);for(var e=0;e<t;e++){var n=this.datav.getUint8(this.pos++,!0),r=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0);this.palette[e]={red:i,green:r,blue:n,quad:o};}}this.height<0&&(this.height*=-1, this.bottom_up=!1);}, xt.prototype.parseBGR=function(){this.pos=this.offset;try{var t="bit"+this.bitPP,e=this.width*this.height*4;this.data=new Uint8Array(e), this[t]();}catch(t){console.log("bit decode error:"+t);}}, xt.prototype.bit1=function(){var t=Math.ceil(this.width/8),e=t%4,n=0<=this.height?this.height-1:-this.height;for(n=this.height-1;0<=n;n--){for(var r=this.bottom_up?n:this.height-1-n,i=0;i<t;i++)for(var o=this.datav.getUint8(this.pos++,!0),a=r*this.width*4+8*i*4,s=0;s<8&&8*i+s<this.width;s++){var h=this.palette[o>>7-s&1];this.data[a+4*s]=h.blue, this.data[a+4*s+1]=h.green, this.data[a+4*s+2]=h.red, this.data[a+4*s+3]=255;}0!=e&&(this.pos+=4-e);}}, xt.prototype.bit4=function(){for(var t=Math.ceil(this.width/2),e=t%4,n=this.height-1;0<=n;n--){for(var r=this.bottom_up?n:this.height-1-n,i=0;i<t;i++){var o=this.datav.getUint8(this.pos++,!0),a=r*this.width*4+2*i*4,s=o>>4,h=15&o,c=this.palette[s];if(this.data[a]=c.blue, this.data[a+1]=c.green, this.data[a+2]=c.red, this.data[a+3]=255, 2*i+1>=this.width)break;c=this.palette[h], this.data[a+4]=c.blue, this.data[a+4+1]=c.green, this.data[a+4+2]=c.red, this.data[a+4+3]=255;}0!=e&&(this.pos+=4-e);}}, xt.prototype.bit8=function(){for(var t=this.width%4,e=this.height-1;0<=e;e--){for(var n=this.bottom_up?e:this.height-1-e,r=0;r<this.width;r++){var i=this.datav.getUint8(this.pos++,!0),o=n*this.width*4+4*r;if(i<this.palette.length){var a=this.palette[i];this.data[o]=a.red, this.data[o+1]=a.green, this.data[o+2]=a.blue, this.data[o+3]=255;}else this.data[o]=255, this.data[o+1]=255, this.data[o+2]=255, this.data[o+3]=255;}0!=t&&(this.pos+=4-t);}}, xt.prototype.bit15=function(){for(var t=this.width%3,e=parseInt("11111",2),n=this.height-1;0<=n;n--){for(var r=this.bottom_up?n:this.height-1-n,i=0;i<this.width;i++){var o=this.datav.getUint16(this.pos,!0);this.pos+=2;var a=(o&e)/e*255|0,s=(o>>5&e)/e*255|0,h=(o>>10&e)/e*255|0,c=o>>15?255:0,l=r*this.width*4+4*i;this.data[l]=h, this.data[l+1]=s, this.data[l+2]=a, this.data[l+3]=c;}this.pos+=t;}}, xt.prototype.bit16=function(){for(var t=this.width%3,e=parseInt("11111",2),n=parseInt("111111",2),r=this.height-1;0<=r;r--){for(var i=this.bottom_up?r:this.height-1-r,o=0;o<this.width;o++){var a=this.datav.getUint16(this.pos,!0);this.pos+=2;var s=(a&e)/e*255|0,h=(a>>5&n)/n*255|0,c=(a>>11)/e*255|0,l=i*this.width*4+4*o;this.data[l]=c, this.data[l+1]=h, this.data[l+2]=s, this.data[l+3]=255;}this.pos+=t;}}, xt.prototype.bit24=function(){for(var t=this.height-1;0<=t;t--){for(var e=this.bottom_up?t:this.height-1-t,n=0;n<this.width;n++){var r=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),a=e*this.width*4+4*n;this.data[a]=o, this.data[a+1]=i, this.data[a+2]=r, this.data[a+3]=255;}this.pos+=this.width%4;}}, xt.prototype.bit32=function(){for(var t=this.height-1;0<=t;t--)for(var e=this.bottom_up?t:this.height-1-t,n=0;n<this.width;n++){var r=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),s=e*this.width*4+4*n;this.data[s]=o, this.data[s+1]=i, this.data[s+2]=r, this.data[s+3]=a;}}, xt.prototype.getData=function(){return this.data};try{module.exports=function(t){var e=new xt(t);return{data:e.getData(),width:e.width,height:e.height}};}catch(t){}
+/*
+ Copyright (c) 2013 Gildas Lormeau. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the distribution.
+
+ 3. The names of the authors may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ Copyright (c) 2013 Gildas Lormeau. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the distribution.
+
+ 3. The names of the authors may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+!function(t){var p=15,g=573,e=[0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,16,17,18,18,19,19,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29];function ut(){var d=this;function h(t,e){for(var n=0;n|=1&t, t>>>=1, n<<=1, 0<--e;);return n>>>1}d.build_tree=function(t){var e,n,r,i=d.dyn_tree,o=d.stat_desc.static_tree,a=d.stat_desc.elems,s=-1;for(t.heap_len=0, t.heap_max=g, e=0;e<a;e++)0!==i[2*e]?(t.heap[++t.heap_len]=s=e, t.depth[e]=0):i[2*e+1]=0;for(;t.heap_len<2;)i[2*(r=t.heap[++t.heap_len]=s<2?++s:0)]=1, t.depth[r]=0, t.opt_len--, o&&(t.static_len-=o[2*r+1]);for(d.max_code=s, e=Math.floor(t.heap_len/2);1<=e;e--)t.pqdownheap(i,e);for(r=a;e=t.heap[1], t.heap[1]=t.heap[t.heap_len--], t.pqdownheap(i,1), n=t.heap[1], t.heap[--t.heap_max]=e, t.heap[--t.heap_max]=n, i[2*r]=i[2*e]+i[2*n], t.depth[r]=Math.max(t.depth[e],t.depth[n])+1, i[2*e+1]=i[2*n+1]=r, t.heap[1]=r++, t.pqdownheap(i,1), 2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1], function(t){var e,n,r,i,o,a,s=d.dyn_tree,h=d.stat_desc.static_tree,c=d.stat_desc.extra_bits,l=d.stat_desc.extra_base,u=d.stat_desc.max_length,f=0;for(i=0;i<=p;i++)t.bl_count[i]=0;for(s[2*t.heap[t.heap_max]+1]=0, e=t.heap_max+1;e<g;e++)u<(i=s[2*s[2*(n=t.heap[e])+1]+1]+1)&&(i=u, f++), s[2*n+1]=i, n>d.max_code||(t.bl_count[i]++, o=0, l<=n&&(o=c[n-l]), a=s[2*n], t.opt_len+=a*(i+o), h&&(t.static_len+=a*(h[2*n+1]+o)));if(0!==f){do{for(i=u-1;0===t.bl_count[i];)i--;t.bl_count[i]--, t.bl_count[i+1]+=2, t.bl_count[u]--, f-=2;}while(0<f);for(i=u;0!==i;i--)for(n=t.bl_count[i];0!==n;)(r=t.heap[--e])>d.max_code||(s[2*r+1]!=i&&(t.opt_len+=(i-s[2*r+1])*s[2*r], s[2*r+1]=i), n--);}}(t), function(t,e,n){var r,i,o,a=[],s=0;for(r=1;r<=p;r++)a[r]=s=s+n[r-1]<<1;for(i=0;i<=e;i++)0!==(o=t[2*i+1])&&(t[2*i]=h(a[o]++,o));}(i,d.max_code,t.bl_count);};}function ft(t,e,n,r,i){var o=this;o.static_tree=t, o.extra_bits=e, o.extra_base=n, o.elems=r, o.max_length=i;}ut._length_code=[0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28], ut.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0], ut.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576], ut.d_code=function(t){return t<256?e[t]:e[256+(t>>>7)]}, ut.extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0], ut.extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13], ut.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7], ut.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15], ft.static_ltree=[12,8,140,8,76,8,204,8,44,8,172,8,108,8,236,8,28,8,156,8,92,8,220,8,60,8,188,8,124,8,252,8,2,8,130,8,66,8,194,8,34,8,162,8,98,8,226,8,18,8,146,8,82,8,210,8,50,8,178,8,114,8,242,8,10,8,138,8,74,8,202,8,42,8,170,8,106,8,234,8,26,8,154,8,90,8,218,8,58,8,186,8,122,8,250,8,6,8,134,8,70,8,198,8,38,8,166,8,102,8,230,8,22,8,150,8,86,8,214,8,54,8,182,8,118,8,246,8,14,8,142,8,78,8,206,8,46,8,174,8,110,8,238,8,30,8,158,8,94,8,222,8,62,8,190,8,126,8,254,8,1,8,129,8,65,8,193,8,33,8,161,8,97,8,225,8,17,8,145,8,81,8,209,8,49,8,177,8,113,8,241,8,9,8,137,8,73,8,201,8,41,8,169,8,105,8,233,8,25,8,153,8,89,8,217,8,57,8,185,8,121,8,249,8,5,8,133,8,69,8,197,8,37,8,165,8,101,8,229,8,21,8,149,8,85,8,213,8,53,8,181,8,117,8,245,8,13,8,141,8,77,8,205,8,45,8,173,8,109,8,237,8,29,8,157,8,93,8,221,8,61,8,189,8,125,8,253,8,19,9,275,9,147,9,403,9,83,9,339,9,211,9,467,9,51,9,307,9,179,9,435,9,115,9,371,9,243,9,499,9,11,9,267,9,139,9,395,9,75,9,331,9,203,9,459,9,43,9,299,9,171,9,427,9,107,9,363,9,235,9,491,9,27,9,283,9,155,9,411,9,91,9,347,9,219,9,475,9,59,9,315,9,187,9,443,9,123,9,379,9,251,9,507,9,7,9,263,9,135,9,391,9,71,9,327,9,199,9,455,9,39,9,295,9,167,9,423,9,103,9,359,9,231,9,487,9,23,9,279,9,151,9,407,9,87,9,343,9,215,9,471,9,55,9,311,9,183,9,439,9,119,9,375,9,247,9,503,9,15,9,271,9,143,9,399,9,79,9,335,9,207,9,463,9,47,9,303,9,175,9,431,9,111,9,367,9,239,9,495,9,31,9,287,9,159,9,415,9,95,9,351,9,223,9,479,9,63,9,319,9,191,9,447,9,127,9,383,9,255,9,511,9,0,7,64,7,32,7,96,7,16,7,80,7,48,7,112,7,8,7,72,7,40,7,104,7,24,7,88,7,56,7,120,7,4,7,68,7,36,7,100,7,20,7,84,7,52,7,116,7,3,8,131,8,67,8,195,8,35,8,163,8,99,8,227,8], ft.static_dtree=[0,5,16,5,8,5,24,5,4,5,20,5,12,5,28,5,2,5,18,5,10,5,26,5,6,5,22,5,14,5,30,5,1,5,17,5,9,5,25,5,5,5,21,5,13,5,29,5,3,5,19,5,11,5,27,5,7,5,23,5], ft.static_l_desc=new ft(ft.static_ltree,ut.extra_lbits,257,286,p), ft.static_d_desc=new ft(ft.static_dtree,ut.extra_dbits,0,30,p), ft.static_bl_desc=new ft(null,ut.extra_blbits,0,19,7);function n(t,e,n,r,i){var o=this;o.good_length=t, o.max_lazy=e, o.nice_length=n, o.max_chain=r, o.func=i;}var dt=[new n(0,0,0,0,0),new n(4,4,8,4,1),new n(4,5,16,8,1),new n(4,6,32,32,1),new n(4,4,16,16,2),new n(8,16,32,32,2),new n(8,16,128,128,2),new n(8,32,128,256,2),new n(32,128,258,1024,2),new n(32,258,258,4096,2)],pt=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],gt=262;function mt(t,e,n,r){var i=t[2*e],o=t[2*n];return i<o||i==o&&r[e]<=r[n]}function r(){var h,c,l,u,f,d,p,g,i,m,w,y,v,a,b,x,S,k,_,A,I,C,T,F,P,E,q,O,B,R,s,j,D,M,U,N,z,o,L,H,W,G=this,V=new ut,Y=new ut,X=new ut;function J(){var t;for(t=0;t<286;t++)s[2*t]=0;for(t=0;t<30;t++)j[2*t]=0;for(t=0;t<19;t++)D[2*t]=0;s[512]=1, G.opt_len=G.static_len=0, N=o=0;}function K(t,e){var n,r,i=-1,o=t[1],a=0,s=7,h=4;for(0===o&&(s=138, h=3), t[2*(e+1)+1]=65535, n=0;n<=e;n++)r=o, o=t[2*(n+1)+1], ++a<s&&r==o||(a<h?D[2*r]+=a:0!==r?(r!=i&&D[2*r]++, D[32]++):a<=10?D[34]++:D[36]++, i=r, (a=0)===o?(s=138, h=3):r==o?(s=6, h=3):(s=7, h=4));}function Q(t){G.pending_buf[G.pending++]=t;}function Z(t){Q(255&t), Q(t>>>8&255);}function $(t,e){var n,r=e;16-r<W?(Z(H|=(n=t)<<W&65535), H=n>>>16-W, W+=r-16):(H|=t<<W&65535, W+=r);}function tt(t,e){var n=2*t;$(65535&e[n],65535&e[n+1]);}function et(t,e){var n,r,i=-1,o=t[1],a=0,s=7,h=4;for(0===o&&(s=138, h=3), n=0;n<=e;n++)if(r=o, o=t[2*(n+1)+1], !(++a<s&&r==o)){if(a<h)for(;tt(r,D), 0!=--a;);else 0!==r?(r!=i&&(tt(r,D), a--), tt(16,D), $(a-3,2)):a<=10?(tt(17,D), $(a-3,3)):(tt(18,D), $(a-11,7));i=r, (a=0)===o?(s=138, h=3):r==o?(s=6, h=3):(s=7, h=4);}}function nt(){16==W?(Z(H), W=H=0):8<=W&&(Q(255&H), H>>>=8, W-=8);}function rt(t,e){var n,r,i;if(G.pending_buf[z+2*N]=t>>>8&255, G.pending_buf[z+2*N+1]=255&t, G.pending_buf[M+N]=255&e, N++, 0===t?s[2*e]++:(o++, t--, s[2*(ut._length_code[e]+256+1)]++, j[2*ut.d_code(t)]++), 0==(8191&N)&&2<q){for(n=8*N, r=I-S, i=0;i<30;i++)n+=j[2*i]*(5+ut.extra_dbits[i]);if(n>>>=3, o<Math.floor(N/2)&&n<Math.floor(r/2))return!0}return N==U-1}function it(t,e){var n,r,i,o,a=0;if(0!==N)for(;n=G.pending_buf[z+2*a]<<8&65280|255&G.pending_buf[z+2*a+1], r=255&G.pending_buf[M+a], a++, 0===n?tt(r,t):(tt((i=ut._length_code[r])+256+1,t), 0!==(o=ut.extra_lbits[i])&&$(r-=ut.base_length[i],o), tt(i=ut.d_code(--n),e), 0!==(o=ut.extra_dbits[i])&&$(n-=ut.base_dist[i],o)), a<N;);tt(256,t), L=t[513];}function ot(){8<W?Z(H):0<W&&Q(255&H), W=H=0;}function at(t,e,n){var r,i,o;$(0+(n?1:0),3), r=t, i=e, o=!0, ot(), L=8, o&&(Z(i), Z(~i)), G.pending_buf.set(g.subarray(r,r+i),G.pending), G.pending+=i;}function e(t,e,n){var r,i,o=0;0<q?(V.build_tree(G), Y.build_tree(G), o=function(){var t;for(K(s,V.max_code), K(j,Y.max_code), X.build_tree(G), t=18;3<=t&&0===D[2*ut.bl_order[t]+1];t--);return G.opt_len+=3*(t+1)+5+5+4, t}(), r=G.opt_len+3+7>>>3, (i=G.static_len+3+7>>>3)<=r&&(r=i)):r=i=e+5, e+4<=r&&-1!=t?at(t,e,n):i==r?($(2+(n?1:0),3), it(ft.static_ltree,ft.static_dtree)):($(4+(n?1:0),3), function(t,e,n){var r;for($(t-257,5), $(e-1,5), $(n-4,4), r=0;r<n;r++)$(D[2*ut.bl_order[r]+1],3);et(s,t-1), et(j,e-1);}(V.max_code+1,Y.max_code+1,o+1), it(s,j)), J(), n&&ot();}function st(t){e(0<=S?S:-1,I-S,t), S=I, h.flush_pending();}function ht(){var t,e,n,r;do{if(0===(r=i-T-I)&&0===I&&0===T)r=f;else if(-1==r)r--;else if(f+f-gt<=I){for(g.set(g.subarray(f,f+f),0), C-=f, I-=f, S-=f, n=t=v;e=65535&w[--n], w[n]=f<=e?e-f:0, 0!=--t;);for(n=t=f;e=65535&m[--n], m[n]=f<=e?e-f:0, 0!=--t;);r+=f;}if(0===h.avail_in)return;t=h.read_buf(g,I+T,r), 3<=(T+=t)&&(y=((y=255&g[I])<<x^255&g[I+1])&b);}while(T<gt&&0!==h.avail_in)}function ct(t){var e,n,r=P,i=I,o=F,a=f-gt<I?I-(f-gt):0,s=R,h=p,c=I+258,l=g[i+o-1],u=g[i+o];B<=F&&(r>>=2), T<s&&(s=T);do{if(g[(e=t)+o]==u&&g[e+o-1]==l&&g[e]==g[i]&&g[++e]==g[i+1]){i+=2, e++;do{}while(g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&i<c);if(n=258-(c-i), i=c-258, o<n){if(C=t, s<=(o=n))break;l=g[i+o-1], u=g[i+o];}}}while((t=65535&m[t&h])>a&&0!=--r);return o<=T?o:T}function lt(t){return t.total_in=t.total_out=0, t.msg=null, G.pending=0, G.pending_out=0, c=113, u=0, V.dyn_tree=s, V.stat_desc=ft.static_l_desc, Y.dyn_tree=j, Y.stat_desc=ft.static_d_desc, X.dyn_tree=D, X.stat_desc=ft.static_bl_desc, W=H=0, L=8, J(), function(){var t;for(i=2*f, t=w[v-1]=0;t<v-1;t++)w[t]=0;E=dt[q].max_lazy, B=dt[q].good_length, R=dt[q].nice_length, P=dt[q].max_chain, k=F=2, y=A=T=S=I=0;}(), 0}G.depth=[], G.bl_count=[], G.heap=[], s=[], j=[], D=[], G.pqdownheap=function(t,e){for(var n=G.heap,r=n[e],i=e<<1;i<=G.heap_len&&(i<G.heap_len&&mt(t,n[i+1],n[i],G.depth)&&i++, !mt(t,r,n[i],G.depth));)n[e]=n[i], e=i, i<<=1;n[e]=r;}, G.deflateInit=function(t,e,n,r,i,o){return r||(r=8), i||(i=8), o||(o=0), t.msg=null, -1==e&&(e=6), i<1||9<i||8!=r||n<9||15<n||e<0||9<e||o<0||2<o?-2:(t.dstate=G, p=(f=1<<(d=n))-1, b=(v=1<<(a=i+7))-1, x=Math.floor((a+3-1)/3), g=new Uint8Array(2*f), m=[], w=[], U=1<<i+6, G.pending_buf=new Uint8Array(4*U), l=4*U, z=Math.floor(U/2), M=3*U, q=e, O=o, lt(t))}, G.deflateEnd=function(){return 42!=c&&113!=c&&666!=c?-2:(G.pending_buf=null, g=m=w=null, G.dstate=null, 113==c?-3:0)}, G.deflateParams=function(t,e,n){var r=0;return-1==e&&(e=6), e<0||9<e||n<0||2<n?-2:(dt[q].func!=dt[e].func&&0!==t.total_in&&(r=t.deflate(1)), q!=e&&(E=dt[q=e].max_lazy, B=dt[q].good_length, R=dt[q].nice_length, P=dt[q].max_chain), O=n, r)}, G.deflateSetDictionary=function(t,e,n){var r,i=n,o=0;if(!e||42!=c)return-2;if(i<3)return 0;for(f-gt<i&&(o=n-(i=f-gt)), g.set(e.subarray(o,o+i),0), S=I=i, y=((y=255&g[0])<<x^255&g[1])&b, r=0;r<=i-3;r++)y=(y<<x^255&g[r+2])&b, m[r&p]=w[y], w[y]=r;return 0}, G.deflate=function(t,e){var n,r,i,o,a,s;if(4<e||e<0)return-2;if(!t.next_out||!t.next_in&&0!==t.avail_in||666==c&&4!=e)return t.msg=pt[4], -2;if(0===t.avail_out)return t.msg=pt[7], -5;if(h=t, o=u, u=e, 42==c&&(r=8+(d-8<<4)<<8, 3<(i=(q-1&255)>>1)&&(i=3), r|=i<<6, 0!==I&&(r|=32), c=113, Q((s=r+=31-r%31)>>8&255), Q(255&s)), 0!==G.pending){if(h.flush_pending(), 0===h.avail_out)return u=-1, 0}else if(0===h.avail_in&&e<=o&&4!=e)return h.msg=pt[7], -5;if(666==c&&0!==h.avail_in)return t.msg=pt[7], -5;if(0!==h.avail_in||0!==T||0!=e&&666!=c){switch(a=-1, dt[q].func){case 0:a=function(t){var e,n=65535;for(l-5<n&&(n=l-5);;){if(T<=1){if(ht(), 0===T&&0==t)return 0;if(0===T)break}if(I+=T, e=S+n, ((T=0)===I||e<=I)&&(T=I-e, I=e, st(!1), 0===h.avail_out))return 0;if(f-gt<=I-S&&(st(!1), 0===h.avail_out))return 0}return st(4==t), 0===h.avail_out?4==t?2:0:4==t?3:1}(e);break;case 1:a=function(t){for(var e,n=0;;){if(T<gt){if(ht(), T<gt&&0==t)return 0;if(0===T)break}if(3<=T&&(y=(y<<x^255&g[I+2])&b, n=65535&w[y], m[I&p]=w[y], w[y]=I), 0!==n&&(I-n&65535)<=f-gt&&2!=O&&(k=ct(n)), 3<=k)if(e=rt(I-C,k-3), T-=k, k<=E&&3<=T){for(k--;y=(y<<x^255&g[++I+2])&b, n=65535&w[y], m[I&p]=w[y], w[y]=I, 0!=--k;);I++;}else I+=k, k=0, y=((y=255&g[I])<<x^255&g[I+1])&b;else e=rt(0,255&g[I]), T--, I++;if(e&&(st(!1), 0===h.avail_out))return 0}return st(4==t), 0===h.avail_out?4==t?2:0:4==t?3:1}(e);break;case 2:a=function(t){for(var e,n,r=0;;){if(T<gt){if(ht(), T<gt&&0==t)return 0;if(0===T)break}if(3<=T&&(y=(y<<x^255&g[I+2])&b, r=65535&w[y], m[I&p]=w[y], w[y]=I), F=k, _=C, k=2, 0!==r&&F<E&&(I-r&65535)<=f-gt&&(2!=O&&(k=ct(r)), k<=5&&(1==O||3==k&&4096<I-C)&&(k=2)), 3<=F&&k<=F){for(n=I+T-3, e=rt(I-1-_,F-3), T-=F-1, F-=2;++I<=n&&(y=(y<<x^255&g[I+2])&b, r=65535&w[y], m[I&p]=w[y], w[y]=I), 0!=--F;);if(A=0, k=2, I++, e&&(st(!1), 0===h.avail_out))return 0}else if(0!==A){if((e=rt(0,255&g[I-1]))&&st(!1), I++, T--, 0===h.avail_out)return 0}else A=1, I++, T--;}return 0!==A&&(e=rt(0,255&g[I-1]), A=0), st(4==t), 0===h.avail_out?4==t?2:0:4==t?3:1}(e);}if(2!=a&&3!=a||(c=666), 0==a||2==a)return 0===h.avail_out&&(u=-1), 0;if(1==a){if(1==e)$(2,3), tt(256,ft.static_ltree), nt(), 1+L+10-W<9&&($(2,3), tt(256,ft.static_ltree), nt()), L=7;else if(at(0,0,!1), 3==e)for(n=0;n<v;n++)w[n]=0;if(h.flush_pending(), 0===h.avail_out)return u=-1, 0}}return 4!=e?0:1};}function i(){var t=this;t.next_in_index=0, t.next_out_index=0, t.avail_in=0, t.total_in=0, t.avail_out=0, t.total_out=0;}i.prototype={deflateInit:function(t,e){return this.dstate=new r, e||(e=p), this.dstate.deflateInit(this,t,e)},deflate:function(t){return this.dstate?this.dstate.deflate(this,t):-2},deflateEnd:function(){if(!this.dstate)return-2;var t=this.dstate.deflateEnd();return this.dstate=null, t},deflateParams:function(t,e){return this.dstate?this.dstate.deflateParams(this,t,e):-2},deflateSetDictionary:function(t,e){return this.dstate?this.dstate.deflateSetDictionary(this,t,e):-2},read_buf:function(t,e,n){var r=this,i=r.avail_in;return n<i&&(i=n), 0===i?0:(r.avail_in-=i, t.set(r.next_in.subarray(r.next_in_index,r.next_in_index+i),e), r.next_in_index+=i, r.total_in+=i, i)},flush_pending:function(){var t=this,e=t.dstate.pending;e>t.avail_out&&(e=t.avail_out), 0!==e&&(t.next_out.set(t.dstate.pending_buf.subarray(t.dstate.pending_out,t.dstate.pending_out+e),t.next_out_index), t.next_out_index+=e, t.dstate.pending_out+=e, t.total_out+=e, t.avail_out-=e, t.dstate.pending-=e, 0===t.dstate.pending&&(t.dstate.pending_out=0));}};var o=t.zip||t;o.Deflater=o._jzlib_Deflater=function(t){var s=new i,h=new Uint8Array(512),e=t?t.level:-1;void 0===e&&(e=-1), s.deflateInit(e), s.next_out=h, this.append=function(t,e){var n,r=[],i=0,o=0,a=0;if(t.length){s.next_in_index=0, s.next_in=t, s.avail_in=t.length;do{if(s.next_out_index=0, s.avail_out=512, 0!=s.deflate(0))throw new Error("deflating: "+s.msg);s.next_out_index&&(512==s.next_out_index?r.push(new Uint8Array(h)):r.push(new Uint8Array(h.subarray(0,s.next_out_index)))), a+=s.next_out_index, e&&0<s.next_in_index&&s.next_in_index!=i&&(e(s.next_in_index), i=s.next_in_index);}while(0<s.avail_in||0===s.avail_out);return n=new Uint8Array(a), r.forEach(function(t){n.set(t,o), o+=t.length;}), n}}, this.flush=function(){var t,e,n=[],r=0,i=0;do{if(s.next_out_index=0, s.avail_out=512, 1!=(t=s.deflate(4))&&0!=t)throw new Error("deflating: "+s.msg);0<512-s.avail_out&&n.push(new Uint8Array(h.subarray(0,s.next_out_index))), i+=s.next_out_index;}while(0<s.avail_in||0===s.avail_out);return s.deflateEnd(), e=new Uint8Array(i), n.forEach(function(t){e.set(t,r), r+=t.length;}), e};};}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||Function('return typeof this === "object" && this.content')()||Function("return this")()), function(t){function f(t){var e;this.ok=!1, "#"==t.charAt(0)&&(t=t.substr(1,6)), t=(t=t.replace(/ /g,"")).toLowerCase();var l={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};for(var n in l)t==n&&(t=l[n]);for(var u=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],r=0;r<u.length;r++){var i=u[r].re,o=u[r].process,a=i.exec(t);a&&(e=o(a), this.r=e[0], this.g=e[1], this.b=e[2], this.ok=!0);}this.r=this.r<0||isNaN(this.r)?0:255<this.r?255:this.r, this.g=this.g<0||isNaN(this.g)?0:255<this.g?255:this.g, this.b=this.b<0||isNaN(this.b)?0:255<this.b?255:this.b, this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"}, this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),n=this.b.toString(16);return 1==t.length&&(t="0"+t), 1==e.length&&(e="0"+e), 1==n.length&&(n="0"+n), "#"+t+e+n}, this.getHelpXML=function(){for(var t=new Array,e=0;e<u.length;e++)for(var n=u[e].example,r=0;r<n.length;r++)t[t.length]=n[r];for(var i in l)t[t.length]=i;var o=document.createElement("ul");o.setAttribute("id","rgbcolor-examples");for(e=0;e<t.length;e++)try{var a=document.createElement("li"),s=new f(t[e]),h=document.createElement("div");h.style.cssText="margin: 3px; border: 1px solid black; background:"+s.toHex()+"; color:"+s.toHex(), h.appendChild(document.createTextNode("test"));var c=document.createTextNode(" "+t[e]+" -> "+s.toRGB()+" -> "+s.toHex());a.appendChild(h), a.appendChild(c), o.appendChild(a);}catch(t){}return o};}"undefined"!=typeof undefined&&undefined.amd?undefined("RGBColor",function(){return f}):"undefined"!='object'&&module.exports&&(module.exports=f), t.RGBColor=f;}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||Function('return typeof this === "object" && this.content')()||Function("return this")()), function(t){module.exports=t();}(function(){return function o(a,s,h){function c(n,t){if(!s[n]){if(!a[n]){var e="function"==typeof commonjsRequire&&commonjsRequire;if(!t&&e)return e(n,!0);if(l)return l(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND", r}var i=s[n]={exports:{}};a[n][0].call(i.exports,function(t){var e=a[n][1][t];return c(e||t)},i,i.exports,o,a,s,h);}return s[n].exports}for(var l="function"==typeof commonjsRequire&&commonjsRequire,t=0;t<h.length;t++)c(h[t]);return c}({1:[function(t,q,O){(function(E){!function(t){var e="object"==typeof O&&O,n="object"==typeof q&&q&&q.exports==e&&q,r="object"==typeof E&&E;r.global!==r&&r.window!==r||(t=r);var i,o,w=2147483647,y=36,v=1,b=26,a=38,s=700,x=72,S=128,k="-",h=/^xn--/,c=/[^ -~]/,l=/\x2E|\u3002|\uFF0E|\uFF61/g,u={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},f=y-v,_=Math.floor,A=String.fromCharCode;function I(t){throw RangeError(u[t])}function d(t,e){for(var n=t.length;n--;)t[n]=e(t[n]);return t}function p(t,e){return d(t.split(l),e).join(".")}function C(t){for(var e,n,r=[],i=0,o=t.length;i<o;)55296<=(e=t.charCodeAt(i++))&&e<=56319&&i<o?56320==(64512&(n=t.charCodeAt(i++)))?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e), i--):r.push(e);return r}function T(t){return d(t,function(t){var e="";return 65535<t&&(e+=A((t-=65536)>>>10&1023|55296), t=56320|1023&t), e+=A(t)}).join("")}function F(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function P(t,e,n){var r=0;for(t=n?_(t/s):t>>1, t+=_(t/e);f*b>>1<t;r+=y)t=_(t/f);return _(r+(f+1)*t/(t+a))}function g(t){var e,n,r,i,o,a,s,h,c,l,u,f=[],d=t.length,p=0,g=S,m=x;for((n=t.lastIndexOf(k))<0&&(n=0), r=0;r<n;++r)128<=t.charCodeAt(r)&&I("not-basic"), f.push(t.charCodeAt(r));for(i=0<n?n+1:0;i<d;){for(o=p, a=1, s=y;d<=i&&I("invalid-input"), u=t.charCodeAt(i++), (y<=(h=u-48<10?u-22:u-65<26?u-65:u-97<26?u-97:y)||h>_((w-p)/a))&&I("overflow"), p+=h*a, !(h<(c=s<=m?v:m+b<=s?b:s-m));s+=y)a>_(w/(l=y-c))&&I("overflow"), a*=l;m=P(p-o,e=f.length+1,0==o), _(p/e)>w-g&&I("overflow"), g+=_(p/e), p%=e, f.splice(p++,0,g);}return T(f)}function m(t){var e,n,r,i,o,a,s,h,c,l,u,f,d,p,g,m=[];for(f=(t=C(t)).length, e=S, o=x, a=n=0;a<f;++a)(u=t[a])<128&&m.push(A(u));for(r=i=m.length, i&&m.push(k);r<f;){for(s=w, a=0;a<f;++a)e<=(u=t[a])&&u<s&&(s=u);for(s-e>_((w-n)/(d=r+1))&&I("overflow"), n+=(s-e)*d, e=s, a=0;a<f;++a)if((u=t[a])<e&&++n>w&&I("overflow"), u==e){for(h=n, c=y;!(h<(l=c<=o?v:o+b<=c?b:c-o));c+=y)g=h-l, p=y-l, m.push(A(F(l+g%p,0))), h=_(g/p);m.push(A(F(h,0))), o=P(n,d,r==i), n=0, ++r;}++n, ++e;}return m.join("")}if(i={version:"1.2.4",ucs2:{decode:C,encode:T},decode:g,encode:m,toASCII:function(t){return p(t,function(t){return c.test(t)?"xn--"+m(t):t})},toUnicode:function(t){return p(t,function(t){return h.test(t)?g(t.slice(4).toLowerCase()):t})}}, e&&!e.nodeType)if(n)n.exports=i;else for(o in i)i.hasOwnProperty(o)&&(e[o]=i[o]);else t.punycode=i;}(this);}).call(this,"undefined"!=typeof commonjsGlobal?commonjsGlobal:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{});},{}],2:[function(t,e,n){var i=t("./log");function u(t,e){for(var n=3===t.nodeType?document.createTextNode(t.nodeValue):t.cloneNode(!1),r=t.firstChild;r;)!0!==e&&1===r.nodeType&&"SCRIPT"===r.nodeName||n.appendChild(u(r,e)), r=r.nextSibling;return 1===t.nodeType&&(n._scrollTop=t.scrollTop, n._scrollLeft=t.scrollLeft, "CANVAS"===t.nodeName?function(e,t){try{t&&(t.width=e.width, t.height=e.height, t.getContext("2d").putImageData(e.getContext("2d").getImageData(0,0,e.width,e.height),0,0));}catch(t){i("Unable to copy canvas content from",e,t);}}(t,n):"TEXTAREA"!==t.nodeName&&"SELECT"!==t.nodeName||(n.value=t.value)), n}e.exports=function(o,t,e,n,a,s,h){var c=u(o.documentElement,a.javascriptEnabled),l=t.createElement("iframe");return l.className="html2canvas-container", l.style.visibility="hidden", l.style.position="fixed", l.style.left="-10000px", l.style.top="0px", l.style.border="0", l.width=e, l.height=n, l.scrolling="no", t.body.appendChild(l), new Promise(function(e){var t,n,r,i=l.contentWindow.document;l.contentWindow.onload=l.onload=function(){var t=setInterval(function(){0<i.body.childNodes.length&&(!function t(e){if(1===e.nodeType){e.scrollTop=e._scrollTop, e.scrollLeft=e._scrollLeft;for(var n=e.firstChild;n;)t(n), n=n.nextSibling;}}(i.documentElement), clearInterval(t), "view"===a.type&&(l.contentWindow.scrollTo(s,h), !/(iPad|iPhone|iPod)/g.test(navigator.userAgent)||l.contentWindow.scrollY===h&&l.contentWindow.scrollX===s||(i.documentElement.style.top=-h+"px", i.documentElement.style.left=-s+"px", i.documentElement.style.position="absolute")), e(l));},50);}, i.open(), i.write("<!DOCTYPE html><html></html>"), n=s, r=h, !(t=o).defaultView||n===t.defaultView.pageXOffset&&r===t.defaultView.pageYOffset||t.defaultView.scrollTo(n,r), i.replaceChild(i.adoptNode(c),i.documentElement), i.close();})};},{"./log":13}],3:[function(t,e,n){function r(t){this.r=0, this.g=0, this.b=0, this.a=null;this.fromArray(t)||this.namedColor(t)||this.rgb(t)||this.rgba(t)||this.hex6(t)||this.hex3(t);}r.prototype.darken=function(t){var e=1-t;return new r([Math.round(this.r*e),Math.round(this.g*e),Math.round(this.b*e),this.a])}, r.prototype.isTransparent=function(){return 0===this.a}, r.prototype.isBlack=function(){return 0===this.r&&0===this.g&&0===this.b}, r.prototype.fromArray=function(t){return Array.isArray(t)&&(this.r=Math.min(t[0],255), this.g=Math.min(t[1],255), this.b=Math.min(t[2],255), 3<t.length&&(this.a=t[3])), Array.isArray(t)};var i=/^#([a-f0-9]{3})$/i;r.prototype.hex3=function(t){var e;return null!==(e=t.match(i))&&(this.r=parseInt(e[1][0]+e[1][0],16), this.g=parseInt(e[1][1]+e[1][1],16), this.b=parseInt(e[1][2]+e[1][2],16)), null!==e};var o=/^#([a-f0-9]{6})$/i;r.prototype.hex6=function(t){var e=null;return null!==(e=t.match(o))&&(this.r=parseInt(e[1].substring(0,2),16), this.g=parseInt(e[1].substring(2,4),16), this.b=parseInt(e[1].substring(4,6),16)), null!==e};var a=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/;r.prototype.rgb=function(t){var e;return null!==(e=t.match(a))&&(this.r=Number(e[1]), this.g=Number(e[2]), this.b=Number(e[3])), null!==e};var s=/^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d?\.?\d+)\s*\)$/;r.prototype.rgba=function(t){var e;return null!==(e=t.match(s))&&(this.r=Number(e[1]), this.g=Number(e[2]), this.b=Number(e[3]), this.a=Number(e[4])), null!==e}, r.prototype.toString=function(){return null!==this.a&&1!==this.a?"rgba("+[this.r,this.g,this.b,this.a].join(",")+")":"rgb("+[this.r,this.g,this.b].join(",")+")"}, r.prototype.namedColor=function(t){t=t.toLowerCase();var e=h[t];if(e)this.r=e[0], this.g=e[1], this.b=e[2];else if("transparent"===t)return this.r=this.g=this.b=this.a=0, !0;return!!e}, r.prototype.isColor=!0;var h={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};e.exports=r;},{}],4:[function(t,e,n){var p=t("./support"),d=t("./renderers/canvas"),g=t("./imageloader"),m=t("./nodeparser"),r=t("./nodecontainer"),w=t("./log"),i=t("./utils"),y=t("./clone"),v=t("./proxy").loadUrlDocument,b=i.getBounds,x="data-html2canvas-node",S=0;function o(t,e){var n,r,i=S++;if((e=e||{}).logging&&(w.options.logging=!0, w.options.start=Date.now()), e.async=void 0===e.async||e.async, e.allowTaint=void 0!==e.allowTaint&&e.allowTaint, e.removeContainer=void 0===e.removeContainer||e.removeContainer, e.javascriptEnabled=void 0!==e.javascriptEnabled&&e.javascriptEnabled, e.imageTimeout=void 0===e.imageTimeout?1e4:e.imageTimeout, e.renderer="function"==typeof e.renderer?e.renderer:d, e.strict=!!e.strict, "string"==typeof t){if("string"!=typeof e.proxy)return Promise.reject("Proxy must be used when rendering url");var o=null!=e.width?e.width:window.innerWidth,a=null!=e.height?e.height:window.innerHeight;return v((n=t, r=document.createElement("a"), r.href=n, r.href=r.href, r),e.proxy,document,o,a,e).then(function(t){return k(t.contentWindow.document.documentElement,t,e,o,a)})}var s,h,c,l,u,f=(void 0===t?[document.documentElement]:t.length?t:[t])[0];return f.setAttribute(x+i,i), (s=f.ownerDocument, h=e, c=f.ownerDocument.defaultView.innerWidth, l=f.ownerDocument.defaultView.innerHeight, u=i, y(s,s,c,l,h,s.defaultView.pageXOffset,s.defaultView.pageYOffset).then(function(t){w("Document cloned");var e=x+u,n="["+e+"='"+u+"']";s.querySelector(n).removeAttribute(e);var r=t.contentWindow,i=r.document.querySelector(n),o="function"==typeof h.onclone?Promise.resolve(h.onclone(r.document)):Promise.resolve(!0);return o.then(function(){return k(i,t,h,c,l)})})).then(function(t){return"function"==typeof e.onrendered&&(w("options.onrendered is deprecated, html2canvas returns a Promise containing the canvas"), e.onrendered(t)), t})}o.CanvasRenderer=d, o.NodeContainer=r, o.log=w, o.utils=i;var a="undefined"==typeof document||"function"!=typeof Object.create||"function"!=typeof document.createElement("canvas").getContext?function(){return Promise.reject("No canvas support")}:o;function k(n,r,i,t,e){var o,a,s=r.contentWindow,h=new p(s.document),c=new g(i,h),l=b(n),u="view"===i.type?t:(o=s.document, Math.max(Math.max(o.body.scrollWidth,o.documentElement.scrollWidth),Math.max(o.body.offsetWidth,o.documentElement.offsetWidth),Math.max(o.body.clientWidth,o.documentElement.clientWidth))),f="view"===i.type?e:(a=s.document, Math.max(Math.max(a.body.scrollHeight,a.documentElement.scrollHeight),Math.max(a.body.offsetHeight,a.documentElement.offsetHeight),Math.max(a.body.clientHeight,a.documentElement.clientHeight))),d=new i.renderer(u,f,c,i,document);return new m(n,d,h,c,i).ready.then(function(){var t,e;return w("Finished rendering"), t="view"===i.type?_(d.canvas,{width:d.canvas.width,height:d.canvas.height,top:0,left:0,x:0,y:0}):n===s.document.body||n===s.document.documentElement||null!=i.canvas?d.canvas:_(d.canvas,{width:null!=i.width?i.width:l.width,height:null!=i.height?i.height:l.height,top:l.top,left:l.left,x:0,y:0}), e=r, i.removeContainer&&(e.parentNode.removeChild(e), w("Cleaned up container")), t})}function _(t,e){var n=document.createElement("canvas"),r=Math.min(t.width-1,Math.max(0,e.left)),i=Math.min(t.width,Math.max(1,e.left+e.width)),o=Math.min(t.height-1,Math.max(0,e.top)),a=Math.min(t.height,Math.max(1,e.top+e.height));n.width=e.width, n.height=e.height;var s=i-r,h=a-o;return w("Cropping canvas at:","left:",e.left,"top:",e.top,"width:",s,"height:",h), w("Resulting crop with width",e.width,"and height",e.height,"with x",r,"and y",o), n.getContext("2d").drawImage(t,r,o,s,h,e.x,e.y,s,h), n}e.exports=a;},{"./clone":2,"./imageloader":11,"./log":13,"./nodecontainer":14,"./nodeparser":15,"./proxy":16,"./renderers/canvas":20,"./support":22,"./utils":26}],5:[function(t,e,n){var r=t("./log"),i=t("./utils").smallImage;e.exports=function t(e){if(this.src=e, r("DummyImageContainer for",e), !this.promise||!this.image){r("Initiating DummyImageContainer"), t.prototype.image=new Image;var n=this.image;t.prototype.promise=new Promise(function(t,e){n.onload=t, n.onerror=e, n.src=i(), !0===n.complete&&t(n);});}};},{"./log":13,"./utils":26}],6:[function(t,e,n){var h=t("./utils").smallImage;e.exports=function(t,e){var n,r,i=document.createElement("div"),o=document.createElement("img"),a=document.createElement("span"),s="Hidden Text";i.style.visibility="hidden", i.style.fontFamily=t, i.style.fontSize=e, i.style.margin=0, i.style.padding=0, document.body.appendChild(i), o.src=h(), o.width=1, o.height=1, o.style.margin=0, o.style.padding=0, o.style.verticalAlign="baseline", a.style.fontFamily=t, a.style.fontSize=e, a.style.margin=0, a.style.padding=0, a.appendChild(document.createTextNode(s)), i.appendChild(a), i.appendChild(o), n=o.offsetTop-a.offsetTop+1, i.removeChild(a), i.appendChild(document.createTextNode(s)), i.style.lineHeight="normal", o.style.verticalAlign="super", r=o.offsetTop-i.offsetTop+1, document.body.removeChild(i), this.baseline=n, this.lineWidth=1, this.middle=r;};},{"./utils":26}],7:[function(t,e,n){var r=t("./font");function i(){this.data={};}i.prototype.getMetrics=function(t,e){return void 0===this.data[t+"-"+e]&&(this.data[t+"-"+e]=new r(t,e)), this.data[t+"-"+e]}, e.exports=i;},{"./font":6}],8:[function(o,t,e){var a=o("./utils").getBounds,i=o("./proxy").loadUrlDocument;function n(e,t,n){this.image=null, this.src=e;var r=this,i=a(e);this.promise=(t?new Promise(function(t){"about:blank"===e.contentWindow.document.URL||null==e.contentWindow.document.documentElement?e.contentWindow.onload=e.onload=function(){t(e);}:t(e);}):this.proxyLoad(n.proxy,i,n)).then(function(t){return o("./core")(t.contentWindow.document.documentElement,{type:"view",width:t.width,height:t.height,proxy:n.proxy,javascriptEnabled:n.javascriptEnabled,removeContainer:n.removeContainer,allowTaint:n.allowTaint,imageTimeout:n.imageTimeout/2})}).then(function(t){return r.image=t});}n.prototype.proxyLoad=function(t,e,n){var r=this.src;return i(r.src,t,r.ownerDocument,e.width,e.height,n)}, t.exports=n;},{"./core":4,"./proxy":16,"./utils":26}],9:[function(t,e,n){function r(t){this.src=t.value, this.colorStops=[], this.type=null, this.x0=.5, this.y0=.5, this.x1=.5, this.y1=.5, this.promise=Promise.resolve(!0);}r.TYPES={LINEAR:1,RADIAL:2}, r.REGEXP_COLORSTOP=/^\s*(rgba?\(\s*\d{1,3},\s*\d{1,3},\s*\d{1,3}(?:,\s*[0-9\.]+)?\s*\)|[a-z]{3,20}|#[a-f0-9]{3,6})(?:\s+(\d{1,3}(?:\.\d+)?)(%|px)?)?(?:\s|$)/i, e.exports=r;},{}],10:[function(t,e,n){e.exports=function(n,r){this.src=n, this.image=new Image;var i=this;this.tainted=null, this.promise=new Promise(function(t,e){i.image.onload=t, i.image.onerror=e, r&&(i.image.crossOrigin="anonymous"), i.image.src=n, !0===i.image.complete&&t(i.image);});};},{}],11:[function(t,e,n){var o=t("./log"),r=t("./imagecontainer"),i=t("./dummyimagecontainer"),a=t("./proxyimagecontainer"),s=t("./framecontainer"),h=t("./svgcontainer"),c=t("./svgnodecontainer"),l=t("./lineargradientcontainer"),u=t("./webkitgradientcontainer"),f=t("./utils").bind;function d(t,e){this.link=null, this.options=t, this.support=e, this.origin=this.getOrigin(window.location.href);}d.prototype.findImages=function(t){var e=[];return t.reduce(function(t,e){switch(e.node.nodeName){case"IMG":return t.concat([{args:[e.node.src],method:"url"}]);case"svg":case"IFRAME":return t.concat([{args:[e.node],method:e.node.nodeName}])}return t},[]).forEach(this.addImage(e,this.loadImage),this), e}, d.prototype.findBackgroundImage=function(t,e){return e.parseBackgroundImages().filter(this.hasImageBackground).forEach(this.addImage(t,this.loadImage),this), t}, d.prototype.addImage=function(n,r){return function(e){e.args.forEach(function(t){this.imageExists(n,t)||(n.splice(0,0,r.call(this,e)), o("Added image #"+n.length,"string"==typeof t?t.substring(0,100):t));},this);}}, d.prototype.hasImageBackground=function(t){return"none"!==t.method}, d.prototype.loadImage=function(t){if("url"===t.method){var e=t.args[0];return!this.isSVG(e)||this.support.svg||this.options.allowTaint?e.match(/data:image\/.*;base64,/i)?new r(e.replace(/url\(['"]{0,}|['"]{0,}\)$/gi,""),!1):this.isSameOrigin(e)||!0===this.options.allowTaint||this.isSVG(e)?new r(e,!1):this.support.cors&&!this.options.allowTaint&&this.options.useCORS?new r(e,!0):this.options.proxy?new a(e,this.options.proxy):new i(e):new h(e)}return"linear-gradient"===t.method?new l(t):"gradient"===t.method?new u(t):"svg"===t.method?new c(t.args[0],this.support.svg):"IFRAME"===t.method?new s(t.args[0],this.isSameOrigin(t.args[0].src),this.options):new i(t)}, d.prototype.isSVG=function(t){return"svg"===t.substring(t.length-3).toLowerCase()||h.prototype.isInline(t)}, d.prototype.imageExists=function(t,e){return t.some(function(t){return t.src===e})}, d.prototype.isSameOrigin=function(t){return this.getOrigin(t)===this.origin}, d.prototype.getOrigin=function(t){var e=this.link||(this.link=document.createElement("a"));return e.href=t, e.href=e.href, e.protocol+e.hostname+e.port}, d.prototype.getPromise=function(e){return this.timeout(e,this.options.imageTimeout).catch(function(){return new i(e.src).promise.then(function(t){e.image=t;})})}, d.prototype.get=function(e){var n=null;return this.images.some(function(t){return(n=t).src===e})?n:null}, d.prototype.fetch=function(t){return this.images=t.reduce(f(this.findBackgroundImage,this),this.findImages(t)), this.images.forEach(function(e,n){e.promise.then(function(){o("Succesfully loaded image #"+(n+1),e);},function(t){o("Failed loading image #"+(n+1),e,t);});}), this.ready=Promise.all(this.images.map(this.getPromise,this)), o("Finished searching images"), this}, d.prototype.timeout=function(n,r){var i,t=Promise.race([n.promise,new Promise(function(t,e){i=setTimeout(function(){o("Timed out loading image",n), e(n);},r);})]).then(function(t){return clearTimeout(i), t});return t.catch(function(){clearTimeout(i);}), t}, e.exports=d;},{"./dummyimagecontainer":5,"./framecontainer":8,"./imagecontainer":10,"./lineargradientcontainer":12,"./log":13,"./proxyimagecontainer":17,"./svgcontainer":23,"./svgnodecontainer":24,"./utils":26,"./webkitgradientcontainer":27}],12:[function(t,e,n){var i=t("./gradientcontainer"),o=t("./color");function r(t){i.apply(this,arguments), this.type=i.TYPES.LINEAR;var e=r.REGEXP_DIRECTION.test(t.args[0])||!i.REGEXP_COLORSTOP.test(t.args[0]);e?t.args[0].split(/\s+/).reverse().forEach(function(t,e){switch(t){case"left":this.x0=0, this.x1=1;break;case"top":this.y0=0, this.y1=1;break;case"right":this.x0=1, this.x1=0;break;case"bottom":this.y0=1, this.y1=0;break;case"to":var n=this.y0,r=this.x0;this.y0=this.y1, this.x0=this.x1, this.x1=r, this.y1=n;break;case"center":break;default:var i=.01*parseFloat(t,10);if(isNaN(i))break;0===e?(this.y0=i, this.y1=1-this.y0):(this.x0=i, this.x1=1-this.x0);}},this):(this.y0=0, this.y1=1), this.colorStops=t.args.slice(e?1:0).map(function(t){var e=t.match(i.REGEXP_COLORSTOP),n=+e[2],r=0===n?"%":e[3];return{color:new o(e[1]),stop:"%"===r?n/100:null}}), null===this.colorStops[0].stop&&(this.colorStops[0].stop=0), null===this.colorStops[this.colorStops.length-1].stop&&(this.colorStops[this.colorStops.length-1].stop=1), this.colorStops.forEach(function(n,r){null===n.stop&&this.colorStops.slice(r).some(function(t,e){return null!==t.stop&&(n.stop=(t.stop-this.colorStops[r-1].stop)/(e+1)+this.colorStops[r-1].stop, !0)},this);},this);}r.prototype=Object.create(i.prototype), r.REGEXP_DIRECTION=/^\s*(?:to|left|right|top|bottom|center|\d{1,3}(?:\.\d+)?%?)(?:\s|$)/i, e.exports=r;},{"./color":3,"./gradientcontainer":9}],13:[function(t,e,n){var r=function(){r.options.logging&&window.console&&window.console.log&&Function.prototype.bind.call(window.console.log,window.console).apply(window.console,[Date.now()-r.options.start+"ms","html2canvas:"].concat([].slice.call(arguments,0)));};r.options={logging:!1}, e.exports=r;},{}],14:[function(t,e,n){var o=t("./color"),r=t("./utils"),i=r.getBounds,a=r.parseBackgrounds,s=r.offsetBounds;function h(t,e){this.node=t, this.parent=e, this.stack=null, this.bounds=null, this.borders=null, this.clip=[], this.backgroundClip=[], this.offsetBounds=null, this.visible=null, this.computedStyles=null, this.colors={}, this.styles={}, this.backgroundImages=null, this.transformData=null, this.transformMatrix=null, this.isPseudoElement=!1, this.opacity=null;}function c(t){return-1!==t.toString().indexOf("%")}function l(t){return t.replace("px","")}function u(t){return parseFloat(t)}h.prototype.cloneTo=function(t){t.visible=this.visible, t.borders=this.borders, t.bounds=this.bounds, t.clip=this.clip, t.backgroundClip=this.backgroundClip, t.computedStyles=this.computedStyles, t.styles=this.styles, t.backgroundImages=this.backgroundImages, t.opacity=this.opacity;}, h.prototype.getOpacity=function(){return null===this.opacity?this.opacity=this.cssFloat("opacity"):this.opacity}, h.prototype.assignStack=function(t){(this.stack=t).children.push(this);}, h.prototype.isElementVisible=function(){return this.node.nodeType===Node.TEXT_NODE?this.parent.visible:"none"!==this.css("display")&&"hidden"!==this.css("visibility")&&!this.node.hasAttribute("data-html2canvas-ignore")&&("INPUT"!==this.node.nodeName||"hidden"!==this.node.getAttribute("type"))}, h.prototype.css=function(t){return this.computedStyles||(this.computedStyles=this.isPseudoElement?this.parent.computedStyle(this.before?":before":":after"):this.computedStyle(null)), this.styles[t]||(this.styles[t]=this.computedStyles[t])}, h.prototype.prefixedCss=function(e){var n=this.css(e);return void 0===n&&["webkit","moz","ms","o"].some(function(t){return void 0!==(n=this.css(t+e.substr(0,1).toUpperCase()+e.substr(1)))},this), void 0===n?null:n}, h.prototype.computedStyle=function(t){return this.node.ownerDocument.defaultView.getComputedStyle(this.node,t)}, h.prototype.cssInt=function(t){var e=parseInt(this.css(t),10);return isNaN(e)?0:e}, h.prototype.color=function(t){return this.colors[t]||(this.colors[t]=new o(this.css(t)))}, h.prototype.cssFloat=function(t){var e=parseFloat(this.css(t));return isNaN(e)?0:e}, h.prototype.fontWeight=function(){var t=this.css("fontWeight");switch(parseInt(t,10)){case 401:t="bold";break;case 400:t="normal";}return t}, h.prototype.parseClip=function(){var t=this.css("clip").match(this.CLIP);return t?{top:parseInt(t[1],10),right:parseInt(t[2],10),bottom:parseInt(t[3],10),left:parseInt(t[4],10)}:null}, h.prototype.parseBackgroundImages=function(){return this.backgroundImages||(this.backgroundImages=a(this.css("backgroundImage")))}, h.prototype.cssList=function(t,e){var n=(this.css(t)||"").split(",");return 1===(n=(n=n[e||0]||n[0]||"auto").trim().split(" ")).length&&(n=[n[0],c(n[0])?"auto":n[0]]), n}, h.prototype.parseBackgroundSize=function(t,e,n){var r,i,o=this.cssList("backgroundSize",n);if(c(o[0]))r=t.width*parseFloat(o[0])/100;else{if(/contain|cover/.test(o[0])){var a=t.width/t.height,s=e.width/e.height;return a<s^"contain"===o[0]?{width:t.height*s,height:t.height}:{width:t.width,height:t.width/s}}r=parseInt(o[0],10);}return i="auto"===o[0]&&"auto"===o[1]?e.height:"auto"===o[1]?r/e.width*e.height:c(o[1])?t.height*parseFloat(o[1])/100:parseInt(o[1],10), "auto"===o[0]&&(r=i/e.height*e.width), {width:r,height:i}}, h.prototype.parseBackgroundPosition=function(t,e,n,r){var i,o,a=this.cssList("backgroundPosition",n);return i=c(a[0])?(t.width-(r||e).width)*(parseFloat(a[0])/100):parseInt(a[0],10), o="auto"===a[1]?i/e.width*e.height:c(a[1])?(t.height-(r||e).height)*parseFloat(a[1])/100:parseInt(a[1],10), "auto"===a[0]&&(i=o/e.height*e.width), {left:i,top:o}}, h.prototype.parseBackgroundRepeat=function(t){return this.cssList("backgroundRepeat",t)[0]}, h.prototype.parseTextShadows=function(){var t=this.css("textShadow"),e=[];if(t&&"none"!==t)for(var n=t.match(this.TEXT_SHADOW_PROPERTY),r=0;n&&r<n.length;r++){var i=n[r].match(this.TEXT_SHADOW_VALUES);e.push({color:new o(i[0]),offsetX:i[1]?parseFloat(i[1].replace("px","")):0,offsetY:i[2]?parseFloat(i[2].replace("px","")):0,blur:i[3]?i[3].replace("px",""):0});}return e}, h.prototype.parseTransform=function(){if(!this.transformData)if(this.hasTransform()){var t=this.parseBounds(),e=this.prefixedCss("transformOrigin").split(" ").map(l).map(u);e[0]+=t.left, e[1]+=t.top, this.transformData={origin:e,matrix:this.parseTransformMatrix()};}else this.transformData={origin:[0,0],matrix:[1,0,0,1,0,0]};return this.transformData}, h.prototype.parseTransformMatrix=function(){if(!this.transformMatrix){var t=this.prefixedCss("transform"),e=t?function(t){{if(t&&"matrix"===t[1])return t[2].split(",").map(function(t){return parseFloat(t.trim())});if(t&&"matrix3d"===t[1]){var e=t[2].split(",").map(function(t){return parseFloat(t.trim())});return[e[0],e[1],e[4],e[5],e[12],e[13]]}}}(t.match(this.MATRIX_PROPERTY)):null;this.transformMatrix=e||[1,0,0,1,0,0];}return this.transformMatrix}, h.prototype.parseBounds=function(){return this.bounds||(this.bounds=this.hasTransform()?s(this.node):i(this.node))}, h.prototype.hasTransform=function(){return"1,0,0,1,0,0"!==this.parseTransformMatrix().join(",")||this.parent&&this.parent.hasTransform()}, h.prototype.getValue=function(){var t,e,n=this.node.value||"";return"SELECT"===this.node.tagName?(t=this.node, n=(e=t.options[t.selectedIndex||0])&&e.text||""):"password"===this.node.type&&(n=Array(n.length+1).join("•")), 0===n.length?this.node.placeholder||"":n}, h.prototype.MATRIX_PROPERTY=/(matrix|matrix3d)\((.+)\)/, h.prototype.TEXT_SHADOW_PROPERTY=/((rgba|rgb)\([^\)]+\)(\s-?\d+px){0,})/g, h.prototype.TEXT_SHADOW_VALUES=/(-?\d+px)|(#.+)|(rgb\(.+\))|(rgba\(.+\))/g, h.prototype.CLIP=/^rect\((\d+)px,? (\d+)px,? (\d+)px,? (\d+)px\)$/, e.exports=h;},{"./color":3,"./utils":26}],15:[function(t,e,n){var s=t("./log"),h=t("punycode"),c=t("./nodecontainer"),f=t("./textcontainer"),d=t("./pseudoelementcontainer"),l=t("./fontmetrics"),u=t("./color"),p=t("./stackingcontext"),r=t("./utils"),g=r.bind,a=r.getBounds,m=r.parseBackgrounds,w=r.offsetBounds;function i(t,e,n,r,i){s("Starting NodeParser"), this.renderer=e, this.options=i, this.range=null, this.support=n, this.renderQueue=[], this.stack=new p(!0,1,t.ownerDocument,null);var o=new c(t,null);if(i.background&&e.rectangle(0,0,e.width,e.height,new u(i.background)), t===t.ownerDocument.documentElement){var a=new c(o.color("backgroundColor").isTransparent()?t.ownerDocument.body:t.ownerDocument.documentElement,null);e.rectangle(0,0,e.width,e.height,a.color("backgroundColor"));}o.visibile=o.isElementVisible(), this.createPseudoHideStyles(t.ownerDocument), this.disableAnimations(t.ownerDocument), this.nodes=L([o].concat(this.getChildren(o)).filter(function(t){return t.visible=t.isElementVisible()}).map(this.getPseudoElements,this)), this.fontMetrics=new l, s("Fetched nodes, total:",this.nodes.length), s("Calculate overflow clips"), this.calculateOverflowClips(), s("Start fetching images"), this.images=r.fetch(this.nodes.filter(j)), this.ready=this.images.ready.then(g(function(){return s("Images loaded, starting parsing"), s("Creating stacking contexts"), this.createStackingContexts(), s("Sorting stacking contexts"), this.sortStackingContexts(this.stack), this.parse(this.stack), s("Render queue created with "+this.renderQueue.length+" items"), new Promise(g(function(t){i.async?"function"==typeof i.async?i.async.call(this,this.renderQueue,t):0<this.renderQueue.length?(this.renderIndex=0, this.asyncRenderer(this.renderQueue,t)):t():(this.renderQueue.forEach(this.paint,this), t());},this))},this));}function o(t){return t.parent&&t.parent.clip.length}function y(){}i.prototype.calculateOverflowClips=function(){this.nodes.forEach(function(t){if(j(t)){D(t)&&t.appendToDOM(), t.borders=this.parseBorders(t);var e="hidden"===t.css("overflow")?[t.borders.clip]:[],n=t.parseClip();n&&-1!==["absolute","fixed"].indexOf(t.css("position"))&&e.push([["rect",t.bounds.left+n.left,t.bounds.top+n.top,n.right-n.left,n.bottom-n.top]]), t.clip=o(t)?t.parent.clip.concat(e):e, t.backgroundClip="hidden"!==t.css("overflow")?t.clip.concat([t.borders.clip]):t.clip, D(t)&&t.cleanDOM();}else M(t)&&(t.clip=o(t)?t.parent.clip:[]);D(t)||(t.bounds=null);},this);}, i.prototype.asyncRenderer=function(t,e,n){n=n||Date.now(), this.paint(t[this.renderIndex++]), t.length===this.renderIndex?e():n+20>Date.now()?this.asyncRenderer(t,e,n):setTimeout(g(function(){this.asyncRenderer(t,e);},this),0);}, i.prototype.createPseudoHideStyles=function(t){this.createStyles(t,"."+d.prototype.PSEUDO_HIDE_ELEMENT_CLASS_BEFORE+':before { content: "" !important; display: none !important; }.'+d.prototype.PSEUDO_HIDE_ELEMENT_CLASS_AFTER+':after { content: "" !important; display: none !important; }');}, i.prototype.disableAnimations=function(t){this.createStyles(t,"* { -webkit-animation: none !important; -moz-animation: none !important; -o-animation: none !important; animation: none !important; -webkit-transition: none !important; -moz-transition: none !important; -o-transition: none !important; transition: none !important;}");}, i.prototype.createStyles=function(t,e){var n=t.createElement("style");n.innerHTML=e, t.body.appendChild(n);}, i.prototype.getPseudoElements=function(t){var e=[[t]];if(t.node.nodeType===Node.ELEMENT_NODE){var n=this.getPseudoElement(t,":before"),r=this.getPseudoElement(t,":after");n&&e.push(n), r&&e.push(r);}return L(e)}, i.prototype.getPseudoElement=function(t,e){var n=t.computedStyle(e);if(!n||!n.content||"none"===n.content||"-moz-alt-content"===n.content||"none"===n.display)return null;for(var r,i,o=(r=n.content, (i=r.substr(0,1))===r.substr(r.length-1)&&i.match(/'|"/)?r.substr(1,r.length-2):r),a="url"===o.substr(0,3),s=document.createElement(a?"img":"html2canvaspseudoelement"),h=new d(s,t,e),c=n.length-1;0<=c;c--){var l=n.item(c).replace(/(\-[a-z])/g,function(t){return t.toUpperCase().replace("-","")});s.style[l]=n[l];}if(s.className=d.prototype.PSEUDO_HIDE_ELEMENT_CLASS_BEFORE+" "+d.prototype.PSEUDO_HIDE_ELEMENT_CLASS_AFTER, a)return s.src=m(o)[0].args[0], [h];var u=document.createTextNode(o);return s.appendChild(u), [h,new f(u,h)]}, i.prototype.getChildren=function(n){return L([].filter.call(n.node.childNodes,q).map(function(t){var e=[t.nodeType===Node.TEXT_NODE?new f(t,n):new c(t,n)].filter(z);return t.nodeType===Node.ELEMENT_NODE&&e.length&&"TEXTAREA"!==t.tagName?e[0].isElementVisible()?e.concat(this.getChildren(e[0])):[]:e},this))}, i.prototype.newStackingContext=function(t,e){var n=new p(e,t.getOpacity(),t.node,t.parent);t.cloneTo(n), (e?n.getParentStack(this):n.parent.stack).contexts.push(n), t.stack=n;}, i.prototype.createStackingContexts=function(){this.nodes.forEach(function(t){var e,n;j(t)&&(this.isRootElement(t)||t.getOpacity()<1||(n=(e=t).css("position"), "auto"!==(-1!==["absolute","relative","fixed"].indexOf(n)?e.css("zIndex"):"auto"))||this.isBodyWithTransparentRoot(t)||t.hasTransform())?this.newStackingContext(t,!0):j(t)&&(O(t)&&T(t)||-1!==["inline-block","inline-table"].indexOf(t.css("display"))||B(t))?this.newStackingContext(t,!1):t.assignStack(t.parent.stack);},this);}, i.prototype.isBodyWithTransparentRoot=function(t){return"BODY"===t.node.nodeName&&t.parent.color("backgroundColor").isTransparent()}, i.prototype.isRootElement=function(t){return null===t.parent}, i.prototype.sortStackingContexts=function(t){var n;t.contexts.sort((n=t.contexts.slice(0), function(t,e){return t.cssInt("zIndex")+n.indexOf(t)/n.length-(e.cssInt("zIndex")+n.indexOf(e)/n.length)})), t.contexts.forEach(this.sortStackingContexts,this);}, i.prototype.parseTextBounds=function(a){return function(t,e,n){if("none"!==a.parent.css("textDecoration").substr(0,4)||0!==t.trim().length){if(this.support.rangeBounds&&!a.parent.hasTransform()){var r=n.slice(0,e).join("").length;return this.getRangeBounds(a.node,r,t.length)}if(a.node&&"string"==typeof a.node.data){var i=a.node.splitText(t.length),o=this.getWrapperBounds(a.node,a.parent.hasTransform());return a.node=i, o}}else this.support.rangeBounds&&!a.parent.hasTransform()||(a.node=a.node.splitText(t.length));return{}}}, i.prototype.getWrapperBounds=function(t,e){var n=t.ownerDocument.createElement("html2canvaswrapper"),r=t.parentNode,i=t.cloneNode(!0);n.appendChild(t.cloneNode(!0)), r.replaceChild(n,t);var o=e?w(n):a(n);return r.replaceChild(i,n), o}, i.prototype.getRangeBounds=function(t,e,n){var r=this.range||(this.range=t.ownerDocument.createRange());return r.setStart(t,e), r.setEnd(t,e+n), r.getBoundingClientRect()}, i.prototype.parse=function(t){var e=t.contexts.filter(I),n=t.children.filter(j),r=n.filter(R(B)),i=r.filter(R(O)).filter(R(F)),o=n.filter(R(O)).filter(B),a=r.filter(R(O)).filter(F),s=t.contexts.concat(r.filter(O)).filter(T),h=t.children.filter(M).filter(E),c=t.contexts.filter(C);e.concat(i).concat(o).concat(a).concat(s).concat(h).concat(c).forEach(function(t){this.renderQueue.push(t), P(t)&&(this.parse(t), this.renderQueue.push(new y));},this);}, i.prototype.paint=function(t){try{t instanceof y?this.renderer.ctx.restore():M(t)?(D(t.parent)&&t.parent.appendToDOM(), this.paintText(t), D(t.parent)&&t.parent.cleanDOM()):this.paintNode(t);}catch(t){if(s(t), this.options.strict)throw t}}, i.prototype.paintNode=function(t){P(t)&&(this.renderer.setOpacity(t.opacity), this.renderer.ctx.save(), t.hasTransform()&&this.renderer.setTransform(t.parseTransform())), "INPUT"===t.node.nodeName&&"checkbox"===t.node.type?this.paintCheckbox(t):"INPUT"===t.node.nodeName&&"radio"===t.node.type?this.paintRadio(t):this.paintElement(t);}, i.prototype.paintElement=function(n){var r=n.parseBounds();this.renderer.clip(n.backgroundClip,function(){this.renderer.renderBackground(n,r,n.borders.borders.map(N));},this), this.renderer.clip(n.clip,function(){this.renderer.renderBorders(n.borders.borders);},this), this.renderer.clip(n.backgroundClip,function(){switch(n.node.nodeName){case"svg":case"IFRAME":var t=this.images.get(n.node);t?this.renderer.renderImage(n,r,n.borders,t):s("Error loading <"+n.node.nodeName+">",n.node);break;case"IMG":var e=this.images.get(n.node.src);e?this.renderer.renderImage(n,r,n.borders,e):s("Error loading <img>",n.node.src);break;case"CANVAS":this.renderer.renderImage(n,r,n.borders,{image:n.node});break;case"SELECT":case"INPUT":case"TEXTAREA":this.paintFormValue(n);}},this);}, i.prototype.paintCheckbox=function(t){var e=t.parseBounds(),n=Math.min(e.width,e.height),r={width:n-1,height:n-1,top:e.top,left:e.left},i=[3,3],o=[i,i,i,i],a=[1,1,1,1].map(function(t){return{color:new u("#A5A5A5"),width:t}}),s=S(r,o,a);this.renderer.clip(t.backgroundClip,function(){this.renderer.rectangle(r.left+1,r.top+1,r.width-2,r.height-2,new u("#DEDEDE")), this.renderer.renderBorders(b(a,r,s,o)), t.node.checked&&(this.renderer.font(new u("#424242"),"normal","normal","bold",n-3+"px","arial"), this.renderer.text("✔",r.left+n/6,r.top+n-1));},this);}, i.prototype.paintRadio=function(t){var e=t.parseBounds(),n=Math.min(e.width,e.height)-2;this.renderer.clip(t.backgroundClip,function(){this.renderer.circleStroke(e.left+1,e.top+1,n,new u("#DEDEDE"),1,new u("#A5A5A5")), t.node.checked&&this.renderer.circle(Math.ceil(e.left+n/4)+1,Math.ceil(e.top+n/4)+1,Math.floor(n/2),new u("#424242"));},this);}, i.prototype.paintFormValue=function(e){var t=e.getValue();if(0<t.length){var n=e.node.ownerDocument,r=n.createElement("html2canvaswrapper");["lineHeight","textAlign","fontFamily","fontWeight","fontSize","color","paddingLeft","paddingTop","paddingRight","paddingBottom","width","height","borderLeftStyle","borderTopStyle","borderLeftWidth","borderTopWidth","boxSizing","whiteSpace","wordWrap"].forEach(function(t){try{r.style[t]=e.css(t);}catch(t){s("html2canvas: Parse: Exception caught in renderFormValue: "+t.message);}});var i=e.parseBounds();r.style.position="fixed", r.style.left=i.left+"px", r.style.top=i.top+"px", r.textContent=t, n.body.appendChild(r), this.paintText(new f(r.firstChild,e)), n.body.removeChild(r);}}, i.prototype.paintText=function(n){n.applyTextTransform();var t,e=h.ucs2.decode(n.node.data),r=this.options.letterRendering&&!/^(normal|none|0px)$/.test(n.parent.css("letterSpacing"))||(t=n.node.data, /[^\u0000-\u00ff]/.test(t))?e.map(function(t){return h.ucs2.encode([t])}):function(t){var e,n=[],r=0,i=!1;for(;t.length;)o=t[r], -1!==[32,13,10,9,45].indexOf(o)===i?((e=t.splice(0,r)).length&&n.push(h.ucs2.encode(e)), i=!i, r=0):r++, r>=t.length&&(e=t.splice(0,r)).length&&n.push(h.ucs2.encode(e));var o;return n}(e),i=n.parent.fontWeight(),o=n.parent.css("fontSize"),a=n.parent.css("fontFamily"),s=n.parent.parseTextShadows();this.renderer.font(n.parent.color("color"),n.parent.css("fontStyle"),n.parent.css("fontVariant"),i,o,a), s.length?this.renderer.fontShadow(s[0].color,s[0].offsetX,s[0].offsetY,s[0].blur):this.renderer.clearShadow(), this.renderer.clip(n.parent.clip,function(){r.map(this.parseTextBounds(n),this).forEach(function(t,e){t&&!1===/^\s*$/.test(r[e])&&(this.renderer.text(r[e],t.left,t.bottom), this.renderTextDecoration(n.parent,t,this.fontMetrics.getMetrics(a,o)));},this);},this);}, i.prototype.renderTextDecoration=function(t,e,n){switch(t.css("textDecoration").split(" ")[0]){case"underline":this.renderer.rectangle(e.left,Math.round(e.top+n.baseline+n.lineWidth),e.width,1,t.color("color"));break;case"overline":this.renderer.rectangle(e.left,Math.round(e.top),e.width,1,t.color("color"));break;case"line-through":this.renderer.rectangle(e.left,Math.ceil(e.top+n.middle+n.lineWidth),e.width,1,t.color("color"));}};var v={inset:[["darken",.6],["darken",.1],["darken",.1],["darken",.6]]};function b(a,s,h,c){return a.map(function(t,e){if(0<t.width){var n=s.left,r=s.top,i=s.width,o=s.height-a[2].width;switch(e){case 0:o=a[0].width, t.args=_({c1:[n,r],c2:[n+i,r],c3:[n+i-a[1].width,r+o],c4:[n+a[3].width,r+o]},c[0],c[1],h.topLeftOuter,h.topLeftInner,h.topRightOuter,h.topRightInner);break;case 1:n=s.left+s.width-a[1].width, i=a[1].width, t.args=_({c1:[n+i,r],c2:[n+i,r+o+a[2].width],c3:[n,r+o],c4:[n,r+a[0].width]},c[1],c[2],h.topRightOuter,h.topRightInner,h.bottomRightOuter,h.bottomRightInner);break;case 2:r=r+s.height-a[2].width, o=a[2].width, t.args=_({c1:[n+i,r+o],c2:[n,r+o],c3:[n+a[3].width,r],c4:[n+i-a[3].width,r]},c[2],c[3],h.bottomRightOuter,h.bottomRightInner,h.bottomLeftOuter,h.bottomLeftInner);break;case 3:i=a[3].width, t.args=_({c1:[n,r+o+a[2].width],c2:[n,r],c3:[n+i,r+a[0].width],c4:[n+i,r+o]},c[3],c[0],h.bottomLeftOuter,h.bottomLeftInner,h.topLeftOuter,h.topLeftInner);}}return t})}function x(t,e,n,r){var i=(Math.sqrt(2)-1)/3*4,o=n*i,a=r*i,s=t+n,h=e+r;return{topLeft:k({x:t,y:h},{x:t,y:h-a},{x:s-o,y:e},{x:s,y:e}),topRight:k({x:t,y:e},{x:t+o,y:e},{x:s,y:h-a},{x:s,y:h}),bottomRight:k({x:s,y:e},{x:s,y:e+a},{x:t+o,y:h},{x:t,y:h}),bottomLeft:k({x:s,y:h},{x:s-o,y:h},{x:t,y:e+a},{x:t,y:e})}}function S(t,e,n){var r=t.left,i=t.top,o=t.width,a=t.height,s=e[0][0]<o/2?e[0][0]:o/2,h=e[0][1]<a/2?e[0][1]:a/2,c=e[1][0]<o/2?e[1][0]:o/2,l=e[1][1]<a/2?e[1][1]:a/2,u=e[2][0]<o/2?e[2][0]:o/2,f=e[2][1]<a/2?e[2][1]:a/2,d=e[3][0]<o/2?e[3][0]:o/2,p=e[3][1]<a/2?e[3][1]:a/2,g=o-c,m=a-f,w=o-u,y=a-p;return{topLeftOuter:x(r,i,s,h).topLeft.subdivide(.5),topLeftInner:x(r+n[3].width,i+n[0].width,Math.max(0,s-n[3].width),Math.max(0,h-n[0].width)).topLeft.subdivide(.5),topRightOuter:x(r+g,i,c,l).topRight.subdivide(.5),topRightInner:x(r+Math.min(g,o+n[3].width),i+n[0].width,g>o+n[3].width?0:c-n[3].width,l-n[0].width).topRight.subdivide(.5),bottomRightOuter:x(r+w,i+m,u,f).bottomRight.subdivide(.5),bottomRightInner:x(r+Math.min(w,o-n[3].width),i+Math.min(m,a+n[0].width),Math.max(0,u-n[1].width),f-n[2].width).bottomRight.subdivide(.5),bottomLeftOuter:x(r,i+y,d,p).bottomLeft.subdivide(.5),bottomLeftInner:x(r+n[3].width,i+y,Math.max(0,d-n[3].width),p-n[2].width).bottomLeft.subdivide(.5)}}function k(s,h,c,l){var u=function(t,e,n){return{x:t.x+(e.x-t.x)*n,y:t.y+(e.y-t.y)*n}};return{start:s,startControl:h,endControl:c,end:l,subdivide:function(t){var e=u(s,h,t),n=u(h,c,t),r=u(c,l,t),i=u(e,n,t),o=u(n,r,t),a=u(i,o,t);return[k(s,e,i,a),k(a,o,r,l)]},curveTo:function(t){t.push(["bezierCurve",h.x,h.y,c.x,c.y,l.x,l.y]);},curveToReversed:function(t){t.push(["bezierCurve",c.x,c.y,h.x,h.y,s.x,s.y]);}}}function _(t,e,n,r,i,o,a){var s=[];return 0<e[0]||0<e[1]?(s.push(["line",r[1].start.x,r[1].start.y]), r[1].curveTo(s)):s.push(["line",t.c1[0],t.c1[1]]), 0<n[0]||0<n[1]?(s.push(["line",o[0].start.x,o[0].start.y]), o[0].curveTo(s), s.push(["line",a[0].end.x,a[0].end.y]), a[0].curveToReversed(s)):(s.push(["line",t.c2[0],t.c2[1]]), s.push(["line",t.c3[0],t.c3[1]])), 0<e[0]||0<e[1]?(s.push(["line",i[1].end.x,i[1].end.y]), i[1].curveToReversed(s)):s.push(["line",t.c4[0],t.c4[1]]), s}function A(t,e,n,r,i,o,a){0<e[0]||0<e[1]?(t.push(["line",r[0].start.x,r[0].start.y]), r[0].curveTo(t), r[1].curveTo(t)):t.push(["line",o,a]), (0<n[0]||0<n[1])&&t.push(["line",i[0].start.x,i[0].start.y]);}function I(t){return t.cssInt("zIndex")<0}function C(t){return 0<t.cssInt("zIndex")}function T(t){return 0===t.cssInt("zIndex")}function F(t){return-1!==["inline","inline-block","inline-table"].indexOf(t.css("display"))}function P(t){return t instanceof p}function E(t){return 0<t.node.data.trim().length}function q(t){return t.nodeType===Node.TEXT_NODE||t.nodeType===Node.ELEMENT_NODE}function O(t){return"static"!==t.css("position")}function B(t){return"none"!==t.css("float")}function R(t){var e=this;return function(){return!t.apply(e,arguments)}}function j(t){return t.node.nodeType===Node.ELEMENT_NODE}function D(t){return!0===t.isPseudoElement}function M(t){return t.node.nodeType===Node.TEXT_NODE}function U(t){return parseInt(t,10)}function N(t){return t.width}function z(t){return t.node.nodeType!==Node.ELEMENT_NODE||-1===["SCRIPT","HEAD","TITLE","OBJECT","BR","OPTION"].indexOf(t.node.nodeName)}function L(t){return[].concat.apply([],t)}i.prototype.parseBorders=function(o){var r,t=o.parseBounds(),e=(r=o, ["TopLeft","TopRight","BottomRight","BottomLeft"].map(function(t){var e=r.css("border"+t+"Radius"),n=e.split(" ");return n.length<=1&&(n[1]=n[0]), n.map(U)})),n=["Top","Right","Bottom","Left"].map(function(t,e){var n=o.css("border"+t+"Style"),r=o.color("border"+t+"Color");"inset"===n&&r.isBlack()&&(r=new u([255,255,255,r.a]));var i=v[n]?v[n][e]:null;return{width:o.cssInt("border"+t+"Width"),color:i?r[i[0]](i[1]):r,args:null}}),i=S(t,e,n);return{clip:this.parseBackgroundClip(o,i,n,e,t),borders:b(n,t,i,e)}}, i.prototype.parseBackgroundClip=function(t,e,n,r,i){var o=[];switch(t.css("backgroundClip")){case"content-box":case"padding-box":A(o,r[0],r[1],e.topLeftInner,e.topRightInner,i.left+n[3].width,i.top+n[0].width), A(o,r[1],r[2],e.topRightInner,e.bottomRightInner,i.left+i.width-n[1].width,i.top+n[0].width), A(o,r[2],r[3],e.bottomRightInner,e.bottomLeftInner,i.left+i.width-n[1].width,i.top+i.height-n[2].width), A(o,r[3],r[0],e.bottomLeftInner,e.topLeftInner,i.left+n[3].width,i.top+i.height-n[2].width);break;default:A(o,r[0],r[1],e.topLeftOuter,e.topRightOuter,i.left,i.top), A(o,r[1],r[2],e.topRightOuter,e.bottomRightOuter,i.left+i.width,i.top), A(o,r[2],r[3],e.bottomRightOuter,e.bottomLeftOuter,i.left+i.width,i.top+i.height), A(o,r[3],r[0],e.bottomLeftOuter,e.topLeftOuter,i.left,i.top+i.height);}return o}, e.exports=i;},{"./color":3,"./fontmetrics":7,"./log":13,"./nodecontainer":14,"./pseudoelementcontainer":18,"./stackingcontext":21,"./textcontainer":25,"./utils":26,punycode:1}],16:[function(t,e,n){var a=t("./xhr"),r=t("./utils"),s=t("./log"),h=t("./clone"),c=r.decode64;function l(t,e,n){var r="withCredentials"in new XMLHttpRequest;if(!e)return Promise.reject("No proxy configured");var i=f(r),o=d(e,t,i);return r?a(o):u(n,o,i).then(function(t){return c(t.content)})}var i=0;function u(i,o,a){return new Promise(function(e,n){var t=i.createElement("script"),r=function(){delete window.html2canvas.proxy[a], i.body.removeChild(t);};window.html2canvas.proxy[a]=function(t){r(), e(t);}, t.src=o, t.onerror=function(t){r(), n(t);}, i.body.appendChild(t);})}function f(t){return t?"":"html2canvas_"+Date.now()+"_"+ ++i+"_"+Math.round(1e5*Math.random())}function d(t,e,n){return t+"?url="+encodeURIComponent(e)+(n.length?"&callback=html2canvas.proxy."+n:"")}n.Proxy=l, n.ProxyURL=function(t,e,n){var r="crossOrigin"in new Image,i=f(r),o=d(e,t,i);return r?Promise.resolve(o):u(n,o,i).then(function(t){return"data:"+t.type+";base64,"+t.content})}, n.loadUrlDocument=function(t,e,n,r,i,o){return new l(t,e,window.document).then((a=t, function(e){var n,t=new DOMParser;try{n=t.parseFromString(e,"text/html");}catch(t){s("DOMParser not supported, falling back to createHTMLDocument"), n=document.implementation.createHTMLDocument("");try{n.open(), n.write(e), n.close();}catch(t){s("createHTMLDocument write not supported, falling back to document.body.innerHTML"), n.body.innerHTML=e;}}var r=n.querySelector("base");if(!r||!r.href.host){var i=n.createElement("base");i.href=a, n.head.insertBefore(i,n.head.firstChild);}return n})).then(function(t){return h(t,n,r,i,o,0,0)});var a;};},{"./clone":2,"./log":13,"./utils":26,"./xhr":28}],17:[function(t,e,n){var o=t("./proxy").ProxyURL;e.exports=function(n,r){var t=document.createElement("a");t.href=n, n=t.href, this.src=n, this.image=new Image;var i=this;this.promise=new Promise(function(t,e){i.image.crossOrigin="Anonymous", i.image.onload=t, i.image.onerror=e, new o(n,r,document).then(function(t){i.image.src=t;}).catch(e);});};},{"./proxy":16}],18:[function(t,e,n){var r=t("./nodecontainer");function i(t,e,n){r.call(this,t,e), this.isPseudoElement=!0, this.before=":before"===n;}i.prototype.cloneTo=function(t){i.prototype.cloneTo.call(this,t), t.isPseudoElement=!0, t.before=this.before;}, (i.prototype=Object.create(r.prototype)).appendToDOM=function(){this.before?this.parent.node.insertBefore(this.node,this.parent.node.firstChild):this.parent.node.appendChild(this.node), this.parent.node.className+=" "+this.getHideClass();}, i.prototype.cleanDOM=function(){this.node.parentNode.removeChild(this.node), this.parent.node.className=this.parent.node.className.replace(this.getHideClass(),"");}, i.prototype.getHideClass=function(){return this["PSEUDO_HIDE_ELEMENT_CLASS_"+(this.before?"BEFORE":"AFTER")]}, i.prototype.PSEUDO_HIDE_ELEMENT_CLASS_BEFORE="___html2canvas___pseudoelement_before", i.prototype.PSEUDO_HIDE_ELEMENT_CLASS_AFTER="___html2canvas___pseudoelement_after", e.exports=i;},{"./nodecontainer":14}],19:[function(t,e,n){var h=t("./log");function r(t,e,n,r,i){this.width=t, this.height=e, this.images=n, this.options=r, this.document=i;}r.prototype.renderImage=function(t,e,n,r){var i=t.cssInt("paddingLeft"),o=t.cssInt("paddingTop"),a=t.cssInt("paddingRight"),s=t.cssInt("paddingBottom"),h=n.borders,c=e.width-(h[1].width+h[3].width+i+a),l=e.height-(h[0].width+h[2].width+o+s);this.drawImage(r,0,0,r.image.width||c,r.image.height||l,e.left+i+h[3].width,e.top+o+h[0].width,c,l);}, r.prototype.renderBackground=function(t,e,n){0<e.height&&0<e.width&&(this.renderBackgroundColor(t,e), this.renderBackgroundImage(t,e,n));}, r.prototype.renderBackgroundColor=function(t,e){var n=t.color("backgroundColor");n.isTransparent()||this.rectangle(e.left,e.top,e.width,e.height,n);}, r.prototype.renderBorders=function(t){t.forEach(this.renderBorder,this);}, r.prototype.renderBorder=function(t){t.color.isTransparent()||null===t.args||this.drawShape(t.args,t.color);}, r.prototype.renderBackgroundImage=function(o,a,s){o.parseBackgroundImages().reverse().forEach(function(t,e,n){switch(t.method){case"url":var r=this.images.get(t.args[0]);r?this.renderBackgroundRepeating(o,a,r,n.length-(e+1),s):h("Error loading background-image",t.args[0]);break;case"linear-gradient":case"gradient":var i=this.images.get(t.value);i?this.renderBackgroundGradient(i,a,s):h("Error loading background-image",t.args[0]);break;case"none":break;default:h("Unknown background-image type",t.args[0]);}},this);}, r.prototype.renderBackgroundRepeating=function(t,e,n,r,i){var o=t.parseBackgroundSize(e,n.image,r),a=t.parseBackgroundPosition(e,n.image,r,o);switch(t.parseBackgroundRepeat(r)){case"repeat-x":case"repeat no-repeat":this.backgroundRepeatShape(n,a,o,e,e.left+i[3],e.top+a.top+i[0],99999,o.height,i);break;case"repeat-y":case"no-repeat repeat":this.backgroundRepeatShape(n,a,o,e,e.left+a.left+i[3],e.top+i[0],o.width,99999,i);break;case"no-repeat":this.backgroundRepeatShape(n,a,o,e,e.left+a.left+i[3],e.top+a.top+i[0],o.width,o.height,i);break;default:this.renderBackgroundRepeat(n,a,o,{top:e.top,left:e.left},i[3],i[0]);}}, e.exports=r;},{"./log":13}],20:[function(t,e,n){var r=t("../renderer"),i=t("../lineargradientcontainer"),o=t("../log");function a(t,e){r.apply(this,arguments), this.canvas=this.options.canvas||this.document.createElement("canvas"), this.options.canvas||(this.canvas.width=t, this.canvas.height=e), this.ctx=this.canvas.getContext("2d"), this.taintCtx=this.document.createElement("canvas").getContext("2d"), this.ctx.textBaseline="bottom", this.variables={}, o("Initialized CanvasRenderer with size",t,"x",e);}function s(t){return 0<t.length}(a.prototype=Object.create(r.prototype)).setFillStyle=function(t){return this.ctx.fillStyle="object"==typeof t&&t.isColor?t.toString():t, this.ctx}, a.prototype.rectangle=function(t,e,n,r,i){this.setFillStyle(i).fillRect(t,e,n,r);}, a.prototype.circle=function(t,e,n,r){this.setFillStyle(r), this.ctx.beginPath(), this.ctx.arc(t+n/2,e+n/2,n/2,0,2*Math.PI,!0), this.ctx.closePath(), this.ctx.fill();}, a.prototype.circleStroke=function(t,e,n,r,i,o){this.circle(t,e,n,r), this.ctx.strokeStyle=o.toString(), this.ctx.stroke();}, a.prototype.drawShape=function(t,e){this.shape(t), this.setFillStyle(e).fill();}, a.prototype.taints=function(e){if(null===e.tainted){this.taintCtx.drawImage(e.image,0,0);try{this.taintCtx.getImageData(0,0,1,1), e.tainted=!1;}catch(t){this.taintCtx=document.createElement("canvas").getContext("2d"), e.tainted=!0;}}return e.tainted}, a.prototype.drawImage=function(t,e,n,r,i,o,a,s,h){this.taints(t)&&!this.options.allowTaint||this.ctx.drawImage(t.image,e,n,r,i,o,a,s,h);}, a.prototype.clip=function(t,e,n){this.ctx.save(), t.filter(s).forEach(function(t){this.shape(t).clip();},this), e.call(n), this.ctx.restore();}, a.prototype.shape=function(t){return this.ctx.beginPath(), t.forEach(function(t,e){"rect"===t[0]?this.ctx.rect.apply(this.ctx,t.slice(1)):this.ctx[0===e?"moveTo":t[0]+"To"].apply(this.ctx,t.slice(1));},this), this.ctx.closePath(), this.ctx}, a.prototype.font=function(t,e,n,r,i,o){this.setFillStyle(t).font=[e,n,r,i,o].join(" ").split(",")[0];}, a.prototype.fontShadow=function(t,e,n,r){this.setVariable("shadowColor",t.toString()).setVariable("shadowOffsetY",e).setVariable("shadowOffsetX",n).setVariable("shadowBlur",r);}, a.prototype.clearShadow=function(){this.setVariable("shadowColor","rgba(0,0,0,0)");}, a.prototype.setOpacity=function(t){this.ctx.globalAlpha=t;}, a.prototype.setTransform=function(t){this.ctx.translate(t.origin[0],t.origin[1]), this.ctx.transform.apply(this.ctx,t.matrix), this.ctx.translate(-t.origin[0],-t.origin[1]);}, a.prototype.setVariable=function(t,e){return this.variables[t]!==e&&(this.variables[t]=this.ctx[t]=e), this}, a.prototype.text=function(t,e,n){this.ctx.fillText(t,e,n);}, a.prototype.backgroundRepeatShape=function(t,e,n,r,i,o,a,s,h){var c=[["line",Math.round(i),Math.round(o)],["line",Math.round(i+a),Math.round(o)],["line",Math.round(i+a),Math.round(s+o)],["line",Math.round(i),Math.round(s+o)]];this.clip([c],function(){this.renderBackgroundRepeat(t,e,n,r,h[3],h[0]);},this);}, a.prototype.renderBackgroundRepeat=function(t,e,n,r,i,o){var a=Math.round(r.left+e.left+i),s=Math.round(r.top+e.top+o);this.setFillStyle(this.ctx.createPattern(this.resizeImage(t,n),"repeat")), this.ctx.translate(a,s), this.ctx.fill(), this.ctx.translate(-a,-s);}, a.prototype.renderBackgroundGradient=function(t,e){if(t instanceof i){var n=this.ctx.createLinearGradient(e.left+e.width*t.x0,e.top+e.height*t.y0,e.left+e.width*t.x1,e.top+e.height*t.y1);t.colorStops.forEach(function(t){n.addColorStop(t.stop,t.color.toString());}), this.rectangle(e.left,e.top,e.width,e.height,n);}}, a.prototype.resizeImage=function(t,e){var n=t.image;if(n.width===e.width&&n.height===e.height)return n;var r=document.createElement("canvas");return r.width=e.width, r.height=e.height, r.getContext("2d").drawImage(n,0,0,n.width,n.height,0,0,e.width,e.height), r}, e.exports=a;},{"../lineargradientcontainer":12,"../log":13,"../renderer":19}],21:[function(t,e,n){var i=t("./nodecontainer");function r(t,e,n,r){i.call(this,n,r), this.ownStacking=t, this.contexts=[], this.children=[], this.opacity=(this.parent?this.parent.stack.opacity:1)*e;}(r.prototype=Object.create(i.prototype)).getParentStack=function(t){var e=this.parent?this.parent.stack:null;return e?e.ownStacking?e:e.getParentStack(t):t.stack}, e.exports=r;},{"./nodecontainer":14}],22:[function(t,e,n){function r(t){this.rangeBounds=this.testRangeBounds(t), this.cors=this.testCORS(), this.svg=this.testSVG();}r.prototype.testRangeBounds=function(t){var e,n,r=!1;return t.createRange&&(e=t.createRange()).getBoundingClientRect&&((n=t.createElement("boundtest")).style.height="123px", n.style.display="block", t.body.appendChild(n), e.selectNode(n), 123===e.getBoundingClientRect().height&&(r=!0), t.body.removeChild(n)), r}, r.prototype.testCORS=function(){return void 0!==(new Image).crossOrigin}, r.prototype.testSVG=function(){var t=new Image,e=document.createElement("canvas"),n=e.getContext("2d");t.src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>";try{n.drawImage(t,0,0), e.toDataURL();}catch(t){return!1}return!0}, e.exports=r;},{}],23:[function(t,e,n){var r=t("./xhr"),i=t("./utils").decode64;function o(t){this.src=t, this.image=null;var n=this;this.promise=this.hasFabric().then(function(){return n.isInline(t)?Promise.resolve(n.inlineFormatting(t)):r(t)}).then(function(e){return new Promise(function(t){window.html2canvas.svg.fabric.loadSVGFromString(e,n.createCanvas.call(n,t));})});}o.prototype.hasFabric=function(){return window.html2canvas.svg&&window.html2canvas.svg.fabric?Promise.resolve():Promise.reject(new Error("html2canvas.svg.js is not loaded, cannot render svg"))}, o.prototype.inlineFormatting=function(t){return/^data:image\/svg\+xml;base64,/.test(t)?this.decode64(this.removeContentType(t)):this.removeContentType(t)}, o.prototype.removeContentType=function(t){return t.replace(/^data:image\/svg\+xml(;base64)?,/,"")}, o.prototype.isInline=function(t){return/^data:image\/svg\+xml/i.test(t)}, o.prototype.createCanvas=function(r){var i=this;return function(t,e){var n=new window.html2canvas.svg.fabric.StaticCanvas("c");i.image=n.lowerCanvasEl, n.setWidth(e.width).setHeight(e.height).add(window.html2canvas.svg.fabric.util.groupSVGElements(t,e)).renderAll(), r(n.lowerCanvasEl);}}, o.prototype.decode64=function(t){return"function"==typeof window.atob?window.atob(t):i(t)}, e.exports=o;},{"./utils":26,"./xhr":28}],24:[function(t,e,n){var r=t("./svgcontainer");function i(n,t){this.src=n, this.image=null;var r=this;this.promise=t?new Promise(function(t,e){r.image=new Image, r.image.onload=t, r.image.onerror=e, r.image.src="data:image/svg+xml,"+(new XMLSerializer).serializeToString(n), !0===r.image.complete&&t(r.image);}):this.hasFabric().then(function(){return new Promise(function(t){window.html2canvas.svg.fabric.parseSVGDocument(n,r.createCanvas.call(r,t));})});}i.prototype=Object.create(r.prototype), e.exports=i;},{"./svgcontainer":23}],25:[function(t,e,n){var r=t("./nodecontainer");function i(t,e){r.call(this,t,e);}function o(t,e,n){if(0<t.length)return e+n.toUpperCase()}(i.prototype=Object.create(r.prototype)).applyTextTransform=function(){this.node.data=this.transform(this.parent.css("textTransform"));}, i.prototype.transform=function(t){var e=this.node.data;switch(t){case"lowercase":return e.toLowerCase();case"capitalize":return e.replace(/(^|\s|:|-|\(|\))([a-z])/g,o);case"uppercase":return e.toUpperCase();default:return e}}, e.exports=i;},{"./nodecontainer":14}],26:[function(t,e,n){n.smallImage=function(){return"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"}, n.bind=function(t,e){return function(){return t.apply(e,arguments)}}, n.decode64=function(t){var e,n,r,i,o,a,s,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=t.length,l="";for(e=0;e<c;e+=4)o=h.indexOf(t[e])<<2|(n=h.indexOf(t[e+1]))>>4, a=(15&n)<<4|(r=h.indexOf(t[e+2]))>>2, s=(3&r)<<6|(i=h.indexOf(t[e+3])), l+=64===r?String.fromCharCode(o):64===i||-1===i?String.fromCharCode(o,a):String.fromCharCode(o,a,s);return l}, n.getBounds=function(t){if(t.getBoundingClientRect){var e=t.getBoundingClientRect(),n=null==t.offsetWidth?e.width:t.offsetWidth;return{top:e.top,bottom:e.bottom||e.top+e.height,right:e.left+n,left:e.left,width:n,height:null==t.offsetHeight?e.height:t.offsetHeight}}return{}}, n.offsetBounds=function(t){var e=t.offsetParent?n.offsetBounds(t.offsetParent):{top:0,left:0};return{top:t.offsetTop+e.top,bottom:t.offsetTop+t.offsetHeight+e.top,right:t.offsetLeft+e.left+t.offsetWidth,left:t.offsetLeft+e.left,width:t.offsetWidth,height:t.offsetHeight}}, n.parseBackgrounds=function(t){var e,n,r,i,o,a,s,h=[],c=0,l=0,u=function(){e&&('"'===n.substr(0,1)&&(n=n.substr(1,n.length-2)), n&&s.push(n), "-"===e.substr(0,1)&&0<(i=e.indexOf("-",1)+1)&&(r=e.substr(0,i), e=e.substr(i)), h.push({prefix:r,method:e.toLowerCase(),value:o,args:s,image:null})), s=[], e=r=n=o="";};return s=[], e=r=n=o="", t.split("").forEach(function(t){if(!(0===c&&-1<" \r\n\t".indexOf(t))){switch(t){case'"':a?a===t&&(a=null):a=t;break;case"(":if(a)break;if(0===c)return c=1, void(o+=t);l++;break;case")":if(a)break;if(1===c){if(0===l)return c=0, o+=t, void u();l--;}break;case",":if(a)break;if(0===c)return void u();if(1===c&&0===l&&!e.match(/^url$/i))return s.push(n), n="", void(o+=t)}o+=t, 0===c?e+=t:n+=t;}}), u(), h};},{}],27:[function(t,e,n){var r=t("./gradientcontainer");function i(t){r.apply(this,arguments), this.type="linear"===t.args[0]?r.TYPES.LINEAR:r.TYPES.RADIAL;}i.prototype=Object.create(r.prototype), e.exports=i;},{"./gradientcontainer":9}],28:[function(t,e,n){e.exports=function(r){return new Promise(function(t,e){var n=new XMLHttpRequest;n.open("GET",r), n.onload=function(){200===n.status?t(n.responseText):e(new Error(n.statusText));}, n.onerror=function(){e(new Error("Network Error"));}, n.send();})};},{}]},{},[4])(4)}), function(t){var n="+".charCodeAt(0),r="/".charCodeAt(0),i="0".charCodeAt(0),o="a".charCodeAt(0),a="A".charCodeAt(0),s="-".charCodeAt(0),h="_".charCodeAt(0),l=function(t){var e=t.charCodeAt(0);return e===n||e===s?62:e===r||e===h?63:e<i?-1:e<i+10?e-i+26+26:e<a+26?e-a:e<o+26?e-o+26:void 0};t.API.TTFFont=function(){function i(t,e,n){var r;if(this.rawData=t, r=this.contents=new X(t), this.contents.pos=4, "ttcf"===r.readString(4)){if(!e)throw new Error("Must specify a font name for TTC files.");throw new Error("Font "+e+" not found in TTC file.")}r.pos=0, this.parse(), this.subset=new T(this), this.registerTTF();}return i.open=function(t,e,n,r){return new i(function(t){var e,n,r,i,o,a;if(0<t.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var s=t.length;o="="===t.charAt(s-2)?2:"="===t.charAt(s-1)?1:0, a=new Uint8Array(3*t.length/4-o), r=0<o?t.length-4:t.length;var h=0;function c(t){a[h++]=t;}for(n=e=0;e<r;e+=4, n+=3)c((16711680&(i=l(t.charAt(e))<<18|l(t.charAt(e+1))<<12|l(t.charAt(e+2))<<6|l(t.charAt(e+3))))>>16), c((65280&i)>>8), c(255&i);return 2===o?c(255&(i=l(t.charAt(e))<<2|l(t.charAt(e+1))>>4)):1===o&&(c((i=l(t.charAt(e))<<10|l(t.charAt(e+1))<<4|l(t.charAt(e+2))>>2)>>8&255), c(255&i)), a}(n),e,r)}, i.prototype.parse=function(){return this.directory=new e(this.contents), this.head=new d(this), this.name=new b(this), this.cmap=new m(this), this.hhea=new g(this), this.maxp=new x(this), this.hmtx=new S(this), this.post=new y(this), this.os2=new w(this), this.loca=new C(this), this.glyf=new _(this), this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender, this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender, this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap, this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]}, i.prototype.registerTTF=function(){var i,t,e,n,r;if(this.scaleFactor=1e3/this.head.unitsPerEm, this.bbox=function(){var t,e,n,r;for(r=[], t=0, e=(n=this.bbox).length;t<e;t++)i=n[t], r.push(Math.round(i*this.scaleFactor));return r}.call(this), this.stemV=0, this.post.exists?(e=255&(n=this.post.italic_angle), !0&(t=n>>16)&&(t=-(1+(65535^t))), this.italicAngle=+(t+"."+e)):this.italicAngle=0, this.ascender=Math.round(this.ascender*this.scaleFactor), this.decender=Math.round(this.decender*this.scaleFactor), this.lineGap=Math.round(this.lineGap*this.scaleFactor), this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender, this.xHeight=this.os2.exists&&this.os2.xHeight||0, this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8, this.isSerif=1===(r=this.familyClass)||2===r||3===r||4===r||5===r||7===r, this.isScript=10===this.familyClass, this.flags=0, this.post.isFixedPitch&&(this.flags|=1), this.isSerif&&(this.flags|=2), this.isScript&&(this.flags|=8), 0!==this.italicAngle&&(this.flags|=64), this.flags|=32, !this.cmap.unicode)throw new Error("No unicode cmap for font")}, i.prototype.characterToGlyph=function(t){var e;return(null!=(e=this.cmap.unicode)?e.codeMap[t]:void 0)||0}, i.prototype.widthOfGlyph=function(t){var e;return e=1e3/this.head.unitsPerEm, this.hmtx.forGlyph(t).advance*e}, i.prototype.widthOfString=function(t,e,n){var r,i,o,a,s;for(i=a=o=0, s=(t=""+t).length;0<=s?a<s:s<a;i=0<=s?++a:--a)r=t.charCodeAt(i), o+=this.widthOfGlyph(this.characterToGlyph(r))+n*(1e3/e)||0;return o*(e/1e3)}, i.prototype.lineHeight=function(t,e){var n;return null==e&&(e=!1), n=e?this.lineGap:0, (this.ascender+n-this.decender)/1e3*t}, i}();var c,X=function(){function t(t){this.data=null!=t?t:[], this.pos=0, this.length=this.data.length;}return t.prototype.readByte=function(){return this.data[this.pos++]}, t.prototype.writeByte=function(t){return this.data[this.pos++]=t}, t.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()}, t.prototype.writeUInt32=function(t){return this.writeByte(t>>>24&255), this.writeByte(t>>16&255), this.writeByte(t>>8&255), this.writeByte(255&t)}, t.prototype.readInt32=function(){var t;return 2147483648<=(t=this.readUInt32())?t-4294967296:t}, t.prototype.writeInt32=function(t){return t<0&&(t+=4294967296), this.writeUInt32(t)}, t.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()}, t.prototype.writeUInt16=function(t){return this.writeByte(t>>8&255), this.writeByte(255&t)}, t.prototype.readInt16=function(){var t;return 32768<=(t=this.readUInt16())?t-65536:t}, t.prototype.writeInt16=function(t){return t<0&&(t+=65536), this.writeUInt16(t)}, t.prototype.readString=function(t){var e,n,r;for(n=[], e=r=0;0<=t?r<t:t<r;e=0<=t?++r:--r)n[e]=String.fromCharCode(this.readByte());return n.join("")}, t.prototype.writeString=function(t){var e,n,r,i;for(i=[], e=n=0, r=t.length;0<=r?n<r:r<n;e=0<=r?++n:--n)i.push(this.writeByte(t.charCodeAt(e)));return i}, t.prototype.readShort=function(){return this.readInt16()}, t.prototype.writeShort=function(t){return this.writeInt16(t)}, t.prototype.readLongLong=function(){var t,e,n,r,i,o,a,s;return t=this.readByte(), e=this.readByte(), n=this.readByte(), r=this.readByte(), i=this.readByte(), o=this.readByte(), a=this.readByte(), s=this.readByte(), 128&t?-1*(72057594037927940*(255^t)+281474976710656*(255^e)+1099511627776*(255^n)+4294967296*(255^r)+16777216*(255^i)+65536*(255^o)+256*(255^a)+(255^s)+1):72057594037927940*t+281474976710656*e+1099511627776*n+4294967296*r+16777216*i+65536*o+256*a+s}, t.prototype.readInt=function(){return this.readInt32()}, t.prototype.writeInt=function(t){return this.writeInt32(t)}, t.prototype.read=function(t){var e,n;for(e=[], n=0;0<=t?n<t:t<n;0<=t?++n:--n)e.push(this.readByte());return e}, t.prototype.write=function(t){var e,n,r,i;for(i=[], n=0, r=t.length;n<r;n++)e=t[n], i.push(this.writeByte(e));return i}, t}(),e=function(){var p;function t(t){var e,n,r;for(this.scalarType=t.readInt(), this.tableCount=t.readShort(), this.searchRange=t.readShort(), this.entrySelector=t.readShort(), this.rangeShift=t.readShort(), this.tables={}, n=0, r=this.tableCount;0<=r?n<r:r<n;0<=r?++n:--n)e={tag:t.readString(4),checksum:t.readInt(),offset:t.readInt(),length:t.readInt()}, this.tables[e.tag]=e;}return t.prototype.encode=function(t){var e,n,r,i,o,a,s,h,c,l,u,f,d;for(d in u=Object.keys(t).length, a=Math.log(2), c=16*Math.floor(Math.log(u)/a), i=Math.floor(c/a), h=16*u-c, (n=new X).writeInt(this.scalarType), n.writeShort(u), n.writeShort(c), n.writeShort(i), n.writeShort(h), r=16*u, s=n.pos+r, o=null, f=[], t)for(l=t[d], n.writeString(d), n.writeInt(p(l)), n.writeInt(s), n.writeInt(l.length), f=f.concat(l), "head"===d&&(o=s), s+=l.length;s%4;)f.push(0), s++;return n.write(f), e=2981146554-p(n.data), n.pos=o+8, n.writeUInt32(e), n.data}, p=function(t){var e,n,r,i;for(t=k.call(t);t.length%4;)t.push(0);for(n=new X(t), r=e=0, i=t.length;r<i;r+=4)e+=n.readUInt32();return 4294967295&e}, t}(),u={}.hasOwnProperty,f=function(t,e){for(var n in e)u.call(e,n)&&(t[n]=e[n]);function r(){this.constructor=t;}return r.prototype=e.prototype, t.prototype=new r, t.__super__=e.prototype, t};c=function(){function t(t){var e;this.file=t, e=this.file.directory.tables[this.tag], this.exists=!!e, e&&(this.offset=e.offset, this.length=e.length, this.parse(this.file.contents));}return t.prototype.parse=function(){}, t.prototype.encode=function(){}, t.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset, this.file.contents.read(this.length)):null}, t}();var d=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="head", e.prototype.parse=function(t){return t.pos=this.offset, this.version=t.readInt(), this.revision=t.readInt(), this.checkSumAdjustment=t.readInt(), this.magicNumber=t.readInt(), this.flags=t.readShort(), this.unitsPerEm=t.readShort(), this.created=t.readLongLong(), this.modified=t.readLongLong(), this.xMin=t.readShort(), this.yMin=t.readShort(), this.xMax=t.readShort(), this.yMax=t.readShort(), this.macStyle=t.readShort(), this.lowestRecPPEM=t.readShort(), this.fontDirectionHint=t.readShort(), this.indexToLocFormat=t.readShort(), this.glyphDataFormat=t.readShort()}, e}(),p=function(){function t(n,t){var e,r,i,o,a,s,h,c,l,u,f,d,p,g,m,w,y,v;switch(this.platformID=n.readUInt16(), this.encodingID=n.readShort(), this.offset=t+n.readInt(), l=n.pos, n.pos=this.offset, this.format=n.readUInt16(), this.length=n.readUInt16(), this.language=n.readUInt16(), this.isUnicode=3===this.platformID&&1===this.encodingID&&4===this.format||0===this.platformID&&4===this.format, this.codeMap={}, this.format){case 0:for(s=m=0;m<256;s=++m)this.codeMap[s]=n.readByte();break;case 4:for(f=n.readUInt16(), u=f/2, n.pos+=6, i=function(){var t,e;for(e=[], s=t=0;0<=u?t<u:u<t;s=0<=u?++t:--t)e.push(n.readUInt16());return e}(), n.pos+=2, p=function(){var t,e;for(e=[], s=t=0;0<=u?t<u:u<t;s=0<=u?++t:--t)e.push(n.readUInt16());return e}(), h=function(){var t,e;for(e=[], s=t=0;0<=u?t<u:u<t;s=0<=u?++t:--t)e.push(n.readUInt16());return e}(), c=function(){var t,e;for(e=[], s=t=0;0<=u?t<u:u<t;s=0<=u?++t:--t)e.push(n.readUInt16());return e}(), r=(this.length-n.pos+this.offset)/2, a=function(){var t,e;for(e=[], s=t=0;0<=r?t<r:r<t;s=0<=r?++t:--t)e.push(n.readUInt16());return e}(), s=w=0, v=i.length;w<v;s=++w)for(g=i[s], e=y=d=p[s];d<=g?y<=g:g<=y;e=d<=g?++y:--y)0===c[s]?o=e+h[s]:0!==(o=a[c[s]/2+(e-d)-(u-s)]||0)&&(o+=h[s]), this.codeMap[e]=65535&o;}n.pos=l;}return t.encode=function(t,e){var n,r,i,o,a,s,h,c,l,u,f,d,p,g,m,w,y,v,b,x,S,k,_,A,I,C,T,F,P,E,q,O,B,R,j,D,M,U,N,z,L,H,W,G,V,Y;switch(F=new X, o=Object.keys(t).sort(function(t,e){return t-e}), e){case"macroman":for(p=0, g=function(){var t,e;for(e=[], d=t=0;t<256;d=++t)e.push(0);return e}(), w={0:0}, i={}, P=0, B=o.length;P<B;P++)null==w[W=t[r=o[P]]]&&(w[W]=++p), i[r]={old:t[r],new:w[t[r]]}, g[r]=w[t[r]];return F.writeUInt16(1), F.writeUInt16(0), F.writeUInt32(12), F.writeUInt16(0), F.writeUInt16(262), F.writeUInt16(0), F.write(g), {charMap:i,subtable:F.data,maxGlyphID:p+1};case"unicode":for(C=[], l=[], w={}, n={}, m=h=null, E=y=0, R=o.length;E<R;E++)null==w[b=t[r=o[E]]]&&(w[b]=++y), n[r]={old:b,new:w[b]}, a=w[b]-r, null!=m&&a===h||(m&&l.push(m), C.push(r), h=a), m=r;for(m&&l.push(m), l.push(65535), C.push(65535), A=2*(_=C.length), k=2*Math.pow(Math.log(_)/Math.LN2,2), u=Math.log(k/2)/Math.LN2, S=2*_-k, s=[], x=[], f=[], d=q=0, j=C.length;q<j;d=++q){if(I=C[d], c=l[d], 65535===I){s.push(0), x.push(0);break}if(32768<=I-(T=n[I].new))for(s.push(0), x.push(2*(f.length+_-d)), r=O=I;I<=c?O<=c:c<=O;r=I<=c?++O:--O)f.push(n[r].new);else s.push(T-I), x.push(0);}for(F.writeUInt16(3), F.writeUInt16(1), F.writeUInt32(12), F.writeUInt16(4), F.writeUInt16(16+8*_+2*f.length), F.writeUInt16(0), F.writeUInt16(A), F.writeUInt16(k), F.writeUInt16(u), F.writeUInt16(S), L=0, D=l.length;L<D;L++)r=l[L], F.writeUInt16(r);for(F.writeUInt16(0), H=0, M=C.length;H<M;H++)r=C[H], F.writeUInt16(r);for(G=0, U=s.length;G<U;G++)a=s[G], F.writeUInt16(a);for(V=0, N=x.length;V<N;V++)v=x[V], F.writeUInt16(v);for(Y=0, z=f.length;Y<z;Y++)p=f[Y], F.writeUInt16(p);return{charMap:n,subtable:F.data,maxGlyphID:y+1}}}, t}(),m=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="cmap", e.prototype.parse=function(t){var e,n,r;for(t.pos=this.offset, this.version=t.readUInt16(), n=t.readUInt16(), this.tables=[], this.unicode=null, r=0;0<=n?r<n:n<r;0<=n?++r:--r)e=new p(t,this.offset), this.tables.push(e), e.isUnicode&&null==this.unicode&&(this.unicode=e);return!0}, e.encode=function(t,e){var n,r;return null==e&&(e="macroman"), n=p.encode(t,e), (r=new X).writeUInt16(0), r.writeUInt16(1), n.table=r.data.concat(n.subtable), n}, e}(),g=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="hhea", e.prototype.parse=function(t){return t.pos=this.offset, this.version=t.readInt(), this.ascender=t.readShort(), this.decender=t.readShort(), this.lineGap=t.readShort(), this.advanceWidthMax=t.readShort(), this.minLeftSideBearing=t.readShort(), this.minRightSideBearing=t.readShort(), this.xMaxExtent=t.readShort(), this.caretSlopeRise=t.readShort(), this.caretSlopeRun=t.readShort(), this.caretOffset=t.readShort(), t.pos+=8, this.metricDataFormat=t.readShort(), this.numberOfMetrics=t.readUInt16()}, e}(),w=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="OS/2", e.prototype.parse=function(n){if(n.pos=this.offset, this.version=n.readUInt16(), this.averageCharWidth=n.readShort(), this.weightClass=n.readUInt16(), this.widthClass=n.readUInt16(), this.type=n.readShort(), this.ySubscriptXSize=n.readShort(), this.ySubscriptYSize=n.readShort(), this.ySubscriptXOffset=n.readShort(), this.ySubscriptYOffset=n.readShort(), this.ySuperscriptXSize=n.readShort(), this.ySuperscriptYSize=n.readShort(), this.ySuperscriptXOffset=n.readShort(), this.ySuperscriptYOffset=n.readShort(), this.yStrikeoutSize=n.readShort(), this.yStrikeoutPosition=n.readShort(), this.familyClass=n.readShort(), this.panose=function(){var t,e;for(e=[], t=0;t<10;++t)e.push(n.readByte());return e}(), this.charRange=function(){var t,e;for(e=[], t=0;t<4;++t)e.push(n.readInt());return e}(), this.vendorID=n.readString(4), this.selection=n.readShort(), this.firstCharIndex=n.readShort(), this.lastCharIndex=n.readShort(), 0<this.version&&(this.ascent=n.readShort(), this.descent=n.readShort(), this.lineGap=n.readShort(), this.winAscent=n.readShort(), this.winDescent=n.readShort(), this.codePageRange=function(){var t,e;for(e=[], t=0;t<2;++t)e.push(n.readInt());return e}(), 1<this.version))return this.xHeight=n.readShort(), this.capHeight=n.readShort(), this.defaultChar=n.readShort(), this.breakChar=n.readShort(), this.maxContext=n.readShort()}, e}(),y=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="post", e.prototype.parse=function(r){var t,e,n,i;switch(r.pos=this.offset, this.format=r.readInt(), this.italicAngle=r.readInt(), this.underlinePosition=r.readShort(), this.underlineThickness=r.readShort(), this.isFixedPitch=r.readInt(), this.minMemType42=r.readInt(), this.maxMemType42=r.readInt(), this.minMemType1=r.readInt(), this.maxMemType1=r.readInt(), this.format){case 65536:break;case 131072:for(e=r.readUInt16(), this.glyphNameIndex=[], n=0;0<=e?n<e:e<n;0<=e?++n:--n)this.glyphNameIndex.push(r.readUInt16());for(this.names=[], i=[];r.pos<this.offset+this.length;)t=r.readByte(), i.push(this.names.push(r.readString(t)));return i;case 151552:return e=r.readUInt16(), this.offsets=r.read(e);case 196608:break;case 262144:return this.map=function(){var t,e,n;for(n=[], t=0, e=this.file.maxp.numGlyphs;0<=e?t<e:e<t;0<=e?++t:--t)n.push(r.readUInt32());return n}.call(this)}}, e}(),v=function(t,e){this.raw=t, this.length=t.length, this.platformID=e.platformID, this.encodingID=e.encodingID, this.languageID=e.languageID;},b=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="name", e.prototype.parse=function(t){var e,n,r,i,o,a,s,h,c,l,u,f;for(t.pos=this.offset, t.readShort(), e=t.readShort(), a=t.readShort(), n=[], i=c=0;0<=e?c<e:e<c;i=0<=e?++c:--c)n.push({platformID:t.readShort(),encodingID:t.readShort(),languageID:t.readShort(),nameID:t.readShort(),length:t.readShort(),offset:this.offset+a+t.readShort()});for(s={}, i=l=0, u=n.length;l<u;i=++l)r=n[i], t.pos=r.offset, h=t.readString(r.length), o=new v(h,r), null==s[f=r.nameID]&&(s[f]=[]), s[r.nameID].push(o);return this.strings=s, this.copyright=s[0], this.fontFamily=s[1], this.fontSubfamily=s[2], this.uniqueSubfamily=s[3], this.fontName=s[4], this.version=s[5], this.postscriptName=s[6][0].raw.replace(/[\x00-\x19\x80-\xff]/g,""), this.trademark=s[7], this.manufacturer=s[8], this.designer=s[9], this.description=s[10], this.vendorUrl=s[11], this.designerUrl=s[12], this.license=s[13], this.licenseUrl=s[14], this.preferredFamily=s[15], this.preferredSubfamily=s[17], this.compatibleFull=s[18], this.sampleText=s[19]}, e}(),x=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="maxp", e.prototype.parse=function(t){return t.pos=this.offset, this.version=t.readInt(), this.numGlyphs=t.readUInt16(), this.maxPoints=t.readUInt16(), this.maxContours=t.readUInt16(), this.maxCompositePoints=t.readUInt16(), this.maxComponentContours=t.readUInt16(), this.maxZones=t.readUInt16(), this.maxTwilightPoints=t.readUInt16(), this.maxStorage=t.readUInt16(), this.maxFunctionDefs=t.readUInt16(), this.maxInstructionDefs=t.readUInt16(), this.maxStackElements=t.readUInt16(), this.maxSizeOfInstructions=t.readUInt16(), this.maxComponentElements=t.readUInt16(), this.maxComponentDepth=t.readUInt16()}, e}(),S=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="hmtx", e.prototype.parse=function(n){var t,r,i,e,o,a,s;for(n.pos=this.offset, this.metrics=[], e=0, a=this.file.hhea.numberOfMetrics;0<=a?e<a:a<e;0<=a?++e:--e)this.metrics.push({advance:n.readUInt16(),lsb:n.readInt16()});for(r=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics, this.leftSideBearings=function(){var t,e;for(e=[], t=0;0<=r?t<r:r<t;0<=r?++t:--t)e.push(n.readInt16());return e}(), this.widths=function(){var t,e,n,r;for(r=[], t=0, e=(n=this.metrics).length;t<e;t++)i=n[t], r.push(i.advance);return r}.call(this), t=this.widths[this.widths.length-1], s=[], o=0;0<=r?o<r:r<o;0<=r?++o:--o)s.push(this.widths.push(t));return s}, e.prototype.forGlyph=function(t){return t in this.metrics?this.metrics[t]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[t-this.metrics.length]}}, e}(),k=[].slice,_=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="glyf", e.prototype.parse=function(t){return this.cache={}}, e.prototype.glyphFor=function(t){var e,n,r,i,o,a,s,h,c,l;return(t=t)in this.cache?this.cache[t]:(i=this.file.loca, e=this.file.contents, n=i.indexOf(t), 0===(r=i.lengthOf(t))?this.cache[t]=null:(e.pos=this.offset+n, o=(a=new X(e.read(r))).readShort(), h=a.readShort(), l=a.readShort(), s=a.readShort(), c=a.readShort(), this.cache[t]=-1===o?new I(a,h,l,s,c):new A(a,o,h,l,s,c), this.cache[t]))}, e.prototype.encode=function(t,e,n){var r,i,o,a,s;for(o=[], i=[], a=0, s=e.length;a<s;a++)r=t[e[a]], i.push(o.length), r&&(o=o.concat(r.encode(n)));return i.push(o.length), {table:o,offsets:i}}, e}(),A=function(){function t(t,e,n,r,i,o){this.raw=t, this.numberOfContours=e, this.xMin=n, this.yMin=r, this.xMax=i, this.yMax=o, this.compound=!1;}return t.prototype.encode=function(){return this.raw.data}, t}(),I=function(){function t(t,e,n,r,i){var o,a;for(this.raw=t, this.xMin=e, this.yMin=n, this.xMax=r, this.yMax=i, this.compound=!0, this.glyphIDs=[], this.glyphOffsets=[], o=this.raw;a=o.readShort(), this.glyphOffsets.push(o.pos), this.glyphIDs.push(o.readShort()), 32&a;)o.pos+=1&a?4:2, 128&a?o.pos+=8:64&a?o.pos+=4:8&a&&(o.pos+=2);}return t.prototype.encode=function(t){var e,n,r,i,o;for(n=new X(k.call(this.raw.data)), e=r=0, i=(o=this.glyphIDs).length;r<i;e=++r)o[e], n.pos=this.glyphOffsets[e];return n.data}, t}(),C=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,c), e.prototype.tag="loca", e.prototype.parse=function(r){var t;return r.pos=this.offset, t=this.file.head.indexToLocFormat, this.offsets=0===t?function(){var t,e,n;for(n=[], t=0, e=this.length;t<e;t+=2)n.push(2*r.readUInt16());return n}.call(this):function(){var t,e,n;for(n=[], t=0, e=this.length;t<e;t+=4)n.push(r.readUInt32());return n}.call(this)}, e.prototype.indexOf=function(t){return this.offsets[t]}, e.prototype.lengthOf=function(t){return this.offsets[t+1]-this.offsets[t]}, e.prototype.encode=function(t,e){for(var n=new Uint32Array(this.offsets.length),r=0,i=0,o=0;o<n.length;++o)if(n[o]=r, i<e.length&&e[i]==o){++i, n[o]=r;var a=this.offsets[o],s=this.offsets[o+1]-a;0<s&&(r+=s);}for(var h=new Array(4*n.length),c=0;c<n.length;++c)h[4*c+3]=255&n[c], h[4*c+2]=(65280&n[c])>>8, h[4*c+1]=(16711680&n[c])>>16, h[4*c]=(4278190080&n[c])>>24;return h}, e}(),T=function(){function t(t){this.font=t, this.subset={}, this.unicodes={}, this.next=33;}return t.prototype.generateCmap=function(){var t,e,n,r,i;for(e in r=this.font.cmap.tables[0].codeMap, t={}, i=this.subset)n=i[e], t[e]=r[n];return t}, t.prototype.glyphsFor=function(t){var e,n,r,i,o,a,s;for(r={}, o=0, a=t.length;o<a;o++)r[i=t[o]]=this.font.glyf.glyphFor(i);for(i in e=[], r)(null!=(n=r[i])?n.compound:void 0)&&e.push.apply(e,n.glyphIDs);if(0<e.length)for(i in s=this.glyphsFor(e))n=s[i], r[i]=n;return r}, t.prototype.encode=function(t){var e,n,r,i,o,a,s,h,c,l,u,f,d,p,g;for(n in e=m.encode(this.generateCmap(),"unicode"), i=this.glyphsFor(t), u={0:0}, g=e.charMap)u[(a=g[n]).old]=a.new;for(f in l=e.maxGlyphID, i)f in u||(u[f]=l++);return h=function(t){var e,n;for(e in n={}, t)n[t[e]]=e;return n}(u), c=Object.keys(h).sort(function(t,e){return t-e}), d=function(){var t,e,n;for(n=[], t=0, e=c.length;t<e;t++)o=c[t], n.push(h[o]);return n}(), r=this.font.glyf.encode(i,d,u), s=this.font.loca.encode(r.offsets,d), p={cmap:this.font.cmap.raw(),glyf:r.table,loca:s,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.raw()}, this.font.os2.exists&&(p["OS/2"]=this.font.os2.raw()), this.font.directory.encode(p)}, t}();t.API.PDFObject=function(){var o;function a(){}return o=function(t,e){return(Array(e+1).join("0")+t).slice(-e)}, a.convert=function(r){var i,t,e,n;if(Array.isArray(r))return"["+function(){var t,e,n;for(n=[], t=0, e=r.length;t<e;t++)i=r[t], n.push(a.convert(i));return n}().join(" ")+"]";if("string"==typeof r)return"/"+r;if(null!=r?r.isString:void 0)return"("+r+")";if(r instanceof Date)return"(D:"+o(r.getUTCFullYear(),4)+o(r.getUTCMonth(),2)+o(r.getUTCDate(),2)+o(r.getUTCHours(),2)+o(r.getUTCMinutes(),2)+o(r.getUTCSeconds(),2)+"Z)";if("[object Object]"==={}.toString.call(r)){for(t in e=["<<"], r)n=r[t], e.push("/"+t+" "+a.convert(n));return e.push(">>"), e.join("\n")}return""+r}, a}();}($), pt="undefined"!=typeof self&&self||"undefined"!=typeof window&&window||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||Function('return typeof this === "object" && this.content')()||Function("return this")(), gt=function(){var c,n,r;function i(t){var e,n,r,i,o,a,s,h,c,l,u,f,d,p;for(this.data=t, this.pos=8, this.palette=[], this.imgData=[], this.transparency={}, this.animation=null, this.text={}, a=null;;){switch(e=this.readUInt32(), c=function(){var t,e;for(e=[], t=0;t<4;++t)e.push(String.fromCharCode(this.data[this.pos++]));return e}.call(this).join("")){case"IHDR":this.width=this.readUInt32(), this.height=this.readUInt32(), this.bits=this.data[this.pos++], this.colorType=this.data[this.pos++], this.compressionMethod=this.data[this.pos++], this.filterMethod=this.data[this.pos++], this.interlaceMethod=this.data[this.pos++];break;case"acTL":this.animation={numFrames:this.readUInt32(),numPlays:this.readUInt32()||1/0,frames:[]};break;case"PLTE":this.palette=this.read(e);break;case"fcTL":a&&this.animation.frames.push(a), this.pos+=4, a={width:this.readUInt32(),height:this.readUInt32(),xOffset:this.readUInt32(),yOffset:this.readUInt32()}, o=this.readUInt16(), i=this.readUInt16()||100, a.delay=1e3*o/i, a.disposeOp=this.data[this.pos++], a.blendOp=this.data[this.pos++], a.data=[];break;case"IDAT":case"fdAT":for("fdAT"===c&&(this.pos+=4, e-=4), t=(null!=a?a.data:void 0)||this.imgData, f=0;0<=e?f<e:e<f;0<=e?++f:--f)t.push(this.data[this.pos++]);break;case"tRNS":switch(this.transparency={}, this.colorType){case 3:if(r=this.palette.length/3, this.transparency.indexed=this.read(e), this.transparency.indexed.length>r)throw new Error("More transparent colors than palette size");if(0<(l=r-this.transparency.indexed.length))for(d=0;0<=l?d<l:l<d;0<=l?++d:--d)this.transparency.indexed.push(255);break;case 0:this.transparency.grayscale=this.read(e)[0];break;case 2:this.transparency.rgb=this.read(e);}break;case"tEXt":s=(u=this.read(e)).indexOf(0), h=String.fromCharCode.apply(String,u.slice(0,s)), this.text[h]=String.fromCharCode.apply(String,u.slice(s+1));break;case"IEND":return a&&this.animation.frames.push(a), this.colors=function(){switch(this.colorType){case 0:case 3:case 4:return 1;case 2:case 6:return 3}}.call(this), this.hasAlphaChannel=4===(p=this.colorType)||6===p, n=this.colors+(this.hasAlphaChannel?1:0), this.pixelBitlength=this.bits*n, this.colorSpace=function(){switch(this.colors){case 1:return"DeviceGray";case 3:return"DeviceRGB"}}.call(this), void(this.imgData=new Uint8Array(this.imgData));default:this.pos+=e;}if(this.pos+=4, this.pos>this.data.length)throw new Error("Incomplete or corrupt PNG file")}}i.load=function(t,e,n){var r;return"function"==typeof e&&(n=e), (r=new XMLHttpRequest).open("GET",t,!0), r.responseType="arraybuffer", r.onload=function(){var t;return t=new i(new Uint8Array(r.response||r.mozResponseArrayBuffer)), "function"==typeof(null!=e?e.getContext:void 0)&&t.render(e), "function"==typeof n?n(t):void 0}, r.send(null)}, i.prototype.read=function(t){var e,n;for(n=[], e=0;0<=t?e<t:t<e;0<=t?++e:--e)n.push(this.data[this.pos++]);return n}, i.prototype.readUInt32=function(){return this.data[this.pos++]<<24|this.data[this.pos++]<<16|this.data[this.pos++]<<8|this.data[this.pos++]}, i.prototype.readUInt16=function(){return this.data[this.pos++]<<8|this.data[this.pos++]}, i.prototype.decodePixels=function(E){var q=this.pixelBitlength/8,O=new Uint8Array(this.width*this.height*q),B=0,R=this;if(null==E&&(E=this.imgData), 0===E.length)return new Uint8Array(0);function t(t,e,n,r){var i,o,a,s,h,c,l,u,f,d,p,g,m,w,y,v,b,x,S,k,_,A=Math.ceil((R.width-t)/n),I=Math.ceil((R.height-e)/r),C=R.width==A&&R.height==I;for(w=q*A, g=C?O:new Uint8Array(w*I), c=E.length, o=m=0;m<I&&B<c;){switch(E[B++]){case 0:for(s=b=0;b<w;s=b+=1)g[o++]=E[B++];break;case 1:for(s=x=0;x<w;s=x+=1)i=E[B++], h=s<q?0:g[o-q], g[o++]=(i+h)%256;break;case 2:for(s=S=0;S<w;s=S+=1)i=E[B++], a=(s-s%q)/q, y=m&&g[(m-1)*w+a*q+s%q], g[o++]=(y+i)%256;break;case 3:for(s=k=0;k<w;s=k+=1)i=E[B++], a=(s-s%q)/q, h=s<q?0:g[o-q], y=m&&g[(m-1)*w+a*q+s%q], g[o++]=(i+Math.floor((h+y)/2))%256;break;case 4:for(s=_=0;_<w;s=_+=1)i=E[B++], a=(s-s%q)/q, h=s<q?0:g[o-q], 0===m?y=v=0:(y=g[(m-1)*w+a*q+s%q], v=a&&g[(m-1)*w+(a-1)*q+s%q]), l=h+y-v, u=Math.abs(l-h), d=Math.abs(l-y), p=Math.abs(l-v), f=u<=d&&u<=p?h:d<=p?y:v, g[o++]=(i+f)%256;break;default:throw new Error("Invalid filter algorithm: "+E[B-1])}if(!C){var T=((e+m*r)*R.width+t)*q,F=m*w;for(s=0;s<A;s+=1){for(var P=0;P<q;P+=1)O[T++]=g[F++];T+=(n-1)*q;}}m++;}}return E=(E=new kt(E)).getBytes(), 1==R.interlaceMethod?(t(0,0,8,8), t(4,0,8,8), t(0,4,4,8), t(2,0,4,4), t(0,2,2,4), t(1,0,2,2), t(0,1,1,2)):t(0,0,1,1), O}, i.prototype.decodePalette=function(){var t,e,n,r,i,o,a,s,h;for(n=this.palette, o=this.transparency.indexed||[], i=new Uint8Array((o.length||0)+n.length), r=0, n.length, e=a=t=0, s=n.length;a<s;e=a+=3)i[r++]=n[e], i[r++]=n[e+1], i[r++]=n[e+2], i[r++]=null!=(h=o[t++])?h:255;return i}, i.prototype.copyToImageData=function(t,e){var n,r,i,o,a,s,h,c,l,u,f;if(r=this.colors, l=null, n=this.hasAlphaChannel, this.palette.length&&(l=null!=(f=this._decodedPalette)?f:this._decodedPalette=this.decodePalette(), r=4, n=!0), c=(i=t.data||t).length, a=l||e, o=s=0, 1===r)for(;o<c;)h=l?4*e[o/4]:s, u=a[h++], i[o++]=u, i[o++]=u, i[o++]=u, i[o++]=n?a[h++]:255, s=h;else for(;o<c;)h=l?4*e[o/4]:s, i[o++]=a[h++], i[o++]=a[h++], i[o++]=a[h++], i[o++]=n?a[h++]:255, s=h;}, i.prototype.decode=function(){var t;return t=new Uint8Array(this.width*this.height*4), this.copyToImageData(t,this.decodePixels()), t};try{n=pt.document.createElement("canvas"), r=n.getContext("2d");}catch(t){return-1}return c=function(t){var e;return r.width=t.width, r.height=t.height, r.clearRect(0,0,t.width,t.height), r.putImageData(t,0,0), (e=new Image).src=n.toDataURL(), e}, i.prototype.decodeFrames=function(t){var e,n,r,i,o,a,s,h;if(this.animation){for(h=[], n=o=0, a=(s=this.animation.frames).length;o<a;n=++o)e=s[n], r=t.createImageData(e.width,e.height), i=this.decodePixels(new Uint8Array(e.data)), this.copyToImageData(r,i), e.imageData=r, h.push(e.image=c(r));return h}}, i.prototype.renderFrame=function(t,e){var n,r,i;return n=(r=this.animation.frames)[e], i=r[e-1], 0===e&&t.clearRect(0,0,this.width,this.height), 1===(null!=i?i.disposeOp:void 0)?t.clearRect(i.xOffset,i.yOffset,i.width,i.height):2===(null!=i?i.disposeOp:void 0)&&t.putImageData(i.imageData,i.xOffset,i.yOffset), 0===n.blendOp&&t.clearRect(n.xOffset,n.yOffset,n.width,n.height), t.drawImage(n.image,n.xOffset,n.yOffset)}, i.prototype.animate=function(n){var r,i,o,a,s,t,h=this;return i=0, t=this.animation, a=t.numFrames, o=t.frames, s=t.numPlays, (r=function(){var t,e;if(t=i++%a, e=o[t], h.renderFrame(n,t), 1<a&&i/a<s)return h.animation._timeout=setTimeout(r,e.delay)})()}, i.prototype.stopAnimation=function(){var t;return clearTimeout(null!=(t=this.animation)?t._timeout:void 0)}, i.prototype.render=function(t){var e,n;return t._png&&t._png.stopAnimation(), t._png=this, t.width=this.width, t.height=this.height, e=t.getContext("2d"), this.animation?(this.decodeFrames(e), this.animate(e)):(n=e.createImageData(this.width,this.height), this.copyToImageData(n,this.decodePixels()), e.putImageData(n,0,0))}, i}(), pt.PNG=gt;
+/*
+ * Extracted from pdf.js
+ * https://github.com/andreasgal/pdf.js
+ *
+ * Copyright (c) 2011 Mozilla Foundation
+ *
+ * Contributors: Andreas Gal <gal@mozilla.com>
+ * Chris G Jones <cjones@mozilla.com>
+ * Shaon Barman <shaon.barman@gmail.com>
+ * Vivien Nicolas <21@vingtetun.org>
+ * Justin D'Arcangelo <justindarc@gmail.com>
+ * Yury Delendik
+ *
+ *
+ */
+var St=function(){function t(){this.pos=0, this.bufferLength=0, this.eof=!1, this.buffer=null;}return t.prototype={ensureBuffer:function(t){var e=this.buffer,n=e?e.byteLength:0;if(t<n)return e;for(var r=512;r<t;)r<<=1;for(var i=new Uint8Array(r),o=0;o<n;++o)i[o]=e[o];return this.buffer=i},getByte:function(){for(var t=this.pos;this.bufferLength<=t;){if(this.eof)return null;this.readBlock();}return this.buffer[this.pos++]},getBytes:function(t){var e=this.pos;if(t){this.ensureBuffer(e+t);for(var n=e+t;!this.eof&&this.bufferLength<n;)this.readBlock();var r=this.bufferLength;r<n&&(n=r);}else{for(;!this.eof;)this.readBlock();n=this.bufferLength;}return this.pos=n, this.buffer.subarray(e,n)},lookChar:function(){for(var t=this.pos;this.bufferLength<=t;){if(this.eof)return null;this.readBlock();}return String.fromCharCode(this.buffer[this.pos])},getChar:function(){for(var t=this.pos;this.bufferLength<=t;){if(this.eof)return null;this.readBlock();}return String.fromCharCode(this.buffer[this.pos++])},makeSubStream:function(t,e,n){for(var r=t+e;this.bufferLength<=r&&!this.eof;)this.readBlock();return new Stream(this.buffer,t,e,n)},skip:function(t){t||(t=1), this.pos+=t;},reset:function(){this.pos=0;}}, t}(),kt=function(){if("undefined"!=typeof Uint32Array){var F=new Uint32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),P=new Uint32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),E=new Uint32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),q=[new Uint32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],O=[new Uint32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];return(t.prototype=Object.create(St.prototype)).getBits=function(t){for(var e,n=this.codeSize,r=this.codeBuf,i=this.bytes,o=this.bytesPos;n<t;)void 0===(e=i[o++])&&B("Bad encoding in flate stream"), r|=e<<n, n+=8;return e=r&(1<<t)-1, this.codeBuf=r>>t, this.codeSize=n-=t, this.bytesPos=o, e}, t.prototype.getCode=function(t){for(var e=t[0],n=t[1],r=this.codeSize,i=this.codeBuf,o=this.bytes,a=this.bytesPos;r<n;){var s;void 0===(s=o[a++])&&B("Bad encoding in flate stream"), i|=s<<r, r+=8;}var h=e[i&(1<<n)-1],c=h>>16,l=65535&h;return(0==r||r<c||0==c)&&B("Bad encoding in flate stream"), this.codeBuf=i>>c, this.codeSize=r-c, this.bytesPos=a, l}, t.prototype.generateHuffmanTable=function(t){for(var e=t.length,n=0,r=0;r<e;++r)t[r]>n&&(n=t[r]);for(var i=1<<n,o=new Uint32Array(i),a=1,s=0,h=2;a<=n;++a, s<<=1, h<<=1)for(var c=0;c<e;++c)if(t[c]==a){var l=0,u=s;for(r=0;r<a;++r)l=l<<1|1&u, u>>=1;for(r=l;r<i;r+=h)o[r]=a<<16|c;++s;}return[o,n]}, t.prototype.readBlock=function(){function t(t,e,n,r,i){for(var o=t.getBits(n)+r;0<o--;)e[h++]=i;}var e=this.getBits(3);if(1&e&&(this.eof=!0), 0!=(e>>=1)){var n,r;if(1==e)n=q, r=O;else if(2==e){for(var i=this.getBits(5)+257,o=this.getBits(5)+1,a=this.getBits(4)+4,s=Array(F.length),h=0;h<a;)s[F[h++]]=this.getBits(3);for(var c=this.generateHuffmanTable(s),l=0,u=(h=0, i+o),f=new Array(u);h<u;){var d=this.getCode(c);16==d?t(this,f,2,3,l):17==d?t(this,f,3,3,l=0):18==d?t(this,f,7,11,l=0):f[h++]=l=d;}n=this.generateHuffmanTable(f.slice(0,i)), r=this.generateHuffmanTable(f.slice(i,u));}else B("Unknown block type in flate stream");for(var p=(I=this.buffer)?I.length:0,g=this.bufferLength;;){var m=this.getCode(n);if(m<256)p<=g+1&&(p=(I=this.ensureBuffer(g+1)).length), I[g++]=m;else{if(256==m)return void(this.bufferLength=g);var w=(m=P[m-=257])>>16;0<w&&(w=this.getBits(w));l=(65535&m)+w;m=this.getCode(r), 0<(w=(m=E[m])>>16)&&(w=this.getBits(w));var y=(65535&m)+w;p<=g+l&&(p=(I=this.ensureBuffer(g+l)).length);for(var v=0;v<l;++v, ++g)I[g]=I[g-y];}}}else{var b,x=this.bytes,S=this.bytesPos;void 0===(b=x[S++])&&B("Bad block header in flate stream");var k=b;void 0===(b=x[S++])&&B("Bad block header in flate stream"), k|=b<<8, void 0===(b=x[S++])&&B("Bad block header in flate stream");var _=b;void 0===(b=x[S++])&&B("Bad block header in flate stream"), (_|=b<<8)!=(65535&~k)&&B("Bad uncompressed block length in flate stream"), this.codeBuf=0, this.codeSize=0;var A=this.bufferLength,I=this.ensureBuffer(A+k),C=A+k;this.bufferLength=C;for(var T=A;T<C;++T){if(void 0===(b=x[S++])){this.eof=!0;break}I[T]=b;}this.bytesPos=S;}}, t}function B(t){throw new Error(t)}function t(t){var e=0,n=t[e++],r=t[e++];-1!=n&&-1!=r||B("Invalid header in flate stream"), 8!=(15&n)&&B("Unknown compression method in flate stream"), ((n<<8)+r)%31!=0&&B("Bad FCHECK in flate stream"), 32&r&&B("FDICT bit set in flate stream"), this.bytes=t, this.bytesPos=2, this.codeSize=0, this.codeBuf=0, St.call(this);}}();return function(t){if("object"!=typeof t.console){t.console={};for(var e,n,r=t.console,i=function(){},o=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");e=o.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=i);}var s,h,c,l,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";void 0===t.btoa&&(t.btoa=function(t){var e,n,r,i,o,a=0,s=0,h="",c=[];if(!t)return t;for(;e=(o=t.charCodeAt(a++)<<16|t.charCodeAt(a++)<<8|t.charCodeAt(a++))>>18&63, n=o>>12&63, r=o>>6&63, i=63&o, c[s++]=u.charAt(e)+u.charAt(n)+u.charAt(r)+u.charAt(i), a<t.length;);h=c.join("");var l=t.length%3;return(l?h.slice(0,l-3):h)+"===".slice(l||3)}), void 0===t.atob&&(t.atob=function(t){var e,n,r,i,o,a,s=0,h=0,c=[];if(!t)return t;for(t+="";e=(a=u.indexOf(t.charAt(s++))<<18|u.indexOf(t.charAt(s++))<<12|(i=u.indexOf(t.charAt(s++)))<<6|(o=u.indexOf(t.charAt(s++))))>>16&255, n=a>>8&255, r=255&a, c[h++]=64==i?String.fromCharCode(e):64==o?String.fromCharCode(e,n):String.fromCharCode(e,n,r), s<t.length;);return c.join("")}), Array.prototype.map||(Array.prototype.map=function(t){if(null==this||"function"!=typeof t)throw new TypeError;for(var e=Object(this),n=e.length>>>0,r=new Array(n),i=1<arguments.length?arguments[1]:void 0,o=0;o<n;o++)o in e&&(r[o]=t.call(i,e[o],o,e));return r}), Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}), Array.prototype.forEach||(Array.prototype.forEach=function(t,e){if(null==this||"function"!=typeof t)throw new TypeError;for(var n=Object(this),r=n.length>>>0,i=0;i<r;i++)i in n&&t.call(e,n[i],i,n);}), Object.keys||(Object.keys=(s=Object.prototype.hasOwnProperty, h=!{toString:null}.propertyIsEnumerable("toString"), l=(c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"]).length, function(t){if("object"!=typeof t&&("function"!=typeof t||null===t))throw new TypeError;var e,n,r=[];for(e in t)s.call(t,e)&&r.push(e);if(h)for(n=0;n<l;n++)s.call(t,c[n])&&r.push(c[n]);return r})), "function"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");t=Object(t);for(var e=1;e<arguments.length;e++){var n=arguments[e];if(null!=n)for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);}return t}), String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}), String.prototype.trimLeft||(String.prototype.trimLeft=function(){return this.replace(/^\s+/g,"")}), String.prototype.trimRight||(String.prototype.trimRight=function(){return this.replace(/\s+$/g,"")});}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||"undefined"!=typeof commonjsGlobal&&commonjsGlobal||Function('return typeof this === "object" && this.content')()||Function("return this")()), $});
+});
+
+var jspdf_min_1 = jspdf_min.jsPDF;
+var jspdf_min_2 = jspdf_min.saveAs;
+var jspdf_min_3 = jspdf_min.GifWriter;
+var jspdf_min_4 = jspdf_min.GifReader;
+
+var Path = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var PATH = exports.PATH = {
+ VECTOR: 0,
+ BEZIER_CURVE: 1,
+ CIRCLE: 2
+};
+});
+
+unwrapExports(Path);
+var Path_1 = Path.PATH;
+
+var Color_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var HEX3 = /^#([a-f0-9]{3})$/i;
+var hex3 = function hex3(value) {
+ var match = value.match(HEX3);
+ if (match) {
+ return [parseInt(match[1][0] + match[1][0], 16), parseInt(match[1][1] + match[1][1], 16), parseInt(match[1][2] + match[1][2], 16), null];
+ }
+ return false;
+};
+
+var HEX6 = /^#([a-f0-9]{6})$/i;
+var hex6 = function hex6(value) {
+ var match = value.match(HEX6);
+ if (match) {
+ return [parseInt(match[1].substring(0, 2), 16), parseInt(match[1].substring(2, 4), 16), parseInt(match[1].substring(4, 6), 16), null];
+ }
+ return false;
+};
+
+var RGB = /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/;
+var rgb = function rgb(value) {
+ var match = value.match(RGB);
+ if (match) {
+ return [Number(match[1]), Number(match[2]), Number(match[3]), null];
+ }
+ return false;
+};
+
+var RGBA = /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d?\.?\d+)\s*\)$/;
+var rgba = function rgba(value) {
+ var match = value.match(RGBA);
+ if (match && match.length > 4) {
+ return [Number(match[1]), Number(match[2]), Number(match[3]), Number(match[4])];
+ }
+ return false;
+};
+
+var fromArray = function fromArray(array) {
+ return [Math.min(array[0], 255), Math.min(array[1], 255), Math.min(array[2], 255), array.length > 3 ? array[3] : null];
+};
+
+var namedColor = function namedColor(name) {
+ var color = NAMED_COLORS[name.toLowerCase()];
+ return color ? color : false;
+};
+
+var Color = function () {
+ function Color(value) {
+ _classCallCheck(this, Color);
+
+ var _ref = Array.isArray(value) ? fromArray(value) : hex3(value) || rgb(value) || rgba(value) || namedColor(value) || hex6(value) || [0, 0, 0, null],
+ _ref2 = _slicedToArray(_ref, 4),
+ r = _ref2[0],
+ g = _ref2[1],
+ b = _ref2[2],
+ a = _ref2[3];
+
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ this.a = a;
+ }
+
+ _createClass(Color, [{
+ key: 'isTransparent',
+ value: function isTransparent() {
+ return this.a === 0;
+ }
+ }, {
+ key: 'toString',
+ value: function toString() {
+ return this.a !== null && this.a !== 1 ? 'rgba(' + this.r + ',' + this.g + ',' + this.b + ',' + this.a + ')' : 'rgb(' + this.r + ',' + this.g + ',' + this.b + ')';
+ }
+ }]);
+
+ return Color;
+}();
+
+exports.default = Color;
+
+
+var NAMED_COLORS = {
+ transparent: [0, 0, 0, 0],
+ aliceblue: [240, 248, 255, null],
+ antiquewhite: [250, 235, 215, null],
+ aqua: [0, 255, 255, null],
+ aquamarine: [127, 255, 212, null],
+ azure: [240, 255, 255, null],
+ beige: [245, 245, 220, null],
+ bisque: [255, 228, 196, null],
+ black: [0, 0, 0, null],
+ blanchedalmond: [255, 235, 205, null],
+ blue: [0, 0, 255, null],
+ blueviolet: [138, 43, 226, null],
+ brown: [165, 42, 42, null],
+ burlywood: [222, 184, 135, null],
+ cadetblue: [95, 158, 160, null],
+ chartreuse: [127, 255, 0, null],
+ chocolate: [210, 105, 30, null],
+ coral: [255, 127, 80, null],
+ cornflowerblue: [100, 149, 237, null],
+ cornsilk: [255, 248, 220, null],
+ crimson: [220, 20, 60, null],
+ cyan: [0, 255, 255, null],
+ darkblue: [0, 0, 139, null],
+ darkcyan: [0, 139, 139, null],
+ darkgoldenrod: [184, 134, 11, null],
+ darkgray: [169, 169, 169, null],
+ darkgreen: [0, 100, 0, null],
+ darkgrey: [169, 169, 169, null],
+ darkkhaki: [189, 183, 107, null],
+ darkmagenta: [139, 0, 139, null],
+ darkolivegreen: [85, 107, 47, null],
+ darkorange: [255, 140, 0, null],
+ darkorchid: [153, 50, 204, null],
+ darkred: [139, 0, 0, null],
+ darksalmon: [233, 150, 122, null],
+ darkseagreen: [143, 188, 143, null],
+ darkslateblue: [72, 61, 139, null],
+ darkslategray: [47, 79, 79, null],
+ darkslategrey: [47, 79, 79, null],
+ darkturquoise: [0, 206, 209, null],
+ darkviolet: [148, 0, 211, null],
+ deeppink: [255, 20, 147, null],
+ deepskyblue: [0, 191, 255, null],
+ dimgray: [105, 105, 105, null],
+ dimgrey: [105, 105, 105, null],
+ dodgerblue: [30, 144, 255, null],
+ firebrick: [178, 34, 34, null],
+ floralwhite: [255, 250, 240, null],
+ forestgreen: [34, 139, 34, null],
+ fuchsia: [255, 0, 255, null],
+ gainsboro: [220, 220, 220, null],
+ ghostwhite: [248, 248, 255, null],
+ gold: [255, 215, 0, null],
+ goldenrod: [218, 165, 32, null],
+ gray: [128, 128, 128, null],
+ green: [0, 128, 0, null],
+ greenyellow: [173, 255, 47, null],
+ grey: [128, 128, 128, null],
+ honeydew: [240, 255, 240, null],
+ hotpink: [255, 105, 180, null],
+ indianred: [205, 92, 92, null],
+ indigo: [75, 0, 130, null],
+ ivory: [255, 255, 240, null],
+ khaki: [240, 230, 140, null],
+ lavender: [230, 230, 250, null],
+ lavenderblush: [255, 240, 245, null],
+ lawngreen: [124, 252, 0, null],
+ lemonchiffon: [255, 250, 205, null],
+ lightblue: [173, 216, 230, null],
+ lightcoral: [240, 128, 128, null],
+ lightcyan: [224, 255, 255, null],
+ lightgoldenrodyellow: [250, 250, 210, null],
+ lightgray: [211, 211, 211, null],
+ lightgreen: [144, 238, 144, null],
+ lightgrey: [211, 211, 211, null],
+ lightpink: [255, 182, 193, null],
+ lightsalmon: [255, 160, 122, null],
+ lightseagreen: [32, 178, 170, null],
+ lightskyblue: [135, 206, 250, null],
+ lightslategray: [119, 136, 153, null],
+ lightslategrey: [119, 136, 153, null],
+ lightsteelblue: [176, 196, 222, null],
+ lightyellow: [255, 255, 224, null],
+ lime: [0, 255, 0, null],
+ limegreen: [50, 205, 50, null],
+ linen: [250, 240, 230, null],
+ magenta: [255, 0, 255, null],
+ maroon: [128, 0, 0, null],
+ mediumaquamarine: [102, 205, 170, null],
+ mediumblue: [0, 0, 205, null],
+ mediumorchid: [186, 85, 211, null],
+ mediumpurple: [147, 112, 219, null],
+ mediumseagreen: [60, 179, 113, null],
+ mediumslateblue: [123, 104, 238, null],
+ mediumspringgreen: [0, 250, 154, null],
+ mediumturquoise: [72, 209, 204, null],
+ mediumvioletred: [199, 21, 133, null],
+ midnightblue: [25, 25, 112, null],
+ mintcream: [245, 255, 250, null],
+ mistyrose: [255, 228, 225, null],
+ moccasin: [255, 228, 181, null],
+ navajowhite: [255, 222, 173, null],
+ navy: [0, 0, 128, null],
+ oldlace: [253, 245, 230, null],
+ olive: [128, 128, 0, null],
+ olivedrab: [107, 142, 35, null],
+ orange: [255, 165, 0, null],
+ orangered: [255, 69, 0, null],
+ orchid: [218, 112, 214, null],
+ palegoldenrod: [238, 232, 170, null],
+ palegreen: [152, 251, 152, null],
+ paleturquoise: [175, 238, 238, null],
+ palevioletred: [219, 112, 147, null],
+ papayawhip: [255, 239, 213, null],
+ peachpuff: [255, 218, 185, null],
+ peru: [205, 133, 63, null],
+ pink: [255, 192, 203, null],
+ plum: [221, 160, 221, null],
+ powderblue: [176, 224, 230, null],
+ purple: [128, 0, 128, null],
+ rebeccapurple: [102, 51, 153, null],
+ red: [255, 0, 0, null],
+ rosybrown: [188, 143, 143, null],
+ royalblue: [65, 105, 225, null],
+ saddlebrown: [139, 69, 19, null],
+ salmon: [250, 128, 114, null],
+ sandybrown: [244, 164, 96, null],
+ seagreen: [46, 139, 87, null],
+ seashell: [255, 245, 238, null],
+ sienna: [160, 82, 45, null],
+ silver: [192, 192, 192, null],
+ skyblue: [135, 206, 235, null],
+ slateblue: [106, 90, 205, null],
+ slategray: [112, 128, 144, null],
+ slategrey: [112, 128, 144, null],
+ snow: [255, 250, 250, null],
+ springgreen: [0, 255, 127, null],
+ steelblue: [70, 130, 180, null],
+ tan: [210, 180, 140, null],
+ teal: [0, 128, 128, null],
+ thistle: [216, 191, 216, null],
+ tomato: [255, 99, 71, null],
+ turquoise: [64, 224, 208, null],
+ violet: [238, 130, 238, null],
+ wheat: [245, 222, 179, null],
+ white: [255, 255, 255, null],
+ whitesmoke: [245, 245, 245, null],
+ yellow: [255, 255, 0, null],
+ yellowgreen: [154, 205, 50, null]
+};
+
+var TRANSPARENT = exports.TRANSPARENT = new Color([0, 0, 0, 0]);
+});
+
+unwrapExports(Color_1);
+var Color_2 = Color_1.TRANSPARENT;
+
+var textDecoration = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseTextDecoration = exports.TEXT_DECORATION_LINE = exports.TEXT_DECORATION = exports.TEXT_DECORATION_STYLE = undefined;
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var TEXT_DECORATION_STYLE = exports.TEXT_DECORATION_STYLE = {
+ SOLID: 0,
+ DOUBLE: 1,
+ DOTTED: 2,
+ DASHED: 3,
+ WAVY: 4
+};
+
+var TEXT_DECORATION = exports.TEXT_DECORATION = {
+ NONE: null
+};
+
+var TEXT_DECORATION_LINE = exports.TEXT_DECORATION_LINE = {
+ UNDERLINE: 1,
+ OVERLINE: 2,
+ LINE_THROUGH: 3,
+ BLINK: 4
+};
+
+var parseLine = function parseLine(line) {
+ switch (line) {
+ case 'underline':
+ return TEXT_DECORATION_LINE.UNDERLINE;
+ case 'overline':
+ return TEXT_DECORATION_LINE.OVERLINE;
+ case 'line-through':
+ return TEXT_DECORATION_LINE.LINE_THROUGH;
+ }
+ return TEXT_DECORATION_LINE.BLINK;
+};
+
+var parseTextDecorationLine = function parseTextDecorationLine(line) {
+ if (line === 'none') {
+ return null;
+ }
+
+ return line.split(' ').map(parseLine);
+};
+
+var parseTextDecorationStyle = function parseTextDecorationStyle(style) {
+ switch (style) {
+ case 'double':
+ return TEXT_DECORATION_STYLE.DOUBLE;
+ case 'dotted':
+ return TEXT_DECORATION_STYLE.DOTTED;
+ case 'dashed':
+ return TEXT_DECORATION_STYLE.DASHED;
+ case 'wavy':
+ return TEXT_DECORATION_STYLE.WAVY;
+ }
+ return TEXT_DECORATION_STYLE.SOLID;
+};
+
+var parseTextDecoration = exports.parseTextDecoration = function parseTextDecoration(style) {
+ var textDecorationLine = parseTextDecorationLine(style.textDecorationLine ? style.textDecorationLine : style.textDecoration);
+ if (textDecorationLine === null) {
+ return TEXT_DECORATION.NONE;
+ }
+
+ var textDecorationColor = style.textDecorationColor ? new _Color2.default(style.textDecorationColor) : null;
+ var textDecorationStyle = parseTextDecorationStyle(style.textDecorationStyle);
+
+ return {
+ textDecorationLine: textDecorationLine,
+ textDecorationColor: textDecorationColor,
+ textDecorationStyle: textDecorationStyle
+ };
+};
+});
+
+unwrapExports(textDecoration);
+var textDecoration_1 = textDecoration.parseTextDecoration;
+var textDecoration_2 = textDecoration.TEXT_DECORATION_LINE;
+var textDecoration_3 = textDecoration.TEXT_DECORATION;
+var textDecoration_4 = textDecoration.TEXT_DECORATION_STYLE;
+
+var CanvasRenderer_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var addColorStops = function addColorStops(gradient, canvasGradient) {
+ var maxStop = Math.max.apply(null, gradient.colorStops.map(function (colorStop) {
+ return colorStop.stop;
+ }));
+ var f = 1 / Math.max(1, maxStop);
+ gradient.colorStops.forEach(function (colorStop) {
+ canvasGradient.addColorStop(f * colorStop.stop, colorStop.color.toString());
+ });
+};
+
+var CanvasRenderer = function () {
+ function CanvasRenderer(canvas) {
+ _classCallCheck(this, CanvasRenderer);
+
+ this.canvas = canvas ? canvas : document.createElement('canvas');
+ }
+
+ _createClass(CanvasRenderer, [{
+ key: 'render',
+ value: function render(options) {
+ this.ctx = this.canvas.getContext('2d');
+ this.options = options;
+ this.canvas.width = Math.floor(options.width * options.scale);
+ this.canvas.height = Math.floor(options.height * options.scale);
+ this.canvas.style.width = options.width + 'px';
+ this.canvas.style.height = options.height + 'px';
+
+ this.ctx.scale(this.options.scale, this.options.scale);
+ this.ctx.translate(-options.x, -options.y);
+ this.ctx.textBaseline = 'bottom';
+ options.logger.log('Canvas renderer initialized (' + options.width + 'x' + options.height + ' at ' + options.x + ',' + options.y + ') with scale ' + this.options.scale);
+ }
+ }, {
+ key: 'clip',
+ value: function clip(clipPaths, callback) {
+ var _this = this;
+
+ if (clipPaths.length) {
+ this.ctx.save();
+ clipPaths.forEach(function (path) {
+ _this.path(path);
+ _this.ctx.clip();
+ });
+ }
+
+ callback();
+
+ if (clipPaths.length) {
+ this.ctx.restore();
+ }
+ }
+ }, {
+ key: 'drawImage',
+ value: function drawImage(image, source, destination) {
+ this.ctx.drawImage(image, source.left, source.top, source.width, source.height, destination.left, destination.top, destination.width, destination.height);
+ }
+ }, {
+ key: 'drawShape',
+ value: function drawShape(path, color) {
+ this.path(path);
+ this.ctx.fillStyle = color.toString();
+ this.ctx.fill();
+ }
+ }, {
+ key: 'fill',
+ value: function fill(color) {
+ this.ctx.fillStyle = color.toString();
+ this.ctx.fill();
+ }
+ }, {
+ key: 'getTarget',
+ value: function getTarget() {
+ this.canvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);
+ return Promise.resolve(this.canvas);
+ }
+ }, {
+ key: 'path',
+ value: function path(_path) {
+ var _this2 = this;
+
+ this.ctx.beginPath();
+ if (Array.isArray(_path)) {
+ _path.forEach(function (point, index) {
+ var start = point.type === Path.PATH.VECTOR ? point : point.start;
+ if (index === 0) {
+ _this2.ctx.moveTo(start.x, start.y);
+ } else {
+ _this2.ctx.lineTo(start.x, start.y);
+ }
+
+ if (point.type === Path.PATH.BEZIER_CURVE) {
+ _this2.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);
+ }
+ });
+ } else {
+ this.ctx.arc(_path.x + _path.radius, _path.y + _path.radius, _path.radius, 0, Math.PI * 2, true);
+ }
+
+ this.ctx.closePath();
+ }
+ }, {
+ key: 'rectangle',
+ value: function rectangle(x, y, width, height, color) {
+ this.ctx.fillStyle = color.toString();
+ this.ctx.fillRect(x, y, width, height);
+ }
+ }, {
+ key: 'renderLinearGradient',
+ value: function renderLinearGradient(bounds, gradient) {
+ var linearGradient = this.ctx.createLinearGradient(bounds.left + gradient.direction.x1, bounds.top + gradient.direction.y1, bounds.left + gradient.direction.x0, bounds.top + gradient.direction.y0);
+
+ addColorStops(gradient, linearGradient);
+ this.ctx.fillStyle = linearGradient;
+ this.ctx.fillRect(bounds.left, bounds.top, bounds.width, bounds.height);
+ }
+ }, {
+ key: 'renderRadialGradient',
+ value: function renderRadialGradient(bounds, gradient) {
+ var _this3 = this;
+
+ var x = bounds.left + gradient.center.x;
+ var y = bounds.top + gradient.center.y;
+
+ var radialGradient = this.ctx.createRadialGradient(x, y, 0, x, y, gradient.radius.x);
+ if (!radialGradient) {
+ return;
+ }
+
+ addColorStops(gradient, radialGradient);
+ this.ctx.fillStyle = radialGradient;
+
+ if (gradient.radius.x !== gradient.radius.y) {
+ // transforms for elliptical radial gradient
+ var midX = bounds.left + 0.5 * bounds.width;
+ var midY = bounds.top + 0.5 * bounds.height;
+ var f = gradient.radius.y / gradient.radius.x;
+ var invF = 1 / f;
+
+ this.transform(midX, midY, [1, 0, 0, f, 0, 0], function () {
+ return _this3.ctx.fillRect(bounds.left, invF * (bounds.top - midY) + midY, bounds.width, bounds.height * invF);
+ });
+ } else {
+ this.ctx.fillRect(bounds.left, bounds.top, bounds.width, bounds.height);
+ }
+ }
+ }, {
+ key: 'renderRepeat',
+ value: function renderRepeat(path, image, imageSize, offsetX, offsetY) {
+ this.path(path);
+ this.ctx.fillStyle = this.ctx.createPattern(this.resizeImage(image, imageSize), 'repeat');
+ this.ctx.translate(offsetX, offsetY);
+ this.ctx.fill();
+ this.ctx.translate(-offsetX, -offsetY);
+ }
+ }, {
+ key: 'renderTextNode',
+ value: function renderTextNode(textBounds, color, font, textDecoration$$1, textShadows) {
+ var _this4 = this;
+
+ this.ctx.font = [font.fontStyle, font.fontVariant, font.fontWeight, font.fontSize, font.fontFamily].join(' ');
+
+ textBounds.forEach(function (text) {
+ _this4.ctx.fillStyle = color.toString();
+ if (textShadows && text.text.trim().length) {
+ textShadows.slice(0).reverse().forEach(function (textShadow) {
+ _this4.ctx.shadowColor = textShadow.color.toString();
+ _this4.ctx.shadowOffsetX = textShadow.offsetX * _this4.options.scale;
+ _this4.ctx.shadowOffsetY = textShadow.offsetY * _this4.options.scale;
+ _this4.ctx.shadowBlur = textShadow.blur;
+
+ _this4.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height);
+ });
+ } else {
+ _this4.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height);
+ }
+
+ if (textDecoration$$1 !== null) {
+ var textDecorationColor = textDecoration$$1.textDecorationColor || color;
+ textDecoration$$1.textDecorationLine.forEach(function (textDecorationLine) {
+ switch (textDecorationLine) {
+ case textDecoration.TEXT_DECORATION_LINE.UNDERLINE:
+ // Draws a line at the baseline of the font
+ // TODO As some browsers display the line as more than 1px if the font-size is big,
+ // need to take that into account both in position and size
+ var _options$fontMetrics$ = _this4.options.fontMetrics.getMetrics(font),
+ baseline = _options$fontMetrics$.baseline;
+
+ _this4.rectangle(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1, textDecorationColor);
+ break;
+ case textDecoration.TEXT_DECORATION_LINE.OVERLINE:
+ _this4.rectangle(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1, textDecorationColor);
+ break;
+ case textDecoration.TEXT_DECORATION_LINE.LINE_THROUGH:
+ // TODO try and find exact position for line-through
+ var _options$fontMetrics$2 = _this4.options.fontMetrics.getMetrics(font),
+ middle = _options$fontMetrics$2.middle;
+
+ _this4.rectangle(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1, textDecorationColor);
+ break;
+ }
+ });
+ }
+ });
+ }
+ }, {
+ key: 'resizeImage',
+ value: function resizeImage(image, size) {
+ if (image.width === size.width && image.height === size.height) {
+ return image;
+ }
+
+ var canvas = this.canvas.ownerDocument.createElement('canvas');
+ canvas.width = size.width;
+ canvas.height = size.height;
+ var ctx = canvas.getContext('2d');
+ ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, size.width, size.height);
+ return canvas;
+ }
+ }, {
+ key: 'setOpacity',
+ value: function setOpacity(opacity) {
+ this.ctx.globalAlpha = opacity;
+ }
+ }, {
+ key: 'transform',
+ value: function transform(offsetX, offsetY, matrix, callback) {
+ this.ctx.save();
+ this.ctx.translate(offsetX, offsetY);
+ this.ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
+ this.ctx.translate(-offsetX, -offsetY);
+
+ callback();
+
+ this.ctx.restore();
+ }
+ }]);
+
+ return CanvasRenderer;
+}();
+
+exports.default = CanvasRenderer;
+});
+
+unwrapExports(CanvasRenderer_1);
+
+var Logger_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Logger = function () {
+ function Logger(enabled, id, start) {
+ _classCallCheck(this, Logger);
+
+ this.enabled = typeof window !== 'undefined' && enabled;
+ this.start = start ? start : Date.now();
+ this.id = id;
+ }
+
+ _createClass(Logger, [{
+ key: 'child',
+ value: function child(id) {
+ return new Logger(this.enabled, id, this.start);
+ }
+
+ // eslint-disable-next-line flowtype/no-weak-types
+
+ }, {
+ key: 'log',
+ value: function log() {
+ if (this.enabled && window.console && window.console.log) {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ Function.prototype.bind.call(window.console.log, window.console).apply(window.console, [Date.now() - this.start + 'ms', this.id ? 'html2canvas (' + this.id + '):' : 'html2canvas:'].concat([].slice.call(args, 0)));
+ }
+ }
+
+ // eslint-disable-next-line flowtype/no-weak-types
+
+ }, {
+ key: 'error',
+ value: function error() {
+ if (this.enabled && window.console && window.console.error) {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ Function.prototype.bind.call(window.console.error, window.console).apply(window.console, [Date.now() - this.start + 'ms', this.id ? 'html2canvas (' + this.id + '):' : 'html2canvas:'].concat([].slice.call(args, 0)));
+ }
+ }
+ }]);
+
+ return Logger;
+}();
+
+exports.default = Logger;
+});
+
+unwrapExports(Logger_1);
+
+var Util = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var contains = exports.contains = function contains(bit, value) {
+ return (bit & value) !== 0;
+};
+
+var distance = exports.distance = function distance(a, b) {
+ return Math.sqrt(a * a + b * b);
+};
+
+var copyCSSStyles = exports.copyCSSStyles = function copyCSSStyles(style, target) {
+ // Edge does not provide value for cssText
+ for (var i = style.length - 1; i >= 0; i--) {
+ var property = style.item(i);
+ // Safari shows pseudoelements if content is set
+ if (property !== 'content') {
+ target.style.setProperty(property, style.getPropertyValue(property));
+ }
+ }
+ return target;
+};
+
+var SMALL_IMAGE = exports.SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
+});
+
+unwrapExports(Util);
+var Util_1 = Util.contains;
+var Util_2 = Util.distance;
+var Util_3 = Util.copyCSSStyles;
+var Util_4 = Util.SMALL_IMAGE;
+
+var Length_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.calculateLengthFromValueWithUnit = exports.LENGTH_TYPE = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+var _NodeContainer2 = _interopRequireDefault(NodeContainer_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var LENGTH_TYPE = exports.LENGTH_TYPE = {
+ PX: 0,
+ PERCENTAGE: 1
+};
+
+var Length = function () {
+ function Length(value) {
+ _classCallCheck(this, Length);
+
+ this.type = value.substr(value.length - 1) === '%' ? LENGTH_TYPE.PERCENTAGE : LENGTH_TYPE.PX;
+ var parsedValue = parseFloat(value);
+ this.value = isNaN(parsedValue) ? 0 : parsedValue;
+ }
+
+ _createClass(Length, [{
+ key: 'isPercentage',
+ value: function isPercentage() {
+ return this.type === LENGTH_TYPE.PERCENTAGE;
+ }
+ }, {
+ key: 'getAbsoluteValue',
+ value: function getAbsoluteValue(parentLength) {
+ return this.isPercentage() ? parentLength * (this.value / 100) : this.value;
+ }
+ }], [{
+ key: 'create',
+ value: function create(v) {
+ return new Length(v);
+ }
+ }]);
+
+ return Length;
+}();
+
+exports.default = Length;
+
+
+var getRootFontSize = function getRootFontSize(container) {
+ var parent = container.parent;
+ return parent ? getRootFontSize(parent) : parseFloat(container.style.font.fontSize);
+};
+
+var calculateLengthFromValueWithUnit = exports.calculateLengthFromValueWithUnit = function calculateLengthFromValueWithUnit(container, value, unit) {
+ switch (unit) {
+ case 'px':
+ case '%':
+ return new Length(value + unit);
+ case 'em':
+ case 'rem':
+ var length = new Length(value);
+ length.value *= unit === 'em' ? parseFloat(container.style.font.fontSize) : getRootFontSize(container);
+ return length;
+ default:
+ // TODO: handle correctly if unknown unit is used
+ return new Length('0');
+ }
+};
+});
+
+unwrapExports(Length_1);
+var Length_2 = Length_1.calculateLengthFromValueWithUnit;
+var Length_3 = Length_1.LENGTH_TYPE;
+
+var Size_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Size = function Size(width, height) {
+ _classCallCheck(this, Size);
+
+ this.width = width;
+ this.height = height;
+};
+
+exports.default = Size;
+});
+
+unwrapExports(Size_1);
+
+var Vector_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Vector = function Vector(x, y) {
+ _classCallCheck(this, Vector);
+
+ this.type = Path.PATH.VECTOR;
+ this.x = x;
+ this.y = y;
+
+};
+
+exports.default = Vector;
+});
+
+unwrapExports(Vector_1);
+
+var BezierCurve_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+
+
+var _Vector2 = _interopRequireDefault(Vector_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var lerp = function lerp(a, b, t) {
+ return new _Vector2.default(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);
+};
+
+var BezierCurve = function () {
+ function BezierCurve(start, startControl, endControl, end) {
+ _classCallCheck(this, BezierCurve);
+
+ this.type = Path.PATH.BEZIER_CURVE;
+ this.start = start;
+ this.startControl = startControl;
+ this.endControl = endControl;
+ this.end = end;
+ }
+
+ _createClass(BezierCurve, [{
+ key: 'subdivide',
+ value: function subdivide(t, firstHalf) {
+ var ab = lerp(this.start, this.startControl, t);
+ var bc = lerp(this.startControl, this.endControl, t);
+ var cd = lerp(this.endControl, this.end, t);
+ var abbc = lerp(ab, bc, t);
+ var bccd = lerp(bc, cd, t);
+ var dest = lerp(abbc, bccd, t);
+ return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);
+ }
+ }, {
+ key: 'reverse',
+ value: function reverse() {
+ return new BezierCurve(this.end, this.endControl, this.startControl, this.start);
+ }
+ }]);
+
+ return BezierCurve;
+}();
+
+exports.default = BezierCurve;
+});
+
+unwrapExports(BezierCurve_1);
+
+var Bounds_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseBoundCurves = exports.calculatePaddingBoxPath = exports.calculateBorderBoxPath = exports.parsePathForBorder = exports.parseDocumentSize = exports.calculateContentBox = exports.calculatePaddingBox = exports.parseBounds = exports.Bounds = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+var _Vector2 = _interopRequireDefault(Vector_1);
+
+
+
+var _BezierCurve2 = _interopRequireDefault(BezierCurve_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var TOP = 0;
+var RIGHT = 1;
+var BOTTOM = 2;
+var LEFT = 3;
+
+var H = 0;
+var V = 1;
+
+var Bounds = exports.Bounds = function () {
+ function Bounds(x, y, w, h) {
+ _classCallCheck(this, Bounds);
+
+ this.left = x;
+ this.top = y;
+ this.width = w;
+ this.height = h;
+ }
+
+ _createClass(Bounds, null, [{
+ key: 'fromClientRect',
+ value: function fromClientRect(clientRect, scrollX, scrollY) {
+ return new Bounds(clientRect.left + scrollX, clientRect.top + scrollY, clientRect.width, clientRect.height);
+ }
+ }]);
+
+ return Bounds;
+}();
+
+var parseBounds = exports.parseBounds = function parseBounds(node, scrollX, scrollY) {
+ return Bounds.fromClientRect(node.getBoundingClientRect(), scrollX, scrollY);
+};
+
+var calculatePaddingBox = exports.calculatePaddingBox = function calculatePaddingBox(bounds, borders) {
+ return new Bounds(bounds.left + borders[LEFT].borderWidth, bounds.top + borders[TOP].borderWidth, bounds.width - (borders[RIGHT].borderWidth + borders[LEFT].borderWidth), bounds.height - (borders[TOP].borderWidth + borders[BOTTOM].borderWidth));
+};
+
+var calculateContentBox = exports.calculateContentBox = function calculateContentBox(bounds, padding, borders) {
+ // TODO support percentage paddings
+ var paddingTop = padding[TOP].value;
+ var paddingRight = padding[RIGHT].value;
+ var paddingBottom = padding[BOTTOM].value;
+ var paddingLeft = padding[LEFT].value;
+
+ return new Bounds(bounds.left + paddingLeft + borders[LEFT].borderWidth, bounds.top + paddingTop + borders[TOP].borderWidth, bounds.width - (borders[RIGHT].borderWidth + borders[LEFT].borderWidth + paddingLeft + paddingRight), bounds.height - (borders[TOP].borderWidth + borders[BOTTOM].borderWidth + paddingTop + paddingBottom));
+};
+
+var parseDocumentSize = exports.parseDocumentSize = function parseDocumentSize(document) {
+ var body = document.body;
+ var documentElement = document.documentElement;
+
+ if (!body || !documentElement) {
+ throw new Error('');
+ }
+ var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));
+
+ var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));
+
+ return new Bounds(0, 0, width, height);
+};
+
+var parsePathForBorder = exports.parsePathForBorder = function parsePathForBorder(curves, borderSide) {
+ switch (borderSide) {
+ case TOP:
+ return createPathFromCurves(curves.topLeftOuter, curves.topLeftInner, curves.topRightOuter, curves.topRightInner);
+ case RIGHT:
+ return createPathFromCurves(curves.topRightOuter, curves.topRightInner, curves.bottomRightOuter, curves.bottomRightInner);
+ case BOTTOM:
+ return createPathFromCurves(curves.bottomRightOuter, curves.bottomRightInner, curves.bottomLeftOuter, curves.bottomLeftInner);
+ case LEFT:
+ default:
+ return createPathFromCurves(curves.bottomLeftOuter, curves.bottomLeftInner, curves.topLeftOuter, curves.topLeftInner);
+ }
+};
+
+var createPathFromCurves = function createPathFromCurves(outer1, inner1, outer2, inner2) {
+ var path = [];
+ if (outer1 instanceof _BezierCurve2.default) {
+ path.push(outer1.subdivide(0.5, false));
+ } else {
+ path.push(outer1);
+ }
+
+ if (outer2 instanceof _BezierCurve2.default) {
+ path.push(outer2.subdivide(0.5, true));
+ } else {
+ path.push(outer2);
+ }
+
+ if (inner2 instanceof _BezierCurve2.default) {
+ path.push(inner2.subdivide(0.5, true).reverse());
+ } else {
+ path.push(inner2);
+ }
+
+ if (inner1 instanceof _BezierCurve2.default) {
+ path.push(inner1.subdivide(0.5, false).reverse());
+ } else {
+ path.push(inner1);
+ }
+
+ return path;
+};
+
+var calculateBorderBoxPath = exports.calculateBorderBoxPath = function calculateBorderBoxPath(curves) {
+ return [curves.topLeftOuter, curves.topRightOuter, curves.bottomRightOuter, curves.bottomLeftOuter];
+};
+
+var calculatePaddingBoxPath = exports.calculatePaddingBoxPath = function calculatePaddingBoxPath(curves) {
+ return [curves.topLeftInner, curves.topRightInner, curves.bottomRightInner, curves.bottomLeftInner];
+};
+
+var parseBoundCurves = exports.parseBoundCurves = function parseBoundCurves(bounds, borders, borderRadius) {
+ var tlh = borderRadius[CORNER.TOP_LEFT][H].getAbsoluteValue(bounds.width);
+ var tlv = borderRadius[CORNER.TOP_LEFT][V].getAbsoluteValue(bounds.height);
+ var trh = borderRadius[CORNER.TOP_RIGHT][H].getAbsoluteValue(bounds.width);
+ var trv = borderRadius[CORNER.TOP_RIGHT][V].getAbsoluteValue(bounds.height);
+ var brh = borderRadius[CORNER.BOTTOM_RIGHT][H].getAbsoluteValue(bounds.width);
+ var brv = borderRadius[CORNER.BOTTOM_RIGHT][V].getAbsoluteValue(bounds.height);
+ var blh = borderRadius[CORNER.BOTTOM_LEFT][H].getAbsoluteValue(bounds.width);
+ var blv = borderRadius[CORNER.BOTTOM_LEFT][V].getAbsoluteValue(bounds.height);
+
+ var factors = [];
+ factors.push((tlh + trh) / bounds.width);
+ factors.push((blh + brh) / bounds.width);
+ factors.push((tlv + blv) / bounds.height);
+ factors.push((trv + brv) / bounds.height);
+ var maxFactor = Math.max.apply(Math, factors);
+
+ if (maxFactor > 1) {
+ tlh /= maxFactor;
+ tlv /= maxFactor;
+ trh /= maxFactor;
+ trv /= maxFactor;
+ brh /= maxFactor;
+ brv /= maxFactor;
+ blh /= maxFactor;
+ blv /= maxFactor;
+ }
+
+ var topWidth = bounds.width - trh;
+ var rightHeight = bounds.height - brv;
+ var bottomWidth = bounds.width - brh;
+ var leftHeight = bounds.height - blv;
+
+ return {
+ topLeftOuter: tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT) : new _Vector2.default(bounds.left, bounds.top),
+ topLeftInner: tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borders[LEFT].borderWidth, bounds.top + borders[TOP].borderWidth, Math.max(0, tlh - borders[LEFT].borderWidth), Math.max(0, tlv - borders[TOP].borderWidth), CORNER.TOP_LEFT) : new _Vector2.default(bounds.left + borders[LEFT].borderWidth, bounds.top + borders[TOP].borderWidth),
+ topRightOuter: trh > 0 || trv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT) : new _Vector2.default(bounds.left + bounds.width, bounds.top),
+ topRightInner: trh > 0 || trv > 0 ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borders[LEFT].borderWidth), bounds.top + borders[TOP].borderWidth, topWidth > bounds.width + borders[LEFT].borderWidth ? 0 : trh - borders[LEFT].borderWidth, trv - borders[TOP].borderWidth, CORNER.TOP_RIGHT) : new _Vector2.default(bounds.left + bounds.width - borders[RIGHT].borderWidth, bounds.top + borders[TOP].borderWidth),
+ bottomRightOuter: brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT) : new _Vector2.default(bounds.left + bounds.width, bounds.top + bounds.height),
+ bottomRightInner: brh > 0 || brv > 0 ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borders[LEFT].borderWidth), bounds.top + Math.min(rightHeight, bounds.height + borders[TOP].borderWidth), Math.max(0, brh - borders[RIGHT].borderWidth), brv - borders[BOTTOM].borderWidth, CORNER.BOTTOM_RIGHT) : new _Vector2.default(bounds.left + bounds.width - borders[RIGHT].borderWidth, bounds.top + bounds.height - borders[BOTTOM].borderWidth),
+ bottomLeftOuter: blh > 0 || blv > 0 ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT) : new _Vector2.default(bounds.left, bounds.top + bounds.height),
+ bottomLeftInner: blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borders[LEFT].borderWidth, bounds.top + leftHeight, Math.max(0, blh - borders[LEFT].borderWidth), blv - borders[BOTTOM].borderWidth, CORNER.BOTTOM_LEFT) : new _Vector2.default(bounds.left + borders[LEFT].borderWidth, bounds.top + bounds.height - borders[BOTTOM].borderWidth)
+ };
+};
+
+var CORNER = {
+ TOP_LEFT: 0,
+ TOP_RIGHT: 1,
+ BOTTOM_RIGHT: 2,
+ BOTTOM_LEFT: 3
+};
+
+var getCurvePoints = function getCurvePoints(x, y, r1, r2, position) {
+ var kappa = 4 * ((Math.sqrt(2) - 1) / 3);
+ var ox = r1 * kappa; // control point offset horizontal
+ var oy = r2 * kappa; // control point offset vertical
+ var xm = x + r1; // x-middle
+ var ym = y + r2; // y-middle
+
+ switch (position) {
+ case CORNER.TOP_LEFT:
+ return new _BezierCurve2.default(new _Vector2.default(x, ym), new _Vector2.default(x, ym - oy), new _Vector2.default(xm - ox, y), new _Vector2.default(xm, y));
+ case CORNER.TOP_RIGHT:
+ return new _BezierCurve2.default(new _Vector2.default(x, y), new _Vector2.default(x + ox, y), new _Vector2.default(xm, ym - oy), new _Vector2.default(xm, ym));
+ case CORNER.BOTTOM_RIGHT:
+ return new _BezierCurve2.default(new _Vector2.default(xm, y), new _Vector2.default(xm, y + oy), new _Vector2.default(x + ox, ym), new _Vector2.default(x, ym));
+ case CORNER.BOTTOM_LEFT:
+ default:
+ return new _BezierCurve2.default(new _Vector2.default(xm, ym), new _Vector2.default(xm - ox, ym), new _Vector2.default(x, y + oy), new _Vector2.default(x, y));
+ }
+};
+});
+
+unwrapExports(Bounds_1);
+var Bounds_2 = Bounds_1.parseBoundCurves;
+var Bounds_3 = Bounds_1.calculatePaddingBoxPath;
+var Bounds_4 = Bounds_1.calculateBorderBoxPath;
+var Bounds_5 = Bounds_1.parsePathForBorder;
+var Bounds_6 = Bounds_1.parseDocumentSize;
+var Bounds_7 = Bounds_1.calculateContentBox;
+var Bounds_8 = Bounds_1.calculatePaddingBox;
+var Bounds_9 = Bounds_1.parseBounds;
+var Bounds_10 = Bounds_1.Bounds;
+
+var padding = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parsePadding = exports.PADDING_SIDES = undefined;
+
+
+
+var _Length2 = _interopRequireDefault(Length_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var PADDING_SIDES = exports.PADDING_SIDES = {
+ TOP: 0,
+ RIGHT: 1,
+ BOTTOM: 2,
+ LEFT: 3
+};
+
+var SIDES = ['top', 'right', 'bottom', 'left'];
+
+var parsePadding = exports.parsePadding = function parsePadding(style) {
+ return SIDES.map(function (side) {
+ return new _Length2.default(style.getPropertyValue('padding-' + side));
+ });
+};
+});
+
+unwrapExports(padding);
+var padding_1 = padding.parsePadding;
+var padding_2 = padding.PADDING_SIDES;
+
+var background = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseBackgroundImage = exports.parseBackground = exports.calculateBackgroundRepeatPath = exports.calculateBackgroundPosition = exports.calculateBackgroungPositioningArea = exports.calculateBackgroungPaintingArea = exports.calculateGradientBackgroundSize = exports.calculateBackgroundSize = exports.BACKGROUND_ORIGIN = exports.BACKGROUND_CLIP = exports.BACKGROUND_SIZE = exports.BACKGROUND_REPEAT = undefined;
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+
+
+var _Length2 = _interopRequireDefault(Length_1);
+
+
+
+var _Size2 = _interopRequireDefault(Size_1);
+
+
+
+var _Vector2 = _interopRequireDefault(Vector_1);
+
+
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var BACKGROUND_REPEAT = exports.BACKGROUND_REPEAT = {
+ REPEAT: 0,
+ NO_REPEAT: 1,
+ REPEAT_X: 2,
+ REPEAT_Y: 3
+};
+
+var BACKGROUND_SIZE = exports.BACKGROUND_SIZE = {
+ AUTO: 0,
+ CONTAIN: 1,
+ COVER: 2,
+ LENGTH: 3
+};
+
+var BACKGROUND_CLIP = exports.BACKGROUND_CLIP = {
+ BORDER_BOX: 0,
+ PADDING_BOX: 1,
+ CONTENT_BOX: 2
+};
+
+var BACKGROUND_ORIGIN = exports.BACKGROUND_ORIGIN = BACKGROUND_CLIP;
+
+var AUTO = 'auto';
+
+var BackgroundSize = function BackgroundSize(size) {
+ _classCallCheck(this, BackgroundSize);
+
+ switch (size) {
+ case 'contain':
+ this.size = BACKGROUND_SIZE.CONTAIN;
+ break;
+ case 'cover':
+ this.size = BACKGROUND_SIZE.COVER;
+ break;
+ case 'auto':
+ this.size = BACKGROUND_SIZE.AUTO;
+ break;
+ default:
+ this.value = new _Length2.default(size);
+ }
+};
+
+var calculateBackgroundSize = exports.calculateBackgroundSize = function calculateBackgroundSize(backgroundImage, image, bounds) {
+ var width = 0;
+ var height = 0;
+ var size = backgroundImage.size;
+ if (size[0].size === BACKGROUND_SIZE.CONTAIN || size[0].size === BACKGROUND_SIZE.COVER) {
+ var targetRatio = bounds.width / bounds.height;
+ var currentRatio = image.width / image.height;
+ return targetRatio < currentRatio !== (size[0].size === BACKGROUND_SIZE.COVER) ? new _Size2.default(bounds.width, bounds.width / currentRatio) : new _Size2.default(bounds.height * currentRatio, bounds.height);
+ }
+
+ if (size[0].value) {
+ width = size[0].value.getAbsoluteValue(bounds.width);
+ }
+
+ if (size[0].size === BACKGROUND_SIZE.AUTO && size[1].size === BACKGROUND_SIZE.AUTO) {
+ height = image.height;
+ } else if (size[1].size === BACKGROUND_SIZE.AUTO) {
+ height = width / image.width * image.height;
+ } else if (size[1].value) {
+ height = size[1].value.getAbsoluteValue(bounds.height);
+ }
+
+ if (size[0].size === BACKGROUND_SIZE.AUTO) {
+ width = height / image.height * image.width;
+ }
+
+ return new _Size2.default(width, height);
+};
+
+var calculateGradientBackgroundSize = exports.calculateGradientBackgroundSize = function calculateGradientBackgroundSize(backgroundImage, bounds) {
+ var size = backgroundImage.size;
+ var width = size[0].value ? size[0].value.getAbsoluteValue(bounds.width) : bounds.width;
+ var height = size[1].value ? size[1].value.getAbsoluteValue(bounds.height) : size[0].value ? width : bounds.height;
+
+ return new _Size2.default(width, height);
+};
+
+var AUTO_SIZE = new BackgroundSize(AUTO);
+
+var calculateBackgroungPaintingArea = exports.calculateBackgroungPaintingArea = function calculateBackgroungPaintingArea(curves, clip) {
+ switch (clip) {
+ case BACKGROUND_CLIP.BORDER_BOX:
+ return (0, Bounds_1.calculateBorderBoxPath)(curves);
+ case BACKGROUND_CLIP.PADDING_BOX:
+ default:
+ return (0, Bounds_1.calculatePaddingBoxPath)(curves);
+ }
+};
+
+var calculateBackgroungPositioningArea = exports.calculateBackgroungPositioningArea = function calculateBackgroungPositioningArea(backgroundOrigin, bounds, padding$$1, border) {
+ var paddingBox = (0, Bounds_1.calculatePaddingBox)(bounds, border);
+
+ switch (backgroundOrigin) {
+ case BACKGROUND_ORIGIN.BORDER_BOX:
+ return bounds;
+ case BACKGROUND_ORIGIN.CONTENT_BOX:
+ var paddingLeft = padding$$1[padding.PADDING_SIDES.LEFT].getAbsoluteValue(bounds.width);
+ var paddingRight = padding$$1[padding.PADDING_SIDES.RIGHT].getAbsoluteValue(bounds.width);
+ var paddingTop = padding$$1[padding.PADDING_SIDES.TOP].getAbsoluteValue(bounds.width);
+ var paddingBottom = padding$$1[padding.PADDING_SIDES.BOTTOM].getAbsoluteValue(bounds.width);
+ return new Bounds_1.Bounds(paddingBox.left + paddingLeft, paddingBox.top + paddingTop, paddingBox.width - paddingLeft - paddingRight, paddingBox.height - paddingTop - paddingBottom);
+ case BACKGROUND_ORIGIN.PADDING_BOX:
+ default:
+ return paddingBox;
+ }
+};
+
+var calculateBackgroundPosition = exports.calculateBackgroundPosition = function calculateBackgroundPosition(position, size, bounds) {
+ return new _Vector2.default(position[0].getAbsoluteValue(bounds.width - size.width), position[1].getAbsoluteValue(bounds.height - size.height));
+};
+
+var calculateBackgroundRepeatPath = exports.calculateBackgroundRepeatPath = function calculateBackgroundRepeatPath(background, position, size, backgroundPositioningArea, bounds) {
+ var repeat = background.repeat;
+ switch (repeat) {
+ case BACKGROUND_REPEAT.REPEAT_X:
+ return [new _Vector2.default(Math.round(bounds.left), Math.round(backgroundPositioningArea.top + position.y)), new _Vector2.default(Math.round(bounds.left + bounds.width), Math.round(backgroundPositioningArea.top + position.y)), new _Vector2.default(Math.round(bounds.left + bounds.width), Math.round(size.height + backgroundPositioningArea.top + position.y)), new _Vector2.default(Math.round(bounds.left), Math.round(size.height + backgroundPositioningArea.top + position.y))];
+ case BACKGROUND_REPEAT.REPEAT_Y:
+ return [new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x), Math.round(bounds.top)), new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x + size.width), Math.round(bounds.top)), new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x + size.width), Math.round(bounds.height + bounds.top)), new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x), Math.round(bounds.height + bounds.top))];
+ case BACKGROUND_REPEAT.NO_REPEAT:
+ return [new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x), Math.round(backgroundPositioningArea.top + position.y)), new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x + size.width), Math.round(backgroundPositioningArea.top + position.y)), new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x + size.width), Math.round(backgroundPositioningArea.top + position.y + size.height)), new _Vector2.default(Math.round(backgroundPositioningArea.left + position.x), Math.round(backgroundPositioningArea.top + position.y + size.height))];
+ default:
+ return [new _Vector2.default(Math.round(bounds.left), Math.round(bounds.top)), new _Vector2.default(Math.round(bounds.left + bounds.width), Math.round(bounds.top)), new _Vector2.default(Math.round(bounds.left + bounds.width), Math.round(bounds.height + bounds.top)), new _Vector2.default(Math.round(bounds.left), Math.round(bounds.height + bounds.top))];
+ }
+};
+
+var parseBackground = exports.parseBackground = function parseBackground(style, resourceLoader) {
+ return {
+ backgroundColor: new _Color2.default(style.backgroundColor),
+ backgroundImage: parseBackgroundImages(style, resourceLoader),
+ backgroundClip: parseBackgroundClip(style.backgroundClip),
+ backgroundOrigin: parseBackgroundOrigin(style.backgroundOrigin)
+ };
+};
+
+var parseBackgroundClip = function parseBackgroundClip(backgroundClip) {
+ switch (backgroundClip) {
+ case 'padding-box':
+ return BACKGROUND_CLIP.PADDING_BOX;
+ case 'content-box':
+ return BACKGROUND_CLIP.CONTENT_BOX;
+ }
+ return BACKGROUND_CLIP.BORDER_BOX;
+};
+
+var parseBackgroundOrigin = function parseBackgroundOrigin(backgroundOrigin) {
+ switch (backgroundOrigin) {
+ case 'padding-box':
+ return BACKGROUND_ORIGIN.PADDING_BOX;
+ case 'content-box':
+ return BACKGROUND_ORIGIN.CONTENT_BOX;
+ }
+ return BACKGROUND_ORIGIN.BORDER_BOX;
+};
+
+var parseBackgroundRepeat = function parseBackgroundRepeat(backgroundRepeat) {
+ switch (backgroundRepeat.trim()) {
+ case 'no-repeat':
+ return BACKGROUND_REPEAT.NO_REPEAT;
+ case 'repeat-x':
+ case 'repeat no-repeat':
+ return BACKGROUND_REPEAT.REPEAT_X;
+ case 'repeat-y':
+ case 'no-repeat repeat':
+ return BACKGROUND_REPEAT.REPEAT_Y;
+ case 'repeat':
+ return BACKGROUND_REPEAT.REPEAT;
+ }
+
+ return BACKGROUND_REPEAT.REPEAT;
+};
+
+var parseBackgroundImages = function parseBackgroundImages(style, resourceLoader) {
+ var sources = parseBackgroundImage(style.backgroundImage).map(function (backgroundImage) {
+ if (backgroundImage.method === 'url') {
+ var key = resourceLoader.loadImage(backgroundImage.args[0]);
+ backgroundImage.args = key ? [key] : [];
+ }
+ return backgroundImage;
+ });
+ var positions = style.backgroundPosition.split(',');
+ var repeats = style.backgroundRepeat.split(',');
+ var sizes = style.backgroundSize.split(',');
+
+ return sources.map(function (source, index) {
+ var size = (sizes[index] || AUTO).trim().split(' ').map(parseBackgroundSize);
+ var position = (positions[index] || AUTO).trim().split(' ').map(parseBackgoundPosition);
+
+ return {
+ source: source,
+ repeat: parseBackgroundRepeat(typeof repeats[index] === 'string' ? repeats[index] : repeats[0]),
+ size: size.length < 2 ? [size[0], AUTO_SIZE] : [size[0], size[1]],
+ position: position.length < 2 ? [position[0], position[0]] : [position[0], position[1]]
+ };
+ });
+};
+
+var parseBackgroundSize = function parseBackgroundSize(size) {
+ return size === 'auto' ? AUTO_SIZE : new BackgroundSize(size);
+};
+
+var parseBackgoundPosition = function parseBackgoundPosition(position) {
+ switch (position) {
+ case 'bottom':
+ case 'right':
+ return new _Length2.default('100%');
+ case 'left':
+ case 'top':
+ return new _Length2.default('0%');
+ case 'auto':
+ return new _Length2.default('0');
+ }
+ return new _Length2.default(position);
+};
+
+var parseBackgroundImage = exports.parseBackgroundImage = function parseBackgroundImage(image) {
+ var whitespace = /^\s$/;
+ var results = [];
+
+ var args = [];
+ var method = '';
+ var quote = null;
+ var definition = '';
+ var mode = 0;
+ var numParen = 0;
+
+ var appendResult = function appendResult() {
+ var prefix = '';
+ if (method) {
+ if (definition.substr(0, 1) === '"') {
+ definition = definition.substr(1, definition.length - 2);
+ }
+
+ if (definition) {
+ args.push(definition.trim());
+ }
+
+ var prefix_i = method.indexOf('-', 1) + 1;
+ if (method.substr(0, 1) === '-' && prefix_i > 0) {
+ prefix = method.substr(0, prefix_i).toLowerCase();
+ method = method.substr(prefix_i);
+ }
+ method = method.toLowerCase();
+ if (method !== 'none') {
+ results.push({
+ prefix: prefix,
+ method: method,
+ args: args
+ });
+ }
+ }
+ args = [];
+ method = definition = '';
+ };
+
+ image.split('').forEach(function (c) {
+ if (mode === 0 && whitespace.test(c)) {
+ return;
+ }
+ switch (c) {
+ case '"':
+ if (!quote) {
+ quote = c;
+ } else if (quote === c) {
+ quote = null;
+ }
+ break;
+ case '(':
+ if (quote) {
+ break;
+ } else if (mode === 0) {
+ mode = 1;
+ return;
+ } else {
+ numParen++;
+ }
+ break;
+ case ')':
+ if (quote) {
+ break;
+ } else if (mode === 1) {
+ if (numParen === 0) {
+ mode = 0;
+ appendResult();
+ return;
+ } else {
+ numParen--;
+ }
+ }
+ break;
+
+ case ',':
+ if (quote) {
+ break;
+ } else if (mode === 0) {
+ appendResult();
+ return;
+ } else if (mode === 1) {
+ if (numParen === 0 && !method.match(/^url$/i)) {
+ args.push(definition.trim());
+ definition = '';
+ return;
+ }
+ }
+ break;
+ }
+
+ if (mode === 0) {
+ method += c;
+ } else {
+ definition += c;
+ }
+ });
+
+ appendResult();
+ return results;
+};
+});
+
+unwrapExports(background);
+var background_1 = background.parseBackgroundImage;
+var background_2 = background.parseBackground;
+var background_3 = background.calculateBackgroundRepeatPath;
+var background_4 = background.calculateBackgroundPosition;
+var background_5 = background.calculateBackgroungPositioningArea;
+var background_6 = background.calculateBackgroungPaintingArea;
+var background_7 = background.calculateGradientBackgroundSize;
+var background_8 = background.calculateBackgroundSize;
+var background_9 = background.BACKGROUND_ORIGIN;
+var background_10 = background.BACKGROUND_CLIP;
+var background_11 = background.BACKGROUND_SIZE;
+var background_12 = background.BACKGROUND_REPEAT;
+
+var border = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseBorder = exports.BORDER_SIDES = exports.BORDER_STYLE = undefined;
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var BORDER_STYLE = exports.BORDER_STYLE = {
+ NONE: 0,
+ SOLID: 1
+};
+
+var BORDER_SIDES = exports.BORDER_SIDES = {
+ TOP: 0,
+ RIGHT: 1,
+ BOTTOM: 2,
+ LEFT: 3
+};
+
+var SIDES = Object.keys(BORDER_SIDES).map(function (s) {
+ return s.toLowerCase();
+});
+
+var parseBorderStyle = function parseBorderStyle(style) {
+ switch (style) {
+ case 'none':
+ return BORDER_STYLE.NONE;
+ }
+ return BORDER_STYLE.SOLID;
+};
+
+var parseBorder = exports.parseBorder = function parseBorder(style) {
+ return SIDES.map(function (side) {
+ var borderColor = new _Color2.default(style.getPropertyValue('border-' + side + '-color'));
+ var borderStyle = parseBorderStyle(style.getPropertyValue('border-' + side + '-style'));
+ var borderWidth = parseFloat(style.getPropertyValue('border-' + side + '-width'));
+ return {
+ borderColor: borderColor,
+ borderStyle: borderStyle,
+ borderWidth: isNaN(borderWidth) ? 0 : borderWidth
+ };
+ });
+};
+});
+
+unwrapExports(border);
+var border_1 = border.parseBorder;
+var border_2 = border.BORDER_SIDES;
+var border_3 = border.BORDER_STYLE;
+
+var borderRadius = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseBorderRadius = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+
+
+var _Length2 = _interopRequireDefault(Length_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var SIDES = ['top-left', 'top-right', 'bottom-right', 'bottom-left'];
+
+var parseBorderRadius = exports.parseBorderRadius = function parseBorderRadius(style) {
+ return SIDES.map(function (side) {
+ var value = style.getPropertyValue('border-' + side + '-radius');
+
+ var _value$split$map = value.split(' ').map(_Length2.default.create),
+ _value$split$map2 = _slicedToArray(_value$split$map, 2),
+ horizontal = _value$split$map2[0],
+ vertical = _value$split$map2[1];
+
+ return typeof vertical === 'undefined' ? [horizontal, horizontal] : [horizontal, vertical];
+ });
+};
+});
+
+unwrapExports(borderRadius);
+var borderRadius_1 = borderRadius.parseBorderRadius;
+
+var display = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var DISPLAY = exports.DISPLAY = {
+ NONE: 1 << 0,
+ BLOCK: 1 << 1,
+ INLINE: 1 << 2,
+ RUN_IN: 1 << 3,
+ FLOW: 1 << 4,
+ FLOW_ROOT: 1 << 5,
+ TABLE: 1 << 6,
+ FLEX: 1 << 7,
+ GRID: 1 << 8,
+ RUBY: 1 << 9,
+ SUBGRID: 1 << 10,
+ LIST_ITEM: 1 << 11,
+ TABLE_ROW_GROUP: 1 << 12,
+ TABLE_HEADER_GROUP: 1 << 13,
+ TABLE_FOOTER_GROUP: 1 << 14,
+ TABLE_ROW: 1 << 15,
+ TABLE_CELL: 1 << 16,
+ TABLE_COLUMN_GROUP: 1 << 17,
+ TABLE_COLUMN: 1 << 18,
+ TABLE_CAPTION: 1 << 19,
+ RUBY_BASE: 1 << 20,
+ RUBY_TEXT: 1 << 21,
+ RUBY_BASE_CONTAINER: 1 << 22,
+ RUBY_TEXT_CONTAINER: 1 << 23,
+ CONTENTS: 1 << 24,
+ INLINE_BLOCK: 1 << 25,
+ INLINE_LIST_ITEM: 1 << 26,
+ INLINE_TABLE: 1 << 27,
+ INLINE_FLEX: 1 << 28,
+ INLINE_GRID: 1 << 29
+};
+
+var parseDisplayValue = function parseDisplayValue(display) {
+ switch (display) {
+ case 'block':
+ return DISPLAY.BLOCK;
+ case 'inline':
+ return DISPLAY.INLINE;
+ case 'run-in':
+ return DISPLAY.RUN_IN;
+ case 'flow':
+ return DISPLAY.FLOW;
+ case 'flow-root':
+ return DISPLAY.FLOW_ROOT;
+ case 'table':
+ return DISPLAY.TABLE;
+ case 'flex':
+ return DISPLAY.FLEX;
+ case 'grid':
+ return DISPLAY.GRID;
+ case 'ruby':
+ return DISPLAY.RUBY;
+ case 'subgrid':
+ return DISPLAY.SUBGRID;
+ case 'list-item':
+ return DISPLAY.LIST_ITEM;
+ case 'table-row-group':
+ return DISPLAY.TABLE_ROW_GROUP;
+ case 'table-header-group':
+ return DISPLAY.TABLE_HEADER_GROUP;
+ case 'table-footer-group':
+ return DISPLAY.TABLE_FOOTER_GROUP;
+ case 'table-row':
+ return DISPLAY.TABLE_ROW;
+ case 'table-cell':
+ return DISPLAY.TABLE_CELL;
+ case 'table-column-group':
+ return DISPLAY.TABLE_COLUMN_GROUP;
+ case 'table-column':
+ return DISPLAY.TABLE_COLUMN;
+ case 'table-caption':
+ return DISPLAY.TABLE_CAPTION;
+ case 'ruby-base':
+ return DISPLAY.RUBY_BASE;
+ case 'ruby-text':
+ return DISPLAY.RUBY_TEXT;
+ case 'ruby-base-container':
+ return DISPLAY.RUBY_BASE_CONTAINER;
+ case 'ruby-text-container':
+ return DISPLAY.RUBY_TEXT_CONTAINER;
+ case 'contents':
+ return DISPLAY.CONTENTS;
+ case 'inline-block':
+ return DISPLAY.INLINE_BLOCK;
+ case 'inline-list-item':
+ return DISPLAY.INLINE_LIST_ITEM;
+ case 'inline-table':
+ return DISPLAY.INLINE_TABLE;
+ case 'inline-flex':
+ return DISPLAY.INLINE_FLEX;
+ case 'inline-grid':
+ return DISPLAY.INLINE_GRID;
+ }
+
+ return DISPLAY.NONE;
+};
+
+var setDisplayBit = function setDisplayBit(bit, display) {
+ return bit | parseDisplayValue(display);
+};
+
+var parseDisplay = exports.parseDisplay = function parseDisplay(display) {
+ return display.split(' ').reduce(setDisplayBit, 0);
+};
+});
+
+unwrapExports(display);
+var display_1 = display.DISPLAY;
+var display_2 = display.parseDisplay;
+
+var float_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var FLOAT = exports.FLOAT = {
+ NONE: 0,
+ LEFT: 1,
+ RIGHT: 2,
+ INLINE_START: 3,
+ INLINE_END: 4
+};
+
+var parseCSSFloat = exports.parseCSSFloat = function parseCSSFloat(float) {
+ switch (float) {
+ case 'left':
+ return FLOAT.LEFT;
+ case 'right':
+ return FLOAT.RIGHT;
+ case 'inline-start':
+ return FLOAT.INLINE_START;
+ case 'inline-end':
+ return FLOAT.INLINE_END;
+ }
+ return FLOAT.NONE;
+};
+});
+
+unwrapExports(float_1);
+var float_2 = float_1.FLOAT;
+var float_3 = float_1.parseCSSFloat;
+
+var font = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+
+var parseFontWeight = function parseFontWeight(weight) {
+ switch (weight) {
+ case 'normal':
+ return 400;
+ case 'bold':
+ return 700;
+ }
+
+ var value = parseInt(weight, 10);
+ return isNaN(value) ? 400 : value;
+};
+
+var parseFont = exports.parseFont = function parseFont(style) {
+ var fontFamily = style.fontFamily;
+ var fontSize = style.fontSize;
+ var fontStyle = style.fontStyle;
+ var fontVariant = style.fontVariant;
+ var fontWeight = parseFontWeight(style.fontWeight);
+
+ return {
+ fontFamily: fontFamily,
+ fontSize: fontSize,
+ fontStyle: fontStyle,
+ fontVariant: fontVariant,
+ fontWeight: fontWeight
+ };
+};
+});
+
+unwrapExports(font);
+var font_1 = font.parseFont;
+
+var letterSpacing = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var parseLetterSpacing = exports.parseLetterSpacing = function parseLetterSpacing(letterSpacing) {
+ if (letterSpacing === 'normal') {
+ return 0;
+ }
+ var value = parseFloat(letterSpacing);
+ return isNaN(value) ? 0 : value;
+};
+});
+
+unwrapExports(letterSpacing);
+var letterSpacing_1 = letterSpacing.parseLetterSpacing;
+
+var lineBreak = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var LINE_BREAK = exports.LINE_BREAK = {
+ NORMAL: 'normal',
+ STRICT: 'strict'
+};
+
+var parseLineBreak = exports.parseLineBreak = function parseLineBreak(wordBreak) {
+ switch (wordBreak) {
+ case 'strict':
+ return LINE_BREAK.STRICT;
+ case 'normal':
+ default:
+ return LINE_BREAK.NORMAL;
+ }
+};
+});
+
+unwrapExports(lineBreak);
+var lineBreak_1 = lineBreak.LINE_BREAK;
+var lineBreak_2 = lineBreak.parseLineBreak;
+
+var listStyle = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseListStyle = exports.parseListStyleType = exports.LIST_STYLE_TYPE = exports.LIST_STYLE_POSITION = undefined;
+
+
+
+var LIST_STYLE_POSITION = exports.LIST_STYLE_POSITION = {
+ INSIDE: 0,
+ OUTSIDE: 1
+};
+
+var LIST_STYLE_TYPE = exports.LIST_STYLE_TYPE = {
+ NONE: -1,
+ DISC: 0,
+ CIRCLE: 1,
+ SQUARE: 2,
+ DECIMAL: 3,
+ CJK_DECIMAL: 4,
+ DECIMAL_LEADING_ZERO: 5,
+ LOWER_ROMAN: 6,
+ UPPER_ROMAN: 7,
+ LOWER_GREEK: 8,
+ LOWER_ALPHA: 9,
+ UPPER_ALPHA: 10,
+ ARABIC_INDIC: 11,
+ ARMENIAN: 12,
+ BENGALI: 13,
+ CAMBODIAN: 14,
+ CJK_EARTHLY_BRANCH: 15,
+ CJK_HEAVENLY_STEM: 16,
+ CJK_IDEOGRAPHIC: 17,
+ DEVANAGARI: 18,
+ ETHIOPIC_NUMERIC: 19,
+ GEORGIAN: 20,
+ GUJARATI: 21,
+ GURMUKHI: 22,
+ HEBREW: 22,
+ HIRAGANA: 23,
+ HIRAGANA_IROHA: 24,
+ JAPANESE_FORMAL: 25,
+ JAPANESE_INFORMAL: 26,
+ KANNADA: 27,
+ KATAKANA: 28,
+ KATAKANA_IROHA: 29,
+ KHMER: 30,
+ KOREAN_HANGUL_FORMAL: 31,
+ KOREAN_HANJA_FORMAL: 32,
+ KOREAN_HANJA_INFORMAL: 33,
+ LAO: 34,
+ LOWER_ARMENIAN: 35,
+ MALAYALAM: 36,
+ MONGOLIAN: 37,
+ MYANMAR: 38,
+ ORIYA: 39,
+ PERSIAN: 40,
+ SIMP_CHINESE_FORMAL: 41,
+ SIMP_CHINESE_INFORMAL: 42,
+ TAMIL: 43,
+ TELUGU: 44,
+ THAI: 45,
+ TIBETAN: 46,
+ TRAD_CHINESE_FORMAL: 47,
+ TRAD_CHINESE_INFORMAL: 48,
+ UPPER_ARMENIAN: 49,
+ DISCLOSURE_OPEN: 50,
+ DISCLOSURE_CLOSED: 51
+};
+
+var parseListStyleType = exports.parseListStyleType = function parseListStyleType(type) {
+ switch (type) {
+ case 'disc':
+ return LIST_STYLE_TYPE.DISC;
+ case 'circle':
+ return LIST_STYLE_TYPE.CIRCLE;
+ case 'square':
+ return LIST_STYLE_TYPE.SQUARE;
+ case 'decimal':
+ return LIST_STYLE_TYPE.DECIMAL;
+ case 'cjk-decimal':
+ return LIST_STYLE_TYPE.CJK_DECIMAL;
+ case 'decimal-leading-zero':
+ return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;
+ case 'lower-roman':
+ return LIST_STYLE_TYPE.LOWER_ROMAN;
+ case 'upper-roman':
+ return LIST_STYLE_TYPE.UPPER_ROMAN;
+ case 'lower-greek':
+ return LIST_STYLE_TYPE.LOWER_GREEK;
+ case 'lower-alpha':
+ return LIST_STYLE_TYPE.LOWER_ALPHA;
+ case 'upper-alpha':
+ return LIST_STYLE_TYPE.UPPER_ALPHA;
+ case 'arabic-indic':
+ return LIST_STYLE_TYPE.ARABIC_INDIC;
+ case 'armenian':
+ return LIST_STYLE_TYPE.ARMENIAN;
+ case 'bengali':
+ return LIST_STYLE_TYPE.BENGALI;
+ case 'cambodian':
+ return LIST_STYLE_TYPE.CAMBODIAN;
+ case 'cjk-earthly-branch':
+ return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH;
+ case 'cjk-heavenly-stem':
+ return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM;
+ case 'cjk-ideographic':
+ return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC;
+ case 'devanagari':
+ return LIST_STYLE_TYPE.DEVANAGARI;
+ case 'ethiopic-numeric':
+ return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC;
+ case 'georgian':
+ return LIST_STYLE_TYPE.GEORGIAN;
+ case 'gujarati':
+ return LIST_STYLE_TYPE.GUJARATI;
+ case 'gurmukhi':
+ return LIST_STYLE_TYPE.GURMUKHI;
+ case 'hebrew':
+ return LIST_STYLE_TYPE.HEBREW;
+ case 'hiragana':
+ return LIST_STYLE_TYPE.HIRAGANA;
+ case 'hiragana-iroha':
+ return LIST_STYLE_TYPE.HIRAGANA_IROHA;
+ case 'japanese-formal':
+ return LIST_STYLE_TYPE.JAPANESE_FORMAL;
+ case 'japanese-informal':
+ return LIST_STYLE_TYPE.JAPANESE_INFORMAL;
+ case 'kannada':
+ return LIST_STYLE_TYPE.KANNADA;
+ case 'katakana':
+ return LIST_STYLE_TYPE.KATAKANA;
+ case 'katakana-iroha':
+ return LIST_STYLE_TYPE.KATAKANA_IROHA;
+ case 'khmer':
+ return LIST_STYLE_TYPE.KHMER;
+ case 'korean-hangul-formal':
+ return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL;
+ case 'korean-hanja-formal':
+ return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL;
+ case 'korean-hanja-informal':
+ return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL;
+ case 'lao':
+ return LIST_STYLE_TYPE.LAO;
+ case 'lower-armenian':
+ return LIST_STYLE_TYPE.LOWER_ARMENIAN;
+ case 'malayalam':
+ return LIST_STYLE_TYPE.MALAYALAM;
+ case 'mongolian':
+ return LIST_STYLE_TYPE.MONGOLIAN;
+ case 'myanmar':
+ return LIST_STYLE_TYPE.MYANMAR;
+ case 'oriya':
+ return LIST_STYLE_TYPE.ORIYA;
+ case 'persian':
+ return LIST_STYLE_TYPE.PERSIAN;
+ case 'simp-chinese-formal':
+ return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL;
+ case 'simp-chinese-informal':
+ return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL;
+ case 'tamil':
+ return LIST_STYLE_TYPE.TAMIL;
+ case 'telugu':
+ return LIST_STYLE_TYPE.TELUGU;
+ case 'thai':
+ return LIST_STYLE_TYPE.THAI;
+ case 'tibetan':
+ return LIST_STYLE_TYPE.TIBETAN;
+ case 'trad-chinese-formal':
+ return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL;
+ case 'trad-chinese-informal':
+ return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL;
+ case 'upper-armenian':
+ return LIST_STYLE_TYPE.UPPER_ARMENIAN;
+ case 'disclosure-open':
+ return LIST_STYLE_TYPE.DISCLOSURE_OPEN;
+ case 'disclosure-closed':
+ return LIST_STYLE_TYPE.DISCLOSURE_CLOSED;
+ case 'none':
+ default:
+ return LIST_STYLE_TYPE.NONE;
+ }
+};
+
+var parseListStyle = exports.parseListStyle = function parseListStyle(style) {
+ var listStyleImage = (0, background.parseBackgroundImage)(style.getPropertyValue('list-style-image'));
+ return {
+ listStyleType: parseListStyleType(style.getPropertyValue('list-style-type')),
+ listStyleImage: listStyleImage.length ? listStyleImage[0] : null,
+ listStylePosition: parseListStylePosition(style.getPropertyValue('list-style-position'))
+ };
+};
+
+var parseListStylePosition = function parseListStylePosition(position) {
+ switch (position) {
+ case 'inside':
+ return LIST_STYLE_POSITION.INSIDE;
+ case 'outside':
+ default:
+ return LIST_STYLE_POSITION.OUTSIDE;
+ }
+};
+});
+
+unwrapExports(listStyle);
+var listStyle_1 = listStyle.parseListStyle;
+var listStyle_2 = listStyle.parseListStyleType;
+var listStyle_3 = listStyle.LIST_STYLE_TYPE;
+var listStyle_4 = listStyle.LIST_STYLE_POSITION;
+
+var margin = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseMargin = undefined;
+
+
+
+var _Length2 = _interopRequireDefault(Length_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var SIDES = ['top', 'right', 'bottom', 'left'];
+
+var parseMargin = exports.parseMargin = function parseMargin(style) {
+ return SIDES.map(function (side) {
+ return new _Length2.default(style.getPropertyValue('margin-' + side));
+ });
+};
+});
+
+unwrapExports(margin);
+var margin_1 = margin.parseMargin;
+
+var overflow = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var OVERFLOW = exports.OVERFLOW = {
+ VISIBLE: 0,
+ HIDDEN: 1,
+ SCROLL: 2,
+ AUTO: 3
+};
+
+var parseOverflow = exports.parseOverflow = function parseOverflow(overflow) {
+ switch (overflow) {
+ case 'hidden':
+ return OVERFLOW.HIDDEN;
+ case 'scroll':
+ return OVERFLOW.SCROLL;
+ case 'auto':
+ return OVERFLOW.AUTO;
+ case 'visible':
+ default:
+ return OVERFLOW.VISIBLE;
+ }
+};
+});
+
+unwrapExports(overflow);
+var overflow_1 = overflow.OVERFLOW;
+var overflow_2 = overflow.parseOverflow;
+
+var overflowWrap = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var OVERFLOW_WRAP = exports.OVERFLOW_WRAP = {
+ NORMAL: 0,
+ BREAK_WORD: 1
+};
+
+var parseOverflowWrap = exports.parseOverflowWrap = function parseOverflowWrap(overflow) {
+ switch (overflow) {
+ case 'break-word':
+ return OVERFLOW_WRAP.BREAK_WORD;
+ case 'normal':
+ default:
+ return OVERFLOW_WRAP.NORMAL;
+ }
+};
+});
+
+unwrapExports(overflowWrap);
+var overflowWrap_1 = overflowWrap.OVERFLOW_WRAP;
+var overflowWrap_2 = overflowWrap.parseOverflowWrap;
+
+var position = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var POSITION = exports.POSITION = {
+ STATIC: 0,
+ RELATIVE: 1,
+ ABSOLUTE: 2,
+ FIXED: 3,
+ STICKY: 4
+};
+
+var parsePosition = exports.parsePosition = function parsePosition(position) {
+ switch (position) {
+ case 'relative':
+ return POSITION.RELATIVE;
+ case 'absolute':
+ return POSITION.ABSOLUTE;
+ case 'fixed':
+ return POSITION.FIXED;
+ case 'sticky':
+ return POSITION.STICKY;
+ }
+
+ return POSITION.STATIC;
+};
+});
+
+unwrapExports(position);
+var position_1 = position.POSITION;
+var position_2 = position.parsePosition;
+
+var textShadow = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseTextShadow = undefined;
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var NUMBER = /^([+-]|\d|\.)$/i;
+
+var parseTextShadow = exports.parseTextShadow = function parseTextShadow(textShadow) {
+ if (textShadow === 'none' || typeof textShadow !== 'string') {
+ return null;
+ }
+
+ var currentValue = '';
+ var isLength = false;
+ var values = [];
+ var shadows = [];
+ var numParens = 0;
+ var color = null;
+
+ var appendValue = function appendValue() {
+ if (currentValue.length) {
+ if (isLength) {
+ values.push(parseFloat(currentValue));
+ } else {
+ color = new _Color2.default(currentValue);
+ }
+ }
+ isLength = false;
+ currentValue = '';
+ };
+
+ var appendShadow = function appendShadow() {
+ if (values.length && color !== null) {
+ shadows.push({
+ color: color,
+ offsetX: values[0] || 0,
+ offsetY: values[1] || 0,
+ blur: values[2] || 0
+ });
+ }
+ values.splice(0, values.length);
+ color = null;
+ };
+
+ for (var i = 0; i < textShadow.length; i++) {
+ var c = textShadow[i];
+ switch (c) {
+ case '(':
+ currentValue += c;
+ numParens++;
+ break;
+ case ')':
+ currentValue += c;
+ numParens--;
+ break;
+ case ',':
+ if (numParens === 0) {
+ appendValue();
+ appendShadow();
+ } else {
+ currentValue += c;
+ }
+ break;
+ case ' ':
+ if (numParens === 0) {
+ appendValue();
+ } else {
+ currentValue += c;
+ }
+ break;
+ default:
+ if (currentValue.length === 0 && NUMBER.test(c)) {
+ isLength = true;
+ }
+ currentValue += c;
+ }
+ }
+
+ appendValue();
+ appendShadow();
+
+ if (shadows.length === 0) {
+ return null;
+ }
+
+ return shadows;
+};
+});
+
+unwrapExports(textShadow);
+var textShadow_1 = textShadow.parseTextShadow;
+
+var textTransform = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var TEXT_TRANSFORM = exports.TEXT_TRANSFORM = {
+ NONE: 0,
+ LOWERCASE: 1,
+ UPPERCASE: 2,
+ CAPITALIZE: 3
+};
+
+var parseTextTransform = exports.parseTextTransform = function parseTextTransform(textTransform) {
+ switch (textTransform) {
+ case 'uppercase':
+ return TEXT_TRANSFORM.UPPERCASE;
+ case 'lowercase':
+ return TEXT_TRANSFORM.LOWERCASE;
+ case 'capitalize':
+ return TEXT_TRANSFORM.CAPITALIZE;
+ }
+
+ return TEXT_TRANSFORM.NONE;
+};
+});
+
+unwrapExports(textTransform);
+var textTransform_1 = textTransform.TEXT_TRANSFORM;
+var textTransform_2 = textTransform.parseTextTransform;
+
+var transform = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseTransform = undefined;
+
+
+
+var _Length2 = _interopRequireDefault(Length_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var toFloat = function toFloat(s) {
+ return parseFloat(s.trim());
+};
+
+var MATRIX = /(matrix|matrix3d)\((.+)\)/;
+
+var parseTransform = exports.parseTransform = function parseTransform(style) {
+ var transform = parseTransformMatrix(style.transform || style.webkitTransform || style.mozTransform ||
+ // $FlowFixMe
+ style.msTransform ||
+ // $FlowFixMe
+ style.oTransform);
+ if (transform === null) {
+ return null;
+ }
+
+ return {
+ transform: transform,
+ transformOrigin: parseTransformOrigin(style.transformOrigin || style.webkitTransformOrigin || style.mozTransformOrigin ||
+ // $FlowFixMe
+ style.msTransformOrigin ||
+ // $FlowFixMe
+ style.oTransformOrigin)
+ };
+};
+
+// $FlowFixMe
+var parseTransformOrigin = function parseTransformOrigin(origin) {
+ if (typeof origin !== 'string') {
+ var v = new _Length2.default('0');
+ return [v, v];
+ }
+ var values = origin.split(' ').map(_Length2.default.create);
+ return [values[0], values[1]];
+};
+
+// $FlowFixMe
+var parseTransformMatrix = function parseTransformMatrix(transform) {
+ if (transform === 'none' || typeof transform !== 'string') {
+ return null;
+ }
+
+ var match = transform.match(MATRIX);
+ if (match) {
+ if (match[1] === 'matrix') {
+ var matrix = match[2].split(',').map(toFloat);
+ return [matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]];
+ } else {
+ var matrix3d = match[2].split(',').map(toFloat);
+ return [matrix3d[0], matrix3d[1], matrix3d[4], matrix3d[5], matrix3d[12], matrix3d[13]];
+ }
+ }
+ return null;
+};
+});
+
+unwrapExports(transform);
+var transform_1 = transform.parseTransform;
+
+var visibility = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var VISIBILITY = exports.VISIBILITY = {
+ VISIBLE: 0,
+ HIDDEN: 1,
+ COLLAPSE: 2
+};
+
+var parseVisibility = exports.parseVisibility = function parseVisibility(visibility) {
+ switch (visibility) {
+ case 'hidden':
+ return VISIBILITY.HIDDEN;
+ case 'collapse':
+ return VISIBILITY.COLLAPSE;
+ case 'visible':
+ default:
+ return VISIBILITY.VISIBLE;
+ }
+};
+});
+
+unwrapExports(visibility);
+var visibility_1 = visibility.VISIBILITY;
+var visibility_2 = visibility.parseVisibility;
+
+var wordBreak = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var WORD_BREAK = exports.WORD_BREAK = {
+ NORMAL: 'normal',
+ BREAK_ALL: 'break-all',
+ KEEP_ALL: 'keep-all'
+};
+
+var parseWordBreak = exports.parseWordBreak = function parseWordBreak(wordBreak) {
+ switch (wordBreak) {
+ case 'break-all':
+ return WORD_BREAK.BREAK_ALL;
+ case 'keep-all':
+ return WORD_BREAK.KEEP_ALL;
+ case 'normal':
+ default:
+ return WORD_BREAK.NORMAL;
+ }
+};
+});
+
+unwrapExports(wordBreak);
+var wordBreak_1 = wordBreak.WORD_BREAK;
+var wordBreak_2 = wordBreak.parseWordBreak;
+
+var zIndex = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var parseZIndex = exports.parseZIndex = function parseZIndex(zIndex) {
+ var auto = zIndex === 'auto';
+ return {
+ auto: auto,
+ order: auto ? 0 : parseInt(zIndex, 10)
+ };
+};
+});
+
+unwrapExports(zIndex);
+var zIndex_1 = zIndex.parseZIndex;
+
+var ForeignObjectRenderer_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var ForeignObjectRenderer = function () {
+ function ForeignObjectRenderer(element) {
+ _classCallCheck(this, ForeignObjectRenderer);
+
+ this.element = element;
+ }
+
+ _createClass(ForeignObjectRenderer, [{
+ key: 'render',
+ value: function render(options) {
+ var _this = this;
+
+ this.options = options;
+ this.canvas = document.createElement('canvas');
+ this.ctx = this.canvas.getContext('2d');
+ this.canvas.width = Math.floor(options.width) * options.scale;
+ this.canvas.height = Math.floor(options.height) * options.scale;
+ this.canvas.style.width = options.width + 'px';
+ this.canvas.style.height = options.height + 'px';
+
+ options.logger.log('ForeignObject renderer initialized (' + options.width + 'x' + options.height + ' at ' + options.x + ',' + options.y + ') with scale ' + options.scale);
+ var svg = createForeignObjectSVG(Math.max(options.windowWidth, options.width) * options.scale, Math.max(options.windowHeight, options.height) * options.scale, options.scrollX * options.scale, options.scrollY * options.scale, this.element);
+
+ return loadSerializedSVG(svg).then(function (img) {
+ if (options.backgroundColor) {
+ _this.ctx.fillStyle = options.backgroundColor.toString();
+ _this.ctx.fillRect(0, 0, options.width * options.scale, options.height * options.scale);
+ }
+
+ _this.ctx.drawImage(img, -options.x * options.scale, -options.y * options.scale);
+ return _this.canvas;
+ });
+ }
+ }]);
+
+ return ForeignObjectRenderer;
+}();
+
+exports.default = ForeignObjectRenderer;
+var createForeignObjectSVG = exports.createForeignObjectSVG = function createForeignObjectSVG(width, height, x, y, node) {
+ var xmlns = 'http://www.w3.org/2000/svg';
+ var svg = document.createElementNS(xmlns, 'svg');
+ var foreignObject = document.createElementNS(xmlns, 'foreignObject');
+ svg.setAttributeNS(null, 'width', width);
+ svg.setAttributeNS(null, 'height', height);
+
+ foreignObject.setAttributeNS(null, 'width', '100%');
+ foreignObject.setAttributeNS(null, 'height', '100%');
+ foreignObject.setAttributeNS(null, 'x', x);
+ foreignObject.setAttributeNS(null, 'y', y);
+ foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');
+ svg.appendChild(foreignObject);
+
+ foreignObject.appendChild(node);
+
+ return svg;
+};
+
+var loadSerializedSVG = exports.loadSerializedSVG = function loadSerializedSVG(svg) {
+ return new Promise(function (resolve, reject) {
+ var img = new Image();
+ img.onload = function () {
+ return resolve(img);
+ };
+ img.onerror = reject;
+
+ img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(new XMLSerializer().serializeToString(svg));
+ });
+};
+});
+
+unwrapExports(ForeignObjectRenderer_1);
+var ForeignObjectRenderer_2 = ForeignObjectRenderer_1.createForeignObjectSVG;
+var ForeignObjectRenderer_3 = ForeignObjectRenderer_1.loadSerializedSVG;
+
+var Feature = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+
+
+var testRangeBounds = function testRangeBounds(document) {
+ var TEST_HEIGHT = 123;
+
+ if (document.createRange) {
+ var range = document.createRange();
+ if (range.getBoundingClientRect) {
+ var testElement = document.createElement('boundtest');
+ testElement.style.height = TEST_HEIGHT + 'px';
+ testElement.style.display = 'block';
+ document.body.appendChild(testElement);
+
+ range.selectNode(testElement);
+ var rangeBounds = range.getBoundingClientRect();
+ var rangeHeight = Math.round(rangeBounds.height);
+ document.body.removeChild(testElement);
+ if (rangeHeight === TEST_HEIGHT) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+};
+
+// iOS 10.3 taints canvas with base64 images unless crossOrigin = 'anonymous'
+var testBase64 = function testBase64(document, src) {
+ var img = new Image();
+ var canvas = document.createElement('canvas');
+ var ctx = canvas.getContext('2d');
+
+ return new Promise(function (resolve) {
+ // Single pixel base64 image renders fine on iOS 10.3???
+ img.src = src;
+
+ var onload = function onload() {
+ try {
+ ctx.drawImage(img, 0, 0);
+ canvas.toDataURL();
+ } catch (e) {
+ return resolve(false);
+ }
+
+ return resolve(true);
+ };
+
+ img.onload = onload;
+ img.onerror = function () {
+ return resolve(false);
+ };
+
+ if (img.complete === true) {
+ setTimeout(function () {
+ onload();
+ }, 500);
+ }
+ });
+};
+
+var testCORS = function testCORS() {
+ return typeof new Image().crossOrigin !== 'undefined';
+};
+
+var testResponseType = function testResponseType() {
+ return typeof new XMLHttpRequest().responseType === 'string';
+};
+
+var testSVG = function testSVG(document) {
+ var img = new Image();
+ var canvas = document.createElement('canvas');
+ var ctx = canvas.getContext('2d');
+ img.src = 'data:image/svg+xml,<svg xmlns=\'http://www.w3.org/2000/svg\'></svg>';
+
+ try {
+ ctx.drawImage(img, 0, 0);
+ canvas.toDataURL();
+ } catch (e) {
+ return false;
+ }
+ return true;
+};
+
+var isGreenPixel = function isGreenPixel(data) {
+ return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;
+};
+
+var testForeignObject = function testForeignObject(document) {
+ var canvas = document.createElement('canvas');
+ var size = 100;
+ canvas.width = size;
+ canvas.height = size;
+ var ctx = canvas.getContext('2d');
+ ctx.fillStyle = 'rgb(0, 255, 0)';
+ ctx.fillRect(0, 0, size, size);
+
+ var img = new Image();
+ var greenImageSrc = canvas.toDataURL();
+ img.src = greenImageSrc;
+ var svg = (0, ForeignObjectRenderer_1.createForeignObjectSVG)(size, size, 0, 0, img);
+ ctx.fillStyle = 'red';
+ ctx.fillRect(0, 0, size, size);
+
+ return (0, ForeignObjectRenderer_1.loadSerializedSVG)(svg).then(function (img) {
+ ctx.drawImage(img, 0, 0);
+ var data = ctx.getImageData(0, 0, size, size).data;
+ ctx.fillStyle = 'red';
+ ctx.fillRect(0, 0, size, size);
+
+ var node = document.createElement('div');
+ node.style.backgroundImage = 'url(' + greenImageSrc + ')';
+ node.style.height = size + 'px';
+ // Firefox 55 does not render inline <img /> tags
+ return isGreenPixel(data) ? (0, ForeignObjectRenderer_1.loadSerializedSVG)((0, ForeignObjectRenderer_1.createForeignObjectSVG)(size, size, 0, 0, node)) : Promise.reject(false);
+ }).then(function (img) {
+ ctx.drawImage(img, 0, 0);
+ // Edge does not render background-images
+ return isGreenPixel(ctx.getImageData(0, 0, size, size).data);
+ }).catch(function (e) {
+ return false;
+ });
+};
+
+var FEATURES = {
+ // $FlowFixMe - get/set properties not yet supported
+ get SUPPORT_RANGE_BOUNDS() {
+ var value = testRangeBounds(document);
+ Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });
+ return value;
+ },
+ // $FlowFixMe - get/set properties not yet supported
+ get SUPPORT_SVG_DRAWING() {
+ var value = testSVG(document);
+ Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });
+ return value;
+ },
+ // $FlowFixMe - get/set properties not yet supported
+ get SUPPORT_BASE64_DRAWING() {
+ return function (src) {
+ var _value = testBase64(document, src);
+ Object.defineProperty(FEATURES, 'SUPPORT_BASE64_DRAWING', { value: function value() {
+ return _value;
+ } });
+ return _value;
+ };
+ },
+ // $FlowFixMe - get/set properties not yet supported
+ get SUPPORT_FOREIGNOBJECT_DRAWING() {
+ var value = typeof Array.from === 'function' && typeof window.fetch === 'function' ? testForeignObject(document) : Promise.resolve(false);
+ Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });
+ return value;
+ },
+ // $FlowFixMe - get/set properties not yet supported
+ get SUPPORT_CORS_IMAGES() {
+ var value = testCORS();
+ Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });
+ return value;
+ },
+ // $FlowFixMe - get/set properties not yet supported
+ get SUPPORT_RESPONSE_TYPE() {
+ var value = testResponseType();
+ Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });
+ return value;
+ },
+ // $FlowFixMe - get/set properties not yet supported
+ get SUPPORT_CORS_XHR() {
+ var value = 'withCredentials' in new XMLHttpRequest();
+ Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });
+ return value;
+ }
+};
+
+exports.default = FEATURES;
+});
+
+unwrapExports(Feature);
+
+var Util$2 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var toCodePoints = exports.toCodePoints = function toCodePoints(str) {
+ var codePoints = [];
+ var i = 0;
+ var length = str.length;
+ while (i < length) {
+ var value = str.charCodeAt(i++);
+ if (value >= 0xd800 && value <= 0xdbff && i < length) {
+ var extra = str.charCodeAt(i++);
+ if ((extra & 0xfc00) === 0xdc00) {
+ codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);
+ } else {
+ codePoints.push(value);
+ i--;
+ }
+ } else {
+ codePoints.push(value);
+ }
+ }
+ return codePoints;
+};
+
+var fromCodePoint = exports.fromCodePoint = function fromCodePoint() {
+ if (String.fromCodePoint) {
+ return String.fromCodePoint.apply(String, arguments);
+ }
+
+ var length = arguments.length;
+ if (!length) {
+ return '';
+ }
+
+ var codeUnits = [];
+
+ var index = -1;
+ var result = '';
+ while (++index < length) {
+ var codePoint = arguments.length <= index ? undefined : arguments[index];
+ if (codePoint <= 0xffff) {
+ codeUnits.push(codePoint);
+ } else {
+ codePoint -= 0x10000;
+ codeUnits.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00);
+ }
+ if (index + 1 === length || codeUnits.length > 0x4000) {
+ result += String.fromCharCode.apply(String, codeUnits);
+ codeUnits.length = 0;
+ }
+ }
+ return result;
+};
+
+var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+// Use a lookup table to find the index.
+var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);
+for (var i = 0; i < chars.length; i++) {
+ lookup[chars.charCodeAt(i)] = i;
+}
+
+var decode = exports.decode = function decode(base64) {
+ var bufferLength = base64.length * 0.75,
+ len = base64.length,
+ i = void 0,
+ p = 0,
+ encoded1 = void 0,
+ encoded2 = void 0,
+ encoded3 = void 0,
+ encoded4 = void 0;
+
+ if (base64[base64.length - 1] === '=') {
+ bufferLength--;
+ if (base64[base64.length - 2] === '=') {
+ bufferLength--;
+ }
+ }
+
+ var buffer = typeof ArrayBuffer !== 'undefined' && typeof Uint8Array !== 'undefined' && typeof Uint8Array.prototype.slice !== 'undefined' ? new ArrayBuffer(bufferLength) : new Array(bufferLength);
+ var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);
+
+ for (i = 0; i < len; i += 4) {
+ encoded1 = lookup[base64.charCodeAt(i)];
+ encoded2 = lookup[base64.charCodeAt(i + 1)];
+ encoded3 = lookup[base64.charCodeAt(i + 2)];
+ encoded4 = lookup[base64.charCodeAt(i + 3)];
+
+ bytes[p++] = encoded1 << 2 | encoded2 >> 4;
+ bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;
+ bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
+ }
+
+ return buffer;
+};
+
+var polyUint16Array = exports.polyUint16Array = function polyUint16Array(buffer) {
+ var length = buffer.length;
+ var bytes = [];
+ for (var _i = 0; _i < length; _i += 2) {
+ bytes.push(buffer[_i + 1] << 8 | buffer[_i]);
+ }
+ return bytes;
+};
+
+var polyUint32Array = exports.polyUint32Array = function polyUint32Array(buffer) {
+ var length = buffer.length;
+ var bytes = [];
+ for (var _i2 = 0; _i2 < length; _i2 += 4) {
+ bytes.push(buffer[_i2 + 3] << 24 | buffer[_i2 + 2] << 16 | buffer[_i2 + 1] << 8 | buffer[_i2]);
+ }
+ return bytes;
+};
+});
+
+unwrapExports(Util$2);
+var Util_1$1 = Util$2.toCodePoints;
+var Util_2$1 = Util$2.fromCodePoint;
+var Util_3$1 = Util$2.decode;
+var Util_4$1 = Util$2.polyUint16Array;
+var Util_5 = Util$2.polyUint32Array;
+
+var Trie_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Trie = exports.createTrieFromBase64 = exports.UTRIE2_INDEX_2_MASK = exports.UTRIE2_INDEX_2_BLOCK_LENGTH = exports.UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = exports.UTRIE2_INDEX_1_OFFSET = exports.UTRIE2_UTF8_2B_INDEX_2_LENGTH = exports.UTRIE2_UTF8_2B_INDEX_2_OFFSET = exports.UTRIE2_INDEX_2_BMP_LENGTH = exports.UTRIE2_LSCP_INDEX_2_LENGTH = exports.UTRIE2_DATA_MASK = exports.UTRIE2_DATA_BLOCK_LENGTH = exports.UTRIE2_LSCP_INDEX_2_OFFSET = exports.UTRIE2_SHIFT_1_2 = exports.UTRIE2_INDEX_SHIFT = exports.UTRIE2_SHIFT_1 = exports.UTRIE2_SHIFT_2 = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/** Shift size for getting the index-2 table offset. */
+var UTRIE2_SHIFT_2 = exports.UTRIE2_SHIFT_2 = 5;
+
+/** Shift size for getting the index-1 table offset. */
+var UTRIE2_SHIFT_1 = exports.UTRIE2_SHIFT_1 = 6 + 5;
+
+/**
+ * Shift size for shifting left the index array values.
+ * Increases possible data size with 16-bit index values at the cost
+ * of compactability.
+ * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.
+ */
+var UTRIE2_INDEX_SHIFT = exports.UTRIE2_INDEX_SHIFT = 2;
+
+/**
+ * Difference between the two shift sizes,
+ * for getting an index-1 offset from an index-2 offset. 6=11-5
+ */
+var UTRIE2_SHIFT_1_2 = exports.UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;
+
+/**
+ * The part of the index-2 table for U+D800..U+DBFF stores values for
+ * lead surrogate code _units_ not code _points_.
+ * Values for lead surrogate code _points_ are indexed with this portion of the table.
+ * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)
+ */
+var UTRIE2_LSCP_INDEX_2_OFFSET = exports.UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;
+
+/** Number of entries in a data block. 32=0x20 */
+var UTRIE2_DATA_BLOCK_LENGTH = exports.UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;
+/** Mask for getting the lower bits for the in-data-block offset. */
+var UTRIE2_DATA_MASK = exports.UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;
+
+var UTRIE2_LSCP_INDEX_2_LENGTH = exports.UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;
+/** Count the lengths of both BMP pieces. 2080=0x820 */
+var UTRIE2_INDEX_2_BMP_LENGTH = exports.UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;
+/**
+ * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.
+ * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.
+ */
+var UTRIE2_UTF8_2B_INDEX_2_OFFSET = exports.UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;
+var UTRIE2_UTF8_2B_INDEX_2_LENGTH = exports.UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */
+/**
+ * The index-1 table, only used for supplementary code points, at offset 2112=0x840.
+ * Variable length, for code points up to highStart, where the last single-value range starts.
+ * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.
+ * (For 0x100000 supplementary code points U+10000..U+10ffff.)
+ *
+ * The part of the index-2 table for supplementary code points starts
+ * after this index-1 table.
+ *
+ * Both the index-1 table and the following part of the index-2 table
+ * are omitted completely if there is only BMP data.
+ */
+var UTRIE2_INDEX_1_OFFSET = exports.UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;
+
+/**
+ * Number of index-1 entries for the BMP. 32=0x20
+ * This part of the index-1 table is omitted from the serialized form.
+ */
+var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = exports.UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;
+
+/** Number of entries in an index-2 block. 64=0x40 */
+var UTRIE2_INDEX_2_BLOCK_LENGTH = exports.UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;
+/** Mask for getting the lower bits for the in-index-2-block offset. */
+var UTRIE2_INDEX_2_MASK = exports.UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;
+
+var createTrieFromBase64 = exports.createTrieFromBase64 = function createTrieFromBase64(base64) {
+ var buffer = (0, Util$2.decode)(base64);
+ var view32 = Array.isArray(buffer) ? (0, Util$2.polyUint32Array)(buffer) : new Uint32Array(buffer);
+ var view16 = Array.isArray(buffer) ? (0, Util$2.polyUint16Array)(buffer) : new Uint16Array(buffer);
+ var headerLength = 24;
+
+ var index = view16.slice(headerLength / 2, view32[4] / 2);
+ var data = view32[5] === 2 ? view16.slice((headerLength + view32[4]) / 2) : view32.slice(Math.ceil((headerLength + view32[4]) / 4));
+
+ return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);
+};
+
+var Trie = exports.Trie = function () {
+ function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {
+ _classCallCheck(this, Trie);
+
+ this.initialValue = initialValue;
+ this.errorValue = errorValue;
+ this.highStart = highStart;
+ this.highValueIndex = highValueIndex;
+ this.index = index;
+ this.data = data;
+ }
+
+ /**
+ * Get the value for a code point as stored in the Trie.
+ *
+ * @param codePoint the code point
+ * @return the value
+ */
+
+
+ _createClass(Trie, [{
+ key: 'get',
+ value: function get(codePoint) {
+ var ix = void 0;
+ if (codePoint >= 0) {
+ if (codePoint < 0x0d800 || codePoint > 0x0dbff && codePoint <= 0x0ffff) {
+ // Ordinary BMP code point, excluding leading surrogates.
+ // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.
+ // 16 bit data is stored in the index array itself.
+ ix = this.index[codePoint >> UTRIE2_SHIFT_2];
+ ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
+ return this.data[ix];
+ }
+
+ if (codePoint <= 0xffff) {
+ // Lead Surrogate Code Point. A Separate index section is stored for
+ // lead surrogate code units and code points.
+ // The main index has the code unit data.
+ // For this function, we need the code point data.
+ // Note: this expression could be refactored for slightly improved efficiency, but
+ // surrogate code points will be so rare in practice that it's not worth it.
+ ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + (codePoint - 0xd800 >> UTRIE2_SHIFT_2)];
+ ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
+ return this.data[ix];
+ }
+
+ if (codePoint < this.highStart) {
+ // Supplemental code point, use two-level lookup.
+ ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);
+ ix = this.index[ix];
+ ix += codePoint >> UTRIE2_SHIFT_2 & UTRIE2_INDEX_2_MASK;
+ ix = this.index[ix];
+ ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
+ return this.data[ix];
+ }
+ if (codePoint <= 0x10ffff) {
+ return this.data[this.highValueIndex];
+ }
+ }
+
+ // Fall through. The code point is outside of the legal range of 0..0x10ffff.
+ return this.errorValue;
+ }
+ }]);
+
+ return Trie;
+}();
+});
+
+unwrapExports(Trie_1);
+var Trie_2 = Trie_1.Trie;
+var Trie_3 = Trie_1.createTrieFromBase64;
+var Trie_4 = Trie_1.UTRIE2_INDEX_2_MASK;
+var Trie_5 = Trie_1.UTRIE2_INDEX_2_BLOCK_LENGTH;
+var Trie_6 = Trie_1.UTRIE2_OMITTED_BMP_INDEX_1_LENGTH;
+var Trie_7 = Trie_1.UTRIE2_INDEX_1_OFFSET;
+var Trie_8 = Trie_1.UTRIE2_UTF8_2B_INDEX_2_LENGTH;
+var Trie_9 = Trie_1.UTRIE2_UTF8_2B_INDEX_2_OFFSET;
+var Trie_10 = Trie_1.UTRIE2_INDEX_2_BMP_LENGTH;
+var Trie_11 = Trie_1.UTRIE2_LSCP_INDEX_2_LENGTH;
+var Trie_12 = Trie_1.UTRIE2_DATA_MASK;
+var Trie_13 = Trie_1.UTRIE2_DATA_BLOCK_LENGTH;
+var Trie_14 = Trie_1.UTRIE2_LSCP_INDEX_2_OFFSET;
+var Trie_15 = Trie_1.UTRIE2_SHIFT_1_2;
+var Trie_16 = Trie_1.UTRIE2_INDEX_SHIFT;
+var Trie_17 = Trie_1.UTRIE2_SHIFT_1;
+var Trie_18 = Trie_1.UTRIE2_SHIFT_2;
+
+var linebreakTrie = 'KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA';
+
+var LineBreak = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.LineBreaker = exports.inlineBreakOpportunities = exports.lineBreakAtIndex = exports.codePointsToCharacterClasses = exports.UnicodeTrie = exports.BREAK_ALLOWED = exports.BREAK_NOT_ALLOWED = exports.BREAK_MANDATORY = exports.classes = exports.LETTER_NUMBER_MODIFIER = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+
+
+
+
+var _linebreakTrie2 = _interopRequireDefault(linebreakTrie);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var LETTER_NUMBER_MODIFIER = exports.LETTER_NUMBER_MODIFIER = 50;
+
+// Non-tailorable Line Breaking Classes
+var BK = 1; // Cause a line break (after)
+var CR = 2; // Cause a line break (after), except between CR and LF
+var LF = 3; // Cause a line break (after)
+var CM = 4; // Prohibit a line break between the character and the preceding character
+var NL = 5; // Cause a line break (after)
+var SG = 6; // Do not occur in well-formed text
+var WJ = 7; // Prohibit line breaks before and after
+var ZW = 8; // Provide a break opportunity
+var GL = 9; // Prohibit line breaks before and after
+var SP = 10; // Enable indirect line breaks
+var ZWJ = 11; // Prohibit line breaks within joiner sequences
+// Break Opportunities
+var B2 = 12; // Provide a line break opportunity before and after the character
+var BA = 13; // Generally provide a line break opportunity after the character
+var BB = 14; // Generally provide a line break opportunity before the character
+var HY = 15; // Provide a line break opportunity after the character, except in numeric context
+var CB = 16; // Provide a line break opportunity contingent on additional information
+// Characters Prohibiting Certain Breaks
+var CL = 17; // Prohibit line breaks before
+var CP = 18; // Prohibit line breaks before
+var EX = 19; // Prohibit line breaks before
+var IN = 20; // Allow only indirect line breaks between pairs
+var NS = 21; // Allow only indirect line breaks before
+var OP = 22; // Prohibit line breaks after
+var QU = 23; // Act like they are both opening and closing
+// Numeric Context
+var IS = 24; // Prevent breaks after any and before numeric
+var NU = 25; // Form numeric expressions for line breaking purposes
+var PO = 26; // Do not break following a numeric expression
+var PR = 27; // Do not break in front of a numeric expression
+var SY = 28; // Prevent a break before; and allow a break after
+// Other Characters
+var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID
+var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters
+var CJ = 31; // Treat as NS or ID for strict or normal breaking.
+var EB = 32; // Do not break from following Emoji Modifier
+var EM = 33; // Do not break from preceding Emoji Base
+var H2 = 34; // Form Korean syllable blocks
+var H3 = 35; // Form Korean syllable blocks
+var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic
+var ID = 37; // Break before or after; except in some numeric context
+var JL = 38; // Form Korean syllable blocks
+var JV = 39; // Form Korean syllable blocks
+var JT = 40; // Form Korean syllable blocks
+var RI = 41; // Keep pairs together. For pairs; break before and after other classes
+var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis
+var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions
+
+var classes = exports.classes = {
+ BK: BK,
+ CR: CR,
+ LF: LF,
+ CM: CM,
+ NL: NL,
+ SG: SG,
+ WJ: WJ,
+ ZW: ZW,
+ GL: GL,
+ SP: SP,
+ ZWJ: ZWJ,
+ B2: B2,
+ BA: BA,
+ BB: BB,
+ HY: HY,
+ CB: CB,
+ CL: CL,
+ CP: CP,
+ EX: EX,
+ IN: IN,
+ NS: NS,
+ OP: OP,
+ QU: QU,
+ IS: IS,
+ NU: NU,
+ PO: PO,
+ PR: PR,
+ SY: SY,
+ AI: AI,
+ AL: AL,
+ CJ: CJ,
+ EB: EB,
+ EM: EM,
+ H2: H2,
+ H3: H3,
+ HL: HL,
+ ID: ID,
+ JL: JL,
+ JV: JV,
+ JT: JT,
+ RI: RI,
+ SA: SA,
+ XX: XX
+};
+
+var BREAK_MANDATORY = exports.BREAK_MANDATORY = '!';
+var BREAK_NOT_ALLOWED = exports.BREAK_NOT_ALLOWED = '×';
+var BREAK_ALLOWED = exports.BREAK_ALLOWED = '÷';
+var UnicodeTrie = exports.UnicodeTrie = (0, Trie_1.createTrieFromBase64)(_linebreakTrie2.default);
+
+var ALPHABETICS = [AL, HL];
+var HARD_LINE_BREAKS = [BK, CR, LF, NL];
+var SPACE = [SP, ZW];
+var PREFIX_POSTFIX = [PR, PO];
+var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE);
+var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];
+var HYPHEN = [HY, BA];
+
+var codePointsToCharacterClasses = exports.codePointsToCharacterClasses = function codePointsToCharacterClasses(codePoints) {
+ var lineBreak = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'strict';
+
+ var types = [];
+ var indicies = [];
+ var categories = [];
+ codePoints.forEach(function (codePoint, index) {
+ var classType = UnicodeTrie.get(codePoint);
+ if (classType > LETTER_NUMBER_MODIFIER) {
+ categories.push(true);
+ classType -= LETTER_NUMBER_MODIFIER;
+ } else {
+ categories.push(false);
+ }
+
+ if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {
+ // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0
+ if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {
+ indicies.push(index);
+ return types.push(CB);
+ }
+ }
+
+ if (classType === CM || classType === ZWJ) {
+ // LB10 Treat any remaining combining mark or ZWJ as AL.
+ if (index === 0) {
+ indicies.push(index);
+ return types.push(AL);
+ }
+
+ // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of
+ // the base character in all of the following rules. Treat ZWJ as if it were CM.
+ var prev = types[index - 1];
+ if (LINE_BREAKS.indexOf(prev) === -1) {
+ indicies.push(indicies[index - 1]);
+ return types.push(prev);
+ }
+ indicies.push(index);
+ return types.push(AL);
+ }
+
+ indicies.push(index);
+
+ if (classType === CJ) {
+ return types.push(lineBreak === 'strict' ? NS : ID);
+ }
+
+ if (classType === SA) {
+ return types.push(AL);
+ }
+
+ if (classType === AI) {
+ return types.push(AL);
+ }
+
+ // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL
+ // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised
+ // to take into account the actual line breaking properties for these characters.
+ if (classType === XX) {
+ if (codePoint >= 0x20000 && codePoint <= 0x2fffd || codePoint >= 0x30000 && codePoint <= 0x3fffd) {
+ return types.push(ID);
+ } else {
+ return types.push(AL);
+ }
+ }
+
+ types.push(classType);
+ });
+
+ return [indicies, types, categories];
+};
+
+var isAdjacentWithSpaceIgnored = function isAdjacentWithSpaceIgnored(a, b, currentIndex, classTypes) {
+ var current = classTypes[currentIndex];
+ if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {
+ var i = currentIndex;
+ while (i <= classTypes.length) {
+ i++;
+ var next = classTypes[i];
+
+ if (next === b) {
+ return true;
+ }
+
+ if (next !== SP) {
+ break;
+ }
+ }
+ }
+
+ if (current === SP) {
+ var _i = currentIndex;
+
+ while (_i > 0) {
+ _i--;
+ var prev = classTypes[_i];
+
+ if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {
+ var n = currentIndex;
+ while (n <= classTypes.length) {
+ n++;
+ var _next = classTypes[n];
+
+ if (_next === b) {
+ return true;
+ }
+
+ if (_next !== SP) {
+ break;
+ }
+ }
+ }
+
+ if (prev !== SP) {
+ break;
+ }
+ }
+ }
+ return false;
+};
+
+var previousNonSpaceClassType = function previousNonSpaceClassType(currentIndex, classTypes) {
+ var i = currentIndex;
+ while (i >= 0) {
+ var type = classTypes[i];
+ if (type === SP) {
+ i--;
+ } else {
+ return type;
+ }
+ }
+ return 0;
+};
+
+var _lineBreakAtIndex = function _lineBreakAtIndex(codePoints, classTypes, indicies, index, forbiddenBreaks) {
+ if (indicies[index] === 0) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ var currentIndex = index - 1;
+ if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ var beforeIndex = currentIndex - 1;
+ var afterIndex = currentIndex + 1;
+ var current = classTypes[currentIndex];
+
+ // LB4 Always break after hard line breaks.
+ // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.
+ var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;
+ var next = classTypes[afterIndex];
+
+ if (current === CR && next === LF) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ if (HARD_LINE_BREAKS.indexOf(current) !== -1) {
+ return BREAK_MANDATORY;
+ }
+
+ // LB6 Do not break before hard line breaks.
+ if (HARD_LINE_BREAKS.indexOf(next) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB7 Do not break before spaces or zero width space.
+ if (SPACE.indexOf(next) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.
+ if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {
+ return BREAK_ALLOWED;
+ }
+
+ // LB8a Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier.
+ if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ && (next === ID || next === EB || next === EM)) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB11 Do not break before or after Word joiner and related characters.
+ if (current === WJ || next === WJ) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB12 Do not break after NBSP and related characters.
+ if (current === GL) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.
+ if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.
+ if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB14 Do not break after ‘[’, even after spaces.
+ if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB15 Do not break within ‘”[’, even with intervening spaces.
+ if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.
+ if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB17 Do not break within ‘——’, even with intervening spaces.
+ if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB18 Break after spaces.
+ if (current === SP) {
+ return BREAK_ALLOWED;
+ }
+
+ // LB19 Do not break before or after quotation marks, such as ‘ ” ’.
+ if (current === QU || next === QU) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB20 Break before and after unresolved CB.
+ if (next === CB || current === CB) {
+ return BREAK_ALLOWED;
+ }
+
+ // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.
+ if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB21a Don't break after Hebrew + Hyphen.
+ if (before === HL && HYPHEN.indexOf(current) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB21b Don’t break between Solidus and Hebrew letters.
+ if (current === SY && next === HL) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB22 Do not break between two ellipses, or between letters, numbers or exclamations and ellipsis.
+ if (next === IN && ALPHABETICS.concat(IN, EX, NU, ID, EB, EM).indexOf(current) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB23 Do not break between digits and letters.
+ if (ALPHABETICS.indexOf(next) !== -1 && current === NU || ALPHABETICS.indexOf(current) !== -1 && next === NU) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.
+ if (current === PR && [ID, EB, EM].indexOf(next) !== -1 || [ID, EB, EM].indexOf(current) !== -1 && next === PO) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.
+ if (ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1 || PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB25 Do not break between the following pairs of classes relevant to numbers:
+ if (
+ // (PR | PO) × ( OP | HY )? NU
+ [PR, PO].indexOf(current) !== -1 && (next === NU || [OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU) ||
+ // ( OP | HY ) × NU
+ [OP, HY].indexOf(current) !== -1 && next === NU ||
+ // NU × (NU | SY | IS)
+ current === NU && [NU, SY, IS].indexOf(next) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)
+ if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {
+ var prevIndex = currentIndex;
+ while (prevIndex >= 0) {
+ var type = classTypes[prevIndex];
+ if (type === NU) {
+ return BREAK_NOT_ALLOWED;
+ } else if ([SY, IS].indexOf(type) !== -1) {
+ prevIndex--;
+ } else {
+ break;
+ }
+ }
+ }
+
+ // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))
+ if ([PR, PO].indexOf(next) !== -1) {
+ var _prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;
+ while (_prevIndex >= 0) {
+ var _type = classTypes[_prevIndex];
+ if (_type === NU) {
+ return BREAK_NOT_ALLOWED;
+ } else if ([SY, IS].indexOf(_type) !== -1) {
+ _prevIndex--;
+ } else {
+ break;
+ }
+ }
+ }
+
+ // LB26 Do not break a Korean syllable.
+ if (JL === current && [JL, JV, H2, H3].indexOf(next) !== -1 || [JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1 || [JT, H3].indexOf(current) !== -1 && next === JT) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB27 Treat a Korean Syllable Block the same as ID.
+ if (KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1 || KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB28 Do not break between alphabetics (“at”).
+ if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).
+ if (current === IS && ALPHABETICS.indexOf(next) !== -1) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.
+ if (ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP || ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB30a Break between two regional indicator symbols if and only if there are an even number of regional
+ // indicators preceding the position of the break.
+ if (current === RI && next === RI) {
+ var i = indicies[currentIndex];
+ var count = 1;
+ while (i > 0) {
+ i--;
+ if (classTypes[i] === RI) {
+ count++;
+ } else {
+ break;
+ }
+ }
+ if (count % 2 !== 0) {
+ return BREAK_NOT_ALLOWED;
+ }
+ }
+
+ // LB30b Do not break between an emoji base and an emoji modifier.
+ if (current === EB && next === EM) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ return BREAK_ALLOWED;
+};
+
+var lineBreakAtIndex = exports.lineBreakAtIndex = function lineBreakAtIndex(codePoints, index) {
+ // LB2 Never break at the start of text.
+ if (index === 0) {
+ return BREAK_NOT_ALLOWED;
+ }
+
+ // LB3 Always break at the end of text.
+ if (index >= codePoints.length) {
+ return BREAK_MANDATORY;
+ }
+
+ var _codePointsToCharacte = codePointsToCharacterClasses(codePoints),
+ _codePointsToCharacte2 = _slicedToArray(_codePointsToCharacte, 2),
+ indicies = _codePointsToCharacte2[0],
+ classTypes = _codePointsToCharacte2[1];
+
+ return _lineBreakAtIndex(codePoints, classTypes, indicies, index);
+};
+
+var cssFormattedClasses = function cssFormattedClasses(codePoints, options) {
+ if (!options) {
+ options = { lineBreak: 'normal', wordBreak: 'normal' };
+ }
+
+ var _codePointsToCharacte3 = codePointsToCharacterClasses(codePoints, options.lineBreak),
+ _codePointsToCharacte4 = _slicedToArray(_codePointsToCharacte3, 3),
+ indicies = _codePointsToCharacte4[0],
+ classTypes = _codePointsToCharacte4[1],
+ isLetterNumber = _codePointsToCharacte4[2];
+
+ if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {
+ classTypes = classTypes.map(function (type) {
+ return [NU, AL, SA].indexOf(type) !== -1 ? ID : type;
+ });
+ }
+
+ var forbiddenBreakpoints = options.wordBreak === 'keep-all' ? isLetterNumber.map(function (isLetterNumber, i) {
+ return isLetterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;
+ }) : null;
+
+ return [indicies, classTypes, forbiddenBreakpoints];
+};
+
+var inlineBreakOpportunities = exports.inlineBreakOpportunities = function inlineBreakOpportunities(str, options) {
+ var codePoints = (0, Util$2.toCodePoints)(str);
+ var output = BREAK_NOT_ALLOWED;
+
+ var _cssFormattedClasses = cssFormattedClasses(codePoints, options),
+ _cssFormattedClasses2 = _slicedToArray(_cssFormattedClasses, 3),
+ indicies = _cssFormattedClasses2[0],
+ classTypes = _cssFormattedClasses2[1],
+ forbiddenBreakpoints = _cssFormattedClasses2[2];
+
+ codePoints.forEach(function (codePoint, i) {
+ output += (0, Util$2.fromCodePoint)(codePoint) + (i >= codePoints.length - 1 ? BREAK_MANDATORY : _lineBreakAtIndex(codePoints, classTypes, indicies, i + 1, forbiddenBreakpoints));
+ });
+
+ return output;
+};
+
+var Break = function () {
+ function Break(codePoints, lineBreak, start, end) {
+ _classCallCheck(this, Break);
+
+ this._codePoints = codePoints;
+ this.required = lineBreak === BREAK_MANDATORY;
+ this.start = start;
+ this.end = end;
+ }
+
+ _createClass(Break, [{
+ key: 'slice',
+ value: function slice() {
+ return Util$2.fromCodePoint.apply(undefined, _toConsumableArray(this._codePoints.slice(this.start, this.end)));
+ }
+ }]);
+
+ return Break;
+}();
+
+var LineBreaker = exports.LineBreaker = function LineBreaker(str, options) {
+ var codePoints = (0, Util$2.toCodePoints)(str);
+
+ var _cssFormattedClasses3 = cssFormattedClasses(codePoints, options),
+ _cssFormattedClasses4 = _slicedToArray(_cssFormattedClasses3, 3),
+ indicies = _cssFormattedClasses4[0],
+ classTypes = _cssFormattedClasses4[1],
+ forbiddenBreakpoints = _cssFormattedClasses4[2];
+
+ var length = codePoints.length;
+ var lastEnd = 0;
+ var nextIndex = 0;
+
+ return {
+ next: function next() {
+ if (nextIndex >= length) {
+ return { done: true };
+ }
+ var lineBreak = BREAK_NOT_ALLOWED;
+ while (nextIndex < length && (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) === BREAK_NOT_ALLOWED) {}
+
+ if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) {
+ var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);
+ lastEnd = nextIndex;
+ return { value: value, done: false };
+ }
+
+ return { done: true };
+ }
+ };
+};
+});
+
+unwrapExports(LineBreak);
+var LineBreak_1 = LineBreak.LineBreaker;
+var LineBreak_2 = LineBreak.inlineBreakOpportunities;
+var LineBreak_3 = LineBreak.lineBreakAtIndex;
+var LineBreak_4 = LineBreak.codePointsToCharacterClasses;
+var LineBreak_5 = LineBreak.UnicodeTrie;
+var LineBreak_6 = LineBreak.BREAK_ALLOWED;
+var LineBreak_7 = LineBreak.BREAK_NOT_ALLOWED;
+var LineBreak_8 = LineBreak.BREAK_MANDATORY;
+var LineBreak_9 = LineBreak.classes;
+var LineBreak_10 = LineBreak.LETTER_NUMBER_MODIFIER;
+
+var dist = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+
+
+Object.defineProperty(exports, 'toCodePoints', {
+ enumerable: true,
+ get: function get() {
+ return Util$2.toCodePoints;
+ }
+});
+Object.defineProperty(exports, 'fromCodePoint', {
+ enumerable: true,
+ get: function get() {
+ return Util$2.fromCodePoint;
+ }
+});
+
+
+
+Object.defineProperty(exports, 'LineBreaker', {
+ enumerable: true,
+ get: function get() {
+ return LineBreak.LineBreaker;
+ }
+});
+});
+
+unwrapExports(dist);
+
+var Unicode = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.breakWords = exports.fromCodePoint = exports.toCodePoints = undefined;
+
+
+
+Object.defineProperty(exports, 'toCodePoints', {
+ enumerable: true,
+ get: function get() {
+ return dist.toCodePoints;
+ }
+});
+Object.defineProperty(exports, 'fromCodePoint', {
+ enumerable: true,
+ get: function get() {
+ return dist.fromCodePoint;
+ }
+});
+
+
+
+var _NodeContainer2 = _interopRequireDefault(NodeContainer_1);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var breakWords = exports.breakWords = function breakWords(str, parent) {
+ var breaker = (0, dist.LineBreaker)(str, {
+ lineBreak: parent.style.lineBreak,
+ wordBreak: parent.style.overflowWrap === overflowWrap.OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : parent.style.wordBreak
+ });
+
+ var words = [];
+ var bk = void 0;
+
+ while (!(bk = breaker.next()).done) {
+ words.push(bk.value.slice());
+ }
+
+ return words;
+};
+});
+
+unwrapExports(Unicode);
+var Unicode_1 = Unicode.breakWords;
+var Unicode_2 = Unicode.fromCodePoint;
+var Unicode_3 = Unicode.toCodePoints;
+
+var TextBounds_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseTextBounds = exports.TextBounds = undefined;
+
+
+
+
+
+
+
+var _Feature2 = _interopRequireDefault(Feature);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var TextBounds = exports.TextBounds = function TextBounds(text, bounds) {
+ _classCallCheck(this, TextBounds);
+
+ this.text = text;
+ this.bounds = bounds;
+};
+
+var parseTextBounds = exports.parseTextBounds = function parseTextBounds(value, parent, node) {
+ var letterRendering = parent.style.letterSpacing !== 0;
+ var textList = letterRendering ? (0, Unicode.toCodePoints)(value).map(function (i) {
+ return (0, Unicode.fromCodePoint)(i);
+ }) : (0, Unicode.breakWords)(value, parent);
+ var length = textList.length;
+ var defaultView = node.parentNode ? node.parentNode.ownerDocument.defaultView : null;
+ var scrollX = defaultView ? defaultView.pageXOffset : 0;
+ var scrollY = defaultView ? defaultView.pageYOffset : 0;
+ var textBounds = [];
+ var offset = 0;
+ for (var i = 0; i < length; i++) {
+ var text = textList[i];
+ if (parent.style.textDecoration !== textDecoration.TEXT_DECORATION.NONE || text.trim().length > 0) {
+ if (_Feature2.default.SUPPORT_RANGE_BOUNDS) {
+ textBounds.push(new TextBounds(text, getRangeBounds(node, offset, text.length, scrollX, scrollY)));
+ } else {
+ var replacementNode = node.splitText(text.length);
+ textBounds.push(new TextBounds(text, getWrapperBounds(node, scrollX, scrollY)));
+ node = replacementNode;
+ }
+ } else if (!_Feature2.default.SUPPORT_RANGE_BOUNDS) {
+ node = node.splitText(text.length);
+ }
+ offset += text.length;
+ }
+ return textBounds;
+};
+
+var getWrapperBounds = function getWrapperBounds(node, scrollX, scrollY) {
+ var wrapper = node.ownerDocument.createElement('html2canvaswrapper');
+ wrapper.appendChild(node.cloneNode(true));
+ var parentNode = node.parentNode;
+ if (parentNode) {
+ parentNode.replaceChild(wrapper, node);
+ var bounds = (0, Bounds_1.parseBounds)(wrapper, scrollX, scrollY);
+ if (wrapper.firstChild) {
+ parentNode.replaceChild(wrapper.firstChild, wrapper);
+ }
+ return bounds;
+ }
+ return new Bounds_1.Bounds(0, 0, 0, 0);
+};
+
+var getRangeBounds = function getRangeBounds(node, offset, length, scrollX, scrollY) {
+ var range = node.ownerDocument.createRange();
+ range.setStart(node, offset);
+ range.setEnd(node, offset + length);
+ return Bounds_1.Bounds.fromClientRect(range.getBoundingClientRect(), scrollX, scrollY);
+};
+});
+
+unwrapExports(TextBounds_1);
+var TextBounds_2 = TextBounds_1.parseTextBounds;
+var TextBounds_3 = TextBounds_1.TextBounds;
+
+var TextContainer_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var TextContainer = function () {
+ function TextContainer(text, parent, bounds) {
+ _classCallCheck(this, TextContainer);
+
+ this.text = text;
+ this.parent = parent;
+ this.bounds = bounds;
+ }
+
+ _createClass(TextContainer, null, [{
+ key: 'fromTextNode',
+ value: function fromTextNode(node, parent) {
+ var text = transform(node.data, parent.style.textTransform);
+ return new TextContainer(text, parent, (0, TextBounds_1.parseTextBounds)(text, parent, node));
+ }
+ }]);
+
+ return TextContainer;
+}();
+
+exports.default = TextContainer;
+
+
+var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g;
+
+var transform = function transform(text, _transform) {
+ switch (_transform) {
+ case textTransform.TEXT_TRANSFORM.LOWERCASE:
+ return text.toLowerCase();
+ case textTransform.TEXT_TRANSFORM.CAPITALIZE:
+ return text.replace(CAPITALIZE, capitalize);
+ case textTransform.TEXT_TRANSFORM.UPPERCASE:
+ return text.toUpperCase();
+ default:
+ return text;
+ }
+};
+
+function capitalize(m, p1, p2) {
+ if (m.length > 0) {
+ return p1 + p2.toUpperCase();
+ }
+
+ return m;
+}
+});
+
+unwrapExports(TextContainer_1);
+
+var Circle_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Circle = function Circle(x, y, radius) {
+ _classCallCheck(this, Circle);
+
+ this.type = Path.PATH.CIRCLE;
+ this.x = x;
+ this.y = y;
+ this.radius = radius;
+
+};
+
+exports.default = Circle;
+});
+
+unwrapExports(Circle_1);
+
+var Input = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.reformatInputBounds = exports.inlineSelectElement = exports.inlineTextAreaElement = exports.inlineInputElement = exports.getInputBorderRadius = exports.INPUT_BACKGROUND = exports.INPUT_BORDERS = exports.INPUT_COLOR = undefined;
+
+
+
+var _TextContainer2 = _interopRequireDefault(TextContainer_1);
+
+
+
+
+
+
+
+var _Circle2 = _interopRequireDefault(Circle_1);
+
+
+
+var _Vector2 = _interopRequireDefault(Vector_1);
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+
+
+var _Length2 = _interopRequireDefault(Length_1);
+
+
+
+
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var INPUT_COLOR = exports.INPUT_COLOR = new _Color2.default([42, 42, 42]);
+var INPUT_BORDER_COLOR = new _Color2.default([165, 165, 165]);
+var INPUT_BACKGROUND_COLOR = new _Color2.default([222, 222, 222]);
+var INPUT_BORDER = {
+ borderWidth: 1,
+ borderColor: INPUT_BORDER_COLOR,
+ borderStyle: border.BORDER_STYLE.SOLID
+};
+var INPUT_BORDERS = exports.INPUT_BORDERS = [INPUT_BORDER, INPUT_BORDER, INPUT_BORDER, INPUT_BORDER];
+var INPUT_BACKGROUND = exports.INPUT_BACKGROUND = {
+ backgroundColor: INPUT_BACKGROUND_COLOR,
+ backgroundImage: [],
+ backgroundClip: background.BACKGROUND_CLIP.PADDING_BOX,
+ backgroundOrigin: background.BACKGROUND_ORIGIN.PADDING_BOX
+};
+
+var RADIO_BORDER_RADIUS = new _Length2.default('50%');
+var RADIO_BORDER_RADIUS_TUPLE = [RADIO_BORDER_RADIUS, RADIO_BORDER_RADIUS];
+var INPUT_RADIO_BORDER_RADIUS = [RADIO_BORDER_RADIUS_TUPLE, RADIO_BORDER_RADIUS_TUPLE, RADIO_BORDER_RADIUS_TUPLE, RADIO_BORDER_RADIUS_TUPLE];
+
+var CHECKBOX_BORDER_RADIUS = new _Length2.default('3px');
+var CHECKBOX_BORDER_RADIUS_TUPLE = [CHECKBOX_BORDER_RADIUS, CHECKBOX_BORDER_RADIUS];
+var INPUT_CHECKBOX_BORDER_RADIUS = [CHECKBOX_BORDER_RADIUS_TUPLE, CHECKBOX_BORDER_RADIUS_TUPLE, CHECKBOX_BORDER_RADIUS_TUPLE, CHECKBOX_BORDER_RADIUS_TUPLE];
+
+var getInputBorderRadius = exports.getInputBorderRadius = function getInputBorderRadius(node) {
+ return node.type === 'radio' ? INPUT_RADIO_BORDER_RADIUS : INPUT_CHECKBOX_BORDER_RADIUS;
+};
+
+var inlineInputElement = exports.inlineInputElement = function inlineInputElement(node, container) {
+ if (node.type === 'radio' || node.type === 'checkbox') {
+ if (node.checked) {
+ var size = Math.min(container.bounds.width, container.bounds.height);
+ container.childNodes.push(node.type === 'checkbox' ? [new _Vector2.default(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79), new _Vector2.default(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549), new _Vector2.default(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071), new _Vector2.default(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649), new _Vector2.default(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23), new _Vector2.default(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085), new _Vector2.default(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)] : new _Circle2.default(container.bounds.left + size / 4, container.bounds.top + size / 4, size / 4));
+ }
+ } else {
+ inlineFormElement(getInputValue(node), node, container, false);
+ }
+};
+
+var inlineTextAreaElement = exports.inlineTextAreaElement = function inlineTextAreaElement(node, container) {
+ inlineFormElement(node.value, node, container, true);
+};
+
+var inlineSelectElement = exports.inlineSelectElement = function inlineSelectElement(node, container) {
+ var option = node.options[node.selectedIndex || 0];
+ inlineFormElement(option ? option.text || '' : '', node, container, false);
+};
+
+var reformatInputBounds = exports.reformatInputBounds = function reformatInputBounds(bounds) {
+ if (bounds.width > bounds.height) {
+ bounds.left += (bounds.width - bounds.height) / 2;
+ bounds.width = bounds.height;
+ } else if (bounds.width < bounds.height) {
+ bounds.top += (bounds.height - bounds.width) / 2;
+ bounds.height = bounds.width;
+ }
+ return bounds;
+};
+
+var inlineFormElement = function inlineFormElement(value, node, container, allowLinebreak) {
+ var body = node.ownerDocument.body;
+ if (value.length > 0 && body) {
+ var wrapper = node.ownerDocument.createElement('html2canvaswrapper');
+ (0, Util.copyCSSStyles)(node.ownerDocument.defaultView.getComputedStyle(node, null), wrapper);
+ wrapper.style.position = 'absolute';
+ wrapper.style.left = container.bounds.left + 'px';
+ wrapper.style.top = container.bounds.top + 'px';
+ if (!allowLinebreak) {
+ wrapper.style.whiteSpace = 'nowrap';
+ }
+ var text = node.ownerDocument.createTextNode(value);
+ wrapper.appendChild(text);
+ body.appendChild(wrapper);
+ container.childNodes.push(_TextContainer2.default.fromTextNode(text, container));
+ body.removeChild(wrapper);
+ }
+};
+
+var getInputValue = function getInputValue(node) {
+ var value = node.type === 'password' ? new Array(node.value.length + 1).join('\u2022') : node.value;
+
+ return value.length === 0 ? node.placeholder || '' : value;
+};
+});
+
+unwrapExports(Input);
+var Input_1 = Input.reformatInputBounds;
+var Input_2 = Input.inlineSelectElement;
+var Input_3 = Input.inlineTextAreaElement;
+var Input_4 = Input.inlineInputElement;
+var Input_5 = Input.getInputBorderRadius;
+var Input_6 = Input.INPUT_BACKGROUND;
+var Input_7 = Input.INPUT_BORDERS;
+var Input_8 = Input.INPUT_COLOR;
+
+var ListItem = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.createCounterText = exports.inlineListItemElement = exports.getListOwner = undefined;
+
+
+
+
+
+var _NodeContainer2 = _interopRequireDefault(NodeContainer_1);
+
+
+
+var _TextContainer2 = _interopRequireDefault(TextContainer_1);
+
+
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// Margin between the enumeration and the list item content
+var MARGIN_RIGHT = 7;
+
+var ancestorTypes = ['OL', 'UL', 'MENU'];
+
+var getListOwner = exports.getListOwner = function getListOwner(container) {
+ var parent = container.parent;
+ if (!parent) {
+ return null;
+ }
+
+ do {
+ var isAncestor = ancestorTypes.indexOf(parent.tagName) !== -1;
+ if (isAncestor) {
+ return parent;
+ }
+ parent = parent.parent;
+ } while (parent);
+
+ return container.parent;
+};
+
+var inlineListItemElement = exports.inlineListItemElement = function inlineListItemElement(node, container, resourceLoader) {
+ var listStyle$$1 = container.style.listStyle;
+
+ if (!listStyle$$1) {
+ return;
+ }
+
+ var style = node.ownerDocument.defaultView.getComputedStyle(node, null);
+ var wrapper = node.ownerDocument.createElement('html2canvaswrapper');
+ (0, Util.copyCSSStyles)(style, wrapper);
+
+ wrapper.style.position = 'absolute';
+ wrapper.style.bottom = 'auto';
+ wrapper.style.display = 'block';
+ wrapper.style.letterSpacing = 'normal';
+
+ switch (listStyle$$1.listStylePosition) {
+ case listStyle.LIST_STYLE_POSITION.OUTSIDE:
+ wrapper.style.left = 'auto';
+ wrapper.style.right = node.ownerDocument.defaultView.innerWidth - container.bounds.left - container.style.margin[1].getAbsoluteValue(container.bounds.width) + MARGIN_RIGHT + 'px';
+ wrapper.style.textAlign = 'right';
+ break;
+ case listStyle.LIST_STYLE_POSITION.INSIDE:
+ wrapper.style.left = container.bounds.left - container.style.margin[3].getAbsoluteValue(container.bounds.width) + 'px';
+ wrapper.style.right = 'auto';
+ wrapper.style.textAlign = 'left';
+ break;
+ }
+
+ var text = void 0;
+ var MARGIN_TOP = container.style.margin[0].getAbsoluteValue(container.bounds.width);
+ var styleImage = listStyle$$1.listStyleImage;
+ if (styleImage) {
+ if (styleImage.method === 'url') {
+ var image = node.ownerDocument.createElement('img');
+ image.src = styleImage.args[0];
+ wrapper.style.top = container.bounds.top - MARGIN_TOP + 'px';
+ wrapper.style.width = 'auto';
+ wrapper.style.height = 'auto';
+ wrapper.appendChild(image);
+ } else {
+ var size = parseFloat(container.style.font.fontSize) * 0.5;
+ wrapper.style.top = container.bounds.top - MARGIN_TOP + container.bounds.height - 1.5 * size + 'px';
+ wrapper.style.width = size + 'px';
+ wrapper.style.height = size + 'px';
+ wrapper.style.backgroundImage = style.listStyleImage;
+ }
+ } else if (typeof container.listIndex === 'number') {
+ text = node.ownerDocument.createTextNode(createCounterText(container.listIndex, listStyle$$1.listStyleType, true));
+ wrapper.appendChild(text);
+ wrapper.style.top = container.bounds.top - MARGIN_TOP + 'px';
+ }
+
+ // $FlowFixMe
+ var body = node.ownerDocument.body;
+ body.appendChild(wrapper);
+
+ if (text) {
+ container.childNodes.push(_TextContainer2.default.fromTextNode(text, container));
+ body.removeChild(wrapper);
+ } else {
+ // $FlowFixMe
+ container.childNodes.push(new _NodeContainer2.default(wrapper, container, resourceLoader, 0));
+ }
+};
+
+var ROMAN_UPPER = {
+ integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],
+ values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
+};
+
+var ARMENIAN = {
+ integers: [9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
+ values: ['Ք', 'Փ', 'Ւ', 'Ց', 'Ր', 'Տ', 'Վ', 'Ս', 'Ռ', 'Ջ', 'Պ', 'Չ', 'Ո', 'Շ', 'Ն', 'Յ', 'Մ', 'Ճ', 'Ղ', 'Ձ', 'Հ', 'Կ', 'Ծ', 'Խ', 'Լ', 'Ի', 'Ժ', 'Թ', 'Ը', 'Է', 'Զ', 'Ե', 'Դ', 'Գ', 'Բ', 'Ա']
+};
+
+var HEBREW = {
+ integers: [10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
+ values: ['י׳', 'ט׳', 'ח׳', 'ז׳', 'ו׳', 'ה׳', 'ד׳', 'ג׳', 'ב׳', 'א׳', 'ת', 'ש', 'ר', 'ק', 'צ', 'פ', 'ע', 'ס', 'נ', 'מ', 'ל', 'כ', 'יט', 'יח', 'יז', 'טז', 'טו', 'י', 'ט', 'ח', 'ז', 'ו', 'ה', 'ד', 'ג', 'ב', 'א']
+};
+
+var GEORGIAN = {
+ integers: [10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
+ values: ['ჵ', 'ჰ', 'ჯ', 'ჴ', 'ხ', 'ჭ', 'წ', 'ძ', 'ც', 'ჩ', 'შ', 'ყ', 'ღ', 'ქ', 'ფ', 'ჳ', 'ტ', 'ს', 'რ', 'ჟ', 'პ', 'ო', 'ჲ', 'ნ', 'მ', 'ლ', 'კ', 'ი', 'თ', 'ჱ', 'ზ', 'ვ', 'ე', 'დ', 'გ', 'ბ', 'ა']
+};
+
+var createAdditiveCounter = function createAdditiveCounter(value, min, max, symbols, fallback, suffix) {
+ if (value < min || value > max) {
+ return createCounterText(value, fallback, suffix.length > 0);
+ }
+
+ return symbols.integers.reduce(function (string, integer, index) {
+ while (value >= integer) {
+ value -= integer;
+ string += symbols.values[index];
+ }
+ return string;
+ }, '') + suffix;
+};
+
+var createCounterStyleWithSymbolResolver = function createCounterStyleWithSymbolResolver(value, codePointRangeLength, isNumeric, resolver) {
+ var string = '';
+
+ do {
+ if (!isNumeric) {
+ value--;
+ }
+ string = resolver(value) + string;
+ value /= codePointRangeLength;
+ } while (value * codePointRangeLength >= codePointRangeLength);
+
+ return string;
+};
+
+var createCounterStyleFromRange = function createCounterStyleFromRange(value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {
+ var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;
+
+ return (value < 0 ? '-' : '') + (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {
+ return (0, Unicode.fromCodePoint)(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);
+ }) + suffix);
+};
+
+var createCounterStyleFromSymbols = function createCounterStyleFromSymbols(value, symbols) {
+ var suffix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '. ';
+
+ var codePointRangeLength = symbols.length;
+ return createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) {
+ return symbols[Math.floor(codePoint % codePointRangeLength)];
+ }) + suffix;
+};
+
+var CJK_ZEROS = 1 << 0;
+var CJK_TEN_COEFFICIENTS = 1 << 1;
+var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;
+var CJK_HUNDRED_COEFFICIENTS = 1 << 3;
+
+var createCJKCounter = function createCJKCounter(value, numbers, multipliers, negativeSign, suffix, flags) {
+ if (value < -9999 || value > 9999) {
+ return createCounterText(value, listStyle.LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0);
+ }
+ var tmp = Math.abs(value);
+ var string = suffix;
+
+ if (tmp === 0) {
+ return numbers[0] + string;
+ }
+
+ for (var digit = 0; tmp > 0 && digit <= 4; digit++) {
+ var coefficient = tmp % 10;
+
+ if (coefficient === 0 && (0, Util.contains)(flags, CJK_ZEROS) && string !== '') {
+ string = numbers[coefficient] + string;
+ } else if (coefficient > 1 || coefficient === 1 && digit === 0 || coefficient === 1 && digit === 1 && (0, Util.contains)(flags, CJK_TEN_COEFFICIENTS) || coefficient === 1 && digit === 1 && (0, Util.contains)(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100 || coefficient === 1 && digit > 1 && (0, Util.contains)(flags, CJK_HUNDRED_COEFFICIENTS)) {
+ string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;
+ } else if (coefficient === 1 && digit > 0) {
+ string = multipliers[digit - 1] + string;
+ }
+ tmp = Math.floor(tmp / 10);
+ }
+
+ return (value < 0 ? negativeSign : '') + string;
+};
+
+var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';
+var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';
+var JAPANESE_NEGATIVE = 'マイナス';
+var KOREAN_NEGATIVE = '마이너스 ';
+
+var createCounterText = exports.createCounterText = function createCounterText(value, type, appendSuffix) {
+ var defaultSuffix = appendSuffix ? '. ' : '';
+ var cjkSuffix = appendSuffix ? '、' : '';
+ var koreanSuffix = appendSuffix ? ', ' : '';
+ switch (type) {
+ case listStyle.LIST_STYLE_TYPE.DISC:
+ return '•';
+ case listStyle.LIST_STYLE_TYPE.CIRCLE:
+ return '◦';
+ case listStyle.LIST_STYLE_TYPE.SQUARE:
+ return '◾';
+ case listStyle.LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:
+ var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);
+ return string.length < 4 ? '0' + string : string;
+ case listStyle.LIST_STYLE_TYPE.CJK_DECIMAL:
+ return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);
+ case listStyle.LIST_STYLE_TYPE.LOWER_ROMAN:
+ return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, listStyle.LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();
+ case listStyle.LIST_STYLE_TYPE.UPPER_ROMAN:
+ return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, listStyle.LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.LOWER_GREEK:
+ return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.LOWER_ALPHA:
+ return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.UPPER_ALPHA:
+ return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.ARABIC_INDIC:
+ return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.ARMENIAN:
+ case listStyle.LIST_STYLE_TYPE.UPPER_ARMENIAN:
+ return createAdditiveCounter(value, 1, 9999, ARMENIAN, listStyle.LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.LOWER_ARMENIAN:
+ return createAdditiveCounter(value, 1, 9999, ARMENIAN, listStyle.LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();
+ case listStyle.LIST_STYLE_TYPE.BENGALI:
+ return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.CAMBODIAN:
+ case listStyle.LIST_STYLE_TYPE.KHMER:
+ return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:
+ return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);
+ case listStyle.LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:
+ return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);
+ case listStyle.LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:
+ case listStyle.LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:
+ return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
+ case listStyle.LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:
+ return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
+ case listStyle.LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:
+ return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
+ case listStyle.LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:
+ return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
+ case listStyle.LIST_STYLE_TYPE.JAPANESE_INFORMAL:
+ return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);
+ case listStyle.LIST_STYLE_TYPE.JAPANESE_FORMAL:
+ return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);
+ case listStyle.LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:
+ return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);
+ case listStyle.LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:
+ return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);
+ case listStyle.LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:
+ return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);
+ case listStyle.LIST_STYLE_TYPE.DEVANAGARI:
+ return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.GEORGIAN:
+ return createAdditiveCounter(value, 1, 19999, GEORGIAN, listStyle.LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.GUJARATI:
+ return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.GURMUKHI:
+ return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.HEBREW:
+ return createAdditiveCounter(value, 1, 10999, HEBREW, listStyle.LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.HIRAGANA:
+ return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');
+ case listStyle.LIST_STYLE_TYPE.HIRAGANA_IROHA:
+ return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');
+ case listStyle.LIST_STYLE_TYPE.KANNADA:
+ return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.KATAKANA:
+ return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);
+ case listStyle.LIST_STYLE_TYPE.KATAKANA_IROHA:
+ return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);
+ case listStyle.LIST_STYLE_TYPE.LAO:
+ return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.MONGOLIAN:
+ return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.MYANMAR:
+ return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.ORIYA:
+ return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.PERSIAN:
+ return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.TAMIL:
+ return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.TELUGU:
+ return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.THAI:
+ return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.TIBETAN:
+ return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);
+ case listStyle.LIST_STYLE_TYPE.DECIMAL:
+ default:
+ return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);
+ }
+};
+});
+
+unwrapExports(ListItem);
+var ListItem_1 = ListItem.createCounterText;
+var ListItem_2 = ListItem.inlineListItemElement;
+var ListItem_3 = ListItem.getListOwner;
+
+var NodeContainer_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];
+
+var NodeContainer = function () {
+ function NodeContainer(node, parent, resourceLoader, index) {
+ var _this = this;
+
+ _classCallCheck(this, NodeContainer);
+
+ this.parent = parent;
+ this.tagName = node.tagName;
+ this.index = index;
+ this.childNodes = [];
+ this.listItems = [];
+ if (typeof node.start === 'number') {
+ this.listStart = node.start;
+ }
+ var defaultView = node.ownerDocument.defaultView;
+ var scrollX = defaultView.pageXOffset;
+ var scrollY = defaultView.pageYOffset;
+ var style = defaultView.getComputedStyle(node, null);
+ var display$$1 = (0, display.parseDisplay)(style.display);
+
+ var IS_INPUT = node.type === 'radio' || node.type === 'checkbox';
+
+ var position$$1 = (0, position.parsePosition)(style.position);
+
+ this.style = {
+ background: IS_INPUT ? Input.INPUT_BACKGROUND : (0, background.parseBackground)(style, resourceLoader),
+ border: IS_INPUT ? Input.INPUT_BORDERS : (0, border.parseBorder)(style),
+ borderRadius: (node instanceof defaultView.HTMLInputElement || node instanceof HTMLInputElement) && IS_INPUT ? (0, Input.getInputBorderRadius)(node) : (0, borderRadius.parseBorderRadius)(style),
+ color: IS_INPUT ? Input.INPUT_COLOR : new _Color2.default(style.color),
+ display: display$$1,
+ float: (0, float_1.parseCSSFloat)(style.float),
+ font: (0, font.parseFont)(style),
+ letterSpacing: (0, letterSpacing.parseLetterSpacing)(style.letterSpacing),
+ listStyle: display$$1 === display.DISPLAY.LIST_ITEM ? (0, listStyle.parseListStyle)(style) : null,
+ lineBreak: (0, lineBreak.parseLineBreak)(style.lineBreak),
+ margin: (0, margin.parseMargin)(style),
+ opacity: parseFloat(style.opacity),
+ overflow: INPUT_TAGS.indexOf(node.tagName) === -1 ? (0, overflow.parseOverflow)(style.overflow) : overflow.OVERFLOW.HIDDEN,
+ overflowWrap: (0, overflowWrap.parseOverflowWrap)(style.overflowWrap ? style.overflowWrap : style.wordWrap),
+ padding: (0, padding.parsePadding)(style),
+ position: position$$1,
+ textDecoration: (0, textDecoration.parseTextDecoration)(style),
+ textShadow: (0, textShadow.parseTextShadow)(style.textShadow),
+ textTransform: (0, textTransform.parseTextTransform)(style.textTransform),
+ transform: (0, transform.parseTransform)(style),
+ visibility: (0, visibility.parseVisibility)(style.visibility),
+ wordBreak: (0, wordBreak.parseWordBreak)(style.wordBreak),
+ zIndex: (0, zIndex.parseZIndex)(position$$1 !== position.POSITION.STATIC ? style.zIndex : 'auto')
+ };
+
+ if (this.isTransformed()) {
+ // getBoundingClientRect provides values post-transform, we want them without the transformation
+ node.style.transform = 'matrix(1,0,0,1,0,0)';
+ }
+
+ if (display$$1 === display.DISPLAY.LIST_ITEM) {
+ var listOwner = (0, ListItem.getListOwner)(this);
+ if (listOwner) {
+ var listIndex = listOwner.listItems.length;
+ listOwner.listItems.push(this);
+ this.listIndex = node.hasAttribute('value') && typeof node.value === 'number' ? node.value : listIndex === 0 ? typeof listOwner.listStart === 'number' ? listOwner.listStart : 1 : listOwner.listItems[listIndex - 1].listIndex + 1;
+ }
+ }
+
+ // TODO move bound retrieval for all nodes to a later stage?
+ if (node.tagName === 'IMG') {
+ node.addEventListener('load', function () {
+ _this.bounds = (0, Bounds_1.parseBounds)(node, scrollX, scrollY);
+ _this.curvedBounds = (0, Bounds_1.parseBoundCurves)(_this.bounds, _this.style.border, _this.style.borderRadius);
+ });
+ }
+ this.image = getImage(node, resourceLoader);
+ this.bounds = IS_INPUT ? (0, Input.reformatInputBounds)((0, Bounds_1.parseBounds)(node, scrollX, scrollY)) : (0, Bounds_1.parseBounds)(node, scrollX, scrollY);
+ this.curvedBounds = (0, Bounds_1.parseBoundCurves)(this.bounds, this.style.border, this.style.borderRadius);
+
+
+ }
+
+ _createClass(NodeContainer, [{
+ key: 'getClipPaths',
+ value: function getClipPaths() {
+ var parentClips = this.parent ? this.parent.getClipPaths() : [];
+ var isClipped = this.style.overflow !== overflow.OVERFLOW.VISIBLE;
+
+ return isClipped ? parentClips.concat([(0, Bounds_1.calculatePaddingBoxPath)(this.curvedBounds)]) : parentClips;
+ }
+ }, {
+ key: 'isInFlow',
+ value: function isInFlow() {
+ return this.isRootElement() && !this.isFloating() && !this.isAbsolutelyPositioned();
+ }
+ }, {
+ key: 'isVisible',
+ value: function isVisible() {
+ return !(0, Util.contains)(this.style.display, display.DISPLAY.NONE) && this.style.opacity > 0 && this.style.visibility === visibility.VISIBILITY.VISIBLE;
+ }
+ }, {
+ key: 'isAbsolutelyPositioned',
+ value: function isAbsolutelyPositioned() {
+ return this.style.position !== position.POSITION.STATIC && this.style.position !== position.POSITION.RELATIVE;
+ }
+ }, {
+ key: 'isPositioned',
+ value: function isPositioned() {
+ return this.style.position !== position.POSITION.STATIC;
+ }
+ }, {
+ key: 'isFloating',
+ value: function isFloating() {
+ return this.style.float !== float_1.FLOAT.NONE;
+ }
+ }, {
+ key: 'isRootElement',
+ value: function isRootElement() {
+ return this.parent === null;
+ }
+ }, {
+ key: 'isTransformed',
+ value: function isTransformed() {
+ return this.style.transform !== null;
+ }
+ }, {
+ key: 'isPositionedWithZIndex',
+ value: function isPositionedWithZIndex() {
+ return this.isPositioned() && !this.style.zIndex.auto;
+ }
+ }, {
+ key: 'isInlineLevel',
+ value: function isInlineLevel() {
+ return (0, Util.contains)(this.style.display, display.DISPLAY.INLINE) || (0, Util.contains)(this.style.display, display.DISPLAY.INLINE_BLOCK) || (0, Util.contains)(this.style.display, display.DISPLAY.INLINE_FLEX) || (0, Util.contains)(this.style.display, display.DISPLAY.INLINE_GRID) || (0, Util.contains)(this.style.display, display.DISPLAY.INLINE_LIST_ITEM) || (0, Util.contains)(this.style.display, display.DISPLAY.INLINE_TABLE);
+ }
+ }, {
+ key: 'isInlineBlockOrInlineTable',
+ value: function isInlineBlockOrInlineTable() {
+ return (0, Util.contains)(this.style.display, display.DISPLAY.INLINE_BLOCK) || (0, Util.contains)(this.style.display, display.DISPLAY.INLINE_TABLE);
+ }
+ }]);
+
+ return NodeContainer;
+}();
+
+exports.default = NodeContainer;
+
+
+var getImage = function getImage(node, resourceLoader) {
+ if (node instanceof node.ownerDocument.defaultView.SVGSVGElement || node instanceof SVGSVGElement) {
+ var s = new XMLSerializer();
+ return resourceLoader.loadImage('data:image/svg+xml,' + encodeURIComponent(s.serializeToString(node)));
+ }
+ switch (node.tagName) {
+ case 'IMG':
+ // $FlowFixMe
+ var img = node;
+ return resourceLoader.loadImage(img.currentSrc || img.src);
+ case 'CANVAS':
+ // $FlowFixMe
+ var canvas = node;
+ return resourceLoader.loadCanvas(canvas);
+ case 'IFRAME':
+ var iframeKey = node.getAttribute('data-html2canvas-internal-iframe-key');
+ if (iframeKey) {
+ return iframeKey;
+ }
+ break;
+ }
+
+ return null;
+};
+});
+
+unwrapExports(NodeContainer_1);
+
+var StackingContext_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+var _NodeContainer2 = _interopRequireDefault(NodeContainer_1);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var StackingContext = function () {
+ function StackingContext(container, parent, treatAsRealStackingContext) {
+ _classCallCheck(this, StackingContext);
+
+ this.container = container;
+ this.parent = parent;
+ this.contexts = [];
+ this.children = [];
+ this.treatAsRealStackingContext = treatAsRealStackingContext;
+ }
+
+ _createClass(StackingContext, [{
+ key: 'getOpacity',
+ value: function getOpacity() {
+ return this.parent ? this.container.style.opacity * this.parent.getOpacity() : this.container.style.opacity;
+ }
+ }, {
+ key: 'getRealParentStackingContext',
+ value: function getRealParentStackingContext() {
+ return !this.parent || this.treatAsRealStackingContext ? this : this.parent.getRealParentStackingContext();
+ }
+ }]);
+
+ return StackingContext;
+}();
+
+exports.default = StackingContext;
+});
+
+unwrapExports(StackingContext_1);
+
+var NodeParser_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.NodeParser = undefined;
+
+
+
+var _StackingContext2 = _interopRequireDefault(StackingContext_1);
+
+
+
+var _NodeContainer2 = _interopRequireDefault(NodeContainer_1);
+
+
+
+var _TextContainer2 = _interopRequireDefault(TextContainer_1);
+
+
+
+
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var NodeParser = exports.NodeParser = function NodeParser(node, resourceLoader, logger) {
+ var index = 0;
+
+ var container = new _NodeContainer2.default(node, null, resourceLoader, index++);
+ var stack = new _StackingContext2.default(container, null, true);
+
+ parseNodeTree(node, container, stack, resourceLoader, index);
+
+ return stack;
+};
+
+var IGNORED_NODE_NAMES = ['SCRIPT', 'HEAD', 'TITLE', 'OBJECT', 'BR', 'OPTION'];
+
+var parseNodeTree = function parseNodeTree(node, parent, stack, resourceLoader, index) {
+ for (var childNode = node.firstChild, nextNode; childNode; childNode = nextNode) {
+ nextNode = childNode.nextSibling;
+ var defaultView = childNode.ownerDocument.defaultView;
+ if (childNode instanceof defaultView.Text || childNode instanceof Text || defaultView.parent && childNode instanceof defaultView.parent.Text) {
+ if (childNode.data.trim().length > 0) {
+ parent.childNodes.push(_TextContainer2.default.fromTextNode(childNode, parent));
+ }
+ } else if (childNode instanceof defaultView.HTMLElement || childNode instanceof HTMLElement || defaultView.parent && childNode instanceof defaultView.parent.HTMLElement) {
+ if (IGNORED_NODE_NAMES.indexOf(childNode.nodeName) === -1) {
+ var container = new _NodeContainer2.default(childNode, parent, resourceLoader, index++);
+ if (container.isVisible()) {
+ if (childNode.tagName === 'INPUT') {
+ // $FlowFixMe
+ (0, Input.inlineInputElement)(childNode, container);
+ } else if (childNode.tagName === 'TEXTAREA') {
+ // $FlowFixMe
+ (0, Input.inlineTextAreaElement)(childNode, container);
+ } else if (childNode.tagName === 'SELECT') {
+ // $FlowFixMe
+ (0, Input.inlineSelectElement)(childNode, container);
+ } else if (container.style.listStyle && container.style.listStyle.listStyleType !== listStyle.LIST_STYLE_TYPE.NONE) {
+ (0, ListItem.inlineListItemElement)(childNode, container, resourceLoader);
+ }
+
+ var SHOULD_TRAVERSE_CHILDREN = childNode.tagName !== 'TEXTAREA';
+ var treatAsRealStackingContext = createsRealStackingContext(container, childNode);
+ if (treatAsRealStackingContext || createsStackingContext(container)) {
+ // for treatAsRealStackingContext:false, any positioned descendants and descendants
+ // which actually create a new stacking context should be considered part of the parent stacking context
+ var parentStack = treatAsRealStackingContext || container.isPositioned() ? stack.getRealParentStackingContext() : stack;
+ var childStack = new _StackingContext2.default(container, parentStack, treatAsRealStackingContext);
+ parentStack.contexts.push(childStack);
+ if (SHOULD_TRAVERSE_CHILDREN) {
+ parseNodeTree(childNode, container, childStack, resourceLoader, index);
+ }
+ } else {
+ stack.children.push(container);
+ if (SHOULD_TRAVERSE_CHILDREN) {
+ parseNodeTree(childNode, container, stack, resourceLoader, index);
+ }
+ }
+ }
+ }
+ } else if (childNode instanceof defaultView.SVGSVGElement || childNode instanceof SVGSVGElement || defaultView.parent && childNode instanceof defaultView.parent.SVGSVGElement) {
+ var _container = new _NodeContainer2.default(childNode, parent, resourceLoader, index++);
+ var _treatAsRealStackingContext = createsRealStackingContext(_container, childNode);
+ if (_treatAsRealStackingContext || createsStackingContext(_container)) {
+ // for treatAsRealStackingContext:false, any positioned descendants and descendants
+ // which actually create a new stacking context should be considered part of the parent stacking context
+ var _parentStack = _treatAsRealStackingContext || _container.isPositioned() ? stack.getRealParentStackingContext() : stack;
+ var _childStack = new _StackingContext2.default(_container, _parentStack, _treatAsRealStackingContext);
+ _parentStack.contexts.push(_childStack);
+ } else {
+ stack.children.push(_container);
+ }
+ }
+ }
+};
+
+var createsRealStackingContext = function createsRealStackingContext(container, node) {
+ return container.isRootElement() || container.isPositionedWithZIndex() || container.style.opacity < 1 || container.isTransformed() || isBodyWithTransparentRoot(container, node);
+};
+
+var createsStackingContext = function createsStackingContext(container) {
+ return container.isPositioned() || container.isFloating();
+};
+
+var isBodyWithTransparentRoot = function isBodyWithTransparentRoot(container, node) {
+ return node.nodeName === 'BODY' && container.parent instanceof _NodeContainer2.default && container.parent.style.background.backgroundColor.isTransparent();
+};
+});
+
+unwrapExports(NodeParser_1);
+var NodeParser_2 = NodeParser_1.NodeParser;
+
+var Font = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FontMetrics = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var SAMPLE_TEXT = 'Hidden Text';
+
+var FontMetrics = exports.FontMetrics = function () {
+ function FontMetrics(document) {
+ _classCallCheck(this, FontMetrics);
+
+ this._data = {};
+ this._document = document;
+ }
+
+ _createClass(FontMetrics, [{
+ key: '_parseMetrics',
+ value: function _parseMetrics(font) {
+ var container = this._document.createElement('div');
+ var img = this._document.createElement('img');
+ var span = this._document.createElement('span');
+
+ var body = this._document.body;
+ if (!body) {
+ throw new Error('');
+ }
+
+ container.style.visibility = 'hidden';
+ container.style.fontFamily = font.fontFamily;
+ container.style.fontSize = font.fontSize;
+ container.style.margin = '0';
+ container.style.padding = '0';
+
+ body.appendChild(container);
+
+ img.src = Util.SMALL_IMAGE;
+ img.width = 1;
+ img.height = 1;
+
+ img.style.margin = '0';
+ img.style.padding = '0';
+ img.style.verticalAlign = 'baseline';
+
+ span.style.fontFamily = font.fontFamily;
+ span.style.fontSize = font.fontSize;
+ span.style.margin = '0';
+ span.style.padding = '0';
+
+ span.appendChild(this._document.createTextNode(SAMPLE_TEXT));
+ container.appendChild(span);
+ container.appendChild(img);
+ var baseline = img.offsetTop - span.offsetTop + 2;
+
+ container.removeChild(span);
+ container.appendChild(this._document.createTextNode(SAMPLE_TEXT));
+
+ container.style.lineHeight = 'normal';
+ img.style.verticalAlign = 'super';
+
+ var middle = img.offsetTop - container.offsetTop + 2;
+
+ body.removeChild(container);
+
+ return { baseline: baseline, middle: middle };
+ }
+ }, {
+ key: 'getMetrics',
+ value: function getMetrics(font) {
+ var key = font.fontFamily + ' ' + font.fontSize;
+ if (this._data[key] === undefined) {
+ this._data[key] = this._parseMetrics(font);
+ }
+
+ return this._data[key];
+ }
+ }]);
+
+ return FontMetrics;
+}();
+});
+
+unwrapExports(Font);
+var Font_1 = Font.FontMetrics;
+
+var Angle = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var ANGLE = /([+-]?\d*\.?\d+)(deg|grad|rad|turn)/i;
+
+var parseAngle = exports.parseAngle = function parseAngle(angle) {
+ var match = angle.match(ANGLE);
+
+ if (match) {
+ var value = parseFloat(match[1]);
+ switch (match[2].toLowerCase()) {
+ case 'deg':
+ return Math.PI * value / 180;
+ case 'grad':
+ return Math.PI / 200 * value;
+ case 'rad':
+ return value;
+ case 'turn':
+ return Math.PI * 2 * value;
+ }
+ }
+
+ return null;
+};
+});
+
+unwrapExports(Angle);
+var Angle_1 = Angle.parseAngle;
+
+var Gradient = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.transformWebkitRadialGradientArgs = exports.parseGradient = exports.RadialGradient = exports.LinearGradient = exports.RADIAL_GRADIENT_SHAPE = exports.GRADIENT_TYPE = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+
+
+var _NodeContainer2 = _interopRequireDefault(NodeContainer_1);
+
+
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+
+
+var _Length2 = _interopRequireDefault(Length_1);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var SIDE_OR_CORNER = /^(to )?(left|top|right|bottom)( (left|top|right|bottom))?$/i;
+var PERCENTAGE_ANGLES = /^([+-]?\d*\.?\d+)% ([+-]?\d*\.?\d+)%$/i;
+var ENDS_WITH_LENGTH = /(px)|%|( 0)$/i;
+var FROM_TO_COLORSTOP = /^(from|to|color-stop)\((?:([\d.]+)(%)?,\s*)?(.+?)\)$/i;
+var RADIAL_SHAPE_DEFINITION = /^\s*(circle|ellipse)?\s*((?:([\d.]+)(px|r?em|%)\s*(?:([\d.]+)(px|r?em|%))?)|closest-side|closest-corner|farthest-side|farthest-corner)?\s*(?:at\s*(?:(left|center|right)|([\d.]+)(px|r?em|%))\s+(?:(top|center|bottom)|([\d.]+)(px|r?em|%)))?(?:\s|$)/i;
+
+var GRADIENT_TYPE = exports.GRADIENT_TYPE = {
+ LINEAR_GRADIENT: 0,
+ RADIAL_GRADIENT: 1
+};
+
+var RADIAL_GRADIENT_SHAPE = exports.RADIAL_GRADIENT_SHAPE = {
+ CIRCLE: 0,
+ ELLIPSE: 1
+};
+
+var LENGTH_FOR_POSITION = {
+ left: new _Length2.default('0%'),
+ top: new _Length2.default('0%'),
+ center: new _Length2.default('50%'),
+ right: new _Length2.default('100%'),
+ bottom: new _Length2.default('100%')
+};
+
+var LinearGradient = exports.LinearGradient = function LinearGradient(colorStops, direction) {
+ _classCallCheck(this, LinearGradient);
+
+ this.type = GRADIENT_TYPE.LINEAR_GRADIENT;
+ this.colorStops = colorStops;
+ this.direction = direction;
+};
+
+var RadialGradient = exports.RadialGradient = function RadialGradient(colorStops, shape, center, radius) {
+ _classCallCheck(this, RadialGradient);
+
+ this.type = GRADIENT_TYPE.RADIAL_GRADIENT;
+ this.colorStops = colorStops;
+ this.shape = shape;
+ this.center = center;
+ this.radius = radius;
+};
+
+var parseGradient = exports.parseGradient = function parseGradient(container, _ref, bounds) {
+ var args = _ref.args,
+ method = _ref.method,
+ prefix = _ref.prefix;
+
+ if (method === 'linear-gradient') {
+ return parseLinearGradient(args, bounds, !!prefix);
+ } else if (method === 'gradient' && args[0] === 'linear') {
+ // TODO handle correct angle
+ return parseLinearGradient(['to bottom'].concat(transformObsoleteColorStops(args.slice(3))), bounds, !!prefix);
+ } else if (method === 'radial-gradient') {
+ return parseRadialGradient(container, prefix === '-webkit-' ? transformWebkitRadialGradientArgs(args) : args, bounds);
+ } else if (method === 'gradient' && args[0] === 'radial') {
+ return parseRadialGradient(container, transformObsoleteColorStops(transformWebkitRadialGradientArgs(args.slice(1))), bounds);
+ }
+};
+
+var parseColorStops = function parseColorStops(args, firstColorStopIndex, lineLength) {
+ var colorStops = [];
+
+ for (var i = firstColorStopIndex; i < args.length; i++) {
+ var value = args[i];
+ var HAS_LENGTH = ENDS_WITH_LENGTH.test(value);
+ var lastSpaceIndex = value.lastIndexOf(' ');
+ var _color = new _Color2.default(HAS_LENGTH ? value.substring(0, lastSpaceIndex) : value);
+ var _stop = HAS_LENGTH ? new _Length2.default(value.substring(lastSpaceIndex + 1)) : i === firstColorStopIndex ? new _Length2.default('0%') : i === args.length - 1 ? new _Length2.default('100%') : null;
+ colorStops.push({ color: _color, stop: _stop });
+ }
+
+ var absoluteValuedColorStops = colorStops.map(function (_ref2) {
+ var color = _ref2.color,
+ stop = _ref2.stop;
+
+ var absoluteStop = lineLength === 0 ? 0 : stop ? stop.getAbsoluteValue(lineLength) / lineLength : null;
+
+ return {
+ color: color,
+ // $FlowFixMe
+ stop: absoluteStop
+ };
+ });
+
+ var previousColorStop = absoluteValuedColorStops[0].stop;
+ for (var _i = 0; _i < absoluteValuedColorStops.length; _i++) {
+ if (previousColorStop !== null) {
+ var _stop2 = absoluteValuedColorStops[_i].stop;
+ if (_stop2 === null) {
+ var n = _i;
+ while (absoluteValuedColorStops[n].stop === null) {
+ n++;
+ }
+ var steps = n - _i + 1;
+ var nextColorStep = absoluteValuedColorStops[n].stop;
+ var stepSize = (nextColorStep - previousColorStop) / steps;
+ for (; _i < n; _i++) {
+ previousColorStop = absoluteValuedColorStops[_i].stop = previousColorStop + stepSize;
+ }
+ } else {
+ previousColorStop = _stop2;
+ }
+ }
+ }
+
+ return absoluteValuedColorStops;
+};
+
+var parseLinearGradient = function parseLinearGradient(args, bounds, hasPrefix) {
+ var angle = (0, Angle.parseAngle)(args[0]);
+ var HAS_SIDE_OR_CORNER = SIDE_OR_CORNER.test(args[0]);
+ var HAS_DIRECTION = HAS_SIDE_OR_CORNER || angle !== null || PERCENTAGE_ANGLES.test(args[0]);
+ var direction = HAS_DIRECTION ? angle !== null ? calculateGradientDirection(
+ // if there is a prefix, the 0° angle points due East (instead of North per W3C)
+ hasPrefix ? angle - Math.PI * 0.5 : angle, bounds) : HAS_SIDE_OR_CORNER ? parseSideOrCorner(args[0], bounds) : parsePercentageAngle(args[0], bounds) : calculateGradientDirection(Math.PI, bounds);
+ var firstColorStopIndex = HAS_DIRECTION ? 1 : 0;
+
+ // TODO: Fix some inaccuracy with color stops with px values
+ var lineLength = Math.min((0, Util.distance)(Math.abs(direction.x0) + Math.abs(direction.x1), Math.abs(direction.y0) + Math.abs(direction.y1)), bounds.width * 2, bounds.height * 2);
+
+ return new LinearGradient(parseColorStops(args, firstColorStopIndex, lineLength), direction);
+};
+
+var parseRadialGradient = function parseRadialGradient(container, args, bounds) {
+ var m = args[0].match(RADIAL_SHAPE_DEFINITION);
+ var shape = m && (m[1] === 'circle' || // explicit shape specification
+ m[3] !== undefined && m[5] === undefined) // only one radius coordinate
+ ? RADIAL_GRADIENT_SHAPE.CIRCLE : RADIAL_GRADIENT_SHAPE.ELLIPSE;
+ var radius = {};
+ var center = {};
+
+ if (m) {
+ // Radius
+ if (m[3] !== undefined) {
+ radius.x = (0, Length_1.calculateLengthFromValueWithUnit)(container, m[3], m[4]).getAbsoluteValue(bounds.width);
+ }
+
+ if (m[5] !== undefined) {
+ radius.y = (0, Length_1.calculateLengthFromValueWithUnit)(container, m[5], m[6]).getAbsoluteValue(bounds.height);
+ }
+
+ // Position
+ if (m[7]) {
+ center.x = LENGTH_FOR_POSITION[m[7].toLowerCase()];
+ } else if (m[8] !== undefined) {
+ center.x = (0, Length_1.calculateLengthFromValueWithUnit)(container, m[8], m[9]);
+ }
+
+ if (m[10]) {
+ center.y = LENGTH_FOR_POSITION[m[10].toLowerCase()];
+ } else if (m[11] !== undefined) {
+ center.y = (0, Length_1.calculateLengthFromValueWithUnit)(container, m[11], m[12]);
+ }
+ }
+
+ var gradientCenter = {
+ x: center.x === undefined ? bounds.width / 2 : center.x.getAbsoluteValue(bounds.width),
+ y: center.y === undefined ? bounds.height / 2 : center.y.getAbsoluteValue(bounds.height)
+ };
+ var gradientRadius = calculateRadius(m && m[2] || 'farthest-corner', shape, gradientCenter, radius, bounds);
+
+ return new RadialGradient(parseColorStops(args, m ? 1 : 0, Math.min(gradientRadius.x, gradientRadius.y)), shape, gradientCenter, gradientRadius);
+};
+
+var calculateGradientDirection = function calculateGradientDirection(radian, bounds) {
+ var width = bounds.width;
+ var height = bounds.height;
+ var HALF_WIDTH = width * 0.5;
+ var HALF_HEIGHT = height * 0.5;
+ var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));
+ var HALF_LINE_LENGTH = lineLength / 2;
+
+ var x0 = HALF_WIDTH + Math.sin(radian) * HALF_LINE_LENGTH;
+ var y0 = HALF_HEIGHT - Math.cos(radian) * HALF_LINE_LENGTH;
+ var x1 = width - x0;
+ var y1 = height - y0;
+
+ return { x0: x0, x1: x1, y0: y0, y1: y1 };
+};
+
+var parseTopRight = function parseTopRight(bounds) {
+ return Math.acos(bounds.width / 2 / ((0, Util.distance)(bounds.width, bounds.height) / 2));
+};
+
+var parseSideOrCorner = function parseSideOrCorner(side, bounds) {
+ switch (side) {
+ case 'bottom':
+ case 'to top':
+ return calculateGradientDirection(0, bounds);
+ case 'left':
+ case 'to right':
+ return calculateGradientDirection(Math.PI / 2, bounds);
+ case 'right':
+ case 'to left':
+ return calculateGradientDirection(3 * Math.PI / 2, bounds);
+ case 'top right':
+ case 'right top':
+ case 'to bottom left':
+ case 'to left bottom':
+ return calculateGradientDirection(Math.PI + parseTopRight(bounds), bounds);
+ case 'top left':
+ case 'left top':
+ case 'to bottom right':
+ case 'to right bottom':
+ return calculateGradientDirection(Math.PI - parseTopRight(bounds), bounds);
+ case 'bottom left':
+ case 'left bottom':
+ case 'to top right':
+ case 'to right top':
+ return calculateGradientDirection(parseTopRight(bounds), bounds);
+ case 'bottom right':
+ case 'right bottom':
+ case 'to top left':
+ case 'to left top':
+ return calculateGradientDirection(2 * Math.PI - parseTopRight(bounds), bounds);
+ case 'top':
+ case 'to bottom':
+ default:
+ return calculateGradientDirection(Math.PI, bounds);
+ }
+};
+
+var parsePercentageAngle = function parsePercentageAngle(angle, bounds) {
+ var _angle$split$map = angle.split(' ').map(parseFloat),
+ _angle$split$map2 = _slicedToArray(_angle$split$map, 2),
+ left = _angle$split$map2[0],
+ top = _angle$split$map2[1];
+
+ var ratio = left / 100 * bounds.width / (top / 100 * bounds.height);
+
+ return calculateGradientDirection(Math.atan(isNaN(ratio) ? 1 : ratio) + Math.PI / 2, bounds);
+};
+
+var findCorner = function findCorner(bounds, x, y, closest) {
+ var corners = [{ x: 0, y: 0 }, { x: 0, y: bounds.height }, { x: bounds.width, y: 0 }, { x: bounds.width, y: bounds.height }];
+
+ // $FlowFixMe
+ return corners.reduce(function (stat, corner) {
+ var d = (0, Util.distance)(x - corner.x, y - corner.y);
+ if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {
+ return {
+ optimumCorner: corner,
+ optimumDistance: d
+ };
+ }
+
+ return stat;
+ }, {
+ optimumDistance: closest ? Infinity : -Infinity,
+ optimumCorner: null
+ }).optimumCorner;
+};
+
+var calculateRadius = function calculateRadius(extent, shape, center, radius, bounds) {
+ var x = center.x;
+ var y = center.y;
+ var rx = 0;
+ var ry = 0;
+
+ switch (extent) {
+ case 'closest-side':
+ // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.
+ // If the shape is an ellipse, it exactly meets the closest side in each dimension.
+ if (shape === RADIAL_GRADIENT_SHAPE.CIRCLE) {
+ rx = ry = Math.min(Math.abs(x), Math.abs(x - bounds.width), Math.abs(y), Math.abs(y - bounds.height));
+ } else if (shape === RADIAL_GRADIENT_SHAPE.ELLIPSE) {
+ rx = Math.min(Math.abs(x), Math.abs(x - bounds.width));
+ ry = Math.min(Math.abs(y), Math.abs(y - bounds.height));
+ }
+ break;
+
+ case 'closest-corner':
+ // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.
+ // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.
+ if (shape === RADIAL_GRADIENT_SHAPE.CIRCLE) {
+ rx = ry = Math.min((0, Util.distance)(x, y), (0, Util.distance)(x, y - bounds.height), (0, Util.distance)(x - bounds.width, y), (0, Util.distance)(x - bounds.width, y - bounds.height));
+ } else if (shape === RADIAL_GRADIENT_SHAPE.ELLIPSE) {
+ // Compute the ratio ry/rx (which is to be the same as for "closest-side")
+ var c = Math.min(Math.abs(y), Math.abs(y - bounds.height)) / Math.min(Math.abs(x), Math.abs(x - bounds.width));
+ var corner = findCorner(bounds, x, y, true);
+ rx = (0, Util.distance)(corner.x - x, (corner.y - y) / c);
+ ry = c * rx;
+ }
+ break;
+
+ case 'farthest-side':
+ // Same as closest-side, except the ending shape is sized based on the farthest side(s)
+ if (shape === RADIAL_GRADIENT_SHAPE.CIRCLE) {
+ rx = ry = Math.max(Math.abs(x), Math.abs(x - bounds.width), Math.abs(y), Math.abs(y - bounds.height));
+ } else if (shape === RADIAL_GRADIENT_SHAPE.ELLIPSE) {
+ rx = Math.max(Math.abs(x), Math.abs(x - bounds.width));
+ ry = Math.max(Math.abs(y), Math.abs(y - bounds.height));
+ }
+ break;
+
+ case 'farthest-corner':
+ // Same as closest-corner, except the ending shape is sized based on the farthest corner.
+ // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.
+ if (shape === RADIAL_GRADIENT_SHAPE.CIRCLE) {
+ rx = ry = Math.max((0, Util.distance)(x, y), (0, Util.distance)(x, y - bounds.height), (0, Util.distance)(x - bounds.width, y), (0, Util.distance)(x - bounds.width, y - bounds.height));
+ } else if (shape === RADIAL_GRADIENT_SHAPE.ELLIPSE) {
+ // Compute the ratio ry/rx (which is to be the same as for "farthest-side")
+ var _c = Math.max(Math.abs(y), Math.abs(y - bounds.height)) / Math.max(Math.abs(x), Math.abs(x - bounds.width));
+ var _corner = findCorner(bounds, x, y, false);
+ rx = (0, Util.distance)(_corner.x - x, (_corner.y - y) / _c);
+ ry = _c * rx;
+ }
+ break;
+
+ default:
+ // pixel or percentage values
+ rx = radius.x || 0;
+ ry = radius.y !== undefined ? radius.y : rx;
+ break;
+ }
+
+ return {
+ x: rx,
+ y: ry
+ };
+};
+
+var transformWebkitRadialGradientArgs = exports.transformWebkitRadialGradientArgs = function transformWebkitRadialGradientArgs(args) {
+ var shape = '';
+ var radius = '';
+ var extent = '';
+ var position = '';
+ var idx = 0;
+
+ var POSITION = /^(left|center|right|\d+(?:px|r?em|%)?)(?:\s+(top|center|bottom|\d+(?:px|r?em|%)?))?$/i;
+ var SHAPE_AND_EXTENT = /^(circle|ellipse)?\s*(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)?$/i;
+ var RADIUS = /^\d+(px|r?em|%)?(?:\s+\d+(px|r?em|%)?)?$/i;
+
+ var matchStartPosition = args[idx].match(POSITION);
+ if (matchStartPosition) {
+ idx++;
+ }
+
+ var matchShapeExtent = args[idx].match(SHAPE_AND_EXTENT);
+ if (matchShapeExtent) {
+ shape = matchShapeExtent[1] || '';
+ extent = matchShapeExtent[2] || '';
+ if (extent === 'contain') {
+ extent = 'closest-side';
+ } else if (extent === 'cover') {
+ extent = 'farthest-corner';
+ }
+ idx++;
+ }
+
+ var matchStartRadius = args[idx].match(RADIUS);
+ if (matchStartRadius) {
+ idx++;
+ }
+
+ var matchEndPosition = args[idx].match(POSITION);
+ if (matchEndPosition) {
+ idx++;
+ }
+
+ var matchEndRadius = args[idx].match(RADIUS);
+ if (matchEndRadius) {
+ idx++;
+ }
+
+ var matchPosition = matchEndPosition || matchStartPosition;
+ if (matchPosition && matchPosition[1]) {
+ position = matchPosition[1] + (/^\d+$/.test(matchPosition[1]) ? 'px' : '');
+ if (matchPosition[2]) {
+ position += ' ' + matchPosition[2] + (/^\d+$/.test(matchPosition[2]) ? 'px' : '');
+ }
+ }
+
+ var matchRadius = matchEndRadius || matchStartRadius;
+ if (matchRadius) {
+ radius = matchRadius[0];
+ if (!matchRadius[1]) {
+ radius += 'px';
+ }
+ }
+
+ if (position && !shape && !radius && !extent) {
+ radius = position;
+ position = '';
+ }
+
+ if (position) {
+ position = 'at ' + position;
+ }
+
+ return [[shape, extent, radius, position].filter(function (s) {
+ return !!s;
+ }).join(' ')].concat(args.slice(idx));
+};
+
+var transformObsoleteColorStops = function transformObsoleteColorStops(args) {
+ return args.map(function (color) {
+ return color.match(FROM_TO_COLORSTOP);
+ })
+ // $FlowFixMe
+ .map(function (v, index) {
+ if (!v) {
+ return args[index];
+ }
+
+ switch (v[1]) {
+ case 'from':
+ return v[4] + ' 0%';
+ case 'to':
+ return v[4] + ' 100%';
+ case 'color-stop':
+ if (v[3] === '%') {
+ return v[4] + ' ' + v[2];
+ }
+ return v[4] + ' ' + parseFloat(v[2]) * 100 + '%';
+ }
+ });
+};
+});
+
+unwrapExports(Gradient);
+var Gradient_1 = Gradient.transformWebkitRadialGradientArgs;
+var Gradient_2 = Gradient.parseGradient;
+var Gradient_3 = Gradient.RadialGradient;
+var Gradient_4 = Gradient.LinearGradient;
+var Gradient_5 = Gradient.RADIAL_GRADIENT_SHAPE;
+var Gradient_6 = Gradient.GRADIENT_TYPE;
+
+var Renderer_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+
+
+
+
+
+
+var _TextContainer2 = _interopRequireDefault(TextContainer_1);
+
+
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Renderer = function () {
+ function Renderer(target, options) {
+ _classCallCheck(this, Renderer);
+
+ this.target = target;
+ this.options = options;
+ target.render(options);
+ }
+
+ _createClass(Renderer, [{
+ key: 'renderNode',
+ value: function renderNode(container) {
+ if (container.isVisible()) {
+ this.renderNodeBackgroundAndBorders(container);
+ this.renderNodeContent(container);
+ }
+ }
+ }, {
+ key: 'renderNodeContent',
+ value: function renderNodeContent(container) {
+ var _this = this;
+
+ var callback = function callback() {
+ if (container.childNodes.length) {
+ container.childNodes.forEach(function (child) {
+ if (child instanceof _TextContainer2.default) {
+ var style = child.parent.style;
+ _this.target.renderTextNode(child.bounds, style.color, style.font, style.textDecoration, style.textShadow);
+ } else {
+ _this.target.drawShape(child, container.style.color);
+ }
+ });
+ }
+
+ if (container.image) {
+ var _image = _this.options.imageStore.get(container.image);
+ if (_image) {
+ var contentBox = (0, Bounds_1.calculateContentBox)(container.bounds, container.style.padding, container.style.border);
+ var _width = typeof _image.width === 'number' && _image.width > 0 ? _image.width : contentBox.width;
+ var _height = typeof _image.height === 'number' && _image.height > 0 ? _image.height : contentBox.height;
+ if (_width > 0 && _height > 0) {
+ _this.target.clip([(0, Bounds_1.calculatePaddingBoxPath)(container.curvedBounds)], function () {
+ _this.target.drawImage(_image, new Bounds_1.Bounds(0, 0, _width, _height), contentBox);
+ });
+ }
+ }
+ }
+ };
+ var paths = container.getClipPaths();
+ if (paths.length) {
+ this.target.clip(paths, callback);
+ } else {
+ callback();
+ }
+ }
+ }, {
+ key: 'renderNodeBackgroundAndBorders',
+ value: function renderNodeBackgroundAndBorders(container) {
+ var _this2 = this;
+
+ var HAS_BACKGROUND = !container.style.background.backgroundColor.isTransparent() || container.style.background.backgroundImage.length;
+
+ var hasRenderableBorders = container.style.border.some(function (border$$2) {
+ return border$$2.borderStyle !== border.BORDER_STYLE.NONE && !border$$2.borderColor.isTransparent();
+ });
+
+ var callback = function callback() {
+ var backgroundPaintingArea = (0, background.calculateBackgroungPaintingArea)(container.curvedBounds, container.style.background.backgroundClip);
+
+ if (HAS_BACKGROUND) {
+ _this2.target.clip([backgroundPaintingArea], function () {
+ if (!container.style.background.backgroundColor.isTransparent()) {
+ _this2.target.fill(container.style.background.backgroundColor);
+ }
+
+ _this2.renderBackgroundImage(container);
+ });
+ }
+
+ container.style.border.forEach(function (border$$2, side) {
+ if (border$$2.borderStyle !== border.BORDER_STYLE.NONE && !border$$2.borderColor.isTransparent()) {
+ _this2.renderBorder(border$$2, side, container.curvedBounds);
+ }
+ });
+ };
+
+ if (HAS_BACKGROUND || hasRenderableBorders) {
+ var paths = container.parent ? container.parent.getClipPaths() : [];
+ if (paths.length) {
+ this.target.clip(paths, callback);
+ } else {
+ callback();
+ }
+ }
+ }
+ }, {
+ key: 'renderBackgroundImage',
+ value: function renderBackgroundImage(container) {
+ var _this3 = this;
+
+ container.style.background.backgroundImage.slice(0).reverse().forEach(function (backgroundImage) {
+ if (backgroundImage.source.method === 'url' && backgroundImage.source.args.length) {
+ _this3.renderBackgroundRepeat(container, backgroundImage);
+ } else if (/gradient/i.test(backgroundImage.source.method)) {
+ _this3.renderBackgroundGradient(container, backgroundImage);
+ }
+ });
+ }
+ }, {
+ key: 'renderBackgroundRepeat',
+ value: function renderBackgroundRepeat(container, background$$2) {
+ var image = this.options.imageStore.get(background$$2.source.args[0]);
+ if (image) {
+ var backgroundPositioningArea = (0, background.calculateBackgroungPositioningArea)(container.style.background.backgroundOrigin, container.bounds, container.style.padding, container.style.border);
+ var backgroundImageSize = (0, background.calculateBackgroundSize)(background$$2, image, backgroundPositioningArea);
+ var position = (0, background.calculateBackgroundPosition)(background$$2.position, backgroundImageSize, backgroundPositioningArea);
+ var _path = (0, background.calculateBackgroundRepeatPath)(background$$2, position, backgroundImageSize, backgroundPositioningArea, container.bounds);
+
+ var _offsetX = Math.round(backgroundPositioningArea.left + position.x);
+ var _offsetY = Math.round(backgroundPositioningArea.top + position.y);
+ this.target.renderRepeat(_path, image, backgroundImageSize, _offsetX, _offsetY);
+ }
+ }
+ }, {
+ key: 'renderBackgroundGradient',
+ value: function renderBackgroundGradient(container, background$$2) {
+ var backgroundPositioningArea = (0, background.calculateBackgroungPositioningArea)(container.style.background.backgroundOrigin, container.bounds, container.style.padding, container.style.border);
+ var backgroundImageSize = (0, background.calculateGradientBackgroundSize)(background$$2, backgroundPositioningArea);
+ var position = (0, background.calculateBackgroundPosition)(background$$2.position, backgroundImageSize, backgroundPositioningArea);
+ var gradientBounds = new Bounds_1.Bounds(Math.round(backgroundPositioningArea.left + position.x), Math.round(backgroundPositioningArea.top + position.y), backgroundImageSize.width, backgroundImageSize.height);
+
+ var gradient = (0, Gradient.parseGradient)(container, background$$2.source, gradientBounds);
+ if (gradient) {
+ switch (gradient.type) {
+ case Gradient.GRADIENT_TYPE.LINEAR_GRADIENT:
+ // $FlowFixMe
+ this.target.renderLinearGradient(gradientBounds, gradient);
+ break;
+ case Gradient.GRADIENT_TYPE.RADIAL_GRADIENT:
+ // $FlowFixMe
+ this.target.renderRadialGradient(gradientBounds, gradient);
+ break;
+ }
+ }
+ }
+ }, {
+ key: 'renderBorder',
+ value: function renderBorder(border$$2, side, curvePoints) {
+ this.target.drawShape((0, Bounds_1.parsePathForBorder)(curvePoints, side), border$$2.borderColor);
+ }
+ }, {
+ key: 'renderStack',
+ value: function renderStack(stack) {
+ var _this4 = this;
+
+ if (stack.container.isVisible()) {
+ var _opacity = stack.getOpacity();
+ if (_opacity !== this._opacity) {
+ this.target.setOpacity(stack.getOpacity());
+ this._opacity = _opacity;
+ }
+
+ var _transform = stack.container.style.transform;
+ if (_transform !== null) {
+ this.target.transform(stack.container.bounds.left + _transform.transformOrigin[0].value, stack.container.bounds.top + _transform.transformOrigin[1].value, _transform.transform, function () {
+ return _this4.renderStackContent(stack);
+ });
+ } else {
+ this.renderStackContent(stack);
+ }
+ }
+ }
+ }, {
+ key: 'renderStackContent',
+ value: function renderStackContent(stack) {
+ var _splitStackingContext = splitStackingContexts(stack),
+ _splitStackingContext2 = _slicedToArray(_splitStackingContext, 5),
+ negativeZIndex = _splitStackingContext2[0],
+ zeroOrAutoZIndexOrTransformedOrOpacity = _splitStackingContext2[1],
+ positiveZIndex = _splitStackingContext2[2],
+ nonPositionedFloats = _splitStackingContext2[3],
+ nonPositionedInlineLevel = _splitStackingContext2[4];
+
+ var _splitDescendants = splitDescendants(stack),
+ _splitDescendants2 = _slicedToArray(_splitDescendants, 2),
+ inlineLevel = _splitDescendants2[0],
+ nonInlineLevel = _splitDescendants2[1];
+
+ // https://www.w3.org/TR/css-position-3/#painting-order
+ // 1. the background and borders of the element forming the stacking context.
+
+
+ this.renderNodeBackgroundAndBorders(stack.container);
+ // 2. the child stacking contexts with negative stack levels (most negative first).
+ negativeZIndex.sort(sortByZIndex).forEach(this.renderStack, this);
+ // 3. For all its in-flow, non-positioned, block-level descendants in tree order:
+ this.renderNodeContent(stack.container);
+ nonInlineLevel.forEach(this.renderNode, this);
+ // 4. All non-positioned floating descendants, in tree order. For each one of these,
+ // treat the element as if it created a new stacking context, but any positioned descendants and descendants
+ // which actually create a new stacking context should be considered part of the parent stacking context,
+ // not this new one.
+ nonPositionedFloats.forEach(this.renderStack, this);
+ // 5. the in-flow, inline-level, non-positioned descendants, including inline tables and inline blocks.
+ nonPositionedInlineLevel.forEach(this.renderStack, this);
+ inlineLevel.forEach(this.renderNode, this);
+ // 6. All positioned, opacity or transform descendants, in tree order that fall into the following categories:
+ // All positioned descendants with 'z-index: auto' or 'z-index: 0', in tree order.
+ // For those with 'z-index: auto', treat the element as if it created a new stacking context,
+ // but any positioned descendants and descendants which actually create a new stacking context should be
+ // considered part of the parent stacking context, not this new one. For those with 'z-index: 0',
+ // treat the stacking context generated atomically.
+ //
+ // All opacity descendants with opacity less than 1
+ //
+ // All transform descendants with transform other than none
+ zeroOrAutoZIndexOrTransformedOrOpacity.forEach(this.renderStack, this);
+ // 7. Stacking contexts formed by positioned descendants with z-indices greater than or equal to 1 in z-index
+ // order (smallest first) then tree order.
+ positiveZIndex.sort(sortByZIndex).forEach(this.renderStack, this);
+ }
+ }, {
+ key: 'render',
+ value: function render(stack) {
+ if (this.options.backgroundColor) {
+ this.target.rectangle(this.options.x, this.options.y, this.options.width, this.options.height, this.options.backgroundColor);
+ }
+ this.renderStack(stack);
+ var target = this.target.getTarget();
+ return target;
+ }
+ }]);
+
+ return Renderer;
+}();
+
+exports.default = Renderer;
+
+
+var splitDescendants = function splitDescendants(stack) {
+ var inlineLevel = [];
+ var nonInlineLevel = [];
+
+ var length = stack.children.length;
+ for (var i = 0; i < length; i++) {
+ var child = stack.children[i];
+ if (child.isInlineLevel()) {
+ inlineLevel.push(child);
+ } else {
+ nonInlineLevel.push(child);
+ }
+ }
+ return [inlineLevel, nonInlineLevel];
+};
+
+var splitStackingContexts = function splitStackingContexts(stack) {
+ var negativeZIndex = [];
+ var zeroOrAutoZIndexOrTransformedOrOpacity = [];
+ var positiveZIndex = [];
+ var nonPositionedFloats = [];
+ var nonPositionedInlineLevel = [];
+ var length = stack.contexts.length;
+ for (var i = 0; i < length; i++) {
+ var child = stack.contexts[i];
+ if (child.container.isPositioned() || child.container.style.opacity < 1 || child.container.isTransformed()) {
+ if (child.container.style.zIndex.order < 0) {
+ negativeZIndex.push(child);
+ } else if (child.container.style.zIndex.order > 0) {
+ positiveZIndex.push(child);
+ } else {
+ zeroOrAutoZIndexOrTransformedOrOpacity.push(child);
+ }
+ } else {
+ if (child.container.isFloating()) {
+ nonPositionedFloats.push(child);
+ } else {
+ nonPositionedInlineLevel.push(child);
+ }
+ }
+ }
+ return [negativeZIndex, zeroOrAutoZIndexOrTransformedOrOpacity, positiveZIndex, nonPositionedFloats, nonPositionedInlineLevel];
+};
+
+var sortByZIndex = function sortByZIndex(a, b) {
+ if (a.container.style.zIndex.order > b.container.style.zIndex.order) {
+ return 1;
+ } else if (a.container.style.zIndex.order < b.container.style.zIndex.order) {
+ return -1;
+ }
+
+ return a.container.index > b.container.index ? 1 : -1;
+};
+});
+
+unwrapExports(Renderer_1);
+
+var _Proxy = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Proxy = undefined;
+
+
+
+var _Feature2 = _interopRequireDefault(Feature);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var Proxy = exports.Proxy = function Proxy(src, options) {
+ if (!options.proxy) {
+ return Promise.reject(null);
+ }
+ var proxy = options.proxy;
+
+ return new Promise(function (resolve, reject) {
+ var responseType = _Feature2.default.SUPPORT_CORS_XHR && _Feature2.default.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';
+ var xhr = _Feature2.default.SUPPORT_CORS_XHR ? new XMLHttpRequest() : new XDomainRequest();
+ xhr.onload = function () {
+ if (xhr instanceof XMLHttpRequest) {
+ if (xhr.status === 200) {
+ if (responseType === 'text') {
+ resolve(xhr.response);
+ } else {
+ var reader = new FileReader();
+ // $FlowFixMe
+ reader.addEventListener('load', function () {
+ return resolve(reader.result);
+ }, false);
+ // $FlowFixMe
+ reader.addEventListener('error', function (e) {
+ return reject(e);
+ }, false);
+ reader.readAsDataURL(xhr.response);
+ }
+ } else {
+ reject('');
+ }
+ } else {
+ resolve(xhr.responseText);
+ }
+ };
+
+ xhr.onerror = reject;
+ xhr.open('GET', proxy + '?url=' + encodeURIComponent(src) + '&responseType=' + responseType);
+
+ if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {
+ xhr.responseType = responseType;
+ }
+
+ if (options.imageTimeout) {
+ var timeout = options.imageTimeout;
+ xhr.timeout = timeout;
+ xhr.ontimeout = function () {
+ return reject('');
+ };
+ }
+
+ xhr.send();
+ });
+};
+});
+
+unwrapExports(_Proxy);
+var _Proxy_1 = _Proxy.Proxy;
+
+var ResourceLoader_1 = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ResourceStore = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+var _Feature2 = _interopRequireDefault(Feature);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var ResourceLoader = function () {
+ function ResourceLoader(options, logger, window) {
+ _classCallCheck(this, ResourceLoader);
+
+ this.options = options;
+ this._window = window;
+ this.origin = this.getOrigin(window.location.href);
+ this.cache = {};
+ this.logger = logger;
+ this._index = 0;
+ }
+
+ _createClass(ResourceLoader, [{
+ key: 'loadImage',
+ value: function loadImage(src) {
+ var _this = this;
+
+ if (this.hasResourceInCache(src)) {
+ return src;
+ }
+ if (isBlobImage(src)) {
+ this.cache[src] = _loadImage(src, this.options.imageTimeout || 0);
+ return src;
+ }
+
+ if (!isSVG(src) || _Feature2.default.SUPPORT_SVG_DRAWING) {
+ if (this.options.allowTaint === true || isInlineImage(src) || this.isSameOrigin(src)) {
+ return this.addImage(src, src, false);
+ } else if (!this.isSameOrigin(src)) {
+ if (typeof this.options.proxy === 'string') {
+ this.cache[src] = (0, _Proxy.Proxy)(src, this.options).then(function (src) {
+ return _loadImage(src, _this.options.imageTimeout || 0);
+ });
+ return src;
+ } else if (this.options.useCORS === true && _Feature2.default.SUPPORT_CORS_IMAGES) {
+ return this.addImage(src, src, true);
+ }
+ }
+ }
+ }
+ }, {
+ key: 'inlineImage',
+ value: function inlineImage(src) {
+ var _this2 = this;
+
+ if (isInlineImage(src)) {
+ return _loadImage(src, this.options.imageTimeout || 0);
+ }
+ if (this.hasResourceInCache(src)) {
+ return this.cache[src];
+ }
+ if (!this.isSameOrigin(src) && typeof this.options.proxy === 'string') {
+ return this.cache[src] = (0, _Proxy.Proxy)(src, this.options).then(function (src) {
+ return _loadImage(src, _this2.options.imageTimeout || 0);
+ });
+ }
+
+ return this.xhrImage(src);
+ }
+ }, {
+ key: 'xhrImage',
+ value: function xhrImage(src) {
+ var _this3 = this;
+
+ this.cache[src] = new Promise(function (resolve, reject) {
+ var xhr = new XMLHttpRequest();
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ if (xhr.status !== 200) {
+ reject('Failed to fetch image ' + src.substring(0, 256) + ' with status code ' + xhr.status);
+ } else {
+ var reader = new FileReader();
+ reader.addEventListener('load', function () {
+ // $FlowFixMe
+ var result = reader.result;
+ resolve(result);
+ }, false);
+ reader.addEventListener('error', function (e) {
+ return reject(e);
+ }, false);
+ reader.readAsDataURL(xhr.response);
+ }
+ }
+ };
+ xhr.responseType = 'blob';
+ if (_this3.options.imageTimeout) {
+ var timeout = _this3.options.imageTimeout;
+ xhr.timeout = timeout;
+ xhr.ontimeout = function () {
+ return reject('');
+ };
+ }
+ xhr.open('GET', src, true);
+ xhr.send();
+ }).then(function (src) {
+ return _loadImage(src, _this3.options.imageTimeout || 0);
+ });
+
+ return this.cache[src];
+ }
+ }, {
+ key: 'loadCanvas',
+ value: function loadCanvas(node) {
+ var key = String(this._index++);
+ this.cache[key] = Promise.resolve(node);
+ return key;
+ }
+ }, {
+ key: 'hasResourceInCache',
+ value: function hasResourceInCache(key) {
+ return typeof this.cache[key] !== 'undefined';
+ }
+ }, {
+ key: 'addImage',
+ value: function addImage(key, src, useCORS) {
+ var _this4 = this;
+
+ var imageLoadHandler = function imageLoadHandler(supportsDataImages) {
+ return new Promise(function (resolve, reject) {
+ var img = new Image();
+ img.onload = function () {
+ return resolve(img);
+ };
+ //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous
+ if (!supportsDataImages || useCORS) {
+ img.crossOrigin = 'anonymous';
+ }
+
+ img.onerror = reject;
+ img.src = src;
+ if (img.complete === true) {
+ // Inline XML images may fail to parse, throwing an Error later on
+ setTimeout(function () {
+ resolve(img);
+ }, 500);
+ }
+ if (_this4.options.imageTimeout) {
+ var timeout = _this4.options.imageTimeout;
+ setTimeout(function () {
+ return reject('');
+ }, timeout);
+ }
+ });
+ };
+
+ this.cache[key] = isInlineBase64Image(src) && !isSVG(src) ? // $FlowFixMe
+ _Feature2.default.SUPPORT_BASE64_DRAWING(src).then(imageLoadHandler) : imageLoadHandler(true);
+ return key;
+ }
+ }, {
+ key: 'isSameOrigin',
+ value: function isSameOrigin(url) {
+ return this.getOrigin(url) === this.origin;
+ }
+ }, {
+ key: 'getOrigin',
+ value: function getOrigin(url) {
+ var link = this._link || (this._link = this._window.document.createElement('a'));
+ link.href = url;
+ link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/
+ return link.protocol + link.hostname + link.port;
+ }
+ }, {
+ key: 'ready',
+ value: function ready() {
+ var _this5 = this;
+
+ var keys = Object.keys(this.cache);
+ var values = keys.map(function (str) {
+ return _this5.cache[str].catch(function (e) {
+ return null;
+ });
+ });
+ return Promise.all(values).then(function (images) {
+ return new ResourceStore(keys, images);
+ });
+ }
+ }]);
+
+ return ResourceLoader;
+}();
+
+exports.default = ResourceLoader;
+
+var ResourceStore = exports.ResourceStore = function () {
+ function ResourceStore(keys, resources) {
+ _classCallCheck(this, ResourceStore);
+
+ this._keys = keys;
+ this._resources = resources;
+ }
+
+ _createClass(ResourceStore, [{
+ key: 'get',
+ value: function get(key) {
+ var index = this._keys.indexOf(key);
+ return index === -1 ? null : this._resources[index];
+ }
+ }]);
+
+ return ResourceStore;
+}();
+
+var INLINE_SVG = /^data:image\/svg\+xml/i;
+var INLINE_BASE64 = /^data:image\/.*;base64,/i;
+var INLINE_IMG = /^data:image\/.*/i;
+
+var isInlineImage = function isInlineImage(src) {
+ return INLINE_IMG.test(src);
+};
+var isInlineBase64Image = function isInlineBase64Image(src) {
+ return INLINE_BASE64.test(src);
+};
+var isBlobImage = function isBlobImage(src) {
+ return src.substr(0, 4) === 'blob';
+};
+
+var isSVG = function isSVG(src) {
+ return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src);
+};
+
+var _loadImage = function _loadImage(src, timeout) {
+ return new Promise(function (resolve, reject) {
+ var img = new Image();
+ img.onload = function () {
+ return resolve(img);
+ };
+ img.onerror = reject;
+ img.src = src;
+ if (img.complete === true) {
+ // Inline XML images may fail to parse, throwing an Error later on
+ setTimeout(function () {
+ resolve(img);
+ }, 500);
+ }
+ if (timeout) {
+ setTimeout(function () {
+ return reject('');
+ }, timeout);
+ }
+ });
+};
+});
+
+unwrapExports(ResourceLoader_1);
+var ResourceLoader_2 = ResourceLoader_1.ResourceStore;
+
+var PseudoNodeContent = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.parseContent = exports.resolvePseudoContent = exports.popCounters = exports.parseCounterReset = exports.TOKEN_TYPE = exports.PSEUDO_CONTENT_ITEM_TYPE = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+
+
+
+
+var PSEUDO_CONTENT_ITEM_TYPE = exports.PSEUDO_CONTENT_ITEM_TYPE = {
+ TEXT: 0,
+ IMAGE: 1
+};
+
+var TOKEN_TYPE = exports.TOKEN_TYPE = {
+ STRING: 0,
+ ATTRIBUTE: 1,
+ URL: 2,
+ COUNTER: 3,
+ COUNTERS: 4,
+ OPENQUOTE: 5,
+ CLOSEQUOTE: 6
+};
+
+var parseCounterReset = exports.parseCounterReset = function parseCounterReset(style, data) {
+ if (!style || !style.counterReset || style.counterReset === 'none') {
+ return [];
+ }
+
+ var counterNames = [];
+ var counterResets = style.counterReset.split(/\s*,\s*/);
+ var lenCounterResets = counterResets.length;
+
+ for (var i = 0; i < lenCounterResets; i++) {
+ var _counterResets$i$spli = counterResets[i].split(/\s+/),
+ _counterResets$i$spli2 = _slicedToArray(_counterResets$i$spli, 2),
+ counterName = _counterResets$i$spli2[0],
+ initialValue = _counterResets$i$spli2[1];
+
+ counterNames.push(counterName);
+ var counter = data.counters[counterName];
+ if (!counter) {
+ counter = data.counters[counterName] = [];
+ }
+ counter.push(parseInt(initialValue || 0, 10));
+ }
+
+ return counterNames;
+};
+
+var popCounters = exports.popCounters = function popCounters(counterNames, data) {
+ var lenCounters = counterNames.length;
+ for (var i = 0; i < lenCounters; i++) {
+ data.counters[counterNames[i]].pop();
+ }
+};
+
+var resolvePseudoContent = exports.resolvePseudoContent = function resolvePseudoContent(node, style, data) {
+ if (!style || !style.content || style.content === 'none' || style.content === '-moz-alt-content' || style.display === 'none') {
+ return null;
+ }
+
+ var tokens = parseContent(style.content);
+
+ var len = tokens.length;
+ var contentItems = [];
+ var s = '';
+
+ // increment the counter (if there is a "counter-increment" declaration)
+ var counterIncrement = style.counterIncrement;
+ if (counterIncrement && counterIncrement !== 'none') {
+ var _counterIncrement$spl = counterIncrement.split(/\s+/),
+ _counterIncrement$spl2 = _slicedToArray(_counterIncrement$spl, 2),
+ counterName = _counterIncrement$spl2[0],
+ incrementValue = _counterIncrement$spl2[1];
+
+ var counter = data.counters[counterName];
+ if (counter) {
+ counter[counter.length - 1] += incrementValue === undefined ? 1 : parseInt(incrementValue, 10);
+ }
+ }
+
+ // build the content string
+ for (var i = 0; i < len; i++) {
+ var token = tokens[i];
+ switch (token.type) {
+ case TOKEN_TYPE.STRING:
+ s += token.value || '';
+ break;
+
+ case TOKEN_TYPE.ATTRIBUTE:
+ if (node instanceof HTMLElement && token.value) {
+ s += node.getAttribute(token.value) || '';
+ }
+ break;
+
+ case TOKEN_TYPE.COUNTER:
+ var _counter = data.counters[token.name || ''];
+ if (_counter) {
+ s += formatCounterValue([_counter[_counter.length - 1]], '', token.format);
+ }
+ break;
+
+ case TOKEN_TYPE.COUNTERS:
+ var _counters = data.counters[token.name || ''];
+ if (_counters) {
+ s += formatCounterValue(_counters, token.glue, token.format);
+ }
+ break;
+
+ case TOKEN_TYPE.OPENQUOTE:
+ s += getQuote(style, true, data.quoteDepth);
+ data.quoteDepth++;
+ break;
+
+ case TOKEN_TYPE.CLOSEQUOTE:
+ data.quoteDepth--;
+ s += getQuote(style, false, data.quoteDepth);
+ break;
+
+ case TOKEN_TYPE.URL:
+ if (s) {
+ contentItems.push({ type: PSEUDO_CONTENT_ITEM_TYPE.TEXT, value: s });
+ s = '';
+ }
+ contentItems.push({ type: PSEUDO_CONTENT_ITEM_TYPE.IMAGE, value: token.value || '' });
+ break;
+ }
+ }
+
+ if (s) {
+ contentItems.push({ type: PSEUDO_CONTENT_ITEM_TYPE.TEXT, value: s });
+ }
+
+ return contentItems;
+};
+
+var parseContent = exports.parseContent = function parseContent(content, cache) {
+ if (cache && cache[content]) {
+ return cache[content];
+ }
+
+ var tokens = [];
+ var len = content.length;
+
+ var isString = false;
+ var isEscaped = false;
+ var isFunction = false;
+ var str = '';
+ var functionName = '';
+ var args = [];
+
+ for (var i = 0; i < len; i++) {
+ var c = content.charAt(i);
+
+ switch (c) {
+ case "'":
+ case '"':
+ if (isEscaped) {
+ str += c;
+ } else {
+ isString = !isString;
+ if (!isFunction && !isString) {
+ tokens.push({ type: TOKEN_TYPE.STRING, value: str });
+ str = '';
+ }
+ }
+ break;
+
+ case '\\':
+ if (isEscaped) {
+ str += c;
+ isEscaped = false;
+ } else {
+ isEscaped = true;
+ }
+ break;
+
+ case '(':
+ if (isString) {
+ str += c;
+ } else {
+ isFunction = true;
+ functionName = str;
+ str = '';
+ args = [];
+ }
+ break;
+
+ case ')':
+ if (isString) {
+ str += c;
+ } else if (isFunction) {
+ if (str) {
+ args.push(str);
+ }
+
+ switch (functionName) {
+ case 'attr':
+ if (args.length > 0) {
+ tokens.push({ type: TOKEN_TYPE.ATTRIBUTE, value: args[0] });
+ }
+ break;
+
+ case 'counter':
+ if (args.length > 0) {
+ var counter = {
+ type: TOKEN_TYPE.COUNTER,
+ name: args[0]
+ };
+ if (args.length > 1) {
+ counter.format = args[1];
+ }
+ tokens.push(counter);
+ }
+ break;
+
+ case 'counters':
+ if (args.length > 0) {
+ var _counters2 = {
+ type: TOKEN_TYPE.COUNTERS,
+ name: args[0]
+ };
+ if (args.length > 1) {
+ _counters2.glue = args[1];
+ }
+ if (args.length > 2) {
+ _counters2.format = args[2];
+ }
+ tokens.push(_counters2);
+ }
+ break;
+
+ case 'url':
+ if (args.length > 0) {
+ tokens.push({ type: TOKEN_TYPE.URL, value: args[0] });
+ }
+ break;
+ }
+
+ isFunction = false;
+ str = '';
+ }
+ break;
+
+ case ',':
+ if (isString) {
+ str += c;
+ } else if (isFunction) {
+ args.push(str);
+ str = '';
+ }
+ break;
+
+ case ' ':
+ case '\t':
+ if (isString) {
+ str += c;
+ } else if (str) {
+ addOtherToken(tokens, str);
+ str = '';
+ }
+ break;
+
+ default:
+ str += c;
+ }
+
+ if (c !== '\\') {
+ isEscaped = false;
+ }
+ }
+
+ if (str) {
+ addOtherToken(tokens, str);
+ }
+
+ if (cache) {
+ cache[content] = tokens;
+ }
+
+ return tokens;
+};
+
+var addOtherToken = function addOtherToken(tokens, identifier) {
+ switch (identifier) {
+ case 'open-quote':
+ tokens.push({ type: TOKEN_TYPE.OPENQUOTE });
+ break;
+ case 'close-quote':
+ tokens.push({ type: TOKEN_TYPE.CLOSEQUOTE });
+ break;
+ }
+};
+
+var getQuote = function getQuote(style, isOpening, quoteDepth) {
+ var quotes = style.quotes ? style.quotes.split(/\s+/) : ["'\"'", "'\"'"];
+ var idx = quoteDepth * 2;
+ if (idx >= quotes.length) {
+ idx = quotes.length - 2;
+ }
+ if (!isOpening) {
+ ++idx;
+ }
+ return quotes[idx].replace(/^["']|["']$/g, '');
+};
+
+var formatCounterValue = function formatCounterValue(counter, glue, format) {
+ var len = counter.length;
+ var result = '';
+
+ for (var i = 0; i < len; i++) {
+ if (i > 0) {
+ result += glue || '';
+ }
+ result += (0, ListItem.createCounterText)(counter[i], (0, listStyle.parseListStyleType)(format || 'decimal'), false);
+ }
+
+ return result;
+};
+});
+
+unwrapExports(PseudoNodeContent);
+var PseudoNodeContent_1 = PseudoNodeContent.parseContent;
+var PseudoNodeContent_2 = PseudoNodeContent.resolvePseudoContent;
+var PseudoNodeContent_3 = PseudoNodeContent.popCounters;
+var PseudoNodeContent_4 = PseudoNodeContent.parseCounterReset;
+var PseudoNodeContent_5 = PseudoNodeContent.TOKEN_TYPE;
+var PseudoNodeContent_6 = PseudoNodeContent.PSEUDO_CONTENT_ITEM_TYPE;
+
+var Clone = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.cloneWindow = exports.DocumentCloner = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+
+
+
+
+
+
+var _ResourceLoader2 = _interopRequireDefault(ResourceLoader_1);
+
+
+
+
+
+
+
+var _CanvasRenderer2 = _interopRequireDefault(CanvasRenderer_1);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';
+
+var DocumentCloner = exports.DocumentCloner = function () {
+ function DocumentCloner(element, options, logger, copyInline, renderer) {
+ _classCallCheck(this, DocumentCloner);
+
+ this.referenceElement = element;
+ this.scrolledElements = [];
+ this.copyStyles = copyInline;
+ this.inlineImages = copyInline;
+ this.logger = logger;
+ this.options = options;
+ this.renderer = renderer;
+ this.resourceLoader = new _ResourceLoader2.default(options, logger, window);
+ this.pseudoContentData = {
+ counters: {},
+ quoteDepth: 0
+ };
+ // $FlowFixMe
+ this.documentElement = this.cloneNode(element.ownerDocument.documentElement);
+ }
+
+ _createClass(DocumentCloner, [{
+ key: 'inlineAllImages',
+ value: function inlineAllImages(node) {
+ var _this = this;
+
+ if (this.inlineImages && node) {
+ var style = node.style;
+ Promise.all((0, background.parseBackgroundImage)(style.backgroundImage).map(function (backgroundImage) {
+ if (backgroundImage.method === 'url') {
+ return _this.resourceLoader.inlineImage(backgroundImage.args[0]).then(function (img) {
+ return img && typeof img.src === 'string' ? 'url("' + img.src + '")' : 'none';
+ }).catch(function (e) {
+
+ });
+ }
+ return Promise.resolve('' + backgroundImage.prefix + backgroundImage.method + '(' + backgroundImage.args.join(',') + ')');
+ })).then(function (backgroundImages) {
+ if (backgroundImages.length > 1) {
+ // TODO Multiple backgrounds somehow broken in Chrome
+ style.backgroundColor = '';
+ }
+ style.backgroundImage = backgroundImages.join(',');
+ });
+
+ if (node instanceof HTMLImageElement) {
+ this.resourceLoader.inlineImage(node.src).then(function (img) {
+ if (img && node instanceof HTMLImageElement && node.parentNode) {
+ var parentNode = node.parentNode;
+ var clonedChild = (0, Util.copyCSSStyles)(node.style, img.cloneNode(false));
+ parentNode.replaceChild(clonedChild, node);
+ }
+ }).catch(function (e) {
+
+ });
+ }
+ }
+ }
+ }, {
+ key: 'inlineFonts',
+ value: function inlineFonts(document) {
+ var _this2 = this;
+
+ return Promise.all(Array.from(document.styleSheets).map(function (sheet) {
+ if (sheet.href) {
+ return fetch(sheet.href).then(function (res) {
+ return res.text();
+ }).then(function (text) {
+ return createStyleSheetFontsFromText(text, sheet.href);
+ }).catch(function (e) {
+ return [];
+ });
+ }
+ return getSheetFonts(sheet, document);
+ })).then(function (fonts) {
+ return fonts.reduce(function (acc, font) {
+ return acc.concat(font);
+ }, []);
+ }).then(function (fonts) {
+ return Promise.all(fonts.map(function (font) {
+ return fetch(font.formats[0].src).then(function (response) {
+ return response.blob();
+ }).then(function (blob) {
+ return new Promise(function (resolve, reject) {
+ var reader = new FileReader();
+ reader.onerror = reject;
+ reader.onload = function () {
+ // $FlowFixMe
+ var result = reader.result;
+ resolve(result);
+ };
+ reader.readAsDataURL(blob);
+ });
+ }).then(function (dataUri) {
+ font.fontFace.setProperty('src', 'url("' + dataUri + '")');
+ return '@font-face {' + font.fontFace.cssText + ' ';
+ });
+ }));
+ }).then(function (fontCss) {
+ var style = document.createElement('style');
+ style.textContent = fontCss.join('\n');
+ _this2.documentElement.appendChild(style);
+ });
+ }
+ }, {
+ key: 'createElementClone',
+ value: function createElementClone(node) {
+ var _this3 = this;
+
+ if (this.copyStyles && node instanceof HTMLCanvasElement) {
+ var img = node.ownerDocument.createElement('img');
+ try {
+ img.src = node.toDataURL();
+ return img;
+ } catch (e) {
+
+ }
+ }
+
+ if (node instanceof HTMLIFrameElement) {
+ var tempIframe = node.cloneNode(false);
+ var iframeKey = generateIframeKey();
+ tempIframe.setAttribute('data-html2canvas-internal-iframe-key', iframeKey);
+
+ var _parseBounds = (0, Bounds_1.parseBounds)(node, 0, 0),
+ width = _parseBounds.width,
+ height = _parseBounds.height;
+
+ this.resourceLoader.cache[iframeKey] = getIframeDocumentElement(node, this.options).then(function (documentElement) {
+ return _this3.renderer(documentElement, {
+ async: _this3.options.async,
+ allowTaint: _this3.options.allowTaint,
+ backgroundColor: '#ffffff',
+ canvas: null,
+ imageTimeout: _this3.options.imageTimeout,
+ logging: _this3.options.logging,
+ proxy: _this3.options.proxy,
+ removeContainer: _this3.options.removeContainer,
+ scale: _this3.options.scale,
+ foreignObjectRendering: _this3.options.foreignObjectRendering,
+ useCORS: _this3.options.useCORS,
+ target: new _CanvasRenderer2.default(),
+ width: width,
+ height: height,
+ x: 0,
+ y: 0,
+ windowWidth: documentElement.ownerDocument.defaultView.innerWidth,
+ windowHeight: documentElement.ownerDocument.defaultView.innerHeight,
+ scrollX: documentElement.ownerDocument.defaultView.pageXOffset,
+ scrollY: documentElement.ownerDocument.defaultView.pageYOffset
+ }, _this3.logger.child(iframeKey));
+ }).then(function (canvas) {
+ return new Promise(function (resolve, reject) {
+ var iframeCanvas = document.createElement('img');
+ iframeCanvas.onload = function () {
+ return resolve(canvas);
+ };
+ iframeCanvas.onerror = reject;
+ iframeCanvas.src = canvas.toDataURL();
+ if (tempIframe.parentNode) {
+ tempIframe.parentNode.replaceChild((0, Util.copyCSSStyles)(node.ownerDocument.defaultView.getComputedStyle(node), iframeCanvas), tempIframe);
+ }
+ });
+ });
+ return tempIframe;
+ }
+
+ if (node instanceof HTMLStyleElement && node.sheet && node.sheet.cssRules) {
+ var css = [].slice.call(node.sheet.cssRules, 0).reduce(function (css, rule) {
+ try {
+ if (rule && rule.cssText) {
+ return css + rule.cssText;
+ }
+ return css;
+ } catch (err) {
+ _this3.logger.log('Unable to access cssText property', rule.name);
+ return css;
+ }
+ }, '');
+ var style = node.cloneNode(false);
+ style.textContent = css;
+ return style;
+ }
+
+ return node.cloneNode(false);
+ }
+ }, {
+ key: 'cloneNode',
+ value: function cloneNode(node) {
+ var clone = node.nodeType === Node.TEXT_NODE ? document.createTextNode(node.nodeValue) : this.createElementClone(node);
+
+ var window = node.ownerDocument.defaultView;
+ var style = node instanceof window.HTMLElement ? window.getComputedStyle(node) : null;
+ var styleBefore = node instanceof window.HTMLElement ? window.getComputedStyle(node, ':before') : null;
+ var styleAfter = node instanceof window.HTMLElement ? window.getComputedStyle(node, ':after') : null;
+
+ if (this.referenceElement === node && clone instanceof window.HTMLElement) {
+ this.clonedReferenceElement = clone;
+ }
+
+ if (clone instanceof window.HTMLBodyElement) {
+ createPseudoHideStyles(clone);
+ }
+
+ var counters = (0, PseudoNodeContent.parseCounterReset)(style, this.pseudoContentData);
+ var contentBefore = (0, PseudoNodeContent.resolvePseudoContent)(node, styleBefore, this.pseudoContentData);
+
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ if (child.nodeType !== Node.ELEMENT_NODE || child.nodeName !== 'SCRIPT' &&
+ // $FlowFixMe
+ !child.hasAttribute(IGNORE_ATTRIBUTE) && (typeof this.options.ignoreElements !== 'function' ||
+ // $FlowFixMe
+ !this.options.ignoreElements(child))) {
+ if (!this.copyStyles || child.nodeName !== 'STYLE') {
+ clone.appendChild(this.cloneNode(child));
+ }
+ }
+ }
+
+ var contentAfter = (0, PseudoNodeContent.resolvePseudoContent)(node, styleAfter, this.pseudoContentData);
+ (0, PseudoNodeContent.popCounters)(counters, this.pseudoContentData);
+
+ if (node instanceof window.HTMLElement && clone instanceof window.HTMLElement) {
+ if (styleBefore) {
+ this.inlineAllImages(inlinePseudoElement(node, clone, styleBefore, contentBefore, PSEUDO_BEFORE));
+ }
+ if (styleAfter) {
+ this.inlineAllImages(inlinePseudoElement(node, clone, styleAfter, contentAfter, PSEUDO_AFTER));
+ }
+ if (style && this.copyStyles && !(node instanceof HTMLIFrameElement)) {
+ (0, Util.copyCSSStyles)(style, clone);
+ }
+ this.inlineAllImages(clone);
+ if (node.scrollTop !== 0 || node.scrollLeft !== 0) {
+ this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);
+ }
+ switch (node.nodeName) {
+ case 'CANVAS':
+ if (!this.copyStyles) {
+ cloneCanvasContents(node, clone);
+ }
+ break;
+ case 'TEXTAREA':
+ case 'SELECT':
+ clone.value = node.value;
+ break;
+ }
+ }
+ return clone;
+ }
+ }]);
+
+ return DocumentCloner;
+}();
+
+var getSheetFonts = function getSheetFonts(sheet, document) {
+ // $FlowFixMe
+ return (sheet.cssRules ? Array.from(sheet.cssRules) : []).filter(function (rule) {
+ return rule.type === CSSRule.FONT_FACE_RULE;
+ }).map(function (rule) {
+ var src = (0, background.parseBackgroundImage)(rule.style.getPropertyValue('src'));
+ var formats = [];
+ for (var i = 0; i < src.length; i++) {
+ if (src[i].method === 'url' && src[i + 1] && src[i + 1].method === 'format') {
+ var a = document.createElement('a');
+ a.href = src[i].args[0];
+ if (document.body) {
+ document.body.appendChild(a);
+ }
+
+ var font = {
+ src: a.href,
+ format: src[i + 1].args[0]
+ };
+ formats.push(font);
+ }
+ }
+
+ return {
+ // TODO select correct format for browser),
+
+ formats: formats.filter(function (font) {
+ return (/^woff/i.test(font.format)
+ );
+ }),
+ fontFace: rule.style
+ };
+ }).filter(function (font) {
+ return font.formats.length;
+ });
+};
+
+var createStyleSheetFontsFromText = function createStyleSheetFontsFromText(text, baseHref) {
+ var doc = document.implementation.createHTMLDocument('');
+ var base = document.createElement('base');
+ // $FlowFixMe
+ base.href = baseHref;
+ var style = document.createElement('style');
+
+ style.textContent = text;
+ if (doc.head) {
+ doc.head.appendChild(base);
+ }
+ if (doc.body) {
+ doc.body.appendChild(style);
+ }
+
+ return style.sheet ? getSheetFonts(style.sheet, doc) : [];
+};
+
+var restoreOwnerScroll = function restoreOwnerScroll(ownerDocument, x, y) {
+ if (ownerDocument.defaultView && (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {
+ ownerDocument.defaultView.scrollTo(x, y);
+ }
+};
+
+var cloneCanvasContents = function cloneCanvasContents(canvas, clonedCanvas) {
+ try {
+ if (clonedCanvas) {
+ clonedCanvas.width = canvas.width;
+ clonedCanvas.height = canvas.height;
+ var ctx = canvas.getContext('2d');
+ var clonedCtx = clonedCanvas.getContext('2d');
+ if (ctx) {
+ clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);
+ } else {
+ clonedCtx.drawImage(canvas, 0, 0);
+ }
+ }
+ } catch (e) {}
+};
+
+var inlinePseudoElement = function inlinePseudoElement(node, clone, style, contentItems, pseudoElt) {
+ if (!style || !style.content || style.content === 'none' || style.content === '-moz-alt-content' || style.display === 'none') {
+ return;
+ }
+
+ var anonymousReplacedElement = clone.ownerDocument.createElement('html2canvaspseudoelement');
+ (0, Util.copyCSSStyles)(style, anonymousReplacedElement);
+
+ if (contentItems) {
+ var len = contentItems.length;
+ for (var i = 0; i < len; i++) {
+ var item = contentItems[i];
+ switch (item.type) {
+ case PseudoNodeContent.PSEUDO_CONTENT_ITEM_TYPE.IMAGE:
+ var img = clone.ownerDocument.createElement('img');
+ img.src = (0, background.parseBackgroundImage)('url(' + item.value + ')')[0].args[0];
+ img.style.opacity = '1';
+ anonymousReplacedElement.appendChild(img);
+ break;
+ case PseudoNodeContent.PSEUDO_CONTENT_ITEM_TYPE.TEXT:
+ anonymousReplacedElement.appendChild(clone.ownerDocument.createTextNode(item.value));
+ break;
+ }
+ }
+ }
+
+ anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + ' ' + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;
+ clone.className += pseudoElt === PSEUDO_BEFORE ? ' ' + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE : ' ' + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;
+ if (pseudoElt === PSEUDO_BEFORE) {
+ clone.insertBefore(anonymousReplacedElement, clone.firstChild);
+ } else {
+ clone.appendChild(anonymousReplacedElement);
+ }
+
+ return anonymousReplacedElement;
+};
+
+var PSEUDO_BEFORE = ':before';
+var PSEUDO_AFTER = ':after';
+var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';
+var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';
+
+var PSEUDO_HIDE_ELEMENT_STYLE = '{\n content: "" !important;\n display: none !important;\n}';
+
+var createPseudoHideStyles = function createPseudoHideStyles(body) {
+ createStyles(body, '.' + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + '\n .' + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE);
+};
+
+var createStyles = function createStyles(body, styles) {
+ var style = body.ownerDocument.createElement('style');
+ style.innerHTML = styles;
+ body.appendChild(style);
+};
+
+var initNode = function initNode(_ref) {
+ var _ref2 = _slicedToArray(_ref, 3),
+ element = _ref2[0],
+ x = _ref2[1],
+ y = _ref2[2];
+
+ element.scrollLeft = x;
+ element.scrollTop = y;
+};
+
+var generateIframeKey = function generateIframeKey() {
+ return Math.ceil(Date.now() + Math.random() * 10000000).toString(16);
+};
+
+var DATA_URI_REGEXP = /^data:text\/(.+);(base64)?,(.*)$/i;
+
+var getIframeDocumentElement = function getIframeDocumentElement(node, options) {
+ try {
+ return Promise.resolve(node.contentWindow.document.documentElement);
+ } catch (e) {
+ return options.proxy ? (0, _Proxy.Proxy)(node.src, options).then(function (html) {
+ var match = html.match(DATA_URI_REGEXP);
+ if (!match) {
+ return Promise.reject();
+ }
+
+ return match[2] === 'base64' ? window.atob(decodeURIComponent(match[3])) : decodeURIComponent(match[3]);
+ }).then(function (html) {
+ return createIframeContainer(node.ownerDocument, (0, Bounds_1.parseBounds)(node, 0, 0)).then(function (cloneIframeContainer) {
+ var cloneWindow = cloneIframeContainer.contentWindow;
+ var documentClone = cloneWindow.document;
+
+ documentClone.open();
+ documentClone.write(html);
+ var iframeLoad = iframeLoader(cloneIframeContainer).then(function () {
+ return documentClone.documentElement;
+ });
+
+ documentClone.close();
+ return iframeLoad;
+ });
+ }) : Promise.reject();
+ }
+};
+
+var createIframeContainer = function createIframeContainer(ownerDocument, bounds) {
+ var cloneIframeContainer = ownerDocument.createElement('iframe');
+
+ cloneIframeContainer.className = 'html2canvas-container';
+ cloneIframeContainer.style.visibility = 'hidden';
+ cloneIframeContainer.style.position = 'fixed';
+ cloneIframeContainer.style.left = '-10000px';
+ cloneIframeContainer.style.top = '0px';
+ cloneIframeContainer.style.border = '0';
+ cloneIframeContainer.width = bounds.width.toString();
+ cloneIframeContainer.height = bounds.height.toString();
+ cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it
+ cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');
+ if (!ownerDocument.body) {
+ return Promise.reject('');
+ }
+
+ ownerDocument.body.appendChild(cloneIframeContainer);
+
+ return Promise.resolve(cloneIframeContainer);
+};
+
+var iframeLoader = function iframeLoader(cloneIframeContainer) {
+ var cloneWindow = cloneIframeContainer.contentWindow;
+ var documentClone = cloneWindow.document;
+
+ return new Promise(function (resolve, reject) {
+ cloneWindow.onload = cloneIframeContainer.onload = documentClone.onreadystatechange = function () {
+ var interval = setInterval(function () {
+ if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {
+ clearInterval(interval);
+ resolve(cloneIframeContainer);
+ }
+ }, 50);
+ };
+ });
+};
+
+var cloneWindow = exports.cloneWindow = function cloneWindow(ownerDocument, bounds, referenceElement, options, logger, renderer) {
+ var cloner = new DocumentCloner(referenceElement, options, logger, false, renderer);
+ var scrollX = ownerDocument.defaultView.pageXOffset;
+ var scrollY = ownerDocument.defaultView.pageYOffset;
+
+ return createIframeContainer(ownerDocument, bounds).then(function (cloneIframeContainer) {
+ var cloneWindow = cloneIframeContainer.contentWindow;
+ var documentClone = cloneWindow.document;
+
+ /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle
+ if window url is about:blank, we can assign the url to current by writing onto the document
+ */
+
+ var iframeLoad = iframeLoader(cloneIframeContainer).then(function () {
+ cloner.scrolledElements.forEach(initNode);
+ cloneWindow.scrollTo(bounds.left, bounds.top);
+ if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) && (cloneWindow.scrollY !== bounds.top || cloneWindow.scrollX !== bounds.left)) {
+ documentClone.documentElement.style.top = -bounds.top + 'px';
+ documentClone.documentElement.style.left = -bounds.left + 'px';
+ documentClone.documentElement.style.position = 'absolute';
+ }
+
+ var result = Promise.resolve([cloneIframeContainer, cloner.clonedReferenceElement, cloner.resourceLoader]);
+
+ var onclone = options.onclone;
+
+ return cloner.clonedReferenceElement instanceof cloneWindow.HTMLElement || cloner.clonedReferenceElement instanceof ownerDocument.defaultView.HTMLElement || cloner.clonedReferenceElement instanceof HTMLElement ? typeof onclone === 'function' ? Promise.resolve().then(function () {
+ return onclone(documentClone);
+ }).then(function () {
+ return result;
+ }) : result : Promise.reject('');
+ });
+
+ documentClone.open();
+ documentClone.write(serializeDoctype(document.doctype) + '<html></html>');
+ // Chrome scrolls the parent document for some reason after the write to the cloned window???
+ restoreOwnerScroll(referenceElement.ownerDocument, scrollX, scrollY);
+ documentClone.replaceChild(documentClone.adoptNode(cloner.documentElement), documentClone.documentElement);
+ documentClone.close();
+
+ return iframeLoad;
+ });
+};
+
+var serializeDoctype = function serializeDoctype(doctype) {
+ var str = '';
+ if (doctype) {
+ str += '<!DOCTYPE ';
+ if (doctype.name) {
+ str += doctype.name;
+ }
+
+ if (doctype.internalSubset) {
+ str += doctype.internalSubset;
+ }
+
+ if (doctype.publicId) {
+ str += '"' + doctype.publicId + '"';
+ }
+
+ if (doctype.systemId) {
+ str += '"' + doctype.systemId + '"';
+ }
+
+ str += '>';
+ }
+
+ return str;
+};
+});
+
+unwrapExports(Clone);
+var Clone_1 = Clone.cloneWindow;
+var Clone_2 = Clone.DocumentCloner;
+
+var Window = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.renderElement = undefined;
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+
+
+var _Logger2 = _interopRequireDefault(Logger_1);
+
+
+
+
+
+var _Renderer2 = _interopRequireDefault(Renderer_1);
+
+
+
+var _ForeignObjectRenderer2 = _interopRequireDefault(ForeignObjectRenderer_1);
+
+
+
+var _Feature2 = _interopRequireDefault(Feature);
+
+
+
+
+
+
+
+
+
+var _Color2 = _interopRequireDefault(Color_1);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var renderElement = exports.renderElement = function renderElement(element, options, logger) {
+ var ownerDocument = element.ownerDocument;
+
+ var windowBounds = new Bounds_1.Bounds(options.scrollX, options.scrollY, options.windowWidth, options.windowHeight);
+
+ // http://www.w3.org/TR/css3-background/#special-backgrounds
+ var documentBackgroundColor = ownerDocument.documentElement ? new _Color2.default(getComputedStyle(ownerDocument.documentElement).backgroundColor) : Color_1.TRANSPARENT;
+ var bodyBackgroundColor = ownerDocument.body ? new _Color2.default(getComputedStyle(ownerDocument.body).backgroundColor) : Color_1.TRANSPARENT;
+
+ var backgroundColor = element === ownerDocument.documentElement ? documentBackgroundColor.isTransparent() ? bodyBackgroundColor.isTransparent() ? options.backgroundColor ? new _Color2.default(options.backgroundColor) : null : bodyBackgroundColor : documentBackgroundColor : options.backgroundColor ? new _Color2.default(options.backgroundColor) : null;
+
+ return (options.foreignObjectRendering ? // $FlowFixMe
+ _Feature2.default.SUPPORT_FOREIGNOBJECT_DRAWING : Promise.resolve(false)).then(function (supportForeignObject) {
+ return supportForeignObject ? function (cloner) {
+ return cloner.inlineFonts(ownerDocument).then(function () {
+ return cloner.resourceLoader.ready();
+ }).then(function () {
+ var renderer = new _ForeignObjectRenderer2.default(cloner.documentElement);
+
+ var defaultView = ownerDocument.defaultView;
+ var scrollX = defaultView.pageXOffset;
+ var scrollY = defaultView.pageYOffset;
+
+ var isDocument = element.tagName === 'HTML' || element.tagName === 'BODY';
+
+ var _ref = isDocument ? (0, Bounds_1.parseDocumentSize)(ownerDocument) : (0, Bounds_1.parseBounds)(element, scrollX, scrollY),
+ width = _ref.width,
+ height = _ref.height,
+ left = _ref.left,
+ top = _ref.top;
+
+ return renderer.render({
+ backgroundColor: backgroundColor,
+ logger: logger,
+ scale: options.scale,
+ x: typeof options.x === 'number' ? options.x : left,
+ y: typeof options.y === 'number' ? options.y : top,
+ width: typeof options.width === 'number' ? options.width : Math.ceil(width),
+ height: typeof options.height === 'number' ? options.height : Math.ceil(height),
+ windowWidth: options.windowWidth,
+ windowHeight: options.windowHeight,
+ scrollX: options.scrollX,
+ scrollY: options.scrollY
+ });
+ });
+ }(new Clone.DocumentCloner(element, options, logger, true, renderElement)) : (0, Clone.cloneWindow)(ownerDocument, windowBounds, element, options, logger, renderElement).then(function (_ref2) {
+ var _ref3 = _slicedToArray(_ref2, 3),
+ container = _ref3[0],
+ clonedElement = _ref3[1],
+ resourceLoader = _ref3[2];
+
+ var stack = (0, NodeParser_1.NodeParser)(clonedElement, resourceLoader, logger);
+ var clonedDocument = clonedElement.ownerDocument;
+
+ if (backgroundColor === stack.container.style.background.backgroundColor) {
+ stack.container.style.background.backgroundColor = Color_1.TRANSPARENT;
+ }
+
+ return resourceLoader.ready().then(function (imageStore) {
+ var fontMetrics = new Font.FontMetrics(clonedDocument);
+ var defaultView = clonedDocument.defaultView;
+ var scrollX = defaultView.pageXOffset;
+ var scrollY = defaultView.pageYOffset;
+
+ var isDocument = clonedElement.tagName === 'HTML' || clonedElement.tagName === 'BODY';
+
+ var _ref4 = isDocument ? (0, Bounds_1.parseDocumentSize)(ownerDocument) : (0, Bounds_1.parseBounds)(clonedElement, scrollX, scrollY),
+ width = _ref4.width,
+ height = _ref4.height,
+ left = _ref4.left,
+ top = _ref4.top;
+
+ var renderOptions = {
+ backgroundColor: backgroundColor,
+ fontMetrics: fontMetrics,
+ imageStore: imageStore,
+ logger: logger,
+ scale: options.scale,
+ x: typeof options.x === 'number' ? options.x : left,
+ y: typeof options.y === 'number' ? options.y : top,
+ width: typeof options.width === 'number' ? options.width : Math.ceil(width),
+ height: typeof options.height === 'number' ? options.height : Math.ceil(height)
+ };
+
+ if (Array.isArray(options.target)) {
+ return Promise.all(options.target.map(function (target) {
+ var renderer = new _Renderer2.default(target, renderOptions);
+ return renderer.render(stack);
+ }));
+ } else {
+ var renderer = new _Renderer2.default(options.target, renderOptions);
+ var canvas = renderer.render(stack);
+ if (options.removeContainer === true) {
+ if (container.parentNode) {
+ container.parentNode.removeChild(container);
+ } else {}
+ }
+
+ return canvas;
+ }
+ });
+ });
+ });
+};
+});
+
+unwrapExports(Window);
+var Window_1 = Window.renderElement;
+
+var npm = createCommonjsModule(function (module) {
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+
+
+var _CanvasRenderer2 = _interopRequireDefault(CanvasRenderer_1);
+
+
+
+var _Logger2 = _interopRequireDefault(Logger_1);
+
+
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var html2canvas = function html2canvas(element, conf) {
+ var config = conf || {};
+ var logger = new _Logger2.default(typeof config.logging === 'boolean' ? config.logging : true);
+ logger.log('html2canvas ' + "$npm_package_version");
+
+ var ownerDocument = element.ownerDocument;
+ if (!ownerDocument) {
+ return Promise.reject('Provided element is not within a Document');
+ }
+ var defaultView = ownerDocument.defaultView;
+
+ var defaultOptions = {
+ async: true,
+ allowTaint: false,
+ backgroundColor: '#ffffff',
+ imageTimeout: 15000,
+ logging: true,
+ proxy: null,
+ removeContainer: true,
+ foreignObjectRendering: false,
+ scale: defaultView.devicePixelRatio || 1,
+ target: new _CanvasRenderer2.default(config.canvas),
+ useCORS: false,
+ windowWidth: defaultView.innerWidth,
+ windowHeight: defaultView.innerHeight,
+ scrollX: defaultView.pageXOffset,
+ scrollY: defaultView.pageYOffset
+ };
+
+ var result = (0, Window.renderElement)(element, _extends({}, defaultOptions, config), logger);
+
+ return result;
+};
+
+html2canvas.CanvasRenderer = _CanvasRenderer2.default;
+
+module.exports = html2canvas;
+});
+
+var html2canvas$1 = unwrapExports(npm);
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
+ return typeof obj;
+} : function (obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+var _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+};
+
+// Determine the type of a variable/object.
+var objType = function objType(obj) {
+ var type = typeof obj === 'undefined' ? 'undefined' : _typeof(obj);
+ if (type === 'undefined') return 'undefined';else if (type === 'string' || obj instanceof String) return 'string';else if (type === 'number' || obj instanceof Number) return 'number';else if (type === 'function' || obj instanceof Function) return 'function';else if (!!obj && obj.constructor === Array) return 'array';else if (obj && obj.nodeType === 1) return 'element';else if (type === 'object') return 'object';else return 'unknown';
+};
+
+// Create an HTML element with optional className, innerHTML, and style.
+var createElement = function createElement(tagName, opt) {
+ var el = document.createElement(tagName);
+ if (opt.className) el.className = opt.className;
+ if (opt.innerHTML) {
+ el.innerHTML = opt.innerHTML;
+ var scripts = el.getElementsByTagName('script');
+ for (var i = scripts.length; i-- > 0; null) {
+ scripts[i].parentNode.removeChild(scripts[i]);
+ }
+ }
+ for (var key in opt.style) {
+ el.style[key] = opt.style[key];
+ }
+ return el;
+};
+
+// Deep-clone a node and preserve contents/properties.
+var cloneNode = function cloneNode(node, javascriptEnabled) {
+ // Recursively clone the node.
+ var clone = node.nodeType === 3 ? document.createTextNode(node.nodeValue) : node.cloneNode(false);
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ if (javascriptEnabled === true || child.nodeType !== 1 || child.nodeName !== 'SCRIPT') {
+ clone.appendChild(cloneNode(child, javascriptEnabled));
+ }
+ }
+
+ if (node.nodeType === 1) {
+ // Preserve contents/properties of special nodes.
+ if (node.nodeName === 'CANVAS') {
+ clone.width = node.width;
+ clone.height = node.height;
+ clone.getContext('2d').drawImage(node, 0, 0);
+ } else if (node.nodeName === 'TEXTAREA' || node.nodeName === 'SELECT') {
+ clone.value = node.value;
+ }
+
+ // Preserve the node's scroll position when it loads.
+ clone.addEventListener('load', function () {
+ clone.scrollTop = node.scrollTop;
+ clone.scrollLeft = node.scrollLeft;
+ }, true);
+ }
+
+ // Return the cloned node.
+ return clone;
+};
+
+// Convert units from px using the conversion value 'k' from jsPDF.
+var unitConvert = function unitConvert(obj, k) {
+ if (objType(obj) === 'number') {
+ return obj * 72 / 96 / k;
+ } else {
+ var newObj = {};
+ for (var key in obj) {
+ newObj[key] = obj[key] * 72 / 96 / k;
+ }
+ return newObj;
+ }
+};
+
+// Convert units to px using the conversion value 'k' from jsPDF.
+var toPx = function toPx(val, k) {
+ return Math.floor(val * k / 72 * 96);
+};
+
+var es6Promise = createCommonjsModule(function (module, exports) {
+/*!
+ * @overview es6-promise - a tiny implementation of Promises/A+.
+ * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
+ * @license Licensed under MIT license
+ * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
+ * @version v4.2.5+7f2b526d
+ */
+
+(function (global, factory) {
+ module.exports = factory();
+}(commonjsGlobal, (function () { function objectOrFunction(x) {
+ var type = typeof x;
+ return x !== null && (type === 'object' || type === 'function');
+}
+
+function isFunction(x) {
+ return typeof x === 'function';
+}
+
+
+
+var _isArray = void 0;
+if (Array.isArray) {
+ _isArray = Array.isArray;
+} else {
+ _isArray = function (x) {
+ return Object.prototype.toString.call(x) === '[object Array]';
+ };
+}
+
+var isArray = _isArray;
+
+var len = 0;
+var vertxNext = void 0;
+var customSchedulerFn = void 0;
+
+var asap = function asap(callback, arg) {
+ queue[len] = callback;
+ queue[len + 1] = arg;
+ len += 2;
+ if (len === 2) {
+ // If len is 2, that means that we need to schedule an async flush.
+ // If additional callbacks are queued before the queue is flushed, they
+ // will be processed by this flush that we are scheduling.
+ if (customSchedulerFn) {
+ customSchedulerFn(flush);
+ } else {
+ scheduleFlush();
+ }
+ }
+};
+
+function setScheduler(scheduleFn) {
+ customSchedulerFn = scheduleFn;
+}
+
+function setAsap(asapFn) {
+ asap = asapFn;
+}
+
+var browserWindow = typeof window !== 'undefined' ? window : undefined;
+var browserGlobal = browserWindow || {};
+var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
+var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
+
+// test for web worker but not in IE10
+var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
+
+// node
+function useNextTick() {
+ // node version 0.10.x displays a deprecation warning when nextTick is used recursively
+ // see https://github.com/cujojs/when/issues/410 for details
+ return function () {
+ return process.nextTick(flush);
+ };
+}
+
+// vertx
+function useVertxTimer() {
+ if (typeof vertxNext !== 'undefined') {
+ return function () {
+ vertxNext(flush);
+ };
+ }
+
+ return useSetTimeout();
+}
+
+function useMutationObserver() {
+ var iterations = 0;
+ var observer = new BrowserMutationObserver(flush);
+ var node = document.createTextNode('');
+ observer.observe(node, { characterData: true });
+
+ return function () {
+ node.data = iterations = ++iterations % 2;
+ };
+}
+
+// web worker
+function useMessageChannel() {
+ var channel = new MessageChannel();
+ channel.port1.onmessage = flush;
+ return function () {
+ return channel.port2.postMessage(0);
+ };
+}
+
+function useSetTimeout() {
+ // Store setTimeout reference so es6-promise will be unaffected by
+ // other code modifying setTimeout (like sinon.useFakeTimers())
+ var globalSetTimeout = setTimeout;
+ return function () {
+ return globalSetTimeout(flush, 1);
+ };
+}
+
+var queue = new Array(1000);
+function flush() {
+ for (var i = 0; i < len; i += 2) {
+ var callback = queue[i];
+ var arg = queue[i + 1];
+
+ callback(arg);
+
+ queue[i] = undefined;
+ queue[i + 1] = undefined;
+ }
+
+ len = 0;
+}
+
+function attemptVertx() {
+ try {
+ var vertx = Function('return this')().require('vertx');
+ vertxNext = vertx.runOnLoop || vertx.runOnContext;
+ return useVertxTimer();
+ } catch (e) {
+ return useSetTimeout();
+ }
+}
+
+var scheduleFlush = void 0;
+// Decide what async method to use to triggering processing of queued callbacks:
+if (isNode) {
+ scheduleFlush = useNextTick();
+} else if (BrowserMutationObserver) {
+ scheduleFlush = useMutationObserver();
+} else if (isWorker) {
+ scheduleFlush = useMessageChannel();
+} else if (browserWindow === undefined && typeof commonjsRequire === 'function') {
+ scheduleFlush = attemptVertx();
+} else {
+ scheduleFlush = useSetTimeout();
+}
+
+function then(onFulfillment, onRejection) {
+ var parent = this;
+
+ var child = new this.constructor(noop);
+
+ if (child[PROMISE_ID] === undefined) {
+ makePromise(child);
+ }
+
+ var _state = parent._state;
+
+
+ if (_state) {
+ var callback = arguments[_state - 1];
+ asap(function () {
+ return invokeCallback(_state, child, callback, parent._result);
+ });
+ } else {
+ subscribe(parent, child, onFulfillment, onRejection);
+ }
+
+ return child;
+}
+
+/**
+ `Promise.resolve` returns a promise that will become resolved with the
+ passed `value`. It is shorthand for the following:
+
+ ```javascript
+ let promise = new Promise(function(resolve, reject){
+ resolve(1);
+ });
+
+ promise.then(function(value){
+ // value === 1
+ });
+ ```
+
+ Instead of writing the above, your code now simply becomes the following:
+
+ ```javascript
+ let promise = Promise.resolve(1);
+
+ promise.then(function(value){
+ // value === 1
+ });
+ ```
+
+ @method resolve
+ @static
+ @param {Any} value value that the returned promise will be resolved with
+ Useful for tooling.
+ @return {Promise} a promise that will become fulfilled with the given
+ `value`
+*/
+function resolve$1(object) {
+ /*jshint validthis:true */
+ var Constructor = this;
+
+ if (object && typeof object === 'object' && object.constructor === Constructor) {
+ return object;
+ }
+
+ var promise = new Constructor(noop);
+ resolve(promise, object);
+ return promise;
+}
+
+var PROMISE_ID = Math.random().toString(36).substring(2);
+
+function noop() {}
+
+var PENDING = void 0;
+var FULFILLED = 1;
+var REJECTED = 2;
+
+var TRY_CATCH_ERROR = { error: null };
+
+function selfFulfillment() {
+ return new TypeError("You cannot resolve a promise with itself");
+}
+
+function cannotReturnOwn() {
+ return new TypeError('A promises callback cannot return that same promise.');
+}
+
+function getThen(promise) {
+ try {
+ return promise.then;
+ } catch (error) {
+ TRY_CATCH_ERROR.error = error;
+ return TRY_CATCH_ERROR;
+ }
+}
+
+function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {
+ try {
+ then$$1.call(value, fulfillmentHandler, rejectionHandler);
+ } catch (e) {
+ return e;
+ }
+}
+
+function handleForeignThenable(promise, thenable, then$$1) {
+ asap(function (promise) {
+ var sealed = false;
+ var error = tryThen(then$$1, thenable, function (value) {
+ if (sealed) {
+ return;
+ }
+ sealed = true;
+ if (thenable !== value) {
+ resolve(promise, value);
+ } else {
+ fulfill(promise, value);
+ }
+ }, function (reason) {
+ if (sealed) {
+ return;
+ }
+ sealed = true;
+
+ reject(promise, reason);
+ }, 'Settle: ' + (promise._label || ' unknown promise'));
+
+ if (!sealed && error) {
+ sealed = true;
+ reject(promise, error);
+ }
+ }, promise);
+}
+
+function handleOwnThenable(promise, thenable) {
+ if (thenable._state === FULFILLED) {
+ fulfill(promise, thenable._result);
+ } else if (thenable._state === REJECTED) {
+ reject(promise, thenable._result);
+ } else {
+ subscribe(thenable, undefined, function (value) {
+ return resolve(promise, value);
+ }, function (reason) {
+ return reject(promise, reason);
+ });
+ }
+}
+
+function handleMaybeThenable(promise, maybeThenable, then$$1) {
+ if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {
+ handleOwnThenable(promise, maybeThenable);
+ } else {
+ if (then$$1 === TRY_CATCH_ERROR) {
+ reject(promise, TRY_CATCH_ERROR.error);
+ TRY_CATCH_ERROR.error = null;
+ } else if (then$$1 === undefined) {
+ fulfill(promise, maybeThenable);
+ } else if (isFunction(then$$1)) {
+ handleForeignThenable(promise, maybeThenable, then$$1);
+ } else {
+ fulfill(promise, maybeThenable);
+ }
+ }
+}
+
+function resolve(promise, value) {
+ if (promise === value) {
+ reject(promise, selfFulfillment());
+ } else if (objectOrFunction(value)) {
+ handleMaybeThenable(promise, value, getThen(value));
+ } else {
+ fulfill(promise, value);
+ }
+}
+
+function publishRejection(promise) {
+ if (promise._onerror) {
+ promise._onerror(promise._result);
+ }
+
+ publish(promise);
+}
+
+function fulfill(promise, value) {
+ if (promise._state !== PENDING) {
+ return;
+ }
+
+ promise._result = value;
+ promise._state = FULFILLED;
+
+ if (promise._subscribers.length !== 0) {
+ asap(publish, promise);
+ }
+}
+
+function reject(promise, reason) {
+ if (promise._state !== PENDING) {
+ return;
+ }
+ promise._state = REJECTED;
+ promise._result = reason;
+
+ asap(publishRejection, promise);
+}
+
+function subscribe(parent, child, onFulfillment, onRejection) {
+ var _subscribers = parent._subscribers;
+ var length = _subscribers.length;
+
+
+ parent._onerror = null;
+
+ _subscribers[length] = child;
+ _subscribers[length + FULFILLED] = onFulfillment;
+ _subscribers[length + REJECTED] = onRejection;
+
+ if (length === 0 && parent._state) {
+ asap(publish, parent);
+ }
+}
+
+function publish(promise) {
+ var subscribers = promise._subscribers;
+ var settled = promise._state;
+
+ if (subscribers.length === 0) {
+ return;
+ }
+
+ var child = void 0,
+ callback = void 0,
+ detail = promise._result;
+
+ for (var i = 0; i < subscribers.length; i += 3) {
+ child = subscribers[i];
+ callback = subscribers[i + settled];
+
+ if (child) {
+ invokeCallback(settled, child, callback, detail);
+ } else {
+ callback(detail);
+ }
+ }
+
+ promise._subscribers.length = 0;
+}
+
+function tryCatch(callback, detail) {
+ try {
+ return callback(detail);
+ } catch (e) {
+ TRY_CATCH_ERROR.error = e;
+ return TRY_CATCH_ERROR;
+ }
+}
+
+function invokeCallback(settled, promise, callback, detail) {
+ var hasCallback = isFunction(callback),
+ value = void 0,
+ error = void 0,
+ succeeded = void 0,
+ failed = void 0;
+
+ if (hasCallback) {
+ value = tryCatch(callback, detail);
+
+ if (value === TRY_CATCH_ERROR) {
+ failed = true;
+ error = value.error;
+ value.error = null;
+ } else {
+ succeeded = true;
+ }
+
+ if (promise === value) {
+ reject(promise, cannotReturnOwn());
+ return;
+ }
+ } else {
+ value = detail;
+ succeeded = true;
+ }
+
+ if (promise._state !== PENDING) {
+ // noop
+ } else if (hasCallback && succeeded) {
+ resolve(promise, value);
+ } else if (failed) {
+ reject(promise, error);
+ } else if (settled === FULFILLED) {
+ fulfill(promise, value);
+ } else if (settled === REJECTED) {
+ reject(promise, value);
+ }
+}
+
+function initializePromise(promise, resolver) {
+ try {
+ resolver(function resolvePromise(value) {
+ resolve(promise, value);
+ }, function rejectPromise(reason) {
+ reject(promise, reason);
+ });
+ } catch (e) {
+ reject(promise, e);
+ }
+}
+
+var id = 0;
+function nextId() {
+ return id++;
+}
+
+function makePromise(promise) {
+ promise[PROMISE_ID] = id++;
+ promise._state = undefined;
+ promise._result = undefined;
+ promise._subscribers = [];
+}
+
+function validationError() {
+ return new Error('Array Methods must be provided an Array');
+}
+
+var Enumerator = function () {
+ function Enumerator(Constructor, input) {
+ this._instanceConstructor = Constructor;
+ this.promise = new Constructor(noop);
+
+ if (!this.promise[PROMISE_ID]) {
+ makePromise(this.promise);
+ }
+
+ if (isArray(input)) {
+ this.length = input.length;
+ this._remaining = input.length;
+
+ this._result = new Array(this.length);
+
+ if (this.length === 0) {
+ fulfill(this.promise, this._result);
+ } else {
+ this.length = this.length || 0;
+ this._enumerate(input);
+ if (this._remaining === 0) {
+ fulfill(this.promise, this._result);
+ }
+ }
+ } else {
+ reject(this.promise, validationError());
+ }
+ }
+
+ Enumerator.prototype._enumerate = function _enumerate(input) {
+ for (var i = 0; this._state === PENDING && i < input.length; i++) {
+ this._eachEntry(input[i], i);
+ }
+ };
+
+ Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {
+ var c = this._instanceConstructor;
+ var resolve$$1 = c.resolve;
+
+
+ if (resolve$$1 === resolve$1) {
+ var _then = getThen(entry);
+
+ if (_then === then && entry._state !== PENDING) {
+ this._settledAt(entry._state, i, entry._result);
+ } else if (typeof _then !== 'function') {
+ this._remaining--;
+ this._result[i] = entry;
+ } else if (c === Promise$1) {
+ var promise = new c(noop);
+ handleMaybeThenable(promise, entry, _then);
+ this._willSettleAt(promise, i);
+ } else {
+ this._willSettleAt(new c(function (resolve$$1) {
+ return resolve$$1(entry);
+ }), i);
+ }
+ } else {
+ this._willSettleAt(resolve$$1(entry), i);
+ }
+ };
+
+ Enumerator.prototype._settledAt = function _settledAt(state, i, value) {
+ var promise = this.promise;
+
+
+ if (promise._state === PENDING) {
+ this._remaining--;
+
+ if (state === REJECTED) {
+ reject(promise, value);
+ } else {
+ this._result[i] = value;
+ }
+ }
+
+ if (this._remaining === 0) {
+ fulfill(promise, this._result);
+ }
+ };
+
+ Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {
+ var enumerator = this;
+
+ subscribe(promise, undefined, function (value) {
+ return enumerator._settledAt(FULFILLED, i, value);
+ }, function (reason) {
+ return enumerator._settledAt(REJECTED, i, reason);
+ });
+ };
+
+ return Enumerator;
+}();
+
+/**
+ `Promise.all` accepts an array of promises, and returns a new promise which
+ is fulfilled with an array of fulfillment values for the passed promises, or
+ rejected with the reason of the first passed promise to be rejected. It casts all
+ elements of the passed iterable to promises as it runs this algorithm.
+
+ Example:
+
+ ```javascript
+ let promise1 = resolve(1);
+ let promise2 = resolve(2);
+ let promise3 = resolve(3);
+ let promises = [ promise1, promise2, promise3 ];
+
+ Promise.all(promises).then(function(array){
+ // The array here would be [ 1, 2, 3 ];
+ });
+ ```
+
+ If any of the `promises` given to `all` are rejected, the first promise
+ that is rejected will be given as an argument to the returned promises's
+ rejection handler. For example:
+
+ Example:
+
+ ```javascript
+ let promise1 = resolve(1);
+ let promise2 = reject(new Error("2"));
+ let promise3 = reject(new Error("3"));
+ let promises = [ promise1, promise2, promise3 ];
+
+ Promise.all(promises).then(function(array){
+ // Code here never runs because there are rejected promises!
+ }, function(error) {
+ // error.message === "2"
+ });
+ ```
+
+ @method all
+ @static
+ @param {Array} entries array of promises
+ @param {String} label optional string for labeling the promise.
+ Useful for tooling.
+ @return {Promise} promise that is fulfilled when all `promises` have been
+ fulfilled, or rejected if any of them become rejected.
+ @static
+*/
+function all(entries) {
+ return new Enumerator(this, entries).promise;
+}
+
+/**
+ `Promise.race` returns a new promise which is settled in the same way as the
+ first passed promise to settle.
+
+ Example:
+
+ ```javascript
+ let promise1 = new Promise(function(resolve, reject){
+ setTimeout(function(){
+ resolve('promise 1');
+ }, 200);
+ });
+
+ let promise2 = new Promise(function(resolve, reject){
+ setTimeout(function(){
+ resolve('promise 2');
+ }, 100);
+ });
+
+ Promise.race([promise1, promise2]).then(function(result){
+ // result === 'promise 2' because it was resolved before promise1
+ // was resolved.
+ });
+ ```
+
+ `Promise.race` is deterministic in that only the state of the first
+ settled promise matters. For example, even if other promises given to the
+ `promises` array argument are resolved, but the first settled promise has
+ become rejected before the other promises became fulfilled, the returned
+ promise will become rejected:
+
+ ```javascript
+ let promise1 = new Promise(function(resolve, reject){
+ setTimeout(function(){
+ resolve('promise 1');
+ }, 200);
+ });
+
+ let promise2 = new Promise(function(resolve, reject){
+ setTimeout(function(){
+ reject(new Error('promise 2'));
+ }, 100);
+ });
+
+ Promise.race([promise1, promise2]).then(function(result){
+ // Code here never runs
+ }, function(reason){
+ // reason.message === 'promise 2' because promise 2 became rejected before
+ // promise 1 became fulfilled
+ });
+ ```
+
+ An example real-world use case is implementing timeouts:
+
+ ```javascript
+ Promise.race([ajax('foo.json'), timeout(5000)])
+ ```
+
+ @method race
+ @static
+ @param {Array} promises array of promises to observe
+ Useful for tooling.
+ @return {Promise} a promise which settles in the same way as the first passed
+ promise to settle.
+*/
+function race(entries) {
+ /*jshint validthis:true */
+ var Constructor = this;
+
+ if (!isArray(entries)) {
+ return new Constructor(function (_, reject) {
+ return reject(new TypeError('You must pass an array to race.'));
+ });
+ } else {
+ return new Constructor(function (resolve, reject) {
+ var length = entries.length;
+ for (var i = 0; i < length; i++) {
+ Constructor.resolve(entries[i]).then(resolve, reject);
+ }
+ });
+ }
+}
+
+/**
+ `Promise.reject` returns a promise rejected with the passed `reason`.
+ It is shorthand for the following:
+
+ ```javascript
+ let promise = new Promise(function(resolve, reject){
+ reject(new Error('WHOOPS'));
+ });
+
+ promise.then(function(value){
+ // Code here doesn't run because the promise is rejected!
+ }, function(reason){
+ // reason.message === 'WHOOPS'
+ });
+ ```
+
+ Instead of writing the above, your code now simply becomes the following:
+
+ ```javascript
+ let promise = Promise.reject(new Error('WHOOPS'));
+
+ promise.then(function(value){
+ // Code here doesn't run because the promise is rejected!
+ }, function(reason){
+ // reason.message === 'WHOOPS'
+ });
+ ```
+
+ @method reject
+ @static
+ @param {Any} reason value that the returned promise will be rejected with.
+ Useful for tooling.
+ @return {Promise} a promise rejected with the given `reason`.
+*/
+function reject$1(reason) {
+ /*jshint validthis:true */
+ var Constructor = this;
+ var promise = new Constructor(noop);
+ reject(promise, reason);
+ return promise;
+}
+
+function needsResolver() {
+ throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
+}
+
+function needsNew() {
+ throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
+}
+
+/**
+ Promise objects represent the eventual result of an asynchronous operation. The
+ primary way of interacting with a promise is through its `then` method, which
+ registers callbacks to receive either a promise's eventual value or the reason
+ why the promise cannot be fulfilled.
+
+ Terminology
+ -----------
+
+ - `promise` is an object or function with a `then` method whose behavior conforms to this specification.
+ - `thenable` is an object or function that defines a `then` method.
+ - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
+ - `exception` is a value that is thrown using the throw statement.
+ - `reason` is a value that indicates why a promise was rejected.
+ - `settled` the final resting state of a promise, fulfilled or rejected.
+
+ A promise can be in one of three states: pending, fulfilled, or rejected.
+
+ Promises that are fulfilled have a fulfillment value and are in the fulfilled
+ state. Promises that are rejected have a rejection reason and are in the
+ rejected state. A fulfillment value is never a thenable.
+
+ Promises can also be said to *resolve* a value. If this value is also a
+ promise, then the original promise's settled state will match the value's
+ settled state. So a promise that *resolves* a promise that rejects will
+ itself reject, and a promise that *resolves* a promise that fulfills will
+ itself fulfill.
+
+
+ Basic Usage:
+ ------------
+
+ ```js
+ let promise = new Promise(function(resolve, reject) {
+ // on success
+ resolve(value);
+
+ // on failure
+ reject(reason);
+ });
+
+ promise.then(function(value) {
+ // on fulfillment
+ }, function(reason) {
+ // on rejection
+ });
+ ```
+
+ Advanced Usage:
+ ---------------
+
+ Promises shine when abstracting away asynchronous interactions such as
+ `XMLHttpRequest`s.
+
+ ```js
+ function getJSON(url) {
+ return new Promise(function(resolve, reject){
+ let xhr = new XMLHttpRequest();
+
+ xhr.open('GET', url);
+ xhr.onreadystatechange = handler;
+ xhr.responseType = 'json';
+ xhr.setRequestHeader('Accept', 'application/json');
+ xhr.send();
+
+ function handler() {
+ if (this.readyState === this.DONE) {
+ if (this.status === 200) {
+ resolve(this.response);
+ } else {
+ reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
+ }
+ }
+ };
+ });
+ }
+
+ getJSON('/posts.json').then(function(json) {
+ // on fulfillment
+ }, function(reason) {
+ // on rejection
+ });
+ ```
+
+ Unlike callbacks, promises are great composable primitives.
+
+ ```js
+ Promise.all([
+ getJSON('/posts'),
+ getJSON('/comments')
+ ]).then(function(values){
+ values[0] // => postsJSON
+ values[1] // => commentsJSON
+
+ return values;
+ });
+ ```
+
+ @class Promise
+ @param {Function} resolver
+ Useful for tooling.
+ @constructor
+*/
+
+var Promise$1 = function () {
+ function Promise(resolver) {
+ this[PROMISE_ID] = nextId();
+ this._result = this._state = undefined;
+ this._subscribers = [];
+
+ if (noop !== resolver) {
+ typeof resolver !== 'function' && needsResolver();
+ this instanceof Promise ? initializePromise(this, resolver) : needsNew();
+ }
+ }
+
+ /**
+ The primary way of interacting with a promise is through its `then` method,
+ which registers callbacks to receive either a promise's eventual value or the
+ reason why the promise cannot be fulfilled.
+ ```js
+ findUser().then(function(user){
+ // user is available
+ }, function(reason){
+ // user is unavailable, and you are given the reason why
+ });
+ ```
+ Chaining
+ --------
+ The return value of `then` is itself a promise. This second, 'downstream'
+ promise is resolved with the return value of the first promise's fulfillment
+ or rejection handler, or rejected if the handler throws an exception.
+ ```js
+ findUser().then(function (user) {
+ return user.name;
+ }, function (reason) {
+ return 'default name';
+ }).then(function (userName) {
+ // If `findUser` fulfilled, `userName` will be the user's name, otherwise it
+ // will be `'default name'`
+ });
+ findUser().then(function (user) {
+ throw new Error('Found user, but still unhappy');
+ }, function (reason) {
+ throw new Error('`findUser` rejected and we're unhappy');
+ }).then(function (value) {
+ // never reached
+ }, function (reason) {
+ // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
+ // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
+ });
+ ```
+ If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
+ ```js
+ findUser().then(function (user) {
+ throw new PedagogicalException('Upstream error');
+ }).then(function (value) {
+ // never reached
+ }).then(function (value) {
+ // never reached
+ }, function (reason) {
+ // The `PedgagocialException` is propagated all the way down to here
+ });
+ ```
+ Assimilation
+ ------------
+ Sometimes the value you want to propagate to a downstream promise can only be
+ retrieved asynchronously. This can be achieved by returning a promise in the
+ fulfillment or rejection handler. The downstream promise will then be pending
+ until the returned promise is settled. This is called *assimilation*.
+ ```js
+ findUser().then(function (user) {
+ return findCommentsByAuthor(user);
+ }).then(function (comments) {
+ // The user's comments are now available
+ });
+ ```
+ If the assimliated promise rejects, then the downstream promise will also reject.
+ ```js
+ findUser().then(function (user) {
+ return findCommentsByAuthor(user);
+ }).then(function (comments) {
+ // If `findCommentsByAuthor` fulfills, we'll have the value here
+ }, function (reason) {
+ // If `findCommentsByAuthor` rejects, we'll have the reason here
+ });
+ ```
+ Simple Example
+ --------------
+ Synchronous Example
+ ```javascript
+ let result;
+ try {
+ result = findResult();
+ // success
+ } catch(reason) {
+ // failure
+ }
+ ```
+ Errback Example
+ ```js
+ findResult(function(result, err){
+ if (err) {
+ // failure
+ } else {
+ // success
+ }
+ });
+ ```
+ Promise Example;
+ ```javascript
+ findResult().then(function(result){
+ // success
+ }, function(reason){
+ // failure
+ });
+ ```
+ Advanced Example
+ --------------
+ Synchronous Example
+ ```javascript
+ let author, books;
+ try {
+ author = findAuthor();
+ books = findBooksByAuthor(author);
+ // success
+ } catch(reason) {
+ // failure
+ }
+ ```
+ Errback Example
+ ```js
+ function foundBooks(books) {
+ }
+ function failure(reason) {
+ }
+ findAuthor(function(author, err){
+ if (err) {
+ failure(err);
+ // failure
+ } else {
+ try {
+ findBoooksByAuthor(author, function(books, err) {
+ if (err) {
+ failure(err);
+ } else {
+ try {
+ foundBooks(books);
+ } catch(reason) {
+ failure(reason);
+ }
+ }
+ });
+ } catch(error) {
+ failure(err);
+ }
+ // success
+ }
+ });
+ ```
+ Promise Example;
+ ```javascript
+ findAuthor().
+ then(findBooksByAuthor).
+ then(function(books){
+ // found books
+ }).catch(function(reason){
+ // something went wrong
+ });
+ ```
+ @method then
+ @param {Function} onFulfilled
+ @param {Function} onRejected
+ Useful for tooling.
+ @return {Promise}
+ */
+
+ /**
+ `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
+ as the catch block of a try/catch statement.
+ ```js
+ function findAuthor(){
+ throw new Error('couldn't find that author');
+ }
+ // synchronous
+ try {
+ findAuthor();
+ } catch(reason) {
+ // something went wrong
+ }
+ // async with promises
+ findAuthor().catch(function(reason){
+ // something went wrong
+ });
+ ```
+ @method catch
+ @param {Function} onRejection
+ Useful for tooling.
+ @return {Promise}
+ */
+
+
+ Promise.prototype.catch = function _catch(onRejection) {
+ return this.then(null, onRejection);
+ };
+
+ /**
+ `finally` will be invoked regardless of the promise's fate just as native
+ try/catch/finally behaves
+
+ Synchronous example:
+
+ ```js
+ findAuthor() {
+ if (Math.random() > 0.5) {
+ throw new Error();
+ }
+ return new Author();
+ }
+
+ try {
+ return findAuthor(); // succeed or fail
+ } catch(error) {
+ return findOtherAuther();
+ } finally {
+ // always runs
+ // doesn't affect the return value
+ }
+ ```
+
+ Asynchronous example:
+
+ ```js
+ findAuthor().catch(function(reason){
+ return findOtherAuther();
+ }).finally(function(){
+ // author was either found, or not
+ });
+ ```
+
+ @method finally
+ @param {Function} callback
+ @return {Promise}
+ */
+
+
+ Promise.prototype.finally = function _finally(callback) {
+ var promise = this;
+ var constructor = promise.constructor;
+
+ if (isFunction(callback)) {
+ return promise.then(function (value) {
+ return constructor.resolve(callback()).then(function () {
+ return value;
+ });
+ }, function (reason) {
+ return constructor.resolve(callback()).then(function () {
+ throw reason;
+ });
+ });
+ }
+
+ return promise.then(callback, callback);
+ };
+
+ return Promise;
+}();
+
+Promise$1.prototype.then = then;
+Promise$1.all = all;
+Promise$1.race = race;
+Promise$1.resolve = resolve$1;
+Promise$1.reject = reject$1;
+Promise$1._setScheduler = setScheduler;
+Promise$1._setAsap = setAsap;
+Promise$1._asap = asap;
+
+/*global self*/
+function polyfill() {
+ var local = void 0;
+
+ if (typeof commonjsGlobal !== 'undefined') {
+ local = commonjsGlobal;
+ } else if (typeof self !== 'undefined') {
+ local = self;
+ } else {
+ try {
+ local = Function('return this')();
+ } catch (e) {
+ throw new Error('polyfill failed because global object is unavailable in this environment');
+ }
+ }
+
+ var P = local.Promise;
+
+ if (P) {
+ var promiseToString = null;
+ try {
+ promiseToString = Object.prototype.toString.call(P.resolve());
+ } catch (e) {
+ // silently ignored
+ }
+
+ if (promiseToString === '[object Promise]' && !P.cast) {
+ return;
+ }
+ }
+
+ local.Promise = Promise$1;
+}
+
+// Strange compat..
+Promise$1.polyfill = polyfill;
+Promise$1.Promise = Promise$1;
+
+return Promise$1;
+
+})));
+
+
+
+
+});
+
+var Promise$1 = es6Promise.Promise;
+
+/* ----- CONSTRUCTOR ----- */
+
+var Worker = function Worker(opt) {
+ // Create the root parent for the proto chain, and the starting Worker.
+ var root = _extends(Worker.convert(Promise$1.resolve()), JSON.parse(JSON.stringify(Worker.template)));
+ var self = Worker.convert(Promise$1.resolve(), root);
+
+ // Set progress, optional settings, and return.
+ self = self.setProgress(1, Worker, 1, [Worker]);
+ self = self.set(opt);
+ return self;
+};
+
+// Boilerplate for subclassing Promise.
+Worker.prototype = Object.create(Promise$1.prototype);
+Worker.prototype.constructor = Worker;
+
+// Converts/casts promises into Workers.
+Worker.convert = function convert(promise, inherit) {
+ // Uses prototypal inheritance to receive changes made to ancestors' properties.
+ promise.__proto__ = inherit || Worker.prototype;
+ return promise;
+};
+
+Worker.template = {
+ prop: {
+ src: null,
+ container: null,
+ overlay: null,
+ canvas: null,
+ img: null,
+ pdf: null,
+ pageSize: null
+ },
+ progress: {
+ val: 0,
+ state: null,
+ n: 0,
+ stack: []
+ },
+ opt: {
+ filename: 'file.pdf',
+ margin: [0, 0, 0, 0],
+ image: { type: 'jpeg', quality: 0.95 },
+ enableLinks: true,
+ html2canvas: {},
+ jsPDF: {}
+ }
+};
+
+/* ----- FROM / TO ----- */
+
+Worker.prototype.from = function from(src, type) {
+ function getType(src) {
+ switch (objType(src)) {
+ case 'string':
+ return 'string';
+ case 'element':
+ return src.nodeName.toLowerCase === 'canvas' ? 'canvas' : 'element';
+ default:
+ return 'unknown';
+ }
+ }
+
+ return this.then(function from_main() {
+ type = type || getType(src);
+ switch (type) {
+ case 'string':
+ return this.set({ src: createElement('div', { innerHTML: src }) });
+ case 'element':
+ return this.set({ src: src });
+ case 'canvas':
+ return this.set({ canvas: src });
+ case 'img':
+ return this.set({ img: src });
+ default:
+ return this.error('Unknown source type.');
+ }
+ });
+};
+
+Worker.prototype.to = function to(target) {
+ // Route the 'to' request to the appropriate method.
+ switch (target) {
+ case 'container':
+ return this.toContainer();
+ case 'canvas':
+ return this.toCanvas();
+ case 'img':
+ return this.toImg();
+ case 'pdf':
+ return this.toPdf();
+ default:
+ return this.error('Invalid target.');
+ }
+};
+
+Worker.prototype.toContainer = function toContainer() {
+ // Set up function prerequisites.
+ var prereqs = [function checkSrc() {
+ return this.prop.src || this.error('Cannot duplicate - no source HTML.');
+ }, function checkPageSize() {
+ return this.prop.pageSize || this.setPageSize();
+ }];
+
+ return this.thenList(prereqs).then(function toContainer_main() {
+ // Define the CSS styles for the container and its overlay parent.
+ var overlayCSS = {
+ position: 'fixed', overflow: 'hidden', zIndex: 1000,
+ left: 0, right: 0, bottom: 0, top: 0,
+ backgroundColor: 'rgba(0,0,0,0.8)'
+ };
+ var containerCSS = {
+ position: 'absolute', width: this.prop.pageSize.inner.width + this.prop.pageSize.unit,
+ left: 0, right: 0, top: 0, height: 'auto', margin: 'auto',
+ backgroundColor: 'white'
+ };
+
+ // Set the overlay to hidden (could be changed in the future to provide a print preview).
+ overlayCSS.opacity = 0;
+
+ // Create and attach the elements.
+ var source = cloneNode(this.prop.src, this.opt.html2canvas.javascriptEnabled);
+ this.prop.overlay = createElement('div', { className: 'html2pdf__overlay', style: overlayCSS });
+ this.prop.container = createElement('div', { className: 'html2pdf__container', style: containerCSS });
+ this.prop.container.appendChild(source);
+ this.prop.overlay.appendChild(this.prop.container);
+ document.body.appendChild(this.prop.overlay);
+ });
+};
+
+Worker.prototype.toCanvas = function toCanvas() {
+ // Set up function prerequisites.
+ var prereqs = [function checkContainer() {
+ return document.body.contains(this.prop.container) || this.toContainer();
+ }];
+
+ // Fulfill prereqs then create the canvas.
+ return this.thenList(prereqs).then(function toCanvas_main() {
+ // Handle old-fashioned 'onrendered' argument.
+ var options = _extends({}, this.opt.html2canvas);
+ delete options.onrendered;
+
+ return html2canvas$1(this.prop.container, options);
+ }).then(function toCanvas_post(canvas) {
+ // Handle old-fashioned 'onrendered' argument.
+ var onRendered = this.opt.html2canvas.onrendered || function () {};
+ onRendered(canvas);
+
+ this.prop.canvas = canvas;
+ document.body.removeChild(this.prop.overlay);
+ });
+};
+
+Worker.prototype.toImg = function toImg() {
+ // Set up function prerequisites.
+ var prereqs = [function checkCanvas() {
+ return this.prop.canvas || this.toCanvas();
+ }];
+
+ // Fulfill prereqs then create the image.
+ return this.thenList(prereqs).then(function toImg_main() {
+ var imgData = this.prop.canvas.toDataURL('image/' + this.opt.image.type, this.opt.image.quality);
+ this.prop.img = document.createElement('img');
+ this.prop.img.src = imgData;
+ });
+};
+
+Worker.prototype.toPdf = function toPdf() {
+ // Set up function prerequisites.
+ var prereqs = [function checkCanvas() {
+ return this.prop.canvas || this.toCanvas();
+ }];
+
+ // Fulfill prereqs then create the image.
+ return this.thenList(prereqs).then(function toPdf_main() {
+ // Create local copies of frequently used properties.
+ var canvas = this.prop.canvas;
+ var opt = this.opt;
+
+ // Calculate the number of pages.
+ var pxFullHeight = canvas.height;
+ var pxPageHeight = Math.floor(canvas.width * this.prop.pageSize.inner.ratio);
+ var nPages = Math.ceil(pxFullHeight / pxPageHeight);
+
+ // Define pageHeight separately so it can be trimmed on the final page.
+ var pageHeight = this.prop.pageSize.inner.height;
+
+ // Create a one-page canvas to split up the full image.
+ var pageCanvas = document.createElement('canvas');
+ var pageCtx = pageCanvas.getContext('2d');
+ pageCanvas.width = canvas.width;
+ pageCanvas.height = pxPageHeight;
+
+ // Initialize the PDF.
+ this.prop.pdf = this.prop.pdf || new jspdf_min(opt.jsPDF);
+
+ for (var page = 0; page < nPages; page++) {
+ // Trim the final page to reduce file size.
+ if (page === nPages - 1 && pxFullHeight % pxPageHeight !== 0) {
+ pageCanvas.height = pxFullHeight % pxPageHeight;
+ pageHeight = pageCanvas.height * this.prop.pageSize.inner.width / pageCanvas.width;
+ }
+
+ // Display the page.
+ var w = pageCanvas.width;
+ var h = pageCanvas.height;
+ pageCtx.fillStyle = 'white';
+ pageCtx.fillRect(0, 0, w, h);
+ pageCtx.drawImage(canvas, 0, page * pxPageHeight, w, h, 0, 0, w, h);
+
+ // Add the page to the PDF.
+ if (page) this.prop.pdf.addPage();
+ var imgData = pageCanvas.toDataURL('image/' + opt.image.type, opt.image.quality);
+ this.prop.pdf.addImage(imgData, opt.image.type, opt.margin[1], opt.margin[0], this.prop.pageSize.inner.width, pageHeight);
+ }
+ });
+};
+
+/* ----- OUTPUT / SAVE ----- */
+
+Worker.prototype.output = function output(type, options, src) {
+ // Redirect requests to the correct function (outputPdf / outputImg).
+ src = src || 'pdf';
+ if (src.toLowerCase() === 'img' || src.toLowerCase() === 'image') {
+ return this.outputImg(type, options);
+ } else {
+ return this.outputPdf(type, options);
+ }
+};
+
+Worker.prototype.outputPdf = function outputPdf(type, options) {
+ // Set up function prerequisites.
+ var prereqs = [function checkPdf() {
+ return this.prop.pdf || this.toPdf();
+ }];
+
+ // Fulfill prereqs then perform the appropriate output.
+ return this.thenList(prereqs).then(function outputPdf_main() {
+ /* Currently implemented output types:
+ * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992
+ * save(options), arraybuffer, blob, bloburi/bloburl,
+ * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl
+ */
+ return this.prop.pdf.output(type, options);
+ });
+};
+
+Worker.prototype.outputImg = function outputImg(type, options) {
+ // Set up function prerequisites.
+ var prereqs = [function checkImg() {
+ return this.prop.img || this.toImg();
+ }];
+
+ // Fulfill prereqs then perform the appropriate output.
+ return this.thenList(prereqs).then(function outputImg_main() {
+ switch (type) {
+ case undefined:
+ case 'img':
+ return this.prop.img;
+ case 'datauristring':
+ case 'dataurlstring':
+ return this.prop.img.src;
+ case 'datauri':
+ case 'dataurl':
+ return document.location.href = this.prop.img.src;
+ default:
+ throw 'Image output type "' + type + '" is not supported.';
+ }
+ });
+};
+
+Worker.prototype.save = function save(filename) {
+ // Set up function prerequisites.
+ var prereqs = [function checkPdf() {
+ return this.prop.pdf || this.toPdf();
+ }];
+
+ // Fulfill prereqs, update the filename (if provided), and save the PDF.
+ return this.thenList(prereqs).set(filename ? { filename: filename } : null).then(function save_main() {
+ this.prop.pdf.save(this.opt.filename);
+ });
+};
+
+/* ----- SET / GET ----- */
+
+Worker.prototype.set = function set$$1(opt) {
+ // TODO: Implement ordered pairs?
+
+ // Silently ignore invalid or empty input.
+ if (objType(opt) !== 'object') {
+ return this;
+ }
+
+ // Build an array of setter functions to queue.
+ var fns = Object.keys(opt || {}).map(function (key) {
+ if (key in Worker.template.prop) {
+ // Set pre-defined properties.
+ return function set_prop() {
+ this.prop[key] = opt[key];
+ };
+ } else {
+ switch (key) {
+ case 'margin':
+ return this.setMargin.bind(this, opt.margin);
+ case 'jsPDF':
+ return function set_jsPDF() {
+ this.opt.jsPDF = opt.jsPDF;return this.setPageSize();
+ };
+ case 'pageSize':
+ return this.setPageSize.bind(this, opt.pageSize);
+ default:
+ // Set any other properties in opt.
+ return function set_opt() {
+ this.opt[key] = opt[key];
+ };
+ }
+ }
+ }, this);
+
+ // Set properties within the promise chain.
+ return this.then(function set_main() {
+ return this.thenList(fns);
+ });
+};
+
+Worker.prototype.get = function get$$1(key, cbk) {
+ return this.then(function get_main() {
+ // Fetch the requested property, either as a predefined prop or in opt.
+ var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];
+ return cbk ? cbk(val) : val;
+ });
+};
+
+Worker.prototype.setMargin = function setMargin(margin) {
+ return this.then(function setMargin_main() {
+ // Parse the margin property: [top, left, bottom, right].
+ switch (objType(margin)) {
+ case 'number':
+ margin = [margin, margin, margin, margin];
+ case 'array':
+ if (margin.length === 2) {
+ margin = [margin[0], margin[1], margin[0], margin[1]];
+ }
+ if (margin.length === 4) {
+ break;
+ }
+ default:
+ return this.error('Invalid margin array.');
+ }
+
+ // Set the margin property, then update pageSize.
+ this.opt.margin = margin;
+ }).then(this.setPageSize);
+};
+
+Worker.prototype.setPageSize = function setPageSize(pageSize) {
+ return this.then(function setPageSize_main() {
+ // Retrieve page-size based on jsPDF settings, if not explicitly provided.
+ pageSize = pageSize || jspdf_min.getPageSize(this.opt.jsPDF);
+
+ // Add 'inner' field if not present.
+ if (!pageSize.hasOwnProperty('inner')) {
+ pageSize.inner = {
+ width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],
+ height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]
+ };
+ pageSize.inner.px = {
+ width: toPx(pageSize.inner.width, pageSize.k),
+ height: toPx(pageSize.inner.height, pageSize.k)
+ };
+ pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;
+ }
+
+ // Attach pageSize to this.
+ this.prop.pageSize = pageSize;
+ });
+};
+
+Worker.prototype.setProgress = function setProgress(val, state, n, stack) {
+ // Immediately update all progress values.
+ if (val != null) this.progress.val = val;
+ if (state != null) this.progress.state = state;
+ if (n != null) this.progress.n = n;
+ if (stack != null) this.progress.stack = stack;
+ this.progress.ratio = this.progress.val / this.progress.state;
+
+ // Return this for command chaining.
+ return this;
+};
+
+Worker.prototype.updateProgress = function updateProgress(val, state, n, stack) {
+ // Immediately update all progress values, using setProgress.
+ return this.setProgress(val ? this.progress.val + val : null, state ? state : null, n ? this.progress.n + n : null, stack ? this.progress.stack.concat(stack) : null);
+};
+
+/* ----- PROMISE MAPPING ----- */
+
+Worker.prototype.then = function then(onFulfilled, onRejected) {
+ // Wrap `this` for encapsulation.
+ var self = this;
+
+ return this.thenCore(onFulfilled, onRejected, function then_main(onFulfilled, onRejected) {
+ // Update progress while queuing, calling, and resolving `then`.
+ self.updateProgress(null, null, 1, [onFulfilled]);
+ return Promise$1.prototype.then.call(this, function then_pre(val) {
+ self.updateProgress(null, onFulfilled);
+ return val;
+ }).then(onFulfilled, onRejected).then(function then_post(val) {
+ self.updateProgress(1);
+ return val;
+ });
+ });
+};
+
+Worker.prototype.thenCore = function thenCore(onFulfilled, onRejected, thenBase) {
+ // Handle optional thenBase parameter.
+ thenBase = thenBase || Promise$1.prototype.then;
+
+ // Wrap `this` for encapsulation and bind it to the promise handlers.
+ var self = this;
+ if (onFulfilled) {
+ onFulfilled = onFulfilled.bind(self);
+ }
+ if (onRejected) {
+ onRejected = onRejected.bind(self);
+ }
+
+ // Cast self into a Promise to avoid polyfills recursively defining `then`.
+ var isNative = Promise$1.toString().indexOf('[native code]') !== -1 && Promise$1.name === 'Promise';
+ var selfPromise = isNative ? self : Worker.convert(_extends({}, self), Promise$1.prototype);
+
+ // Return the promise, after casting it into a Worker and preserving props.
+ var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);
+ return Worker.convert(returnVal, self.__proto__);
+};
+
+Worker.prototype.thenExternal = function thenExternal(onFulfilled, onRejected) {
+ // Call `then` and return a standard promise (exits the Worker chain).
+ return Promise$1.prototype.then.call(this, onFulfilled, onRejected);
+};
+
+Worker.prototype.thenList = function thenList(fns) {
+ // Queue a series of promise 'factories' into the promise chain.
+ var self = this;
+ fns.forEach(function thenList_forEach(fn) {
+ self = self.thenCore(fn);
+ });
+ return self;
+};
+
+Worker.prototype['catch'] = function (onRejected) {
+ // Bind `this` to the promise handler, call `catch`, and return a Worker.
+ if (onRejected) {
+ onRejected = onRejected.bind(this);
+ }
+ var returnVal = Promise$1.prototype['catch'].call(this, onRejected);
+ return Worker.convert(returnVal, this);
+};
+
+Worker.prototype.catchExternal = function catchExternal(onRejected) {
+ // Call `catch` and return a standard promise (exits the Worker chain).
+ return Promise$1.prototype['catch'].call(this, onRejected);
+};
+
+Worker.prototype.error = function error(msg) {
+ // Throw the error in the Promise chain.
+ return this.then(function error_main() {
+ throw new Error(msg);
+ });
+};
+
+/* ----- ALIASES ----- */
+
+Worker.prototype.using = Worker.prototype.set;
+Worker.prototype.saveAs = Worker.prototype.save;
+Worker.prototype.export = Worker.prototype.output;
+Worker.prototype.run = Worker.prototype.then;
+
+// Import dependencies.
+// Get dimensions of a PDF page, as determined by jsPDF.
+jspdf_min.getPageSize = function (orientation, unit, format) {
+ // Decode options object
+ if ((typeof orientation === 'undefined' ? 'undefined' : _typeof(orientation)) === 'object') {
+ var options = orientation;
+ orientation = options.orientation;
+ unit = options.unit || unit;
+ format = options.format || format;
+ }
+
+ // Default options
+ unit = unit || 'mm';
+ format = format || 'a4';
+ orientation = ('' + (orientation || 'P')).toLowerCase();
+ var format_as_string = ('' + format).toLowerCase();
+
+ // Size in pt of various paper formats
+ var pageFormats = {
+ 'a0': [2383.94, 3370.39], 'a1': [1683.78, 2383.94],
+ 'a2': [1190.55, 1683.78], 'a3': [841.89, 1190.55],
+ 'a4': [595.28, 841.89], 'a5': [419.53, 595.28],
+ 'a6': [297.64, 419.53], 'a7': [209.76, 297.64],
+ 'a8': [147.40, 209.76], 'a9': [104.88, 147.40],
+ 'a10': [73.70, 104.88], 'b0': [2834.65, 4008.19],
+ 'b1': [2004.09, 2834.65], 'b2': [1417.32, 2004.09],
+ 'b3': [1000.63, 1417.32], 'b4': [708.66, 1000.63],
+ 'b5': [498.90, 708.66], 'b6': [354.33, 498.90],
+ 'b7': [249.45, 354.33], 'b8': [175.75, 249.45],
+ 'b9': [124.72, 175.75], 'b10': [87.87, 124.72],
+ 'c0': [2599.37, 3676.54], 'c1': [1836.85, 2599.37],
+ 'c2': [1298.27, 1836.85], 'c3': [918.43, 1298.27],
+ 'c4': [649.13, 918.43], 'c5': [459.21, 649.13],
+ 'c6': [323.15, 459.21], 'c7': [229.61, 323.15],
+ 'c8': [161.57, 229.61], 'c9': [113.39, 161.57],
+ 'c10': [79.37, 113.39], 'dl': [311.81, 623.62],
+ 'letter': [612, 792],
+ 'government-letter': [576, 756],
+ 'legal': [612, 1008],
+ 'junior-legal': [576, 360],
+ 'ledger': [1224, 792],
+ 'tabloid': [792, 1224],
+ 'credit-card': [153, 243]
+ };
+
+ // Unit conversion
+ switch (unit) {
+ case 'pt':
+ var k = 1;break;
+ case 'mm':
+ var k = 72 / 25.4;break;
+ case 'cm':
+ var k = 72 / 2.54;break;
+ case 'in':
+ var k = 72;break;
+ case 'px':
+ var k = 72 / 96;break;
+ case 'pc':
+ var k = 12;break;
+ case 'em':
+ var k = 12;break;
+ case 'ex':
+ var k = 6;break;
+ default:
+ throw 'Invalid unit: ' + unit;
+ }
+
+ // Dimensions are stored as user units and converted to points on output
+ if (pageFormats.hasOwnProperty(format_as_string)) {
+ var pageHeight = pageFormats[format_as_string][1] / k;
+ var pageWidth = pageFormats[format_as_string][0] / k;
+ } else {
+ try {
+ var pageHeight = format[1];
+ var pageWidth = format[0];
+ } catch (err) {
+ throw new Error('Invalid format: ' + format);
+ }
+ }
+
+ // Handle page orientation
+ if (orientation === 'p' || orientation === 'portrait') {
+ orientation = 'p';
+ if (pageWidth > pageHeight) {
+ var tmp = pageWidth;
+ pageWidth = pageHeight;
+ pageHeight = tmp;
+ }
+ } else if (orientation === 'l' || orientation === 'landscape') {
+ orientation = 'l';
+ if (pageHeight > pageWidth) {
+ var tmp = pageWidth;
+ pageWidth = pageHeight;
+ pageHeight = tmp;
+ }
+ } else {
+ throw 'Invalid orientation: ' + orientation;
+ }
+
+ // Return information (k is the unit conversion ratio from pts)
+ var info = { 'width': pageWidth, 'height': pageHeight, 'unit': unit, 'k': k };
+ return info;
+};
+
+/* Pagebreak plugin:
+
+ Adds page-break functionality to the html2pdf library. Page-breaks can be
+ enabled by CSS styles, set on individual elements using selectors, or
+ avoided from breaking inside all elements.
+
+ Options on the `opt.pagebreak` object:
+
+ mode: String or array of strings: 'avoid-all', 'css', and/or 'legacy'
+ Default: ['css', 'legacy']
+
+ before: String or array of CSS selectors for which to add page-breaks
+ before each element. Can be a specific element with an ID
+ ('#myID'), all elements of a type (e.g. 'img'), all of a class
+ ('.myClass'), or even '*' to match every element.
+
+ after: Like 'before', but adds a page-break immediately after the element.
+
+ avoid: Like 'before', but avoids page-breaks on these elements. You can
+ enable this feature on every element using the 'avoid-all' mode.
+*/
+
+// Refs to original functions.
+var orig = {
+ toContainer: Worker.prototype.toContainer
+};
+
+// Add pagebreak default options to the Worker template.
+Worker.template.opt.pagebreak = {
+ mode: ['css', 'legacy'],
+ before: [],
+ after: [],
+ avoid: []
+};
+
+Worker.prototype.toContainer = function toContainer() {
+ return orig.toContainer.call(this).then(function toContainer_pagebreak() {
+ // Setup root element and inner page height.
+ var root = this.prop.container;
+ var pxPageHeight = this.prop.pageSize.inner.px.height;
+
+ // Check all requested modes.
+ var modeSrc = [].concat(this.opt.pagebreak.mode);
+ var mode = {
+ avoidAll: modeSrc.indexOf('avoid-all') !== -1,
+ css: modeSrc.indexOf('css') !== -1,
+ legacy: modeSrc.indexOf('legacy') !== -1
+ };
+
+ // Get arrays of all explicitly requested elements.
+ var select = {};
+ var self = this;
+ ['before', 'after', 'avoid'].forEach(function (key) {
+ var all = mode.avoidAll && key === 'avoid';
+ select[key] = all ? [] : [].concat(self.opt.pagebreak[key] || []);
+ if (select[key].length > 0) {
+ select[key] = Array.prototype.slice.call(root.querySelectorAll(select[key].join(', ')));
+ }
+ });
+
+ // Get all legacy page-break elements.
+ var legacyEls = root.querySelectorAll('.html2pdf__page-break');
+ legacyEls = Array.prototype.slice.call(legacyEls);
+
+ // Loop through all elements.
+ var els = root.querySelectorAll('*');
+ Array.prototype.forEach.call(els, function pagebreak_loop(el) {
+ // Setup pagebreak rules based on legacy and avoidAll modes.
+ var rules = {
+ before: false,
+ after: mode.legacy && legacyEls.indexOf(el) !== -1,
+ avoid: mode.avoidAll
+ };
+
+ // Add rules for css mode.
+ if (mode.css) {
+ // TODO: Check if this is valid with iFrames.
+ var style = window.getComputedStyle(el);
+ // TODO: Handle 'left' and 'right' correctly.
+ // TODO: Add support for 'avoid' on breakBefore/After.
+ var breakOpt = ['always', 'page', 'left', 'right'];
+ var avoidOpt = ['avoid', 'avoid-page'];
+ rules = {
+ before: rules.before || breakOpt.indexOf(style.breakBefore || style.pageBreakBefore) !== -1,
+ after: rules.after || breakOpt.indexOf(style.breakAfter || style.pageBreakAfter) !== -1,
+ avoid: rules.avoid || avoidOpt.indexOf(style.breakInside || style.pageBreakInside) !== -1
+ };
+ }
+
+ // Add rules for explicit requests.
+ Object.keys(rules).forEach(function (key) {
+ rules[key] = rules[key] || select[key].indexOf(el) !== -1;
+ });
+
+ // Get element position on the screen.
+ // TODO: Subtract the top of the container from clientRect.top/bottom?
+ var clientRect = el.getBoundingClientRect();
+
+ // Avoid: Check if a break happens mid-element.
+ if (rules.avoid && !rules.before) {
+ var startPage = Math.floor(clientRect.top / pxPageHeight);
+ var endPage = Math.floor(clientRect.bottom / pxPageHeight);
+ var nPages = Math.abs(clientRect.bottom - clientRect.top) / pxPageHeight;
+
+ // Turn on rules.before if the el is broken and is at most one page long.
+ if (endPage !== startPage && nPages <= 1) {
+ rules.before = true;
+ }
+ }
+
+ // Before: Create a padding div to push the element to the next page.
+ if (rules.before) {
+ var pad = createElement('div', { style: {
+ display: 'block',
+ height: pxPageHeight - clientRect.top % pxPageHeight + 'px'
+ } });
+ el.parentNode.insertBefore(pad, el);
+ }
+
+ // After: Create a padding div to fill the remaining page.
+ if (rules.after) {
+ var pad = createElement('div', { style: {
+ display: 'block',
+ height: pxPageHeight - clientRect.bottom % pxPageHeight + 'px'
+ } });
+ el.parentNode.insertBefore(pad, el.nextSibling);
+ }
+ });
+ });
+};
+
+// Add hyperlink functionality to the PDF creation.
+
+// Main link array, and refs to original functions.
+var linkInfo = [];
+var orig$1 = {
+ toContainer: Worker.prototype.toContainer,
+ toPdf: Worker.prototype.toPdf
+};
+
+Worker.prototype.toContainer = function toContainer() {
+ return orig$1.toContainer.call(this).then(function toContainer_hyperlink() {
+ // Retrieve hyperlink info if the option is enabled.
+ if (this.opt.enableLinks) {
+ // Find all anchor tags and get the container's bounds for reference.
+ var container = this.prop.container;
+ var links = container.querySelectorAll('a');
+ var containerRect = unitConvert(container.getBoundingClientRect(), this.prop.pageSize.k);
+ linkInfo = [];
+
+ // Loop through each anchor tag.
+ Array.prototype.forEach.call(links, function (link) {
+ // Treat each client rect as a separate link (for text-wrapping).
+ var clientRects = link.getClientRects();
+ for (var i = 0; i < clientRects.length; i++) {
+ var clientRect = unitConvert(clientRects[i], this.prop.pageSize.k);
+ clientRect.left -= containerRect.left;
+ clientRect.top -= containerRect.top;
+
+ var page = Math.floor(clientRect.top / this.prop.pageSize.inner.height) + 1;
+ var top = this.opt.margin[0] + clientRect.top % this.prop.pageSize.inner.height;
+ var left = this.opt.margin[1] + clientRect.left;
+
+ linkInfo.push({ page: page, top: top, left: left, clientRect: clientRect, link: link });
+ }
+ }, this);
+ }
+ });
+};
+
+Worker.prototype.toPdf = function toPdf() {
+ return orig$1.toPdf.call(this).then(function toPdf_hyperlink() {
+ // Add hyperlinks if the option is enabled.
+ if (this.opt.enableLinks) {
+ // Attach each anchor tag based on info from toContainer().
+ linkInfo.forEach(function (l) {
+ this.prop.pdf.setPage(l.page);
+ this.prop.pdf.link(l.left, l.top, l.clientRect.width, l.clientRect.height, { url: l.link.href });
+ }, this);
+
+ // Reset the active page of the PDF to the final page.
+ var nPages = this.prop.pdf.internal.getNumberOfPages();
+ this.prop.pdf.setPage(nPages);
+ }
+ });
+};
+
+/**
+ * Generate a PDF from an HTML element or string using html2canvas and jsPDF.
+ *
+ * @param {Element|string} source The source element or HTML string.
+ * @param {Object=} opt An object of optional settings: 'margin', 'filename',
+ * 'image' ('type' and 'quality'), and 'html2canvas' / 'jspdf', which are
+ * sent as settings to their corresponding functions.
+ */
+var html2pdf = function html2pdf(src, opt) {
+ // Create a new worker with the given options.
+ var worker = new html2pdf.Worker(opt);
+
+ if (src) {
+ // If src is specified, perform the traditional 'simple' operation.
+ return worker.from(src).save();
+ } else {
+ // Otherwise, return the worker for new Promise-based operation.
+ return worker;
+ }
+};
+html2pdf.Worker = Worker;
+
+return html2pdf;
+
+})));
Property changes on: base3.10/src/main/webapp/js/com/html2pdf.bundle.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery-ui.accordion.multiple.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery-ui.accordion.multiple.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery-ui.accordion.multiple.js (revision 7)
@@ -0,0 +1,44 @@
+/*
+* jQueryUI.Accordion.Multiple, v1.0.1
+* (c) 2014–2017 Artyom "Sleepwalker" Fedosov <mail@asleepwalker.ru>
+* https://github.com/asleepwalker/jquery-ui.tabs.neighbors.js
+*/
+
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ module.exports = function (root, jQuery) {
+ if (jQuery === undefined) {
+ if (typeof window !== 'undefined') {
+ jQuery = require('jquery');
+ } else {
+ jQuery = require('jquery')(root);
+ }
+ }
+ factory(jQuery);
+ return jQuery;
+ };
+ } else {
+ factory(jQuery);
+ }
+}(function ($) {
+
+ var originalToggle = $.ui.accordion.prototype._toggle;
+
+ $.extend($.ui.accordion.prototype, {
+ multiple: false,
+ _toggle: function (data) {
+ if (this.options.multiple && data.newPanel.length) {
+ data.oldPanel = data.oldHeader = this.prevShow = $('');
+
+ if (this.options.collapsible && data.newPanel.is(':visible')) {
+ data.oldPanel = data.newPanel;
+ data.newPanel = $('');
+ }
+ }
+ originalToggle.apply(this, arguments);
+ }
+ });
+
+}));
Property changes on: base3.10/src/main/webapp/js/com/jquery-ui.accordion.multiple.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/ajaxFileUpload.js
===================================================================
--- base3.10/src/main/webapp/js/com/ajaxFileUpload.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/ajaxFileUpload.js (revision 7)
@@ -0,0 +1,147 @@
+/**
+ * Ajax 파일 업로드
+ * $(input file element).ajaxFileUpload(options, [callback])
+ */
+;
+(function($) {
+ var defaults = {
+ uploadUrl: CONTEXT_PATH + '/editor/uploadFile.do',
+ fileAllowedTypes: ['*'], // 확장자 체크 ['png', 'pdf']
+ fileMaxSize: 1024 // 첨부파일 사이즈 MB단위
+ }
+ $.fn.ajaxFileUpload = function(options, callback) {
+ options = $.extend({}, defaults, options);
+ var $file = $(this);
+
+ // 특정 파일 확장자만 지정
+ if( options.fileAllowedTypes.indexOf('*') == -1 ) {
+ var ext = '';
+ $(options.fileAllowedTypes).each(function(i) {
+ if( i > 0 ) {
+ ext += ",";
+ }
+ ext += '.' + this;
+ });
+ $file.attr('accept', ext);
+ }
+ // 이벤트 생성
+ $file.on('change', function() {
+ if ($file.val()) {
+ fncFileUp(options);
+ }
+ });
+
+ // input file 설정
+ var fileTarget = $('.filebox .upload-hidden');
+ fileTarget.on('change', function() { // 값이 변경되면
+ if (window.FileReader) { // modern browser
+ var filename = $(this)[0].files[0].name;
+ } else { // old IE
+ var filename = $(this).val().split('/').pop().split('\\').pop(); // 파일명만
+ // 추출
+ } // 추출한 파일명 삽입
+ $(this).siblings('.upload-name').val(filename);
+ });
+
+ var fncFileUp = function(options) {
+ var data = new FormData();
+ var file = $file[0].files[0];
+
+ // 확장자 및 용량체크
+ if( !fncValidate(options, file) ) {
+ return;
+ };
+
+ data.append("file", file);
+ $.ajax({
+ type : 'post',
+ url : options.uploadUrl,
+ data : data,
+ processData : false,
+ contentType : false,
+ beforeSend: function() {
+ if( $.blockUI != null ) {
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ });
+ }
+ },
+ complete: function() {
+ if( $.unblockUI != null ) {
+ $.unblockUI();
+ }
+ },
+ success : function(html) {
+ // FileUploadInterceptor에서 필러링 처리
+ if( html.constructor != Object ) {
+ $file.val("");
+ alert ('허용되지 않은 확장자입니다.');
+ return;
+ }
+ $file.val("");
+ if( callback ) callback(html);
+ },
+ error : function(error) {
+ alert("파일 업로드에 실패하였습니다.");
+ console.log(error);
+ console.log(error.status);
+ },
+// xhr : function() { // 프로그래스
+// var xhr = new window.XMLHttpRequest();
+// // 업로드 중 프로그래스바 표시
+// $('#' + options.progress).removeAttr('style');
+// $('#' + options.progress).find('.progress-bar').attr('style', 'width: 0%');
+// $('#' + options.progress).find('.progress-bar').text('0%');
+//
+// xhr.upload.addEventListener("progress", function(evt) {
+// if (evt.lengthComputable) {
+// var percentComplete = evt.loaded / evt.total;
+// percentComplete = parseInt(percentComplete * 100);
+//
+// // 프로그래스바 이동
+// $('#' + options.progress).find('.progress-bar').attr('style', 'width: ' + percentComplete + '%');
+// $('#' + options.progress).find('.progress-bar').text(percentComplete + '%');
+//
+// if (percentComplete === 100) {
+// $('#' + options.progress).attr('style', 'display: none;');
+// }
+// }
+// }, false);
+//
+// return xhr;
+// },
+ });
+ }
+ };
+ // 확장자 체크 및 용량 체크
+ var fncValidate = function(options, file) {
+ if( options.fileAllowedTypes.indexOf('*') == -1 ) {
+ var ext = file.name.split('.').pop().toLowerCase();
+ if( $.inArray(ext, options.fileAllowedTypes) == -1 ) {
+ alert('허용되지 않은 확장자입니다.');
+ $('#' + options.inputFileId).val("");
+ return false;
+ }
+ }
+ if( options.fileMaxSize > -1 ) {
+ var fileSize = file.size;
+ var maxSize = options.fileMaxSize * 1024 * 1024;
+ if( fileSize > maxSize ) {
+ alert('파일 사이즈는 ' + fileSizeConvert(maxSize) + '이내로 등록 가능합니다.');
+ $('#' + options.inputFileId).val("");
+ return false;
+ }
+ }
+ return true;
+ }
+ // 파일 사이즈 변경
+ function fileSizeConvert(size) {
+ var fileSize = size;
+ if (fileSize / 1024 >= 1024) {
+ fileSize = (fileSize / (1024 * 1024)).toFixed(1) + "MB";
+ } else {
+ fileSize = (fileSize / 1024).toFixed(1) + "KB";
+ }
+ return fileSize;
+ }
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/ajaxFileUpload.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/fileUpload.js
===================================================================
--- base3.10/src/main/webapp/js/com/fileUpload.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/fileUpload.js (revision 7)
@@ -0,0 +1,395 @@
+/**
+ * 에디터 파일 업로드를 활용한 파일 업로더
+ * $.initFileUpload(options, [createDom])
+ */
+;
+(function($) {
+ var defaults = {
+ fileListDivId : 'fileListDivId',
+ inputFileId : 'inputFileId',
+ hiddenFileName : 'hiddenFileName',
+ progress : 'progress',
+ maxSize : 5, // 첨부파일 등록개수
+ fileAllowedTypes: ['*'], // 확장자 체크 ['png', 'pdf']
+ fileMaxSize: 10, // 첨부파일 사이즈 MB단위
+ deleteButton: true, // deleteButton 사용유무
+ authorType : 'admin' // 파일 목록 디자인(사용자, 관리자)
+ }
+ $.initFileUpload = function(options, createDom) {
+ options = $.extend({}, defaults, options);
+ if (createDom != null) { // 파일 목록 생성 DOM override
+ defaultsDom = $.extend(createDom, defaultsDom);
+ }
+
+ // hiddenFileName 변경 이벤트
+ $('input[name="' + options.hiddenFileName + '"]').on('change', function() {
+ fncSelectFile($(this).val());
+ });
+
+ // 기존파일 데이터 생성(수정 시)
+ var hiddenId = $('input[name="' + options.hiddenFileName + '"]').val();
+ if (hiddenId != null && hiddenId != '') {
+ fncSelectFile(hiddenId);
+ }
+
+ // fileId로 데이터 조회
+ function fncSelectFile(hiddenId) {
+ if (hiddenId != null && hiddenId != '') {
+ $.ajax({
+ method : "POST",
+ url : CONTEXT_PATH +"/editor/fileList.do",
+ data : {
+ fileId : hiddenId
+ }
+ }).done(function(data) {
+ // 파일 데이터 생성
+ for (var i = 0; i < data.length; i++) {
+ var html = data[i];
+ var dom = '';
+ if (options.authorType == 'user') {
+ dom = defaultsDomUser(html);
+ $('.file_list_wrap').addClass("show");
+ } else {
+ dom = defaultsDom(html, options);
+ }
+ $('#' + options.fileListDivId).append(dom);
+ // 업로드시 div 표시
+ $('#' + options.fileListDivId).removeAttr('style');
+
+ // 이벤트 추가(파일삭제)
+ fncFileTrigger(html);
+ }
+ }).fail(function(err) {
+ // console.log ('file delete problem: ' + JSON.stringify(err));
+ })
+ }
+ }
+
+ // 갯수제한
+ fncMaxLength(options);
+
+ // 특정 파일 확장자만 지정
+ if( options.fileAllowedTypes.indexOf('*') == -1 ) {
+ var ext = '';
+ $(options.fileAllowedTypes).each(function(i) {
+ if( i > 0 ) {
+ ext += ",";
+ }
+ ext += '.' + this;
+ });
+ $('#' + options.inputFileId).attr('accept', ext);
+ }
+ // input file 업로드 이벤트
+ $('#' + options.inputFileId).on('change', function() {
+ if ($(this).val()) {
+ fncFileUp(options);
+ }
+ });
+
+ // input file 설정
+ var fileTarget = $('.filebox .upload-hidden');
+ fileTarget.on('change', function() { // 값이 변경되면
+ if (window.FileReader) { // modern browser
+ var filename = $(this)[0].files[0].name;
+ } else { // old IE
+ var filename = $(this).val().split('/').pop().split('\\').pop(); // 파일명만
+ // 추출
+ } // 추출한 파일명 삽입
+ $(this).siblings('.upload-name').val(filename);
+ });
+
+ // 파일 업로드
+ var fncFileUp = function(options) {
+ var data = new FormData();
+ var file = $('#' + options.inputFileId)[0].files[0];
+ // 확장자 및 용량체크
+ if( !fncValidate(options, file) ) {
+ return;
+ };
+ data.append("file", file);
+ $.ajax({
+ type : 'post',
+ url : CONTEXT_PATH + '/editor/uploadFile.do',
+ data : data,
+ processData : false,
+ contentType : false,
+ beforeSend : function() {
+ if(options.progress == "progress"){
+ $.blockUI();
+ }
+ },
+ complete : function() {
+ if(options.progress == "progress"){
+ $.unblockUI();
+ }
+ },
+ success : function(html) {
+ // FileUploadInterceptor에서 필러링 처리
+ if( html.fileId == null ) {
+ $('#' + options.inputFileId).val("");
+ alert ('허용되지 않은 확장자입니다.');
+ return;
+ }
+ var dom = '';
+ if (options.authorType == 'user') {
+ dom = defaultsDomUser(html);
+ $('.file_list_wrap').addClass("show");
+ } else {
+ dom = defaultsDom(html, options);
+ }
+ $('#' + options.fileListDivId).append(dom);
+ // 업로드시 div 표시
+ $('#' + options.fileListDivId).removeAttr('style');
+
+ // 이벤트 추가(파일삭제)
+ fncFileTrigger(html);
+
+ var atch_id = $('input[name="' + options.hiddenFileName + '"]').val();
+
+ if (atch_id.length == 0) {
+ atch_id = html.fileId;
+ } else {
+ atch_id = atch_id + "," + html.fileId;
+ }
+
+ $('input[name="' + options.hiddenFileName + '"]').val(atch_id);
+
+ $('#' + options.inputFileId).val("");
+
+ // 갯수제한
+ fncMaxLength(options);
+ },
+ error : function(error) {
+ alert("파일 업로드에 실패하였습니다.");
+ console.log(error);
+ console.log(error.status);
+ },
+ xhr : function() { // 프로그래스
+ var xhr = new window.XMLHttpRequest();
+ // 업로드 중 프로그래스바 표시
+ $('#' + options.progress).removeAttr('style');
+ $('#' + options.progress).find('.progress-bar').attr('style', 'width: 0%');
+ $('#' + options.progress).find('.progress-bar').text('0%');
+
+ xhr.upload.addEventListener("progress", function(evt) {
+ if (evt.lengthComputable) {
+ var percentComplete = evt.loaded / evt.total;
+ percentComplete = parseInt(percentComplete * 100);
+
+ // 프로그래스바 이동
+ $('#' + options.progress).find('.progress-bar').attr('style', 'width: ' + percentComplete + '%');
+ $('#' + options.progress).find('.progress-bar').text(percentComplete + '%');
+
+ if (percentComplete === 100) {
+ $('#' + options.progress).attr('style', 'display: none;');
+ }
+ }
+ }, false);
+
+ return xhr;
+ },
+ });
+ }
+
+ // 파일 이벤트 추가(삭제)
+ var fncFileTrigger = function(html) {
+ $('#' + html.fileId).find('a:eq(0)').on('click', function() {
+ fncUnlink(options, html.link);
+ });
+ }
+
+ // 링크 삭제(파일 삭제)
+ var fncUnlink = function(options, link) {
+ $.ajax({
+ // Request method.
+ method : "POST",
+ // Request URL.
+ url : CONTEXT_PATH +"/editor/deleteFile.do",
+ // Request params.
+ data : {
+ src : link
+ }
+ }).done(function(data) {
+ // console.log ('file was deleted');
+ // 링크 삭제시 파일 목록 삭제
+ if (options.fileListDivId != '') {
+ var atch_id = $('input[name="' + options.hiddenFileName + '"]').val();
+ var new_atch_id = "";
+ for (i = 0; i <= atch_id.split(',').length - 1; i++) {
+ if (atch_id.split(',')[i] != data.fileId) {
+ if (atch_id.split(',').length != 1) {
+ if (new_atch_id == "") {
+ new_atch_id = atch_id.split(',')[i];
+ } else {
+ new_atch_id = new_atch_id + "," + atch_id.split(',')[i];
+ }
+ }
+ }
+ }
+ // 첨부파일 목록 파일 삭제
+ $('#' + data.fileId).remove();
+
+ var $nextFocus = $('#' + options.fileListDivId).find('li').eq(1);
+ if ($nextFocus.length > 0) {
+ $nextFocus.find('button:eq(0)').focus();
+ } else {
+ $('#' + options.fileListDivId).find('li input[type="file"]:eq(0)').focus();
+ }
+
+ // 실제 넘기는 파일(hidden파일)
+ $('input[name="' + options.hiddenFileName + '"]').val(new_atch_id);
+
+ // 파일 없을 시 div 감춤
+ if (new_atch_id == '') {
+ //제품,기술 이미지 등록 시 예외
+ if(options.fileListDivId != 'reprsntImgFile' && options.fileListDivId != 'subImgFileList')
+ $('#' + options.fileListDivId).attr('style', 'display:none;');
+ }
+
+ // 업로드된 파일명 제거
+ $('.filebox .upload-hidden').siblings('.upload-name').val("파일선택");
+
+ // 갯수제한
+ fncMaxLength(options);
+ }
+ }).fail(function(err) {
+ // console.log ('file delete problem: ' + JSON.stringify(err));
+ })
+ }
+
+
+ };
+ // 파일 목록 생성
+ var defaultsDom = function(html, options) {
+ var deleteButton = options.deleteButton;
+ var dom = '<div id=' + html.fileId + ' style="margin-top: 5px;">';
+ dom += '<span style="line-height: 30px; margin-left: 10px;">';
+ dom += html.originFileNm;
+ dom += '</span>';
+ dom += '<div class="fr" style="margin-right: 2px;">';
+ var display = '';
+ if (!deleteButton) {
+ display = ' display: none;';
+ }
+ dom += '<a class="btn_sq_s btn_delete mr2"' + display + '" href="javascript:void(0)" title="삭제 버튼"><em class="blind">삭제</em></a> ';
+ dom += '<a class="btn_sq_s btn_filedown" href="' + html.link + '" title="파일 다운로드 버튼"><em class="blind">파일 다운로드</em></a></a>';
+ dom += '</div>';
+ dom += '</div>';
+ return dom;
+ }
+ // 파일 목록 생성 (사용자게시판)
+ var defaultsDomUser = function(html) {
+ var dom = '<div class="file_list" id="'+html.fileId+'">'
+ + '<p class="filename">'+html.originFileNm+'</p>'
+ + '<button type="button" class="btn_delete btn_sq_s" title="등록된 파일 삭제" >삭제</button>'
+ + '<button type="button" class="btn_ss bg_basic" title="등록된 파일 본문에 넣기" style="margin-left:3px;">본문에 넣기</button>'
+ + '</div>'
+ + '<div class="space5"></div>';
+ return dom;
+ }
+ // 개수 제한
+ var fncMaxLength = function(options) {
+ var atch_id = $('input[name="' + options.hiddenFileName + '"]').val();
+ if(atch_id){
+ var size = atch_id.split(',').length;
+
+ if( atch_id.length == 0 ) {
+ size = 0;
+ }
+ if( options.maxSize > size ) {
+ $('#' + options.inputFileId).prop('disabled', false);
+ } else {
+ $('#' + options.inputFileId).prop('disabled', true);
+ }
+ }else{
+ $('#' + options.inputFileId).prop('disabled', false);
+ }
+ }
+ // 확장자 체크 및 용량 체크
+ var fncValidate = function(options, file) {
+ if( options.fileAllowedTypes.indexOf('*') == -1 ) {
+ var ext = file.name.split('.').pop().toLowerCase();
+ if( $.inArray(ext, options.fileAllowedTypes) == -1 ) {
+ alert('허용되지 않은 확장자입니다.');
+ $('#' + options.inputFileId).val("");
+ return false;
+ }
+ }
+ if( options.fileMaxSize > -1 ) {
+ var fileSize = file.size;
+ var maxSize = options.fileMaxSize * 1024 * 1024;
+ if( fileSize > maxSize ) {
+ alert('파일 사이즈는 ' + fileSizeConvert(maxSize) + '이내로 등록 가능합니다.');
+ $('#' + options.inputFileId).val("");
+ return false;
+ }
+ }
+ return true;
+ }
+})(jQuery);
+
+//파일 확장자별 아이콘
+function fileExtIcon(extsn) {
+ var fileExtsn = extsn;
+ var fileIcon = 'far fa-file';
+ switch (fileExtsn) {
+ case 'pdf':
+ fileIcon = 'far fa-file-pdf';
+ break;
+ case 'ppt':
+ fileIcon = 'far fa-file-powerpoint';
+ break;
+ case 'pptx':
+ fileIcon = 'far fa-file-powerpoint';
+ break;
+ case 'xls':
+ fileIcon = 'far fa-file-excel';
+ break;
+ case 'xlsx':
+ fileIcon = 'far fa-file-excel';
+ break;
+ case 'doc':
+ fileIcon = 'far fa-file-word';
+ break;
+ case 'docx':
+ fileIcon = 'far fa-file-word';
+ break;
+ case 'hwp':
+ fileIcon = 'far fa-file-word';
+ break;
+ case 'png':
+ fileIcon = 'far fa-file-image';
+ break;
+ case 'jpg':
+ fileIcon = 'far fa-file-image';
+ break;
+ case 'jpeg':
+ fileIcon = 'far fa-file-image';
+ break;
+ case 'gif':
+ fileIcon = 'far fa-file-image';
+ break;
+ case 'bmp':
+ fileIcon = 'far fa-file-image';
+ break;
+ case 'zip':
+ fileIcon = 'far fa-file-archive';
+ break;
+ case '7z':
+ fileIcon = 'far fa-file-archive';
+ break;
+ default:
+ fileIcon = 'far fa-file';
+ }
+ return fileIcon;
+}
+// 파일 사이즈 변경
+function fileSizeConvert(size) {
+ var fileSize = size;
+ if (fileSize / 1024 >= 1024) {
+ fileSize = (fileSize / (1024 * 1024)).toFixed(1) + "MB";
+ } else {
+ fileSize = (fileSize / 1024).toFixed(1) + "KB";
+ }
+ return fileSize;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/fileUpload.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/imageViewFileUpload.js
===================================================================
--- base3.10/src/main/webapp/js/com/imageViewFileUpload.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/imageViewFileUpload.js (revision 7)
@@ -0,0 +1,760 @@
+/**
+ * 에디터 파일 업로드를 활용한 파일 업로더
+ * $.initFileUpload(options, [createDom])
+ */
+;
+(function($) {
+ var defaults = {
+ imageDivClass : 'imageBox',
+ toolBarDivClass : 'toolBarBox',
+ inputFileId : 'inputFileId',
+ hiddenFileName : 'hiddenFileName',
+ pageNum : 1,
+ progress : 'progress',
+ maxSize : 1, // 첨부파일 등록개수
+ fileAllowedTypes: ['*'], // 확장자 체크 ['png', 'pdf']
+ fileMaxSize: 2048, // 첨부파일 사이즈 MB단위
+ keyEvent: false,
+ toolBar: true,
+ toolBarOption: {
+ wheelZoom : true,
+ zoomIn : true,
+ zoomOut : true,
+ leftRotate : true,
+ rightRotate : true,
+ imgPrint : true,
+ paging : true,
+ draggable : true,
+ download : true,
+ fullScreen : true
+ }
+ }
+
+ $.initImageViewerFileUpload = function(options) {
+ options = $.extend({}, defaults, options);
+
+ if( options.toolBar ) {
+ //imageViewer toolBar 생성
+ var $img = $('.' + options.imageDivClass).find('img').eq(0);
+ fncCreateToolBar($img, options);
+ }
+ // hiddenFileName 변경 이벤트
+ $('input[name="' + options.hiddenFileName + '"]').on('change', function() {
+ fncSelectFile($(this).val());
+ });
+
+ // 기존파일 데이터 조회
+ var hiddenId = $('input[name="' + options.hiddenFileName + '"]').val();
+ if (hiddenId != null && hiddenId != '') {
+ fncSelectFile(hiddenId);
+ }
+
+ // fileId로 데이터 조회
+ function fncSelectFile(hiddenId) {
+ $.ajax({
+ method : "POST",
+ url : CONTEXT_PATH + "/editor/fileList.do",
+ data : {
+ fileId : hiddenId
+ },
+ beforeSend:function(){
+ $.unblockUI();
+ $.blockUI();
+ }
+ }).done(function(data) {
+ // 파일 데이터 생성
+ for (var i = 0; i < data.length; i++) {
+ var html = data[i];
+ if( "pdf, tif, tiff, png, jpg, jpeg".indexOf(html.fileExtsn.toLowerCase()) > -1 ) {
+ var img = $('.' + options.imageDivClass).find('img').eq(0);
+ //tiff, tif, pdf, png, jpg 등의 해당페이지에 대한 이미지 생성 및 호출
+ img.attr('src', '/multiImageview.do?fileId=' + html.fileId + '&pageSn=' + options.pageNum)
+ .data('file', html.fileId)
+ .data('maxpage', fileMaxPage(img))
+ .data('curpage', options.pageNum)
+ .on("contextmenu", function() {
+ return false;
+ });
+ } else {
+ $.unblockUI();
+ }
+
+ // 이벤트 추가(파일삭제)
+ fncFileTrigger(html);
+ }
+ }).fail(function(err) {
+ // console.log ('file delete problem: ' + JSON.stringify(err));
+ })
+ }
+
+ // 갯수제한
+ fncMaxLength(options);
+
+ // 특정 파일 확장자만 지정
+ if( options.fileAllowedTypes.indexOf('*') == -1 ) {
+ var ext = '';
+ $(options.fileAllowedTypes).each(function(i) {
+ if( i > 0 ) {
+ ext += ",";
+ }
+ ext += '.' + this;
+ });
+ $('#' + options.inputFileId).attr('accept', ext);
+ }
+ // input file 업로드 이벤트
+ $('#' + options.inputFileId).on('change', function() {
+ if ($(this).val()) {
+ fncFileUp(options);
+ }
+ });
+
+ // input file 설정
+ var fileTarget = $('.filebox .upload-hidden');
+ fileTarget.on('change', function() { // 값이 변경되면
+ if (window.FileReader) { // modern browser
+ var filename = $(this)[0].files[0].name;
+ } else { // old IE
+ var filename = $(this).val().split('/').pop().split('\\').pop(); // 파일명만
+ // 추출
+ } // 추출한 파일명 삽입
+ $(this).siblings('.upload-name').val(filename);
+ });
+
+ // 파일 업로드
+ var fncFileUp = function(options) {
+ var data = new FormData();
+ var file = $('#' + options.inputFileId)[0].files[0];
+ // 확장자 및 용량체크
+ if( !fncValidate(options, file) ) {
+ return;
+ };
+ data.append("file", file);
+
+ $.ajax({
+ type : 'post',
+ url : CONTEXT_PATH + '/editor/uploadFile.do',
+ data : data,
+ processData : false,
+ contentType : false,
+ beforeSend:function(){
+ $.blockUI();
+ },
+ success : function(html) {
+ // FileUploadInterceptor에서 필러링 처리
+ if( html.fileId == null ) {
+ $('#' + options.inputFileId).val("");
+ alert ('허용되지 않은 확장자입니다.');
+ return;
+ }
+ if( "pdf, tif, tiff, png, jpg, jpeg".indexOf(html.fileExtsn.toLowerCase()) > -1 ) {
+ var img = $('.' + options.imageDivClass).find('img').eq(0);
+ //tiff, tif, pdf, png, jpg등 의 해당페이지에 대한 이미지 생성 및 호출
+ img.attr('src', '/multiImageview.do?fileId=' + html.fileId + '&pageSn=1')
+ .data('file', html.fileId)
+ .data('maxpage', fileMaxPage(img))
+ .data('curpage', 1)
+ .on("contextmenu", function() {
+ return false;
+ });
+ } else {
+ $.unblockUI();
+ }
+
+ // 이벤트 추가(파일삭제)
+ fncFileTrigger(html);
+
+ var atch_id = $('input[name="' + options.hiddenFileName + '"]').val();
+
+ if (atch_id.length == 0) {
+ atch_id = html.fileId;
+ } else {
+ atch_id = atch_id + "," + html.fileId;
+ }
+
+ $('input[name="' + options.hiddenFileName + '"]').val(atch_id);
+
+ $('#' + options.inputFileId).val("");
+
+ // 갯수제한
+ fncMaxLength(options);
+ },
+ error : function(error) {
+ alert("파일 업로드에 실패하였습니다.");
+ console.log(error);
+ console.log(error.status);
+ $.unblockUI();
+ },
+// xhr : function() { // 프로그래스
+// var xhr = new window.XMLHttpRequest();
+// // 업로드 중 프로그래스바 표시
+// $('#' + options.progress).removeAttr('style');
+// $('#' + options.progress).find('.progress-bar').attr('style', 'width: 0%');
+// $('#' + options.progress).find('.progress-bar').text('0%');
+//
+// xhr.upload.addEventListener("progress", function(evt) {
+// if (evt.lengthComputable) {
+// var percentComplete = evt.loaded / evt.total;
+// percentComplete = parseInt(percentComplete * 100);
+//
+// // 프로그래스바 이동
+// $('#' + options.progress).find('.progress-bar').attr('style', 'width: ' + percentComplete + '%');
+// $('#' + options.progress).find('.progress-bar').text(percentComplete + '%');
+//
+// if (percentComplete === 100) {
+// $('#' + options.progress).attr('style', 'display: none;');
+// }
+// }
+// }, false);
+//
+// return xhr;
+// },
+ });
+ }
+
+ // 파일 이벤트 추가
+ var fncFileTrigger = function(html) {
+ //파일 삭제
+// $('#' + options.inputFileId).closest('div').find('a:eq(0)').on('click', function() {
+ $('#' + options.inputFileId).next().off();
+ $('#' + options.inputFileId).next().on('click', function() {
+ fncUnlink(options, html.link);
+ });
+ }
+
+ // 링크 삭제(파일 삭제)
+ var fncUnlink = function(options, link) {
+ $.ajax({
+ // Request method.
+ method : "POST",
+ // Request URL.
+ url : CONTEXT_PATH +"/editor/deleteFile.do",
+ // Request params.
+ data : {
+ src : link
+ }
+ }).done(function(data) {
+ // console.log ('file was deleted');
+ // 링크 삭제시 파일 목록 삭제
+ if (options.fileListDivId != '') {
+ var atch_id = $('input[name="' + options.hiddenFileName + '"]').val();
+ var new_atch_id = "";
+ for (i = 0; i <= atch_id.split(',').length - 1; i++) {
+ if (atch_id.split(',')[i] != data.fileId) {
+ if (atch_id.split(',').length != 1) {
+ if (new_atch_id == "") {
+ new_atch_id = atch_id.split(',')[i];
+ } else {
+ new_atch_id = new_atch_id + "," + atch_id.split(',')[i];
+ }
+ }
+ }
+ }
+ // 이미지 삭제
+ $('.' + options.imageDivClass).find('img').eq(0).attr('src', '');
+
+ // 실제 넘기는 파일(hidden파일)
+ $('input[name="' + options.hiddenFileName + '"]').val(new_atch_id);
+
+ // 업로드된 파일명 제거
+ $('.filebox .upload-hidden').siblings('.upload-name').val("파일선택");
+
+ // 갯수제한
+ fncMaxLength(options);
+ }
+ }).fail(function(err) {
+ // console.log ('file delete problem: ' + JSON.stringify(err));
+ })
+ }
+ };
+
+ // 개수 제한
+ var fncMaxLength = function(options) {
+ var atch_id = $('input[name="' + options.hiddenFileName + '"]').val();
+ var size = atch_id.split(',').length;
+
+ if( atch_id.length == 0 ) {
+ size = 0;
+ }
+ if( options.maxSize > size ) {
+ $('#' + options.inputFileId).prop('disabled', false);
+ } else {
+ $('#' + options.inputFileId).prop('disabled', true);
+ }
+ }
+ // 확장자 체크 및 용량 체크
+ var fncValidate = function(options, file) {
+ if( options.fileAllowedTypes.indexOf('*') == -1 ) {
+ var ext = file.name.split('.').pop().toLowerCase();
+ if( $.inArray(ext, options.fileAllowedTypes) == -1 ) {
+ alert('허용되지 않은 확장자입니다.');
+ $('#' + options.inputFileId).val("");
+ return false;
+ }
+ }
+ if( options.fileMaxSize > -1 ) {
+ var fileSize = file.size;
+ var maxSize = options.fileMaxSize * 1024 * 1024;
+ if( fileSize > maxSize ) {
+ alert('파일 사이즈는 ' + fileSizeConvert(maxSize) + '이내로 등록 가능합니다.');
+ $('#' + options.inputFileId).val("");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ // 페이지 이벤트
+ var fncPageTrigger = function(method, img) {
+ var fileId = img.data('file');
+ var maxPage = parseInt(img.data('maxpage'));
+ var curPage = parseInt(img.data('curpage'));
+
+ if( fileId != null ) {
+ if (method == 'prev') {
+ if (curPage == 1) {
+ alert("첫페이지 입니다.");
+ return
+ } else {
+ curPage--;
+ img.data('curpage', curPage);
+ }
+ } else if (method == 'next') {
+ if (maxPage == curPage) {
+ alert("최대페이지 입니다.");
+ } else {
+ curPage++;
+ img.data('curpage', curPage);
+ }
+ } else {
+ if (curPage < 1) {
+ alert("0페이지는 이동할 수 없습니다.");
+ return
+ } else if (curPage > maxPage) {
+ alert("최대페이지를 초과할 수 없습니다.");
+ return
+ }
+ }
+ //tiff, tif, pdf, png, jpg등 의 해당페이지에 대한 이미지 생성 및 호출
+ $.blockUI();
+ img.attr('src', '/multiImageview.do?fileId=' + fileId + '&pageSn=' + curPage);
+ }
+ }
+
+ //tiff, tif, pdf, png, jpg 확장자일 경우 전체 페이지 가져오기
+ var fileMaxPage = function (img) {
+ var returnValue;
+ var fileId = img.data('file');
+
+ $.ajax({
+ // Request method.
+ method : "POST",
+ // Request URL.
+ url : "/editor/fileMaxSizeInfo.do",
+ // Request params.
+ data : {fileId: fileId},
+ async: false,
+ }).done(function(totalPage) {
+ returnValue = totalPage;
+ }).fail(function(err) {
+ // console.log ('file delete problem: ' + JSON.stringify(err));
+ })
+ return returnValue;
+ }
+
+ // 이미지 전체화면 이벤트
+ var fncFullScreen = function (img) {
+ var imgCommonPreview = new Image();
+ imgCommonPreview.src= img.attr('src');
+ setTimeout( function () { fncCreatePreviewWin(imgCommonPreview); }, 100);
+ }
+
+ // 이미지 원본 팝업 호출
+ var fncCreatePreviewWin = function (imgCommonPreview) {
+ if(!imgCommonPreview.complete) {
+ setTimeout( function () { fncCreatePreviewWin(imgCommonPreview); }, 100); return;
+ }
+ var scrollsize = 17;
+ var swidth = screen.width - 10;
+ var sheight = screen.height - 90;
+ var wsize = imgCommonPreview.width
+ var hsize = imgCommonPreview.height;
+ if(wsize < 50) wsize = 50; // 가로 최소 크기
+ if(hsize < 50)
+ hsize = 50; // 세로 최소 크기
+ if(wsize > swidth)
+ wsize = swidth; // 가로 최대 크기
+ if(hsize > sheight)
+ hsize = sheight; // 세로 최대 크기
+ // 세로가 최대크기를 초과한경우 세로스크롤바 자리 확보
+ if((wsize < swidth-scrollsize) && hsize >= sheight)
+ wsize += scrollsize;
+ // 가로가 최대크기를 초과한경우 가로스크롤바 자리 확보
+ if((hsize < sheight-scrollsize) && wsize >= swidth)
+ hsize += scrollsize;
+ // IE 6,7 전용 : 가로세로 크기가 보통일때 세로 스크롤바 자리 확보
+ if((wsize < swidth-scrollsize) && hsize < sheight && (navigator.userAgent.indexOf("MSIE 6.0") > -1 || navigator.userAgent.indexOf("MSIE 7.0") > -1))
+ wsize += scrollsize;
+ // 듀얼 모니터에서 팝업 가운데 정렬하기
+ var mtWidth = document.body.clientWidth;
+ // 현재 브라우저가 있는 모니터의 화면 폭 사이즈
+ var mtHeight = document.body.clientHeight;
+ // 현재 브라우저가 있는 모니터의 화면 높이 사이즈
+ var scX = window.screenLeft;
+ // 현재 브라우저의 x 좌표(모니터 두 대를 합한 총 위치 기준)
+ var scY = window.screenTop;
+ // 현재 브라우저의 y 좌표(모니터 두 대를 합한 총 위치 기준)
+ var popX = scX + (mtWidth - wsize) / 2 - 50;
+ // 팝업 창을 띄울 x 위치 지정(모니터 두 대를 합한 총 위치 기준)
+ var popY = scY + (mtHeight - hsize) / 2 - 50;
+ // 팝업 창을 띄울 y 위치 지정(모니터 두 대를 합한 총 위치 기준)
+
+ // window.open('주소', '이름(공란가능)', '속성');
+ imageWin = window.open("", "", "top=" + popY + ",left=" + popX + ",width=" + wsize + ",height=" + hsize +",scrollbars=yes,resizable=yes,status=no,fullscreen=yes");
+ imageWin.document.write("<html><title>Preview</title><body style='margin:0;cursor:pointer;' title='Close' onclick='window.close()'>");
+ imageWin.document.write("<img src='" + imgCommonPreview.src + "'>");
+ imageWin.document.write("</body></html>");
+ }
+
+ //이미지 Viewer option에 따른 버튼생성
+ var fncCreateToolBar = function (img, options) {
+ img.load(function() {
+ $(this).css('visibility', 'visible');
+
+ // 이미지 뷰어 페이징
+ if( options.toolBarOption.paging ) {
+ var maxPage = $(this).data('maxpage');
+ var curPage = $(this).data('curpage');
+
+ $('.'+options.toolBarDivClass).find('.curPage').val(curPage);
+ $('.'+options.toolBarDivClass).find('.maxPage').html(maxPage);
+ }
+
+ // 이미지 로드 시 버튼 활성화
+ $('.'+options.toolBarDivClass).find('button, input').removeClass('disabled').prop('disabled', false);
+
+ // noimage class 삭제
+ $('.'+options.imageDivClass).removeClass('no_img');
+
+ // 권한체크
+ fncAuthoChecker();
+
+ // 로딩종료
+ $.unblockUI();
+ });
+ img.on('error', function(error) {
+ // 최초 이미지 없을때 에러가 아닌 이미지 로드중에 난 에러 체크
+ if( error.target.baseURI.indexOf(error.target.src) == -1 ) {
+ alert("이미지를 로딩하는 중 에러가 발생하였습니다.");
+ // 로딩종료
+ $.unblockUI();
+ }
+ // 이미지 없을 시 버튼 비활성화
+ $('.'+options.toolBarDivClass).find('button, input').addClass('disabled').prop('disabled', true);
+
+ // 파일은 있으나 미리보기 지원이 안되는 확장자일 경우
+ if( $('#'+options.hiddenFileName).val() != '' ) {
+ $('.fileDown').removeClass('disabled').prop('disabled', false);
+ }
+
+ // 이미지 페이징 초기화
+ $('.'+options.toolBarDivClass).find('.curPage').val(0);
+ $('.'+options.toolBarDivClass).find('.maxPage').html(0);
+
+ // noimage class 추가
+ $('.'+options.imageDivClass).addClass('no_img');
+ });
+
+ // 휠 확대 축소
+ if (options.toolBarOption.wheelZoom) {
+ img.on('mousewheel DOMMouseScroll', function(e) {
+ var E = e.originalEvent;
+ if( E.wheelDelta > 0 ) {
+ // 확대
+ img.fncZoom(1.2);
+ } else {
+ // 축소
+ img.fncZoom(0.8);
+ }
+ });
+ }
+
+ // 이미지 확대
+ if (options.toolBarOption.zoomIn) {
+ var dom = '<li>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="확대" style="background-image: url(\'/images/custom/icon_expansion.svg\');"><img src="/images/custom/icon_expansion.svg" alt="확대"></button>'
+ + '</li>';
+ $(dom).appendTo('.' + options.toolBarDivClass).on('click', function() {
+ img.fncZoom(1.2);
+ });
+ }
+
+ // 이미지 축소
+ if (options.toolBarOption.zoomOut) {
+ var dom = '<li>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="축소" style="background-image: url(\'/images/custom/icon_shrink.svg\');"><img src="/images/custom/icon_shrink.svg" alt="축소"></button>'
+ + '</li>';
+ $(dom).appendTo('.' + options.toolBarDivClass).on('click', function() {
+ img.fncZoom(0.8);
+ });
+ }
+
+ // 왼쪽 회전
+ if (options.toolBarOption.leftRotate) {
+ var dom = '<li>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="왼쪽회전" style="background-image: url(\'/images/custom/icon_turn_left.svg\');"><img src="/images/custom/icon_turn_left.svg" alt="왼쪽회전"></button>'
+ + '</li>';
+ $(dom).appendTo('.' + options.toolBarDivClass).on('click', function() {
+ img.fncRotate(-90);
+ });
+ }
+
+ // 오른쪽 회전
+ if (options.toolBarOption.rightRotate) {
+ var dom = '<li>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="오른쪽회전" style="background-image: url(\'/images/custom/icon_turn_right.svg\');"><img src="/images/custom/icon_turn_right.svg" alt="오른쪽회전"></button>'
+ + '</li>';
+ $(dom).appendTo('.' + options.toolBarDivClass).on('click', function() {
+ img.fncRotate(90);
+ });
+ }
+
+ // 파일 다운로드
+ if( options.toolBarOption.download ) {
+ var dom = '<li>'
+ + '<button type="button" class="btn_s btn_img bgcolor01 fileDown" data-autho="DTA0000R01" title="파일다운로드" style="background-image: url(\'/images/custom/icon_file_down.svg\');"><img src="/images/custom/icon_file_down.svg" alt="파일다운로드"></button>'
+ + '</li>';
+ $(dom).appendTo('.' + options.toolBarDivClass).on('click', function() {
+ var fileId = $('#'+options.hiddenFileName).val();
+ if( fileId.indexOf(',') > -1 ) {
+ location.href = "/multiDownload.do?fileId=" + fileId;
+ } else {
+ location.href = CONTEXT_PATH +"/download.do?fileId=" + fileId;
+ }
+ });
+ }
+
+ // 이미지 인쇄
+ if( options.toolBarOption.imgPrint ) {
+ // 인쇄 권한 변경해야됨
+ var dom = '<li>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" data-autho="DTA0000R01" title="인쇄" style="background-image: url(\'/images/custom/icon_print.svg\');"><img src="/images/custom/icon_print.svg" alt="인쇄"></button>'
+ + '</li>';
+ if( img.attr('id') == undefined ) {
+ img.attr('id', 'img' + new Date().getTime());
+ }
+ $(dom).appendTo('.' + options.toolBarDivClass).on('click', function() {
+ var imgId = img.attr('id');
+ var maxpage = img.data('maxpage');
+ if( maxpage >= 100 ) {
+ alert('최대 크기가 100페이지 이상인 문서는 인쇄하실 수 없습니다.\n파일을 다운로드 후 인쇄하여 주시기 바랍니다.');
+ return;
+ }
+ var frmObj = $('<form>', {'id': 'frmprint' + imgId, 'action': '/imagePrint/A3.do', 'method': 'POST', 'target': '_blank'});
+ var inputObj = $('<input>', {'name': 'fileList[0].fileId', 'value': img.data('file')});
+ frmObj.append(inputObj);
+ $(document.body).append(frmObj);
+ $('#frmprint' + imgId).submit();
+ $('#frmprint' + imgId).remove();
+ });
+ }
+
+ // 이미지 뷰어 페이징
+ if( options.toolBarOption.paging ) {
+ var dom = '<li>'
+ + '<div class="page_control">'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="이전" style="background-image: url(\'/images/custom/page-left.svg\');"><img src="/images/custom/page-left.svg" alt="이전"></button>'
+ + '<input type="text" title="" class="width50 onlyNumber curPage" value="0" maxlength="3"/>'
+ + '<em> / </em><em class="maxPage">0</em>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="다음" style="background-image: url(\'/images/custom/page-right.svg\');"><img src="/images/custom/page-right.svg" alt="다음"></button>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="이동" style="background-image: url(\'/images/custom/icon_move.svg\');"><img src="/images/custom/icon_move.svg" alt="이동"></button>'
+ + '</div>'
+ + '</li>';
+ $(dom).appendTo('.' + options.toolBarDivClass)
+ .find('button:eq(0)').on('click', function() {
+ fncPageTrigger('prev', img);
+ }).end()
+ .find('button:eq(1)').on('click', function() {
+ fncPageTrigger('next', img);
+ }).end()
+ .find('button:eq(2)').on('click', function() {
+ fncPageTrigger('move', img);
+ }).end()
+ .find('input[type=text]').on('keydown keyup focusout', function(event) {
+ onlyNumber(this);
+ if( event.keyCode == 13 ) {
+ var maxPage = parseInt(img.data('maxpage'));
+ var curPage = parseInt($(this).val());
+ curPage = isNaN(curPage) ? 1 : curPage;
+ if (curPage < 1) {
+ alert("0페이지는 입력할 수 없습니다.");
+ curPage = 1;
+ } else if (curPage > maxPage) {
+ alert("최대페이지를 초과할 수 없습니다.");
+ curPage = maxPage;
+ }
+ $(this).val(curPage);
+ img.data('curpage', curPage);
+
+ fncPageTrigger('move', img);
+ $(this).blur();
+ }
+ });
+ // 방향키로 페이지 전환
+ if( options.keyEvent ) {
+ $(document).on('keydown', function(event) {
+ if( event.keyCode === 39 ) {
+ fncPageTrigger('next', img);
+ }
+ if( event.keyCode === 37 ) {
+ fncPageTrigger('prev', img);
+ }
+ });
+ }
+ }
+
+ // 이미지 전체화면
+ if( options.toolBarOption.fullScreen ) {
+ var dom = '<li>'
+ + '<button type="button" class="btn_s btn_img bgcolor01" title="전체화면" style="background-image: url(\'/images/custom/icon_full.svg\');"><img src="/images/custom/icon_full.svg" alt="전체화면"></button>'
+ + '</li>';
+ $(dom).appendTo('.' + options.toolBarDivClass).on('click', function() {
+// fncFullScreen(img);
+ // URL호출로 변경
+// var fileId = $('#'+options.hiddenFileName).val();
+ var fileId = img.data('file');
+ var curpage = img.data('curpage');
+ window.open("/com/imageViewFullScreen.do?fileId=" + fileId + "&curPage=" + curpage, fileId, "top=0,left=0,width=" + screen.width + ",height=" + screen.height +",scrollbars=yes,resizable=yes,status=no,fullscreen=yes");
+ });
+ }
+
+ // 이미지 드래그
+ if( options.toolBarOption.draggable ) {
+ // 드래그 enable
+ img.draggable({
+ cursor : "move",
+ scroll: true,
+ stop: function() {
+ // 범위 밖으로 드래그 했을때 보정
+ var topLoc = parseInt($(this).css('top').replace('px', ''));
+ var leftLoc = parseInt($(this).css('left').replace('px', ''));
+ $(this).animate({
+ top: topLoc > 0 ? 0 : topLoc,
+ left: leftLoc > 0 ? 0 : leftLoc
+ }, 200);
+ }
+ });
+ }
+
+ // 이미지 크기
+ $.fn.fncZoom = function(size) {
+ if( size < 1.0 && img.width() < 300 ) {
+ return;
+ }
+ this.stop().animate({
+ width: img.width() * size,
+ height: img.height() * size
+ }, 500);
+ }
+
+ // 이미지 회전
+ $.fn.fncRotate = function(moveAngle) {
+ //현재 각도 구하기
+ function calculateDeg(selector){
+ var tr = $(selector).css('transform');
+ if(tr == "none") {
+ return 0;
+ }
+ var values = tr.split('(')[1].split(')')[0].split(',');
+ var a = values[0];
+ var b = values[1];
+ var c = values[2];
+ var d = values[3];
+
+ var scale = Math.sqrt(a*a + b*b);
+ var sin = b/scale;
+ var angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
+ angle = (Math.ceil( angle / moveAngle)) * moveAngle;
+ return angle;
+ }
+
+ var nowAngle = calculateDeg(this);
+ var op = '';
+ switch( moveAngle + nowAngle ) {
+ case 90:
+ op = ' translateY(-100%)';
+ break;
+ case 180:
+ op = ' translate(-100%,-100%)';
+ break;
+ case 270:
+ op = ' translateX(-100%)';
+ break;
+ case -90:
+ op = ' translateX(-100%)';
+ break;
+ case -180:
+ op = ' translate(-100%,-100%)';
+ break;
+ case -270:
+ op = ' translateY(-100%)';
+ break;
+ }
+ this.stop().animate({transform: moveAngle}, {
+ step: function(now,fx) {
+ now += nowAngle;
+ $(this).css({
+ 'transform-origin': 'top left', /* IE 10+, Firefox, etc. */
+ '-webkit-transform-origin': 'top left', /* Chrome */
+ '-ms-transform-origin': 'top left', /* IE 9 */
+ 'transform':'rotate('+now+'deg)' + op,
+ '-webkit-transform':'rotate('+now+'deg)' + op,
+ '-ms-transform':'rotate('+now+'deg)' + op,
+ });
+ },
+ });
+ }
+ }
+})(jQuery);
+
+// 파일 사이즈 변경
+function fileSizeConvert(size) {
+ var fileSize = size;
+ if (fileSize / 1024 >= 1024) {
+ fileSize = (fileSize / (1024 * 1024)).toFixed(1) + "MB";
+ } else {
+ fileSize = (fileSize / 1024).toFixed(1) + "KB";
+ }
+ return fileSize;
+}
+
+// 인쇄 callback 함수
+function printCallback(params) {
+ var url = "/dta/doc/outputHistManage/regist.do";
+ var aJson = {
+ outptMg: params.outptMg
+ };
+ var dataTable = $('#dta-recpt-list').DataTable();
+ var rowcollection = dataTable.$('input[type="checkbox"]:checked', {"page": "current"});
+ // 상세, 건별수정, 건별등록 시 작동
+ $(params.fileList).each(function(i, data) {
+ var fileId = $('#fileId').val();
+ var dtaRceptId = $('#dtaRceptId').val();
+ if( fileId == data ) {
+ aJson['dtaRceptList[' + i + '].dtaRceptId'] = dtaRceptId;
+ }
+ });
+ $.post(url, aJson, function(data) {
+ if( data != "success" ) {
+ alert('에러가 발생하였습니다.\n관리자에게 문의하세요.');
+ }
+ });
+}
+//Invalid property 'columns[0][search][regex]' of bean class [demo.objects.DataTableRequestDTO]: Property referenced in indexed property path 'columns[0][search][regex]' is neither an array nor a List nor a Map; returned value was [false
+function planify(data) {
+ for (var i = 0; i < data.columns.length; i++) {
+ column = data.columns[i];
+ column.dtaRceptId = column.search.regex;
+ column.searchValue = column.search.value;
+ delete(column.search);
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/imageViewFileUpload.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/jquery.smoothwheel.js
===================================================================
--- base3.10/src/main/webapp/js/com/jquery.smoothwheel.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/jquery.smoothwheel.js (revision 7)
@@ -0,0 +1,153 @@
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * User: phil
+ * Date: 15/11/12
+ * Time: 11:04 AM
+ *
+ */
+(function ($) {
+
+ var self = this, container, running=false, currentY = 0, targetY = 0, oldY = 0, maxScrollTop= 0, minScrollTop, direction, onRenderCallback=null,
+ fricton = 0.95, // higher value for slower deceleration
+ vy = 0,
+ stepAmt = 1,
+ minMovement= 0.1,
+ ts=0.1;
+
+ var updateScrollTarget = function (amt) {
+ targetY += amt;
+ vy += (targetY - oldY) * stepAmt;
+
+ oldY = targetY;
+
+
+ }
+ var render = function () {
+ if (vy < -(minMovement) || vy > minMovement) {
+
+ currentY = (currentY + vy);
+ if (currentY > maxScrollTop) {
+ currentY = vy = 0;
+ } else if (currentY < minScrollTop) {
+ vy = 0;
+ currentY = minScrollTop;
+ }
+
+ container.scrollTop(-currentY);
+
+ vy *= fricton;
+
+ // vy += ts * (currentY-targetY);
+ // scrollTopTweened += settings.tweenSpeed * (scrollTop - scrollTopTweened);
+ // currentY += ts * (targetY - currentY);
+
+ if(onRenderCallback){
+ onRenderCallback();
+ }
+ }
+ }
+ var animateLoop = function () {
+ if(! running)return;
+ requestAnimFrame(animateLoop);
+ render();
+ //log("45","animateLoop","animateLoop", "",stop);
+ }
+ var onWheel = function (e) {
+ e.preventDefault();
+ var evt = e.originalEvent;
+
+ var delta = evt.detail ? evt.detail * -1 : evt.wheelDelta / 40;
+ var dir = delta < 0 ? -1 : 1;
+ if (dir != direction) {
+ vy = 0;
+ direction = dir;
+ }
+
+ //reset currentY in case non-wheel scroll has occurred (scrollbar drag, etc.)
+ currentY = -container.scrollTop();
+
+ updateScrollTarget(delta);
+ }
+
+ /*
+ * http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+ */
+ window.requestAnimFrame = (function () {
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function (callback) {
+ window.setTimeout(callback, 1000 / 60);
+ };
+
+
+ })();
+
+ /*
+ * http://jsbin.com/iqafek/2/edit
+ */
+ var normalizeWheelDelta = function () {
+ // Keep a distribution of observed values, and scale by the
+ // 33rd percentile.
+ var distribution = [], done = null, scale = 30;
+ return function (n) {
+ // Zeroes don't count.
+ if (n == 0) return n;
+ // After 500 samples, we stop sampling and keep current factor.
+ if (done != null) return n * done;
+ var abs = Math.abs(n);
+ // Insert value (sorted in ascending order).
+ outer: do { // Just used for break goto
+ for (var i = 0; i < distribution.length; ++i) {
+ if (abs <= distribution[i]) {
+ distribution.splice(i, 0, abs);
+ break outer;
+ }
+ }
+ distribution.push(abs);
+ } while (false);
+ // Factor is scale divided by 33rd percentile.
+ var factor = scale / distribution[Math.floor(distribution.length / 3)];
+ if (distribution.length == 500) done = factor;
+ return n * factor;
+ };
+ }();
+
+
+ $.fn.smoothWheel = function () {
+ // var args = [].splice.call(arguments, 0);
+ var options = jQuery.extend({}, arguments[0]);
+ return this.each(function (index, elm) {
+
+ if(!('ontouchstart' in window)){
+ container = $(this);
+ container.bind("mousewheel", onWheel);
+ container.bind("DOMMouseScroll", onWheel);
+
+ //set target/old/current Y to match current scroll position to prevent jump to top of container
+ targetY = oldY = container.get(0).scrollTop;
+ currentY = -targetY;
+
+ minScrollTop = container.get(0).clientHeight - container.get(0).scrollHeight;
+ if(options.onRender){
+ onRenderCallback = options.onRender;
+ }
+ if(options.remove){
+ log("122","smoothWheel","remove", "");
+ running=false;
+ container.unbind("mousewheel", onWheel);
+ container.unbind("DOMMouseScroll", onWheel);
+ }else if(!running){
+ running=true;
+ animateLoop();
+ }
+
+ }
+ });
+ };
+
+
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/jquery.smoothwheel.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/tableExcelExport.js
===================================================================
--- base3.10/src/main/webapp/js/com/tableExcelExport.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/tableExcelExport.js (revision 7)
@@ -0,0 +1,82 @@
+/**
+ * Table 정보를 Excel 다운로드 한다.
+ * $.tableExcelExport(테이블ID, 시트명, xls 파일명)
+ */
+(function($) {
+ $.tableExcelExport = function(tableId, sheet, fileName) {
+ var worksheet = null;
+ var table = get(tableId);
+ const template = {excel: '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 11"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'};
+ const ctx = {worksheet: sheet || 'Worksheet', table: table.innerHTML};
+ const b64 = base64(format(template.excel, ctx));
+
+ let today = new Date();
+ let year = today.getFullYear(); // 년도
+ let month = today.getMonth() + 1; // 월
+ let date = today.getDate(); // 날짜
+ var yyyymmdd = year + "." + month + "." + date;
+ fileName = fileName.substr(0, fileName.lastIndexOf(".xls")) + "_" + yyyymmdd + ".xls";
+ return createDownloadLink(b64, 'application/vnd.ms-excel', fileName);
+ };
+ const createDownloadLink = function(base64data, exporttype, filename) {
+ if (window.navigator.msSaveBlob) {
+ const blob = b64toBlob(base64data, exporttype);
+ window.navigator.msSaveBlob(blob, filename);
+ return false;
+ } else if(window.URL.createObjectURL) {
+ const blob = b64toBlob(base64data, exporttype);
+ var a = $("<a style='display: none;'/>");
+ var url = window.URL.createObjectURL(blob);
+ a.attr("href", url);
+ a.attr("download", filename);
+ $("body").append(a);
+ a[0].click();
+ window.URL.revokeObjectURL(url);
+ a.remove();
+ } else {
+ anchor.download = filename;
+ anchor.href = "data:" + exporttype + ";base64," + base64data;
+ }
+ return true;
+ };
+ const format = function(s, c) {
+ return s.replace(new RegExp("{(\\w+)}", "g"), function(m, p) {
+ return c[p];
+ });
+ };
+ const get = function(element) {
+ if (!element.nodeType) {
+ return document.getElementById(element);
+ }
+ return element;
+ };
+ const base64 = function(s) {
+ return window.btoa(unescape(encodeURIComponent(s)));
+ };
+ const b64toBlob = function (b64Data, contentType, sliceSize) {
+ contentType = contentType || '';
+ sliceSize = sliceSize || 512;
+
+ const byteCharacters = window.atob(b64Data);
+ const byteArrays = [];
+
+ let offset;
+ for (offset = 0; offset < byteCharacters.length; offset += sliceSize) {
+ const slice = byteCharacters.slice(offset, offset + sliceSize);
+
+ const byteNumbers = new Array(slice.length);
+ let i;
+ for (i = 0; i < slice.length; i = i + 1) {
+ byteNumbers[i] = slice.charCodeAt(i);
+ }
+
+ const byteArray = new window.Uint8Array(byteNumbers);
+
+ byteArrays.push(byteArray);
+ }
+
+ return new window.Blob(byteArrays, {
+ type: contentType
+ });
+ };
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/tableExcelExport.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/printPreview.js
===================================================================
--- base3.10/src/main/webapp/js/com/printPreview.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/printPreview.js (revision 7)
@@ -0,0 +1,66 @@
+;(function ( $ ) {
+ $.fn.printPreview = function( options ) {
+ var elem = this;
+
+ var opt = $.extend({
+ obj2print:'body',
+ style:'',
+ width:'670',
+ height:screen.height-105,
+ top:0,
+ left:'center',
+ resizable : 'yes',
+ scrollbars:'yes',
+ status:'no',
+ title:'Print Preview'
+ }, options );
+ if(opt.left == 'center'){
+ opt.left=(screen.width/2)-(opt.width/2);
+ }
+ $(opt.obj2print+" input").each(function(){
+ $(this).attr('value',$(this).val());
+ });
+ $(opt.obj2print+" textarea").each(function(){
+ $(this).html($(this).val());
+ });
+ return elem.bind("click.printPreview", function () {
+ var btnCode = elem[0].outerHTML;
+ var headString = '';
+ headString = $("head").html();
+ var str = "<!DOCTYPE html><html><head>"+headString+opt.style+"</head><body>";
+// str+=$(opt.obj2print)[0].outerHTML.replace(btnCode,'') // 기존 단일만 되서 수정함
+ $(opt.obj2print).each(function() {
+ str+=this.outerHTML.replace(btnCode,'');
+ });
+ str+="</body></html>";
+ //top open multiple instances we have to name newWindow differently, so getting milliseconds
+ var d = new Date();
+ var n = 'newWindow'+d.getMilliseconds();
+ var newWindow = window.open(
+ "",
+ n,
+ "width="+opt.width+
+ ",top="+opt.top+
+ ",height="+opt.height+
+ ",left="+opt.left+
+ ",resizable="+opt.resizable+
+ ",scrollbars="+opt.scrollbars+
+ ",status="+opt.status
+ );
+ newWindow.document.write(str);
+ newWindow.document.title = opt.title;
+
+ if( newWindow.addEventListener ) {
+ newWindow.addEventListener('load', function() {
+ newWindow.document.execCommand('print', false, null) || newWindow.print();
+ }, false);
+ } else if( newWindow.attachEvent ) {
+ newWindow.attachEvent('onload', function() {
+ newWindow.document.execCommand('print', false, null) || newWindow.print();
+ });
+ }
+ newWindow.document.close();
+ newWindow.focus();
+ });
+ };
+}( jQuery ));
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/printPreview.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/com/clipboard.min.js
===================================================================
--- base3.10/src/main/webapp/js/com/clipboard.min.js (nonexistent)
+++ base3.10/src/main/webapp/js/com/clipboard.min.js (revision 7)
@@ -0,0 +1,7 @@
+/*!
+ * clipboard.js v2.0.8
+ * https://clipboardjs.com/
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={134:function(t,e,n){"use strict";n.d(e,{default:function(){return r}});var e=n(279),i=n.n(e),e=n(370),a=n.n(e),e=n(817),o=n.n(e);function c(t){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function u(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var l=function(){function e(t){!function(t){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this),this.resolveOptions(t),this.initSelection()}var t,n,r;return t=e,(n=[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"createFakeElement",value:function(){var t="rtl"===document.documentElement.getAttribute("dir");this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";t=window.pageYOffset||document.documentElement.scrollTop;return this.fakeElem.style.top="".concat(t,"px"),this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.fakeElem}},{key:"selectFake",value:function(){var t=this,e=this.createFakeElement();this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.container.appendChild(e),this.selectedText=o()(e),this.copyText(),this.removeFake()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=o()(this.target),this.copyText()}},{key:"copyText",value:function(){var e;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==c(t)||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}])&&u(t.prototype,n),r&&u(t,r),e}();function s(t){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function f(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function h(t,e){return(h=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function d(n){var r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(t){return!1}}();return function(){var t,e=p(n);return t=r?(t=p(this).constructor,Reflect.construct(e,arguments,t)):e.apply(this,arguments),e=this,!(t=t)||"object"!==s(t)&&"function"!=typeof t?function(t){if(void 0!==t)return t;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e):t}}function p(t){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function y(t,e){t="data-clipboard-".concat(t);if(e.hasAttribute(t))return e.getAttribute(t)}var r=function(){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&h(t,e)}(o,i());var t,e,n,r=d(o);function o(t,e){var n;return function(t){if(!(t instanceof o))throw new TypeError("Cannot call a class as a function")}(this),(n=r.call(this)).resolveOptions(e),n.listenClick(t),n}return t=o,n=[{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof t?[t]:t,e=!!document.queryCommandSupported;return t.forEach(function(t){e=e&&!!document.queryCommandSupported(t)}),e}}],(e=[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===s(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=a()(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){t=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(t){return y("action",t)}},{key:"defaultTarget",value:function(t){t=y("target",t);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(t){return y("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}])&&f(t.prototype,e),n&&f(t,n),o}()},828:function(t){var e;"undefined"==typeof Element||Element.prototype.matches||((e=Element.prototype).matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector),t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},438:function(t,e,n){var a=n(828);function i(t,e,n,r,o){var i=function(e,n,t,r){return function(t){t.delegateTarget=a(t.target,n),t.delegateTarget&&r.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,o),{destroy:function(){t.removeEventListener(n,i,o)}}}t.exports=function(t,e,n,r,o){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,r,o)}))}},879:function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},370:function(t,e,n){var l=n(879),s=n(438);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!l.string(e))throw new TypeError("Second argument must be a String");if(!l.fn(n))throw new TypeError("Third argument must be a Function");if(l.node(t))return c=e,u=n,(a=t).addEventListener(c,u),{destroy:function(){a.removeEventListener(c,u)}};if(l.nodeList(t))return r=t,o=e,i=n,Array.prototype.forEach.call(r,function(t){t.addEventListener(o,i)}),{destroy:function(){Array.prototype.forEach.call(r,function(t){t.removeEventListener(o,i)})}};if(l.string(t))return t=t,e=e,n=n,s(document.body,t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var r,o,i,a,c,u}},817:function(t){t.exports=function(t){var e,n="SELECT"===t.nodeName?(t.focus(),t.value):"INPUT"===t.nodeName||"TEXTAREA"===t.nodeName?((e=t.hasAttribute("readonly"))||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),e||t.removeAttribute("readonly"),t.value):(t.hasAttribute("contenteditable")&&t.focus(),n=window.getSelection(),(e=document.createRange()).selectNodeContents(t),n.removeAllRanges(),n.addRange(e),n.toString());return n}},279:function(t){function e(){}e.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function o(){r.off(t,o),e.apply(n,arguments)}return o._=e,this.on(t,o,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,o=n.length;r<o;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],o=[];if(r&&e)for(var i=0,a=r.length;i<a;i++)r[i].fn!==e&&r[i].fn._!==e&&o.push(r[i]);return o.length?n[t]=o:delete n[t],this}},t.exports=e,t.exports.TinyEmitter=e}},o={},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r(134).default;function r(t){if(o[t])return o[t].exports;var e=o[t]={exports:{}};return n[t](e,e.exports,r),e.exports}var n,o});
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/com/clipboard.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/egovframework/com/sts/sst/treemenu.js
===================================================================
--- base3.10/src/main/webapp/js/egovframework/com/sts/sst/treemenu.js (nonexistent)
+++ base3.10/src/main/webapp/js/egovframework/com/sts/sst/treemenu.js (revision 7)
@@ -0,0 +1,217 @@
+/****************************************************************
+ *
+ * 파일명 : treemenu.js
+ * 설 명 : 전자정부 공통서비스 메뉴 JavaScript
+ *
+ * 수정일 수정자 Function 명
+ * ------------ --------- ----------------------------
+ * 2011.09.01 이기하 imgpath 변수는 js를 호출하는
+ * jsp에서 입력받도록 수정
+ *
+ */
+
+/*
+ * 노드 , 트리 구성 정보 선언
+ */
+var treeNodes = new Array();;
+var openTreeNodes = new Array();
+var treeIcons = new Array(6);
+//var imgpath = "./../../../images/egovframework/com/cmm/utl/"
+var treeYeobu = false;
+
+/*
+ * 노드 , 트리 구성 이미지 정보
+ */
+function preloadIcons() {
+ treeIcons[0] = new Image();
+ treeIcons[0].src = imgpath+"menu_plus.gif";
+ treeIcons[1] = new Image();
+ treeIcons[1].src = imgpath+"menu_plusbottom.gif";
+ treeIcons[2] = new Image();
+ treeIcons[2].src = imgpath+"menu_minus.gif";
+ treeIcons[3] = new Image();
+ treeIcons[3].src = imgpath+"menu_minusbottom.gif";
+ treeIcons[4] = new Image();
+ treeIcons[4].src = imgpath+"menu_folder.gif";
+ treeIcons[5] = new Image();
+ treeIcons[5].src = imgpath+"menu_folderopen.gif";
+}
+/*
+* 트리생성함수
+*/
+function createTree(arrName, vYeobu) {
+ var startNode, openNode;
+ treeNodes = arrName;
+ treeYeobu = vYeobu;
+ if (treeNodes.length > 0) {
+ preloadIcons();
+ if (startNode == null) startNode = 0;
+ if (openNode != 0 || openNode != null) setOpenTreeNodes(openNode);
+ if (startNode !=0) {
+ var nodeValues = treeNodes[getTreeArrayId(startNode)].split("|");
+ document.write("<a href='" + nodeValues[3] + "' onmouseover='window.status='" + nodeValues[3] + "';return true;' onmouseout='window.status=' ';return true;'><img src='"+imgpath+"menu_folderopen.gif' border='0' align='absbottom' alt=''>" + nodeValues[2] + "</a><br>");
+ } else document.write("<img src='"+imgpath+"menu_base.gif' border='0' align='absbottom' alt='' >메뉴목록<br>");
+ var recursedNodes = new Array();
+ addTreeNode(startNode, recursedNodes);
+ }
+}
+/*
+* 노드위치 확인
+*/
+function getTreeArrayId(node) {
+ for (i=0; i<treeNodes.length; i++) {
+ var nodeValues = treeNodes[i].split("|");
+ if (nodeValues[0]==node) return i;
+ }
+ return 0;
+}
+/*
+* 트리 노드 열기
+*/
+function setOpenTreeNodes(openNode) {
+ for (i=0; i<treeNodes.length; i++) {
+ var nodeValues = treeNodes[i].split("|");
+ if (nodeValues[0]==openNode) {
+ openTreeNodes.push(nodeValues[0]);
+ setOpenTreeNodes(nodeValues[1]);
+ }
+ }
+}
+/*
+* 트리노드 오픈 여부 확인
+*/
+function isTreeNodeOpen(node) {
+ if (treeYeobu){ return true; }
+ for (i=0; i<openTreeNodes.length; i++){
+ if (openTreeNodes[i]==node){ return true; }
+ }
+ return false;
+}
+/*
+* 하위 트리노드 존재여부 확인
+*/
+function hasChildTreeNode(parentNode) {
+ for (i=0; i< treeNodes.length; i++) {
+ var nodeValues = treeNodes[i].split("|");
+ if (nodeValues[1] == parentNode) return true;
+ }
+ return false;
+}
+/*
+* 트리노드 최하위 여부 확인
+*/
+function lastTreeSibling (node, parentNode) {
+ var lastChild = 0;
+ for (i=0; i< treeNodes.length; i++) {
+ var nodeValues = treeNodes[i].split("|");
+ if (nodeValues[1] == parentNode)
+ lastChild = nodeValues[0];
+ }
+ if (lastChild==node) return true;
+ return false;
+}
+
+/*
+* 신규 트리노드 추가
+*/
+function addTreeNode(parentNode, recursedNodes) {
+ for (var i = 0; i < treeNodes.length; i++) {
+
+ var nodeValues = treeNodes[i].split("|");
+ if (nodeValues[1] == parentNode) {
+
+ var lastSibling = lastTreeSibling(nodeValues[0], nodeValues[1]);
+ var hasChildNode = hasChildTreeNode(nodeValues[0]);
+ var isNodeOpen = isTreeNodeOpen(nodeValues[0]);
+
+ for (g=0; g<recursedNodes.length; g++) {
+ if (recursedNodes[g] == 1) document.write("<img src='"+imgpath+"menu_line.gif' border='0' align='absbottom' alt='' >");
+ else document.write("<img src='"+imgpath+"menu_empty.gif' border='0' align='absbottom' alt='' >");
+ }
+
+ if (lastSibling) recursedNodes.push(0);
+ else recursedNodes.push(1);
+
+ if (hasChildNode) {
+ if (lastSibling) {
+ document.write("<a href='javascript: openCloseEx(" + nodeValues[0] + ", 1);'><img id='join" + nodeValues[0] + "' src='"+imgpath);
+ if (isNodeOpen) document.write("menu_minus");
+ else document.write("menu_plus");
+ document.write("bottom.gif' border='0' align='absbottom' alt='Open/Close node' ></a>");
+ } else {
+ document.write("<a href='javascript: openCloseEx(" + nodeValues[0] + ", 0);'><img id='join" + nodeValues[0] + "' src='"+imgpath);
+ if (isNodeOpen) document.write("menu_minus");
+ else document.write("menu_plus");
+ document.write(".gif' border='0' align='absbottom' alt='Open/Close node' /></a>");
+ }
+ } else {
+ if (lastSibling) document.write("<img src='"+imgpath+"menu_joinbottom.gif' border='0' align='absbottom' alt='' >");
+ else document.write("<img src='"+imgpath+"menu_join.gif' border='0' align='absbottom' alt='' >");
+ }
+ document.write("<a href=javascript:temp_aa('" + treeNodes[i] + "');>");
+ if (hasChildNode) {
+ document.write("<img id='icon" + nodeValues[0] + "' src='"+imgpath+"menu_folder")
+ if (isNodeOpen) document.write("open");
+ document.write(".gif' border='0' alt='Folder' >");
+ } else document.write("<img id='icon" + nodeValues[0] + "' src='"+imgpath+"menu_page.gif' border='0' align='absbottom' alt='Page'>");
+ document.write(nodeValues[2]);
+ document.write("</a><br>");
+ if (hasChildNode) {
+ document.write("<div id='div" + nodeValues[0] + "'");
+ if (!isNodeOpen) document.write(" style='display: none;'");
+ document.write(">");
+ addTreeNode(nodeValues[0], recursedNodes);
+ document.write("</div>");
+ }
+ recursedNodes.pop();
+ }
+ }
+}
+/*
+* 트리노드 액션(열기,닫기)
+*/
+function openCloseEx(node, bottom) {
+ var treeDiv = document.getElementById("div" + node);
+ var treeJoin = document.getElementById("join" + node);
+ var treeIcon = document.getElementById("icon" + node);
+
+ if (treeDiv.style.display == 'none') {
+ if (bottom==1) treeJoin.src = treeIcons[3].src;
+ else treeJoin.src = treeIcons[2].src;
+ treeIcon.src = treeIcons[5].src;
+ treeDiv.style.display = '';
+ } else {
+ if (bottom==1) treeJoin.src = treeIcons[1].src;
+ else treeJoin.src = treeIcons[0].src;
+ treeIcon.src = treeIcons[4].src;
+ treeDiv.style.display = 'none';
+ }
+}
+if(!Array.prototype.push) {
+ function fnArrayPush() {
+ for(var i=0;i<arguments.length;i++)
+ this[this.length]=arguments[i];
+ return this.length;
+ }
+ Array.prototype.push = fnArrayPush;
+}
+if(!Array.prototype.pop) {
+ function fnArrayPop(){
+ lastElement = this[this.length-1];
+ this.length = Math.max(this.length-1,0);
+ return lastElement;
+ }
+ Array.prototype.pop = fnArrayPop;
+}
+
+function temp_aa(treeNodes) {
+ var nodeValues = treeNodes.split("|");
+ document.listForm.detailStatsKind.value = nodeValues[3];
+ fnSearch();
+}
+
+function updateMenuList() {
+ alert("수정");
+ document.menuListForm.action = "<c:url value='/sym/mnu/mpm/EgovMenuListUpdt.do'/>";
+ parent.document.menuListForm.submit();
+}
Property changes on: base3.10/src/main/webapp/js/egovframework/com/sts/sst/treemenu.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/egovframework/com/cmm/jquery-1.12.4.min.js
===================================================================
--- base3.10/src/main/webapp/js/egovframework/com/cmm/jquery-1.12.4.min.js (nonexistent)
+++ base3.10/src/main/webapp/js/egovframework/com/cmm/jquery-1.12.4.min.js (revision 7)
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
+marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
+padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
Property changes on: base3.10/src/main/webapp/js/egovframework/com/cmm/jquery-1.12.4.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/egovframework/com/cmm/showModalDialogCallee.js
===================================================================
--- base3.10/src/main/webapp/js/egovframework/com/cmm/showModalDialogCallee.js (nonexistent)
+++ base3.10/src/main/webapp/js/egovframework/com/cmm/showModalDialogCallee.js (revision 7)
@@ -0,0 +1,69 @@
+/****************************************************************
+ *
+ * 파일명 : showModalDialogCallee.js
+ * 설 명 : showModalDialog 기능을 대체하는 JavaScript
+ *
+ * 수정일 수정자 Version Function 명
+ * ------------ --------- ------------- ----------------------------
+ * 2014.09.25 Vincent Han 1.0 최초생성
+ *
+ */
+
+//----------------------
+//popped up page
+//----------------------
+function getDialogArguments() {
+
+ if (!window.showModalDialog) {
+ if (opener != null && !opener.closed) {
+ try {
+ window.dialogArguments = opener.getDialogArgumentsInner();
+ } catch (err) {
+ alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
+ }
+ } else if (parent.opener != null && !parent.opener.closed) {
+ try {
+ window.dialogArguments = parent.opener.getDialogArgumentsInner();
+ parent.window.dialogArguments = window.dialogArguments;
+ } catch (err) {
+ alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
+ }
+ } else {
+ alert('업무 화면에 대한 변동이 있습니다. 다시 시도해 주십시오.');
+ }
+ }
+}
+
+function setReturnValue(obj) {
+ if (!window.showModalDialog) {
+ if (opener != null && !opener.closed) {
+
+ var callbackMethod = opener.getCallbackMethodName();
+
+ try {
+ if (callbackMethod != null) {
+ opener[callbackMethod](obj);
+ } else {
+ opener.showModalDialogCallback(obj);
+ }
+ } catch (err) {
+ alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
+ }
+ } else if (parent.opener != null && !parent.opener.closed) {
+
+ var callbackMethod = parent.opener.getCallbackMethodName();
+
+ try {
+ if (callbackMethod != null) {
+ parent.opener[callbackMethod](obj);
+ } else {
+ parent.opener.showModalDialogCallback(obj);
+ }
+ } catch (err) {
+ alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err);
+ }
+ } else {
+ alert('업무 화면에 대한 변동이 있습니다. 다시 시도해 주십시오.');
+ }
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/js/egovframework/com/cmm/showModalDialogCallee.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/js/egovframework/com/cmm/jqueryui.js
===================================================================
--- base3.10/src/main/webapp/js/egovframework/com/cmm/jqueryui.js (nonexistent)
+++ base3.10/src/main/webapp/js/egovframework/com/cmm/jqueryui.js (revision 7)
@@ -0,0 +1,18706 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define([ "jquery" ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+}(function( $ ) {
+
+$.ui = $.ui || {};
+
+var version = $.ui.version = "1.12.1";
+
+
+/*!
+ * jQuery UI Widget 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Widget
+//>>group: Core
+//>>description: Provides a factory for creating stateful widgets with a common API.
+//>>docs: http://api.jqueryui.com/jQuery.widget/
+//>>demos: http://jqueryui.com/widget/
+
+
+
+var widgetUuid = 0;
+var widgetSlice = Array.prototype.slice;
+
+$.cleanData = ( function( orig ) {
+ return function( elems ) {
+ var events, elem, i;
+ for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
+ try {
+
+ // Only trigger remove when necessary to save time
+ events = $._data( elem, "events" );
+ if ( events && events.remove ) {
+ $( elem ).triggerHandler( "remove" );
+ }
+
+ // Http://bugs.jquery.com/ticket/8235
+ } catch ( e ) {}
+ }
+ orig( elems );
+ };
+} )( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+ var existingConstructor, constructor, basePrototype;
+
+ // ProxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ var proxiedPrototype = {};
+
+ var namespace = name.split( "." )[ 0 ];
+ name = name.split( "." )[ 1 ];
+ var fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ if ( $.isArray( prototype ) ) {
+ prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
+ }
+
+ // Create selector for plugin
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+
+ // Allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
+ // Allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+
+ // Extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+
+ // Copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+
+ // Track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ } );
+
+ basePrototype = new base();
+
+ // We need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = ( function() {
+ function _super() {
+ return base.prototype[ prop ].apply( this, arguments );
+ }
+
+ function _superApply( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ }
+
+ return function() {
+ var __super = this._super;
+ var __superApply = this._superApply;
+ var returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ } )();
+ } );
+ constructor.prototype = $.widget.extend( basePrototype, {
+
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ } );
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // Redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
+ child._proto );
+ } );
+
+ // Remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+
+ return constructor;
+};
+
+$.widget.extend = function( target ) {
+ var input = widgetSlice.call( arguments, 1 );
+ var inputIndex = 0;
+ var inputLength = input.length;
+ var key;
+ var value;
+
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
+};
+
+$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string";
+ var args = widgetSlice.call( arguments, 1 );
+ var returnValue = this;
+
+ if ( isMethodCall ) {
+
+ // If this is an empty collection, we need to have the instance method
+ // return undefined instead of the jQuery instance
+ if ( !this.length && options === "instance" ) {
+ returnValue = undefined;
+ } else {
+ this.each( function() {
+ var methodValue;
+ var instance = $.data( this, fullName );
+
+ if ( options === "instance" ) {
+ returnValue = instance;
+ return false;
+ }
+
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name +
+ " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+
+ if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name +
+ " widget instance" );
+ }
+
+ methodValue = instance[ options ].apply( instance, args );
+
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
+ return false;
+ }
+ } );
+ }
+ } else {
+
+ // Allow multiple hashes to be passed on init
+ if ( args.length ) {
+ options = $.widget.extend.apply( null, [ options ].concat( args ) );
+ }
+
+ this.each( function() {
+ var instance = $.data( this, fullName );
+ if ( instance ) {
+ instance.option( options || {} );
+ if ( instance._init ) {
+ instance._init();
+ }
+ } else {
+ $.data( this, fullName, new object( options, this ) );
+ }
+ } );
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+
+ options: {
+ classes: {},
+ disabled: false,
+
+ // Callbacks
+ create: null
+ },
+
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widgetUuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+ this.classesElementLookup = {};
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ } );
+ this.document = $( element.style ?
+
+ // Element within the document
+ element.ownerDocument :
+
+ // Element is window or document
+ element.document || element );
+ this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
+ }
+
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this._create();
+
+ if ( this.options.disabled ) {
+ this._setOptionDisabled( this.options.disabled );
+ }
+
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+
+ _getCreateOptions: function() {
+ return {};
+ },
+
+ _getCreateEventData: $.noop,
+
+ _create: $.noop,
+
+ _init: $.noop,
+
+ destroy: function() {
+ var that = this;
+
+ this._destroy();
+ $.each( this.classesElementLookup, function( key, value ) {
+ that._removeClass( value, key );
+ } );
+
+ // We can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .off( this.eventNamespace )
+ .removeData( this.widgetFullName );
+ this.widget()
+ .off( this.eventNamespace )
+ .removeAttr( "aria-disabled" );
+
+ // Clean up events and states
+ this.bindings.off( this.eventNamespace );
+ },
+
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key;
+ var parts;
+ var curOption;
+ var i;
+
+ if ( arguments.length === 0 ) {
+
+ // Don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+
+ // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( arguments.length === 1 ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( arguments.length === 1 ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "classes" ) {
+ this._setOptionClasses( value );
+ }
+
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this._setOptionDisabled( value );
+ }
+
+ return this;
+ },
+
+ _setOptionClasses: function( value ) {
+ var classKey, elements, currentElements;
+
+ for ( classKey in value ) {
+ currentElements = this.classesElementLookup[ classKey ];
+ if ( value[ classKey ] === this.options.classes[ classKey ] ||
+ !currentElements ||
+ !currentElements.length ) {
+ continue;
+ }
+
+ // We are doing this to create a new jQuery object because the _removeClass() call
+ // on the next line is going to destroy the reference to the current elements being
+ // tracked. We need to save a copy of this collection so that we can add the new classes
+ // below.
+ elements = $( currentElements.get() );
+ this._removeClass( currentElements, classKey );
+
+ // We don't use _addClass() here, because that uses this.options.classes
+ // for generating the string of classes. We want to use the value passed in from
+ // _setOption(), this is the new value of the classes option which was passed to
+ // _setOption(). We pass this value directly to _classes().
+ elements.addClass( this._classes( {
+ element: elements,
+ keys: classKey,
+ classes: value,
+ add: true
+ } ) );
+ }
+ },
+
+ _setOptionDisabled: function( value ) {
+ this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this._removeClass( this.hoverable, null, "ui-state-hover" );
+ this._removeClass( this.focusable, null, "ui-state-focus" );
+ }
+ },
+
+ enable: function() {
+ return this._setOptions( { disabled: false } );
+ },
+
+ disable: function() {
+ return this._setOptions( { disabled: true } );
+ },
+
+ _classes: function( options ) {
+ var full = [];
+ var that = this;
+
+ options = $.extend( {
+ element: this.element,
+ classes: this.options.classes || {}
+ }, options );
+
+ function processClassString( classes, checkOption ) {
+ var current, i;
+ for ( i = 0; i < classes.length; i++ ) {
+ current = that.classesElementLookup[ classes[ i ] ] || $();
+ if ( options.add ) {
+ current = $( $.unique( current.get().concat( options.element.get() ) ) );
+ } else {
+ current = $( current.not( options.element ).get() );
+ }
+ that.classesElementLookup[ classes[ i ] ] = current;
+ full.push( classes[ i ] );
+ if ( checkOption && options.classes[ classes[ i ] ] ) {
+ full.push( options.classes[ classes[ i ] ] );
+ }
+ }
+ }
+
+ this._on( options.element, {
+ "remove": "_untrackClassesElement"
+ } );
+
+ if ( options.keys ) {
+ processClassString( options.keys.match( /\S+/g ) || [], true );
+ }
+ if ( options.extra ) {
+ processClassString( options.extra.match( /\S+/g ) || [] );
+ }
+
+ return full.join( " " );
+ },
+
+ _untrackClassesElement: function( event ) {
+ var that = this;
+ $.each( that.classesElementLookup, function( key, value ) {
+ if ( $.inArray( event.target, value ) !== -1 ) {
+ that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
+ }
+ } );
+ },
+
+ _removeClass: function( element, keys, extra ) {
+ return this._toggleClass( element, keys, extra, false );
+ },
+
+ _addClass: function( element, keys, extra ) {
+ return this._toggleClass( element, keys, extra, true );
+ },
+
+ _toggleClass: function( element, keys, extra, add ) {
+ add = ( typeof add === "boolean" ) ? add : extra;
+ var shift = ( typeof element === "string" || element === null ),
+ options = {
+ extra: shift ? keys : extra,
+ keys: shift ? element : keys,
+ element: shift ? this.element : element,
+ add: add
+ };
+ options.element.toggleClass( this._classes( options ), add );
+ return this;
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement;
+ var instance = this;
+
+ // No suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // No element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+
+ // Allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // Copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ );
+ var eventName = match[ 1 ] + instance.eventNamespace;
+ var selector = match[ 2 ];
+
+ if ( selector ) {
+ delegateElement.on( eventName, selector, handlerProxy );
+ } else {
+ element.on( eventName, handlerProxy );
+ }
+ } );
+ },
+
+ _off: function( element, eventName ) {
+ eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
+ this.eventNamespace;
+ element.off( eventName ).off( eventName );
+
+ // Clear the stack to avoid memory leaks (#10056)
+ this.bindings = $( this.bindings.not( element ).get() );
+ this.focusable = $( this.focusable.not( element ).get() );
+ this.hoverable = $( this.hoverable.not( element ).get() );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
+ }
+ } );
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
+ }
+ } );
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig;
+ var callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+
+ // The original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // Copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+
+ var hasOptions;
+ var effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue( function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ } );
+ }
+ };
+} );
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Position 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+//>>label: Position
+//>>group: Core
+//>>description: Positions elements relative to other elements.
+//>>docs: http://api.jqueryui.com/position/
+//>>demos: http://jqueryui.com/position/
+
+
+( function() {
+var cachedScrollbarWidth,
+ max = Math.max,
+ abs = Math.abs,
+ rhorizontal = /left|center|right/,
+ rvertical = /top|center|bottom/,
+ roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+ rposition = /^\w+/,
+ rpercent = /%$/,
+ _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+ return [
+ parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+ parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+ ];
+}
+
+function parseCss( element, property ) {
+ return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+ var raw = elem[ 0 ];
+ if ( raw.nodeType === 9 ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: 0, left: 0 }
+ };
+ }
+ if ( $.isWindow( raw ) ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+ };
+ }
+ if ( raw.preventDefault ) {
+ return {
+ width: 0,
+ height: 0,
+ offset: { top: raw.pageY, left: raw.pageX }
+ };
+ }
+ return {
+ width: elem.outerWidth(),
+ height: elem.outerHeight(),
+ offset: elem.offset()
+ };
+}
+
+$.position = {
+ scrollbarWidth: function() {
+ if ( cachedScrollbarWidth !== undefined ) {
+ return cachedScrollbarWidth;
+ }
+ var w1, w2,
+ div = $( "<div " +
+ "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
+ "<div style='height:100px;width:auto;'></div></div>" ),
+ innerDiv = div.children()[ 0 ];
+
+ $( "body" ).append( div );
+ w1 = innerDiv.offsetWidth;
+ div.css( "overflow", "scroll" );
+
+ w2 = innerDiv.offsetWidth;
+
+ if ( w1 === w2 ) {
+ w2 = div[ 0 ].clientWidth;
+ }
+
+ div.remove();
+
+ return ( cachedScrollbarWidth = w1 - w2 );
+ },
+ getScrollInfo: function( within ) {
+ var overflowX = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-x" ),
+ overflowY = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-y" ),
+ hasOverflowX = overflowX === "scroll" ||
+ ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
+ hasOverflowY = overflowY === "scroll" ||
+ ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
+ return {
+ width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+ height: hasOverflowX ? $.position.scrollbarWidth() : 0
+ };
+ },
+ getWithinInfo: function( element ) {
+ var withinElement = $( element || window ),
+ isWindow = $.isWindow( withinElement[ 0 ] ),
+ isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
+ hasOffset = !isWindow && !isDocument;
+ return {
+ element: withinElement,
+ isWindow: isWindow,
+ isDocument: isDocument,
+ offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
+ scrollLeft: withinElement.scrollLeft(),
+ scrollTop: withinElement.scrollTop(),
+ width: withinElement.outerWidth(),
+ height: withinElement.outerHeight()
+ };
+ }
+};
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // Make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+ target = $( options.of ),
+ within = $.position.getWithinInfo( options.within ),
+ scrollInfo = $.position.getScrollInfo( within ),
+ collision = ( options.collision || "flip" ).split( " " ),
+ offsets = {};
+
+ dimensions = getDimensions( target );
+ if ( target[ 0 ].preventDefault ) {
+
+ // Force left top to allow flipping
+ options.at = "left top";
+ }
+ targetWidth = dimensions.width;
+ targetHeight = dimensions.height;
+ targetOffset = dimensions.offset;
+
+ // Clone to reuse original targetOffset later
+ basePosition = $.extend( {}, targetOffset );
+
+ // Force my and at to have valid horizontal and vertical positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[ this ] || "" ).split( " " ),
+ horizontalOffset,
+ verticalOffset;
+
+ if ( pos.length === 1 ) {
+ pos = rhorizontal.test( pos[ 0 ] ) ?
+ pos.concat( [ "center" ] ) :
+ rvertical.test( pos[ 0 ] ) ?
+ [ "center" ].concat( pos ) :
+ [ "center", "center" ];
+ }
+ pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+ pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+ // Calculate offsets
+ horizontalOffset = roffset.exec( pos[ 0 ] );
+ verticalOffset = roffset.exec( pos[ 1 ] );
+ offsets[ this ] = [
+ horizontalOffset ? horizontalOffset[ 0 ] : 0,
+ verticalOffset ? verticalOffset[ 0 ] : 0
+ ];
+
+ // Reduce to just the positions without the offsets
+ options[ this ] = [
+ rposition.exec( pos[ 0 ] )[ 0 ],
+ rposition.exec( pos[ 1 ] )[ 0 ]
+ ];
+ } );
+
+ // Normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ if ( options.at[ 0 ] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[ 0 ] === "center" ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[ 1 ] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[ 1 ] === "center" ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+ basePosition.left += atOffset[ 0 ];
+ basePosition.top += atOffset[ 1 ];
+
+ return this.each( function() {
+ var collisionPosition, using,
+ elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseCss( this, "marginLeft" ),
+ marginTop = parseCss( this, "marginTop" ),
+ collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
+ scrollInfo.width,
+ collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
+ scrollInfo.height,
+ position = $.extend( {}, basePosition ),
+ myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+ if ( options.my[ 0 ] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[ 0 ] === "center" ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[ 1 ] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[ 1 ] === "center" ) {
+ position.top -= elemHeight / 2;
+ }
+
+ position.left += myOffset[ 0 ];
+ position.top += myOffset[ 1 ];
+
+ collisionPosition = {
+ marginLeft: marginLeft,
+ marginTop: marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[ i ] ] ) {
+ $.ui.position[ collision[ i ] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+ my: options.my,
+ at: options.at,
+ within: within,
+ elem: elem
+ } );
+ }
+ } );
+
+ if ( options.using ) {
+
+ // Adds feedback as second argument to using callback, if present
+ using = function( props ) {
+ var left = targetOffset.left - position.left,
+ right = left + targetWidth - elemWidth,
+ top = targetOffset.top - position.top,
+ bottom = top + targetHeight - elemHeight,
+ feedback = {
+ target: {
+ element: target,
+ left: targetOffset.left,
+ top: targetOffset.top,
+ width: targetWidth,
+ height: targetHeight
+ },
+ element: {
+ element: elem,
+ left: position.left,
+ top: position.top,
+ width: elemWidth,
+ height: elemHeight
+ },
+ horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+ vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+ };
+ if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+ feedback.horizontal = "center";
+ }
+ if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+ feedback.vertical = "middle";
+ }
+ if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+ feedback.important = "horizontal";
+ } else {
+ feedback.important = "vertical";
+ }
+ options.using.call( this, props, feedback );
+ };
+ }
+
+ elem.offset( $.extend( position, { using: using } ) );
+ } );
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+ outerWidth = within.width,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = withinOffset - collisionPosLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+ newOverRight;
+
+ // Element is wider than within
+ if ( data.collisionWidth > outerWidth ) {
+
+ // Element is initially over the left side of within
+ if ( overLeft > 0 && overRight <= 0 ) {
+ newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
+ withinOffset;
+ position.left += overLeft - newOverRight;
+
+ // Element is initially over right side of within
+ } else if ( overRight > 0 && overLeft <= 0 ) {
+ position.left = withinOffset;
+
+ // Element is initially over both left and right sides of within
+ } else {
+ if ( overLeft > overRight ) {
+ position.left = withinOffset + outerWidth - data.collisionWidth;
+ } else {
+ position.left = withinOffset;
+ }
+ }
+
+ // Too far left -> align with left edge
+ } else if ( overLeft > 0 ) {
+ position.left += overLeft;
+
+ // Too far right -> align with right edge
+ } else if ( overRight > 0 ) {
+ position.left -= overRight;
+
+ // Adjust based on position and margin
+ } else {
+ position.left = max( position.left - collisionPosLeft, position.left );
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+ outerHeight = data.within.height,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = withinOffset - collisionPosTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+ newOverBottom;
+
+ // Element is taller than within
+ if ( data.collisionHeight > outerHeight ) {
+
+ // Element is initially over the top of within
+ if ( overTop > 0 && overBottom <= 0 ) {
+ newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
+ withinOffset;
+ position.top += overTop - newOverBottom;
+
+ // Element is initially over bottom of within
+ } else if ( overBottom > 0 && overTop <= 0 ) {
+ position.top = withinOffset;
+
+ // Element is initially over both top and bottom of within
+ } else {
+ if ( overTop > overBottom ) {
+ position.top = withinOffset + outerHeight - data.collisionHeight;
+ } else {
+ position.top = withinOffset;
+ }
+ }
+
+ // Too far up -> align with top
+ } else if ( overTop > 0 ) {
+ position.top += overTop;
+
+ // Too far down -> align with bottom edge
+ } else if ( overBottom > 0 ) {
+ position.top -= overBottom;
+
+ // Adjust based on position and margin
+ } else {
+ position.top = max( position.top - collisionPosTop, position.top );
+ }
+ }
+ },
+ flip: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.left + within.scrollLeft,
+ outerWidth = within.width,
+ offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = collisionPosLeft - offsetLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ data.at[ 0 ] === "right" ?
+ -data.targetWidth :
+ 0,
+ offset = -2 * data.offset[ 0 ],
+ newOverRight,
+ newOverLeft;
+
+ if ( overLeft < 0 ) {
+ newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
+ outerWidth - withinOffset;
+ if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ } else if ( overRight > 0 ) {
+ newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
+ atOffset + offset - offsetLeft;
+ if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.top + within.scrollTop,
+ outerHeight = within.height,
+ offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = collisionPosTop - offsetTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+ top = data.my[ 1 ] === "top",
+ myOffset = top ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ data.at[ 1 ] === "bottom" ?
+ -data.targetHeight :
+ 0,
+ offset = -2 * data.offset[ 1 ],
+ newOverTop,
+ newOverBottom;
+ if ( overTop < 0 ) {
+ newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
+ outerHeight - withinOffset;
+ if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ } else if ( overBottom > 0 ) {
+ newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
+ offset - offsetTop;
+ if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ }
+ },
+ flipfit: {
+ left: function() {
+ $.ui.position.flip.left.apply( this, arguments );
+ $.ui.position.fit.left.apply( this, arguments );
+ },
+ top: function() {
+ $.ui.position.flip.top.apply( this, arguments );
+ $.ui.position.fit.top.apply( this, arguments );
+ }
+ }
+};
+
+} )();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI :data 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: :data Selector
+//>>group: Core
+//>>description: Selects elements which have data stored under the specified key.
+//>>docs: http://api.jqueryui.com/data-selector/
+
+
+var data = $.extend( $.expr[ ":" ], {
+ data: $.expr.createPseudo ?
+ $.expr.createPseudo( function( dataName ) {
+ return function( elem ) {
+ return !!$.data( elem, dataName );
+ };
+ } ) :
+
+ // Support: jQuery <1.8
+ function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ }
+} );
+
+/*!
+ * jQuery UI Disable Selection 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: disableSelection
+//>>group: Core
+//>>description: Disable selection of text content within the set of matched elements.
+//>>docs: http://api.jqueryui.com/disableSelection/
+
+// This file is deprecated
+
+
+var disableSelection = $.fn.extend( {
+ disableSelection: ( function() {
+ var eventType = "onselectstart" in document.createElement( "div" ) ?
+ "selectstart" :
+ "mousedown";
+
+ return function() {
+ return this.on( eventType + ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ } );
+ };
+ } )(),
+
+ enableSelection: function() {
+ return this.off( ".ui-disableSelection" );
+ }
+} );
+
+
+/*!
+ * jQuery UI Effects 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Effects Core
+//>>group: Effects
+// jscs:disable maximumLineLength
+//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/category/effects-core/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var dataSpace = "ui-effects-",
+ dataSpaceStyle = "ui-effects-style",
+ dataSpaceAnimated = "ui-effects-animated",
+
+ // Create a local jQuery because jQuery Color relies on it and the
+ // global may not exist with AMD and a custom build (#10199)
+ jQuery = $;
+
+$.effects = {
+ effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+( function( jQuery, undefined ) {
+
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " +
+ "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+ // Plusequals test for += 100 -= 100
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+
+ // A set of RE's that can match strings and generate color tuples.
+ stringParsers = [ {
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ],
+ execResult[ 3 ],
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ] * 2.55,
+ execResult[ 2 ] * 2.55,
+ execResult[ 3 ] * 2.55,
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+
+ // This regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+
+ // This regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ space: "hsla",
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ] / 100,
+ execResult[ 3 ] / 100,
+ execResult[ 4 ]
+ ];
+ }
+ } ],
+
+ // JQuery.Color( )
+ color = jQuery.Color = function( color, green, blue, alpha ) {
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
+ },
+ spaces = {
+ rgba: {
+ props: {
+ red: {
+ idx: 0,
+ type: "byte"
+ },
+ green: {
+ idx: 1,
+ type: "byte"
+ },
+ blue: {
+ idx: 2,
+ type: "byte"
+ }
+ }
+ },
+
+ hsla: {
+ props: {
+ hue: {
+ idx: 0,
+ type: "degrees"
+ },
+ saturation: {
+ idx: 1,
+ type: "percent"
+ },
+ lightness: {
+ idx: 2,
+ type: "percent"
+ }
+ }
+ }
+ },
+ propTypes = {
+ "byte": {
+ floor: true,
+ max: 255
+ },
+ "percent": {
+ max: 1
+ },
+ "degrees": {
+ mod: 360,
+ floor: true
+ }
+ },
+ support = color.support = {},
+
+ // Element for support tests
+ supportElem = jQuery( "<p>" )[ 0 ],
+
+ // Colors = jQuery.Color.names
+ colors,
+
+ // Local aliases of functions called often
+ each = jQuery.each;
+
+// Determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// Define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+ space.cache = "_" + spaceName;
+ space.props.alpha = {
+ idx: 3,
+ type: "percent",
+ def: 1
+ };
+} );
+
+function clamp( value, prop, allowEmpty ) {
+ var type = propTypes[ prop.type ] || {};
+
+ if ( value == null ) {
+ return ( allowEmpty || !prop.def ) ? null : prop.def;
+ }
+
+ // ~~ is an short way of doing floor for positive numbers
+ value = type.floor ? ~~value : parseFloat( value );
+
+ // IE will pass in empty strings as value for alpha,
+ // which will hit this case
+ if ( isNaN( value ) ) {
+ return prop.def;
+ }
+
+ if ( type.mod ) {
+
+ // We add mod before modding to make sure that negatives values
+ // get converted properly: -10 -> 350
+ return ( value + type.mod ) % type.mod;
+ }
+
+ // For now all property types without mod have min and max
+ return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+ var inst = color(),
+ rgba = inst._rgba = [];
+
+ string = string.toLowerCase();
+
+ each( stringParsers, function( i, parser ) {
+ var parsed,
+ match = parser.re.exec( string ),
+ values = match && parser.parse( match ),
+ spaceName = parser.space || "rgba";
+
+ if ( values ) {
+ parsed = inst[ spaceName ]( values );
+
+ // If this was an rgba parse the assignment might happen twice
+ // oh well....
+ inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+ rgba = inst._rgba = parsed._rgba;
+
+ // Exit each( stringParsers ) here because we matched
+ return false;
+ }
+ } );
+
+ // Found a stringParser that handled it
+ if ( rgba.length ) {
+
+ // If this came from a parsed string, force "transparent" when alpha is 0
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+ if ( rgba.join() === "0,0,0,0" ) {
+ jQuery.extend( rgba, colors.transparent );
+ }
+ return inst;
+ }
+
+ // Named colors
+ return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+ parse: function( red, green, blue, alpha ) {
+ if ( red === undefined ) {
+ this._rgba = [ null, null, null, null ];
+ return this;
+ }
+ if ( red.jquery || red.nodeType ) {
+ red = jQuery( red ).css( green );
+ green = undefined;
+ }
+
+ var inst = this,
+ type = jQuery.type( red ),
+ rgba = this._rgba = [];
+
+ // More than 1 argument specified - assume ( red, green, blue, alpha )
+ if ( green !== undefined ) {
+ red = [ red, green, blue, alpha ];
+ type = "array";
+ }
+
+ if ( type === "string" ) {
+ return this.parse( stringParse( red ) || colors._default );
+ }
+
+ if ( type === "array" ) {
+ each( spaces.rgba.props, function( key, prop ) {
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+ } );
+ return this;
+ }
+
+ if ( type === "object" ) {
+ if ( red instanceof color ) {
+ each( spaces, function( spaceName, space ) {
+ if ( red[ space.cache ] ) {
+ inst[ space.cache ] = red[ space.cache ].slice();
+ }
+ } );
+ } else {
+ each( spaces, function( spaceName, space ) {
+ var cache = space.cache;
+ each( space.props, function( key, prop ) {
+
+ // If the cache doesn't exist, and we know how to convert
+ if ( !inst[ cache ] && space.to ) {
+
+ // If the value was null, we don't need to copy it
+ // if the key was alpha, we don't need to copy it either
+ if ( key === "alpha" || red[ key ] == null ) {
+ return;
+ }
+ inst[ cache ] = space.to( inst._rgba );
+ }
+
+ // This is the only case where we allow nulls for ALL properties.
+ // call clamp with alwaysAllowEmpty
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+ } );
+
+ // Everything defined but alpha?
+ if ( inst[ cache ] &&
+ jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+
+ // Use the default of 1
+ inst[ cache ][ 3 ] = 1;
+ if ( space.from ) {
+ inst._rgba = space.from( inst[ cache ] );
+ }
+ }
+ } );
+ }
+ return this;
+ }
+ },
+ is: function( compare ) {
+ var is = color( compare ),
+ same = true,
+ inst = this;
+
+ each( spaces, function( _, space ) {
+ var localCache,
+ isCache = is[ space.cache ];
+ if ( isCache ) {
+ localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+ each( space.props, function( _, prop ) {
+ if ( isCache[ prop.idx ] != null ) {
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+ return same;
+ }
+ } );
+ }
+ return same;
+ } );
+ return same;
+ },
+ _space: function() {
+ var used = [],
+ inst = this;
+ each( spaces, function( spaceName, space ) {
+ if ( inst[ space.cache ] ) {
+ used.push( spaceName );
+ }
+ } );
+ return used.pop();
+ },
+ transition: function( other, distance ) {
+ var end = color( other ),
+ spaceName = end._space(),
+ space = spaces[ spaceName ],
+ startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+ start = startColor[ space.cache ] || space.to( startColor._rgba ),
+ result = start.slice();
+
+ end = end[ space.cache ];
+ each( space.props, function( key, prop ) {
+ var index = prop.idx,
+ startValue = start[ index ],
+ endValue = end[ index ],
+ type = propTypes[ prop.type ] || {};
+
+ // If null, don't override start value
+ if ( endValue === null ) {
+ return;
+ }
+
+ // If null - use end
+ if ( startValue === null ) {
+ result[ index ] = endValue;
+ } else {
+ if ( type.mod ) {
+ if ( endValue - startValue > type.mod / 2 ) {
+ startValue += type.mod;
+ } else if ( startValue - endValue > type.mod / 2 ) {
+ startValue -= type.mod;
+ }
+ }
+ result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+ }
+ } );
+ return this[ spaceName ]( result );
+ },
+ blend: function( opaque ) {
+
+ // If we are already opaque - return ourself
+ if ( this._rgba[ 3 ] === 1 ) {
+ return this;
+ }
+
+ var rgb = this._rgba.slice(),
+ a = rgb.pop(),
+ blend = color( opaque )._rgba;
+
+ return color( jQuery.map( rgb, function( v, i ) {
+ return ( 1 - a ) * blend[ i ] + a * v;
+ } ) );
+ },
+ toRgbaString: function() {
+ var prefix = "rgba(",
+ rgba = jQuery.map( this._rgba, function( v, i ) {
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
+ } );
+
+ if ( rgba[ 3 ] === 1 ) {
+ rgba.pop();
+ prefix = "rgb(";
+ }
+
+ return prefix + rgba.join() + ")";
+ },
+ toHslaString: function() {
+ var prefix = "hsla(",
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
+ if ( v == null ) {
+ v = i > 2 ? 1 : 0;
+ }
+
+ // Catch 1 and 2
+ if ( i && i < 3 ) {
+ v = Math.round( v * 100 ) + "%";
+ }
+ return v;
+ } );
+
+ if ( hsla[ 3 ] === 1 ) {
+ hsla.pop();
+ prefix = "hsl(";
+ }
+ return prefix + hsla.join() + ")";
+ },
+ toHexString: function( includeAlpha ) {
+ var rgba = this._rgba.slice(),
+ alpha = rgba.pop();
+
+ if ( includeAlpha ) {
+ rgba.push( ~~( alpha * 255 ) );
+ }
+
+ return "#" + jQuery.map( rgba, function( v ) {
+
+ // Default to 0 when nulls exist
+ v = ( v || 0 ).toString( 16 );
+ return v.length === 1 ? "0" + v : v;
+ } ).join( "" );
+ },
+ toString: function() {
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+ }
+} );
+color.fn.parse.prototype = color.fn;
+
+// Hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+function hue2rgb( p, q, h ) {
+ h = ( h + 1 ) % 1;
+ if ( h * 6 < 1 ) {
+ return p + ( q - p ) * h * 6;
+ }
+ if ( h * 2 < 1 ) {
+ return q;
+ }
+ if ( h * 3 < 2 ) {
+ return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+ }
+ return p;
+}
+
+spaces.hsla.to = function( rgba ) {
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+ return [ null, null, null, rgba[ 3 ] ];
+ }
+ var r = rgba[ 0 ] / 255,
+ g = rgba[ 1 ] / 255,
+ b = rgba[ 2 ] / 255,
+ a = rgba[ 3 ],
+ max = Math.max( r, g, b ),
+ min = Math.min( r, g, b ),
+ diff = max - min,
+ add = max + min,
+ l = add * 0.5,
+ h, s;
+
+ if ( min === max ) {
+ h = 0;
+ } else if ( r === max ) {
+ h = ( 60 * ( g - b ) / diff ) + 360;
+ } else if ( g === max ) {
+ h = ( 60 * ( b - r ) / diff ) + 120;
+ } else {
+ h = ( 60 * ( r - g ) / diff ) + 240;
+ }
+
+ // Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+ if ( diff === 0 ) {
+ s = 0;
+ } else if ( l <= 0.5 ) {
+ s = diff / add;
+ } else {
+ s = diff / ( 2 - add );
+ }
+ return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function( hsla ) {
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+ return [ null, null, null, hsla[ 3 ] ];
+ }
+ var h = hsla[ 0 ] / 360,
+ s = hsla[ 1 ],
+ l = hsla[ 2 ],
+ a = hsla[ 3 ],
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+ p = 2 * l - q;
+
+ return [
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+ Math.round( hue2rgb( p, q, h ) * 255 ),
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+ a
+ ];
+};
+
+each( spaces, function( spaceName, space ) {
+ var props = space.props,
+ cache = space.cache,
+ to = space.to,
+ from = space.from;
+
+ // Makes rgba() and hsla()
+ color.fn[ spaceName ] = function( value ) {
+
+ // Generate a cache for this space if it doesn't exist
+ if ( to && !this[ cache ] ) {
+ this[ cache ] = to( this._rgba );
+ }
+ if ( value === undefined ) {
+ return this[ cache ].slice();
+ }
+
+ var ret,
+ type = jQuery.type( value ),
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
+ local = this[ cache ].slice();
+
+ each( props, function( key, prop ) {
+ var val = arr[ type === "object" ? key : prop.idx ];
+ if ( val == null ) {
+ val = local[ prop.idx ];
+ }
+ local[ prop.idx ] = clamp( val, prop );
+ } );
+
+ if ( from ) {
+ ret = color( from( local ) );
+ ret[ cache ] = local;
+ return ret;
+ } else {
+ return color( local );
+ }
+ };
+
+ // Makes red() green() blue() alpha() hue() saturation() lightness()
+ each( props, function( key, prop ) {
+
+ // Alpha is included in more than one space
+ if ( color.fn[ key ] ) {
+ return;
+ }
+ color.fn[ key ] = function( value ) {
+ var vtype = jQuery.type( value ),
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+ local = this[ fn ](),
+ cur = local[ prop.idx ],
+ match;
+
+ if ( vtype === "undefined" ) {
+ return cur;
+ }
+
+ if ( vtype === "function" ) {
+ value = value.call( this, cur );
+ vtype = jQuery.type( value );
+ }
+ if ( value == null && prop.empty ) {
+ return this;
+ }
+ if ( vtype === "string" ) {
+ match = rplusequals.exec( value );
+ if ( match ) {
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+ }
+ }
+ local[ prop.idx ] = value;
+ return this[ fn ]( local );
+ };
+ } );
+} );
+
+// Add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+ var hooks = hook.split( " " );
+ each( hooks, function( i, hook ) {
+ jQuery.cssHooks[ hook ] = {
+ set: function( elem, value ) {
+ var parsed, curElem,
+ backgroundColor = "";
+
+ if ( value !== "transparent" && ( jQuery.type( value ) !== "string" ||
+ ( parsed = stringParse( value ) ) ) ) {
+ value = color( parsed || value );
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+ while (
+ ( backgroundColor === "" || backgroundColor === "transparent" ) &&
+ curElem && curElem.style
+ ) {
+ try {
+ backgroundColor = jQuery.css( curElem, "backgroundColor" );
+ curElem = curElem.parentNode;
+ } catch ( e ) {
+ }
+ }
+
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+ backgroundColor :
+ "_default" );
+ }
+
+ value = value.toRgbaString();
+ }
+ try {
+ elem.style[ hook ] = value;
+ } catch ( e ) {
+
+ // Wrapped to prevent IE from throwing errors on "invalid" values like
+ // 'auto' or 'inherit'
+ }
+ }
+ };
+ jQuery.fx.step[ hook ] = function( fx ) {
+ if ( !fx.colorInit ) {
+ fx.start = color( fx.elem, hook );
+ fx.end = color( fx.end );
+ fx.colorInit = true;
+ }
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+ };
+ } );
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+ expand: function( value ) {
+ var expanded = {};
+
+ each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+ expanded[ "border" + part + "Color" ] = value;
+ } );
+ return expanded;
+ }
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+
+ // 4.1. Basic color keywords
+ aqua: "#00ffff",
+ black: "#000000",
+ blue: "#0000ff",
+ fuchsia: "#ff00ff",
+ gray: "#808080",
+ green: "#008000",
+ lime: "#00ff00",
+ maroon: "#800000",
+ navy: "#000080",
+ olive: "#808000",
+ purple: "#800080",
+ red: "#ff0000",
+ silver: "#c0c0c0",
+ teal: "#008080",
+ white: "#ffffff",
+ yellow: "#ffff00",
+
+ // 4.2.3. "transparent" color keyword
+ transparent: [ null, null, null, 0 ],
+
+ _default: "#ffffff"
+};
+
+} )( jQuery );
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+( function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+$.each(
+ [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ],
+ function( _, prop ) {
+ $.fx.step[ prop ] = function( fx ) {
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+ jQuery.style( fx.elem, prop, fx.end );
+ fx.setAttr = true;
+ }
+ };
+ }
+);
+
+function getElementStyles( elem ) {
+ var key, len,
+ style = elem.ownerDocument.defaultView ?
+ elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+ elem.currentStyle,
+ styles = {};
+
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+ len = style.length;
+ while ( len-- ) {
+ key = style[ len ];
+ if ( typeof style[ key ] === "string" ) {
+ styles[ $.camelCase( key ) ] = style[ key ];
+ }
+ }
+
+ // Support: Opera, IE <9
+ } else {
+ for ( key in style ) {
+ if ( typeof style[ key ] === "string" ) {
+ styles[ key ] = style[ key ];
+ }
+ }
+ }
+
+ return styles;
+}
+
+function styleDifference( oldStyle, newStyle ) {
+ var diff = {},
+ name, value;
+
+ for ( name in newStyle ) {
+ value = newStyle[ name ];
+ if ( oldStyle[ name ] !== value ) {
+ if ( !shorthandStyles[ name ] ) {
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+ diff[ name ] = value;
+ }
+ }
+ }
+ }
+
+ return diff;
+}
+
+// Support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+ var o = $.speed( duration, easing, callback );
+
+ return this.queue( function() {
+ var animated = $( this ),
+ baseClass = animated.attr( "class" ) || "",
+ applyClassChange,
+ allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+ // Map the animated objects to store the original styles.
+ allAnimations = allAnimations.map( function() {
+ var el = $( this );
+ return {
+ el: el,
+ start: getElementStyles( this )
+ };
+ } );
+
+ // Apply class change
+ applyClassChange = function() {
+ $.each( classAnimationActions, function( i, action ) {
+ if ( value[ action ] ) {
+ animated[ action + "Class" ]( value[ action ] );
+ }
+ } );
+ };
+ applyClassChange();
+
+ // Map all animated objects again - calculate new styles and diff
+ allAnimations = allAnimations.map( function() {
+ this.end = getElementStyles( this.el[ 0 ] );
+ this.diff = styleDifference( this.start, this.end );
+ return this;
+ } );
+
+ // Apply original class
+ animated.attr( "class", baseClass );
+
+ // Map all animated objects again - this time collecting a promise
+ allAnimations = allAnimations.map( function() {
+ var styleInfo = this,
+ dfd = $.Deferred(),
+ opts = $.extend( {}, o, {
+ queue: false,
+ complete: function() {
+ dfd.resolve( styleInfo );
+ }
+ } );
+
+ this.el.animate( this.diff, opts );
+ return dfd.promise();
+ } );
+
+ // Once all animations have completed:
+ $.when.apply( $, allAnimations.get() ).done( function() {
+
+ // Set the final class
+ applyClassChange();
+
+ // For each animated element,
+ // clear all css properties that were animated
+ $.each( arguments, function() {
+ var el = this.el;
+ $.each( this.diff, function( key ) {
+ el.css( key, "" );
+ } );
+ } );
+
+ // This is guarnteed to be there if you use jQuery.speed()
+ // it also handles dequeuing the next anim...
+ o.complete.call( animated[ 0 ] );
+ } );
+ } );
+};
+
+$.fn.extend( {
+ addClass: ( function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.call( this,
+ { add: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ } )( $.fn.addClass ),
+
+ removeClass: ( function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return arguments.length > 1 ?
+ $.effects.animateClass.call( this,
+ { remove: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ } )( $.fn.removeClass ),
+
+ toggleClass: ( function( orig ) {
+ return function( classNames, force, speed, easing, callback ) {
+ if ( typeof force === "boolean" || force === undefined ) {
+ if ( !speed ) {
+
+ // Without speed parameter
+ return orig.apply( this, arguments );
+ } else {
+ return $.effects.animateClass.call( this,
+ ( force ? { add: classNames } : { remove: classNames } ),
+ speed, easing, callback );
+ }
+ } else {
+
+ // Without force parameter
+ return $.effects.animateClass.call( this,
+ { toggle: classNames }, force, speed, easing );
+ }
+ };
+ } )( $.fn.toggleClass ),
+
+ switchClass: function( remove, add, speed, easing, callback ) {
+ return $.effects.animateClass.call( this, {
+ add: add,
+ remove: remove
+ }, speed, easing, callback );
+ }
+} );
+
+} )();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+( function() {
+
+if ( $.expr && $.expr.filters && $.expr.filters.animated ) {
+ $.expr.filters.animated = ( function( orig ) {
+ return function( elem ) {
+ return !!$( elem ).data( dataSpaceAnimated ) || orig( elem );
+ };
+ } )( $.expr.filters.animated );
+}
+
+if ( $.uiBackCompat !== false ) {
+ $.extend( $.effects, {
+
+ // Saves a set of properties in a data storage
+ save: function( element, set ) {
+ var i = 0, length = set.length;
+ for ( ; i < length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function( element, set ) {
+ var val, i = 0, length = set.length;
+ for ( ; i < length; i++ ) {
+ if ( set[ i ] !== null ) {
+ val = element.data( dataSpace + set[ i ] );
+ element.css( set[ i ], val );
+ }
+ }
+ },
+
+ setMode: function( el, mode ) {
+ if ( mode === "toggle" ) {
+ mode = el.is( ":hidden" ) ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function( element ) {
+
+ // If the element is already wrapped, return it
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ return element.parent();
+ }
+
+ // Wrap the element
+ var props = {
+ width: element.outerWidth( true ),
+ height: element.outerHeight( true ),
+ "float": element.css( "float" )
+ },
+ wrapper = $( "<div></div>" )
+ .addClass( "ui-effects-wrapper" )
+ .css( {
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ } ),
+
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ // Support: Firefox
+ // Firefox incorrectly exposes anonymous content
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+ try {
+ active.id;
+ } catch ( e ) {
+ active = document.body;
+ }
+
+ element.wrap( wrapper );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).trigger( "focus" );
+ }
+
+ // Hotfix for jQuery 1.4 since some change in wrap() seems to actually
+ // lose the reference to the wrapped element
+ wrapper = element.parent();
+
+ // Transfer positioning properties to the wrapper
+ if ( element.css( "position" ) === "static" ) {
+ wrapper.css( { position: "relative" } );
+ element.css( { position: "relative" } );
+ } else {
+ $.extend( props, {
+ position: element.css( "position" ),
+ zIndex: element.css( "z-index" )
+ } );
+ $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) {
+ props[ pos ] = element.css( pos );
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+ props[ pos ] = "auto";
+ }
+ } );
+ element.css( {
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ } );
+ }
+ element.css( size );
+
+ return wrapper.css( props ).show();
+ },
+
+ removeWrapper: function( element ) {
+ var active = document.activeElement;
+
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ element.parent().replaceWith( element );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).trigger( "focus" );
+ }
+ }
+
+ return element;
+ }
+ } );
+}
+
+$.extend( $.effects, {
+ version: "1.12.1",
+
+ define: function( name, mode, effect ) {
+ if ( !effect ) {
+ effect = mode;
+ mode = "effect";
+ }
+
+ $.effects.effect[ name ] = effect;
+ $.effects.effect[ name ].mode = mode;
+
+ return effect;
+ },
+
+ scaledDimensions: function( element, percent, direction ) {
+ if ( percent === 0 ) {
+ return {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ };
+ }
+
+ var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1,
+ y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1;
+
+ return {
+ height: element.height() * y,
+ width: element.width() * x,
+ outerHeight: element.outerHeight() * y,
+ outerWidth: element.outerWidth() * x
+ };
+
+ },
+
+ clipToBox: function( animation ) {
+ return {
+ width: animation.clip.right - animation.clip.left,
+ height: animation.clip.bottom - animation.clip.top,
+ left: animation.clip.left,
+ top: animation.clip.top
+ };
+ },
+
+ // Injects recently queued functions to be first in line (after "inprogress")
+ unshift: function( element, queueLength, count ) {
+ var queue = element.queue();
+
+ if ( queueLength > 1 ) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queueLength, count ) ) );
+ }
+ element.dequeue();
+ },
+
+ saveStyle: function( element ) {
+ element.data( dataSpaceStyle, element[ 0 ].style.cssText );
+ },
+
+ restoreStyle: function( element ) {
+ element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || "";
+ element.removeData( dataSpaceStyle );
+ },
+
+ mode: function( element, mode ) {
+ var hidden = element.is( ":hidden" );
+
+ if ( mode === "toggle" ) {
+ mode = hidden ? "show" : "hide";
+ }
+ if ( hidden ? mode === "hide" : mode === "show" ) {
+ mode = "none";
+ }
+ return mode;
+ },
+
+ // Translates a [top,left] array into a baseline value
+ getBaseline: function( origin, original ) {
+ var y, x;
+
+ switch ( origin[ 0 ] ) {
+ case "top":
+ y = 0;
+ break;
+ case "middle":
+ y = 0.5;
+ break;
+ case "bottom":
+ y = 1;
+ break;
+ default:
+ y = origin[ 0 ] / original.height;
+ }
+
+ switch ( origin[ 1 ] ) {
+ case "left":
+ x = 0;
+ break;
+ case "center":
+ x = 0.5;
+ break;
+ case "right":
+ x = 1;
+ break;
+ default:
+ x = origin[ 1 ] / original.width;
+ }
+
+ return {
+ x: x,
+ y: y
+ };
+ },
+
+ // Creates a placeholder element so that the original element can be made absolute
+ createPlaceholder: function( element ) {
+ var placeholder,
+ cssPosition = element.css( "position" ),
+ position = element.position();
+
+ // Lock in margins first to account for form elements, which
+ // will change margin if you explicitly set height
+ // see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380
+ // Support: Safari
+ element.css( {
+ marginTop: element.css( "marginTop" ),
+ marginBottom: element.css( "marginBottom" ),
+ marginLeft: element.css( "marginLeft" ),
+ marginRight: element.css( "marginRight" )
+ } )
+ .outerWidth( element.outerWidth() )
+ .outerHeight( element.outerHeight() );
+
+ if ( /^(static|relative)/.test( cssPosition ) ) {
+ cssPosition = "absolute";
+
+ placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( {
+
+ // Convert inline to inline block to account for inline elements
+ // that turn to inline block based on content (like img)
+ display: /^(inline|ruby)/.test( element.css( "display" ) ) ?
+ "inline-block" :
+ "block",
+ visibility: "hidden",
+
+ // Margins need to be set to account for margin collapse
+ marginTop: element.css( "marginTop" ),
+ marginBottom: element.css( "marginBottom" ),
+ marginLeft: element.css( "marginLeft" ),
+ marginRight: element.css( "marginRight" ),
+ "float": element.css( "float" )
+ } )
+ .outerWidth( element.outerWidth() )
+ .outerHeight( element.outerHeight() )
+ .addClass( "ui-effects-placeholder" );
+
+ element.data( dataSpace + "placeholder", placeholder );
+ }
+
+ element.css( {
+ position: cssPosition,
+ left: position.left,
+ top: position.top
+ } );
+
+ return placeholder;
+ },
+
+ removePlaceholder: function( element ) {
+ var dataKey = dataSpace + "placeholder",
+ placeholder = element.data( dataKey );
+
+ if ( placeholder ) {
+ placeholder.remove();
+ element.removeData( dataKey );
+ }
+ },
+
+ // Removes a placeholder if it exists and restores
+ // properties that were modified during placeholder creation
+ cleanUp: function( element ) {
+ $.effects.restoreStyle( element );
+ $.effects.removePlaceholder( element );
+ },
+
+ setTransition: function( element, list, factor, value ) {
+ value = value || {};
+ $.each( list, function( i, x ) {
+ var unit = element.cssUnit( x );
+ if ( unit[ 0 ] > 0 ) {
+ value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+ }
+ } );
+ return value;
+ }
+} );
+
+// Return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+ // Allow passing all options as the first parameter
+ if ( $.isPlainObject( effect ) ) {
+ options = effect;
+ effect = effect.effect;
+ }
+
+ // Convert to an object
+ effect = { effect: effect };
+
+ // Catch (effect, null, ...)
+ if ( options == null ) {
+ options = {};
+ }
+
+ // Catch (effect, callback)
+ if ( $.isFunction( options ) ) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // Catch (effect, speed, ?)
+ if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // Catch (effect, options, callback)
+ if ( $.isFunction( speed ) ) {
+ callback = speed;
+ speed = null;
+ }
+
+ // Add options to effect
+ if ( options ) {
+ $.extend( effect, options );
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 :
+ typeof speed === "number" ? speed :
+ speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+ $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+}
+
+function standardAnimationOption( option ) {
+
+ // Valid standard speeds (nothing, number, named speed)
+ if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+ return true;
+ }
+
+ // Invalid strings - treat as "normal" speed
+ if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+ return true;
+ }
+
+ // Complete callback
+ if ( $.isFunction( option ) ) {
+ return true;
+ }
+
+ // Options hash (but not naming an effect)
+ if ( typeof option === "object" && !option.effect ) {
+ return true;
+ }
+
+ // Didn't match any standard API
+ return false;
+}
+
+$.fn.extend( {
+ effect: function( /* effect, options, speed, callback */ ) {
+ var args = _normalizeArguments.apply( this, arguments ),
+ effectMethod = $.effects.effect[ args.effect ],
+ defaultMode = effectMethod.mode,
+ queue = args.queue,
+ queueName = queue || "fx",
+ complete = args.complete,
+ mode = args.mode,
+ modes = [],
+ prefilter = function( next ) {
+ var el = $( this ),
+ normalizedMode = $.effects.mode( el, mode ) || defaultMode;
+
+ // Sentinel for duck-punching the :animated psuedo-selector
+ el.data( dataSpaceAnimated, true );
+
+ // Save effect mode for later use,
+ // we can't just call $.effects.mode again later,
+ // as the .show() below destroys the initial state
+ modes.push( normalizedMode );
+
+ // See $.uiBackCompat inside of run() for removal of defaultMode in 1.13
+ if ( defaultMode && ( normalizedMode === "show" ||
+ ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) {
+ el.show();
+ }
+
+ if ( !defaultMode || normalizedMode !== "none" ) {
+ $.effects.saveStyle( el );
+ }
+
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ };
+
+ if ( $.fx.off || !effectMethod ) {
+
+ // Delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args.duration, complete );
+ } else {
+ return this.each( function() {
+ if ( complete ) {
+ complete.call( this );
+ }
+ } );
+ }
+ }
+
+ function run( next ) {
+ var elem = $( this );
+
+ function cleanup() {
+ elem.removeData( dataSpaceAnimated );
+
+ $.effects.cleanUp( elem );
+
+ if ( args.mode === "hide" ) {
+ elem.hide();
+ }
+
+ done();
+ }
+
+ function done() {
+ if ( $.isFunction( complete ) ) {
+ complete.call( elem[ 0 ] );
+ }
+
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ }
+
+ // Override mode option on a per element basis,
+ // as toggle can be either show or hide depending on element state
+ args.mode = modes.shift();
+
+ if ( $.uiBackCompat !== false && !defaultMode ) {
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+
+ // Call the core method to track "olddisplay" properly
+ elem[ mode ]();
+ done();
+ } else {
+ effectMethod.call( elem[ 0 ], args, done );
+ }
+ } else {
+ if ( args.mode === "none" ) {
+
+ // Call the core method to track "olddisplay" properly
+ elem[ mode ]();
+ done();
+ } else {
+ effectMethod.call( elem[ 0 ], args, cleanup );
+ }
+ }
+ }
+
+ // Run prefilter on all elements first to ensure that
+ // any showing or hiding happens before placeholder creation,
+ // which ensures that any layout changes are correctly captured.
+ return queue === false ?
+ this.each( prefilter ).each( run ) :
+ this.queue( queueName, prefilter ).queue( queueName, run );
+ },
+
+ show: ( function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "show";
+ return this.effect.call( this, args );
+ }
+ };
+ } )( $.fn.show ),
+
+ hide: ( function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "hide";
+ return this.effect.call( this, args );
+ }
+ };
+ } )( $.fn.hide ),
+
+ toggle: ( function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "toggle";
+ return this.effect.call( this, args );
+ }
+ };
+ } )( $.fn.toggle ),
+
+ cssUnit: function( key ) {
+ var style = this.css( key ),
+ val = [];
+
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+ if ( style.indexOf( unit ) > 0 ) {
+ val = [ parseFloat( style ), unit ];
+ }
+ } );
+ return val;
+ },
+
+ cssClip: function( clipObj ) {
+ if ( clipObj ) {
+ return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " +
+ clipObj.bottom + "px " + clipObj.left + "px)" );
+ }
+ return parseClip( this.css( "clip" ), this );
+ },
+
+ transfer: function( options, done ) {
+ var element = $( this ),
+ target = $( options.to ),
+ targetFixed = target.css( "position" ) === "fixed",
+ body = $( "body" ),
+ fixTop = targetFixed ? body.scrollTop() : 0,
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
+ endPosition = target.offset(),
+ animation = {
+ top: endPosition.top - fixTop,
+ left: endPosition.left - fixLeft,
+ height: target.innerHeight(),
+ width: target.innerWidth()
+ },
+ startPosition = element.offset(),
+ transfer = $( "<div class='ui-effects-transfer'></div>" )
+ .appendTo( "body" )
+ .addClass( options.className )
+ .css( {
+ top: startPosition.top - fixTop,
+ left: startPosition.left - fixLeft,
+ height: element.innerHeight(),
+ width: element.innerWidth(),
+ position: targetFixed ? "fixed" : "absolute"
+ } )
+ .animate( animation, options.duration, options.easing, function() {
+ transfer.remove();
+ if ( $.isFunction( done ) ) {
+ done();
+ }
+ } );
+ }
+} );
+
+function parseClip( str, element ) {
+ var outerWidth = element.outerWidth(),
+ outerHeight = element.outerHeight(),
+ clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,
+ values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ];
+
+ return {
+ top: parseFloat( values[ 1 ] ) || 0,
+ right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ),
+ bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ),
+ left: parseFloat( values[ 4 ] ) || 0
+ };
+}
+
+$.fx.step.clip = function( fx ) {
+ if ( !fx.clipInit ) {
+ fx.start = $( fx.elem ).cssClip();
+ if ( typeof fx.end === "string" ) {
+ fx.end = parseClip( fx.end, fx.elem );
+ }
+ fx.clipInit = true;
+ }
+
+ $( fx.elem ).cssClip( {
+ top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,
+ right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,
+ bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,
+ left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left
+ } );
+};
+
+} )();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+( function() {
+
+// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+ baseEasings[ name ] = function( p ) {
+ return Math.pow( p, i + 2 );
+ };
+} );
+
+$.extend( baseEasings, {
+ Sine: function( p ) {
+ return 1 - Math.cos( p * Math.PI / 2 );
+ },
+ Circ: function( p ) {
+ return 1 - Math.sqrt( 1 - p * p );
+ },
+ Elastic: function( p ) {
+ return p === 0 || p === 1 ? p :
+ -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );
+ },
+ Back: function( p ) {
+ return p * p * ( 3 * p - 2 );
+ },
+ Bounce: function( p ) {
+ var pow2,
+ bounce = 4;
+
+ while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+ return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+ }
+} );
+
+$.each( baseEasings, function( name, easeIn ) {
+ $.easing[ "easeIn" + name ] = easeIn;
+ $.easing[ "easeOut" + name ] = function( p ) {
+ return 1 - easeIn( 1 - p );
+ };
+ $.easing[ "easeInOut" + name ] = function( p ) {
+ return p < 0.5 ?
+ easeIn( p * 2 ) / 2 :
+ 1 - easeIn( p * -2 + 2 ) / 2;
+ };
+} );
+
+} )();
+
+var effect = $.effects;
+
+
+/*!
+ * jQuery UI Effects Blind 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Blind Effect
+//>>group: Effects
+//>>description: Blinds the element.
+//>>docs: http://api.jqueryui.com/blind-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) {
+ var map = {
+ up: [ "bottom", "top" ],
+ vertical: [ "bottom", "top" ],
+ down: [ "top", "bottom" ],
+ left: [ "right", "left" ],
+ horizontal: [ "right", "left" ],
+ right: [ "left", "right" ]
+ },
+ element = $( this ),
+ direction = options.direction || "up",
+ start = element.cssClip(),
+ animate = { clip: $.extend( {}, start ) },
+ placeholder = $.effects.createPlaceholder( element );
+
+ animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];
+
+ if ( options.mode === "show" ) {
+ element.cssClip( animate.clip );
+ if ( placeholder ) {
+ placeholder.css( $.effects.clipToBox( animate ) );
+ }
+
+ animate.clip = start;
+ }
+
+ if ( placeholder ) {
+ placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );
+ }
+
+ element.animate( animate, {
+ queue: false,
+ duration: options.duration,
+ easing: options.easing,
+ complete: done
+ } );
+} );
+
+
+/*!
+ * jQuery UI Effects Bounce 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Bounce Effect
+//>>group: Effects
+//>>description: Bounces an element horizontally or vertically n times.
+//>>docs: http://api.jqueryui.com/bounce-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) {
+ var upAnim, downAnim, refValue,
+ element = $( this ),
+
+ // Defaults:
+ mode = options.mode,
+ hide = mode === "hide",
+ show = mode === "show",
+ direction = options.direction || "up",
+ distance = options.distance,
+ times = options.times || 5,
+
+ // Number of internal animations
+ anims = times * 2 + ( show || hide ? 1 : 0 ),
+ speed = options.duration / anims,
+ easing = options.easing,
+
+ // Utility:
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ),
+ i = 0,
+
+ queuelen = element.queue().length;
+
+ $.effects.createPlaceholder( element );
+
+ refValue = element.css( ref );
+
+ // Default distance for the BIGGEST bounce is the outer Distance / 3
+ if ( !distance ) {
+ distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+ }
+
+ if ( show ) {
+ downAnim = { opacity: 1 };
+ downAnim[ ref ] = refValue;
+
+ // If we are showing, force opacity 0 and set the initial position
+ // then do the "first" animation
+ element
+ .css( "opacity", 0 )
+ .css( ref, motion ? -distance * 2 : distance * 2 )
+ .animate( downAnim, speed, easing );
+ }
+
+ // Start at the smallest distance if we are hiding
+ if ( hide ) {
+ distance = distance / Math.pow( 2, times - 1 );
+ }
+
+ downAnim = {};
+ downAnim[ ref ] = refValue;
+
+ // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+ for ( ; i < times; i++ ) {
+ upAnim = {};
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ element
+ .animate( upAnim, speed, easing )
+ .animate( downAnim, speed, easing );
+
+ distance = hide ? distance * 2 : distance / 2;
+ }
+
+ // Last Bounce when Hiding
+ if ( hide ) {
+ upAnim = { opacity: 0 };
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ element.animate( upAnim, speed, easing );
+ }
+
+ element.queue( done );
+
+ $.effects.unshift( element, queuelen, anims + 1 );
+} );
+
+
+/*!
+ * jQuery UI Effects Clip 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Clip Effect
+//>>group: Effects
+//>>description: Clips the element on and off like an old TV.
+//>>docs: http://api.jqueryui.com/clip-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) {
+ var start,
+ animate = {},
+ element = $( this ),
+ direction = options.direction || "vertical",
+ both = direction === "both",
+ horizontal = both || direction === "horizontal",
+ vertical = both || direction === "vertical";
+
+ start = element.cssClip();
+ animate.clip = {
+ top: vertical ? ( start.bottom - start.top ) / 2 : start.top,
+ right: horizontal ? ( start.right - start.left ) / 2 : start.right,
+ bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,
+ left: horizontal ? ( start.right - start.left ) / 2 : start.left
+ };
+
+ $.effects.createPlaceholder( element );
+
+ if ( options.mode === "show" ) {
+ element.cssClip( animate.clip );
+ animate.clip = start;
+ }
+
+ element.animate( animate, {
+ queue: false,
+ duration: options.duration,
+ easing: options.easing,
+ complete: done
+ } );
+
+} );
+
+
+/*!
+ * jQuery UI Effects Drop 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Drop Effect
+//>>group: Effects
+//>>description: Moves an element in one direction and hides it at the same time.
+//>>docs: http://api.jqueryui.com/drop-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) {
+
+ var distance,
+ element = $( this ),
+ mode = options.mode,
+ show = mode === "show",
+ direction = options.direction || "left",
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=",
+ oppositeMotion = ( motion === "+=" ) ? "-=" : "+=",
+ animation = {
+ opacity: 0
+ };
+
+ $.effects.createPlaceholder( element );
+
+ distance = options.distance ||
+ element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
+
+ animation[ ref ] = motion + distance;
+
+ if ( show ) {
+ element.css( animation );
+
+ animation[ ref ] = oppositeMotion + distance;
+ animation.opacity = 1;
+ }
+
+ // Animate
+ element.animate( animation, {
+ queue: false,
+ duration: options.duration,
+ easing: options.easing,
+ complete: done
+ } );
+} );
+
+
+/*!
+ * jQuery UI Effects Explode 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Explode Effect
+//>>group: Effects
+// jscs:disable maximumLineLength
+//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/explode-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) {
+
+ var i, j, left, top, mx, my,
+ rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,
+ cells = rows,
+ element = $( this ),
+ mode = options.mode,
+ show = mode === "show",
+
+ // Show and then visibility:hidden the element before calculating offset
+ offset = element.show().css( "visibility", "hidden" ).offset(),
+
+ // Width and height of a piece
+ width = Math.ceil( element.outerWidth() / cells ),
+ height = Math.ceil( element.outerHeight() / rows ),
+ pieces = [];
+
+ // Children animate complete:
+ function childComplete() {
+ pieces.push( this );
+ if ( pieces.length === rows * cells ) {
+ animComplete();
+ }
+ }
+
+ // Clone the element for each row and cell.
+ for ( i = 0; i < rows; i++ ) { // ===>
+ top = offset.top + i * height;
+ my = i - ( rows - 1 ) / 2;
+
+ for ( j = 0; j < cells; j++ ) { // |||
+ left = offset.left + j * width;
+ mx = j - ( cells - 1 ) / 2;
+
+ // Create a clone of the now hidden main element that will be absolute positioned
+ // within a wrapper div off the -left and -top equal to size of our pieces
+ element
+ .clone()
+ .appendTo( "body" )
+ .wrap( "<div></div>" )
+ .css( {
+ position: "absolute",
+ visibility: "visible",
+ left: -j * width,
+ top: -i * height
+ } )
+
+ // Select the wrapper - make it overflow: hidden and absolute positioned based on
+ // where the original was located +left and +top equal to the size of pieces
+ .parent()
+ .addClass( "ui-effects-explode" )
+ .css( {
+ position: "absolute",
+ overflow: "hidden",
+ width: width,
+ height: height,
+ left: left + ( show ? mx * width : 0 ),
+ top: top + ( show ? my * height : 0 ),
+ opacity: show ? 0 : 1
+ } )
+ .animate( {
+ left: left + ( show ? 0 : mx * width ),
+ top: top + ( show ? 0 : my * height ),
+ opacity: show ? 1 : 0
+ }, options.duration || 500, options.easing, childComplete );
+ }
+ }
+
+ function animComplete() {
+ element.css( {
+ visibility: "visible"
+ } );
+ $( pieces ).remove();
+ done();
+ }
+} );
+
+
+/*!
+ * jQuery UI Effects Fade 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Fade Effect
+//>>group: Effects
+//>>description: Fades the element.
+//>>docs: http://api.jqueryui.com/fade-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) {
+ var show = options.mode === "show";
+
+ $( this )
+ .css( "opacity", show ? 0 : 1 )
+ .animate( {
+ opacity: show ? 1 : 0
+ }, {
+ queue: false,
+ duration: options.duration,
+ easing: options.easing,
+ complete: done
+ } );
+} );
+
+
+/*!
+ * jQuery UI Effects Fold 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Fold Effect
+//>>group: Effects
+//>>description: Folds an element first horizontally and then vertically.
+//>>docs: http://api.jqueryui.com/fold-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) {
+
+ // Create element
+ var element = $( this ),
+ mode = options.mode,
+ show = mode === "show",
+ hide = mode === "hide",
+ size = options.size || 15,
+ percent = /([0-9]+)%/.exec( size ),
+ horizFirst = !!options.horizFirst,
+ ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ],
+ duration = options.duration / 2,
+
+ placeholder = $.effects.createPlaceholder( element ),
+
+ start = element.cssClip(),
+ animation1 = { clip: $.extend( {}, start ) },
+ animation2 = { clip: $.extend( {}, start ) },
+
+ distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],
+
+ queuelen = element.queue().length;
+
+ if ( percent ) {
+ size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+ }
+ animation1.clip[ ref[ 0 ] ] = size;
+ animation2.clip[ ref[ 0 ] ] = size;
+ animation2.clip[ ref[ 1 ] ] = 0;
+
+ if ( show ) {
+ element.cssClip( animation2.clip );
+ if ( placeholder ) {
+ placeholder.css( $.effects.clipToBox( animation2 ) );
+ }
+
+ animation2.clip = start;
+ }
+
+ // Animate
+ element
+ .queue( function( next ) {
+ if ( placeholder ) {
+ placeholder
+ .animate( $.effects.clipToBox( animation1 ), duration, options.easing )
+ .animate( $.effects.clipToBox( animation2 ), duration, options.easing );
+ }
+
+ next();
+ } )
+ .animate( animation1, duration, options.easing )
+ .animate( animation2, duration, options.easing )
+ .queue( done );
+
+ $.effects.unshift( element, queuelen, 4 );
+} );
+
+
+/*!
+ * jQuery UI Effects Highlight 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Highlight Effect
+//>>group: Effects
+//>>description: Highlights the background of an element in a defined color for a custom duration.
+//>>docs: http://api.jqueryui.com/highlight-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) {
+ var element = $( this ),
+ animation = {
+ backgroundColor: element.css( "backgroundColor" )
+ };
+
+ if ( options.mode === "hide" ) {
+ animation.opacity = 0;
+ }
+
+ $.effects.saveStyle( element );
+
+ element
+ .css( {
+ backgroundImage: "none",
+ backgroundColor: options.color || "#ffff99"
+ } )
+ .animate( animation, {
+ queue: false,
+ duration: options.duration,
+ easing: options.easing,
+ complete: done
+ } );
+} );
+
+
+/*!
+ * jQuery UI Effects Size 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Size Effect
+//>>group: Effects
+//>>description: Resize an element to a specified width and height.
+//>>docs: http://api.jqueryui.com/size-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectSize = $.effects.define( "size", function( options, done ) {
+
+ // Create element
+ var baseline, factor, temp,
+ element = $( this ),
+
+ // Copy for children
+ cProps = [ "fontSize" ],
+ vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+ hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+ // Set options
+ mode = options.mode,
+ restore = mode !== "effect",
+ scale = options.scale || "both",
+ origin = options.origin || [ "middle", "center" ],
+ position = element.css( "position" ),
+ pos = element.position(),
+ original = $.effects.scaledDimensions( element ),
+ from = options.from || original,
+ to = options.to || $.effects.scaledDimensions( element, 0 );
+
+ $.effects.createPlaceholder( element );
+
+ if ( mode === "show" ) {
+ temp = from;
+ from = to;
+ to = temp;
+ }
+
+ // Set scaling factor
+ factor = {
+ from: {
+ y: from.height / original.height,
+ x: from.width / original.width
+ },
+ to: {
+ y: to.height / original.height,
+ x: to.width / original.width
+ }
+ };
+
+ // Scale the css box
+ if ( scale === "box" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ from = $.effects.setTransition( element, vProps, factor.from.y, from );
+ to = $.effects.setTransition( element, vProps, factor.to.y, to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ from = $.effects.setTransition( element, hProps, factor.from.x, from );
+ to = $.effects.setTransition( element, hProps, factor.to.x, to );
+ }
+ }
+
+ // Scale the content
+ if ( scale === "content" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ from = $.effects.setTransition( element, cProps, factor.from.y, from );
+ to = $.effects.setTransition( element, cProps, factor.to.y, to );
+ }
+ }
+
+ // Adjust the position properties based on the provided origin points
+ if ( origin ) {
+ baseline = $.effects.getBaseline( origin, original );
+ from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;
+ from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;
+ to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;
+ to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;
+ }
+ element.css( from );
+
+ // Animate the children if desired
+ if ( scale === "content" || scale === "both" ) {
+
+ vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps );
+ hProps = hProps.concat( [ "marginLeft", "marginRight" ] );
+
+ // Only animate children with width attributes specified
+ // TODO: is this right? should we include anything with css width specified as well
+ element.find( "*[width]" ).each( function() {
+ var child = $( this ),
+ childOriginal = $.effects.scaledDimensions( child ),
+ childFrom = {
+ height: childOriginal.height * factor.from.y,
+ width: childOriginal.width * factor.from.x,
+ outerHeight: childOriginal.outerHeight * factor.from.y,
+ outerWidth: childOriginal.outerWidth * factor.from.x
+ },
+ childTo = {
+ height: childOriginal.height * factor.to.y,
+ width: childOriginal.width * factor.to.x,
+ outerHeight: childOriginal.height * factor.to.y,
+ outerWidth: childOriginal.width * factor.to.x
+ };
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );
+ childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );
+ childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );
+ }
+
+ if ( restore ) {
+ $.effects.saveStyle( child );
+ }
+
+ // Animate children
+ child.css( childFrom );
+ child.animate( childTo, options.duration, options.easing, function() {
+
+ // Restore children
+ if ( restore ) {
+ $.effects.restoreStyle( child );
+ }
+ } );
+ } );
+ }
+
+ // Animate
+ element.animate( to, {
+ queue: false,
+ duration: options.duration,
+ easing: options.easing,
+ complete: function() {
+
+ var offset = element.offset();
+
+ if ( to.opacity === 0 ) {
+ element.css( "opacity", from.opacity );
+ }
+
+ if ( !restore ) {
+ element
+ .css( "position", position === "static" ? "relative" : position )
+ .offset( offset );
+
+ // Need to save style here so that automatic style restoration
+ // doesn't restore to the original styles from before the animation.
+ $.effects.saveStyle( element );
+ }
+
+ done();
+ }
+ } );
+
+} );
+
+
+/*!
+ * jQuery UI Effects Scale 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Scale Effect
+//>>group: Effects
+//>>description: Grows or shrinks an element and its content.
+//>>docs: http://api.jqueryui.com/scale-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectScale = $.effects.define( "scale", function( options, done ) {
+
+ // Create element
+ var el = $( this ),
+ mode = options.mode,
+ percent = parseInt( options.percent, 10 ) ||
+ ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ),
+
+ newOptions = $.extend( true, {
+ from: $.effects.scaledDimensions( el ),
+ to: $.effects.scaledDimensions( el, percent, options.direction || "both" ),
+ origin: options.origin || [ "middle", "center" ]
+ }, options );
+
+ // Fade option to support puff
+ if ( options.fade ) {
+ newOptions.from.opacity = 1;
+ newOptions.to.opacity = 0;
+ }
+
+ $.effects.effect.size.call( this, newOptions, done );
+} );
+
+
+/*!
+ * jQuery UI Effects Puff 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Puff Effect
+//>>group: Effects
+//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.
+//>>docs: http://api.jqueryui.com/puff-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) {
+ var newOptions = $.extend( true, {}, options, {
+ fade: true,
+ percent: parseInt( options.percent, 10 ) || 150
+ } );
+
+ $.effects.effect.scale.call( this, newOptions, done );
+} );
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Pulsate Effect
+//>>group: Effects
+//>>description: Pulsates an element n times by changing the opacity to zero and back.
+//>>docs: http://api.jqueryui.com/pulsate-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) {
+ var element = $( this ),
+ mode = options.mode,
+ show = mode === "show",
+ hide = mode === "hide",
+ showhide = show || hide,
+
+ // Showing or hiding leaves off the "last" animation
+ anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+ duration = options.duration / anims,
+ animateTo = 0,
+ i = 1,
+ queuelen = element.queue().length;
+
+ if ( show || !element.is( ":visible" ) ) {
+ element.css( "opacity", 0 ).show();
+ animateTo = 1;
+ }
+
+ // Anims - 1 opacity "toggles"
+ for ( ; i < anims; i++ ) {
+ element.animate( { opacity: animateTo }, duration, options.easing );
+ animateTo = 1 - animateTo;
+ }
+
+ element.animate( { opacity: animateTo }, duration, options.easing );
+
+ element.queue( done );
+
+ $.effects.unshift( element, queuelen, anims + 1 );
+} );
+
+
+/*!
+ * jQuery UI Effects Shake 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Shake Effect
+//>>group: Effects
+//>>description: Shakes an element horizontally or vertically n times.
+//>>docs: http://api.jqueryui.com/shake-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectShake = $.effects.define( "shake", function( options, done ) {
+
+ var i = 1,
+ element = $( this ),
+ direction = options.direction || "left",
+ distance = options.distance || 20,
+ times = options.times || 3,
+ anims = times * 2 + 1,
+ speed = Math.round( options.duration / anims ),
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ positiveMotion = ( direction === "up" || direction === "left" ),
+ animation = {},
+ animation1 = {},
+ animation2 = {},
+
+ queuelen = element.queue().length;
+
+ $.effects.createPlaceholder( element );
+
+ // Animation
+ animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+ animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+ animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+ // Animate
+ element.animate( animation, speed, options.easing );
+
+ // Shakes
+ for ( ; i < times; i++ ) {
+ element
+ .animate( animation1, speed, options.easing )
+ .animate( animation2, speed, options.easing );
+ }
+
+ element
+ .animate( animation1, speed, options.easing )
+ .animate( animation, speed / 2, options.easing )
+ .queue( done );
+
+ $.effects.unshift( element, queuelen, anims + 1 );
+} );
+
+
+/*!
+ * jQuery UI Effects Slide 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Slide Effect
+//>>group: Effects
+//>>description: Slides an element in and out of the viewport.
+//>>docs: http://api.jqueryui.com/slide-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) {
+ var startClip, startRef,
+ element = $( this ),
+ map = {
+ up: [ "bottom", "top" ],
+ down: [ "top", "bottom" ],
+ left: [ "right", "left" ],
+ right: [ "left", "right" ]
+ },
+ mode = options.mode,
+ direction = options.direction || "left",
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ positiveMotion = ( direction === "up" || direction === "left" ),
+ distance = options.distance ||
+ element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ),
+ animation = {};
+
+ $.effects.createPlaceholder( element );
+
+ startClip = element.cssClip();
+ startRef = element.position()[ ref ];
+
+ // Define hide animation
+ animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;
+ animation.clip = element.cssClip();
+ animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];
+
+ // Reverse the animation if we're showing
+ if ( mode === "show" ) {
+ element.cssClip( animation.clip );
+ element.css( ref, animation[ ref ] );
+ animation.clip = startClip;
+ animation[ ref ] = startRef;
+ }
+
+ // Actually animate
+ element.animate( animation, {
+ queue: false,
+ duration: options.duration,
+ easing: options.easing,
+ complete: done
+ } );
+} );
+
+
+/*!
+ * jQuery UI Effects Transfer 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Transfer Effect
+//>>group: Effects
+//>>description: Displays a transfer effect from one element to another.
+//>>docs: http://api.jqueryui.com/transfer-effect/
+//>>demos: http://jqueryui.com/effect/
+
+
+
+var effect;
+if ( $.uiBackCompat !== false ) {
+ effect = $.effects.define( "transfer", function( options, done ) {
+ $( this ).transfer( options, done );
+ } );
+}
+var effectsEffectTransfer = effect;
+
+
+/*!
+ * jQuery UI Focusable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: :focusable Selector
+//>>group: Core
+//>>description: Selects elements which can be focused.
+//>>docs: http://api.jqueryui.com/focusable-selector/
+
+
+
+// Selectors
+$.ui.focusable = function( element, hasTabindex ) {
+ var map, mapName, img, focusableIfVisible, fieldset,
+ nodeName = element.nodeName.toLowerCase();
+
+ if ( "area" === nodeName ) {
+ map = element.parentNode;
+ mapName = map.name;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap='#" + mapName + "']" );
+ return img.length > 0 && img.is( ":visible" );
+ }
+
+ if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
+ focusableIfVisible = !element.disabled;
+
+ if ( focusableIfVisible ) {
+
+ // Form controls within a disabled fieldset are disabled.
+ // However, controls within the fieldset's legend do not get disabled.
+ // Since controls generally aren't placed inside legends, we skip
+ // this portion of the check.
+ fieldset = $( element ).closest( "fieldset" )[ 0 ];
+ if ( fieldset ) {
+ focusableIfVisible = !fieldset.disabled;
+ }
+ }
+ } else if ( "a" === nodeName ) {
+ focusableIfVisible = element.href || hasTabindex;
+ } else {
+ focusableIfVisible = hasTabindex;
+ }
+
+ return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );
+};
+
+// Support: IE 8 only
+// IE 8 doesn't resolve inherit to visible/hidden for computed values
+function visible( element ) {
+ var visibility = element.css( "visibility" );
+ while ( visibility === "inherit" ) {
+ element = element.parent();
+ visibility = element.css( "visibility" );
+ }
+ return visibility !== "hidden";
+}
+
+$.extend( $.expr[ ":" ], {
+ focusable: function( element ) {
+ return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
+ }
+} );
+
+var focusable = $.ui.focusable;
+
+
+
+
+// Support: IE8 Only
+// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop
+// with a string, so we need to find the proper form.
+var form = $.fn.form = function() {
+ return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form );
+};
+
+
+/*!
+ * jQuery UI Form Reset Mixin 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Form Reset Mixin
+//>>group: Core
+//>>description: Refresh input widgets when their form is reset
+//>>docs: http://api.jqueryui.com/form-reset-mixin/
+
+
+
+var formResetMixin = $.ui.formResetMixin = {
+ _formResetHandler: function() {
+ var form = $( this );
+
+ // Wait for the form reset to actually happen before refreshing
+ setTimeout( function() {
+ var instances = form.data( "ui-form-reset-instances" );
+ $.each( instances, function() {
+ this.refresh();
+ } );
+ } );
+ },
+
+ _bindFormResetHandler: function() {
+ this.form = this.element.form();
+ if ( !this.form.length ) {
+ return;
+ }
+
+ var instances = this.form.data( "ui-form-reset-instances" ) || [];
+ if ( !instances.length ) {
+
+ // We don't use _on() here because we use a single event handler per form
+ this.form.on( "reset.ui-form-reset", this._formResetHandler );
+ }
+ instances.push( this );
+ this.form.data( "ui-form-reset-instances", instances );
+ },
+
+ _unbindFormResetHandler: function() {
+ if ( !this.form.length ) {
+ return;
+ }
+
+ var instances = this.form.data( "ui-form-reset-instances" );
+ instances.splice( $.inArray( this, instances ), 1 );
+ if ( instances.length ) {
+ this.form.data( "ui-form-reset-instances", instances );
+ } else {
+ this.form
+ .removeData( "ui-form-reset-instances" )
+ .off( "reset.ui-form-reset" );
+ }
+ }
+};
+
+
+/*!
+ * jQuery UI Support for jQuery core 1.7.x 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ */
+
+//>>label: jQuery 1.7 Support
+//>>group: Core
+//>>description: Support version 1.7.x of jQuery core
+
+
+
+// Support: jQuery 1.7 only
+// Not a great way to check versions, but since we only support 1.7+ and only
+// need to detect <1.8, this is a simple check that should suffice. Checking
+// for "1.7." would be a bit safer, but the version string is 1.7, not 1.7.0
+// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting
+// 1.7 anymore). See #11197 for why we're not using feature detection.
+if ( $.fn.jquery.substring( 0, 3 ) === "1.7" ) {
+
+ // Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight()
+ // Unlike jQuery Core 1.8+, these only support numeric values to set the
+ // dimensions in pixels
+ $.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+ }
+ } );
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each( function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ } );
+ };
+
+ $.fn[ "outer" + name ] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each( function() {
+ $( this ).css( type, reduce( this, size, true, margin ) + "px" );
+ } );
+ };
+ } );
+
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+;
+/*!
+ * jQuery UI Keycode 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Keycode
+//>>group: Core
+//>>description: Provide keycodes as keynames
+//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/
+
+
+var keycode = $.ui.keyCode = {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+};
+
+
+
+
+// Internal use only
+var escapeSelector = $.ui.escapeSelector = ( function() {
+ var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;
+ return function( selector ) {
+ return selector.replace( selectorEscape, "\\$1" );
+ };
+} )();
+
+
+/*!
+ * jQuery UI Labels 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: labels
+//>>group: Core
+//>>description: Find all the labels associated with a given input
+//>>docs: http://api.jqueryui.com/labels/
+
+
+
+var labels = $.fn.labels = function() {
+ var ancestor, selector, id, labels, ancestors;
+
+ // Check control.labels first
+ if ( this[ 0 ].labels && this[ 0 ].labels.length ) {
+ return this.pushStack( this[ 0 ].labels );
+ }
+
+ // Support: IE <= 11, FF <= 37, Android <= 2.3 only
+ // Above browsers do not support control.labels. Everything below is to support them
+ // as well as document fragments. control.labels does not work on document fragments
+ labels = this.eq( 0 ).parents( "label" );
+
+ // Look for the label based on the id
+ id = this.attr( "id" );
+ if ( id ) {
+
+ // We don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.eq( 0 ).parents().last();
+
+ // Get a full set of top level ancestors
+ ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
+
+ // Create a selector for the label based on the id
+ selector = "label[for='" + $.ui.escapeSelector( id ) + "']";
+
+ labels = labels.add( ancestors.find( selector ).addBack( selector ) );
+
+ }
+
+ // Return whatever we have found for labels
+ return this.pushStack( labels );
+};
+
+
+/*!
+ * jQuery UI Scroll Parent 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: scrollParent
+//>>group: Core
+//>>description: Get the closest ancestor element that is scrollable.
+//>>docs: http://api.jqueryui.com/scrollParent/
+
+
+
+var scrollParent = $.fn.scrollParent = function( includeHidden ) {
+ var position = this.css( "position" ),
+ excludeStaticParent = position === "absolute",
+ overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+ scrollParent = this.parents().filter( function() {
+ var parent = $( this );
+ if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+ return false;
+ }
+ return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
+ parent.css( "overflow-x" ) );
+ } ).eq( 0 );
+
+ return position === "fixed" || !scrollParent.length ?
+ $( this[ 0 ].ownerDocument || document ) :
+ scrollParent;
+};
+
+
+/*!
+ * jQuery UI Tabbable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: :tabbable Selector
+//>>group: Core
+//>>description: Selects elements which can be tabbed to.
+//>>docs: http://api.jqueryui.com/tabbable-selector/
+
+
+
+var tabbable = $.extend( $.expr[ ":" ], {
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ hasTabindex = tabIndex != null;
+ return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );
+ }
+} );
+
+
+/*!
+ * jQuery UI Unique ID 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: uniqueId
+//>>group: Core
+//>>description: Functions to generate and remove uniqueId's
+//>>docs: http://api.jqueryui.com/uniqueId/
+
+
+
+var uniqueId = $.fn.extend( {
+ uniqueId: ( function() {
+ var uuid = 0;
+
+ return function() {
+ return this.each( function() {
+ if ( !this.id ) {
+ this.id = "ui-id-" + ( ++uuid );
+ }
+ } );
+ };
+ } )(),
+
+ removeUniqueId: function() {
+ return this.each( function() {
+ if ( /^ui-id-\d+$/.test( this.id ) ) {
+ $( this ).removeAttr( "id" );
+ }
+ } );
+ }
+} );
+
+
+/*!
+ * jQuery UI Accordion 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Accordion
+//>>group: Widgets
+// jscs:disable maximumLineLength
+//>>description: Displays collapsible content panels for presenting information in a limited amount of space.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/accordion/
+//>>demos: http://jqueryui.com/accordion/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/accordion.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsAccordion = $.widget( "ui.accordion", {
+ version: "1.12.1",
+ options: {
+ active: 0,
+ animate: {},
+ classes: {
+ "ui-accordion-header": "ui-corner-top",
+ "ui-accordion-header-collapsed": "ui-corner-all",
+ "ui-accordion-content": "ui-corner-bottom"
+ },
+ collapsible: false,
+ event: "click",
+ header: "> li > :first-child, > :not(li):even",
+ heightStyle: "auto",
+ icons: {
+ activeHeader: "ui-icon-triangle-1-s",
+ header: "ui-icon-triangle-1-e"
+ },
+
+ // Callbacks
+ activate: null,
+ beforeActivate: null
+ },
+
+ hideProps: {
+ borderTopWidth: "hide",
+ borderBottomWidth: "hide",
+ paddingTop: "hide",
+ paddingBottom: "hide",
+ height: "hide"
+ },
+
+ showProps: {
+ borderTopWidth: "show",
+ borderBottomWidth: "show",
+ paddingTop: "show",
+ paddingBottom: "show",
+ height: "show"
+ },
+
+ _create: function() {
+ var options = this.options;
+
+ this.prevShow = this.prevHide = $();
+ this._addClass( "ui-accordion", "ui-widget ui-helper-reset" );
+ this.element.attr( "role", "tablist" );
+
+ // Don't allow collapsible: false and active: false / null
+ if ( !options.collapsible && ( options.active === false || options.active == null ) ) {
+ options.active = 0;
+ }
+
+ this._processPanels();
+
+ // handle negative values
+ if ( options.active < 0 ) {
+ options.active += this.headers.length;
+ }
+ this._refresh();
+ },
+
+ _getCreateEventData: function() {
+ return {
+ header: this.active,
+ panel: !this.active.length ? $() : this.active.next()
+ };
+ },
+
+ _createIcons: function() {
+ var icon, children,
+ icons = this.options.icons;
+
+ if ( icons ) {
+ icon = $( "<span>" );
+ this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header );
+ icon.prependTo( this.headers );
+ children = this.active.children( ".ui-accordion-header-icon" );
+ this._removeClass( children, icons.header )
+ ._addClass( children, null, icons.activeHeader )
+ ._addClass( this.headers, "ui-accordion-icons" );
+ }
+ },
+
+ _destroyIcons: function() {
+ this._removeClass( this.headers, "ui-accordion-icons" );
+ this.headers.children( ".ui-accordion-header-icon" ).remove();
+ },
+
+ _destroy: function() {
+ var contents;
+
+ // Clean up main element
+ this.element.removeAttr( "role" );
+
+ // Clean up headers
+ this.headers
+ .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" )
+ .removeUniqueId();
+
+ this._destroyIcons();
+
+ // Clean up content panels
+ contents = this.headers.next()
+ .css( "display", "" )
+ .removeAttr( "role aria-hidden aria-labelledby" )
+ .removeUniqueId();
+
+ if ( this.options.heightStyle !== "content" ) {
+ contents.css( "height", "" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "event" ) {
+ if ( this.options.event ) {
+ this._off( this.headers, this.options.event );
+ }
+ this._setupEvents( value );
+ }
+
+ this._super( key, value );
+
+ // Setting collapsible: false while collapsed; open first panel
+ if ( key === "collapsible" && !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+
+ if ( key === "icons" ) {
+ this._destroyIcons();
+ if ( value ) {
+ this._createIcons();
+ }
+ }
+ },
+
+ _setOptionDisabled: function( value ) {
+ this._super( value );
+
+ this.element.attr( "aria-disabled", value );
+
+ // Support: IE8 Only
+ // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE
+ // so we need to add the disabled class to the headers and panels
+ this._toggleClass( null, "ui-state-disabled", !!value );
+ this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled",
+ !!value );
+ },
+
+ _keydown: function( event ) {
+ if ( event.altKey || event.ctrlKey ) {
+ return;
+ }
+
+ var keyCode = $.ui.keyCode,
+ length = this.headers.length,
+ currentIndex = this.headers.index( event.target ),
+ toFocus = false;
+
+ switch ( event.keyCode ) {
+ case keyCode.RIGHT:
+ case keyCode.DOWN:
+ toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+ break;
+ case keyCode.LEFT:
+ case keyCode.UP:
+ toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+ break;
+ case keyCode.SPACE:
+ case keyCode.ENTER:
+ this._eventHandler( event );
+ break;
+ case keyCode.HOME:
+ toFocus = this.headers[ 0 ];
+ break;
+ case keyCode.END:
+ toFocus = this.headers[ length - 1 ];
+ break;
+ }
+
+ if ( toFocus ) {
+ $( event.target ).attr( "tabIndex", -1 );
+ $( toFocus ).attr( "tabIndex", 0 );
+ $( toFocus ).trigger( "focus" );
+ event.preventDefault();
+ }
+ },
+
+ _panelKeyDown: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+ $( event.currentTarget ).prev().trigger( "focus" );
+ }
+ },
+
+ refresh: function() {
+ var options = this.options;
+ this._processPanels();
+
+ // Was collapsed or no panel
+ if ( ( options.active === false && options.collapsible === true ) ||
+ !this.headers.length ) {
+ options.active = false;
+ this.active = $();
+
+ // active false only when collapsible is true
+ } else if ( options.active === false ) {
+ this._activate( 0 );
+
+ // was active, but active panel is gone
+ } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+
+ // all remaining panel are disabled
+ if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) {
+ options.active = false;
+ this.active = $();
+
+ // activate previous panel
+ } else {
+ this._activate( Math.max( 0, options.active - 1 ) );
+ }
+
+ // was active, active panel still exists
+ } else {
+
+ // make sure active index is correct
+ options.active = this.headers.index( this.active );
+ }
+
+ this._destroyIcons();
+
+ this._refresh();
+ },
+
+ _processPanels: function() {
+ var prevHeaders = this.headers,
+ prevPanels = this.panels;
+
+ this.headers = this.element.find( this.options.header );
+ this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed",
+ "ui-state-default" );
+
+ this.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide();
+ this._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" );
+
+ // Avoid memory leaks (#10056)
+ if ( prevPanels ) {
+ this._off( prevHeaders.not( this.headers ) );
+ this._off( prevPanels.not( this.panels ) );
+ }
+ },
+
+ _refresh: function() {
+ var maxHeight,
+ options = this.options,
+ heightStyle = options.heightStyle,
+ parent = this.element.parent();
+
+ this.active = this._findActive( options.active );
+ this._addClass( this.active, "ui-accordion-header-active", "ui-state-active" )
+ ._removeClass( this.active, "ui-accordion-header-collapsed" );
+ this._addClass( this.active.next(), "ui-accordion-content-active" );
+ this.active.next().show();
+
+ this.headers
+ .attr( "role", "tab" )
+ .each( function() {
+ var header = $( this ),
+ headerId = header.uniqueId().attr( "id" ),
+ panel = header.next(),
+ panelId = panel.uniqueId().attr( "id" );
+ header.attr( "aria-controls", panelId );
+ panel.attr( "aria-labelledby", headerId );
+ } )
+ .next()
+ .attr( "role", "tabpanel" );
+
+ this.headers
+ .not( this.active )
+ .attr( {
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ } )
+ .next()
+ .attr( {
+ "aria-hidden": "true"
+ } )
+ .hide();
+
+ // Make sure at least one header is in the tab order
+ if ( !this.active.length ) {
+ this.headers.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active.attr( {
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ } )
+ .next()
+ .attr( {
+ "aria-hidden": "false"
+ } );
+ }
+
+ this._createIcons();
+
+ this._setupEvents( options.event );
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ this.element.siblings( ":visible" ).each( function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ } );
+
+ this.headers.each( function() {
+ maxHeight -= $( this ).outerHeight( true );
+ } );
+
+ this.headers.next()
+ .each( function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ } )
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.headers.next()
+ .each( function() {
+ var isVisible = $( this ).is( ":visible" );
+ if ( !isVisible ) {
+ $( this ).show();
+ }
+ maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+ if ( !isVisible ) {
+ $( this ).hide();
+ }
+ } )
+ .height( maxHeight );
+ }
+ },
+
+ _activate: function( index ) {
+ var active = this._findActive( index )[ 0 ];
+
+ // Trying to activate the already active panel
+ if ( active === this.active[ 0 ] ) {
+ return;
+ }
+
+ // Trying to collapse, simulate a click on the currently active header
+ active = active || this.active[ 0 ];
+
+ this._eventHandler( {
+ target: active,
+ currentTarget: active,
+ preventDefault: $.noop
+ } );
+ },
+
+ _findActive: function( selector ) {
+ return typeof selector === "number" ? this.headers.eq( selector ) : $();
+ },
+
+ _setupEvents: function( event ) {
+ var events = {
+ keydown: "_keydown"
+ };
+ if ( event ) {
+ $.each( event.split( " " ), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ } );
+ }
+
+ this._off( this.headers.add( this.headers.next() ) );
+ this._on( this.headers, events );
+ this._on( this.headers.next(), { keydown: "_panelKeyDown" } );
+ this._hoverable( this.headers );
+ this._focusable( this.headers );
+ },
+
+ _eventHandler: function( event ) {
+ var activeChildren, clickedChildren,
+ options = this.options,
+ active = this.active,
+ clicked = $( event.currentTarget ),
+ clickedIsActive = clicked[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : clicked.next(),
+ toHide = active.next(),
+ eventData = {
+ oldHeader: active,
+ oldPanel: toHide,
+ newHeader: collapsing ? $() : clicked,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if (
+
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.headers.index( clicked );
+
+ // When the call to ._toggle() comes after the class changes
+ // it causes a very odd bug in IE 8 (see #6720)
+ this.active = clickedIsActive ? $() : clicked;
+ this._toggle( eventData );
+
+ // Switch classes
+ // corner classes on the previously active header stay after the animation
+ this._removeClass( active, "ui-accordion-header-active", "ui-state-active" );
+ if ( options.icons ) {
+ activeChildren = active.children( ".ui-accordion-header-icon" );
+ this._removeClass( activeChildren, null, options.icons.activeHeader )
+ ._addClass( activeChildren, null, options.icons.header );
+ }
+
+ if ( !clickedIsActive ) {
+ this._removeClass( clicked, "ui-accordion-header-collapsed" )
+ ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" );
+ if ( options.icons ) {
+ clickedChildren = clicked.children( ".ui-accordion-header-icon" );
+ this._removeClass( clickedChildren, null, options.icons.header )
+ ._addClass( clickedChildren, null, options.icons.activeHeader );
+ }
+
+ this._addClass( clicked.next(), "ui-accordion-content-active" );
+ }
+ },
+
+ _toggle: function( data ) {
+ var toShow = data.newPanel,
+ toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+ // Handle activating a panel during the animation for another activation
+ this.prevShow.add( this.prevHide ).stop( true, true );
+ this.prevShow = toShow;
+ this.prevHide = toHide;
+
+ if ( this.options.animate ) {
+ this._animate( toShow, toHide, data );
+ } else {
+ toHide.hide();
+ toShow.show();
+ this._toggleComplete( data );
+ }
+
+ toHide.attr( {
+ "aria-hidden": "true"
+ } );
+ toHide.prev().attr( {
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ } );
+
+ // if we're switching panels, remove the old header from the tab order
+ // if we're opening from collapsed state, remove the previous header from the tab order
+ // if we're collapsing, then keep the collapsing header in the tab order
+ if ( toShow.length && toHide.length ) {
+ toHide.prev().attr( {
+ "tabIndex": -1,
+ "aria-expanded": "false"
+ } );
+ } else if ( toShow.length ) {
+ this.headers.filter( function() {
+ return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
+ } )
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow
+ .attr( "aria-hidden", "false" )
+ .prev()
+ .attr( {
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ } );
+ },
+
+ _animate: function( toShow, toHide, data ) {
+ var total, easing, duration,
+ that = this,
+ adjust = 0,
+ boxSizing = toShow.css( "box-sizing" ),
+ down = toShow.length &&
+ ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+ animate = this.options.animate || {},
+ options = down && animate.down || animate,
+ complete = function() {
+ that._toggleComplete( data );
+ };
+
+ if ( typeof options === "number" ) {
+ duration = options;
+ }
+ if ( typeof options === "string" ) {
+ easing = options;
+ }
+
+ // fall back from options to animation in case of partial down settings
+ easing = easing || options.easing || animate.easing;
+ duration = duration || options.duration || animate.duration;
+
+ if ( !toHide.length ) {
+ return toShow.animate( this.showProps, duration, easing, complete );
+ }
+ if ( !toShow.length ) {
+ return toHide.animate( this.hideProps, duration, easing, complete );
+ }
+
+ total = toShow.show().outerHeight();
+ toHide.animate( this.hideProps, {
+ duration: duration,
+ easing: easing,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ }
+ } );
+ toShow
+ .hide()
+ .animate( this.showProps, {
+ duration: duration,
+ easing: easing,
+ complete: complete,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ if ( fx.prop !== "height" ) {
+ if ( boxSizing === "content-box" ) {
+ adjust += fx.now;
+ }
+ } else if ( that.options.heightStyle !== "content" ) {
+ fx.now = Math.round( total - toHide.outerHeight() - adjust );
+ adjust = 0;
+ }
+ }
+ } );
+ },
+
+ _toggleComplete: function( data ) {
+ var toHide = data.oldPanel,
+ prev = toHide.prev();
+
+ this._removeClass( toHide, "ui-accordion-content-active" );
+ this._removeClass( prev, "ui-accordion-header-active" )
+ ._addClass( prev, "ui-accordion-header-collapsed" );
+
+ // Work around for rendering bug in IE (#5421)
+ if ( toHide.length ) {
+ toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
+ }
+ this._trigger( "activate", null, data );
+ }
+} );
+
+
+
+var safeActiveElement = $.ui.safeActiveElement = function( document ) {
+ var activeElement;
+
+ // Support: IE 9 only
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+ activeElement = document.activeElement;
+ } catch ( error ) {
+ activeElement = document.body;
+ }
+
+ // Support: IE 9 - 11 only
+ // IE may return null instead of an element
+ // Interestingly, this only seems to occur when NOT in an iframe
+ if ( !activeElement ) {
+ activeElement = document.body;
+ }
+
+ // Support: IE 11 only
+ // IE11 returns a seemingly empty object in some cases when accessing
+ // document.activeElement from an <iframe>
+ if ( !activeElement.nodeName ) {
+ activeElement = document.body;
+ }
+
+ return activeElement;
+};
+
+
+/*!
+ * jQuery UI Menu 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Menu
+//>>group: Widgets
+//>>description: Creates nestable menus.
+//>>docs: http://api.jqueryui.com/menu/
+//>>demos: http://jqueryui.com/menu/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/menu.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsMenu = $.widget( "ui.menu", {
+ version: "1.12.1",
+ defaultElement: "<ul>",
+ delay: 300,
+ options: {
+ icons: {
+ submenu: "ui-icon-caret-1-e"
+ },
+ items: "> *",
+ menus: "ul",
+ position: {
+ my: "left top",
+ at: "right top"
+ },
+ role: "menu",
+
+ // Callbacks
+ blur: null,
+ focus: null,
+ select: null
+ },
+
+ _create: function() {
+ this.activeMenu = this.element;
+
+ // Flag used to prevent firing of the click handler
+ // as the event bubbles up through nested menus
+ this.mouseHandled = false;
+ this.element
+ .uniqueId()
+ .attr( {
+ role: this.options.role,
+ tabIndex: 0
+ } );
+
+ this._addClass( "ui-menu", "ui-widget ui-widget-content" );
+ this._on( {
+
+ // Prevent focus from sticking to links inside menu after clicking
+ // them (focus should always stay on UL during navigation).
+ "mousedown .ui-menu-item": function( event ) {
+ event.preventDefault();
+ },
+ "click .ui-menu-item": function( event ) {
+ var target = $( event.target );
+ var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+ this.select( event );
+
+ // Only set the mouseHandled flag if the event will bubble, see #9469.
+ if ( !event.isPropagationStopped() ) {
+ this.mouseHandled = true;
+ }
+
+ // Open submenu on click
+ if ( target.has( ".ui-menu" ).length ) {
+ this.expand( event );
+ } else if ( !this.element.is( ":focus" ) &&
+ active.closest( ".ui-menu" ).length ) {
+
+ // Redirect focus to the menu
+ this.element.trigger( "focus", [ true ] );
+
+ // If the active item is on the top level, let it stay active.
+ // Otherwise, blur the active item since it is no longer visible.
+ if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+ clearTimeout( this.timer );
+ }
+ }
+ }
+ },
+ "mouseenter .ui-menu-item": function( event ) {
+
+ // Ignore mouse events while typeahead is active, see #10458.
+ // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+ // is over an item in the menu
+ if ( this.previousFilter ) {
+ return;
+ }
+
+ var actualTarget = $( event.target ).closest( ".ui-menu-item" ),
+ target = $( event.currentTarget );
+
+ // Ignore bubbled events on parent items, see #11641
+ if ( actualTarget[ 0 ] !== target[ 0 ] ) {
+ return;
+ }
+
+ // Remove ui-state-active class from siblings of the newly focused menu item
+ // to avoid a jump caused by adjacent elements both having a class with a border
+ this._removeClass( target.siblings().children( ".ui-state-active" ),
+ null, "ui-state-active" );
+ this.focus( event, target );
+ },
+ mouseleave: "collapseAll",
+ "mouseleave .ui-menu": "collapseAll",
+ focus: function( event, keepActiveItem ) {
+
+ // If there's already an active item, keep it active
+ // If not, activate the first item
+ var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+ if ( !keepActiveItem ) {
+ this.focus( event, item );
+ }
+ },
+ blur: function( event ) {
+ this._delay( function() {
+ var notContained = !$.contains(
+ this.element[ 0 ],
+ $.ui.safeActiveElement( this.document[ 0 ] )
+ );
+ if ( notContained ) {
+ this.collapseAll( event );
+ }
+ } );
+ },
+ keydown: "_keydown"
+ } );
+
+ this.refresh();
+
+ // Clicks outside of a menu collapse any open menus
+ this._on( this.document, {
+ click: function( event ) {
+ if ( this._closeOnDocumentClick( event ) ) {
+ this.collapseAll( event );
+ }
+
+ // Reset the mouseHandled flag
+ this.mouseHandled = false;
+ }
+ } );
+ },
+
+ _destroy: function() {
+ var items = this.element.find( ".ui-menu-item" )
+ .removeAttr( "role aria-disabled" ),
+ submenus = items.children( ".ui-menu-item-wrapper" )
+ .removeUniqueId()
+ .removeAttr( "tabIndex role aria-haspopup" );
+
+ // Destroy (sub)menus
+ this.element
+ .removeAttr( "aria-activedescendant" )
+ .find( ".ui-menu" ).addBack()
+ .removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " +
+ "tabIndex" )
+ .removeUniqueId()
+ .show();
+
+ submenus.children().each( function() {
+ var elem = $( this );
+ if ( elem.data( "ui-menu-submenu-caret" ) ) {
+ elem.remove();
+ }
+ } );
+ },
+
+ _keydown: function( event ) {
+ var match, prev, character, skip,
+ preventDefault = true;
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.PAGE_UP:
+ this.previousPage( event );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ this.nextPage( event );
+ break;
+ case $.ui.keyCode.HOME:
+ this._move( "first", "first", event );
+ break;
+ case $.ui.keyCode.END:
+ this._move( "last", "last", event );
+ break;
+ case $.ui.keyCode.UP:
+ this.previous( event );
+ break;
+ case $.ui.keyCode.DOWN:
+ this.next( event );
+ break;
+ case $.ui.keyCode.LEFT:
+ this.collapse( event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+ this.expand( event );
+ }
+ break;
+ case $.ui.keyCode.ENTER:
+ case $.ui.keyCode.SPACE:
+ this._activate( event );
+ break;
+ case $.ui.keyCode.ESCAPE:
+ this.collapse( event );
+ break;
+ default:
+ preventDefault = false;
+ prev = this.previousFilter || "";
+ skip = false;
+
+ // Support number pad values
+ character = event.keyCode >= 96 && event.keyCode <= 105 ?
+ ( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );
+
+ clearTimeout( this.filterTimer );
+
+ if ( character === prev ) {
+ skip = true;
+ } else {
+ character = prev + character;
+ }
+
+ match = this._filterMenuItems( character );
+ match = skip && match.index( this.active.next() ) !== -1 ?
+ this.active.nextAll( ".ui-menu-item" ) :
+ match;
+
+ // If no matches on the current filter, reset to the last character pressed
+ // to move down the menu to the first item that starts with that character
+ if ( !match.length ) {
+ character = String.fromCharCode( event.keyCode );
+ match = this._filterMenuItems( character );
+ }
+
+ if ( match.length ) {
+ this.focus( event, match );
+ this.previousFilter = character;
+ this.filterTimer = this._delay( function() {
+ delete this.previousFilter;
+ }, 1000 );
+ } else {
+ delete this.previousFilter;
+ }
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ },
+
+ _activate: function( event ) {
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+ if ( this.active.children( "[aria-haspopup='true']" ).length ) {
+ this.expand( event );
+ } else {
+ this.select( event );
+ }
+ }
+ },
+
+ refresh: function() {
+ var menus, items, newSubmenus, newItems, newWrappers,
+ that = this,
+ icon = this.options.icons.submenu,
+ submenus = this.element.find( this.options.menus );
+
+ this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length );
+
+ // Initialize nested menus
+ newSubmenus = submenus.filter( ":not(.ui-menu)" )
+ .hide()
+ .attr( {
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ } )
+ .each( function() {
+ var menu = $( this ),
+ item = menu.prev(),
+ submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true );
+
+ that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon );
+ item
+ .attr( "aria-haspopup", "true" )
+ .prepend( submenuCaret );
+ menu.attr( "aria-labelledby", item.attr( "id" ) );
+ } );
+
+ this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" );
+
+ menus = submenus.add( this.element );
+ items = menus.find( this.options.items );
+
+ // Initialize menu-items containing spaces and/or dashes only as dividers
+ items.not( ".ui-menu-item" ).each( function() {
+ var item = $( this );
+ if ( that._isDivider( item ) ) {
+ that._addClass( item, "ui-menu-divider", "ui-widget-content" );
+ }
+ } );
+
+ // Don't refresh list items that are already adapted
+ newItems = items.not( ".ui-menu-item, .ui-menu-divider" );
+ newWrappers = newItems.children()
+ .not( ".ui-menu" )
+ .uniqueId()
+ .attr( {
+ tabIndex: -1,
+ role: this._itemRole()
+ } );
+ this._addClass( newItems, "ui-menu-item" )
+ ._addClass( newWrappers, "ui-menu-item-wrapper" );
+
+ // Add aria-disabled attribute to any disabled menu item
+ items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+ // If the active item has been removed, blur the menu
+ if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ this.blur();
+ }
+ },
+
+ _itemRole: function() {
+ return {
+ menu: "menuitem",
+ listbox: "option"
+ }[ this.options.role ];
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ var icons = this.element.find( ".ui-menu-icon" );
+ this._removeClass( icons, null, this.options.icons.submenu )
+ ._addClass( icons, null, value.submenu );
+ }
+ this._super( key, value );
+ },
+
+ _setOptionDisabled: function( value ) {
+ this._super( value );
+
+ this.element.attr( "aria-disabled", String( value ) );
+ this._toggleClass( null, "ui-state-disabled", !!value );
+ },
+
+ focus: function( event, item ) {
+ var nested, focused, activeParent;
+ this.blur( event, event && event.type === "focus" );
+
+ this._scrollIntoView( item );
+
+ this.active = item.first();
+
+ focused = this.active.children( ".ui-menu-item-wrapper" );
+ this._addClass( focused, null, "ui-state-active" );
+
+ // Only update aria-activedescendant if there's a role
+ // otherwise we assume focus is managed elsewhere
+ if ( this.options.role ) {
+ this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+ }
+
+ // Highlight active parent menu item, if any
+ activeParent = this.active
+ .parent()
+ .closest( ".ui-menu-item" )
+ .children( ".ui-menu-item-wrapper" );
+ this._addClass( activeParent, null, "ui-state-active" );
+
+ if ( event && event.type === "keydown" ) {
+ this._close();
+ } else {
+ this.timer = this._delay( function() {
+ this._close();
+ }, this.delay );
+ }
+
+ nested = item.children( ".ui-menu" );
+ if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+ this._startOpening( nested );
+ }
+ this.activeMenu = item.parent();
+
+ this._trigger( "focus", event, { item: item } );
+ },
+
+ _scrollIntoView: function( item ) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if ( this._hasScroll() ) {
+ borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;
+ paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height();
+ itemHeight = item.outerHeight();
+
+ if ( offset < 0 ) {
+ this.activeMenu.scrollTop( scroll + offset );
+ } else if ( offset + itemHeight > elementHeight ) {
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+ }
+ }
+ },
+
+ blur: function( event, fromFocus ) {
+ if ( !fromFocus ) {
+ clearTimeout( this.timer );
+ }
+
+ if ( !this.active ) {
+ return;
+ }
+
+ this._removeClass( this.active.children( ".ui-menu-item-wrapper" ),
+ null, "ui-state-active" );
+
+ this._trigger( "blur", event, { item: this.active } );
+ this.active = null;
+ },
+
+ _startOpening: function( submenu ) {
+ clearTimeout( this.timer );
+
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+ // shift in the submenu position when mousing over the caret icon
+ if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+ return;
+ }
+
+ this.timer = this._delay( function() {
+ this._close();
+ this._open( submenu );
+ }, this.delay );
+ },
+
+ _open: function( submenu ) {
+ var position = $.extend( {
+ of: this.active
+ }, this.options.position );
+
+ clearTimeout( this.timer );
+ this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+ .hide()
+ .attr( "aria-hidden", "true" );
+
+ submenu
+ .show()
+ .removeAttr( "aria-hidden" )
+ .attr( "aria-expanded", "true" )
+ .position( position );
+ },
+
+ collapseAll: function( event, all ) {
+ clearTimeout( this.timer );
+ this.timer = this._delay( function() {
+
+ // If we were passed an event, look for the submenu that contains the event
+ var currentMenu = all ? this.element :
+ $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+ // If we found no valid submenu ancestor, use the main menu to close all
+ // sub menus anyway
+ if ( !currentMenu.length ) {
+ currentMenu = this.element;
+ }
+
+ this._close( currentMenu );
+
+ this.blur( event );
+
+ // Work around active item staying active after menu is blurred
+ this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" );
+
+ this.activeMenu = currentMenu;
+ }, this.delay );
+ },
+
+ // With no arguments, closes the currently active menu - if nothing is active
+ // it closes all menus. If passed an argument, it will search for menus BELOW
+ _close: function( startMenu ) {
+ if ( !startMenu ) {
+ startMenu = this.active ? this.active.parent() : this.element;
+ }
+
+ startMenu.find( ".ui-menu" )
+ .hide()
+ .attr( "aria-hidden", "true" )
+ .attr( "aria-expanded", "false" );
+ },
+
+ _closeOnDocumentClick: function( event ) {
+ return !$( event.target ).closest( ".ui-menu" ).length;
+ },
+
+ _isDivider: function( item ) {
+
+ // Match hyphen, em dash, en dash
+ return !/[^\-\u2014\u2013\s]/.test( item.text() );
+ },
+
+ collapse: function( event ) {
+ var newItem = this.active &&
+ this.active.parent().closest( ".ui-menu-item", this.element );
+ if ( newItem && newItem.length ) {
+ this._close();
+ this.focus( event, newItem );
+ }
+ },
+
+ expand: function( event ) {
+ var newItem = this.active &&
+ this.active
+ .children( ".ui-menu " )
+ .find( this.options.items )
+ .first();
+
+ if ( newItem && newItem.length ) {
+ this._open( newItem.parent() );
+
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+ this._delay( function() {
+ this.focus( event, newItem );
+ } );
+ }
+ },
+
+ next: function( event ) {
+ this._move( "next", "first", event );
+ },
+
+ previous: function( event ) {
+ this._move( "prev", "last", event );
+ },
+
+ isFirstItem: function() {
+ return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+ },
+
+ isLastItem: function() {
+ return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+ },
+
+ _move: function( direction, filter, event ) {
+ var next;
+ if ( this.active ) {
+ if ( direction === "first" || direction === "last" ) {
+ next = this.active
+ [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+ .eq( -1 );
+ } else {
+ next = this.active
+ [ direction + "All" ]( ".ui-menu-item" )
+ .eq( 0 );
+ }
+ }
+ if ( !next || !next.length || !this.active ) {
+ next = this.activeMenu.find( this.options.items )[ filter ]();
+ }
+
+ this.focus( event, next );
+ },
+
+ nextPage: function( event ) {
+ var item, base, height;
+
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isLastItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.nextAll( ".ui-menu-item" ).each( function() {
+ item = $( this );
+ return item.offset().top - base - height < 0;
+ } );
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items )
+ [ !this.active ? "first" : "last" ]() );
+ }
+ },
+
+ previousPage: function( event ) {
+ var item, base, height;
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isFirstItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.prevAll( ".ui-menu-item" ).each( function() {
+ item = $( this );
+ return item.offset().top - base + height > 0;
+ } );
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items ).first() );
+ }
+ },
+
+ _hasScroll: function() {
+ return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+ },
+
+ select: function( event ) {
+
+ // TODO: It should never be possible to not have an active item at this
+ // point, but the tests don't trigger mouseenter before click.
+ this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+ var ui = { item: this.active };
+ if ( !this.active.has( ".ui-menu" ).length ) {
+ this.collapseAll( event, true );
+ }
+ this._trigger( "select", event, ui );
+ },
+
+ _filterMenuItems: function( character ) {
+ var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+ regex = new RegExp( "^" + escapedCharacter, "i" );
+
+ return this.activeMenu
+ .find( this.options.items )
+
+ // Only match on items, not dividers or other content (#10571)
+ .filter( ".ui-menu-item" )
+ .filter( function() {
+ return regex.test(
+ $.trim( $( this ).children( ".ui-menu-item-wrapper" ).text() ) );
+ } );
+ }
+} );
+
+
+/*!
+ * jQuery UI Autocomplete 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Autocomplete
+//>>group: Widgets
+//>>description: Lists suggested words as the user is typing.
+//>>docs: http://api.jqueryui.com/autocomplete/
+//>>demos: http://jqueryui.com/autocomplete/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/autocomplete.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.autocomplete", {
+ version: "1.12.1",
+ defaultElement: "<input>",
+ options: {
+ appendTo: null,
+ autoFocus: false,
+ delay: 300,
+ minLength: 1,
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ source: null,
+
+ // Callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ response: null,
+ search: null,
+ select: null
+ },
+
+ requestIndex: 0,
+ pending: 0,
+
+ _create: function() {
+
+ // Some browsers only repeat keydown events, not keypress events,
+ // so we use the suppressKeyPress flag to determine if we've already
+ // handled the keydown event. #7269
+ // Unfortunately the code for & in keypress is the same as the up arrow,
+ // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+ // events when we know the keydown event was used to modify the
+ // search term. #7799
+ var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+ nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+ isTextarea = nodeName === "textarea",
+ isInput = nodeName === "input";
+
+ // Textareas are always multi-line
+ // Inputs are always single-line, even if inside a contentEditable element
+ // IE also treats inputs as contentEditable
+ // All other element types are determined by whether or not they're contentEditable
+ this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );
+
+ this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+ this.isNewMenu = true;
+
+ this._addClass( "ui-autocomplete-input" );
+ this.element.attr( "autocomplete", "off" );
+
+ this._on( this.element, {
+ keydown: function( event ) {
+ if ( this.element.prop( "readOnly" ) ) {
+ suppressKeyPress = true;
+ suppressInput = true;
+ suppressKeyPressRepeat = true;
+ return;
+ }
+
+ suppressKeyPress = false;
+ suppressInput = false;
+ suppressKeyPressRepeat = false;
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ suppressKeyPress = true;
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ suppressKeyPress = true;
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ suppressKeyPress = true;
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ suppressKeyPress = true;
+ this._keyEvent( "next", event );
+ break;
+ case keyCode.ENTER:
+
+ // when menu is open and has focus
+ if ( this.menu.active ) {
+
+ // #6055 - Opera still allows the keypress to occur
+ // which causes forms to submit
+ suppressKeyPress = true;
+ event.preventDefault();
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.TAB:
+ if ( this.menu.active ) {
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.ESCAPE:
+ if ( this.menu.element.is( ":visible" ) ) {
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+ this.close( event );
+
+ // Different browsers have different default behavior for escape
+ // Single press can mean undo or clear
+ // Double press in IE means clear the whole form
+ event.preventDefault();
+ }
+ break;
+ default:
+ suppressKeyPressRepeat = true;
+
+ // search timeout should be triggered before the input value is changed
+ this._searchTimeout( event );
+ break;
+ }
+ },
+ keypress: function( event ) {
+ if ( suppressKeyPress ) {
+ suppressKeyPress = false;
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ event.preventDefault();
+ }
+ return;
+ }
+ if ( suppressKeyPressRepeat ) {
+ return;
+ }
+
+ // Replicate some key handlers to allow them to repeat in Firefox and Opera
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ this._keyEvent( "next", event );
+ break;
+ }
+ },
+ input: function( event ) {
+ if ( suppressInput ) {
+ suppressInput = false;
+ event.preventDefault();
+ return;
+ }
+ this._searchTimeout( event );
+ },
+ focus: function() {
+ this.selectedItem = null;
+ this.previous = this._value();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ clearTimeout( this.searching );
+ this.close( event );
+ this._change( event );
+ }
+ } );
+
+ this._initSource();
+ this.menu = $( "<ul>" )
+ .appendTo( this._appendTo() )
+ .menu( {
+
+ // disable ARIA support, the live region takes care of that
+ role: null
+ } )
+ .hide()
+ .menu( "instance" );
+
+ this._addClass( this.menu.element, "ui-autocomplete", "ui-front" );
+ this._on( this.menu.element, {
+ mousedown: function( event ) {
+
+ // prevent moving focus out of the text field
+ event.preventDefault();
+
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ this.cancelBlur = true;
+ this._delay( function() {
+ delete this.cancelBlur;
+
+ // Support: IE 8 only
+ // Right clicking a menu item or selecting text from the menu items will
+ // result in focus moving out of the input. However, we've already received
+ // and ignored the blur event because of the cancelBlur flag set above. So
+ // we restore focus to ensure that the menu closes properly based on the user's
+ // next actions.
+ if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
+ this.element.trigger( "focus" );
+ }
+ } );
+ },
+ menufocus: function( event, ui ) {
+ var label, item;
+
+ // support: Firefox
+ // Prevent accidental activation of menu items in Firefox (#7024 #9118)
+ if ( this.isNewMenu ) {
+ this.isNewMenu = false;
+ if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+ this.menu.blur();
+
+ this.document.one( "mousemove", function() {
+ $( event.target ).trigger( event.originalEvent );
+ } );
+
+ return;
+ }
+ }
+
+ item = ui.item.data( "ui-autocomplete-item" );
+ if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+
+ // use value to match what will end up in the input, if it was a key event
+ if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+ this._value( item.value );
+ }
+ }
+
+ // Announce the value in the liveRegion
+ label = ui.item.attr( "aria-label" ) || item.value;
+ if ( label && $.trim( label ).length ) {
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( label ).appendTo( this.liveRegion );
+ }
+ },
+ menuselect: function( event, ui ) {
+ var item = ui.item.data( "ui-autocomplete-item" ),
+ previous = this.previous;
+
+ // Only trigger when focus was lost (click on menu)
+ if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
+ this.element.trigger( "focus" );
+ this.previous = previous;
+
+ // #6109 - IE triggers two focus events and the second
+ // is asynchronous, so we need to reset the previous
+ // term synchronously and asynchronously :-(
+ this._delay( function() {
+ this.previous = previous;
+ this.selectedItem = item;
+ } );
+ }
+
+ if ( false !== this._trigger( "select", event, { item: item } ) ) {
+ this._value( item.value );
+ }
+
+ // reset the term after the select event
+ // this allows custom select handling to work properly
+ this.term = this._value();
+
+ this.close( event );
+ this.selectedItem = item;
+ }
+ } );
+
+ this.liveRegion = $( "<div>", {
+ role: "status",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ } )
+ .appendTo( this.document[ 0 ].body );
+
+ this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );
+
+ // Turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ } );
+ },
+
+ _destroy: function() {
+ clearTimeout( this.searching );
+ this.element.removeAttr( "autocomplete" );
+ this.menu.element.remove();
+ this.liveRegion.remove();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "source" ) {
+ this._initSource();
+ }
+ if ( key === "appendTo" ) {
+ this.menu.element.appendTo( this._appendTo() );
+ }
+ if ( key === "disabled" && value && this.xhr ) {
+ this.xhr.abort();
+ }
+ },
+
+ _isEventTargetInWidget: function( event ) {
+ var menuElement = this.menu.element[ 0 ];
+
+ return event.target === this.element[ 0 ] ||
+ event.target === menuElement ||
+ $.contains( menuElement, event.target );
+ },
+
+ _closeOnClickOutside: function( event ) {
+ if ( !this._isEventTargetInWidget( event ) ) {
+ this.close();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front, dialog" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _initSource: function() {
+ var array, url,
+ that = this;
+ if ( $.isArray( this.options.source ) ) {
+ array = this.options.source;
+ this.source = function( request, response ) {
+ response( $.ui.autocomplete.filter( array, request.term ) );
+ };
+ } else if ( typeof this.options.source === "string" ) {
+ url = this.options.source;
+ this.source = function( request, response ) {
+ if ( that.xhr ) {
+ that.xhr.abort();
+ }
+ that.xhr = $.ajax( {
+ url: url,
+ data: request,
+ dataType: "json",
+ success: function( data ) {
+ response( data );
+ },
+ error: function() {
+ response( [] );
+ }
+ } );
+ };
+ } else {
+ this.source = this.options.source;
+ }
+ },
+
+ _searchTimeout: function( event ) {
+ clearTimeout( this.searching );
+ this.searching = this._delay( function() {
+
+ // Search if the value has changed, or if the user retypes the same value (see #7434)
+ var equalValues = this.term === this._value(),
+ menuVisible = this.menu.element.is( ":visible" ),
+ modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+ if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
+ this.selectedItem = null;
+ this.search( null, event );
+ }
+ }, this.options.delay );
+ },
+
+ search: function( value, event ) {
+ value = value != null ? value : this._value();
+
+ // Always save the actual value, not the one passed as an argument
+ this.term = this._value();
+
+ if ( value.length < this.options.minLength ) {
+ return this.close( event );
+ }
+
+ if ( this._trigger( "search", event ) === false ) {
+ return;
+ }
+
+ return this._search( value );
+ },
+
+ _search: function( value ) {
+ this.pending++;
+ this._addClass( "ui-autocomplete-loading" );
+ this.cancelSearch = false;
+
+ this.source( { term: value }, this._response() );
+ },
+
+ _response: function() {
+ var index = ++this.requestIndex;
+
+ return $.proxy( function( content ) {
+ if ( index === this.requestIndex ) {
+ this.__response( content );
+ }
+
+ this.pending--;
+ if ( !this.pending ) {
+ this._removeClass( "ui-autocomplete-loading" );
+ }
+ }, this );
+ },
+
+ __response: function( content ) {
+ if ( content ) {
+ content = this._normalize( content );
+ }
+ this._trigger( "response", null, { content: content } );
+ if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+ this._suggest( content );
+ this._trigger( "open" );
+ } else {
+
+ // use ._close() instead of .close() so we don't cancel future searches
+ this._close();
+ }
+ },
+
+ close: function( event ) {
+ this.cancelSearch = true;
+ this._close( event );
+ },
+
+ _close: function( event ) {
+
+ // Remove the handler that closes the menu on outside clicks
+ this._off( this.document, "mousedown" );
+
+ if ( this.menu.element.is( ":visible" ) ) {
+ this.menu.element.hide();
+ this.menu.blur();
+ this.isNewMenu = true;
+ this._trigger( "close", event );
+ }
+ },
+
+ _change: function( event ) {
+ if ( this.previous !== this._value() ) {
+ this._trigger( "change", event, { item: this.selectedItem } );
+ }
+ },
+
+ _normalize: function( items ) {
+
+ // assume all items have the right format when the first item is complete
+ if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
+ return items;
+ }
+ return $.map( items, function( item ) {
+ if ( typeof item === "string" ) {
+ return {
+ label: item,
+ value: item
+ };
+ }
+ return $.extend( {}, item, {
+ label: item.label || item.value,
+ value: item.value || item.label
+ } );
+ } );
+ },
+
+ _suggest: function( items ) {
+ var ul = this.menu.element.empty();
+ this._renderMenu( ul, items );
+ this.isNewMenu = true;
+ this.menu.refresh();
+
+ // Size and position menu
+ ul.show();
+ this._resizeMenu();
+ ul.position( $.extend( {
+ of: this.element
+ }, this.options.position ) );
+
+ if ( this.options.autoFocus ) {
+ this.menu.next();
+ }
+
+ // Listen for interactions outside of the widget (#6642)
+ this._on( this.document, {
+ mousedown: "_closeOnClickOutside"
+ } );
+ },
+
+ _resizeMenu: function() {
+ var ul = this.menu.element;
+ ul.outerWidth( Math.max(
+
+ // Firefox wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping (#7513)
+ ul.width( "" ).outerWidth() + 1,
+ this.element.outerWidth()
+ ) );
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this;
+ $.each( items, function( index, item ) {
+ that._renderItemData( ul, item );
+ } );
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ return $( "<li>" )
+ .append( $( "<div>" ).text( item.label ) )
+ .appendTo( ul );
+ },
+
+ _move: function( direction, event ) {
+ if ( !this.menu.element.is( ":visible" ) ) {
+ this.search( null, event );
+ return;
+ }
+ if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+ this.menu.isLastItem() && /^next/.test( direction ) ) {
+
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+
+ this.menu.blur();
+ return;
+ }
+ this.menu[ direction ]( event );
+ },
+
+ widget: function() {
+ return this.menu.element;
+ },
+
+ _value: function() {
+ return this.valueMethod.apply( this.element, arguments );
+ },
+
+ _keyEvent: function( keyEvent, event ) {
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ this._move( keyEvent, event );
+
+ // Prevents moving cursor to beginning/end of the text field in some browsers
+ event.preventDefault();
+ }
+ },
+
+ // Support: Chrome <=50
+ // We should be able to just use this.element.prop( "isContentEditable" )
+ // but hidden elements always report false in Chrome.
+ // https://code.google.com/p/chromium/issues/detail?id=313082
+ _isContentEditable: function( element ) {
+ if ( !element.length ) {
+ return false;
+ }
+
+ var editable = element.prop( "contentEditable" );
+
+ if ( editable === "inherit" ) {
+ return this._isContentEditable( element.parent() );
+ }
+
+ return editable === "true";
+ }
+} );
+
+$.extend( $.ui.autocomplete, {
+ escapeRegex: function( value ) {
+ return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+ },
+ filter: function( array, term ) {
+ var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+ return $.grep( array, function( value ) {
+ return matcher.test( value.label || value.value || value );
+ } );
+ }
+} );
+
+// Live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+ options: {
+ messages: {
+ noResults: "No search results.",
+ results: function( amount ) {
+ return amount + ( amount > 1 ? " results are" : " result is" ) +
+ " available, use up and down arrow keys to navigate.";
+ }
+ }
+ },
+
+ __response: function( content ) {
+ var message;
+ this._superApply( arguments );
+ if ( this.options.disabled || this.cancelSearch ) {
+ return;
+ }
+ if ( content && content.length ) {
+ message = this.options.messages.results( content.length );
+ } else {
+ message = this.options.messages.noResults;
+ }
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( message ).appendTo( this.liveRegion );
+ }
+} );
+
+var widgetsAutocomplete = $.ui.autocomplete;
+
+
+/*!
+ * jQuery UI Controlgroup 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Controlgroup
+//>>group: Widgets
+//>>description: Visually groups form control widgets
+//>>docs: http://api.jqueryui.com/controlgroup/
+//>>demos: http://jqueryui.com/controlgroup/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/controlgroup.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;
+
+var widgetsControlgroup = $.widget( "ui.controlgroup", {
+ version: "1.12.1",
+ defaultElement: "<div>",
+ options: {
+ direction: "horizontal",
+ disabled: null,
+ onlyVisible: true,
+ items: {
+ "button": "input[type=button], input[type=submit], input[type=reset], button, a",
+ "controlgroupLabel": ".ui-controlgroup-label",
+ "checkboxradio": "input[type='checkbox'], input[type='radio']",
+ "selectmenu": "select",
+ "spinner": ".ui-spinner-input"
+ }
+ },
+
+ _create: function() {
+ this._enhance();
+ },
+
+ // To support the enhanced option in jQuery Mobile, we isolate DOM manipulation
+ _enhance: function() {
+ this.element.attr( "role", "toolbar" );
+ this.refresh();
+ },
+
+ _destroy: function() {
+ this._callChildMethod( "destroy" );
+ this.childWidgets.removeData( "ui-controlgroup-data" );
+ this.element.removeAttr( "role" );
+ if ( this.options.items.controlgroupLabel ) {
+ this.element
+ .find( this.options.items.controlgroupLabel )
+ .find( ".ui-controlgroup-label-contents" )
+ .contents().unwrap();
+ }
+ },
+
+ _initWidgets: function() {
+ var that = this,
+ childWidgets = [];
+
+ // First we iterate over each of the items options
+ $.each( this.options.items, function( widget, selector ) {
+ var labels;
+ var options = {};
+
+ // Make sure the widget has a selector set
+ if ( !selector ) {
+ return;
+ }
+
+ if ( widget === "controlgroupLabel" ) {
+ labels = that.element.find( selector );
+ labels.each( function() {
+ var element = $( this );
+
+ if ( element.children( ".ui-controlgroup-label-contents" ).length ) {
+ return;
+ }
+ element.contents()
+ .wrapAll( "<span class='ui-controlgroup-label-contents'></span>" );
+ } );
+ that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" );
+ childWidgets = childWidgets.concat( labels.get() );
+ return;
+ }
+
+ // Make sure the widget actually exists
+ if ( !$.fn[ widget ] ) {
+ return;
+ }
+
+ // We assume everything is in the middle to start because we can't determine
+ // first / last elements until all enhancments are done.
+ if ( that[ "_" + widget + "Options" ] ) {
+ options = that[ "_" + widget + "Options" ]( "middle" );
+ } else {
+ options = { classes: {} };
+ }
+
+ // Find instances of this widget inside controlgroup and init them
+ that.element
+ .find( selector )
+ .each( function() {
+ var element = $( this );
+ var instance = element[ widget ]( "instance" );
+
+ // We need to clone the default options for this type of widget to avoid
+ // polluting the variable options which has a wider scope than a single widget.
+ var instanceOptions = $.widget.extend( {}, options );
+
+ // If the button is the child of a spinner ignore it
+ // TODO: Find a more generic solution
+ if ( widget === "button" && element.parent( ".ui-spinner" ).length ) {
+ return;
+ }
+
+ // Create the widget if it doesn't exist
+ if ( !instance ) {
+ instance = element[ widget ]()[ widget ]( "instance" );
+ }
+ if ( instance ) {
+ instanceOptions.classes =
+ that._resolveClassesValues( instanceOptions.classes, instance );
+ }
+ element[ widget ]( instanceOptions );
+
+ // Store an instance of the controlgroup to be able to reference
+ // from the outermost element for changing options and refresh
+ var widgetElement = element[ widget ]( "widget" );
+ $.data( widgetElement[ 0 ], "ui-controlgroup-data",
+ instance ? instance : element[ widget ]( "instance" ) );
+
+ childWidgets.push( widgetElement[ 0 ] );
+ } );
+ } );
+
+ this.childWidgets = $( $.unique( childWidgets ) );
+ this._addClass( this.childWidgets, "ui-controlgroup-item" );
+ },
+
+ _callChildMethod: function( method ) {
+ this.childWidgets.each( function() {
+ var element = $( this ),
+ data = element.data( "ui-controlgroup-data" );
+ if ( data && data[ method ] ) {
+ data[ method ]();
+ }
+ } );
+ },
+
+ _updateCornerClass: function( element, position ) {
+ var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all";
+ var add = this._buildSimpleOptions( position, "label" ).classes.label;
+
+ this._removeClass( element, null, remove );
+ this._addClass( element, null, add );
+ },
+
+ _buildSimpleOptions: function( position, key ) {
+ var direction = this.options.direction === "vertical";
+ var result = {
+ classes: {}
+ };
+ result.classes[ key ] = {
+ "middle": "",
+ "first": "ui-corner-" + ( direction ? "top" : "left" ),
+ "last": "ui-corner-" + ( direction ? "bottom" : "right" ),
+ "only": "ui-corner-all"
+ }[ position ];
+
+ return result;
+ },
+
+ _spinnerOptions: function( position ) {
+ var options = this._buildSimpleOptions( position, "ui-spinner" );
+
+ options.classes[ "ui-spinner-up" ] = "";
+ options.classes[ "ui-spinner-down" ] = "";
+
+ return options;
+ },
+
+ _buttonOptions: function( position ) {
+ return this._buildSimpleOptions( position, "ui-button" );
+ },
+
+ _checkboxradioOptions: function( position ) {
+ return this._buildSimpleOptions( position, "ui-checkboxradio-label" );
+ },
+
+ _selectmenuOptions: function( position ) {
+ var direction = this.options.direction === "vertical";
+ return {
+ width: direction ? "auto" : false,
+ classes: {
+ middle: {
+ "ui-selectmenu-button-open": "",
+ "ui-selectmenu-button-closed": ""
+ },
+ first: {
+ "ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ),
+ "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" )
+ },
+ last: {
+ "ui-selectmenu-button-open": direction ? "" : "ui-corner-tr",
+ "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" )
+ },
+ only: {
+ "ui-selectmenu-button-open": "ui-corner-top",
+ "ui-selectmenu-button-closed": "ui-corner-all"
+ }
+
+ }[ position ]
+ };
+ },
+
+ _resolveClassesValues: function( classes, instance ) {
+ var result = {};
+ $.each( classes, function( key ) {
+ var current = instance.options.classes[ key ] || "";
+ current = $.trim( current.replace( controlgroupCornerRegex, "" ) );
+ result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " );
+ } );
+ return result;
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "direction" ) {
+ this._removeClass( "ui-controlgroup-" + this.options.direction );
+ }
+
+ this._super( key, value );
+ if ( key === "disabled" ) {
+ this._callChildMethod( value ? "disable" : "enable" );
+ return;
+ }
+
+ this.refresh();
+ },
+
+ refresh: function() {
+ var children,
+ that = this;
+
+ this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction );
+
+ if ( this.options.direction === "horizontal" ) {
+ this._addClass( null, "ui-helper-clearfix" );
+ }
+ this._initWidgets();
+
+ children = this.childWidgets;
+
+ // We filter here because we need to track all childWidgets not just the visible ones
+ if ( this.options.onlyVisible ) {
+ children = children.filter( ":visible" );
+ }
+
+ if ( children.length ) {
+
+ // We do this last because we need to make sure all enhancment is done
+ // before determining first and last
+ $.each( [ "first", "last" ], function( index, value ) {
+ var instance = children[ value ]().data( "ui-controlgroup-data" );
+
+ if ( instance && that[ "_" + instance.widgetName + "Options" ] ) {
+ var options = that[ "_" + instance.widgetName + "Options" ](
+ children.length === 1 ? "only" : value
+ );
+ options.classes = that._resolveClassesValues( options.classes, instance );
+ instance.element[ instance.widgetName ]( options );
+ } else {
+ that._updateCornerClass( children[ value ](), value );
+ }
+ } );
+
+ // Finally call the refresh method on each of the child widgets.
+ this._callChildMethod( "refresh" );
+ }
+ }
+} );
+
+/*!
+ * jQuery UI Checkboxradio 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Checkboxradio
+//>>group: Widgets
+//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.
+//>>docs: http://api.jqueryui.com/checkboxradio/
+//>>demos: http://jqueryui.com/checkboxradio/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/button.css
+//>>css.structure: ../../themes/base/checkboxradio.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
+ version: "1.12.1",
+ options: {
+ disabled: null,
+ label: null,
+ icon: true,
+ classes: {
+ "ui-checkboxradio-label": "ui-corner-all",
+ "ui-checkboxradio-icon": "ui-corner-all"
+ }
+ },
+
+ _getCreateOptions: function() {
+ var disabled, labels;
+ var that = this;
+ var options = this._super() || {};
+
+ // We read the type here, because it makes more sense to throw a element type error first,
+ // rather then the error for lack of a label. Often if its the wrong type, it
+ // won't have a label (e.g. calling on a div, btn, etc)
+ this._readType();
+
+ labels = this.element.labels();
+
+ // If there are multiple labels, use the last one
+ this.label = $( labels[ labels.length - 1 ] );
+ if ( !this.label.length ) {
+ $.error( "No label found for checkboxradio widget" );
+ }
+
+ this.originalLabel = "";
+
+ // We need to get the label text but this may also need to make sure it does not contain the
+ // input itself.
+ this.label.contents().not( this.element[ 0 ] ).each( function() {
+
+ // The label contents could be text, html, or a mix. We concat each element to get a
+ // string representation of the label, without the input as part of it.
+ that.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;
+ } );
+
+ // Set the label option if we found label text
+ if ( this.originalLabel ) {
+ options.label = this.originalLabel;
+ }
+
+ disabled = this.element[ 0 ].disabled;
+ if ( disabled != null ) {
+ options.disabled = disabled;
+ }
+ return options;
+ },
+
+ _create: function() {
+ var checked = this.element[ 0 ].checked;
+
+ this._bindFormResetHandler();
+
+ if ( this.options.disabled == null ) {
+ this.options.disabled = this.element[ 0 ].disabled;
+ }
+
+ this._setOption( "disabled", this.options.disabled );
+ this._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" );
+ this._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" );
+
+ if ( this.type === "radio" ) {
+ this._addClass( this.label, "ui-checkboxradio-radio-label" );
+ }
+
+ if ( this.options.label && this.options.label !== this.originalLabel ) {
+ this._updateLabel();
+ } else if ( this.originalLabel ) {
+ this.options.label = this.originalLabel;
+ }
+
+ this._enhance();
+
+ if ( checked ) {
+ this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" );
+ if ( this.icon ) {
+ this._addClass( this.icon, null, "ui-state-hover" );
+ }
+ }
+
+ this._on( {
+ change: "_toggleClasses",
+ focus: function() {
+ this._addClass( this.label, null, "ui-state-focus ui-visual-focus" );
+ },
+ blur: function() {
+ this._removeClass( this.label, null, "ui-state-focus ui-visual-focus" );
+ }
+ } );
+ },
+
+ _readType: function() {
+ var nodeName = this.element[ 0 ].nodeName.toLowerCase();
+ this.type = this.element[ 0 ].type;
+ if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) {
+ $.error( "Can't create checkboxradio on element.nodeName=" + nodeName +
+ " and element.type=" + this.type );
+ }
+ },
+
+ // Support jQuery Mobile enhanced option
+ _enhance: function() {
+ this._updateIcon( this.element[ 0 ].checked );
+ },
+
+ widget: function() {
+ return this.label;
+ },
+
+ _getRadioGroup: function() {
+ var group;
+ var name = this.element[ 0 ].name;
+ var nameSelector = "input[name='" + $.ui.escapeSelector( name ) + "']";
+
+ if ( !name ) {
+ return $( [] );
+ }
+
+ if ( this.form.length ) {
+ group = $( this.form[ 0 ].elements ).filter( nameSelector );
+ } else {
+
+ // Not inside a form, check all inputs that also are not inside a form
+ group = $( nameSelector ).filter( function() {
+ return $( this ).form().length === 0;
+ } );
+ }
+
+ return group.not( this.element );
+ },
+
+ _toggleClasses: function() {
+ var checked = this.element[ 0 ].checked;
+ this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
+
+ if ( this.options.icon && this.type === "checkbox" ) {
+ this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked )
+ ._toggleClass( this.icon, null, "ui-icon-blank", !checked );
+ }
+
+ if ( this.type === "radio" ) {
+ this._getRadioGroup()
+ .each( function() {
+ var instance = $( this ).checkboxradio( "instance" );
+
+ if ( instance ) {
+ instance._removeClass( instance.label,
+ "ui-checkboxradio-checked", "ui-state-active" );
+ }
+ } );
+ }
+ },
+
+ _destroy: function() {
+ this._unbindFormResetHandler();
+
+ if ( this.icon ) {
+ this.icon.remove();
+ this.iconSpace.remove();
+ }
+ },
+
+ _setOption: function( key, value ) {
+
+ // We don't allow the value to be set to nothing
+ if ( key === "label" && !value ) {
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "disabled" ) {
+ this._toggleClass( this.label, null, "ui-state-disabled", value );
+ this.element[ 0 ].disabled = value;
+
+ // Don't refresh when setting disabled
+ return;
+ }
+ this.refresh();
+ },
+
+ _updateIcon: function( checked ) {
+ var toAdd = "ui-icon ui-icon-background ";
+
+ if ( this.options.icon ) {
+ if ( !this.icon ) {
+ this.icon = $( "<span>" );
+ this.iconSpace = $( "<span> </span>" );
+ this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" );
+ }
+
+ if ( this.type === "checkbox" ) {
+ toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank";
+ this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" );
+ } else {
+ toAdd += "ui-icon-blank";
+ }
+ this._addClass( this.icon, "ui-checkboxradio-icon", toAdd );
+ if ( !checked ) {
+ this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" );
+ }
+ this.icon.prependTo( this.label ).after( this.iconSpace );
+ } else if ( this.icon !== undefined ) {
+ this.icon.remove();
+ this.iconSpace.remove();
+ delete this.icon;
+ }
+ },
+
+ _updateLabel: function() {
+
+ // Remove the contents of the label ( minus the icon, icon space, and input )
+ var contents = this.label.contents().not( this.element[ 0 ] );
+ if ( this.icon ) {
+ contents = contents.not( this.icon[ 0 ] );
+ }
+ if ( this.iconSpace ) {
+ contents = contents.not( this.iconSpace[ 0 ] );
+ }
+ contents.remove();
+
+ this.label.append( this.options.label );
+ },
+
+ refresh: function() {
+ var checked = this.element[ 0 ].checked,
+ isDisabled = this.element[ 0 ].disabled;
+
+ this._updateIcon( checked );
+ this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
+ if ( this.options.label !== null ) {
+ this._updateLabel();
+ }
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOptions( { "disabled": isDisabled } );
+ }
+ }
+
+} ] );
+
+var widgetsCheckboxradio = $.ui.checkboxradio;
+
+
+/*!
+ * jQuery UI Button 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Button
+//>>group: Widgets
+//>>description: Enhances a form with themeable buttons.
+//>>docs: http://api.jqueryui.com/button/
+//>>demos: http://jqueryui.com/button/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/button.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.button", {
+ version: "1.12.1",
+ defaultElement: "<button>",
+ options: {
+ classes: {
+ "ui-button": "ui-corner-all"
+ },
+ disabled: null,
+ icon: null,
+ iconPosition: "beginning",
+ label: null,
+ showLabel: true
+ },
+
+ _getCreateOptions: function() {
+ var disabled,
+
+ // This is to support cases like in jQuery Mobile where the base widget does have
+ // an implementation of _getCreateOptions
+ options = this._super() || {};
+
+ this.isInput = this.element.is( "input" );
+
+ disabled = this.element[ 0 ].disabled;
+ if ( disabled != null ) {
+ options.disabled = disabled;
+ }
+
+ this.originalLabel = this.isInput ? this.element.val() : this.element.html();
+ if ( this.originalLabel ) {
+ options.label = this.originalLabel;
+ }
+
+ return options;
+ },
+
+ _create: function() {
+ if ( !this.option.showLabel & !this.options.icon ) {
+ this.options.showLabel = true;
+ }
+
+ // We have to check the option again here even though we did in _getCreateOptions,
+ // because null may have been passed on init which would override what was set in
+ // _getCreateOptions
+ if ( this.options.disabled == null ) {
+ this.options.disabled = this.element[ 0 ].disabled || false;
+ }
+
+ this.hasTitle = !!this.element.attr( "title" );
+
+ // Check to see if the label needs to be set or if its already correct
+ if ( this.options.label && this.options.label !== this.originalLabel ) {
+ if ( this.isInput ) {
+ this.element.val( this.options.label );
+ } else {
+ this.element.html( this.options.label );
+ }
+ }
+ this._addClass( "ui-button", "ui-widget" );
+ this._setOption( "disabled", this.options.disabled );
+ this._enhance();
+
+ if ( this.element.is( "a" ) ) {
+ this._on( {
+ "keyup": function( event ) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ event.preventDefault();
+
+ // Support: PhantomJS <= 1.9, IE 8 Only
+ // If a native click is available use it so we actually cause navigation
+ // otherwise just trigger a click event
+ if ( this.element[ 0 ].click ) {
+ this.element[ 0 ].click();
+ } else {
+ this.element.trigger( "click" );
+ }
+ }
+ }
+ } );
+ }
+ },
+
+ _enhance: function() {
+ if ( !this.element.is( "button" ) ) {
+ this.element.attr( "role", "button" );
+ }
+
+ if ( this.options.icon ) {
+ this._updateIcon( "icon", this.options.icon );
+ this._updateTooltip();
+ }
+ },
+
+ _updateTooltip: function() {
+ this.title = this.element.attr( "title" );
+
+ if ( !this.options.showLabel && !this.title ) {
+ this.element.attr( "title", this.options.label );
+ }
+ },
+
+ _updateIcon: function( option, value ) {
+ var icon = option !== "iconPosition",
+ position = icon ? this.options.iconPosition : value,
+ displayBlock = position === "top" || position === "bottom";
+
+ // Create icon
+ if ( !this.icon ) {
+ this.icon = $( "<span>" );
+
+ this._addClass( this.icon, "ui-button-icon", "ui-icon" );
+
+ if ( !this.options.showLabel ) {
+ this._addClass( "ui-button-icon-only" );
+ }
+ } else if ( icon ) {
+
+ // If we are updating the icon remove the old icon class
+ this._removeClass( this.icon, null, this.options.icon );
+ }
+
+ // If we are updating the icon add the new icon class
+ if ( icon ) {
+ this._addClass( this.icon, null, value );
+ }
+
+ this._attachIcon( position );
+
+ // If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove
+ // the iconSpace if there is one.
+ if ( displayBlock ) {
+ this._addClass( this.icon, null, "ui-widget-icon-block" );
+ if ( this.iconSpace ) {
+ this.iconSpace.remove();
+ }
+ } else {
+
+ // Position is beginning or end so remove the ui-widget-icon-block class and add the
+ // space if it does not exist
+ if ( !this.iconSpace ) {
+ this.iconSpace = $( "<span> </span>" );
+ this._addClass( this.iconSpace, "ui-button-icon-space" );
+ }
+ this._removeClass( this.icon, null, "ui-wiget-icon-block" );
+ this._attachIconSpace( position );
+ }
+ },
+
+ _destroy: function() {
+ this.element.removeAttr( "role" );
+
+ if ( this.icon ) {
+ this.icon.remove();
+ }
+ if ( this.iconSpace ) {
+ this.iconSpace.remove();
+ }
+ if ( !this.hasTitle ) {
+ this.element.removeAttr( "title" );
+ }
+ },
+
+ _attachIconSpace: function( iconPosition ) {
+ this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );
+ },
+
+ _attachIcon: function( iconPosition ) {
+ this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );
+ },
+
+ _setOptions: function( options ) {
+ var newShowLabel = options.showLabel === undefined ?
+ this.options.showLabel :
+ options.showLabel,
+ newIcon = options.icon === undefined ? this.options.icon : options.icon;
+
+ if ( !newShowLabel && !newIcon ) {
+ options.showLabel = true;
+ }
+ this._super( options );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icon" ) {
+ if ( value ) {
+ this._updateIcon( key, value );
+ } else if ( this.icon ) {
+ this.icon.remove();
+ if ( this.iconSpace ) {
+ this.iconSpace.remove();
+ }
+ }
+ }
+
+ if ( key === "iconPosition" ) {
+ this._updateIcon( key, value );
+ }
+
+ // Make sure we can't end up with a button that has neither text nor icon
+ if ( key === "showLabel" ) {
+ this._toggleClass( "ui-button-icon-only", null, !value );
+ this._updateTooltip();
+ }
+
+ if ( key === "label" ) {
+ if ( this.isInput ) {
+ this.element.val( value );
+ } else {
+
+ // If there is an icon, append it, else nothing then append the value
+ // this avoids removal of the icon when setting label text
+ this.element.html( value );
+ if ( this.icon ) {
+ this._attachIcon( this.options.iconPosition );
+ this._attachIconSpace( this.options.iconPosition );
+ }
+ }
+ }
+
+ this._super( key, value );
+
+ if ( key === "disabled" ) {
+ this._toggleClass( null, "ui-state-disabled", value );
+ this.element[ 0 ].disabled = value;
+ if ( value ) {
+ this.element.blur();
+ }
+ }
+ },
+
+ refresh: function() {
+
+ // Make sure to only check disabled if its an element that supports this otherwise
+ // check for the disabled class to determine state
+ var isDisabled = this.element.is( "input, button" ) ?
+ this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOptions( { disabled: isDisabled } );
+ }
+
+ this._updateTooltip();
+ }
+} );
+
+// DEPRECATED
+if ( $.uiBackCompat !== false ) {
+
+ // Text and Icons options
+ $.widget( "ui.button", $.ui.button, {
+ options: {
+ text: true,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+
+ _create: function() {
+ if ( this.options.showLabel && !this.options.text ) {
+ this.options.showLabel = this.options.text;
+ }
+ if ( !this.options.showLabel && this.options.text ) {
+ this.options.text = this.options.showLabel;
+ }
+ if ( !this.options.icon && ( this.options.icons.primary ||
+ this.options.icons.secondary ) ) {
+ if ( this.options.icons.primary ) {
+ this.options.icon = this.options.icons.primary;
+ } else {
+ this.options.icon = this.options.icons.secondary;
+ this.options.iconPosition = "end";
+ }
+ } else if ( this.options.icon ) {
+ this.options.icons.primary = this.options.icon;
+ }
+ this._super();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "text" ) {
+ this._super( "showLabel", value );
+ return;
+ }
+ if ( key === "showLabel" ) {
+ this.options.text = value;
+ }
+ if ( key === "icon" ) {
+ this.options.icons.primary = value;
+ }
+ if ( key === "icons" ) {
+ if ( value.primary ) {
+ this._super( "icon", value.primary );
+ this._super( "iconPosition", "beginning" );
+ } else if ( value.secondary ) {
+ this._super( "icon", value.secondary );
+ this._super( "iconPosition", "end" );
+ }
+ }
+ this._superApply( arguments );
+ }
+ } );
+
+ $.fn.button = ( function( orig ) {
+ return function() {
+ if ( !this.length || ( this.length && this[ 0 ].tagName !== "INPUT" ) ||
+ ( this.length && this[ 0 ].tagName === "INPUT" && (
+ this.attr( "type" ) !== "checkbox" && this.attr( "type" ) !== "radio"
+ ) ) ) {
+ return orig.apply( this, arguments );
+ }
+ if ( !$.ui.checkboxradio ) {
+ $.error( "Checkboxradio widget missing" );
+ }
+ if ( arguments.length === 0 ) {
+ return this.checkboxradio( {
+ "icon": false
+ } );
+ }
+ return this.checkboxradio.apply( this, arguments );
+ };
+ } )( $.fn.button );
+
+ $.fn.buttonset = function() {
+ if ( !$.ui.controlgroup ) {
+ $.error( "Controlgroup widget missing" );
+ }
+ if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {
+ return this.controlgroup.apply( this,
+ [ arguments[ 0 ], "items.button", arguments[ 2 ] ] );
+ }
+ if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {
+ return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );
+ }
+ if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {
+ arguments[ 0 ].items = {
+ button: arguments[ 0 ].items
+ };
+ }
+ return this.controlgroup.apply( this, arguments );
+ };
+}
+
+var widgetsButton = $.ui.button;
+
+
+// jscs:disable maximumLineLength
+/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
+/*!
+ * jQuery UI Datepicker 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Datepicker
+//>>group: Widgets
+//>>description: Displays a calendar from an input or inline for selecting dates.
+//>>docs: http://api.jqueryui.com/datepicker/
+//>>demos: http://jqueryui.com/datepicker/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/datepicker.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.extend( $.ui, { datepicker: { version: "1.12.1" } } );
+
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+ var position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+
+ return 0;
+}
+/* Date picker manager.
+ Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+ Settings for (groups of) date pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Datepicker() {
+ this._curInst = null; // The current instance in use
+ this._keyEvent = false; // If the last event was a key event
+ this._disabledInputs = []; // List of date picker inputs that have been disabled
+ this._datepickerShowing = false; // True if the popup picker is showing , false if not
+ this._inDialog = false; // True if showing within a "dialog", false if not
+ this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+ this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+ this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+ this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+ this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+ this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+ this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+ this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+ this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[ "" ] = { // Default regional settings
+ closeText: "Done", // Display text for close link
+ prevText: "Prev", // Display text for previous month link
+ nextText: "Next", // Display text for next month link
+ currentText: "Today", // Display text for current month link
+ monthNames: [ "January","February","March","April","May","June",
+ "July","August","September","October","November","December" ], // Names of months for drop-down and formatting
+ monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting
+ dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting
+ dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting
+ dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], // Column headings for days starting at Sunday
+ weekHeader: "Wk", // Column header for week of the year
+ dateFormat: "mm/dd/yy", // See format options on parseDate
+ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+ isRTL: false, // True if right-to-left language, false if left-to-right
+ showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+ yearSuffix: "" // Additional text to append to the year in the month headers
+ };
+ this._defaults = { // Global defaults for all the date picker instances
+ showOn: "focus", // "focus" for popup on focus,
+ // "button" for trigger button, or "both" for either
+ showAnim: "fadeIn", // Name of jQuery animation for popup
+ showOptions: {}, // Options for enhanced animations
+ defaultDate: null, // Used when field is blank: actual date,
+ // +/-number for offset from today, null for today
+ appendText: "", // Display text following the input box, e.g. showing the format
+ buttonText: "...", // Text for trigger button
+ buttonImage: "", // URL for trigger button image
+ buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+ hideIfNoPrevNext: false, // True to hide next/previous month links
+ // if not applicable, false to just disable them
+ navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+ gotoCurrent: false, // True if today link goes back to current selection instead
+ changeMonth: false, // True if month can be selected directly, false if only prev/next
+ changeYear: false, // True if year can be selected directly, false if only prev/next
+ yearRange: "c-10:c+10", // Range of years to display in drop-down,
+ // either relative to today's year (-nn:+nn), relative to currently displayed year
+ // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+ showOtherMonths: false, // True to show dates in other months, false to leave blank
+ selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+ showWeek: false, // True to show week of the year, false to not show it
+ calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+ // takes a Date and returns the number of the week for it
+ shortYearCutoff: "+10", // Short year values < this are in the current century,
+ // > this are in the previous century,
+ // string value starting with "+" for current year + value
+ minDate: null, // The earliest selectable date, or null for no limit
+ maxDate: null, // The latest selectable date, or null for no limit
+ duration: "fast", // Duration of display/closure
+ beforeShowDay: null, // Function that takes a date and returns an array with
+ // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+ // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+ beforeShow: null, // Function that takes an input field and
+ // returns a set of custom settings for the date picker
+ onSelect: null, // Define a callback function when a date is selected
+ onChangeMonthYear: null, // Define a callback function when the month or year is changed
+ onClose: null, // Define a callback function when the datepicker is closed
+ numberOfMonths: 1, // Number of months to show at a time
+ showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+ stepMonths: 1, // Number of months to step back/forward
+ stepBigMonths: 12, // Number of months to step back/forward for the big links
+ altField: "", // Selector for an alternate field to store selected dates into
+ altFormat: "", // The date format to use for the alternate field
+ constrainInput: true, // The input is constrained by the current date format
+ showButtonPanel: false, // True to show button panel, false to not show it
+ autoSize: false, // True to size the input for the date format, false to leave as is
+ disabled: false // The initial disabled state
+ };
+ $.extend( this._defaults, this.regional[ "" ] );
+ this.regional.en = $.extend( true, {}, this.regional[ "" ] );
+ this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+ this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) );
+}
+
+$.extend( Datepicker.prototype, {
+ /* Class name added to elements to indicate already configured with a date picker. */
+ markerClassName: "hasDatepicker",
+
+ //Keep track of the maximum number of rows displayed (see #7043)
+ maxRows: 4,
+
+ // TODO rename to "widget" when switching to widget factory
+ _widgetDatepicker: function() {
+ return this.dpDiv;
+ },
+
+ /* Override the default settings for all instances of the date picker.
+ * @param settings object - the new settings to use as defaults (anonymous object)
+ * @return the manager object
+ */
+ setDefaults: function( settings ) {
+ datepicker_extendRemove( this._defaults, settings || {} );
+ return this;
+ },
+
+ /* Attach the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param settings object - the new settings to use for this date picker instance (anonymous)
+ */
+ _attachDatepicker: function( target, settings ) {
+ var nodeName, inline, inst;
+ nodeName = target.nodeName.toLowerCase();
+ inline = ( nodeName === "div" || nodeName === "span" );
+ if ( !target.id ) {
+ this.uuid += 1;
+ target.id = "dp" + this.uuid;
+ }
+ inst = this._newInst( $( target ), inline );
+ inst.settings = $.extend( {}, settings || {} );
+ if ( nodeName === "input" ) {
+ this._connectDatepicker( target, inst );
+ } else if ( inline ) {
+ this._inlineDatepicker( target, inst );
+ }
+ },
+
+ /* Create a new instance object. */
+ _newInst: function( target, inline ) {
+ var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars
+ return { id: id, input: target, // associated target
+ selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+ drawMonth: 0, drawYear: 0, // month being drawn
+ inline: inline, // is datepicker inline or not
+ dpDiv: ( !inline ? this.dpDiv : // presentation div
+ datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) };
+ },
+
+ /* Attach the date picker to an input field. */
+ _connectDatepicker: function( target, inst ) {
+ var input = $( target );
+ inst.append = $( [] );
+ inst.trigger = $( [] );
+ if ( input.hasClass( this.markerClassName ) ) {
+ return;
+ }
+ this._attachments( input, inst );
+ input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ).
+ on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp );
+ this._autoSize( inst );
+ $.data( target, "datepicker", inst );
+
+ //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+ if ( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ },
+
+ /* Make attachments based on settings. */
+ _attachments: function( input, inst ) {
+ var showOn, buttonText, buttonImage,
+ appendText = this._get( inst, "appendText" ),
+ isRTL = this._get( inst, "isRTL" );
+
+ if ( inst.append ) {
+ inst.append.remove();
+ }
+ if ( appendText ) {
+ inst.append = $( "<span class='" + this._appendClass + "'>" + appendText + "</span>" );
+ input[ isRTL ? "before" : "after" ]( inst.append );
+ }
+
+ input.off( "focus", this._showDatepicker );
+
+ if ( inst.trigger ) {
+ inst.trigger.remove();
+ }
+
+ showOn = this._get( inst, "showOn" );
+ if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field
+ input.on( "focus", this._showDatepicker );
+ }
+ if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked
+ buttonText = this._get( inst, "buttonText" );
+ buttonImage = this._get( inst, "buttonImage" );
+ inst.trigger = $( this._get( inst, "buttonImageOnly" ) ?
+ $( "<img/>" ).addClass( this._triggerClass ).
+ attr( { src: buttonImage, alt: buttonText, title: buttonText } ) :
+ $( "<button type='button'></button>" ).addClass( this._triggerClass ).
+ html( !buttonImage ? buttonText : $( "<img/>" ).attr(
+ { src:buttonImage, alt:buttonText, title:buttonText } ) ) );
+ input[ isRTL ? "before" : "after" ]( inst.trigger );
+ inst.trigger.on( "click", function() {
+ if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {
+ $.datepicker._hideDatepicker();
+ } else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {
+ $.datepicker._hideDatepicker();
+ $.datepicker._showDatepicker( input[ 0 ] );
+ } else {
+ $.datepicker._showDatepicker( input[ 0 ] );
+ }
+ return false;
+ } );
+ }
+ },
+
+ /* Apply the maximum length for the date format. */
+ _autoSize: function( inst ) {
+ if ( this._get( inst, "autoSize" ) && !inst.inline ) {
+ var findMax, max, maxI, i,
+ date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits
+ dateFormat = this._get( inst, "dateFormat" );
+
+ if ( dateFormat.match( /[DM]/ ) ) {
+ findMax = function( names ) {
+ max = 0;
+ maxI = 0;
+ for ( i = 0; i < names.length; i++ ) {
+ if ( names[ i ].length > max ) {
+ max = names[ i ].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?
+ "monthNames" : "monthNamesShort" ) ) ) );
+ date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?
+ "dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() );
+ }
+ inst.input.attr( "size", this._formatDate( inst, date ).length );
+ }
+ },
+
+ /* Attach an inline date picker to a div. */
+ _inlineDatepicker: function( target, inst ) {
+ var divSpan = $( target );
+ if ( divSpan.hasClass( this.markerClassName ) ) {
+ return;
+ }
+ divSpan.addClass( this.markerClassName ).append( inst.dpDiv );
+ $.data( target, "datepicker", inst );
+ this._setDate( inst, this._getDefaultDate( inst ), true );
+ this._updateDatepicker( inst );
+ this._updateAlternate( inst );
+
+ //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+ if ( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+
+ // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+ // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+ inst.dpDiv.css( "display", "block" );
+ },
+
+ /* Pop-up the date picker in a "dialog" box.
+ * @param input element - ignored
+ * @param date string or Date - the initial date to display
+ * @param onSelect function - the function to call when a date is selected
+ * @param settings object - update the dialog date picker instance's settings (anonymous object)
+ * @param pos int[2] - coordinates for the dialog's position within the screen or
+ * event - with x/y coordinates or
+ * leave empty for default (screen centre)
+ * @return the manager object
+ */
+ _dialogDatepicker: function( input, date, onSelect, settings, pos ) {
+ var id, browserWidth, browserHeight, scrollX, scrollY,
+ inst = this._dialogInst; // internal instance
+
+ if ( !inst ) {
+ this.uuid += 1;
+ id = "dp" + this.uuid;
+ this._dialogInput = $( "<input type='text' id='" + id +
+ "' style='position: absolute; top: -100px; width: 0px;'/>" );
+ this._dialogInput.on( "keydown", this._doKeyDown );
+ $( "body" ).append( this._dialogInput );
+ inst = this._dialogInst = this._newInst( this._dialogInput, false );
+ inst.settings = {};
+ $.data( this._dialogInput[ 0 ], "datepicker", inst );
+ }
+ datepicker_extendRemove( inst.settings, settings || {} );
+ date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );
+ this._dialogInput.val( date );
+
+ this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );
+ if ( !this._pos ) {
+ browserWidth = document.documentElement.clientWidth;
+ browserHeight = document.documentElement.clientHeight;
+ scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ this._pos = // should use actual width/height below
+ [ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];
+ }
+
+ // Move input on screen for focus, but hidden behind dialog
+ this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" );
+ inst.settings.onSelect = onSelect;
+ this._inDialog = true;
+ this.dpDiv.addClass( this._dialogClass );
+ this._showDatepicker( this._dialogInput[ 0 ] );
+ if ( $.blockUI ) {
+ $.blockUI( this.dpDiv );
+ }
+ $.data( this._dialogInput[ 0 ], "datepicker", inst );
+ return this;
+ },
+
+ /* Detach a datepicker from its control.
+ * @param target element - the target input field or division or span
+ */
+ _destroyDatepicker: function( target ) {
+ var nodeName,
+ $target = $( target ),
+ inst = $.data( target, "datepicker" );
+
+ if ( !$target.hasClass( this.markerClassName ) ) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ $.removeData( target, "datepicker" );
+ if ( nodeName === "input" ) {
+ inst.append.remove();
+ inst.trigger.remove();
+ $target.removeClass( this.markerClassName ).
+ off( "focus", this._showDatepicker ).
+ off( "keydown", this._doKeyDown ).
+ off( "keypress", this._doKeyPress ).
+ off( "keyup", this._doKeyUp );
+ } else if ( nodeName === "div" || nodeName === "span" ) {
+ $target.removeClass( this.markerClassName ).empty();
+ }
+
+ if ( datepicker_instActive === inst ) {
+ datepicker_instActive = null;
+ }
+ },
+
+ /* Enable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _enableDatepicker: function( target ) {
+ var nodeName, inline,
+ $target = $( target ),
+ inst = $.data( target, "datepicker" );
+
+ if ( !$target.hasClass( this.markerClassName ) ) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if ( nodeName === "input" ) {
+ target.disabled = false;
+ inst.trigger.filter( "button" ).
+ each( function() { this.disabled = false; } ).end().
+ filter( "img" ).css( { opacity: "1.0", cursor: "" } );
+ } else if ( nodeName === "div" || nodeName === "span" ) {
+ inline = $target.children( "." + this._inlineClass );
+ inline.children().removeClass( "ui-state-disabled" );
+ inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
+ prop( "disabled", false );
+ }
+ this._disabledInputs = $.map( this._disabledInputs,
+ function( value ) { return ( value === target ? null : value ); } ); // delete entry
+ },
+
+ /* Disable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _disableDatepicker: function( target ) {
+ var nodeName, inline,
+ $target = $( target ),
+ inst = $.data( target, "datepicker" );
+
+ if ( !$target.hasClass( this.markerClassName ) ) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if ( nodeName === "input" ) {
+ target.disabled = true;
+ inst.trigger.filter( "button" ).
+ each( function() { this.disabled = true; } ).end().
+ filter( "img" ).css( { opacity: "0.5", cursor: "default" } );
+ } else if ( nodeName === "div" || nodeName === "span" ) {
+ inline = $target.children( "." + this._inlineClass );
+ inline.children().addClass( "ui-state-disabled" );
+ inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).
+ prop( "disabled", true );
+ }
+ this._disabledInputs = $.map( this._disabledInputs,
+ function( value ) { return ( value === target ? null : value ); } ); // delete entry
+ this._disabledInputs[ this._disabledInputs.length ] = target;
+ },
+
+ /* Is the first field in a jQuery collection disabled as a datepicker?
+ * @param target element - the target input field or division or span
+ * @return boolean - true if disabled, false if enabled
+ */
+ _isDisabledDatepicker: function( target ) {
+ if ( !target ) {
+ return false;
+ }
+ for ( var i = 0; i < this._disabledInputs.length; i++ ) {
+ if ( this._disabledInputs[ i ] === target ) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ /* Retrieve the instance data for the target control.
+ * @param target element - the target input field or division or span
+ * @return object - the associated instance data
+ * @throws error if a jQuery problem getting data
+ */
+ _getInst: function( target ) {
+ try {
+ return $.data( target, "datepicker" );
+ }
+ catch ( err ) {
+ throw "Missing instance data for this datepicker";
+ }
+ },
+
+ /* Update or retrieve the settings for a date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ * @param name object - the new settings to update or
+ * string - the name of the setting to change or retrieve,
+ * when retrieving also "all" for all instance settings or
+ * "defaults" for all global defaults
+ * @param value any - the new value for the setting
+ * (omit if above is an object or to retrieve a value)
+ */
+ _optionDatepicker: function( target, name, value ) {
+ var settings, date, minDate, maxDate,
+ inst = this._getInst( target );
+
+ if ( arguments.length === 2 && typeof name === "string" ) {
+ return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) :
+ ( inst ? ( name === "all" ? $.extend( {}, inst.settings ) :
+ this._get( inst, name ) ) : null ) );
+ }
+
+ settings = name || {};
+ if ( typeof name === "string" ) {
+ settings = {};
+ settings[ name ] = value;
+ }
+
+ if ( inst ) {
+ if ( this._curInst === inst ) {
+ this._hideDatepicker();
+ }
+
+ date = this._getDateDatepicker( target, true );
+ minDate = this._getMinMaxDate( inst, "min" );
+ maxDate = this._getMinMaxDate( inst, "max" );
+ datepicker_extendRemove( inst.settings, settings );
+
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+ if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {
+ inst.settings.minDate = this._formatDate( inst, minDate );
+ }
+ if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {
+ inst.settings.maxDate = this._formatDate( inst, maxDate );
+ }
+ if ( "disabled" in settings ) {
+ if ( settings.disabled ) {
+ this._disableDatepicker( target );
+ } else {
+ this._enableDatepicker( target );
+ }
+ }
+ this._attachments( $( target ), inst );
+ this._autoSize( inst );
+ this._setDate( inst, date );
+ this._updateAlternate( inst );
+ this._updateDatepicker( inst );
+ }
+ },
+
+ // Change method deprecated
+ _changeDatepicker: function( target, name, value ) {
+ this._optionDatepicker( target, name, value );
+ },
+
+ /* Redraw the date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ */
+ _refreshDatepicker: function( target ) {
+ var inst = this._getInst( target );
+ if ( inst ) {
+ this._updateDatepicker( inst );
+ }
+ },
+
+ /* Set the dates for a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param date Date - the new date
+ */
+ _setDateDatepicker: function( target, date ) {
+ var inst = this._getInst( target );
+ if ( inst ) {
+ this._setDate( inst, date );
+ this._updateDatepicker( inst );
+ this._updateAlternate( inst );
+ }
+ },
+
+ /* Get the date(s) for the first entry in a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param noDefault boolean - true if no default date is to be used
+ * @return Date - the current date
+ */
+ _getDateDatepicker: function( target, noDefault ) {
+ var inst = this._getInst( target );
+ if ( inst && !inst.inline ) {
+ this._setDateFromField( inst, noDefault );
+ }
+ return ( inst ? this._getDate( inst ) : null );
+ },
+
+ /* Handle keystrokes. */
+ _doKeyDown: function( event ) {
+ var onSelect, dateStr, sel,
+ inst = $.datepicker._getInst( event.target ),
+ handled = true,
+ isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" );
+
+ inst._keyEvent = true;
+ if ( $.datepicker._datepickerShowing ) {
+ switch ( event.keyCode ) {
+ case 9: $.datepicker._hideDatepicker();
+ handled = false;
+ break; // hide on tab out
+ case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." +
+ $.datepicker._currentClass + ")", inst.dpDiv );
+ if ( sel[ 0 ] ) {
+ $.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );
+ }
+
+ onSelect = $.datepicker._get( inst, "onSelect" );
+ if ( onSelect ) {
+ dateStr = $.datepicker._formatDate( inst );
+
+ // Trigger custom callback
+ onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );
+ } else {
+ $.datepicker._hideDatepicker();
+ }
+
+ return false; // don't submit the form
+ case 27: $.datepicker._hideDatepicker();
+ break; // hide on escape
+ case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+ -$.datepicker._get( inst, "stepBigMonths" ) :
+ -$.datepicker._get( inst, "stepMonths" ) ), "M" );
+ break; // previous month/year on page up/+ ctrl
+ case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+ +$.datepicker._get( inst, "stepBigMonths" ) :
+ +$.datepicker._get( inst, "stepMonths" ) ), "M" );
+ break; // next month/year on page down/+ ctrl
+ case 35: if ( event.ctrlKey || event.metaKey ) {
+ $.datepicker._clearDate( event.target );
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // clear on ctrl or command +end
+ case 36: if ( event.ctrlKey || event.metaKey ) {
+ $.datepicker._gotoToday( event.target );
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // current on ctrl or command +home
+ case 37: if ( event.ctrlKey || event.metaKey ) {
+ $.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" );
+ }
+ handled = event.ctrlKey || event.metaKey;
+
+ // -1 day on ctrl or command +left
+ if ( event.originalEvent.altKey ) {
+ $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+ -$.datepicker._get( inst, "stepBigMonths" ) :
+ -$.datepicker._get( inst, "stepMonths" ) ), "M" );
+ }
+
+ // next month/year on alt +left on Mac
+ break;
+ case 38: if ( event.ctrlKey || event.metaKey ) {
+ $.datepicker._adjustDate( event.target, -7, "D" );
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // -1 week on ctrl or command +up
+ case 39: if ( event.ctrlKey || event.metaKey ) {
+ $.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" );
+ }
+ handled = event.ctrlKey || event.metaKey;
+
+ // +1 day on ctrl or command +right
+ if ( event.originalEvent.altKey ) {
+ $.datepicker._adjustDate( event.target, ( event.ctrlKey ?
+ +$.datepicker._get( inst, "stepBigMonths" ) :
+ +$.datepicker._get( inst, "stepMonths" ) ), "M" );
+ }
+
+ // next month/year on alt +right
+ break;
+ case 40: if ( event.ctrlKey || event.metaKey ) {
+ $.datepicker._adjustDate( event.target, +7, "D" );
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // +1 week on ctrl or command +down
+ default: handled = false;
+ }
+ } else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home
+ $.datepicker._showDatepicker( this );
+ } else {
+ handled = false;
+ }
+
+ if ( handled ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ },
+
+ /* Filter entered characters - based on date format. */
+ _doKeyPress: function( event ) {
+ var chars, chr,
+ inst = $.datepicker._getInst( event.target );
+
+ if ( $.datepicker._get( inst, "constrainInput" ) ) {
+ chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) );
+ chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );
+ return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 );
+ }
+ },
+
+ /* Synchronise manual entry and field/alternate field. */
+ _doKeyUp: function( event ) {
+ var date,
+ inst = $.datepicker._getInst( event.target );
+
+ if ( inst.input.val() !== inst.lastVal ) {
+ try {
+ date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
+ ( inst.input ? inst.input.val() : null ),
+ $.datepicker._getFormatConfig( inst ) );
+
+ if ( date ) { // only if valid
+ $.datepicker._setDateFromField( inst );
+ $.datepicker._updateAlternate( inst );
+ $.datepicker._updateDatepicker( inst );
+ }
+ }
+ catch ( err ) {
+ }
+ }
+ return true;
+ },
+
+ /* Pop-up the date picker for a given input field.
+ * If false returned from beforeShow event handler do not show.
+ * @param input element - the input field attached to the date picker or
+ * event - if triggered by focus
+ */
+ _showDatepicker: function( input ) {
+ input = input.target || input;
+ if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger
+ input = $( "input", input.parentNode )[ 0 ];
+ }
+
+ if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here
+ return;
+ }
+
+ var inst, beforeShow, beforeShowSettings, isFixed,
+ offset, showAnim, duration;
+
+ inst = $.datepicker._getInst( input );
+ if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {
+ $.datepicker._curInst.dpDiv.stop( true, true );
+ if ( inst && $.datepicker._datepickerShowing ) {
+ $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );
+ }
+ }
+
+ beforeShow = $.datepicker._get( inst, "beforeShow" );
+ beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};
+ if ( beforeShowSettings === false ) {
+ return;
+ }
+ datepicker_extendRemove( inst.settings, beforeShowSettings );
+
+ inst.lastVal = null;
+ $.datepicker._lastInput = input;
+ $.datepicker._setDateFromField( inst );
+
+ if ( $.datepicker._inDialog ) { // hide cursor
+ input.value = "";
+ }
+ if ( !$.datepicker._pos ) { // position below input
+ $.datepicker._pos = $.datepicker._findPos( input );
+ $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height
+ }
+
+ isFixed = false;
+ $( input ).parents().each( function() {
+ isFixed |= $( this ).css( "position" ) === "fixed";
+ return !isFixed;
+ } );
+
+ offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };
+ $.datepicker._pos = null;
+
+ //to avoid flashes on Firefox
+ inst.dpDiv.empty();
+
+ // determine sizing offscreen
+ inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } );
+ $.datepicker._updateDatepicker( inst );
+
+ // fix width for dynamic number of date pickers
+ // and adjust position before showing
+ offset = $.datepicker._checkOffset( inst, offset, isFixed );
+ inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?
+ "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none",
+ left: offset.left + "px", top: offset.top + "px" } );
+
+ if ( !inst.inline ) {
+ showAnim = $.datepicker._get( inst, "showAnim" );
+ duration = $.datepicker._get( inst, "duration" );
+ inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
+ $.datepicker._datepickerShowing = true;
+
+ if ( $.effects && $.effects.effect[ showAnim ] ) {
+ inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration );
+ } else {
+ inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null );
+ }
+
+ if ( $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.trigger( "focus" );
+ }
+
+ $.datepicker._curInst = inst;
+ }
+ },
+
+ /* Generate the date picker content. */
+ _updateDatepicker: function( inst ) {
+ this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+ datepicker_instActive = inst; // for delegate hover events
+ inst.dpDiv.empty().append( this._generateHTML( inst ) );
+ this._attachHandlers( inst );
+
+ var origyearshtml,
+ numMonths = this._getNumberOfMonths( inst ),
+ cols = numMonths[ 1 ],
+ width = 17,
+ activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+ if ( activeCell.length > 0 ) {
+ datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+ }
+
+ inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" );
+ if ( cols > 1 ) {
+ inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" );
+ }
+ inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) +
+ "Class" ]( "ui-datepicker-multi" );
+ inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) +
+ "Class" ]( "ui-datepicker-rtl" );
+
+ if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.trigger( "focus" );
+ }
+
+ // Deffered render of the years select (to avoid flashes on Firefox)
+ if ( inst.yearshtml ) {
+ origyearshtml = inst.yearshtml;
+ setTimeout( function() {
+
+ //assure that inst.yearshtml didn't change.
+ if ( origyearshtml === inst.yearshtml && inst.yearshtml ) {
+ inst.dpDiv.find( "select.ui-datepicker-year:first" ).replaceWith( inst.yearshtml );
+ }
+ origyearshtml = inst.yearshtml = null;
+ }, 0 );
+ }
+ },
+
+ // #6694 - don't focus the input if it's already focused
+ // this breaks the change event in IE
+ // Support: IE and jQuery <1.9
+ _shouldFocusInput: function( inst ) {
+ return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+ },
+
+ /* Check positioning to remain on screen. */
+ _checkOffset: function( inst, offset, isFixed ) {
+ var dpWidth = inst.dpDiv.outerWidth(),
+ dpHeight = inst.dpDiv.outerHeight(),
+ inputWidth = inst.input ? inst.input.outerWidth() : 0,
+ inputHeight = inst.input ? inst.input.outerHeight() : 0,
+ viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),
+ viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );
+
+ offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 );
+ offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;
+ offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;
+
+ // Now check if datepicker is showing outside window viewport - move to a better place if so.
+ offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?
+ Math.abs( offset.left + dpWidth - viewWidth ) : 0 );
+ offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?
+ Math.abs( dpHeight + inputHeight ) : 0 );
+
+ return offset;
+ },
+
+ /* Find an object's position on the screen. */
+ _findPos: function( obj ) {
+ var position,
+ inst = this._getInst( obj ),
+ isRTL = this._get( inst, "isRTL" );
+
+ while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {
+ obj = obj[ isRTL ? "previousSibling" : "nextSibling" ];
+ }
+
+ position = $( obj ).offset();
+ return [ position.left, position.top ];
+ },
+
+ /* Hide the date picker from view.
+ * @param input element - the input field attached to the date picker
+ */
+ _hideDatepicker: function( input ) {
+ var showAnim, duration, postProcess, onClose,
+ inst = this._curInst;
+
+ if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) {
+ return;
+ }
+
+ if ( this._datepickerShowing ) {
+ showAnim = this._get( inst, "showAnim" );
+ duration = this._get( inst, "duration" );
+ postProcess = function() {
+ $.datepicker._tidyDialog( inst );
+ };
+
+ // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+ if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+ inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess );
+ } else {
+ inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" :
+ ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess );
+ }
+
+ if ( !showAnim ) {
+ postProcess();
+ }
+ this._datepickerShowing = false;
+
+ onClose = this._get( inst, "onClose" );
+ if ( onClose ) {
+ onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] );
+ }
+
+ this._lastInput = null;
+ if ( this._inDialog ) {
+ this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } );
+ if ( $.blockUI ) {
+ $.unblockUI();
+ $( "body" ).append( this.dpDiv );
+ }
+ }
+ this._inDialog = false;
+ }
+ },
+
+ /* Tidy up after a dialog display. */
+ _tidyDialog: function( inst ) {
+ inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" );
+ },
+
+ /* Close date picker if clicked elsewhere. */
+ _checkExternalClick: function( event ) {
+ if ( !$.datepicker._curInst ) {
+ return;
+ }
+
+ var $target = $( event.target ),
+ inst = $.datepicker._getInst( $target[ 0 ] );
+
+ if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&
+ $target.parents( "#" + $.datepicker._mainDivId ).length === 0 &&
+ !$target.hasClass( $.datepicker.markerClassName ) &&
+ !$target.closest( "." + $.datepicker._triggerClass ).length &&
+ $.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||
+ ( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {
+ $.datepicker._hideDatepicker();
+ }
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustDate: function( id, offset, period ) {
+ var target = $( id ),
+ inst = this._getInst( target[ 0 ] );
+
+ if ( this._isDisabledDatepicker( target[ 0 ] ) ) {
+ return;
+ }
+ this._adjustInstDate( inst, offset +
+ ( period === "M" ? this._get( inst, "showCurrentAtPos" ) : 0 ), // undo positioning
+ period );
+ this._updateDatepicker( inst );
+ },
+
+ /* Action for current link. */
+ _gotoToday: function( id ) {
+ var date,
+ target = $( id ),
+ inst = this._getInst( target[ 0 ] );
+
+ if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) {
+ inst.selectedDay = inst.currentDay;
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+ inst.drawYear = inst.selectedYear = inst.currentYear;
+ } else {
+ date = new Date();
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ }
+ this._notifyChange( inst );
+ this._adjustDate( target );
+ },
+
+ /* Action for selecting a new month/year. */
+ _selectMonthYear: function( id, select, period ) {
+ var target = $( id ),
+ inst = this._getInst( target[ 0 ] );
+
+ inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] =
+ inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] =
+ parseInt( select.options[ select.selectedIndex ].value, 10 );
+
+ this._notifyChange( inst );
+ this._adjustDate( target );
+ },
+
+ /* Action for selecting a day. */
+ _selectDay: function( id, month, year, td ) {
+ var inst,
+ target = $( id );
+
+ if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {
+ return;
+ }
+
+ inst = this._getInst( target[ 0 ] );
+ inst.selectedDay = inst.currentDay = $( "a", td ).html();
+ inst.selectedMonth = inst.currentMonth = month;
+ inst.selectedYear = inst.currentYear = year;
+ this._selectDate( id, this._formatDate( inst,
+ inst.currentDay, inst.currentMonth, inst.currentYear ) );
+ },
+
+ /* Erase the input field and hide the date picker. */
+ _clearDate: function( id ) {
+ var target = $( id );
+ this._selectDate( target, "" );
+ },
+
+ /* Update the input field with the selected date. */
+ _selectDate: function( id, dateStr ) {
+ var onSelect,
+ target = $( id ),
+ inst = this._getInst( target[ 0 ] );
+
+ dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );
+ if ( inst.input ) {
+ inst.input.val( dateStr );
+ }
+ this._updateAlternate( inst );
+
+ onSelect = this._get( inst, "onSelect" );
+ if ( onSelect ) {
+ onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback
+ } else if ( inst.input ) {
+ inst.input.trigger( "change" ); // fire the change event
+ }
+
+ if ( inst.inline ) {
+ this._updateDatepicker( inst );
+ } else {
+ this._hideDatepicker();
+ this._lastInput = inst.input[ 0 ];
+ if ( typeof( inst.input[ 0 ] ) !== "object" ) {
+ inst.input.trigger( "focus" ); // restore focus
+ }
+ this._lastInput = null;
+ }
+ },
+
+ /* Update any alternate field to synchronise with the main field. */
+ _updateAlternate: function( inst ) {
+ var altFormat, date, dateStr,
+ altField = this._get( inst, "altField" );
+
+ if ( altField ) { // update alternate field too
+ altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" );
+ date = this._getDate( inst );
+ dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );
+ $( altField ).val( dateStr );
+ }
+ },
+
+ /* Set as beforeShowDay function to prevent selection of weekends.
+ * @param date Date - the date to customise
+ * @return [boolean, string] - is this date selectable?, what is its CSS class?
+ */
+ noWeekends: function( date ) {
+ var day = date.getDay();
+ return [ ( day > 0 && day < 6 ), "" ];
+ },
+
+ /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+ * @param date Date - the date to get the week for
+ * @return number - the number of the week within the year that contains this date
+ */
+ iso8601Week: function( date ) {
+ var time,
+ checkDate = new Date( date.getTime() );
+
+ // Find Thursday of this week starting on Monday
+ checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );
+
+ time = checkDate.getTime();
+ checkDate.setMonth( 0 ); // Compare with Jan 1
+ checkDate.setDate( 1 );
+ return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;
+ },
+
+ /* Parse a string value into a date object.
+ * See formatDate below for the possible formats.
+ *
+ * @param format string - the expected format of the date
+ * @param value string - the date in the above format
+ * @param settings Object - attributes include:
+ * shortYearCutoff number - the cutoff year for determining the century (optional)
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return Date - the extracted date value or null if value is blank
+ */
+ parseDate: function( format, value, settings ) {
+ if ( format == null || value == null ) {
+ throw "Invalid arguments";
+ }
+
+ value = ( typeof value === "object" ? value.toString() : value + "" );
+ if ( value === "" ) {
+ return null;
+ }
+
+ var iFormat, dim, extra,
+ iValue = 0,
+ shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,
+ shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+ new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),
+ dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
+ dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
+ monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
+ monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
+ year = -1,
+ month = -1,
+ day = -1,
+ doy = -1,
+ literal = false,
+ date,
+
+ // Check whether a format character is doubled
+ lookAhead = function( match ) {
+ var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
+ if ( matches ) {
+ iFormat++;
+ }
+ return matches;
+ },
+
+ // Extract a number from the string value
+ getNumber = function( match ) {
+ var isDoubled = lookAhead( match ),
+ size = ( match === "@" ? 14 : ( match === "!" ? 20 :
+ ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ),
+ minSize = ( match === "y" ? size : 1 ),
+ digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ),
+ num = value.substring( iValue ).match( digits );
+ if ( !num ) {
+ throw "Missing number at position " + iValue;
+ }
+ iValue += num[ 0 ].length;
+ return parseInt( num[ 0 ], 10 );
+ },
+
+ // Extract a name from the string value and convert to an index
+ getName = function( match, shortNames, longNames ) {
+ var index = -1,
+ names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {
+ return [ [ k, v ] ];
+ } ).sort( function( a, b ) {
+ return -( a[ 1 ].length - b[ 1 ].length );
+ } );
+
+ $.each( names, function( i, pair ) {
+ var name = pair[ 1 ];
+ if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {
+ index = pair[ 0 ];
+ iValue += name.length;
+ return false;
+ }
+ } );
+ if ( index !== -1 ) {
+ return index + 1;
+ } else {
+ throw "Unknown name at position " + iValue;
+ }
+ },
+
+ // Confirm that a literal character matches the string value
+ checkLiteral = function() {
+ if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {
+ throw "Unexpected literal at position " + iValue;
+ }
+ iValue++;
+ };
+
+ for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
+ if ( literal ) {
+ if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
+ literal = false;
+ } else {
+ checkLiteral();
+ }
+ } else {
+ switch ( format.charAt( iFormat ) ) {
+ case "d":
+ day = getNumber( "d" );
+ break;
+ case "D":
+ getName( "D", dayNamesShort, dayNames );
+ break;
+ case "o":
+ doy = getNumber( "o" );
+ break;
+ case "m":
+ month = getNumber( "m" );
+ break;
+ case "M":
+ month = getName( "M", monthNamesShort, monthNames );
+ break;
+ case "y":
+ year = getNumber( "y" );
+ break;
+ case "@":
+ date = new Date( getNumber( "@" ) );
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "!":
+ date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 );
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "'":
+ if ( lookAhead( "'" ) ) {
+ checkLiteral();
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ checkLiteral();
+ }
+ }
+ }
+
+ if ( iValue < value.length ) {
+ extra = value.substr( iValue );
+ if ( !/^\s+/.test( extra ) ) {
+ throw "Extra/unparsed characters found in date: " + extra;
+ }
+ }
+
+ if ( year === -1 ) {
+ year = new Date().getFullYear();
+ } else if ( year < 100 ) {
+ year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+ ( year <= shortYearCutoff ? 0 : -100 );
+ }
+
+ if ( doy > -1 ) {
+ month = 1;
+ day = doy;
+ do {
+ dim = this._getDaysInMonth( year, month - 1 );
+ if ( day <= dim ) {
+ break;
+ }
+ month++;
+ day -= dim;
+ } while ( true );
+ }
+
+ date = this._daylightSavingAdjust( new Date( year, month - 1, day ) );
+ if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {
+ throw "Invalid date"; // E.g. 31/02/00
+ }
+ return date;
+ },
+
+ /* Standard date formats. */
+ ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+ COOKIE: "D, dd M yy",
+ ISO_8601: "yy-mm-dd",
+ RFC_822: "D, d M y",
+ RFC_850: "DD, dd-M-y",
+ RFC_1036: "D, d M y",
+ RFC_1123: "D, d M yy",
+ RFC_2822: "D, d M yy",
+ RSS: "D, d M y", // RFC 822
+ TICKS: "!",
+ TIMESTAMP: "@",
+ W3C: "yy-mm-dd", // ISO 8601
+
+ _ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +
+ Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),
+
+ /* Format a date object into a string value.
+ * The format can be combinations of the following:
+ * d - day of month (no leading zero)
+ * dd - day of month (two digit)
+ * o - day of year (no leading zeros)
+ * oo - day of year (three digit)
+ * D - day name short
+ * DD - day name long
+ * m - month of year (no leading zero)
+ * mm - month of year (two digit)
+ * M - month name short
+ * MM - month name long
+ * y - year (two digit)
+ * yy - year (four digit)
+ * @ - Unix timestamp (ms since 01/01/1970)
+ * ! - Windows ticks (100ns since 01/01/0001)
+ * "..." - literal text
+ * '' - single quote
+ *
+ * @param format string - the desired format of the date
+ * @param date Date - the date value to format
+ * @param settings Object - attributes include:
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return string - the date in the above format
+ */
+ formatDate: function( format, date, settings ) {
+ if ( !date ) {
+ return "";
+ }
+
+ var iFormat,
+ dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,
+ dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,
+ monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,
+ monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,
+
+ // Check whether a format character is doubled
+ lookAhead = function( match ) {
+ var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
+ if ( matches ) {
+ iFormat++;
+ }
+ return matches;
+ },
+
+ // Format a number, with leading zero if necessary
+ formatNumber = function( match, value, len ) {
+ var num = "" + value;
+ if ( lookAhead( match ) ) {
+ while ( num.length < len ) {
+ num = "0" + num;
+ }
+ }
+ return num;
+ },
+
+ // Format a name, short or long as requested
+ formatName = function( match, value, shortNames, longNames ) {
+ return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );
+ },
+ output = "",
+ literal = false;
+
+ if ( date ) {
+ for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
+ if ( literal ) {
+ if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
+ literal = false;
+ } else {
+ output += format.charAt( iFormat );
+ }
+ } else {
+ switch ( format.charAt( iFormat ) ) {
+ case "d":
+ output += formatNumber( "d", date.getDate(), 2 );
+ break;
+ case "D":
+ output += formatName( "D", date.getDay(), dayNamesShort, dayNames );
+ break;
+ case "o":
+ output += formatNumber( "o",
+ Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );
+ break;
+ case "m":
+ output += formatNumber( "m", date.getMonth() + 1, 2 );
+ break;
+ case "M":
+ output += formatName( "M", date.getMonth(), monthNamesShort, monthNames );
+ break;
+ case "y":
+ output += ( lookAhead( "y" ) ? date.getFullYear() :
+ ( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 );
+ break;
+ case "@":
+ output += date.getTime();
+ break;
+ case "!":
+ output += date.getTime() * 10000 + this._ticksTo1970;
+ break;
+ case "'":
+ if ( lookAhead( "'" ) ) {
+ output += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt( iFormat );
+ }
+ }
+ }
+ }
+ return output;
+ },
+
+ /* Extract all possible characters from the date format. */
+ _possibleChars: function( format ) {
+ var iFormat,
+ chars = "",
+ literal = false,
+
+ // Check whether a format character is doubled
+ lookAhead = function( match ) {
+ var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );
+ if ( matches ) {
+ iFormat++;
+ }
+ return matches;
+ };
+
+ for ( iFormat = 0; iFormat < format.length; iFormat++ ) {
+ if ( literal ) {
+ if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) {
+ literal = false;
+ } else {
+ chars += format.charAt( iFormat );
+ }
+ } else {
+ switch ( format.charAt( iFormat ) ) {
+ case "d": case "m": case "y": case "@":
+ chars += "0123456789";
+ break;
+ case "D": case "M":
+ return null; // Accept anything
+ case "'":
+ if ( lookAhead( "'" ) ) {
+ chars += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ chars += format.charAt( iFormat );
+ }
+ }
+ }
+ return chars;
+ },
+
+ /* Get a setting value, defaulting if necessary. */
+ _get: function( inst, name ) {
+ return inst.settings[ name ] !== undefined ?
+ inst.settings[ name ] : this._defaults[ name ];
+ },
+
+ /* Parse existing date and initialise date picker. */
+ _setDateFromField: function( inst, noDefault ) {
+ if ( inst.input.val() === inst.lastVal ) {
+ return;
+ }
+
+ var dateFormat = this._get( inst, "dateFormat" ),
+ dates = inst.lastVal = inst.input ? inst.input.val() : null,
+ defaultDate = this._getDefaultDate( inst ),
+ date = defaultDate,
+ settings = this._getFormatConfig( inst );
+
+ try {
+ date = this.parseDate( dateFormat, dates, settings ) || defaultDate;
+ } catch ( event ) {
+ dates = ( noDefault ? "" : dates );
+ }
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ inst.currentDay = ( dates ? date.getDate() : 0 );
+ inst.currentMonth = ( dates ? date.getMonth() : 0 );
+ inst.currentYear = ( dates ? date.getFullYear() : 0 );
+ this._adjustInstDate( inst );
+ },
+
+ /* Retrieve the default date shown on opening. */
+ _getDefaultDate: function( inst ) {
+ return this._restrictMinMax( inst,
+ this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) );
+ },
+
+ /* A date may be specified as an exact value or a relative one. */
+ _determineDate: function( inst, date, defaultDate ) {
+ var offsetNumeric = function( offset ) {
+ var date = new Date();
+ date.setDate( date.getDate() + offset );
+ return date;
+ },
+ offsetString = function( offset ) {
+ try {
+ return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
+ offset, $.datepicker._getFormatConfig( inst ) );
+ }
+ catch ( e ) {
+
+ // Ignore
+ }
+
+ var date = ( offset.toLowerCase().match( /^c/ ) ?
+ $.datepicker._getDate( inst ) : null ) || new Date(),
+ year = date.getFullYear(),
+ month = date.getMonth(),
+ day = date.getDate(),
+ pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+ matches = pattern.exec( offset );
+
+ while ( matches ) {
+ switch ( matches[ 2 ] || "d" ) {
+ case "d" : case "D" :
+ day += parseInt( matches[ 1 ], 10 ); break;
+ case "w" : case "W" :
+ day += parseInt( matches[ 1 ], 10 ) * 7; break;
+ case "m" : case "M" :
+ month += parseInt( matches[ 1 ], 10 );
+ day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
+ break;
+ case "y": case "Y" :
+ year += parseInt( matches[ 1 ], 10 );
+ day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );
+ break;
+ }
+ matches = pattern.exec( offset );
+ }
+ return new Date( year, month, day );
+ },
+ newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) :
+ ( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );
+
+ newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate );
+ if ( newDate ) {
+ newDate.setHours( 0 );
+ newDate.setMinutes( 0 );
+ newDate.setSeconds( 0 );
+ newDate.setMilliseconds( 0 );
+ }
+ return this._daylightSavingAdjust( newDate );
+ },
+
+ /* Handle switch to/from daylight saving.
+ * Hours may be non-zero on daylight saving cut-over:
+ * > 12 when midnight changeover, but then cannot generate
+ * midnight datetime, so jump to 1AM, otherwise reset.
+ * @param date (Date) the date to check
+ * @return (Date) the corrected date
+ */
+ _daylightSavingAdjust: function( date ) {
+ if ( !date ) {
+ return null;
+ }
+ date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );
+ return date;
+ },
+
+ /* Set the date(s) directly. */
+ _setDate: function( inst, date, noChange ) {
+ var clear = !date,
+ origMonth = inst.selectedMonth,
+ origYear = inst.selectedYear,
+ newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );
+
+ inst.selectedDay = inst.currentDay = newDate.getDate();
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+ if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {
+ this._notifyChange( inst );
+ }
+ this._adjustInstDate( inst );
+ if ( inst.input ) {
+ inst.input.val( clear ? "" : this._formatDate( inst ) );
+ }
+ },
+
+ /* Retrieve the date(s) directly. */
+ _getDate: function( inst ) {
+ var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null :
+ this._daylightSavingAdjust( new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
+ return startDate;
+ },
+
+ /* Attach the onxxx handlers. These are declared statically so
+ * they work with static code transformers like Caja.
+ */
+ _attachHandlers: function( inst ) {
+ var stepMonths = this._get( inst, "stepMonths" ),
+ id = "#" + inst.id.replace( /\\\\/g, "\\" );
+ inst.dpDiv.find( "[data-handler]" ).map( function() {
+ var handler = {
+ prev: function() {
+ $.datepicker._adjustDate( id, -stepMonths, "M" );
+ },
+ next: function() {
+ $.datepicker._adjustDate( id, +stepMonths, "M" );
+ },
+ hide: function() {
+ $.datepicker._hideDatepicker();
+ },
+ today: function() {
+ $.datepicker._gotoToday( id );
+ },
+ selectDay: function() {
+ $.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this );
+ return false;
+ },
+ selectMonth: function() {
+ $.datepicker._selectMonthYear( id, this, "M" );
+ return false;
+ },
+ selectYear: function() {
+ $.datepicker._selectMonthYear( id, this, "Y" );
+ return false;
+ }
+ };
+ $( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] );
+ } );
+ },
+
+ /* Generate the HTML for the current state of the date picker. */
+ _generateHTML: function( inst ) {
+ var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+ controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+ monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+ selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+ cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+ printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+ tempDate = new Date(),
+ today = this._daylightSavingAdjust(
+ new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time
+ isRTL = this._get( inst, "isRTL" ),
+ showButtonPanel = this._get( inst, "showButtonPanel" ),
+ hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ),
+ navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ),
+ numMonths = this._getNumberOfMonths( inst ),
+ showCurrentAtPos = this._get( inst, "showCurrentAtPos" ),
+ stepMonths = this._get( inst, "stepMonths" ),
+ isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),
+ currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :
+ new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),
+ minDate = this._getMinMaxDate( inst, "min" ),
+ maxDate = this._getMinMaxDate( inst, "max" ),
+ drawMonth = inst.drawMonth - showCurrentAtPos,
+ drawYear = inst.drawYear;
+
+ if ( drawMonth < 0 ) {
+ drawMonth += 12;
+ drawYear--;
+ }
+ if ( maxDate ) {
+ maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),
+ maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );
+ maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );
+ while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {
+ drawMonth--;
+ if ( drawMonth < 0 ) {
+ drawMonth = 11;
+ drawYear--;
+ }
+ }
+ }
+ inst.drawMonth = drawMonth;
+ inst.drawYear = drawYear;
+
+ prevText = this._get( inst, "prevText" );
+ prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,
+ this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),
+ this._getFormatConfig( inst ) ) );
+
+ prev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?
+ "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+ " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" :
+ ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "'>" + prevText + "</span></a>" ) );
+
+ nextText = this._get( inst, "nextText" );
+ nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,
+ this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),
+ this._getFormatConfig( inst ) ) );
+
+ next = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?
+ "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+ " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" :
+ ( hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "'>" + nextText + "</span></a>" ) );
+
+ currentText = this._get( inst, "currentText" );
+ gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today );
+ currentText = ( !navigationAsDateFormat ? currentText :
+ this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );
+
+ controls = ( !inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+ this._get( inst, "closeText" ) + "</button>" : "" );
+
+ buttonPanel = ( showButtonPanel ) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + ( isRTL ? controls : "" ) +
+ ( this._isInRange( inst, gotoDate ) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+ ">" + currentText + "</button>" : "" ) + ( isRTL ? "" : controls ) + "</div>" : "";
+
+ firstDay = parseInt( this._get( inst, "firstDay" ), 10 );
+ firstDay = ( isNaN( firstDay ) ? 0 : firstDay );
+
+ showWeek = this._get( inst, "showWeek" );
+ dayNames = this._get( inst, "dayNames" );
+ dayNamesMin = this._get( inst, "dayNamesMin" );
+ monthNames = this._get( inst, "monthNames" );
+ monthNamesShort = this._get( inst, "monthNamesShort" );
+ beforeShowDay = this._get( inst, "beforeShowDay" );
+ showOtherMonths = this._get( inst, "showOtherMonths" );
+ selectOtherMonths = this._get( inst, "selectOtherMonths" );
+ defaultDate = this._getDefaultDate( inst );
+ html = "";
+
+ for ( row = 0; row < numMonths[ 0 ]; row++ ) {
+ group = "";
+ this.maxRows = 4;
+ for ( col = 0; col < numMonths[ 1 ]; col++ ) {
+ selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );
+ cornerClass = " ui-corner-all";
+ calender = "";
+ if ( isMultiMonth ) {
+ calender += "<div class='ui-datepicker-group";
+ if ( numMonths[ 1 ] > 1 ) {
+ switch ( col ) {
+ case 0: calender += " ui-datepicker-group-first";
+ cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break;
+ case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last";
+ cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break;
+ default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+ }
+ }
+ calender += "'>";
+ }
+ calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+ ( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) +
+ ( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) +
+ this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,
+ row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers
+ "</div><table class='ui-datepicker-calendar'><thead>" +
+ "<tr>";
+ thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" );
+ for ( dow = 0; dow < 7; dow++ ) { // days of the week
+ day = ( dow + firstDay ) % 7;
+ thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" +
+ "<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>";
+ }
+ calender += thead + "</tr></thead><tbody>";
+ daysInMonth = this._getDaysInMonth( drawYear, drawMonth );
+ if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {
+ inst.selectedDay = Math.min( inst.selectedDay, daysInMonth );
+ }
+ leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;
+ curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate
+ numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)
+ this.maxRows = numRows;
+ printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );
+ for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows
+ calender += "<tr>";
+ tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+ this._get( inst, "calculateWeek" )( printDate ) + "</td>" );
+ for ( dow = 0; dow < 7; dow++ ) { // create date picker days
+ daySettings = ( beforeShowDay ?
+ beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] );
+ otherMonth = ( printDate.getMonth() !== drawMonth );
+ unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||
+ ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );
+ tbody += "<td class='" +
+ ( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends
+ ( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months
+ ( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key
+ ( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?
+
+ // or defaultDate is current printedDate and defaultDate is selectedDate
+ " " + this._dayOverClass : "" ) + // highlight selected day
+ ( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) + // highlight unselectable days
+ ( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates
+ ( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day
+ ( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different)
+ ( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "'" ) + "'" : "" ) + // cell title
+ ( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions
+ ( otherMonth && !showOtherMonths ? " " : // display for other months
+ ( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+ ( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) +
+ ( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day
+ ( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months
+ "' href='#'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date
+ printDate.setDate( printDate.getDate() + 1 );
+ printDate = this._daylightSavingAdjust( printDate );
+ }
+ calender += tbody + "</tr>";
+ }
+ drawMonth++;
+ if ( drawMonth > 11 ) {
+ drawMonth = 0;
+ drawYear++;
+ }
+ calender += "</tbody></table>" + ( isMultiMonth ? "</div>" +
+ ( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" );
+ group += calender;
+ }
+ html += group;
+ }
+ html += buttonPanel;
+ inst._keyEvent = false;
+ return html;
+ },
+
+ /* Generate the month and year header. */
+ _generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,
+ secondary, monthNames, monthNamesShort ) {
+
+ var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+ changeMonth = this._get( inst, "changeMonth" ),
+ changeYear = this._get( inst, "changeYear" ),
+ showMonthAfterYear = this._get( inst, "showMonthAfterYear" ),
+ html = "<div class='ui-datepicker-title'>",
+ monthHtml = "";
+
+ // Month selection
+ if ( secondary || !changeMonth ) {
+ monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>";
+ } else {
+ inMinYear = ( minDate && minDate.getFullYear() === drawYear );
+ inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );
+ monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+ for ( month = 0; month < 12; month++ ) {
+ if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {
+ monthHtml += "<option value='" + month + "'" +
+ ( month === drawMonth ? " selected='selected'" : "" ) +
+ ">" + monthNamesShort[ month ] + "</option>";
+ }
+ }
+ monthHtml += "</select>";
+ }
+
+ if ( !showMonthAfterYear ) {
+ html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? " " : "" );
+ }
+
+ // Year selection
+ if ( !inst.yearshtml ) {
+ inst.yearshtml = "";
+ if ( secondary || !changeYear ) {
+ html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+ } else {
+
+ // determine range of years to display
+ years = this._get( inst, "yearRange" ).split( ":" );
+ thisYear = new Date().getFullYear();
+ determineYear = function( value ) {
+ var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :
+ ( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) :
+ parseInt( value, 10 ) ) );
+ return ( isNaN( year ) ? thisYear : year );
+ };
+ year = determineYear( years[ 0 ] );
+ endYear = Math.max( year, determineYear( years[ 1 ] || "" ) );
+ year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );
+ endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );
+ inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+ for ( ; year <= endYear; year++ ) {
+ inst.yearshtml += "<option value='" + year + "'" +
+ ( year === drawYear ? " selected='selected'" : "" ) +
+ ">" + year + "</option>";
+ }
+ inst.yearshtml += "</select>";
+
+ html += inst.yearshtml;
+ inst.yearshtml = null;
+ }
+ }
+
+ html += this._get( inst, "yearSuffix" );
+ if ( showMonthAfterYear ) {
+ html += ( secondary || !( changeMonth && changeYear ) ? " " : "" ) + monthHtml;
+ }
+ html += "</div>"; // Close datepicker_header
+ return html;
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustInstDate: function( inst, offset, period ) {
+ var year = inst.selectedYear + ( period === "Y" ? offset : 0 ),
+ month = inst.selectedMonth + ( period === "M" ? offset : 0 ),
+ day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ),
+ date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );
+
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ if ( period === "M" || period === "Y" ) {
+ this._notifyChange( inst );
+ }
+ },
+
+ /* Ensure a date is within any min/max bounds. */
+ _restrictMinMax: function( inst, date ) {
+ var minDate = this._getMinMaxDate( inst, "min" ),
+ maxDate = this._getMinMaxDate( inst, "max" ),
+ newDate = ( minDate && date < minDate ? minDate : date );
+ return ( maxDate && newDate > maxDate ? maxDate : newDate );
+ },
+
+ /* Notify change of month/year. */
+ _notifyChange: function( inst ) {
+ var onChange = this._get( inst, "onChangeMonthYear" );
+ if ( onChange ) {
+ onChange.apply( ( inst.input ? inst.input[ 0 ] : null ),
+ [ inst.selectedYear, inst.selectedMonth + 1, inst ] );
+ }
+ },
+
+ /* Determine the number of months to show. */
+ _getNumberOfMonths: function( inst ) {
+ var numMonths = this._get( inst, "numberOfMonths" );
+ return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) );
+ },
+
+ /* Determine the current maximum date - ensure no time components are set. */
+ _getMinMaxDate: function( inst, minMax ) {
+ return this._determineDate( inst, this._get( inst, minMax + "Date" ), null );
+ },
+
+ /* Find the number of days in a given month. */
+ _getDaysInMonth: function( year, month ) {
+ return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();
+ },
+
+ /* Find the day of the week of the first of a month. */
+ _getFirstDayOfMonth: function( year, month ) {
+ return new Date( year, month, 1 ).getDay();
+ },
+
+ /* Determines if we should allow a "next/prev" month display change. */
+ _canAdjustMonth: function( inst, offset, curYear, curMonth ) {
+ var numMonths = this._getNumberOfMonths( inst ),
+ date = this._daylightSavingAdjust( new Date( curYear,
+ curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );
+
+ if ( offset < 0 ) {
+ date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );
+ }
+ return this._isInRange( inst, date );
+ },
+
+ /* Is the given date in the accepted range? */
+ _isInRange: function( inst, date ) {
+ var yearSplit, currentYear,
+ minDate = this._getMinMaxDate( inst, "min" ),
+ maxDate = this._getMinMaxDate( inst, "max" ),
+ minYear = null,
+ maxYear = null,
+ years = this._get( inst, "yearRange" );
+ if ( years ) {
+ yearSplit = years.split( ":" );
+ currentYear = new Date().getFullYear();
+ minYear = parseInt( yearSplit[ 0 ], 10 );
+ maxYear = parseInt( yearSplit[ 1 ], 10 );
+ if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) {
+ minYear += currentYear;
+ }
+ if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) {
+ maxYear += currentYear;
+ }
+ }
+
+ return ( ( !minDate || date.getTime() >= minDate.getTime() ) &&
+ ( !maxDate || date.getTime() <= maxDate.getTime() ) &&
+ ( !minYear || date.getFullYear() >= minYear ) &&
+ ( !maxYear || date.getFullYear() <= maxYear ) );
+ },
+
+ /* Provide the configuration settings for formatting/parsing. */
+ _getFormatConfig: function( inst ) {
+ var shortYearCutoff = this._get( inst, "shortYearCutoff" );
+ shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );
+ return { shortYearCutoff: shortYearCutoff,
+ dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ),
+ monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) };
+ },
+
+ /* Format the given date for display. */
+ _formatDate: function( inst, day, month, year ) {
+ if ( !day ) {
+ inst.currentDay = inst.selectedDay;
+ inst.currentMonth = inst.selectedMonth;
+ inst.currentYear = inst.selectedYear;
+ }
+ var date = ( day ? ( typeof day === "object" ? day :
+ this._daylightSavingAdjust( new Date( year, month, day ) ) ) :
+ this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );
+ return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) );
+ }
+} );
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function datepicker_bindHover( dpDiv ) {
+ var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+ return dpDiv.on( "mouseout", selector, function() {
+ $( this ).removeClass( "ui-state-hover" );
+ if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
+ $( this ).removeClass( "ui-datepicker-prev-hover" );
+ }
+ if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
+ $( this ).removeClass( "ui-datepicker-next-hover" );
+ }
+ } )
+ .on( "mouseover", selector, datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+ if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {
+ $( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" );
+ $( this ).addClass( "ui-state-hover" );
+ if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {
+ $( this ).addClass( "ui-datepicker-prev-hover" );
+ }
+ if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {
+ $( this ).addClass( "ui-datepicker-next-hover" );
+ }
+ }
+}
+
+/* jQuery extend now ignores nulls! */
+function datepicker_extendRemove( target, props ) {
+ $.extend( target, props );
+ for ( var name in props ) {
+ if ( props[ name ] == null ) {
+ target[ name ] = props[ name ];
+ }
+ }
+ return target;
+}
+
+/* Invoke the datepicker functionality.
+ @param options string - a command, optionally followed by additional parameters or
+ Object - settings for attaching new datepicker functionality
+ @return jQuery object */
+$.fn.datepicker = function( options ) {
+
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
+ if ( !this.length ) {
+ return this;
+ }
+
+ /* Initialise the date picker. */
+ if ( !$.datepicker.initialized ) {
+ $( document ).on( "mousedown", $.datepicker._checkExternalClick );
+ $.datepicker.initialized = true;
+ }
+
+ /* Append datepicker main container to body if not exist. */
+ if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) {
+ $( "body" ).append( $.datepicker.dpDiv );
+ }
+
+ var otherArgs = Array.prototype.slice.call( arguments, 1 );
+ if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) {
+ return $.datepicker[ "_" + options + "Datepicker" ].
+ apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
+ }
+ if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) {
+ return $.datepicker[ "_" + options + "Datepicker" ].
+ apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );
+ }
+ return this.each( function() {
+ typeof options === "string" ?
+ $.datepicker[ "_" + options + "Datepicker" ].
+ apply( $.datepicker, [ this ].concat( otherArgs ) ) :
+ $.datepicker._attachDatepicker( this, options );
+ } );
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.12.1";
+
+var widgetsDatepicker = $.datepicker;
+
+
+
+
+// This file is deprecated
+var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+/*!
+ * jQuery UI Mouse 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Mouse
+//>>group: Widgets
+//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
+//>>docs: http://api.jqueryui.com/mouse/
+
+
+
+var mouseHandled = false;
+$( document ).on( "mouseup", function() {
+ mouseHandled = false;
+} );
+
+var widgetsMouse = $.widget( "ui.mouse", {
+ version: "1.12.1",
+ options: {
+ cancel: "input, textarea, button, select, option",
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var that = this;
+
+ this.element
+ .on( "mousedown." + this.widgetName, function( event ) {
+ return that._mouseDown( event );
+ } )
+ .on( "click." + this.widgetName, function( event ) {
+ if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
+ $.removeData( event.target, that.widgetName + ".preventClickEvent" );
+ event.stopImmediatePropagation();
+ return false;
+ }
+ } );
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.off( "." + this.widgetName );
+ if ( this._mouseMoveDelegate ) {
+ this.document
+ .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
+ }
+ },
+
+ _mouseDown: function( event ) {
+
+ // don't let more than one widget handle mouseStart
+ if ( mouseHandled ) {
+ return;
+ }
+
+ this._mouseMoved = false;
+
+ // We may have missed mouseup (out of window)
+ ( this._mouseStarted && this._mouseUp( event ) );
+
+ this._mouseDownEvent = event;
+
+ var that = this,
+ btnIsLeft = ( event.which === 1 ),
+
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
+ $( event.target ).closest( this.options.cancel ).length : false );
+ if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if ( !this.mouseDelayMet ) {
+ this._mouseDelayTimer = setTimeout( function() {
+ that.mouseDelayMet = true;
+ }, this.options.delay );
+ }
+
+ if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
+ this._mouseStarted = ( this._mouseStart( event ) !== false );
+ if ( !this._mouseStarted ) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
+ $.removeData( event.target, this.widgetName + ".preventClickEvent" );
+ }
+
+ // These delegates are required to keep context
+ this._mouseMoveDelegate = function( event ) {
+ return that._mouseMove( event );
+ };
+ this._mouseUpDelegate = function( event ) {
+ return that._mouseUp( event );
+ };
+
+ this.document
+ .on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .on( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function( event ) {
+
+ // Only check for mouseups outside the document if you've moved inside the document
+ // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+ // fire a mousemove event if content is placed under the cursor. See #7778
+ // Support: IE <9
+ if ( this._mouseMoved ) {
+
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
+ !event.button ) {
+ return this._mouseUp( event );
+
+ // Iframe mouseup check - mouseup occurred in another document
+ } else if ( !event.which ) {
+
+ // Support: Safari <=8 - 9
+ // Safari sets which to 0 if you press any of the following keys
+ // during a drag (#14461)
+ if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
+ event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
+ this.ignoreMissingWhich = true;
+ } else if ( !this.ignoreMissingWhich ) {
+ return this._mouseUp( event );
+ }
+ }
+ }
+
+ if ( event.which || event.button ) {
+ this._mouseMoved = true;
+ }
+
+ if ( this._mouseStarted ) {
+ this._mouseDrag( event );
+ return event.preventDefault();
+ }
+
+ if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
+ this._mouseStarted =
+ ( this._mouseStart( this._mouseDownEvent, event ) !== false );
+ ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function( event ) {
+ this.document
+ .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ if ( this._mouseStarted ) {
+ this._mouseStarted = false;
+
+ if ( event.target === this._mouseDownEvent.target ) {
+ $.data( event.target, this.widgetName + ".preventClickEvent", true );
+ }
+
+ this._mouseStop( event );
+ }
+
+ if ( this._mouseDelayTimer ) {
+ clearTimeout( this._mouseDelayTimer );
+ delete this._mouseDelayTimer;
+ }
+
+ this.ignoreMissingWhich = false;
+ mouseHandled = false;
+ event.preventDefault();
+ },
+
+ _mouseDistanceMet: function( event ) {
+ return ( Math.max(
+ Math.abs( this._mouseDownEvent.pageX - event.pageX ),
+ Math.abs( this._mouseDownEvent.pageY - event.pageY )
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function( /* event */ ) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function( /* event */ ) {},
+ _mouseDrag: function( /* event */ ) {},
+ _mouseStop: function( /* event */ ) {},
+ _mouseCapture: function( /* event */ ) { return true; }
+} );
+
+
+
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+var plugin = $.ui.plugin = {
+ add: function( module, option, set ) {
+ var i,
+ proto = $.ui[ module ].prototype;
+ for ( i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args, allowDisconnected ) {
+ var i,
+ set = instance.plugins[ name ];
+
+ if ( !set ) {
+ return;
+ }
+
+ if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||
+ instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+ return;
+ }
+
+ for ( i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+};
+
+
+
+var safeBlur = $.ui.safeBlur = function( element ) {
+
+ // Support: IE9 - 10 only
+ // If the <body> is blurred, IE will switch windows, see #9420
+ if ( element && element.nodeName.toLowerCase() !== "body" ) {
+ $( element ).trigger( "blur" );
+ }
+};
+
+
+/*!
+ * jQuery UI Draggable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Draggable
+//>>group: Interactions
+//>>description: Enables dragging functionality for any element.
+//>>docs: http://api.jqueryui.com/draggable/
+//>>demos: http://jqueryui.com/draggable/
+//>>css.structure: ../../themes/base/draggable.css
+
+
+
+$.widget( "ui.draggable", $.ui.mouse, {
+ version: "1.12.1",
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: true,
+ appendTo: "parent",
+ axis: false,
+ connectToSortable: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ iframeFix: false,
+ opacity: false,
+ refreshPositions: false,
+ revert: false,
+ revertDuration: 500,
+ scope: "default",
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: false,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: false,
+ zIndex: false,
+
+ // Callbacks
+ drag: null,
+ start: null,
+ stop: null
+ },
+ _create: function() {
+
+ if ( this.options.helper === "original" ) {
+ this._setPositionRelative();
+ }
+ if ( this.options.addClasses ) {
+ this._addClass( "ui-draggable" );
+ }
+ this._setHandleClassName();
+
+ this._mouseInit();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "handle" ) {
+ this._removeHandleClassName();
+ this._setHandleClassName();
+ }
+ },
+
+ _destroy: function() {
+ if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+ this.destroyOnClear = true;
+ return;
+ }
+ this._removeHandleClassName();
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function( event ) {
+ var o = this.options;
+
+ // Among others, prevent a drag on a resizable-handle
+ if ( this.helper || o.disabled ||
+ $( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {
+ return false;
+ }
+
+ //Quit if we're not on a valid handle
+ this.handle = this._getHandle( event );
+ if ( !this.handle ) {
+ return false;
+ }
+
+ this._blurActiveElement( event );
+
+ this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
+
+ return true;
+
+ },
+
+ _blockFrames: function( selector ) {
+ this.iframeBlocks = this.document.find( selector ).map( function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css( "position", "absolute" )
+ .appendTo( iframe.parent() )
+ .outerWidth( iframe.outerWidth() )
+ .outerHeight( iframe.outerHeight() )
+ .offset( iframe.offset() )[ 0 ];
+ } );
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _blurActiveElement: function( event ) {
+ var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
+ target = $( event.target );
+
+ // Don't blur if the event occurred on an element that is within
+ // the currently focused element
+ // See #10527, #12472
+ if ( target.closest( activeElement ).length ) {
+ return;
+ }
+
+ // Blur any element that currently has focus, see #4261
+ $.ui.safeBlur( activeElement );
+ },
+
+ _mouseStart: function( event ) {
+
+ var o = this.options;
+
+ //Create and append the visible helper
+ this.helper = this._createHelper( event );
+
+ this._addClass( this.helper, "ui-draggable-dragging" );
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ //If ddmanager is used for droppables, set the global draggable
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.current = this;
+ }
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Store the helper's css position
+ this.cssPosition = this.helper.css( "position" );
+ this.scrollParent = this.helper.scrollParent( true );
+ this.offsetParent = this.helper.offsetParent();
+ this.hasFixedAncestor = this.helper.parents().filter( function() {
+ return $( this ).css( "position" ) === "fixed";
+ } ).length > 0;
+
+ //The element's absolute position on the page minus margins
+ this.positionAbs = this.element.offset();
+ this._refreshOffsets( event );
+
+ //Generate the original position
+ this.originalPosition = this.position = this._generatePosition( event, false );
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
+
+ //Set a containment if given in the options
+ this._setContainment();
+
+ //Trigger event + callbacks
+ if ( this._trigger( "start", event ) === false ) {
+ this._clear();
+ return false;
+ }
+
+ //Recache the helper size
+ this._cacheHelperProportions();
+
+ //Prepare the droppable offsets
+ if ( $.ui.ddmanager && !o.dropBehaviour ) {
+ $.ui.ddmanager.prepareOffsets( this, event );
+ }
+
+ // Execute the drag once - this causes the helper not to be visible before getting its
+ // correct position
+ this._mouseDrag( event, true );
+
+ // If the ddmanager is used for droppables, inform the manager that dragging has started
+ // (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStart( this, event );
+ }
+
+ return true;
+ },
+
+ _refreshOffsets: function( event ) {
+ this.offset = {
+ top: this.positionAbs.top - this.margins.top,
+ left: this.positionAbs.left - this.margins.left,
+ scroll: false,
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset()
+ };
+
+ this.offset.click = {
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ };
+ },
+
+ _mouseDrag: function( event, noPropagation ) {
+
+ // reset any necessary cached properties (see #5009)
+ if ( this.hasFixedAncestor ) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ //Compute the helpers position
+ this.position = this._generatePosition( event, true );
+ this.positionAbs = this._convertPositionTo( "absolute" );
+
+ //Call plugins and callbacks and use the resulting position if something is returned
+ if ( !noPropagation ) {
+ var ui = this._uiHash();
+ if ( this._trigger( "drag", event, ui ) === false ) {
+ this._mouseUp( new $.Event( "mouseup", event ) );
+ return false;
+ }
+ this.position = ui.position;
+ }
+
+ this.helper[ 0 ].style.left = this.position.left + "px";
+ this.helper[ 0 ].style.top = this.position.top + "px";
+
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.drag( this, event );
+ }
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+
+ //If we are using droppables, inform the manager about the drop
+ var that = this,
+ dropped = false;
+ if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
+ dropped = $.ui.ddmanager.drop( this, event );
+ }
+
+ //if a drop comes from outside (a sortable)
+ if ( this.dropped ) {
+ dropped = this.dropped;
+ this.dropped = false;
+ }
+
+ if ( ( this.options.revert === "invalid" && !dropped ) ||
+ ( this.options.revert === "valid" && dropped ) ||
+ this.options.revert === true || ( $.isFunction( this.options.revert ) &&
+ this.options.revert.call( this.element, dropped ) )
+ ) {
+ $( this.helper ).animate(
+ this.originalPosition,
+ parseInt( this.options.revertDuration, 10 ),
+ function() {
+ if ( that._trigger( "stop", event ) !== false ) {
+ that._clear();
+ }
+ }
+ );
+ } else {
+ if ( this._trigger( "stop", event ) !== false ) {
+ this._clear();
+ }
+ }
+
+ return false;
+ },
+
+ _mouseUp: function( event ) {
+ this._unblockFrames();
+
+ // If the ddmanager is used for droppables, inform the manager that dragging has stopped
+ // (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStop( this, event );
+ }
+
+ // Only need to focus if the event occurred on the draggable itself, see #10527
+ if ( this.handleElement.is( event.target ) ) {
+
+ // The interaction is over; whether or not the click resulted in a drag,
+ // focus the element
+ this.element.trigger( "focus" );
+ }
+
+ return $.ui.mouse.prototype._mouseUp.call( this, event );
+ },
+
+ cancel: function() {
+
+ if ( this.helper.is( ".ui-draggable-dragging" ) ) {
+ this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) );
+ } else {
+ this._clear();
+ }
+
+ return this;
+
+ },
+
+ _getHandle: function( event ) {
+ return this.options.handle ?
+ !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+ true;
+ },
+
+ _setHandleClassName: function() {
+ this.handleElement = this.options.handle ?
+ this.element.find( this.options.handle ) : this.element;
+ this._addClass( this.handleElement, "ui-draggable-handle" );
+ },
+
+ _removeHandleClassName: function() {
+ this._removeClass( this.handleElement, "ui-draggable-handle" );
+ },
+
+ _createHelper: function( event ) {
+
+ var o = this.options,
+ helperIsFunction = $.isFunction( o.helper ),
+ helper = helperIsFunction ?
+ $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+ ( o.helper === "clone" ?
+ this.element.clone().removeAttr( "id" ) :
+ this.element );
+
+ if ( !helper.parents( "body" ).length ) {
+ helper.appendTo( ( o.appendTo === "parent" ?
+ this.element[ 0 ].parentNode :
+ o.appendTo ) );
+ }
+
+ // Http://bugs.jqueryui.com/ticket/9446
+ // a helper function can return the original element
+ // which wouldn't have been set to relative in _create
+ if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+ this._setPositionRelative();
+ }
+
+ if ( helper[ 0 ] !== this.element[ 0 ] &&
+ !( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) {
+ helper.css( "position", "absolute" );
+ }
+
+ return helper;
+
+ },
+
+ _setPositionRelative: function() {
+ if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+ this.element[ 0 ].style.position = "relative";
+ }
+ },
+
+ _adjustOffsetFromHelper: function( obj ) {
+ if ( typeof obj === "string" ) {
+ obj = obj.split( " " );
+ }
+ if ( $.isArray( obj ) ) {
+ obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
+ }
+ if ( "left" in obj ) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ( "right" in obj ) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ( "top" in obj ) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ( "bottom" in obj ) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _isRootNode: function( element ) {
+ return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+ },
+
+ _getParentOffset: function() {
+
+ //Get the offsetParent and cache its position
+ var po = this.offsetParent.offset(),
+ document = this.document[ 0 ];
+
+ // This is a special case where we need to modify a offset calculated on start, since the
+ // following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the
+ // next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
+ // the document, which means that the scroll is included in the initial calculation of the
+ // offset of the parent, and never recalculated upon drag
+ if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document &&
+ $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
+ left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+ if ( this.cssPosition !== "relative" ) {
+ return { top: 0, left: 0 };
+ }
+
+ var p = this.element.position(),
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
+ ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+ left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
+ ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+ };
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ),
+ top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ),
+ right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ),
+ bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 )
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var isUserScrollable, c, ce,
+ o = this.options,
+ document = this.document[ 0 ];
+
+ this.relativeContainer = null;
+
+ if ( !o.containment ) {
+ this.containment = null;
+ return;
+ }
+
+ if ( o.containment === "window" ) {
+ this.containment = [
+ $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+ $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+ $( window ).scrollLeft() + $( window ).width() -
+ this.helperProportions.width - this.margins.left,
+ $( window ).scrollTop() +
+ ( $( window ).height() || document.body.parentNode.scrollHeight ) -
+ this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment === "document" ) {
+ this.containment = [
+ 0,
+ 0,
+ $( document ).width() - this.helperProportions.width - this.margins.left,
+ ( $( document ).height() || document.body.parentNode.scrollHeight ) -
+ this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment.constructor === Array ) {
+ this.containment = o.containment;
+ return;
+ }
+
+ if ( o.containment === "parent" ) {
+ o.containment = this.helper[ 0 ].parentNode;
+ }
+
+ c = $( o.containment );
+ ce = c[ 0 ];
+
+ if ( !ce ) {
+ return;
+ }
+
+ isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
+
+ this.containment = [
+ ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) +
+ ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+ ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) +
+ ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+ ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+ ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+ this.helperProportions.width -
+ this.margins.left -
+ this.margins.right,
+ ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+ ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+ this.helperProportions.height -
+ this.margins.top -
+ this.margins.bottom
+ ];
+ this.relativeContainer = c;
+ },
+
+ _convertPositionTo: function( d, pos ) {
+
+ if ( !pos ) {
+ pos = this.position;
+ }
+
+ var mod = d === "absolute" ? 1 : -1,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: (
+
+ // The absolute mouse position
+ pos.top +
+
+ // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.relative.top * mod +
+
+ // The offsetParent's offset without borders (offset + border)
+ this.offset.parent.top * mod -
+ ( ( this.cssPosition === "fixed" ?
+ -this.offset.scroll.top :
+ ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )
+ ),
+ left: (
+
+ // The absolute mouse position
+ pos.left +
+
+ // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.relative.left * mod +
+
+ // The offsetParent's offset without borders (offset + border)
+ this.offset.parent.left * mod -
+ ( ( this.cssPosition === "fixed" ?
+ -this.offset.scroll.left :
+ ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )
+ )
+ };
+
+ },
+
+ _generatePosition: function( event, constrainPosition ) {
+
+ var containment, co, top, left,
+ o = this.options,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
+ pageX = event.pageX,
+ pageY = event.pageY;
+
+ // Cache the scroll
+ if ( !scrollIsRootNode || !this.offset.scroll ) {
+ this.offset.scroll = {
+ top: this.scrollParent.scrollTop(),
+ left: this.scrollParent.scrollLeft()
+ };
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ // If we are not dragging yet, we won't check for options
+ if ( constrainPosition ) {
+ if ( this.containment ) {
+ if ( this.relativeContainer ) {
+ co = this.relativeContainer.offset();
+ containment = [
+ this.containment[ 0 ] + co.left,
+ this.containment[ 1 ] + co.top,
+ this.containment[ 2 ] + co.left,
+ this.containment[ 3 ] + co.top
+ ];
+ } else {
+ containment = this.containment;
+ }
+
+ if ( event.pageX - this.offset.click.left < containment[ 0 ] ) {
+ pageX = containment[ 0 ] + this.offset.click.left;
+ }
+ if ( event.pageY - this.offset.click.top < containment[ 1 ] ) {
+ pageY = containment[ 1 ] + this.offset.click.top;
+ }
+ if ( event.pageX - this.offset.click.left > containment[ 2 ] ) {
+ pageX = containment[ 2 ] + this.offset.click.left;
+ }
+ if ( event.pageY - this.offset.click.top > containment[ 3 ] ) {
+ pageY = containment[ 3 ] + this.offset.click.top;
+ }
+ }
+
+ if ( o.grid ) {
+
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid
+ // argument errors in IE (see ticket #6950)
+ top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -
+ this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;
+ pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||
+ top - this.offset.click.top > containment[ 3 ] ) ?
+ top :
+ ( ( top - this.offset.click.top >= containment[ 1 ] ) ?
+ top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;
+
+ left = o.grid[ 0 ] ? this.originalPageX +
+ Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :
+ this.originalPageX;
+ pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||
+ left - this.offset.click.left > containment[ 2 ] ) ?
+ left :
+ ( ( left - this.offset.click.left >= containment[ 0 ] ) ?
+ left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;
+ }
+
+ if ( o.axis === "y" ) {
+ pageX = this.originalPageX;
+ }
+
+ if ( o.axis === "x" ) {
+ pageY = this.originalPageY;
+ }
+ }
+
+ return {
+ top: (
+
+ // The absolute mouse position
+ pageY -
+
+ // Click offset (relative to the element)
+ this.offset.click.top -
+
+ // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.relative.top -
+
+ // The offsetParent's offset without borders (offset + border)
+ this.offset.parent.top +
+ ( this.cssPosition === "fixed" ?
+ -this.offset.scroll.top :
+ ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+ ),
+ left: (
+
+ // The absolute mouse position
+ pageX -
+
+ // Click offset (relative to the element)
+ this.offset.click.left -
+
+ // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.relative.left -
+
+ // The offsetParent's offset without borders (offset + border)
+ this.offset.parent.left +
+ ( this.cssPosition === "fixed" ?
+ -this.offset.scroll.left :
+ ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+ )
+ };
+
+ },
+
+ _clear: function() {
+ this._removeClass( this.helper, "ui-draggable-dragging" );
+ if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ this.cancelHelperRemoval = false;
+ if ( this.destroyOnClear ) {
+ this.destroy();
+ }
+ },
+
+ // From now on bulk stuff - mainly helpers
+
+ _trigger: function( type, event, ui ) {
+ ui = ui || this._uiHash();
+ $.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+ // Absolute position and offset (see #6884 ) have to be recalculated after plugins
+ if ( /^(drag|start|stop)/.test( type ) ) {
+ this.positionAbs = this._convertPositionTo( "absolute" );
+ ui.offset = this.positionAbs;
+ }
+ return $.Widget.prototype._trigger.call( this, type, event, ui );
+ },
+
+ plugins: {},
+
+ _uiHash: function() {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ };
+ }
+
+} );
+
+$.ui.plugin.add( "draggable", "connectToSortable", {
+ start: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ } );
+
+ draggable.sortables = [];
+ $( draggable.options.connectToSortable ).each( function() {
+ var sortable = $( this ).sortable( "instance" );
+
+ if ( sortable && !sortable.options.disabled ) {
+ draggable.sortables.push( sortable );
+
+ // RefreshPositions is called at drag start to refresh the containerCache
+ // which is used in drag. This ensures it's initialized and synchronized
+ // with any changes that might have happened on the page since initialization.
+ sortable.refreshPositions();
+ sortable._trigger( "activate", event, uiSortable );
+ }
+ } );
+ },
+ stop: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ } );
+
+ draggable.cancelHelperRemoval = false;
+
+ $.each( draggable.sortables, function() {
+ var sortable = this;
+
+ if ( sortable.isOver ) {
+ sortable.isOver = 0;
+
+ // Allow this sortable to handle removing the helper
+ draggable.cancelHelperRemoval = true;
+ sortable.cancelHelperRemoval = false;
+
+ // Use _storedCSS To restore properties in the sortable,
+ // as this also handles revert (#9675) since the draggable
+ // may have modified them in unexpected ways (#8809)
+ sortable._storedCSS = {
+ position: sortable.placeholder.css( "position" ),
+ top: sortable.placeholder.css( "top" ),
+ left: sortable.placeholder.css( "left" )
+ };
+
+ sortable._mouseStop( event );
+
+ // Once drag has ended, the sortable should return to using
+ // its original helper, not the shared helper from draggable
+ sortable.options.helper = sortable.options._helper;
+ } else {
+
+ // Prevent this Sortable from removing the helper.
+ // However, don't set the draggable to remove the helper
+ // either as another connected Sortable may yet handle the removal.
+ sortable.cancelHelperRemoval = true;
+
+ sortable._trigger( "deactivate", event, uiSortable );
+ }
+ } );
+ },
+ drag: function( event, ui, draggable ) {
+ $.each( draggable.sortables, function() {
+ var innermostIntersecting = false,
+ sortable = this;
+
+ // Copy over variables that sortable's _intersectsWith uses
+ sortable.positionAbs = draggable.positionAbs;
+ sortable.helperProportions = draggable.helperProportions;
+ sortable.offset.click = draggable.offset.click;
+
+ if ( sortable._intersectsWith( sortable.containerCache ) ) {
+ innermostIntersecting = true;
+
+ $.each( draggable.sortables, function() {
+
+ // Copy over variables that sortable's _intersectsWith uses
+ this.positionAbs = draggable.positionAbs;
+ this.helperProportions = draggable.helperProportions;
+ this.offset.click = draggable.offset.click;
+
+ if ( this !== sortable &&
+ this._intersectsWith( this.containerCache ) &&
+ $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
+ innermostIntersecting = false;
+ }
+
+ return innermostIntersecting;
+ } );
+ }
+
+ if ( innermostIntersecting ) {
+
+ // If it intersects, we use a little isOver variable and set it once,
+ // so that the move-in stuff gets fired only once.
+ if ( !sortable.isOver ) {
+ sortable.isOver = 1;
+
+ // Store draggable's parent in case we need to reappend to it later.
+ draggable._parent = ui.helper.parent();
+
+ sortable.currentItem = ui.helper
+ .appendTo( sortable.element )
+ .data( "ui-sortable-item", true );
+
+ // Store helper option to later restore it
+ sortable.options._helper = sortable.options.helper;
+
+ sortable.options.helper = function() {
+ return ui.helper[ 0 ];
+ };
+
+ // Fire the start events of the sortable with our passed browser event,
+ // and our own helper (so it doesn't create a new one)
+ event.target = sortable.currentItem[ 0 ];
+ sortable._mouseCapture( event, true );
+ sortable._mouseStart( event, true, true );
+
+ // Because the browser event is way off the new appended portlet,
+ // modify necessary variables to reflect the changes
+ sortable.offset.click.top = draggable.offset.click.top;
+ sortable.offset.click.left = draggable.offset.click.left;
+ sortable.offset.parent.left -= draggable.offset.parent.left -
+ sortable.offset.parent.left;
+ sortable.offset.parent.top -= draggable.offset.parent.top -
+ sortable.offset.parent.top;
+
+ draggable._trigger( "toSortable", event );
+
+ // Inform draggable that the helper is in a valid drop zone,
+ // used solely in the revert option to handle "valid/invalid".
+ draggable.dropped = sortable.element;
+
+ // Need to refreshPositions of all sortables in the case that
+ // adding to one sortable changes the location of the other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ } );
+
+ // Hack so receive/update callbacks work (mostly)
+ draggable.currentItem = draggable.element;
+ sortable.fromOutside = draggable;
+ }
+
+ if ( sortable.currentItem ) {
+ sortable._mouseDrag( event );
+
+ // Copy the sortable's position because the draggable's can potentially reflect
+ // a relative position, while sortable is always absolute, which the dragged
+ // element has now become. (#8809)
+ ui.position = sortable.position;
+ }
+ } else {
+
+ // If it doesn't intersect with the sortable, and it intersected before,
+ // we fake the drag stop of the sortable, but make sure it doesn't remove
+ // the helper by using cancelHelperRemoval.
+ if ( sortable.isOver ) {
+
+ sortable.isOver = 0;
+ sortable.cancelHelperRemoval = true;
+
+ // Calling sortable's mouseStop would trigger a revert,
+ // so revert must be temporarily false until after mouseStop is called.
+ sortable.options._revert = sortable.options.revert;
+ sortable.options.revert = false;
+
+ sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+ sortable._mouseStop( event, true );
+
+ // Restore sortable behaviors that were modfied
+ // when the draggable entered the sortable area (#9481)
+ sortable.options.revert = sortable.options._revert;
+ sortable.options.helper = sortable.options._helper;
+
+ if ( sortable.placeholder ) {
+ sortable.placeholder.remove();
+ }
+
+ // Restore and recalculate the draggable's offset considering the sortable
+ // may have modified them in unexpected ways. (#8809, #10669)
+ ui.helper.appendTo( draggable._parent );
+ draggable._refreshOffsets( event );
+ ui.position = draggable._generatePosition( event, true );
+
+ draggable._trigger( "fromSortable", event );
+
+ // Inform draggable that the helper is no longer in a valid drop zone
+ draggable.dropped = false;
+
+ // Need to refreshPositions of all sortables just in case removing
+ // from one sortable changes the location of other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ } );
+ }
+ }
+ } );
+ }
+} );
+
+$.ui.plugin.add( "draggable", "cursor", {
+ start: function( event, ui, instance ) {
+ var t = $( "body" ),
+ o = instance.options;
+
+ if ( t.css( "cursor" ) ) {
+ o._cursor = t.css( "cursor" );
+ }
+ t.css( "cursor", o.cursor );
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if ( o._cursor ) {
+ $( "body" ).css( "cursor", o._cursor );
+ }
+ }
+} );
+
+$.ui.plugin.add( "draggable", "opacity", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+ if ( t.css( "opacity" ) ) {
+ o._opacity = t.css( "opacity" );
+ }
+ t.css( "opacity", o.opacity );
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if ( o._opacity ) {
+ $( ui.helper ).css( "opacity", o._opacity );
+ }
+ }
+} );
+
+$.ui.plugin.add( "draggable", "scroll", {
+ start: function( event, ui, i ) {
+ if ( !i.scrollParentNotHidden ) {
+ i.scrollParentNotHidden = i.helper.scrollParent( false );
+ }
+
+ if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&
+ i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+ i.overflowOffset = i.scrollParentNotHidden.offset();
+ }
+ },
+ drag: function( event, ui, i ) {
+
+ var o = i.options,
+ scrolled = false,
+ scrollParent = i.scrollParentNotHidden[ 0 ],
+ document = i.document[ 0 ];
+
+ if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+ if ( !o.axis || o.axis !== "x" ) {
+ if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <
+ o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+ } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+ }
+ }
+
+ if ( !o.axis || o.axis !== "y" ) {
+ if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <
+ o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+ } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+ }
+ }
+
+ } else {
+
+ if ( !o.axis || o.axis !== "x" ) {
+ if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {
+ scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );
+ } else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <
+ o.scrollSensitivity ) {
+ scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );
+ }
+ }
+
+ if ( !o.axis || o.axis !== "y" ) {
+ if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {
+ scrolled = $( document ).scrollLeft(
+ $( document ).scrollLeft() - o.scrollSpeed
+ );
+ } else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <
+ o.scrollSensitivity ) {
+ scrolled = $( document ).scrollLeft(
+ $( document ).scrollLeft() + o.scrollSpeed
+ );
+ }
+ }
+
+ }
+
+ if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
+ $.ui.ddmanager.prepareOffsets( i, event );
+ }
+
+ }
+} );
+
+$.ui.plugin.add( "draggable", "snap", {
+ start: function( event, ui, i ) {
+
+ var o = i.options;
+
+ i.snapElements = [];
+
+ $( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap )
+ .each( function() {
+ var $t = $( this ),
+ $o = $t.offset();
+ if ( this !== i.element[ 0 ] ) {
+ i.snapElements.push( {
+ item: this,
+ width: $t.outerWidth(), height: $t.outerHeight(),
+ top: $o.top, left: $o.left
+ } );
+ }
+ } );
+
+ },
+ drag: function( event, ui, inst ) {
+
+ var ts, bs, ls, rs, l, r, t, b, i, first,
+ o = inst.options,
+ d = o.snapTolerance,
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+ for ( i = inst.snapElements.length - 1; i >= 0; i-- ) {
+
+ l = inst.snapElements[ i ].left - inst.margins.left;
+ r = l + inst.snapElements[ i ].width;
+ t = inst.snapElements[ i ].top - inst.margins.top;
+ b = t + inst.snapElements[ i ].height;
+
+ if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||
+ !$.contains( inst.snapElements[ i ].item.ownerDocument,
+ inst.snapElements[ i ].item ) ) {
+ if ( inst.snapElements[ i ].snapping ) {
+ ( inst.options.snap.release &&
+ inst.options.snap.release.call(
+ inst.element,
+ event,
+ $.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )
+ ) );
+ }
+ inst.snapElements[ i ].snapping = false;
+ continue;
+ }
+
+ if ( o.snapMode !== "inner" ) {
+ ts = Math.abs( t - y2 ) <= d;
+ bs = Math.abs( b - y1 ) <= d;
+ ls = Math.abs( l - x2 ) <= d;
+ rs = Math.abs( r - x1 ) <= d;
+ if ( ts ) {
+ ui.position.top = inst._convertPositionTo( "relative", {
+ top: t - inst.helperProportions.height,
+ left: 0
+ } ).top;
+ }
+ if ( bs ) {
+ ui.position.top = inst._convertPositionTo( "relative", {
+ top: b,
+ left: 0
+ } ).top;
+ }
+ if ( ls ) {
+ ui.position.left = inst._convertPositionTo( "relative", {
+ top: 0,
+ left: l - inst.helperProportions.width
+ } ).left;
+ }
+ if ( rs ) {
+ ui.position.left = inst._convertPositionTo( "relative", {
+ top: 0,
+ left: r
+ } ).left;
+ }
+ }
+
+ first = ( ts || bs || ls || rs );
+
+ if ( o.snapMode !== "outer" ) {
+ ts = Math.abs( t - y1 ) <= d;
+ bs = Math.abs( b - y2 ) <= d;
+ ls = Math.abs( l - x1 ) <= d;
+ rs = Math.abs( r - x2 ) <= d;
+ if ( ts ) {
+ ui.position.top = inst._convertPositionTo( "relative", {
+ top: t,
+ left: 0
+ } ).top;
+ }
+ if ( bs ) {
+ ui.position.top = inst._convertPositionTo( "relative", {
+ top: b - inst.helperProportions.height,
+ left: 0
+ } ).top;
+ }
+ if ( ls ) {
+ ui.position.left = inst._convertPositionTo( "relative", {
+ top: 0,
+ left: l
+ } ).left;
+ }
+ if ( rs ) {
+ ui.position.left = inst._convertPositionTo( "relative", {
+ top: 0,
+ left: r - inst.helperProportions.width
+ } ).left;
+ }
+ }
+
+ if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {
+ ( inst.options.snap.snap &&
+ inst.options.snap.snap.call(
+ inst.element,
+ event,
+ $.extend( inst._uiHash(), {
+ snapItem: inst.snapElements[ i ].item
+ } ) ) );
+ }
+ inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );
+
+ }
+
+ }
+} );
+
+$.ui.plugin.add( "draggable", "stack", {
+ start: function( event, ui, instance ) {
+ var min,
+ o = instance.options,
+ group = $.makeArray( $( o.stack ) ).sort( function( a, b ) {
+ return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) -
+ ( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 );
+ } );
+
+ if ( !group.length ) { return; }
+
+ min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0;
+ $( group ).each( function( i ) {
+ $( this ).css( "zIndex", min + i );
+ } );
+ this.css( "zIndex", ( min + group.length ) );
+ }
+} );
+
+$.ui.plugin.add( "draggable", "zIndex", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+
+ if ( t.css( "zIndex" ) ) {
+ o._zIndex = t.css( "zIndex" );
+ }
+ t.css( "zIndex", o.zIndex );
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+
+ if ( o._zIndex ) {
+ $( ui.helper ).css( "zIndex", o._zIndex );
+ }
+ }
+} );
+
+var widgetsDraggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Resizable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Resizable
+//>>group: Interactions
+//>>description: Enables resize functionality for any element.
+//>>docs: http://api.jqueryui.com/resizable/
+//>>demos: http://jqueryui.com/resizable/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/resizable.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.resizable", $.ui.mouse, {
+ version: "1.12.1",
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: false,
+ animate: false,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: false,
+ autoHide: false,
+ classes: {
+ "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
+ },
+ containment: false,
+ ghost: false,
+ grid: false,
+ handles: "e,s,se",
+ helper: false,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+
+ // See #7960
+ zIndex: 90,
+
+ // Callbacks
+ resize: null,
+ start: null,
+ stop: null
+ },
+
+ _num: function( value ) {
+ return parseFloat( value ) || 0;
+ },
+
+ _isNumber: function( value ) {
+ return !isNaN( parseFloat( value ) );
+ },
+
+ _hasScroll: function( el, a ) {
+
+ if ( $( el ).css( "overflow" ) === "hidden" ) {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ },
+
+ _create: function() {
+
+ var margins,
+ o = this.options,
+ that = this;
+ this._addClass( "ui-resizable" );
+
+ $.extend( this, {
+ _aspectRatio: !!( o.aspectRatio ),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+ } );
+
+ // Wrap the element if it cannot hold child nodes
+ if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {
+
+ this.element.wrap(
+ $( "<div class='ui-wrapper' style='overflow: hidden;'></div>" ).css( {
+ position: this.element.css( "position" ),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css( "top" ),
+ left: this.element.css( "left" )
+ } )
+ );
+
+ this.element = this.element.parent().data(
+ "ui-resizable", this.element.resizable( "instance" )
+ );
+
+ this.elementIsWrapper = true;
+
+ margins = {
+ marginTop: this.originalElement.css( "marginTop" ),
+ marginRight: this.originalElement.css( "marginRight" ),
+ marginBottom: this.originalElement.css( "marginBottom" ),
+ marginLeft: this.originalElement.css( "marginLeft" )
+ };
+
+ this.element.css( margins );
+ this.originalElement.css( "margin", 0 );
+
+ // support: Safari
+ // Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css( "resize" );
+ this.originalElement.css( "resize", "none" );
+
+ this._proportionallyResizeElements.push( this.originalElement.css( {
+ position: "static",
+ zoom: 1,
+ display: "block"
+ } ) );
+
+ // Support: IE9
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css( margins );
+
+ this._proportionallyResize();
+ }
+
+ this._setupHandles();
+
+ if ( o.autoHide ) {
+ $( this.element )
+ .on( "mouseenter", function() {
+ if ( o.disabled ) {
+ return;
+ }
+ that._removeClass( "ui-resizable-autohide" );
+ that._handles.show();
+ } )
+ .on( "mouseleave", function() {
+ if ( o.disabled ) {
+ return;
+ }
+ if ( !that.resizing ) {
+ that._addClass( "ui-resizable-autohide" );
+ that._handles.hide();
+ }
+ } );
+ }
+
+ this._mouseInit();
+ },
+
+ _destroy: function() {
+
+ this._mouseDestroy();
+
+ var wrapper,
+ _destroy = function( exp ) {
+ $( exp )
+ .removeData( "resizable" )
+ .removeData( "ui-resizable" )
+ .off( ".resizable" )
+ .find( ".ui-resizable-handle" )
+ .remove();
+ };
+
+ // TODO: Unwrap at same DOM position
+ if ( this.elementIsWrapper ) {
+ _destroy( this.element );
+ wrapper = this.element;
+ this.originalElement.css( {
+ position: wrapper.css( "position" ),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css( "top" ),
+ left: wrapper.css( "left" )
+ } ).insertAfter( wrapper );
+ wrapper.remove();
+ }
+
+ this.originalElement.css( "resize", this.originalResizeStyle );
+ _destroy( this.originalElement );
+
+ return this;
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+
+ switch ( key ) {
+ case "handles":
+ this._removeHandles();
+ this._setupHandles();
+ break;
+ default:
+ break;
+ }
+ },
+
+ _setupHandles: function() {
+ var o = this.options, handle, i, n, hname, axis, that = this;
+ this.handles = o.handles ||
+ ( !$( ".ui-resizable-handle", this.element ).length ?
+ "e,s,se" : {
+ n: ".ui-resizable-n",
+ e: ".ui-resizable-e",
+ s: ".ui-resizable-s",
+ w: ".ui-resizable-w",
+ se: ".ui-resizable-se",
+ sw: ".ui-resizable-sw",
+ ne: ".ui-resizable-ne",
+ nw: ".ui-resizable-nw"
+ } );
+
+ this._handles = $();
+ if ( this.handles.constructor === String ) {
+
+ if ( this.handles === "all" ) {
+ this.handles = "n,e,s,w,se,sw,ne,nw";
+ }
+
+ n = this.handles.split( "," );
+ this.handles = {};
+
+ for ( i = 0; i < n.length; i++ ) {
+
+ handle = $.trim( n[ i ] );
+ hname = "ui-resizable-" + handle;
+ axis = $( "<div>" );
+ this._addClass( axis, "ui-resizable-handle " + hname );
+
+ axis.css( { zIndex: o.zIndex } );
+
+ this.handles[ handle ] = ".ui-resizable-" + handle;
+ this.element.append( axis );
+ }
+
+ }
+
+ this._renderAxis = function( target ) {
+
+ var i, axis, padPos, padWrapper;
+
+ target = target || this.element;
+
+ for ( i in this.handles ) {
+
+ if ( this.handles[ i ].constructor === String ) {
+ this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();
+ } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
+ this.handles[ i ] = $( this.handles[ i ] );
+ this._on( this.handles[ i ], { "mousedown": that._mouseDown } );
+ }
+
+ if ( this.elementIsWrapper &&
+ this.originalElement[ 0 ]
+ .nodeName
+ .match( /^(textarea|input|select|button)$/i ) ) {
+ axis = $( this.handles[ i ], this.element );
+
+ padWrapper = /sw|ne|nw|se|n|s/.test( i ) ?
+ axis.outerHeight() :
+ axis.outerWidth();
+
+ padPos = [ "padding",
+ /ne|nw|n/.test( i ) ? "Top" :
+ /se|sw|s/.test( i ) ? "Bottom" :
+ /^e$/.test( i ) ? "Right" : "Left" ].join( "" );
+
+ target.css( padPos, padWrapper );
+
+ this._proportionallyResize();
+ }
+
+ this._handles = this._handles.add( this.handles[ i ] );
+ }
+ };
+
+ // TODO: make renderAxis a prototype function
+ this._renderAxis( this.element );
+
+ this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
+ this._handles.disableSelection();
+
+ this._handles.on( "mouseover", function() {
+ if ( !that.resizing ) {
+ if ( this.className ) {
+ axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );
+ }
+ that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se";
+ }
+ } );
+
+ if ( o.autoHide ) {
+ this._handles.hide();
+ this._addClass( "ui-resizable-autohide" );
+ }
+ },
+
+ _removeHandles: function() {
+ this._handles.remove();
+ },
+
+ _mouseCapture: function( event ) {
+ var i, handle,
+ capture = false;
+
+ for ( i in this.handles ) {
+ handle = $( this.handles[ i ] )[ 0 ];
+ if ( handle === event.target || $.contains( handle, event.target ) ) {
+ capture = true;
+ }
+ }
+
+ return !this.options.disabled && capture;
+ },
+
+ _mouseStart: function( event ) {
+
+ var curleft, curtop, cursor,
+ o = this.options,
+ el = this.element;
+
+ this.resizing = true;
+
+ this._renderProxy();
+
+ curleft = this._num( this.helper.css( "left" ) );
+ curtop = this._num( this.helper.css( "top" ) );
+
+ if ( o.containment ) {
+ curleft += $( o.containment ).scrollLeft() || 0;
+ curtop += $( o.containment ).scrollTop() || 0;
+ }
+
+ this.offset = this.helper.offset();
+ this.position = { left: curleft, top: curtop };
+
+ this.size = this._helper ? {
+ width: this.helper.width(),
+ height: this.helper.height()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.originalSize = this._helper ? {
+ width: el.outerWidth(),
+ height: el.outerHeight()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.sizeDiff = {
+ width: el.outerWidth() - el.width(),
+ height: el.outerHeight() - el.height()
+ };
+
+ this.originalPosition = { left: curleft, top: curtop };
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+ this.aspectRatio = ( typeof o.aspectRatio === "number" ) ?
+ o.aspectRatio :
+ ( ( this.originalSize.width / this.originalSize.height ) || 1 );
+
+ cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" );
+ $( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor );
+
+ this._addClass( "ui-resizable-resizing" );
+ this._propagate( "start", event );
+ return true;
+ },
+
+ _mouseDrag: function( event ) {
+
+ var data, props,
+ smp = this.originalMousePosition,
+ a = this.axis,
+ dx = ( event.pageX - smp.left ) || 0,
+ dy = ( event.pageY - smp.top ) || 0,
+ trigger = this._change[ a ];
+
+ this._updatePrevProperties();
+
+ if ( !trigger ) {
+ return false;
+ }
+
+ data = trigger.apply( this, [ event, dx, dy ] );
+
+ this._updateVirtualBoundaries( event.shiftKey );
+ if ( this._aspectRatio || event.shiftKey ) {
+ data = this._updateRatio( data, event );
+ }
+
+ data = this._respectSize( data, event );
+
+ this._updateCache( data );
+
+ this._propagate( "resize", event );
+
+ props = this._applyChanges();
+
+ if ( !this._helper && this._proportionallyResizeElements.length ) {
+ this._proportionallyResize();
+ }
+
+ if ( !$.isEmptyObject( props ) ) {
+ this._updatePrevProperties();
+ this._trigger( "resize", event, this.ui() );
+ this._applyChanges();
+ }
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+
+ this.resizing = false;
+ var pr, ista, soffseth, soffsetw, s, left, top,
+ o = this.options, that = this;
+
+ if ( this._helper ) {
+
+ pr = this._proportionallyResizeElements;
+ ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );
+ soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height;
+ soffsetw = ista ? 0 : that.sizeDiff.width;
+
+ s = {
+ width: ( that.helper.width() - soffsetw ),
+ height: ( that.helper.height() - soffseth )
+ };
+ left = ( parseFloat( that.element.css( "left" ) ) +
+ ( that.position.left - that.originalPosition.left ) ) || null;
+ top = ( parseFloat( that.element.css( "top" ) ) +
+ ( that.position.top - that.originalPosition.top ) ) || null;
+
+ if ( !o.animate ) {
+ this.element.css( $.extend( s, { top: top, left: left } ) );
+ }
+
+ that.helper.height( that.size.height );
+ that.helper.width( that.size.width );
+
+ if ( this._helper && !o.animate ) {
+ this._proportionallyResize();
+ }
+ }
+
+ $( "body" ).css( "cursor", "auto" );
+
+ this._removeClass( "ui-resizable-resizing" );
+
+ this._propagate( "stop", event );
+
+ if ( this._helper ) {
+ this.helper.remove();
+ }
+
+ return false;
+
+ },
+
+ _updatePrevProperties: function() {
+ this.prevPosition = {
+ top: this.position.top,
+ left: this.position.left
+ };
+ this.prevSize = {
+ width: this.size.width,
+ height: this.size.height
+ };
+ },
+
+ _applyChanges: function() {
+ var props = {};
+
+ if ( this.position.top !== this.prevPosition.top ) {
+ props.top = this.position.top + "px";
+ }
+ if ( this.position.left !== this.prevPosition.left ) {
+ props.left = this.position.left + "px";
+ }
+ if ( this.size.width !== this.prevSize.width ) {
+ props.width = this.size.width + "px";
+ }
+ if ( this.size.height !== this.prevSize.height ) {
+ props.height = this.size.height + "px";
+ }
+
+ this.helper.css( props );
+
+ return props;
+ },
+
+ _updateVirtualBoundaries: function( forceAspectRatio ) {
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+ o = this.options;
+
+ b = {
+ minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,
+ maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,
+ minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,
+ maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity
+ };
+
+ if ( this._aspectRatio || forceAspectRatio ) {
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if ( pMinWidth > b.minWidth ) {
+ b.minWidth = pMinWidth;
+ }
+ if ( pMinHeight > b.minHeight ) {
+ b.minHeight = pMinHeight;
+ }
+ if ( pMaxWidth < b.maxWidth ) {
+ b.maxWidth = pMaxWidth;
+ }
+ if ( pMaxHeight < b.maxHeight ) {
+ b.maxHeight = pMaxHeight;
+ }
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function( data ) {
+ this.offset = this.helper.offset();
+ if ( this._isNumber( data.left ) ) {
+ this.position.left = data.left;
+ }
+ if ( this._isNumber( data.top ) ) {
+ this.position.top = data.top;
+ }
+ if ( this._isNumber( data.height ) ) {
+ this.size.height = data.height;
+ }
+ if ( this._isNumber( data.width ) ) {
+ this.size.width = data.width;
+ }
+ },
+
+ _updateRatio: function( data ) {
+
+ var cpos = this.position,
+ csize = this.size,
+ a = this.axis;
+
+ if ( this._isNumber( data.height ) ) {
+ data.width = ( data.height * this.aspectRatio );
+ } else if ( this._isNumber( data.width ) ) {
+ data.height = ( data.width / this.aspectRatio );
+ }
+
+ if ( a === "sw" ) {
+ data.left = cpos.left + ( csize.width - data.width );
+ data.top = null;
+ }
+ if ( a === "nw" ) {
+ data.top = cpos.top + ( csize.height - data.height );
+ data.left = cpos.left + ( csize.width - data.width );
+ }
+
+ return data;
+ },
+
+ _respectSize: function( data ) {
+
+ var o = this._vBoundaries,
+ a = this.axis,
+ ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),
+ ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),
+ isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),
+ isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),
+ dw = this.originalPosition.left + this.originalSize.width,
+ dh = this.originalPosition.top + this.originalSize.height,
+ cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );
+ if ( isminw ) {
+ data.width = o.minWidth;
+ }
+ if ( isminh ) {
+ data.height = o.minHeight;
+ }
+ if ( ismaxw ) {
+ data.width = o.maxWidth;
+ }
+ if ( ismaxh ) {
+ data.height = o.maxHeight;
+ }
+
+ if ( isminw && cw ) {
+ data.left = dw - o.minWidth;
+ }
+ if ( ismaxw && cw ) {
+ data.left = dw - o.maxWidth;
+ }
+ if ( isminh && ch ) {
+ data.top = dh - o.minHeight;
+ }
+ if ( ismaxh && ch ) {
+ data.top = dh - o.maxHeight;
+ }
+
+ // Fixing jump error on top/left - bug #2330
+ if ( !data.width && !data.height && !data.left && data.top ) {
+ data.top = null;
+ } else if ( !data.width && !data.height && !data.top && data.left ) {
+ data.left = null;
+ }
+
+ return data;
+ },
+
+ _getPaddingPlusBorderDimensions: function( element ) {
+ var i = 0,
+ widths = [],
+ borders = [
+ element.css( "borderTopWidth" ),
+ element.css( "borderRightWidth" ),
+ element.css( "borderBottomWidth" ),
+ element.css( "borderLeftWidth" )
+ ],
+ paddings = [
+ element.css( "paddingTop" ),
+ element.css( "paddingRight" ),
+ element.css( "paddingBottom" ),
+ element.css( "paddingLeft" )
+ ];
+
+ for ( ; i < 4; i++ ) {
+ widths[ i ] = ( parseFloat( borders[ i ] ) || 0 );
+ widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );
+ }
+
+ return {
+ height: widths[ 0 ] + widths[ 2 ],
+ width: widths[ 1 ] + widths[ 3 ]
+ };
+ },
+
+ _proportionallyResize: function() {
+
+ if ( !this._proportionallyResizeElements.length ) {
+ return;
+ }
+
+ var prel,
+ i = 0,
+ element = this.helper || this.element;
+
+ for ( ; i < this._proportionallyResizeElements.length; i++ ) {
+
+ prel = this._proportionallyResizeElements[ i ];
+
+ // TODO: Seems like a bug to cache this.outerDimensions
+ // considering that we are in a loop.
+ if ( !this.outerDimensions ) {
+ this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
+ }
+
+ prel.css( {
+ height: ( element.height() - this.outerDimensions.height ) || 0,
+ width: ( element.width() - this.outerDimensions.width ) || 0
+ } );
+
+ }
+
+ },
+
+ _renderProxy: function() {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if ( this._helper ) {
+
+ this.helper = this.helper || $( "<div style='overflow:hidden;'></div>" );
+
+ this._addClass( this.helper, this._helper );
+ this.helper.css( {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ position: "absolute",
+ left: this.elementOffset.left + "px",
+ top: this.elementOffset.top + "px",
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ } );
+
+ this.helper
+ .appendTo( "body" )
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function( event, dx ) {
+ return { width: this.originalSize.width + dx };
+ },
+ w: function( event, dx ) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { left: sp.left + dx, width: cs.width - dx };
+ },
+ n: function( event, dx, dy ) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { top: sp.top + dy, height: cs.height - dy };
+ },
+ s: function( event, dx, dy ) {
+ return { height: this.originalSize.height + dy };
+ },
+ se: function( event, dx, dy ) {
+ return $.extend( this._change.s.apply( this, arguments ),
+ this._change.e.apply( this, [ event, dx, dy ] ) );
+ },
+ sw: function( event, dx, dy ) {
+ return $.extend( this._change.s.apply( this, arguments ),
+ this._change.w.apply( this, [ event, dx, dy ] ) );
+ },
+ ne: function( event, dx, dy ) {
+ return $.extend( this._change.n.apply( this, arguments ),
+ this._change.e.apply( this, [ event, dx, dy ] ) );
+ },
+ nw: function( event, dx, dy ) {
+ return $.extend( this._change.n.apply( this, arguments ),
+ this._change.w.apply( this, [ event, dx, dy ] ) );
+ }
+ },
+
+ _propagate: function( n, event ) {
+ $.ui.plugin.call( this, n, [ event, this.ui() ] );
+ ( n !== "resize" && this._trigger( n, event, this.ui() ) );
+ },
+
+ plugins: {},
+
+ ui: function() {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ };
+ }
+
+} );
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add( "resizable", "animate", {
+
+ stop: function( event ) {
+ var that = $( this ).resizable( "instance" ),
+ o = that.options,
+ pr = that._proportionallyResizeElements,
+ ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),
+ soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height,
+ soffsetw = ista ? 0 : that.sizeDiff.width,
+ style = {
+ width: ( that.size.width - soffsetw ),
+ height: ( that.size.height - soffseth )
+ },
+ left = ( parseFloat( that.element.css( "left" ) ) +
+ ( that.position.left - that.originalPosition.left ) ) || null,
+ top = ( parseFloat( that.element.css( "top" ) ) +
+ ( that.position.top - that.originalPosition.top ) ) || null;
+
+ that.element.animate(
+ $.extend( style, top && left ? { top: top, left: left } : {} ), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function() {
+
+ var data = {
+ width: parseFloat( that.element.css( "width" ) ),
+ height: parseFloat( that.element.css( "height" ) ),
+ top: parseFloat( that.element.css( "top" ) ),
+ left: parseFloat( that.element.css( "left" ) )
+ };
+
+ if ( pr && pr.length ) {
+ $( pr[ 0 ] ).css( { width: data.width, height: data.height } );
+ }
+
+ // Propagating resize, and updating values for each animation step
+ that._updateCache( data );
+ that._propagate( "resize", event );
+
+ }
+ }
+ );
+ }
+
+} );
+
+$.ui.plugin.add( "resizable", "containment", {
+
+ start: function() {
+ var element, p, co, ch, cw, width, height,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ el = that.element,
+ oc = o.containment,
+ ce = ( oc instanceof $ ) ?
+ oc.get( 0 ) :
+ ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
+
+ if ( !ce ) {
+ return;
+ }
+
+ that.containerElement = $( ce );
+
+ if ( /document/.test( oc ) || oc === document ) {
+ that.containerOffset = {
+ left: 0,
+ top: 0
+ };
+ that.containerPosition = {
+ left: 0,
+ top: 0
+ };
+
+ that.parentData = {
+ element: $( document ),
+ left: 0,
+ top: 0,
+ width: $( document ).width(),
+ height: $( document ).height() || document.body.parentNode.scrollHeight
+ };
+ } else {
+ element = $( ce );
+ p = [];
+ $( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) {
+ p[ i ] = that._num( element.css( "padding" + name ) );
+ } );
+
+ that.containerOffset = element.offset();
+ that.containerPosition = element.position();
+ that.containerSize = {
+ height: ( element.innerHeight() - p[ 3 ] ),
+ width: ( element.innerWidth() - p[ 1 ] )
+ };
+
+ co = that.containerOffset;
+ ch = that.containerSize.height;
+ cw = that.containerSize.width;
+ width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+ height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
+
+ that.parentData = {
+ element: ce,
+ left: co.left,
+ top: co.top,
+ width: width,
+ height: height
+ };
+ }
+ },
+
+ resize: function( event ) {
+ var woset, hoset, isParent, isOffsetRelative,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cp = that.position,
+ pRatio = that._aspectRatio || event.shiftKey,
+ cop = {
+ top: 0,
+ left: 0
+ },
+ ce = that.containerElement,
+ continueResize = true;
+
+ if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
+ cop = co;
+ }
+
+ if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+ that.size.width = that.size.width +
+ ( that._helper ?
+ ( that.position.left - co.left ) :
+ ( that.position.left - cop.left ) );
+
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.left = o.helper ? co.left : 0;
+ }
+
+ if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+ that.size.height = that.size.height +
+ ( that._helper ?
+ ( that.position.top - co.top ) :
+ that.position.top );
+
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.top = that._helper ? co.top : 0;
+ }
+
+ isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+ isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
+
+ if ( isParent && isOffsetRelative ) {
+ that.offset.left = that.parentData.left + that.position.left;
+ that.offset.top = that.parentData.top + that.position.top;
+ } else {
+ that.offset.left = that.element.offset().left;
+ that.offset.top = that.element.offset().top;
+ }
+
+ woset = Math.abs( that.sizeDiff.width +
+ ( that._helper ?
+ that.offset.left - cop.left :
+ ( that.offset.left - co.left ) ) );
+
+ hoset = Math.abs( that.sizeDiff.height +
+ ( that._helper ?
+ that.offset.top - cop.top :
+ ( that.offset.top - co.top ) ) );
+
+ if ( woset + that.size.width >= that.parentData.width ) {
+ that.size.width = that.parentData.width - woset;
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( hoset + that.size.height >= that.parentData.height ) {
+ that.size.height = that.parentData.height - hoset;
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( !continueResize ) {
+ that.position.left = that.prevPosition.left;
+ that.position.top = that.prevPosition.top;
+ that.size.width = that.prevSize.width;
+ that.size.height = that.prevSize.height;
+ }
+ },
+
+ stop: function() {
+ var that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cop = that.containerPosition,
+ ce = that.containerElement,
+ helper = $( that.helper ),
+ ho = helper.offset(),
+ w = helper.outerWidth() - that.sizeDiff.width,
+ h = helper.outerHeight() - that.sizeDiff.height;
+
+ if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css( {
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ } );
+ }
+
+ if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css( {
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ } );
+ }
+ }
+} );
+
+$.ui.plugin.add( "resizable", "alsoResize", {
+
+ start: function() {
+ var that = $( this ).resizable( "instance" ),
+ o = that.options;
+
+ $( o.alsoResize ).each( function() {
+ var el = $( this );
+ el.data( "ui-resizable-alsoresize", {
+ width: parseFloat( el.width() ), height: parseFloat( el.height() ),
+ left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )
+ } );
+ } );
+ },
+
+ resize: function( event, ui ) {
+ var that = $( this ).resizable( "instance" ),
+ o = that.options,
+ os = that.originalSize,
+ op = that.originalPosition,
+ delta = {
+ height: ( that.size.height - os.height ) || 0,
+ width: ( that.size.width - os.width ) || 0,
+ top: ( that.position.top - op.top ) || 0,
+ left: ( that.position.left - op.left ) || 0
+ };
+
+ $( o.alsoResize ).each( function() {
+ var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {},
+ css = el.parents( ui.originalElement[ 0 ] ).length ?
+ [ "width", "height" ] :
+ [ "width", "height", "top", "left" ];
+
+ $.each( css, function( i, prop ) {
+ var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );
+ if ( sum && sum >= 0 ) {
+ style[ prop ] = sum || null;
+ }
+ } );
+
+ el.css( style );
+ } );
+ },
+
+ stop: function() {
+ $( this ).removeData( "ui-resizable-alsoresize" );
+ }
+} );
+
+$.ui.plugin.add( "resizable", "ghost", {
+
+ start: function() {
+
+ var that = $( this ).resizable( "instance" ), cs = that.size;
+
+ that.ghost = that.originalElement.clone();
+ that.ghost.css( {
+ opacity: 0.25,
+ display: "block",
+ position: "relative",
+ height: cs.height,
+ width: cs.width,
+ margin: 0,
+ left: 0,
+ top: 0
+ } );
+
+ that._addClass( that.ghost, "ui-resizable-ghost" );
+
+ // DEPRECATED
+ // TODO: remove after 1.12
+ if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {
+
+ // Ghost option
+ that.ghost.addClass( this.options.ghost );
+ }
+
+ that.ghost.appendTo( that.helper );
+
+ },
+
+ resize: function() {
+ var that = $( this ).resizable( "instance" );
+ if ( that.ghost ) {
+ that.ghost.css( {
+ position: "relative",
+ height: that.size.height,
+ width: that.size.width
+ } );
+ }
+ },
+
+ stop: function() {
+ var that = $( this ).resizable( "instance" );
+ if ( that.ghost && that.helper ) {
+ that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );
+ }
+ }
+
+} );
+
+$.ui.plugin.add( "resizable", "grid", {
+
+ resize: function() {
+ var outerDimensions,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ cs = that.size,
+ os = that.originalSize,
+ op = that.originalPosition,
+ a = that.axis,
+ grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+ gridX = ( grid[ 0 ] || 1 ),
+ gridY = ( grid[ 1 ] || 1 ),
+ ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,
+ oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,
+ newWidth = os.width + ox,
+ newHeight = os.height + oy,
+ isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),
+ isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),
+ isMinWidth = o.minWidth && ( o.minWidth > newWidth ),
+ isMinHeight = o.minHeight && ( o.minHeight > newHeight );
+
+ o.grid = grid;
+
+ if ( isMinWidth ) {
+ newWidth += gridX;
+ }
+ if ( isMinHeight ) {
+ newHeight += gridY;
+ }
+ if ( isMaxWidth ) {
+ newWidth -= gridX;
+ }
+ if ( isMaxHeight ) {
+ newHeight -= gridY;
+ }
+
+ if ( /^(se|s|e)$/.test( a ) ) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ } else if ( /^(ne)$/.test( a ) ) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else if ( /^(sw)$/.test( a ) ) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.left = op.left - ox;
+ } else {
+ if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {
+ outerDimensions = that._getPaddingPlusBorderDimensions( this );
+ }
+
+ if ( newHeight - gridY > 0 ) {
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else {
+ newHeight = gridY - outerDimensions.height;
+ that.size.height = newHeight;
+ that.position.top = op.top + os.height - newHeight;
+ }
+ if ( newWidth - gridX > 0 ) {
+ that.size.width = newWidth;
+ that.position.left = op.left - ox;
+ } else {
+ newWidth = gridX - outerDimensions.width;
+ that.size.width = newWidth;
+ that.position.left = op.left + os.width - newWidth;
+ }
+ }
+ }
+
+} );
+
+var widgetsResizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Dialog 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Dialog
+//>>group: Widgets
+//>>description: Displays customizable dialog windows.
+//>>docs: http://api.jqueryui.com/dialog/
+//>>demos: http://jqueryui.com/dialog/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/dialog.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+$.widget( "ui.dialog", {
+ version: "1.12.1",
+ options: {
+ appendTo: "body",
+ autoOpen: true,
+ buttons: [],
+ classes: {
+ "ui-dialog": "ui-corner-all",
+ "ui-dialog-titlebar": "ui-corner-all"
+ },
+ closeOnEscape: true,
+ closeText: "Close",
+ draggable: true,
+ hide: null,
+ height: "auto",
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: "center",
+ at: "center",
+ of: window,
+ collision: "fit",
+
+ // Ensure the titlebar is always visible
+ using: function( pos ) {
+ var topOffset = $( this ).css( pos ).offset().top;
+ if ( topOffset < 0 ) {
+ $( this ).css( "top", pos.top - topOffset );
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ title: null,
+ width: 300,
+
+ // Callbacks
+ beforeClose: null,
+ close: null,
+ drag: null,
+ dragStart: null,
+ dragStop: null,
+ focus: null,
+ open: null,
+ resize: null,
+ resizeStart: null,
+ resizeStop: null
+ },
+
+ sizeRelatedOptions: {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+
+ resizableRelatedOptions: {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ },
+
+ _create: function() {
+ this.originalCss = {
+ display: this.element[ 0 ].style.display,
+ width: this.element[ 0 ].style.width,
+ minHeight: this.element[ 0 ].style.minHeight,
+ maxHeight: this.element[ 0 ].style.maxHeight,
+ height: this.element[ 0 ].style.height
+ };
+ this.originalPosition = {
+ parent: this.element.parent(),
+ index: this.element.parent().children().index( this.element )
+ };
+ this.originalTitle = this.element.attr( "title" );
+ if ( this.options.title == null && this.originalTitle != null ) {
+ this.options.title = this.originalTitle;
+ }
+
+ // Dialogs can't be disabled
+ if ( this.options.disabled ) {
+ this.options.disabled = false;
+ }
+
+ this._createWrapper();
+
+ this.element
+ .show()
+ .removeAttr( "title" )
+ .appendTo( this.uiDialog );
+
+ this._addClass( "ui-dialog-content", "ui-widget-content" );
+
+ this._createTitlebar();
+ this._createButtonPane();
+
+ if ( this.options.draggable && $.fn.draggable ) {
+ this._makeDraggable();
+ }
+ if ( this.options.resizable && $.fn.resizable ) {
+ this._makeResizable();
+ }
+
+ this._isOpen = false;
+
+ this._trackFocus();
+ },
+
+ _init: function() {
+ if ( this.options.autoOpen ) {
+ this.open();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+ if ( element && ( element.jquery || element.nodeType ) ) {
+ return $( element );
+ }
+ return this.document.find( element || "body" ).eq( 0 );
+ },
+
+ _destroy: function() {
+ var next,
+ originalPosition = this.originalPosition;
+
+ this._untrackInstance();
+ this._destroyOverlay();
+
+ this.element
+ .removeUniqueId()
+ .css( this.originalCss )
+
+ // Without detaching first, the following becomes really slow
+ .detach();
+
+ this.uiDialog.remove();
+
+ if ( this.originalTitle ) {
+ this.element.attr( "title", this.originalTitle );
+ }
+
+ next = originalPosition.parent.children().eq( originalPosition.index );
+
+ // Don't try to place the dialog next to itself (#8613)
+ if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+ next.before( this.element );
+ } else {
+ originalPosition.parent.append( this.element );
+ }
+ },
+
+ widget: function() {
+ return this.uiDialog;
+ },
+
+ disable: $.noop,
+ enable: $.noop,
+
+ close: function( event ) {
+ var that = this;
+
+ if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+ return;
+ }
+
+ this._isOpen = false;
+ this._focusedElement = null;
+ this._destroyOverlay();
+ this._untrackInstance();
+
+ if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) {
+
+ // Hiding a focused element doesn't trigger blur in WebKit
+ // so in case we have nothing to focus on, explicitly blur the active element
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
+ $.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );
+ }
+
+ this._hide( this.uiDialog, this.options.hide, function() {
+ that._trigger( "close", event );
+ } );
+ },
+
+ isOpen: function() {
+ return this._isOpen;
+ },
+
+ moveToTop: function() {
+ this._moveToTop();
+ },
+
+ _moveToTop: function( event, silent ) {
+ var moved = false,
+ zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() {
+ return +$( this ).css( "z-index" );
+ } ).get(),
+ zIndexMax = Math.max.apply( null, zIndices );
+
+ if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+ this.uiDialog.css( "z-index", zIndexMax + 1 );
+ moved = true;
+ }
+
+ if ( moved && !silent ) {
+ this._trigger( "focus", event );
+ }
+ return moved;
+ },
+
+ open: function() {
+ var that = this;
+ if ( this._isOpen ) {
+ if ( this._moveToTop() ) {
+ this._focusTabbable();
+ }
+ return;
+ }
+
+ this._isOpen = true;
+ this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
+
+ this._size();
+ this._position();
+ this._createOverlay();
+ this._moveToTop( null, true );
+
+ // Ensure the overlay is moved to the top with the dialog, but only when
+ // opening. The overlay shouldn't move after the dialog is open so that
+ // modeless dialogs opened after the modal dialog stack properly.
+ if ( this.overlay ) {
+ this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+ }
+
+ this._show( this.uiDialog, this.options.show, function() {
+ that._focusTabbable();
+ that._trigger( "focus" );
+ } );
+
+ // Track the dialog immediately upon openening in case a focus event
+ // somehow occurs outside of the dialog before an element inside the
+ // dialog is focused (#10152)
+ this._makeFocusTarget();
+
+ this._trigger( "open" );
+ },
+
+ _focusTabbable: function() {
+
+ // Set focus to the first match:
+ // 1. An element that was focused previously
+ // 2. First element inside the dialog matching [autofocus]
+ // 3. Tabbable element inside the content element
+ // 4. Tabbable element inside the buttonpane
+ // 5. The close button
+ // 6. The dialog itself
+ var hasFocus = this._focusedElement;
+ if ( !hasFocus ) {
+ hasFocus = this.element.find( "[autofocus]" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.element.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialog;
+ }
+ hasFocus.eq( 0 ).trigger( "focus" );
+ },
+
+ _keepFocus: function( event ) {
+ function checkFocus() {
+ var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
+ isActive = this.uiDialog[ 0 ] === activeElement ||
+ $.contains( this.uiDialog[ 0 ], activeElement );
+ if ( !isActive ) {
+ this._focusTabbable();
+ }
+ }
+ event.preventDefault();
+ checkFocus.call( this );
+
+ // support: IE
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+ // so we check again later
+ this._delay( checkFocus );
+ },
+
+ _createWrapper: function() {
+ this.uiDialog = $( "<div>" )
+ .hide()
+ .attr( {
+
+ // Setting tabIndex makes the div focusable
+ tabIndex: -1,
+ role: "dialog"
+ } )
+ .appendTo( this._appendTo() );
+
+ this._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" );
+ this._on( this.uiDialog, {
+ keydown: function( event ) {
+ if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE ) {
+ event.preventDefault();
+ this.close( event );
+ return;
+ }
+
+ // Prevent tabbing out of dialogs
+ if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
+ return;
+ }
+ var tabbables = this.uiDialog.find( ":tabbable" ),
+ first = tabbables.filter( ":first" ),
+ last = tabbables.filter( ":last" );
+
+ if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&
+ !event.shiftKey ) {
+ this._delay( function() {
+ first.trigger( "focus" );
+ } );
+ event.preventDefault();
+ } else if ( ( event.target === first[ 0 ] ||
+ event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {
+ this._delay( function() {
+ last.trigger( "focus" );
+ } );
+ event.preventDefault();
+ }
+ },
+ mousedown: function( event ) {
+ if ( this._moveToTop( event ) ) {
+ this._focusTabbable();
+ }
+ }
+ } );
+
+ // We assume that any existing aria-describedby attribute means
+ // that the dialog content is marked up properly
+ // otherwise we brute force the content as the description
+ if ( !this.element.find( "[aria-describedby]" ).length ) {
+ this.uiDialog.attr( {
+ "aria-describedby": this.element.uniqueId().attr( "id" )
+ } );
+ }
+ },
+
+ _createTitlebar: function() {
+ var uiDialogTitle;
+
+ this.uiDialogTitlebar = $( "<div>" );
+ this._addClass( this.uiDialogTitlebar,
+ "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" );
+ this._on( this.uiDialogTitlebar, {
+ mousedown: function( event ) {
+
+ // Don't prevent click on close button (#8838)
+ // Focusing a dialog that is partially scrolled out of view
+ // causes the browser to scroll it into view, preventing the click event
+ if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
+
+ // Dialog isn't getting focus when dragging (#8063)
+ this.uiDialog.trigger( "focus" );
+ }
+ }
+ } );
+
+ // Support: IE
+ // Use type="button" to prevent enter keypresses in textboxes from closing the
+ // dialog in IE (#9312)
+ this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
+ .button( {
+ label: $( "<a>" ).text( this.options.closeText ).html(),
+ icon: "ui-icon-closethick",
+ showLabel: false
+ } )
+ .appendTo( this.uiDialogTitlebar );
+
+ this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" );
+ this._on( this.uiDialogTitlebarClose, {
+ click: function( event ) {
+ event.preventDefault();
+ this.close( event );
+ }
+ } );
+
+ uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );
+ this._addClass( uiDialogTitle, "ui-dialog-title" );
+ this._title( uiDialogTitle );
+
+ this.uiDialogTitlebar.prependTo( this.uiDialog );
+
+ this.uiDialog.attr( {
+ "aria-labelledby": uiDialogTitle.attr( "id" )
+ } );
+ },
+
+ _title: function( title ) {
+ if ( this.options.title ) {
+ title.text( this.options.title );
+ } else {
+ title.html( " " );
+ }
+ },
+
+ _createButtonPane: function() {
+ this.uiDialogButtonPane = $( "<div>" );
+ this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane",
+ "ui-widget-content ui-helper-clearfix" );
+
+ this.uiButtonSet = $( "<div>" )
+ .appendTo( this.uiDialogButtonPane );
+ this._addClass( this.uiButtonSet, "ui-dialog-buttonset" );
+
+ this._createButtons();
+ },
+
+ _createButtons: function() {
+ var that = this,
+ buttons = this.options.buttons;
+
+ // If we already have a button pane, remove it
+ this.uiDialogButtonPane.remove();
+ this.uiButtonSet.empty();
+
+ if ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {
+ this._removeClass( this.uiDialog, "ui-dialog-buttons" );
+ return;
+ }
+
+ $.each( buttons, function( name, props ) {
+ var click, buttonOptions;
+ props = $.isFunction( props ) ?
+ { click: props, text: name } :
+ props;
+
+ // Default to a non-submitting button
+ props = $.extend( { type: "button" }, props );
+
+ // Change the context for the click callback to be the main element
+ click = props.click;
+ buttonOptions = {
+ icon: props.icon,
+ iconPosition: props.iconPosition,
+ showLabel: props.showLabel,
+
+ // Deprecated options
+ icons: props.icons,
+ text: props.text
+ };
+
+ delete props.click;
+ delete props.icon;
+ delete props.iconPosition;
+ delete props.showLabel;
+
+ // Deprecated options
+ delete props.icons;
+ if ( typeof props.text === "boolean" ) {
+ delete props.text;
+ }
+
+ $( "<button></button>", props )
+ .button( buttonOptions )
+ .appendTo( that.uiButtonSet )
+ .on( "click", function() {
+ click.apply( that.element[ 0 ], arguments );
+ } );
+ } );
+ this._addClass( this.uiDialog, "ui-dialog-buttons" );
+ this.uiDialogButtonPane.appendTo( this.uiDialog );
+ },
+
+ _makeDraggable: function() {
+ var that = this,
+ options = this.options;
+
+ function filteredUi( ui ) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ this.uiDialog.draggable( {
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+ handle: ".ui-dialog-titlebar",
+ containment: "document",
+ start: function( event, ui ) {
+ that._addClass( $( this ), "ui-dialog-dragging" );
+ that._blockFrames();
+ that._trigger( "dragStart", event, filteredUi( ui ) );
+ },
+ drag: function( event, ui ) {
+ that._trigger( "drag", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var left = ui.offset.left - that.document.scrollLeft(),
+ top = ui.offset.top - that.document.scrollTop();
+
+ options.position = {
+ my: "left top",
+ at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
+ "top" + ( top >= 0 ? "+" : "" ) + top,
+ of: that.window
+ };
+ that._removeClass( $( this ), "ui-dialog-dragging" );
+ that._unblockFrames();
+ that._trigger( "dragStop", event, filteredUi( ui ) );
+ }
+ } );
+ },
+
+ _makeResizable: function() {
+ var that = this,
+ options = this.options,
+ handles = options.resizable,
+
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = this.uiDialog.css( "position" ),
+ resizeHandles = typeof handles === "string" ?
+ handles :
+ "n,e,s,w,se,sw,ne,nw";
+
+ function filteredUi( ui ) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ this.uiDialog.resizable( {
+ cancel: ".ui-dialog-content",
+ containment: "document",
+ alsoResize: this.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: this._minHeight(),
+ handles: resizeHandles,
+ start: function( event, ui ) {
+ that._addClass( $( this ), "ui-dialog-resizing" );
+ that._blockFrames();
+ that._trigger( "resizeStart", event, filteredUi( ui ) );
+ },
+ resize: function( event, ui ) {
+ that._trigger( "resize", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var offset = that.uiDialog.offset(),
+ left = offset.left - that.document.scrollLeft(),
+ top = offset.top - that.document.scrollTop();
+
+ options.height = that.uiDialog.height();
+ options.width = that.uiDialog.width();
+ options.position = {
+ my: "left top",
+ at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
+ "top" + ( top >= 0 ? "+" : "" ) + top,
+ of: that.window
+ };
+ that._removeClass( $( this ), "ui-dialog-resizing" );
+ that._unblockFrames();
+ that._trigger( "resizeStop", event, filteredUi( ui ) );
+ }
+ } )
+ .css( "position", position );
+ },
+
+ _trackFocus: function() {
+ this._on( this.widget(), {
+ focusin: function( event ) {
+ this._makeFocusTarget();
+ this._focusedElement = $( event.target );
+ }
+ } );
+ },
+
+ _makeFocusTarget: function() {
+ this._untrackInstance();
+ this._trackingInstances().unshift( this );
+ },
+
+ _untrackInstance: function() {
+ var instances = this._trackingInstances(),
+ exists = $.inArray( this, instances );
+ if ( exists !== -1 ) {
+ instances.splice( exists, 1 );
+ }
+ },
+
+ _trackingInstances: function() {
+ var instances = this.document.data( "ui-dialog-instances" );
+ if ( !instances ) {
+ instances = [];
+ this.document.data( "ui-dialog-instances", instances );
+ }
+ return instances;
+ },
+
+ _minHeight: function() {
+ var options = this.options;
+
+ return options.height === "auto" ?
+ options.minHeight :
+ Math.min( options.minHeight, options.height );
+ },
+
+ _position: function() {
+
+ // Need to show the dialog to get the actual offset in the position plugin
+ var isVisible = this.uiDialog.is( ":visible" );
+ if ( !isVisible ) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position( this.options.position );
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function( options ) {
+ var that = this,
+ resize = false,
+ resizableOptions = {};
+
+ $.each( options, function( key, value ) {
+ that._setOption( key, value );
+
+ if ( key in that.sizeRelatedOptions ) {
+ resize = true;
+ }
+ if ( key in that.resizableRelatedOptions ) {
+ resizableOptions[ key ] = value;
+ }
+ } );
+
+ if ( resize ) {
+ this._size();
+ this._position();
+ }
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", resizableOptions );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var isDraggable, isResizable,
+ uiDialog = this.uiDialog;
+
+ if ( key === "disabled" ) {
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.uiDialog.appendTo( this._appendTo() );
+ }
+
+ if ( key === "buttons" ) {
+ this._createButtons();
+ }
+
+ if ( key === "closeText" ) {
+ this.uiDialogTitlebarClose.button( {
+
+ // Ensure that we always pass a string
+ label: $( "<a>" ).text( "" + this.options.closeText ).html()
+ } );
+ }
+
+ if ( key === "draggable" ) {
+ isDraggable = uiDialog.is( ":data(ui-draggable)" );
+ if ( isDraggable && !value ) {
+ uiDialog.draggable( "destroy" );
+ }
+
+ if ( !isDraggable && value ) {
+ this._makeDraggable();
+ }
+ }
+
+ if ( key === "position" ) {
+ this._position();
+ }
+
+ if ( key === "resizable" ) {
+
+ // currently resizable, becoming non-resizable
+ isResizable = uiDialog.is( ":data(ui-resizable)" );
+ if ( isResizable && !value ) {
+ uiDialog.resizable( "destroy" );
+ }
+
+ // Currently resizable, changing handles
+ if ( isResizable && typeof value === "string" ) {
+ uiDialog.resizable( "option", "handles", value );
+ }
+
+ // Currently non-resizable, becoming resizable
+ if ( !isResizable && value !== false ) {
+ this._makeResizable();
+ }
+ }
+
+ if ( key === "title" ) {
+ this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
+ }
+ },
+
+ _size: function() {
+
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ // divs will both have width and height set, so we need to reset them
+ var nonContentHeight, minContentHeight, maxContentHeight,
+ options = this.options;
+
+ // Reset content sizing
+ this.element.show().css( {
+ width: "auto",
+ minHeight: 0,
+ maxHeight: "none",
+ height: 0
+ } );
+
+ if ( options.minWidth > options.width ) {
+ options.width = options.minWidth;
+ }
+
+ // Reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css( {
+ height: "auto",
+ width: options.width
+ } )
+ .outerHeight();
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+ maxContentHeight = typeof options.maxHeight === "number" ?
+ Math.max( 0, options.maxHeight - nonContentHeight ) :
+ "none";
+
+ if ( options.height === "auto" ) {
+ this.element.css( {
+ minHeight: minContentHeight,
+ maxHeight: maxContentHeight,
+ height: "auto"
+ } );
+ } else {
+ this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+ }
+
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+ }
+ },
+
+ _blockFrames: function() {
+ this.iframeBlocks = this.document.find( "iframe" ).map( function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css( {
+ position: "absolute",
+ width: iframe.outerWidth(),
+ height: iframe.outerHeight()
+ } )
+ .appendTo( iframe.parent() )
+ .offset( iframe.offset() )[ 0 ];
+ } );
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _allowInteraction: function( event ) {
+ if ( $( event.target ).closest( ".ui-dialog" ).length ) {
+ return true;
+ }
+
+ // TODO: Remove hack when datepicker implements
+ // the .ui-front logic (#8989)
+ return !!$( event.target ).closest( ".ui-datepicker" ).length;
+ },
+
+ _createOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ // We use a delay in case the overlay is created from an
+ // event that we're going to be cancelling (#2804)
+ var isOpening = true;
+ this._delay( function() {
+ isOpening = false;
+ } );
+
+ if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+ // Prevent use of anchors and inputs
+ // Using _on() for an event handler shared across many instances is
+ // safe because the dialogs stack and must be closed in reverse order
+ this._on( this.document, {
+ focusin: function( event ) {
+ if ( isOpening ) {
+ return;
+ }
+
+ if ( !this._allowInteraction( event ) ) {
+ event.preventDefault();
+ this._trackingInstances()[ 0 ]._focusTabbable();
+ }
+ }
+ } );
+ }
+
+ this.overlay = $( "<div>" )
+ .appendTo( this._appendTo() );
+
+ this._addClass( this.overlay, null, "ui-widget-overlay ui-front" );
+ this._on( this.overlay, {
+ mousedown: "_keepFocus"
+ } );
+ this.document.data( "ui-dialog-overlays",
+ ( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 );
+ },
+
+ _destroyOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ if ( this.overlay ) {
+ var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
+
+ if ( !overlays ) {
+ this._off( this.document, "focusin" );
+ this.document.removeData( "ui-dialog-overlays" );
+ } else {
+ this.document.data( "ui-dialog-overlays", overlays );
+ }
+
+ this.overlay.remove();
+ this.overlay = null;
+ }
+ }
+} );
+
+// DEPRECATED
+// TODO: switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+ // Backcompat for dialogClass option
+ $.widget( "ui.dialog", $.ui.dialog, {
+ options: {
+ dialogClass: ""
+ },
+ _createWrapper: function() {
+ this._super();
+ this.uiDialog.addClass( this.options.dialogClass );
+ },
+ _setOption: function( key, value ) {
+ if ( key === "dialogClass" ) {
+ this.uiDialog
+ .removeClass( this.options.dialogClass )
+ .addClass( value );
+ }
+ this._superApply( arguments );
+ }
+ } );
+}
+
+var widgetsDialog = $.ui.dialog;
+
+
+/*!
+ * jQuery UI Droppable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Droppable
+//>>group: Interactions
+//>>description: Enables drop targets for draggable elements.
+//>>docs: http://api.jqueryui.com/droppable/
+//>>demos: http://jqueryui.com/droppable/
+
+
+
+$.widget( "ui.droppable", {
+ version: "1.12.1",
+ widgetEventPrefix: "drop",
+ options: {
+ accept: "*",
+ addClasses: true,
+ greedy: false,
+ scope: "default",
+ tolerance: "intersect",
+
+ // Callbacks
+ activate: null,
+ deactivate: null,
+ drop: null,
+ out: null,
+ over: null
+ },
+ _create: function() {
+
+ var proportions,
+ o = this.options,
+ accept = o.accept;
+
+ this.isover = false;
+ this.isout = true;
+
+ this.accept = $.isFunction( accept ) ? accept : function( d ) {
+ return d.is( accept );
+ };
+
+ this.proportions = function( /* valueToWrite */ ) {
+ if ( arguments.length ) {
+
+ // Store the droppable's proportions
+ proportions = arguments[ 0 ];
+ } else {
+
+ // Retrieve or derive the droppable's proportions
+ return proportions ?
+ proportions :
+ proportions = {
+ width: this.element[ 0 ].offsetWidth,
+ height: this.element[ 0 ].offsetHeight
+ };
+ }
+ };
+
+ this._addToManager( o.scope );
+
+ o.addClasses && this._addClass( "ui-droppable" );
+
+ },
+
+ _addToManager: function( scope ) {
+
+ // Add the reference and positions to the manager
+ $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+ $.ui.ddmanager.droppables[ scope ].push( this );
+ },
+
+ _splice: function( drop ) {
+ var i = 0;
+ for ( ; i < drop.length; i++ ) {
+ if ( drop[ i ] === this ) {
+ drop.splice( i, 1 );
+ }
+ }
+ },
+
+ _destroy: function() {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+ },
+
+ _setOption: function( key, value ) {
+
+ if ( key === "accept" ) {
+ this.accept = $.isFunction( value ) ? value : function( d ) {
+ return d.is( value );
+ };
+ } else if ( key === "scope" ) {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+ this._addToManager( value );
+ }
+
+ this._super( key, value );
+ },
+
+ _activate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+
+ this._addActiveClass();
+ if ( draggable ) {
+ this._trigger( "activate", event, this.ui( draggable ) );
+ }
+ },
+
+ _deactivate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+
+ this._removeActiveClass();
+ if ( draggable ) {
+ this._trigger( "deactivate", event, this.ui( draggable ) );
+ }
+ },
+
+ _over: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem ||
+ draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
+ draggable.element ) ) ) {
+ this._addHoverClass();
+ this._trigger( "over", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _out: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem ||
+ draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||
+ draggable.element ) ) ) {
+ this._removeHoverClass();
+ this._trigger( "out", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _drop: function( event, custom ) {
+
+ var draggable = custom || $.ui.ddmanager.current,
+ childrenIntersection = false;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem ||
+ draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return false;
+ }
+
+ this.element
+ .find( ":data(ui-droppable)" )
+ .not( ".ui-draggable-dragging" )
+ .each( function() {
+ var inst = $( this ).droppable( "instance" );
+ if (
+ inst.options.greedy &&
+ !inst.options.disabled &&
+ inst.options.scope === draggable.options.scope &&
+ inst.accept.call(
+ inst.element[ 0 ], ( draggable.currentItem || draggable.element )
+ ) &&
+ intersect(
+ draggable,
+ $.extend( inst, { offset: inst.element.offset() } ),
+ inst.options.tolerance, event
+ )
+ ) {
+ childrenIntersection = true;
+ return false; }
+ } );
+ if ( childrenIntersection ) {
+ return false;
+ }
+
+ if ( this.accept.call( this.element[ 0 ],
+ ( draggable.currentItem || draggable.element ) ) ) {
+ this._removeActiveClass();
+ this._removeHoverClass();
+
+ this._trigger( "drop", event, this.ui( draggable ) );
+ return this.element;
+ }
+
+ return false;
+
+ },
+
+ ui: function( c ) {
+ return {
+ draggable: ( c.currentItem || c.element ),
+ helper: c.helper,
+ position: c.position,
+ offset: c.positionAbs
+ };
+ },
+
+ // Extension points just to make backcompat sane and avoid duplicating logic
+ // TODO: Remove in 1.13 along with call to it below
+ _addHoverClass: function() {
+ this._addClass( "ui-droppable-hover" );
+ },
+
+ _removeHoverClass: function() {
+ this._removeClass( "ui-droppable-hover" );
+ },
+
+ _addActiveClass: function() {
+ this._addClass( "ui-droppable-active" );
+ },
+
+ _removeActiveClass: function() {
+ this._removeClass( "ui-droppable-active" );
+ }
+} );
+
+var intersect = $.ui.intersect = ( function() {
+ function isOverAxis( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ }
+
+ return function( draggable, droppable, toleranceMode, event ) {
+
+ if ( !droppable.offset ) {
+ return false;
+ }
+
+ var x1 = ( draggable.positionAbs ||
+ draggable.position.absolute ).left + draggable.margins.left,
+ y1 = ( draggable.positionAbs ||
+ draggable.position.absolute ).top + draggable.margins.top,
+ x2 = x1 + draggable.helperProportions.width,
+ y2 = y1 + draggable.helperProportions.height,
+ l = droppable.offset.left,
+ t = droppable.offset.top,
+ r = l + droppable.proportions().width,
+ b = t + droppable.proportions().height;
+
+ switch ( toleranceMode ) {
+ case "fit":
+ return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+ case "intersect":
+ return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+ x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+ t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+ y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+ case "pointer":
+ return isOverAxis( event.pageY, t, droppable.proportions().height ) &&
+ isOverAxis( event.pageX, l, droppable.proportions().width );
+ case "touch":
+ return (
+ ( y1 >= t && y1 <= b ) || // Top edge touching
+ ( y2 >= t && y2 <= b ) || // Bottom edge touching
+ ( y1 < t && y2 > b ) // Surrounded vertically
+ ) && (
+ ( x1 >= l && x1 <= r ) || // Left edge touching
+ ( x2 >= l && x2 <= r ) || // Right edge touching
+ ( x1 < l && x2 > r ) // Surrounded horizontally
+ );
+ default:
+ return false;
+ }
+ };
+} )();
+
+/*
+ This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+ current: null,
+ droppables: { "default": [] },
+ prepareOffsets: function( t, event ) {
+
+ var i, j,
+ m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
+ type = event ? event.type : null, // workaround for #2317
+ list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
+
+ droppablesLoop: for ( i = 0; i < m.length; i++ ) {
+
+ // No disabled and non-accepted
+ if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],
+ ( t.currentItem || t.element ) ) ) ) {
+ continue;
+ }
+
+ // Filter out elements in the current dragged item
+ for ( j = 0; j < list.length; j++ ) {
+ if ( list[ j ] === m[ i ].element[ 0 ] ) {
+ m[ i ].proportions().height = 0;
+ continue droppablesLoop;
+ }
+ }
+
+ m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+ if ( !m[ i ].visible ) {
+ continue;
+ }
+
+ // Activate the droppable if used directly from draggables
+ if ( type === "mousedown" ) {
+ m[ i ]._activate.call( m[ i ], event );
+ }
+
+ m[ i ].offset = m[ i ].element.offset();
+ m[ i ].proportions( {
+ width: m[ i ].element[ 0 ].offsetWidth,
+ height: m[ i ].element[ 0 ].offsetHeight
+ } );
+
+ }
+
+ },
+ drop: function( draggable, event ) {
+
+ var dropped = false;
+
+ // Create a copy of the droppables in case the list changes during the drop (#9116)
+ $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
+
+ if ( !this.options ) {
+ return;
+ }
+ if ( !this.options.disabled && this.visible &&
+ intersect( draggable, this, this.options.tolerance, event ) ) {
+ dropped = this._drop.call( this, event ) || dropped;
+ }
+
+ if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],
+ ( draggable.currentItem || draggable.element ) ) ) {
+ this.isout = true;
+ this.isover = false;
+ this._deactivate.call( this, event );
+ }
+
+ } );
+ return dropped;
+
+ },
+ dragStart: function( draggable, event ) {
+
+ // Listen for scrolling so that if the dragging causes scrolling the position of the
+ // droppables can be recalculated (see #5003)
+ draggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() {
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ } );
+ },
+ drag: function( draggable, event ) {
+
+ // If you have a highly dynamic page, you might try this option. It renders positions
+ // every time you move the mouse.
+ if ( draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+
+ // Run through all droppables and check their positions based on specific tolerance options
+ $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
+
+ if ( this.options.disabled || this.greedyChild || !this.visible ) {
+ return;
+ }
+
+ var parentInstance, scope, parent,
+ intersects = intersect( draggable, this, this.options.tolerance, event ),
+ c = !intersects && this.isover ?
+ "isout" :
+ ( intersects && !this.isover ? "isover" : null );
+ if ( !c ) {
+ return;
+ }
+
+ if ( this.options.greedy ) {
+
+ // find droppable parents with same scope
+ scope = this.options.scope;
+ parent = this.element.parents( ":data(ui-droppable)" ).filter( function() {
+ return $( this ).droppable( "instance" ).options.scope === scope;
+ } );
+
+ if ( parent.length ) {
+ parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+ parentInstance.greedyChild = ( c === "isover" );
+ }
+ }
+
+ // We just moved into a greedy child
+ if ( parentInstance && c === "isover" ) {
+ parentInstance.isover = false;
+ parentInstance.isout = true;
+ parentInstance._out.call( parentInstance, event );
+ }
+
+ this[ c ] = true;
+ this[ c === "isout" ? "isover" : "isout" ] = false;
+ this[ c === "isover" ? "_over" : "_out" ].call( this, event );
+
+ // We just moved out of a greedy child
+ if ( parentInstance && c === "isout" ) {
+ parentInstance.isout = false;
+ parentInstance.isover = true;
+ parentInstance._over.call( parentInstance, event );
+ }
+ } );
+
+ },
+ dragStop: function( draggable, event ) {
+ draggable.element.parentsUntil( "body" ).off( "scroll.droppable" );
+
+ // Call prepareOffsets one final time since IE does not fire return scroll events when
+ // overflow was caused by drag (see #5003)
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ }
+};
+
+// DEPRECATED
+// TODO: switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+ // Backcompat for activeClass and hoverClass options
+ $.widget( "ui.droppable", $.ui.droppable, {
+ options: {
+ hoverClass: false,
+ activeClass: false
+ },
+ _addActiveClass: function() {
+ this._super();
+ if ( this.options.activeClass ) {
+ this.element.addClass( this.options.activeClass );
+ }
+ },
+ _removeActiveClass: function() {
+ this._super();
+ if ( this.options.activeClass ) {
+ this.element.removeClass( this.options.activeClass );
+ }
+ },
+ _addHoverClass: function() {
+ this._super();
+ if ( this.options.hoverClass ) {
+ this.element.addClass( this.options.hoverClass );
+ }
+ },
+ _removeHoverClass: function() {
+ this._super();
+ if ( this.options.hoverClass ) {
+ this.element.removeClass( this.options.hoverClass );
+ }
+ }
+ } );
+}
+
+var widgetsDroppable = $.ui.droppable;
+
+
+/*!
+ * jQuery UI Progressbar 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Progressbar
+//>>group: Widgets
+// jscs:disable maximumLineLength
+//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/progressbar/
+//>>demos: http://jqueryui.com/progressbar/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/progressbar.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsProgressbar = $.widget( "ui.progressbar", {
+ version: "1.12.1",
+ options: {
+ classes: {
+ "ui-progressbar": "ui-corner-all",
+ "ui-progressbar-value": "ui-corner-left",
+ "ui-progressbar-complete": "ui-corner-right"
+ },
+ max: 100,
+ value: 0,
+
+ change: null,
+ complete: null
+ },
+
+ min: 0,
+
+ _create: function() {
+
+ // Constrain initial value
+ this.oldValue = this.options.value = this._constrainedValue();
+
+ this.element.attr( {
+
+ // Only set static values; aria-valuenow and aria-valuemax are
+ // set inside _refreshValue()
+ role: "progressbar",
+ "aria-valuemin": this.min
+ } );
+ this._addClass( "ui-progressbar", "ui-widget ui-widget-content" );
+
+ this.valueDiv = $( "<div>" ).appendTo( this.element );
+ this._addClass( this.valueDiv, "ui-progressbar-value", "ui-widget-header" );
+ this._refreshValue();
+ },
+
+ _destroy: function() {
+ this.element.removeAttr( "role aria-valuemin aria-valuemax aria-valuenow" );
+
+ this.valueDiv.remove();
+ },
+
+ value: function( newValue ) {
+ if ( newValue === undefined ) {
+ return this.options.value;
+ }
+
+ this.options.value = this._constrainedValue( newValue );
+ this._refreshValue();
+ },
+
+ _constrainedValue: function( newValue ) {
+ if ( newValue === undefined ) {
+ newValue = this.options.value;
+ }
+
+ this.indeterminate = newValue === false;
+
+ // Sanitize value
+ if ( typeof newValue !== "number" ) {
+ newValue = 0;
+ }
+
+ return this.indeterminate ? false :
+ Math.min( this.options.max, Math.max( this.min, newValue ) );
+ },
+
+ _setOptions: function( options ) {
+
+ // Ensure "value" option is set after other values (like max)
+ var value = options.value;
+ delete options.value;
+
+ this._super( options );
+
+ this.options.value = this._constrainedValue( value );
+ this._refreshValue();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "max" ) {
+
+ // Don't allow a max less than min
+ value = Math.max( this.min, value );
+ }
+ this._super( key, value );
+ },
+
+ _setOptionDisabled: function( value ) {
+ this._super( value );
+
+ this.element.attr( "aria-disabled", value );
+ this._toggleClass( null, "ui-state-disabled", !!value );
+ },
+
+ _percentage: function() {
+ return this.indeterminate ?
+ 100 :
+ 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+ },
+
+ _refreshValue: function() {
+ var value = this.options.value,
+ percentage = this._percentage();
+
+ this.valueDiv
+ .toggle( this.indeterminate || value > this.min )
+ .width( percentage.toFixed( 0 ) + "%" );
+
+ this
+ ._toggleClass( this.valueDiv, "ui-progressbar-complete", null,
+ value === this.options.max )
+ ._toggleClass( "ui-progressbar-indeterminate", null, this.indeterminate );
+
+ if ( this.indeterminate ) {
+ this.element.removeAttr( "aria-valuenow" );
+ if ( !this.overlayDiv ) {
+ this.overlayDiv = $( "<div>" ).appendTo( this.valueDiv );
+ this._addClass( this.overlayDiv, "ui-progressbar-overlay" );
+ }
+ } else {
+ this.element.attr( {
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": value
+ } );
+ if ( this.overlayDiv ) {
+ this.overlayDiv.remove();
+ this.overlayDiv = null;
+ }
+ }
+
+ if ( this.oldValue !== value ) {
+ this.oldValue = value;
+ this._trigger( "change" );
+ }
+ if ( value === this.options.max ) {
+ this._trigger( "complete" );
+ }
+ }
+} );
+
+
+/*!
+ * jQuery UI Selectable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Selectable
+//>>group: Interactions
+//>>description: Allows groups of elements to be selected with the mouse.
+//>>docs: http://api.jqueryui.com/selectable/
+//>>demos: http://jqueryui.com/selectable/
+//>>css.structure: ../../themes/base/selectable.css
+
+
+
+var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {
+ version: "1.12.1",
+ options: {
+ appendTo: "body",
+ autoRefresh: true,
+ distance: 0,
+ filter: "*",
+ tolerance: "touch",
+
+ // Callbacks
+ selected: null,
+ selecting: null,
+ start: null,
+ stop: null,
+ unselected: null,
+ unselecting: null
+ },
+ _create: function() {
+ var that = this;
+
+ this._addClass( "ui-selectable" );
+
+ this.dragged = false;
+
+ // Cache selectee children based on filter
+ this.refresh = function() {
+ that.elementPos = $( that.element[ 0 ] ).offset();
+ that.selectees = $( that.options.filter, that.element[ 0 ] );
+ that._addClass( that.selectees, "ui-selectee" );
+ that.selectees.each( function() {
+ var $this = $( this ),
+ selecteeOffset = $this.offset(),
+ pos = {
+ left: selecteeOffset.left - that.elementPos.left,
+ top: selecteeOffset.top - that.elementPos.top
+ };
+ $.data( this, "selectable-item", {
+ element: this,
+ $element: $this,
+ left: pos.left,
+ top: pos.top,
+ right: pos.left + $this.outerWidth(),
+ bottom: pos.top + $this.outerHeight(),
+ startselected: false,
+ selected: $this.hasClass( "ui-selected" ),
+ selecting: $this.hasClass( "ui-selecting" ),
+ unselecting: $this.hasClass( "ui-unselecting" )
+ } );
+ } );
+ };
+ this.refresh();
+
+ this._mouseInit();
+
+ this.helper = $( "<div>" );
+ this._addClass( this.helper, "ui-selectable-helper" );
+ },
+
+ _destroy: function() {
+ this.selectees.removeData( "selectable-item" );
+ this._mouseDestroy();
+ },
+
+ _mouseStart: function( event ) {
+ var that = this,
+ options = this.options;
+
+ this.opos = [ event.pageX, event.pageY ];
+ this.elementPos = $( this.element[ 0 ] ).offset();
+
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ this.selectees = $( options.filter, this.element[ 0 ] );
+
+ this._trigger( "start", event );
+
+ $( options.appendTo ).append( this.helper );
+
+ // position helper (lasso)
+ this.helper.css( {
+ "left": event.pageX,
+ "top": event.pageY,
+ "width": 0,
+ "height": 0
+ } );
+
+ if ( options.autoRefresh ) {
+ this.refresh();
+ }
+
+ this.selectees.filter( ".ui-selected" ).each( function() {
+ var selectee = $.data( this, "selectable-item" );
+ selectee.startselected = true;
+ if ( !event.metaKey && !event.ctrlKey ) {
+ that._removeClass( selectee.$element, "ui-selected" );
+ selectee.selected = false;
+ that._addClass( selectee.$element, "ui-unselecting" );
+ selectee.unselecting = true;
+
+ // selectable UNSELECTING callback
+ that._trigger( "unselecting", event, {
+ unselecting: selectee.element
+ } );
+ }
+ } );
+
+ $( event.target ).parents().addBack().each( function() {
+ var doSelect,
+ selectee = $.data( this, "selectable-item" );
+ if ( selectee ) {
+ doSelect = ( !event.metaKey && !event.ctrlKey ) ||
+ !selectee.$element.hasClass( "ui-selected" );
+ that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
+ ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
+ selectee.unselecting = !doSelect;
+ selectee.selecting = doSelect;
+ selectee.selected = doSelect;
+
+ // selectable (UN)SELECTING callback
+ if ( doSelect ) {
+ that._trigger( "selecting", event, {
+ selecting: selectee.element
+ } );
+ } else {
+ that._trigger( "unselecting", event, {
+ unselecting: selectee.element
+ } );
+ }
+ return false;
+ }
+ } );
+
+ },
+
+ _mouseDrag: function( event ) {
+
+ this.dragged = true;
+
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ var tmp,
+ that = this,
+ options = this.options,
+ x1 = this.opos[ 0 ],
+ y1 = this.opos[ 1 ],
+ x2 = event.pageX,
+ y2 = event.pageY;
+
+ if ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }
+ if ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }
+ this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );
+
+ this.selectees.each( function() {
+ var selectee = $.data( this, "selectable-item" ),
+ hit = false,
+ offset = {};
+
+ //prevent helper from being selected if appendTo: selectable
+ if ( !selectee || selectee.element === that.element[ 0 ] ) {
+ return;
+ }
+
+ offset.left = selectee.left + that.elementPos.left;
+ offset.right = selectee.right + that.elementPos.left;
+ offset.top = selectee.top + that.elementPos.top;
+ offset.bottom = selectee.bottom + that.elementPos.top;
+
+ if ( options.tolerance === "touch" ) {
+ hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
+ offset.bottom < y1 ) );
+ } else if ( options.tolerance === "fit" ) {
+ hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
+ offset.bottom < y2 );
+ }
+
+ if ( hit ) {
+
+ // SELECT
+ if ( selectee.selected ) {
+ that._removeClass( selectee.$element, "ui-selected" );
+ selectee.selected = false;
+ }
+ if ( selectee.unselecting ) {
+ that._removeClass( selectee.$element, "ui-unselecting" );
+ selectee.unselecting = false;
+ }
+ if ( !selectee.selecting ) {
+ that._addClass( selectee.$element, "ui-selecting" );
+ selectee.selecting = true;
+
+ // selectable SELECTING callback
+ that._trigger( "selecting", event, {
+ selecting: selectee.element
+ } );
+ }
+ } else {
+
+ // UNSELECT
+ if ( selectee.selecting ) {
+ if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {
+ that._removeClass( selectee.$element, "ui-selecting" );
+ selectee.selecting = false;
+ that._addClass( selectee.$element, "ui-selected" );
+ selectee.selected = true;
+ } else {
+ that._removeClass( selectee.$element, "ui-selecting" );
+ selectee.selecting = false;
+ if ( selectee.startselected ) {
+ that._addClass( selectee.$element, "ui-unselecting" );
+ selectee.unselecting = true;
+ }
+
+ // selectable UNSELECTING callback
+ that._trigger( "unselecting", event, {
+ unselecting: selectee.element
+ } );
+ }
+ }
+ if ( selectee.selected ) {
+ if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {
+ that._removeClass( selectee.$element, "ui-selected" );
+ selectee.selected = false;
+
+ that._addClass( selectee.$element, "ui-unselecting" );
+ selectee.unselecting = true;
+
+ // selectable UNSELECTING callback
+ that._trigger( "unselecting", event, {
+ unselecting: selectee.element
+ } );
+ }
+ }
+ }
+ } );
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+ var that = this;
+
+ this.dragged = false;
+
+ $( ".ui-unselecting", this.element[ 0 ] ).each( function() {
+ var selectee = $.data( this, "selectable-item" );
+ that._removeClass( selectee.$element, "ui-unselecting" );
+ selectee.unselecting = false;
+ selectee.startselected = false;
+ that._trigger( "unselected", event, {
+ unselected: selectee.element
+ } );
+ } );
+ $( ".ui-selecting", this.element[ 0 ] ).each( function() {
+ var selectee = $.data( this, "selectable-item" );
+ that._removeClass( selectee.$element, "ui-selecting" )
+ ._addClass( selectee.$element, "ui-selected" );
+ selectee.selecting = false;
+ selectee.selected = true;
+ selectee.startselected = true;
+ that._trigger( "selected", event, {
+ selected: selectee.element
+ } );
+ } );
+ this._trigger( "stop", event );
+
+ this.helper.remove();
+
+ return false;
+ }
+
+} );
+
+
+/*!
+ * jQuery UI Selectmenu 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Selectmenu
+//>>group: Widgets
+// jscs:disable maximumLineLength
+//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.
+// jscs:enable maximumLineLength
+//>>docs: http://api.jqueryui.com/selectmenu/
+//>>demos: http://jqueryui.com/selectmenu/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
+ version: "1.12.1",
+ defaultElement: "<select>",
+ options: {
+ appendTo: null,
+ classes: {
+ "ui-selectmenu-button-open": "ui-corner-top",
+ "ui-selectmenu-button-closed": "ui-corner-all"
+ },
+ disabled: null,
+ icons: {
+ button: "ui-icon-triangle-1-s"
+ },
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ width: false,
+
+ // Callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ select: null
+ },
+
+ _create: function() {
+ var selectmenuId = this.element.uniqueId().attr( "id" );
+ this.ids = {
+ element: selectmenuId,
+ button: selectmenuId + "-button",
+ menu: selectmenuId + "-menu"
+ };
+
+ this._drawButton();
+ this._drawMenu();
+ this._bindFormResetHandler();
+
+ this._rendered = false;
+ this.menuItems = $();
+ },
+
+ _drawButton: function() {
+ var icon,
+ that = this,
+ item = this._parseOption(
+ this.element.find( "option:selected" ),
+ this.element[ 0 ].selectedIndex
+ );
+
+ // Associate existing label with the new button
+ this.labels = this.element.labels().attr( "for", this.ids.button );
+ this._on( this.labels, {
+ click: function( event ) {
+ this.button.focus();
+ event.preventDefault();
+ }
+ } );
+
+ // Hide original select element
+ this.element.hide();
+
+ // Create button
+ this.button = $( "<span>", {
+ tabindex: this.options.disabled ? -1 : 0,
+ id: this.ids.button,
+ role: "combobox",
+ "aria-expanded": "false",
+ "aria-autocomplete": "list",
+ "aria-owns": this.ids.menu,
+ "aria-haspopup": "true",
+ title: this.element.attr( "title" )
+ } )
+ .insertAfter( this.element );
+
+ this._addClass( this.button, "ui-selectmenu-button ui-selectmenu-button-closed",
+ "ui-button ui-widget" );
+
+ icon = $( "<span>" ).appendTo( this.button );
+ this._addClass( icon, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button );
+ this.buttonItem = this._renderButtonItem( item )
+ .appendTo( this.button );
+
+ if ( this.options.width !== false ) {
+ this._resizeButton();
+ }
+
+ this._on( this.button, this._buttonEvents );
+ this.button.one( "focusin", function() {
+
+ // Delay rendering the menu items until the button receives focus.
+ // The menu may have already been rendered via a programmatic open.
+ if ( !that._rendered ) {
+ that._refreshMenu();
+ }
+ } );
+ },
+
+ _drawMenu: function() {
+ var that = this;
+
+ // Create menu
+ this.menu = $( "<ul>", {
+ "aria-hidden": "true",
+ "aria-labelledby": this.ids.button,
+ id: this.ids.menu
+ } );
+
+ // Wrap menu
+ this.menuWrap = $( "<div>" ).append( this.menu );
+ this._addClass( this.menuWrap, "ui-selectmenu-menu", "ui-front" );
+ this.menuWrap.appendTo( this._appendTo() );
+
+ // Initialize menu widget
+ this.menuInstance = this.menu
+ .menu( {
+ classes: {
+ "ui-menu": "ui-corner-bottom"
+ },
+ role: "listbox",
+ select: function( event, ui ) {
+ event.preventDefault();
+
+ // Support: IE8
+ // If the item was selected via a click, the text selection
+ // will be destroyed in IE
+ that._setSelection();
+
+ that._select( ui.item.data( "ui-selectmenu-item" ), event );
+ },
+ focus: function( event, ui ) {
+ var item = ui.item.data( "ui-selectmenu-item" );
+
+ // Prevent inital focus from firing and check if its a newly focused item
+ if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+ that._trigger( "focus", event, { item: item } );
+ if ( !that.isOpen ) {
+ that._select( item, event );
+ }
+ }
+ that.focusIndex = item.index;
+
+ that.button.attr( "aria-activedescendant",
+ that.menuItems.eq( item.index ).attr( "id" ) );
+ }
+ } )
+ .menu( "instance" );
+
+ // Don't close the menu on mouseleave
+ this.menuInstance._off( this.menu, "mouseleave" );
+
+ // Cancel the menu's collapseAll on document click
+ this.menuInstance._closeOnDocumentClick = function() {
+ return false;
+ };
+
+ // Selects often contain empty items, but never contain dividers
+ this.menuInstance._isDivider = function() {
+ return false;
+ };
+ },
+
+ refresh: function() {
+ this._refreshMenu();
+ this.buttonItem.replaceWith(
+ this.buttonItem = this._renderButtonItem(
+
+ // Fall back to an empty object in case there are no options
+ this._getSelectedItem().data( "ui-selectmenu-item" ) || {}
+ )
+ );
+ if ( this.options.width === null ) {
+ this._resizeButton();
+ }
+ },
+
+ _refreshMenu: function() {
+ var item,
+ options = this.element.find( "option" );
+
+ this.menu.empty();
+
+ this._parseOptions( options );
+ this._renderMenu( this.menu, this.items );
+
+ this.menuInstance.refresh();
+ this.menuItems = this.menu.find( "li" )
+ .not( ".ui-selectmenu-optgroup" )
+ .find( ".ui-menu-item-wrapper" );
+
+ this._rendered = true;
+
+ if ( !options.length ) {
+ return;
+ }
+
+ item = this._getSelectedItem();
+
+ // Update the menu to have the correct item focused
+ this.menuInstance.focus( null, item );
+ this._setAria( item.data( "ui-selectmenu-item" ) );
+
+ // Set disabled state
+ this._setOption( "disabled", this.element.prop( "disabled" ) );
+ },
+
+ open: function( event ) {
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ // If this is the first time the menu is being opened, render the items
+ if ( !this._rendered ) {
+ this._refreshMenu();
+ } else {
+
+ // Menu clears focus on close, reset focus to selected item
+ this._removeClass( this.menu.find( ".ui-state-active" ), null, "ui-state-active" );
+ this.menuInstance.focus( null, this._getSelectedItem() );
+ }
+
+ // If there are no options, don't open the menu
+ if ( !this.menuItems.length ) {
+ return;
+ }
+
+ this.isOpen = true;
+ this._toggleAttr();
+ this._resizeMenu();
+ this._position();
+
+ this._on( this.document, this._documentClick );
+
+ this._trigger( "open", event );
+ },
+
+ _position: function() {
+ this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+ },
+
+ close: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ this.isOpen = false;
+ this._toggleAttr();
+
+ this.range = null;
+ this._off( this.document );
+
+ this._trigger( "close", event );
+ },
+
+ widget: function() {
+ return this.button;
+ },
+
+ menuWidget: function() {
+ return this.menu;
+ },
+
+ _renderButtonItem: function( item ) {
+ var buttonItem = $( "<span>" );
+
+ this._setText( buttonItem, item.label );
+ this._addClass( buttonItem, "ui-selectmenu-text" );
+
+ return buttonItem;
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this,
+ currentOptgroup = "";
+
+ $.each( items, function( index, item ) {
+ var li;
+
+ if ( item.optgroup !== currentOptgroup ) {
+ li = $( "<li>", {
+ text: item.optgroup
+ } );
+ that._addClass( li, "ui-selectmenu-optgroup", "ui-menu-divider" +
+ ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+ " ui-state-disabled" :
+ "" ) );
+
+ li.appendTo( ul );
+
+ currentOptgroup = item.optgroup;
+ }
+
+ that._renderItemData( ul, item );
+ } );
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ var li = $( "<li>" ),
+ wrapper = $( "<div>", {
+ title: item.element.attr( "title" )
+ } );
+
+ if ( item.disabled ) {
+ this._addClass( li, null, "ui-state-disabled" );
+ }
+ this._setText( wrapper, item.label );
+
+ return li.append( wrapper ).appendTo( ul );
+ },
+
+ _setText: function( element, value ) {
+ if ( value ) {
+ element.text( value );
+ } else {
+ element.html( " " );
+ }
+ },
+
+ _move: function( direction, event ) {
+ var item, next,
+ filter = ".ui-menu-item";
+
+ if ( this.isOpen ) {
+ item = this.menuItems.eq( this.focusIndex ).parent( "li" );
+ } else {
+ item = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
+ filter += ":not(.ui-state-disabled)";
+ }
+
+ if ( direction === "first" || direction === "last" ) {
+ next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+ } else {
+ next = item[ direction + "All" ]( filter ).eq( 0 );
+ }
+
+ if ( next.length ) {
+ this.menuInstance.focus( event, next );
+ }
+ },
+
+ _getSelectedItem: function() {
+ return this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );
+ },
+
+ _toggle: function( event ) {
+ this[ this.isOpen ? "close" : "open" ]( event );
+ },
+
+ _setSelection: function() {
+ var selection;
+
+ if ( !this.range ) {
+ return;
+ }
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange( this.range );
+
+ // Support: IE8
+ } else {
+ this.range.select();
+ }
+
+ // Support: IE
+ // Setting the text selection kills the button focus in IE, but
+ // restoring the focus doesn't kill the selection.
+ this.button.focus();
+ },
+
+ _documentClick: {
+ mousedown: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" +
+ $.ui.escapeSelector( this.ids.button ) ).length ) {
+ this.close( event );
+ }
+ }
+ },
+
+ _buttonEvents: {
+
+ // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+ mousedown: function() {
+ var selection;
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ if ( selection.rangeCount ) {
+ this.range = selection.getRangeAt( 0 );
+ }
+
+ // Support: IE8
+ } else {
+ this.range = document.selection.createRange();
+ }
+ },
+
+ click: function( event ) {
+ this._setSelection();
+ this._toggle( event );
+ },
+
+ keydown: function( event ) {
+ var preventDefault = true;
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.TAB:
+ case $.ui.keyCode.ESCAPE:
+ this.close( event );
+ preventDefault = false;
+ break;
+ case $.ui.keyCode.ENTER:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ }
+ break;
+ case $.ui.keyCode.UP:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "prev", event );
+ }
+ break;
+ case $.ui.keyCode.DOWN:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "next", event );
+ }
+ break;
+ case $.ui.keyCode.SPACE:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ } else {
+ this._toggle( event );
+ }
+ break;
+ case $.ui.keyCode.LEFT:
+ this._move( "prev", event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ this._move( "next", event );
+ break;
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.PAGE_UP:
+ this._move( "first", event );
+ break;
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_DOWN:
+ this._move( "last", event );
+ break;
+ default:
+ this.menu.trigger( event );
+ preventDefault = false;
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ _selectFocusedItem: function( event ) {
+ var item = this.menuItems.eq( this.focusIndex ).parent( "li" );
+ if ( !item.hasClass( "ui-state-disabled" ) ) {
+ this._select( item.data( "ui-selectmenu-item" ), event );
+ }
+ },
+
+ _select: function( item, event ) {
+ var oldIndex = this.element[ 0 ].selectedIndex;
+
+ // Change native select element
+ this.element[ 0 ].selectedIndex = item.index;
+ this.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );
+ this._setAria( item );
+ this._trigger( "select", event, { item: item } );
+
+ if ( item.index !== oldIndex ) {
+ this._trigger( "change", event, { item: item } );
+ }
+
+ this.close( event );
+ },
+
+ _setAria: function( item ) {
+ var id = this.menuItems.eq( item.index ).attr( "id" );
+
+ this.button.attr( {
+ "aria-labelledby": id,
+ "aria-activedescendant": id
+ } );
+ this.menu.attr( "aria-activedescendant", id );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ var icon = this.button.find( "span.ui-icon" );
+ this._removeClass( icon, null, this.options.icons.button )
+ ._addClass( icon, null, value.button );
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.menuWrap.appendTo( this._appendTo() );
+ }
+
+ if ( key === "width" ) {
+ this._resizeButton();
+ }
+ },
+
+ _setOptionDisabled: function( value ) {
+ this._super( value );
+
+ this.menuInstance.option( "disabled", value );
+ this.button.attr( "aria-disabled", value );
+ this._toggleClass( this.button, null, "ui-state-disabled", value );
+
+ this.element.prop( "disabled", value );
+ if ( value ) {
+ this.button.attr( "tabindex", -1 );
+ this.close();
+ } else {
+ this.button.attr( "tabindex", 0 );
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front, dialog" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _toggleAttr: function() {
+ this.button.attr( "aria-expanded", this.isOpen );
+
+ // We can't use two _toggleClass() calls here, because we need to make sure
+ // we always remove classes first and add them second, otherwise if both classes have the
+ // same theme class, it will be removed after we add it.
+ this._removeClass( this.button, "ui-selectmenu-button-" +
+ ( this.isOpen ? "closed" : "open" ) )
+ ._addClass( this.button, "ui-selectmenu-button-" +
+ ( this.isOpen ? "open" : "closed" ) )
+ ._toggleClass( this.menuWrap, "ui-selectmenu-open", null, this.isOpen );
+
+ this.menu.attr( "aria-hidden", !this.isOpen );
+ },
+
+ _resizeButton: function() {
+ var width = this.options.width;
+
+ // For `width: false`, just remove inline style and stop
+ if ( width === false ) {
+ this.button.css( "width", "" );
+ return;
+ }
+
+ // For `width: null`, match the width of the original element
+ if ( width === null ) {
+ width = this.element.show().outerWidth();
+ this.element.hide();
+ }
+
+ this.button.outerWidth( width );
+ },
+
+ _resizeMenu: function() {
+ this.menu.outerWidth( Math.max(
+ this.button.outerWidth(),
+
+ // Support: IE10
+ // IE10 wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping
+ this.menu.width( "" ).outerWidth() + 1
+ ) );
+ },
+
+ _getCreateOptions: function() {
+ var options = this._super();
+
+ options.disabled = this.element.prop( "disabled" );
+
+ return options;
+ },
+
+ _parseOptions: function( options ) {
+ var that = this,
+ data = [];
+ options.each( function( index, item ) {
+ data.push( that._parseOption( $( item ), index ) );
+ } );
+ this.items = data;
+ },
+
+ _parseOption: function( option, index ) {
+ var optgroup = option.parent( "optgroup" );
+
+ return {
+ element: option,
+ index: index,
+ value: option.val(),
+ label: option.text(),
+ optgroup: optgroup.attr( "label" ) || "",
+ disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+ };
+ },
+
+ _destroy: function() {
+ this._unbindFormResetHandler();
+ this.menuWrap.remove();
+ this.button.remove();
+ this.element.show();
+ this.element.removeUniqueId();
+ this.labels.attr( "for", this.ids.element );
+ }
+} ] );
+
+
+/*!
+ * jQuery UI Slider 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Slider
+//>>group: Widgets
+//>>description: Displays a flexible slider with ranges and accessibility via keyboard.
+//>>docs: http://api.jqueryui.com/slider/
+//>>demos: http://jqueryui.com/slider/
+//>>css.structure: ../../themes/base/core.css
+//>>css.structure: ../../themes/base/slider.css
+//>>css.theme: ../../themes/base/theme.css
+
+
+
+var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {
+ version: "1.12.1",
+ widgetEventPrefix: "slide",
+
+ options: {
+ animate: false,
+ classes: {
+ "ui-slider": "ui-corner-all",
+ "ui-slider-handle": "ui-corner-all",
+
+ // Note: ui-widget-header isn't the most fittingly semantic framework class for this
+ // element, but worked best visually with a variety of themes
+ "ui-slider-range": "ui-corner-all ui-widget-header"
+ },
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: false,
+ step: 1,
+ value: 0,
+ values: null,
+
+ // Callbacks
+ change: null,
+ slide: null,
+ start: null,
+ stop: null
+ },
+
+ // Number of pages in a slider
+ // (how many times can you page up/down to go through the whole range)
+ numPages: 5,
+
+ _create: function() {
+ this._keySliding = false;
+ this._mouseSliding = false;
+ this._animateOff = true;
+ this._handleIndex = null;
+ this._detectOrientation();
+ this._mouseInit();
+ this._calculateNewMax();
+
+ this._addClass( "ui-slider ui-slider-" + this.orientation,
+ "ui-widget ui-widget-content" );
+
+ this._refresh();
+
+ this._animateOff = false;
+ },
+
+ _refresh: function() {
+ this._createRange();
+ this._createHandles();
+ this._setupEvents();
+ this._refreshValue();
+ },
+
+ _createHandles: function() {
+ var i, handleCount,
+ options = this.options,
+ existingHandles = this.element.find( ".ui-slider-handle" ),
+ handle = "<span tabindex='0'></span>",
+ handles = [];
+
+ handleCount = ( options.values && options.values.length ) || 1;
+
+ if ( existingHandles.length > handleCount ) {
+ existingHandles.slice( handleCount ).remove();
+ existingHandles = existingHandles.slice( 0, handleCount );
+ }
+
+ for ( i = existingHandles.length; i < handleCount; i++ ) {
+ handles.push( handle );
+ }
+
+ this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+ this._addClass( this.handles, "ui-slider-handle", "ui-state-default" );
+
+ this.handle = this.handles.eq( 0 );
+
+ this.handles.each( function( i ) {
+ $( this )
+ .data( "ui-slider-handle-index", i )
+ .attr( "tabIndex", 0 );
+ } );
+ },
+
+ _createRange: function() {
+ var options = this.options;
+
+ if ( options.range ) {
+ if ( options.range === true ) {
+ if ( !options.values ) {
+ options.values = [ this._valueMin(), this._valueMin() ];
+ } else if ( options.values.length && options.values.length !== 2 ) {
+ options.values = [ options.values[ 0 ], options.values[ 0 ] ];
+ } else if ( $.isArray( options.values ) ) {
+ options.values = options.values.slice( 0 );
+ }
+ }
+
+ if ( !this.range || !this.range.length ) {
+ this.range = $( "<div>" )
+ .appendTo( this.element );
+
+ this._addClass( this.range, "ui-slider-range" );
+ } else {
+ this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" );
+
+ // Handle range switching from true to min/max
+ this.range.css( {
+ "left": "",
+ "bottom": ""
+ } );
+ }
+ if ( options.range === "min" || options.range === "max" ) {
+ this._addClass( this.range, "ui-slider-range-" + options.range );
+ }
+ } else {
+ if ( this.range ) {
+ this.range.remove();
+ }
+ this.range = null;
+ }
+ },
+
+ _setupEvents: function() {
+ this._off( this.handles );
+ this._on( this.handles, this._handleEvents );
+ this._hoverable( this.handles );
+ this._focusable( this.handles );
+ },
+
+ _destroy: function() {
+ this.handles.remove();
+ if ( this.range ) {
+ this.range.remove();
+ }
+
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function( event ) {
+ var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+ that = this,
+ o = this.options;
+
+ if ( o.disabled ) {
+ return false;
+ }
+
+ this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ };
+ this.elementOffset = this.element.offset();
+
+ position = { x: event.pageX, y: event.pageY };
+ normValue = this._normValueFromMouse( position );
+ distance = this._valueMax() - this._valueMin() + 1;
+ this.handles.each( function( i ) {
+ var thisDistance = Math.abs( normValue - that.values( i ) );
+ if ( ( distance > thisDistance ) ||
+ ( distance === thisDistance &&
+ ( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {
+ distance = thisDistance;
+ closestHandle = $( this );
+ index = i;
+ }
+ } );
+
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return false;
+ }
+ this._mouseSliding = true;
+
+ this._handleIndex = index;
+
+ this._addClass( closestHandle, null, "ui-state-active" );
+ closestHandle.trigger( "focus" );
+
+ offset = closestHandle.offset();
+ mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+ this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+ left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+ top: event.pageY - offset.top -
+ ( closestHandle.height() / 2 ) -
+ ( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) -
+ ( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) +
+ ( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 )
+ };
+
+ if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+ this._slide( event, index, normValue );
+ }
+ this._animateOff = true;
+ return true;
+ },
+
+ _mouseStart: function() {
+ return true;
+ },
+
+ _mouseDrag: function( event ) {
+ var position = { x: event.pageX, y: event.pageY },
+ normValue = this._normValueFromMouse( position );
+
+ this._slide( event, this._handleIndex, normValue );
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+ this._removeClass( this.handles, null, "ui-state-active" );
+ this._mouseSliding = false;
+
+ this._stop( event, this._handleIndex );
+ this._change( event, this._handleIndex );
+
+ this._handleIndex = null;
+ this._clickOffset = null;
+ this._animateOff = false;
+
+ return false;
+ },
+
+ _detectOrientation: function() {
+ this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+ },
+
+ _normValueFromMouse: function( position ) {
+ var pixelTotal,
+ pixelMouse,
+ percentMouse,
+ valueTotal,
+ valueMouse;
+
+ if ( this.orientation === "horizontal" ) {
+ pixelTotal = this.elementSize.width;
+ pixelMouse = position.x - this.elementOffset.left -
+ ( this._clickOffset ? this._clickOffset.left : 0 );
+ } else {
+ pixelTotal = this.elementSize.height;
+ pixelMouse = position.y - this.elementOffset.top -
+ ( this._clickOffset ? this._clickOffset.top : 0 );
+ }
+
+ percentMouse = ( pixelMouse / pixelTotal );
+ if ( percentMouse > 1 ) {
+ percentMouse = 1;
+ }
+ if ( percentMouse < 0 ) {
+ percentMouse = 0;
+ }
+ if ( this.orientation === "vertical" ) {
+ percentMouse = 1 - percentMouse;
+ }
+
+ valueTotal = this._valueMax() - this._valueMin();
+ valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+ return this._trimAlignValue( valueMouse );
+ },
+
+ _uiHash: function( index, value, values ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ handleIndex: index,
+ value: value !== undefined ? value : this.value()
+ };
+
+ if ( this._hasMultipleValues() ) {
+ uiHash.value = value !== undefined ? value : this.values( index );
+ uiHash.values = values || this.values();
+ }
+
+ return uiHash;
+ },
+
+ _hasMultipleValues: function() {
+ return this.options.values && this.options.values.length;
+ },
+
+ _start: function( event, index ) {
+ return this._trigger( "start", event, this._uiHash( index ) );
+ },
+
+ _slide: function( event, index, newVal ) {
+ var allowed, otherVal,
+ currentValue = this.value(),
+ newValues = this.values();
+
+ if ( this._hasMultipleValues() ) {
+ otherVal = this.values( index ? 0 : 1 );
+ currentValue = this.values( index );
+
+ if ( this.options.values.length === 2 && this.options.range === true ) {
+ newVal = index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );
+ }
+
+ newValues[ index ] = newVal;
+ }
+
+ if ( newVal === currentValue ) {
+ return;
+ }
+
+ allowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) );
+
+ // A slide can be canceled by returning false from the slide callback
+ if ( allowed === false ) {
+ return;
+ }
+
+ if ( this._hasMultipleValues() ) {
+ this.values( index, newVal );
+ } else {
+ this.value( newVal );
+ }
+ },
+
+ _stop: function( event, index ) {
+ this._trigger( "stop", event, this._uiHash( index ) );
+ },
+
+ _change: function( event, index ) {
+ if ( !this._keySliding && !this._mouseSliding ) {
+
+ //store the last changed value index for reference when handles overlap
+ this._lastChangedValue = index;
+ this._trigger( "change", event, this._uiHash( index ) );
+ }
+ },
+
+ value: function( newValue ) {
+ if ( arguments.length ) {
+ this.options.value = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, 0 );
+ return;
+ }
+
+ return this._value();
+ },
+
+ values: function( index, newValue ) {
+ var vals,
+ newValues,
+ i;
+
+ if ( arguments.length > 1 ) {
+ this.options.values[ index ] = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, index );
+ return;
+ }
+
+ if ( arguments.length ) {
+ if ( $.isArray( arguments[ 0 ] ) ) {
+ vals = this.options.values;
+ newValues = arguments[ 0 ];
+ for ( i = 0; i < vals.length; i += 1 ) {
+ vals[ i ] = this._trimAlignValue( newValues[ i ] );
+ this._change( null, i );
+ }
+ this._refreshValue();
+ } else {
+ if ( this._hasMultipleValues() ) {
+ return this._values( index );
+ } else {
+ return this.value();
+ }
+ }
+ } else {
+ return this._values();
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var i,
+ valsLength = 0;
+
+ if ( key === "range" && this.options.range === true ) {
+ if ( value === "min" ) {
+ this.options.value = this._values( 0 );
+ this.options.values = null;
+ } else if ( value === "max" ) {
+ this.options.value = this._values( this.options.values.length - 1 );
+ this.options.values = null;
+ }
+ }
+
+ if ( $.isArray( this.options.values ) ) {
+ valsLength = this.options.values.length;
+ }
+
+ this._super( key, value );
+
+ switch ( key ) {
+ case "orientation":
+ this._detectOrientation();
+ this._removeClass( "ui-slider-horizontal ui-slider-vertical" )
+ ._addClass( "ui-slider-" + this.orientation );
+ this._refreshValue();
+ if ( this.options.range ) {
+ this._refreshRange( value );
+ }
+
+ // Reset positioning from previous orientation
+ this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
+ break;
+ case "value":
+ this._animateOff = true;
+ this._refreshValue();
+ this._change( null, 0 );
+ this._animateOff = false;
+ break;
+ case "values":
+ this._animateOff = true;
+ this._refreshValue();
+
+ // Start from the last handle to prevent unreachable handles (#9046)
+ for ( i = valsLength - 1; i >= 0; i-- ) {
+ this._change( null, i );
+ }
+ this._animateOff = false;
+ break;
+ case "step":
+ case "min":
+ case "max":
+ this._animateOff = true;
+ this._calculateNewMax();
+ this._refreshValue();
+ this._animateOff = false;
+ break;
+ case "range":
+ this._animateOff = true;
+ this._refresh();
+ this._animateOff = false;
+ break;
+ }
+ },
+
+ _setOptionDisabled: function( value ) {
+ this._super( value );
+
+ this._toggleClass( null, "ui-state-disabled", !!value );
+ },
+
+ //internal value getter
+ // _value() returns value trimmed by min and max, aligned by step
+ _value: function() {
+ var val = this.options.value;
+ val = this._trimAlignValue( val );
+
+ return val;
+ },
+
+ //internal values getter
+ // _values() returns array of values trimmed by min and max, aligned by step
+ // _values( index ) returns single value trimmed by min and max, aligned by step
+ _values: function( index ) {
+ var val,
+ vals,
+ i;
+
+ if ( arguments.length ) {
+ val = this.options.values[ index ];
+ val = this._trimAlignValue( val );
+
+ return val;
+ } else if ( this._hasMultipleValues() ) {
+
+ // .slice() creates a copy of the array
+ // this copy gets trimmed by min and max and then returned
+ vals = this.options.values.slice();
+ for ( i = 0; i < vals.length; i += 1 ) {
+ vals[ i ] = this._trimAlignValue( vals[ i ] );
+ }
+
+ return vals;
+ } else {
+ return [];
+ }
+ },
+
+ // Returns the step-aligned value that val is closest to, between (inclusive) min and max
+ _trimAlignValue: function( val ) {
+ if ( val <= this._valueMin() ) {
+ return this._valueMin();
+ }
+ if ( val >= this._valueMax() ) {
+ return this._valueMax();
+ }
+ var step = ( this.options.step > 0 ) ? this.options.step : 1,
+ valModStep = ( val - this._valueMin() ) % step,
+ alignValue = val - valModStep;
+
+ if ( Math.abs( valModStep ) * 2 >= step ) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see #4124)
+ return parseFloat( alignValue.toFixed( 5 ) );
+ },
+
+ _calculateNewMax: function() {
+ var max = this.options.max,
+ min = this._valueMin(),
+ step = this.options.step,
+ aboveMin = Math.round( ( max - min ) / step ) * step;
+ max = aboveMin + min;
+ if ( max > this.options.max ) {
+
+ //If max is not divisible by step, rounding off may increase its value
+ max -= step;
+ }
+ this.max = parseFloat( max.toFixed( this._precision() ) );
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _valueMin: function() {
+ return this.options.min;
+ },
+
+ _valueMax: function() {
+ return this.max;
+ },
+
+ _refreshRange: function( orientation ) {
+ if ( orientation === "vertical" ) {
+ this.range.css( { "width": "", "left": "" } );
+ }
+ if ( orientation === "horizontal" ) {
+ this.range.css( { "height": "", "bottom": "" } );
+ }
+ },
+
+ _refreshValue: function() {
+ var lastValPercent, valPercent, value, valueMin, valueMax,
+ oRange = this.options.range,
+ o = this.options,
+ that = this,
+ animate = ( !this._animateOff ) ? o.animate : false,
+ _set = {};
+
+ if ( this._hasMultipleValues() ) {
+ this.handles.each( function( i ) {
+ valPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -
+ that._valueMin() ) * 100;
+ _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+ if ( that.options.range === true ) {
+ if ( that.orientation === "horizontal" ) {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+ left: valPercent + "%"
+ }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( {
+ width: ( valPercent - lastValPercent ) + "%"
+ }, {
+ queue: false,
+ duration: o.animate
+ } );
+ }
+ } else {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+ bottom: ( valPercent ) + "%"
+ }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( {
+ height: ( valPercent - lastValPercent ) + "%"
+ }, {
+ queue: false,
+ duration: o.animate
+ } );
+ }
+ }
+ }
+ lastValPercent = valPercent;
+ } );
+ } else {
+ value = this.value();
+ valueMin = this._valueMin();
+ valueMax = this._valueMax();
+ valPercent = ( valueMax !== valueMin ) ?
+ ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+ 0;
+ _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+ if ( oRange === "min" && this.orientation === "horizontal" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+ width: valPercent + "%"
+ }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "horizontal" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+ width: ( 100 - valPercent ) + "%"
+ }, o.animate );
+ }
+ if ( oRange === "min" && this.orientation === "vertical" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+ height: valPercent + "%"
+ }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "vertical" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
+ height: ( 100 - valPercent ) + "%"
+ }, o.animate );
+ }
+ }
+ },
+
+ _handleEvents: {
+ keydown: function( event ) {
+ var allowed, curVal, newVal, step,
+ index = $( event.target ).data( "ui-slider-handle-index" );
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_UP:
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ event.preventDefault();
+ if ( !this._keySliding ) {
+ this._keySliding = true;
+ this._addClass( $( event.target ), null, "ui-state-active" );
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return;
+ }
+ }
+ break;
+ }
+
+ step = this.options.step;
+ if ( this._hasMultipleValues() ) {
+ curVal = newVal = this.values( index );
+ } else {
+ curVal = newVal = this.value();
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ newVal = this._valueMin();
+ break;
+ case $.ui.keyCode.END:
+ newVal = this._valueMax();
+ break;
+ case $.ui.keyCode.PAGE_UP:
+ newVal = this._trimAlignValue(
+ curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+ );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ newVal = this._trimAlignValue(
+ curVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ if ( curVal === this._valueMax() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal + step );
+ break;
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ if ( curVal === this._valueMin() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal - step );
+ break;
+ }
+
+ this._slide( event, index, newVal );
+ },
+ keyup: function( event ) {
+ var index = $( event.target ).data( "ui-slider-handle-index" );
+
+ if ( this._keySliding ) {
+ this._keySliding = false;
+ this._stop( event, index );
+ this._change( event, index );
+ this._removeClass( $( event.target ), null, "ui-state-active" );
+ }
+ }
+ }
+} );
+
+
+/*!
+ * jQuery UI Sortable 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Sortable
+//>>group: Interactions
+//>>description: Enables items in a list to be sorted using the mouse.
+//>>docs: http://api.jqueryui.com/sortable/
+//>>demos: http://jqueryui.com/sortable/
+//>>css.structure: ../../themes/base/sortable.css
+
+
+
+var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {
+ version: "1.12.1",
+ widgetEventPrefix: "sort",
+ ready: false,
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: "> *",
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000,
+
+ // Callbacks
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+
+ _isOverAxis: function( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ },
+
+ _isFloating: function( item ) {
+ return ( /left|right/ ).test( item.css( "float" ) ) ||
+ ( /inline|table-cell/ ).test( item.css( "display" ) );
+ },
+
+ _create: function() {
+ this.containerCache = {};
+ this._addClass( "ui-sortable" );
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ this._setHandleClassName();
+
+ //We're ready to go
+ this.ready = true;
+
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+
+ if ( key === "handle" ) {
+ this._setHandleClassName();
+ }
+ },
+
+ _setHandleClassName: function() {
+ var that = this;
+ this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" );
+ $.each( this.items, function() {
+ that._addClass(
+ this.instance.options.handle ?
+ this.item.find( this.instance.options.handle ) :
+ this.item,
+ "ui-sortable-handle"
+ );
+ } );
+ },
+
+ _destroy: function() {
+ this._mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- ) {
+ this.items[ i ].item.removeData( this.widgetName + "-item" );
+ }
+
+ return this;
+ },
+
+ _mouseCapture: function( event, overrideHandle ) {
+ var currentItem = null,
+ validHandle = false,
+ that = this;
+
+ if ( this.reverting ) {
+ return false;
+ }
+
+ if ( this.options.disabled || this.options.type === "static"